open-insight/LSL2/STPROC/COMM_ORDER_DET.txt
Infineon\StieberD 7762b129af pre cutover push
2024-09-04 20:33:41 -07:00

1507 lines
36 KiB
Plaintext

COMPILE FUNCTION Comm_Order_Det(Instruction, Parm1,Parm2)
/*
Commuter module for Order Detail (Order Detail) window
01/16/2004 - John C. Henry, J.C. Henry & Co., Inc.
*/
DECLARE SUBROUTINE Set_Property, Set_Status, ErrMsg, Set_Property, obj_AppWindow, Send_Event, Post_Event, Start_Window
DECLARE SUBROUTINE Btree.Extract, Extract_SI_Keys, obj_Notes, Security_Err_Msg, End_Window, obj_Order_Det, ErrMsg
DECLARE SUBROUTINE obj_WO_Log, Forward_Event, obj_Prod_Ver, obj_Post_Log
DECLARE FUNCTION Get_Property, Get_Status, Popup, Send_Message, Msg, obj_Order, Utility, obj_WO_Log, Security_Check
DECLARE FUNCTION obj_Quote, Dialog_Box
$INSERT POPUP_EQUATES
$INSERT LOGICAL
$INSERT MSG_EQUATES
$INSERT APPCOLORS
$INSERT ORDER_EQU
$INSERT ORDER_DET_EQU
$INSERT QUOTE_EQU
$INSERT WO_LOG_EQUATES
$INSERT PROD_SPEC_EQU
$INSERT QUOTE_SIGS_EQU
$INSERT NOTIFICATION_EQU
$INSERT SECURITY_RIGHTS_EQU
$INSERT ANNUAL_CONTRACTS_EQU
$INSERT EPI_PART_EQUATES
$INSERT PROD_VER_EQUATES
$INSERT CUST_EPI_PART_EQUATES
EQU CRLF$ TO \0D0A\
EQU COL$DESC TO 1
EQU COL$EPI_PN TO 2
EQU COL$SETUP_CHG TO 3
EQU COL$SRP_CHG TO 4
EQU COL$PER_WAFER TO 5
EQU COL$CUST_LOT_NO TO 1
EQU COL$CUST_LOT_QTY TO 2
ErrTitle = 'Error in Comm_Order_Det'
ErrorMsg = ''
Result = ''
BEGIN CASE
CASE Instruction = 'Create' ; GOSUB Create
CASE Instruction = 'Refresh' ; GOSUB Refresh
CASE Instruction = 'Read' ; GOSUB Read
CASE Instruction = 'Write' ; GOSUB Write
CASE Instruction = 'Clear' ; GOSUB Clear
CASE Instruction = 'Close' ; GOSUB Close
CASE Instruction = 'Cancel' ; GOSUB Cancel
CASE Instruction = 'Delete' ; GOSUB Delete
CASE Instruction = 'LUOrder' ; GOSUB LUOrder
CASE Instruction = 'LUItemNo' ; GOSUB LUItemNo
CASE Instruction = 'ItemNoGF' ; GOSUB ItemNoGF
CASE Instruction = 'LUQuote' ; GOSUB LUQuote
CASE Instruction = 'QuoteGF' ; GOSUB QuoteGF
CASE Instruction = 'QuoteLF' ; GOSUB QuoteLF
CASE Instruction = 'LUEpiPartNo' ; GOSUB LUEpiPartNo
CASE Instruction = 'LUProdVerNo' ; GOSUB LUProdVerNo
CASE Instruction = 'LUInboundPartNo' ; GOSUB LUInboundPartNo
CASE Instruction = 'LUCustSubNo' ; GOSUB LUCustSubNo
CASE Instruction = 'ViewCustEpiPart' ; GOSUB ViewCustEpiPart
CASE Instruction = 'ViewQuote' ; GOSUB ViewQuote
CASE Instruction = 'ViewEpiPN' ; GOSUB ViewEpiPN
CASE Instruction = 'EpiPnGF' ; GOSUB EpiPnGF
CASE Instruction = 'NewViewWO' ; GOSUB NewViewWO
CASE Instruction = 'QuoteChgDC' ; GOSUB QuoteChgDC
CASE Instruction = 'LUCustPN' ; GOSUB LUCustPN
CASE Instruction = 'CustPNGF' ; GOSUB CustPNGF
CASE Instruction = 'CustPNLF' ; GOSUB CustPNLF
CASE Instruction = 'LUSubPartNo' ; GOSUB LUSubPartNo
CASE Instruction = 'SubPartNoGF' ; GOSUB SubPartNoGF
CASE Instruction = 'SubPartNoLF' ; GOSUB SubPartNoLF
CASE Instruction = 'ShipDC' ; GOSUB ShipDC
CASE Instruction = 'CustLotNoPC' ; GOSUB CustLotNoPC
CASE Instruction = 'LUItemDesc' ; GOSUB LUItemDesc
CASE Instruction = 'CustLotsLF' ; GOSUB CustLotsLF
CASE Instruction = 'ItemDescGF' ; GOSUB ItemDescGF
CASE Instruction = 'ExpRxDtLF' ; GOSUB ExpRxDtLF
CASE 1
ErrorMsg = 'Unknown Instruction passed to routine'
END CASE
IF ErrorMsg NE '' THEN
ErrMsg(ErrTitle:@SVM:ErrorMsg)
END
RETURN Result
* * * * * * *
Create:
* * * * * * *
IF NOT(Security_Check('Order',READ$)) THEN
Security_Err_Msg('Order',READ$) ;* Uses same security as the Order table
End_Window(@WINDOW)
RETURN
END
obj_Appwindow('Create',@WINDOW)
* Provides compatibility with the existing messaging attachment system
IF Parm1 NE '' THEN
PassedKeys = FIELD(Parm1,'*',1)
obj_Appwindow('ViewRelated',@WINDOW:@RM:PassedKeys)
END
IOOptions = Get_Property(@WINDOW,'IOOPTIONS')
IOOptions<10> = 1 ;* Check for required fields on WRITE event
IOOptions<11> = 1 ;* Create READ event on QBF load
Set_Property(@WINDOW,'IOOPTIONS',IOOptions)
GOSUB Refresh
RETURN
* * * * * * *
Read:
* * * * * * *
OrderNo = Get_Property(@WINDOW:'.ORDER_NO','TEXT')
ItemNo = Get_Property(@WINDOW:'.ITEM_NO','TEXT')
IF RowExists('ORDER_DET',OrderNo:'*':ItemNo) THEN
IF NOT(Security_Check('Order',EDIT$)) THEN
obj_AppWindow('ReadOnly',@WINDOW) ;* disable all database controls
Set_Property(@WINDOW,'@READONLY',1)
END
END ELSE
IF NOT(Security_Check('Order',WRITE$)) THEN
Send_Event(@WINDOW,'CLEAR')
Security_Err_Msg('Order',WRITE$)
RETURN
END
END
IF Get_Property(@WINDOW:'.QUOTE_NO','DEFPROP') = '' THEN
Set_Property(@WINDOW:'.QUOTE_NO','ENABLED',1)
Set_Property(@WINDOW:'.LU_QUOTE','ENABLED',1)
END ELSE
Set_Property(@WINDOW:'.QUOTE_NO','ENABLED',-1)
Set_Property(@WINDOW:'.LU_QUOTE','ENABLED',-1)
END
GOSUB Refresh
RETURN
* * * * * * *
Write:
* * * * * * *
OrderDetKey = Get_Property(@WINDOW,'ID')
Ctrls = @WINDOW:'.EPI_PN':@RM ; Props = 'DEFPROP':@RM
Ctrls := @WINDOW:'.CUST_PN':@RM ; Props := 'DEFPROP':@RM
Ctrls := @WINDOW:'.PROD_VER_NO':@RM ; Props := 'DEFPROP':@RM
Ctrls := @WINDOW:'.CUST_PART_NO_INBOUND':@RM ; Props := 'DEFPROP':@RM
Ctrls := @WINDOW:'.CUST_SUB_PART_NO':@RM ; Props := 'DEFPROP':@RM
Ctrls := @WINDOW:'.CUST_SUB_MFR':@RM ; Props := 'DEFPROP':@RM
Ctrls := @WINDOW:'.WO_NO' ; Props := 'DEFPROP'
Vals = Get_Property(Ctrls,Props)
EpiPartNo = Vals[1,@RM]
CustPartNo = Vals[COL2()+1,@RM]
ProdVerNo = Vals[COL2()+1,@RM]
CustPNInbound = Vals[COL2()+1,@RM]
CustSubPN = Vals[COL2()+1,@RM]
CustSubMfr = Vals[COL2()+1,@RM]
WONo = Vals[COL2()+1,@RM]
IF WONo NE '' THEN
Fields = WO_LOG_CUST_PART_NO$:@VM ; Values = CustPartNo:@VM
Fields := WO_LOG_EPI_PART_NO$:@VM ; Values := EpiPartNo:@VM
Fields := WO_LOG_PROD_VER_NO$:@VM ; Values := ProdVerNo:@VM
Fields := WO_LOG_CUST_PART_INBOUND$:@VM ; Values := CustPNInbound:@VM
Fields := WO_LOG_CUST_SUB_PART_NO$:@VM ; Values := CustSubPN:@VM
Fields := WO_LOG_CUST_SUB_MFR$ ; Values := CustSubMfr
oblParms = 'WO_LOG':@RM
oblParms := WONo:@RM
oblParms := Fields:@RM
oblParms := Values
obj_Post_Log('Create',oblParms)
END
Forward_Event() ;* Write the record
Post_Event(@WINDOW,'CLOSE') ;* Close the window when the dust settles
Result = 0
RETURN
* * * * * * *
Clear:
* * * * * * *
obj_AppWindow('ReadOnly',@RM:1) ;* Reenables data bound controls
Set_Property(@WINDOW,'@READONLY',0) ;* Clear flag on window
Set_Property(@WINDOW:'.QUOTE_NO','ENABLED',1)
Set_Property(@WINDOW:'.LU_QUOTE','ENABLED',1)
GOTO Refresh
RETURN
* * * * * * *
Close:
* * * * * * *
obj_Appwindow('DetailReturn')
RETURN
* * * * * * *
Cancel:
* * * * * * *
OrderNo = Get_Property(@WINDOW:'.ORDER_NO','TEXT')
ItemNo = Get_Property(@WINDOW:'.ITEM_NO','TEXT')
IF RowExists('ORDER_DET',OrderNo:'*':ItemNo) THEN
IF Security_Check('Order',Delete$) THEN
Send_Event(@WINDOW,'WRITE')
obj_Order_Det('Cancel',OrderNo:@RM:ItemNo)
IF Get_Status(errCode) THEN ErrMsg(errCode)
END ELSE
Security_Err_Msg('Order',DELETE$)
END
obj_Appwindow(LoadFormKeys,@WINDOW:@RM:OrderNo:'*':ItemNo)
GOSUB Refresh
END
RETURN
* * * * * * *
Delete:
* * * * * * *
IF NOT(Security_Check('Order',DELETE$)) THEN
Security_Err_Msg('Order',DELETE$)
RETURN
END
Forward_Event()
obj_AppWindow('ReadOnly',@WINDOW:@RM:1) ;* Clear Read Only
Result = 0
RETURN
* * * * * * *
Refresh:
* * * * * * *
WONo = Get_Property(@WINDOW:'.WO_NO','TEXT')
IF WONo = '' THEN
Set_Property(@WINDOW:'.VIEW_WO','ENABLED','0')
END ELSE
Set_Property(@WINDOW:'.VIEW_WO','ENABLED','1')
END
ItemQty = Get_Property(@WINDOW:'.ITEM_QTY','DEFPROP')
CustLotTotal = Get_Property(@WINDOW:'.CUST_LOT_TOTAL','DEFPROP')
IF ItemQty NE '' THEN
IF CustLotTotal NE ItemQty THEN
Set_Property(@WINDOW:'.CUST_LOT_TOTAL','BACKCOLOR',RED$)
Set_Property(@WINDOW:'.CUST_LOT_TOTAL2','BACKCOLOR',RED$)
Set_Property(@WINDOW:'.CUST_LOT_NO','BACKCOLOR',YELLOW$)
END ELSE
Set_Property(@WINDOW:'.CUST_LOT_TOTAL','BACKCOLOR',GREEN$)
Set_Property(@WINDOW:'.CUST_LOT_TOTAL2','BACKCOLOR',GREEN$)
Set_Property(@WINDOW:'.CUST_LOT_NO','BACKCOLOR',GREEN$)
END
END ELSE
Set_Property(@WINDOW:'.CUST_LOT_NO','BACKCOLOR',WHITE$)
END
Ctrls = @WINDOW:'.LU_ORDER':@RM ; Props = 'ENABLED':@RM
Ctrls := @WINDOW:'.LOOKUP_ITEM':@RM ; Props := 'ENABLED':@RM
Ctrls := @WINDOW:'.VIEW_QUOTE':@RM ; Props := 'ENABLED':@RM
Ctrls := @WINDOW:'.LU_QUOTE':@RM ; Props := 'ENABLED':@RM
Ctrls := @WINDOW:'.LU_CUST_PART':@RM ; Props := 'ENABLED':@RM
Ctrls := @WINDOW:'.LU_EPI_PART_NO':@RM ; Props := 'ENABLED':@RM
Ctrls := @WINDOW:'.LU_SUB_PART_NO':@RM ; Props := 'ENABLED':@RM
Ctrls := @WINDOW:'.LU_ITEM_DESC':@RM ; Props := 'ENABLED':@RM
Ctrls := @WINDOW:'.VIEW_WO' ; Props := 'ENABLED'
IF Get_Property(@WINDOW,'@READONLY') THEN
Vals = STR('0':@RM,9) ;* ReadOnly mode - kill the buttons
END ELSE
Vals = STR('1':@RM,9) ;* Normal mode - enable the buttons
END
Vals[-1,1] = ''
Set_Property(Ctrls,Props,Vals) ;* Kill the function buttons when in view only mode
* QBF buttons
Ctrls = @WINDOW:'.QBF_FIRST_FIX':@RM ; Props = 'ENABLED':@RM
Ctrls := @WINDOW:'.QBF_PREV_FIX':@RM ; Props := 'ENABLED':@RM
Ctrls := @WINDOW:'.QBF_ABS_FIX':@RM ; Props := 'ENABLED':@RM
Ctrls := @WINDOW:'.QBF_NEXT_FIX':@RM ; Props := 'ENABLED':@RM
Ctrls := @WINDOW:'.QBF_LAST_FIX':@RM ; Props := 'ENABLED':@RM
Ctrls := @WINDOW:'.QBF_STOP_FIX' ; Props := 'ENABLED'
IF Get_Property(@WINDOW,'QBFLIST') = '' THEN
Vals = 0:@RM:0:@RM:0:@RM:0:@RM:0:@RM:0
END ELSE
Vals = 1:@RM:1:@RM:1:@RM:1:@RM:1:@RM:1
END
Set_Property(Ctrls,Props,Vals)
* Turn edit table symbolic column backgrounds to green
ETSymbolics = Get_Property(@WINDOW,'@ET_SYMBOLICS') ;* Loaded during 'Create' in obj_Appwindow
ETCtrls = ETSymbolics<1>
ETCols = ETSymbolics<2>
FOR I = 1 TO COUNT(ETCtrls,@VM) + (ETCtrls NE '')
ETCtrl = ETCtrls<1,I>
ETList = Get_Property(ETCtrl,'LIST')
FOR Line = 1 TO COUNT(ETList,@FM) + (ETList NE '')
IF ETList<Line,1> NE '' THEN
FOR N = 1 TO COUNT(ETCols<1,I>,@SVM) + (ETCols<1,I> NE '')
stat = Send_Message(ETCtrl,'COLOR_BY_POS',ETCols<1,I,N>,Line,GREEN$)
NEXT N
END
NEXT Line
NEXT I
RETURN
* * * * * * *
LUOrder:
* * * * * * *
IF NOT(ASSIGNED(Parm1)) THEN FocusControl = '' ELSE FocusControl = Parm1
IF NOT(ASSIGNED(Parm2)) THEN FocusPos = '' ELSE FocusPos = Parm2
Set_Status(0)
OrderKeys = obj_Order('Find')
IF Get_Status(errCode) THEN ErrMsg(ErrCode)
IF INDEX(OrderKeys,@VM,1) THEN
TypeOver = ''
TypeOver<PMODE$> = 'K'
TypeOver<PDISPLAY$> = OrderKeys
TypeOver<PSELECT$> = 1 ;* Single selection only
OrderKey = Popup(@WINDOW,TypeOver,'ORDER_QUERY')
END ELSE
OrderKey = OrderKeys
END
IF OrderKey NE '' THEN
obj_Appwindow('LUValReturn',OrderKey:@RM:FocusControl)
END
RETURN
* * * * * * *
ItemNoGF:
* * * * * * *
OrderNo = Get_Property(@WINDOW:'.ORDER_NO','TEXT')
ItemNo = Get_Property(@WINDOW:'.ITEM_NO','TEXT')
IF OrderNo = '' THEN RETURN
IF ItemNo NE '' THEN RETURN
* * * * * * *
LUItemNo:
* * * * * * *
IF NOT(ASSIGNED(Parm1)) THEN FocusControl = '' ELSE FocusControl = Parm1
IF NOT(ASSIGNED(Parm2)) THEN FocusPos = '' ELSE FocusPos = Parm2
OrderNo = Get_Property(@WINDOW:'.ORDER_NO','TEXT')
IF OrderNo = '' THEN RETURN
OrderDetKeys = XLATE('ORDER',OrderNo,ORDER_ORDER_DET_KEY$,'X')
IF OrderDetKeys = '' THEN
ErrMsg('No Order Detail Items on file for this Order.')
RETURN
END
IF INDEX(OrderDetKeys,@VM,1) THEN
TypeOver = ''
TypeOver<PFIELD$> = 'ITEM_NO'
TypeOver<PDISPLAY$> = OrderDetKeys
ItemNo = Popup(@WINDOW,TypeOver,'ORDER_DETAIL')
END ELSE
ItemNo = FIELD(OrderDetKeys,'*',2)
END
obj_Appwindow('LUValReturn',ItemNo:@RM:@WINDOW:'.ITEM_NO')
RETURN
* * * * * * *
LUQuote:
* * * * * * *
IF NOT(ASSIGNED(Parm1)) THEN FocusControl = '' ELSE FocusControl = Parm1
IF NOT(ASSIGNED(Parm2)) THEN FocusPos = '' ELSE FocusPos = Parm2
QuoteNo = Get_Property(@WINDOW:'.QUOTE_NO','TEXT')
IF QuoteNo NE '' THEN RETURN
OrderNo = Get_Property(@WINDOW:'.ORDER_NO','TEXT')
IF OrderNo = '' THEN RETURN
CustNo = XLATE('ORDER',OrderNo,ORDER_CUST_NO$,'X')
IF CustNo = '' THEN
ErrMsg('No Customer No found on Order!')
RETURN
END
OPEN 'DICT.QUOTE' TO DictVar THEN
SearchString = 'CUST_NO':@VM:CustNo:@FM ;* Select not closed quotes for this customer
SearchString := 'STATUS':@VM:'O':@FM
Cursor = Utility( 'CURSOR', 'H' )
Btree.Extract( SearchString, 'QUOTE', DictVar, QuoteNos, '', Flag )
IF Get_Status(errCode) THEN
ErrMsg(errCode)
Void = Utility('CURSOR',Cursor)
RETURN
END
Void = Utility('CURSOR',Cursor)
END ELSE
ErrMsg('Unable to Open DICT.QUOTE in COMM_ORDER_DET.')
RETURN
END
IF QuoteNos = '' THEN RETURN
TypeOver = ''
TypeOver<PDISPLAY$> = QuoteNos
TypeOver<PSELECT$> = 1 ;* Single select
TypeOver<PMODE$> = 'K' ;* Keylist
QuoteNo = Popup(@WINDOW,TypeOver,'QUOTES_QUERY')
IF Get_Status(errCode) THEN
ErrMsg(errCode)
RETURN
END
IF QuoteNo = '' THEN RETURN
obj_AppWindow('LUValReturn',QuoteNo:@RM:@WINDOW:'.QUOTE_NO')
RETURN
* * * * * * *
QuoteGF:
* * * * * * *
Ctrls = @WINDOW:'.ORDER_NO':@RM:@WINDOW:'.ITEM_NO':@RM:@WINDOW:'.QUOTE_NO'
Props = 'TEXT':@RM:'TEXT':@RM:'TEXT'
Vals = Get_Property(Ctrls,Props)
OrderNo = Vals[1,@RM]
ItemNo = Vals[COL2()+1,@RM]
QuoteNo = Vals[COL2()+1,@RM]
IF QuoteNo NE '' THEN RETURN
IF OrderNo = '' THEN RETURN
IF ItemNo = 1 THEN RETURN
PrevItemNo = ItemNo - 1
PrevQuoteNo = XLATE('ORDER_DET',OrderNo:'*':PrevItemNo,ORDER_DET_QUOTE_NO$,'X')
IF PrevQuoteNo NE '' THEN
Set_Property(@WINDOW:'.QUOTE_NO','TEXT',PrevQuoteNo)
Set_Property(@WINDOW:'.QUOTE_NO','SELECTION',1:@FM:65534)
END
RETURN
* * * * * * *
QuoteLF:
* * * * * * *
Ctrls = @WINDOW:'.QUOTE_NO':@RM ; Props = 'DEFPROP':@RM
Ctrls := @WINDOW:'.ORDER_NO':@RM ; Props := 'DEFPROP':@RM
Ctrls := @WINDOW:'.ITEM_NO':@RM ; Props := 'DEFPROP':@RM
Ctrls := @WINDOW:'.WO_NO':@RM ; Props := 'DEFPROP':@RM
Ctrls := @WINDOW:'.EPI_PN' ; Props := 'DEFPROP'
Vals = Get_Property(Ctrls,Props)
QuoteNo = Vals[1,@RM]
OrderNo = Vals[COL2()+1,@RM]
ItemNo = Vals[COL2()+1,@RM]
WONo = Vals[COL2()+1,@RM]
EpiPN = Vals[COL2()+1,@RM]
IF QuoteNo NE '' AND OrderNo NE '' THEN
ACNo = XLATE('ORDER',OrderNo,ORDER_AC_ID$,'X')
IF ACNo NE '' THEN
ACQuotes = XLATE('ANNUAL_CONTRACTS',ACNo,ANNUAL_CONTRACTS_QUOTE_NO$,'X')
LOCATE QuoteNo IN ACQuotes USING @VM SETTING Pos THEN
QuoteStatus = XLATE('QUOTE',QuoteNo,10,'X')
IF QuoteStatus NE 'O' THEN
ErrMsg('Quote No: ':QUOTE(QuoteNo):' is not Open and may not be used.')
Set_Property(@WINDOW:'.QUOTE_NO','FOCUS',1)
Set_Property(@WINDOW:'.QUOTE_NO','TEXT','')
RETURN
END
END ELSE
ErrMsg('Quote No: ':QUOTE(QuoteNo):' is not on the Annual Contract referenced by this Order.')
Set_Property(@WINDOW:'.QUOTE_NO','FOCUS',1)
Set_Property(@WINDOW:'.QUOTE_NO','TEXT','')
RETURN
END
TestQuote = XLATE('QUOTE',QuoteNo,'','X')
IF TestQuote = '' THEN
ErrMsg('Quote No: ':QUOTE(QuoteNo):' is not on file in the Quote Table.')
Set_Property(@WINDOW:'.QUOTE_NO','FOCUS',1)
Set_Property(@WINDOW:'.QUOTE_NO','TEXT','')
RETURN
END
END
END
OrgQuote = XLATE('ORDER_DET',OrderNo:'*':ItemNo,ORDER_DET_QUOTE_NO$,'X')
IF QuoteNo NE '' THEN
PSNo = XLATE('QUOTE',QuoteNo,QUOTE_PROC_STEP_PSN$,'X')<1,1> ;* Field is multivalued - take the first one
SuppliedBy = XLATE('PROD_SPEC',PSNo,'SUB_SUPPLIED_BY','X')
Set_Property(@WINDOW:'.SUPPLIED_BY','TEXT',SuppliedBy)
RelStamp = XLATE('WO_LOG',WONo,'REL_STAMP','X')<1>
IF RelStamp = '' THEN
IF QuoteNo NE OrgQuote AND OrgQuote NE '' THEN
IF WONo NE '' THEN
obj_WO_Log('QuoteChange',QuoteNo:@RM:WONo)
IF Get_Status(errCode) THEN
ErrMsg(errCode)
Set_Property(@WINDOW:'.QUOTE_NO','DEFPROP',OrgQuote)
END
END
END
END ELSE
IF QuoteNo NE OrgQuote AND OrgQuote NE '' THEN
ErrMsg('Work Order has been released to production.':CRLF$:'The Quote No may not be changed.')
Set_Property(@WINDOW:'.QUOTE_NO','DEFPROP',OrgQuote)
END
END
END
IF QuoteNo NE OrgQuote OR QuoteNo = '' THEN
Set_Property(@WINDOW:'.CUST_PN','DEFPROP','')
Set_Property(@WINDOW:'.CUST_PN','GOTFOCUS_VALUE','')
Set_Property(@WINDOW:'.SUB_PART_NO','DEFPROP','')
Set_Property(@WINDOW:'.SUB_PART_NO','GOTFOCUS_VALUE','')
Set_Property(@WINDOW:'.EPI_PN','DEFPROP','')
Set_Property(@WINDOW:'.EPI_PN','GOTFOCUS_VALUE','')
END
IF OrderNo NE '' AND EpiPN = '' THEN
Captive = XLATE('ORDER',OrderNo,ORDER_CAPTIVE$,'X')
IF NOT(Captive) AND QuoteNo NE '' THEN
EpiPN = 'EPI':FMT(QuoteNo,'R(0)#5')
Set_Property(@WINDOW:'.EPI_PN','DEFPROP',EpiPN)
END
END
RETURN
* * * * * * *
LUEpiPartNo:
* * * * * * *
QuoteNo = Get_Property(@WINDOW:'.QUOTE_NO','TEXT')
IF QuoteNo = '' THEN RETURN
QuoteRec = XLATE('QUOTE',QuoteNo,'','X')
EpiPartNos = QuoteRec<QUOTE_EPI_PART_NO$>
Details = QuoteRec<QUOTE_DETAIL$>
Display = ''
LineCnt = 1
DetCnt = COUNT(Details,@VM) + (Details NE '')
FOR I = 1 TO DetCnt
EpiPartNo = EpiPartNos<1,I>
Detail = Details<1,I>
IF EpiPartNos NE '' THEN
Display<1,LineCnt> = EpiPartNo:@SVM:Detail
LineCnt += 1
END
NEXT I
IF Display = '' THEN
ErrMsg('No EPI Part Numbers have been entered on Quote ':QUOTE(QuoteNo):'.')
RETURN
END
IF INDEX(Display,@VM,1) THEN
TypeOver = ''
TypeOver<PDISPLAY$> = Display
EpiPN = Popup(@WINDOW,TypeOver,'QUOTE_EPI_PARTS')
END ELSE
EpiPN = Display<1,1,1>
END
IF EpiPN NE '' THEN
Set_Property(@WINDOW:'.EPI_PN','DEFPROP',EpiPN)
END
RETURN
* * * * * * *
ViewCustEpiPart:
* * * * * * *
CustNo = Get_Property(@WINDOW:'.CUST_NO','DEFPROP')
EpiPN = Get_Property(@WINDOW:'.EPI_PN','DEFPROP')
IF CustNo = '' THEN RETURN
IF EpiPN = '' THEN RETURN
obj_AppWindow('ViewRelated','CUST_EPI_PART':@RM:CustNo:'*':EpiPN)
RETURN
* * * * * * *
ViewQuote:
* * * * * * *
QuoteNo = Get_Property(@WINDOW:'.QUOTE_NO','TEXT')
IF QuoteNo = '' THEN RETURN
obj_AppWindow('ViewRelated','QUOTE2':@RM:QuoteNo)
RETURN
* * * * * * *
ViewEpiPN:
* * * * * * *
EpiPN = Get_Property(@WINDOW:'.EPI_PN','TEXT')
IF EpiPN = '' THEN RETURN
obj_AppWindow('ViewRelated','EPI_PN':@RM:EpiPN)
RETURN
* * * * * * *
EpiPnGF:
* * * * * * *
Ctrls = @WINDOW:'.ORDER_NO':@RM ; Props = 'TEXT':@RM
Ctrls := @WINDOW:'.CUST_PN':@RM ; Props := 'TEXT':@RM
Ctrls := @WINDOW:'.EPI_PN':@RM ; Props := 'TEXT':@RM
Ctrls := @WINDOW:'.ENGINEERING_PART':@RM ; Props := 'CHECK':@RM
Ctrls := @WINDOW:'.QUOTE_NO' ; Props := 'TEXT'
Vals = Get_Property(Ctrls,Props)
OrderNo = Vals[1,@RM]
CustPN = Vals[COL2()+1,@RM]
EpiPN = Vals[COL2()+1,@RM]
EngineeringPart = Vals[COL2()+1,@RM]
QuoteNo = Vals[COL2()+1,@RM]
IF OrderNo = '' OR CustPN = '' OR EpiPN NE '' OR QuoteNo = '' THEN RETURN
Captive = XLATE('ORDER',OrderNo,ORDER_CAPTIVE$,'X')
IF Captive AND NOT(EngineeringPart) THEN
BEGIN CASE
CASE CustPN[1,10] Matches "'W'6N'IRE'"
EpiPN = CustPN[1,10]
CASE CustPN[1,12] Matches "'WEP'6N'IRE'"
EpiPN = CustPN[1,12]
CASE CustPN[1,6] Matches "6N"
EpiPN = CustPN[1,6]
CASE 1
EpiPN = 'EPI':FMT(QuoteNo,"R(0)#5")
END CASE
END ELSE
EpiPN = 'EPI':FMT(QuoteNo,"R(0)#5")
END
IF EpiPN NE '' THEN
obj_Appwindow('LUValReturn',EpiPN:@RM:@WINDOW:'.EPI_PN')
END
RETURN
* * * * * * *
LUProdVerNo:
* * * * * * *
EpiPN = Get_Property(@WINDOW:'.EPI_PN','DEFPROP')
ProdVerNo = Get_Property(@WINDOW:'.PROD_VER_NO','DEFPROP')
QuoteProcStepPSNs = Get_Property(@WINDOW:'.QUOTE_PROC_STEP','DEFPROP')<2>
LOOP
LastStepPSN = QuoteProcStepPSNs[-1,'B':@VM]
UNTIL LastStepPSN NE ''
QuoteProcStepPSNs[COL1(),99] = ''
REPEAT
PsnID = QuoteProcStepPSNs
CONVERT @VM TO '.' IN PsnID
IF EpiPN NE '' AND ProdVerNo = '' THEN
ProdVerNo = Dialog_Box('PROD_VER_SELECT',@WINDOW,EpiPN:@VM:PsnID)
IF ProdVerNo NE '' AND ProdVerNo NE 'Cancel' THEN
Set_Property(@WINDOW:'.PROD_VER_NO','DEFPROP',ProdVerNo)
Send_Event(@WINDOW:'.PROD_VER_NO','LOSTFOCUS')
ProdVerRec = XLATE('PROD_VER',ProdVerNo,'','X')
SubPartNo = ProdVerRec<PROD_VER_SUB_PART_NO$>
IF Get_Property(@WINDOW:'.SUB_PART_NO','DEFPROP') = '' AND SubPartNo NE '' THEN
Set_Property(@WINDOW:'.SUB_PART_NO','DEFPROP',SubPartNo)
END
ProdVerDesc = ProdVerRec<PROD_VER_DESC$>
IF Get_Property(@WINDOW:'.ITEM_DESC','DEFPROP') = '' AND ProdVerDesc NE '' THEN
Set_Property(@WINDOW:'.ITEM_DESC','DEFPROP',ProdVerDesc)
END
END
END
RETURN
* * * * * * *
LUInboundPartNo:
* * * * * * *
EpiPN = Get_Property(@WINDOW:'.EPI_PN','DEFPROP')
CustNo = Get_Property(@WINDOW:'.CUST_NO','DEFPROP')
CustPartNo = Get_Property(@WINDOW:'.CUST_PN','DEFPROP')
IF EpiPN = '' THEN RETURN
IF CustNo = '' THEN RETURN
IF CustPartNo = '' THEN RETURN
CustEpiPartRec = XLATE('CUST_EPI_PART',CustNo:'*':EpiPN,'','X')
CustPartNos = CustEpiPartRec<CUST_EPI_PART_CUST_PART_NO$>
CustPartRevs = CustEpiPartRec<CUST_EPI_PART_CUST_PART_REV$>
CustPartDescs = CustEpiPartRec<CUST_EPI_PART_CUST_PART_DESC$>
CustPartInboundNos = CustEpiPartRec<CUST_EPI_PART_CUST_PART_NO_INBOUND$>
LOCATE CustPartNo IN CustPartNos USING @VM SETTING Pos THEN
CustPartInboundNo = CustPartInboundNos<1,Pos>
END ELSE
PopDisplay = ''
PNCnt = COUNT(CustPartNos,@VM) + (CustPartNos NE '')
FOR I = 1 TO PNCnt
PopDisplay<1,I> = CustPartNos<1,I>:@SVM:CustPartRevs<1,I>:@SVM:CustPartDescs<1,I>:@SVM:CustPartInboundNos<1,I>
NEXT I
TypeOver = ''
TypeOver<PDISPLAY$> = PopDisplay
CustPartInboundNo = Popup(@WINDOW,TypeOver,'CUST_EPI_CUST_PARTS')<1,4>
END
IF CustPartInboundNo NE '' THEN
Set_Property(@WINDOW:'.CUST_PART_NO_INBOUND','DEFPROP',CustPartInboundNo)
END
RETURN
* * * * * * *
LUCustSubNo:
* * * * * * *
EpiPN = Get_Property(@WINDOW:'.EPI_PN','DEFPROP')
CustNo = Get_Property(@WINDOW:'.CUST_NO','DEFPROP')
IF EpiPN = '' THEN RETURN
IF CustNo = '' THEN RETURN
CustEpiPartRec = XLATE('CUST_EPI_PART',CustNo:'*':EpiPN,'','X')
SubPartNos = CustEpiPartRec<CUST_EPI_PART_SUBSTRATE_PART_NO$
SubPartMfrs = CustEpiPartRec<CUST_EPI_PART_SUBSTRATE_MFR$>
SubPNCnt = COUNT(SubPartNos,@VM) + (SubPartNos NE '')
PopDisplay = ''
FOR I = 1 TO SubPNCnt
PopDisplay<1,I> = SubPartNos<1,I>:@SVM:SubPartMfrs<1,I>
NEXT I
TypeOver = ''
TypeOver<PDISPLAY$> = PopDisplay
CustSubstrate = Popup(@WINDOW,TypeOver,'CUST_EPI_CUST_SUBSTRATES')
SubPartNo = CustSubstrate<1,1>
SubMfr = CustSubstrate<1,2>
IF SubPartNo NE '' THEN
Set_Property(@WINDOW:'.SUBSTRATE_PART_NO','DEFPROP',SubPartNo)
Set_Property(@WINDOW:'.SUBSTRATE_MFR','DEFPROP',SubMfr)
END
RETURN
* * * * * * *
NewViewWO:
* * * * * * *
WONo = Get_Property(@WINDOW:'.WO_NO','TEXT')
If WONo = '' Then
* Create a new WO_LOG record and WO_STEP record(s)
Ctrls = @WINDOW:'.ORDER_NO':@RM ; Props = 'TEXT':@RM
Ctrls := @WINDOW:'.ITEM_NO':@RM ; Props := 'TEXT':@RM
Ctrls := @WINDOW:'.QUOTE_NO' ; Props := 'TEXT'
Vals = Get_Property(Ctrls,Props)
OrderNo = Vals[1,@RM]
OrderItem = Vals[COL2()+1,@RM]
QuoteNo = Vals[COL2()+1,@RM]
IF OrderNo NE '' AND OrderItem NE '' AND QuoteNo NE '' THEN
WONo = obj_WO_Log('Create',OrderNo:@RM:OrderItem:@RM:QuoteNo)
IF Get_Status(errCode) THEN
ErrMsg(errCode)
RETURN
END
IF WONo NE '' THEN
obj_AppWindow('LUValReturn',WONo:@RM:@WINDOW:'.WO_NO')
END
END
End Else
NewForm = Xlate('APP_INFO', 'NEW_WO_FORM', '', 'X')
If NewForm then
Start_Window('NDW_WO_LOG', @Window, WONo)
end else
obj_Appwindow('ViewRelated','WO_LOG2':@RM:WONo)
end
End
RETURN
* * * * * * *
QuoteChgDC:
* * * * * * *
Ctrls = @WINDOW:'.ITEM_DESC':@RM:@WINDOW:'.UNIT_PRICE':@RM:'EPI_PN'
Props = 'TEXT':@RM:'TEXT'
Vals = Get_Property(Ctrls,Props)
ItemDesc = Vals[1,@RM]
UnitPrice = Vals[COL2()+1,@RM]
EpiPN = Vals[COL2()+1,@RM]
IF ItemDesc = '' AND UnitPrice = '' THEN
CtrlEntID = @WINDOW:'.QUOTE_CHG_DESC'
CurrPos = Get_Property(CtrlEntID,'SELPOS')
CurrCol = CurrPos<1>
CurrRow = CurrPos<2>
ChargeDesc = Get_Property(CtrlEntID,'CELLPOS',COL$DESC:@FM:CurrRow)
ChargeAmt = Get_Property(CtrlEntID,'CELLPOS',CurrCol:@FM:CurrRow)
EpiPN = Get_Property(CtrlEntID,'CELLPOS',COL$EPI_PN:@FM:CurrRow)
Vals = ChargeDesc:@RM:ChargeAmt:@RM:EpiPN
Set_Property(Ctrls,Props,Vals)
END
RETURN
* * * * * * *
CustPNGF:
* * * * * * *
CustPN = Get_Property(@WINDOW:'.CUST_PN','TEXT')
IF CustPN NE '' THEN RETURN
* * * * * * *
LUCustPN:
* * * * * * *
IF NOT(ASSIGNED(Parm1)) THEN FocusControl = '' ELSE FocusControl = Parm1
Set_Status(0)
QuoteNo = Get_Property(@WINDOW:'.QUOTE_NO','TEXT')
IF QuoteNo = '' THEN RETURN
QuoteStepPSNs = XLATE('QUOTE',QuoteNo,QUOTE_PROC_STEP_PSN$,'X')
ShipPSN = QuoteStepPSNs[-1,'B':@VM]
CustPartNos = XLATE('PROD_SPEC',ShipPSN,PROD_SPEC_CUST_PART_NO$,'X')
IF Get_Status(errCode) THEN ErrMsg(ErrCode)
IF CustPartNos = '' THEN
Resp= Msg(@WINDOW,'','NO_PART_NUMBERS')
IF Resp THEN
CustPartNos = 'Q':QuoteNo
END ELSE
RETURN
END
END
IF INDEX(CustPartNos,@VM,1) THEN
TypeOver = ''
TypeOver<PDISPLAY$> = ShipPSN
TypeOver<PSELECT$> = 1 ;* Single selection only
CustPartNo = Popup(@WINDOW,TypeOver,'CUST_PART_NO')
END ELSE
CustPartNo = CustPartNos
END
IF CustPartNo NE '' THEN
obj_Appwindow('LUValReturn',CustPartNo:@RM:FocusControl)
END
RETURN
* * * * * * *
CustPNLF:
* * * * * * *
OriginalVal = Get_Property(@WINDOW:'.CUST_PN','GOTFOCUS_VALUE')
CurrentVal = Get_Property(@WINDOW:'.CUST_PN','TEXT')
WONo = Get_Property(@WINDOW:'.WO_NO','DEFPROP')
IF CurrentVal NE OriginalVal AND OriginalVal NE '' THEN
Send_Event(@WINDOW:'.CUST_PN_DESC','CALCULATE')
Send_Event(@WINDOW:'.CUST_PN_INBOUND','CALCULATE')
QuoteNo = Get_Property(@WINDOW:'.QUOTE_NO','TEXT')
QuoteStepPSNs = XLATE('QUOTE',QuoteNo,QUOTE_PROC_STEP_PSN$,'X')
ShipPSN = QuoteStepPSNs[-1,'B':@VM]
CustPartNos = XLATE('PROD_SPEC',ShipPSN,PROD_SPEC_CUST_PART_NO$,'X')
IF Get_Status(errCode) THEN ErrMsg(ErrCode)
IF CustPartNos = '' THEN CustPartNos = 'Q':QuoteNo
LOCATE CurrentVal IN CustPartNos USING @VM SETTING Pos ELSE
ErrMsg('Invalid Customer Part Number')
Set_Property(@WINDOW:'.CUST_PN','FOCUS',1)
Set_Property(@WINDOW:'.CUST_PN','SELECTION',1:@FM:65534)
RETURN
END
MsgResult = Msg(@WINDOW,'','PART_NO_CHANGE','',OriginalVal:@FM:CurrentVal) ;* Warn user about change to Part No
IF MsgResult = CHAR(27) THEN
Set_Property(@WINDOW:'.CUST_PN','DEFPROP',OriginalVal) ;* User bailed on continuing
RETURN
END
IF WONo NE '' THEN
Def = ''
Def<MTEXT$> = 'Posting New Part Number to WO_MAT and RDS records...'
Def<MTYPE$> = 'U'
MsgUp = Msg(@WINDOW,Def)
obj_WO_Log('SetPartNo',WONo:@RM:CurrentVal:@RM:OriginalVal) ;* Change WO_Mat (and RDS) records to new P/N
IF Get_Status(errCode) THEN
* Error updating dependent records
ErrMsg(errCode)
Set_Property(@WINDOW:'.CUST_PN','DEFPROP',OriginalVal)
RETURN
END
Msg(@WINDOW,MsgUp)
END
END
RETURN
* * * * * * *
SubPartNoGF:
* * * * * * *
SubPartNo = Get_Property(@WINDOW:'.SUB_PART_NO','TEXT')
IF SubPartNo NE '' THEN RETURN
RETURN
* * * * * * *
LUSubPartNo:
* * * * * * *
IF NOT(ASSIGNED(Parm1)) THEN FocusControl = '' ELSE FocusControl = Parm1
Set_Status(0)
QuoteNo = Get_Property(@WINDOW:'.QUOTE_NO','TEXT')
IF QuoteNo = '' THEN RETURN
QuoteStepPSNs = XLATE('QUOTE',QuoteNo,QUOTE_PROC_STEP_PSN$,'X')
IF Get_Status(errCode) THEN ErrMsg(ErrCode)
IF QuoteStepPSNs = '' THEN RETURN
SubSuppliedBy = XLATE('PROD_SPEC',QuoteStepPSNs<1,1>,'SUB_SUPPLIED_BY','X')
SubPartNos = XLATE('PROD_SPEC',QuoteStepPSNs<1,1>,PROD_SPEC_SUB_PART_NUMS$,'X')
SubMfgs = XLATE('PROD_SPEC',QuoteStepPSNs<1,1>,PROD_SPEC_SUB_WAFER_MFG$,'X')
IF SubPartNos = '' THEN
ErrMsg('No Substrate Part Numbers specified in PSN ':QuoteStepPSNs<1,1>)
RETURN
END
PDisplay = ''
FOR I = 1 TO COUNT(SubPartNos,@VM) + (SubPartNos NE '')
PDisplay<1,I> = SubPartNos<1,I>:@SVM:SubMfgs<1,I>
NEXT I
TypeOver = ''
TypeOver<PDISPLAY$> = PDisplay
IF SubSuppliedBy = 'C' THEN
*TypeOver<PTYPE$> = 'R'
END
SubPartNo = PopUp(@WINDOW,TypeOver,'SUBSTRATE_PART_NO')
IF SubPartNo NE '' THEN
obj_Appwindow('LUValReturn',SubPartNo:@RM:FocusControl)
END
RETURN
* * * * * *
SubPartNoLF:
* * * * * *
SubPartNo = Get_Property(@WINDOW:'.SUB_PART_NO','TEXT')
IF SubPartNo = '' THEN RETURN
QuoteNo = Get_Property(@WINDOW:'.QUOTE_NO','TEXT')
IF QuoteNo = '' THEN RETURN
QuoteStepPSNs = XLATE('QUOTE',QuoteNo,QUOTE_PROC_STEP_PSN$,'X')
IF Get_Status(errCode) THEN ErrMsg(ErrCode)
IF QuoteStepPSNs = '' THEN RETURN
SubSuppliedBy = XLATE('PROD_SPEC',QuoteStepPSNs<1,1>,'SUB_SUPPLIED_BY','X')
SubPartNos = XLATE('PROD_SPEC',QuoteStepPSNs<1,1>,PROD_SPEC_SUB_PART_NUMS$,'X')
LOCATE SubPartNo IN SubPartNos USING @VM SETTING Dummy ELSE
ErrMsg('Substrate Part No: ':QUOTE(SubPartNo):' is not found on the Prod Spec for Quote ':QuoteNo)
Set_Property(@WINDOW:'.SUB_PART_NO','FOCUS',1)
Set_Property(@WINDOW:'.SUB_PART_NO','SELECTION',1:@FM:65534)
END
RETURN
* * * * * * *
ShipDC:
* * * * * * *
CtrlEntID = @WINDOW:'.SHIP_NO'
CurrPos = Get_Property(CtrlEntID,'SELPOS')
CurrCol = CurrPos<1>
CurrRow = CurrPos<2>
ShipNo = Get_Property(CtrlEntID,'CELLPOS',1:@FM:CurrRow) ;* Ship No is in column 1
IF ShipNo NE '' THEN
obj_AppWindow('ViewRelated','SHIPMENT':@RM:ShipNo)
END
RETURN
* * * * * * *
CustLotNoPC:
* * * * * * *
CtrlEntID = @WINDOW:'.CUST_LOT_NO'
OrderNo = Get_Property(@WINDOW:'.ORDER_NO','TEXT')
ItemNo = Get_Property(@WINDOW:'.ITEM_NO','TEXT')
OrderDetKey = OrderNo:'*':ItemNo
PrevSelPos = Get_Property(CtrlEntId,"PREVSELPOS")
PrevCol = PrevSelPos<1>
PrevRow = PrevSelPos<2>
CurrPos = Get_Property(CtrlEntId,'SELPOS')
CurrCol = CurrPos<1>
CurrRow = CurrPos<2>
ListData = Get_Property(CtrlEntId,'LIST')
ColCnt = 2 ;* Number of columns in the edit table
IF ListData<CurrRow,CurrCol> = '' THEN
ColPointer = CurrCol
LinePointer = CurrRow
* Find the first non-empty cell
LOOP
Test = ListData<LinePointer,(ColPointer) >
UNTIL Test NE '' OR (LinePointer = 0 AND ColPointer = 1)
ColPointer -= 1
IF ColPointer = 0 THEN
ColPointer = ColCnt
LinePointer -= 1
END
REPEAT
* Move one past the non empty cell
BEGIN CASE
CASE LinePointer = 0
* Empty Table
LinePointer = 1
CoilPointer = 1
CASE ColPointer = ColCnt
LinePointer += 1
ColPointer = 1
CASE 1
ColPointer += 1
END CASE
Set_Property(CtrlEntId,"SELPOS",ColPointer:@FM:LinePointer)
END
IF ListData<PrevRow,PrevCol> NE '' THEN
IF PrevCol = COL$CUST_LOT_NO THEN
LotNo = ListData<PrevRow,PrevCol>
IF INDEX(LotNo,' ',1) THEN
ListData<PrevRow,PrevCol> = TRIM(LotNo)
Set_Property(CtrlEntId,'LIST',ListData)
LotNo = TRIM(LotNo)
END
Extract_SI_Keys('ORDER_DET','CUST_LOT_NO',LotNo,OrderDetKeys) ;* Check for previous use of customer lot number in new data structure
IF OrderDetKeys NE '' THEN
LOCATE OrderDetKey IN OrderDetKeys USING @VM SETTING FPos THEN
OrderDetKeys = DELETE(OrderDetKeys,1,FPos,0) ;* Exclude the current Order Item from this check
END
IF OrderDetKeys NE '' THEN
SWAP @VM WITH ', ' IN OrderDetKeys
Message = 'Lot No ':QUOTE(LotNo):' has been used in Order Item(s) |':OrderDetKeys:'||'
Message := 'Do you wish to use this duplicate Lot Number?|'
MsgInfo = ''
MsgInfo<MTEXT$> = Message
Resp = Msg( @WINDOW, MsgInfo,'CUST_LOT_USED' )
IF Resp = CHAR(27) THEN
Set_Property(CtrlEntId,'CELLPOS','',PrevSelPos)
Set_Property(CtrlEntId,"SELPOS",PrevSelPos)
END
END
END ELSE
* Try looking in the old format Orders
Extract_SI_Keys('ORDER','LOT_NUM',LotNo,OrderNos) ;* Check for previous use of customer lot number in old data structure
IF OrderNos NE '' THEN
LOCATE OrderNo IN OrderNos USING @VM SETTING FPos THEN
OrderNos = DELETE(OrderNos,1,FPos,0) ;* Exclude the current Order No from this check
END
IF OrderNos NE '' THEN
SWAP @VM WITH ', ' IN OrderNos
Message = 'Lot No ':QUOTE(LotNo):' has been used in Order Number |':OrderNos:'||'
Message := 'Do you wish to use this duplicate Lot Number?|'
MsgInfo = ''
MsgInfo<MTEXT$> = Message
Resp = Msg( @WINDOW, MsgInfo,'CUST_LOT_USED' )
IF Resp = CHAR(27) THEN
Set_Property(CtrlEntId,'CELLPOS','',PrevSelPos)
Set_Property(CtrlEntId,"SELPOS",PrevSelPos)
END
END
END
END ;* End of checks for Lot Nos used elswhere
END
END ;* End of check for Previous Cell NE Null
GOSUB Refresh
RETURN
* * * * * * *
LUItemDesc:
* * * * * * *
IF NOT(ASSIGNED(Parm1)) THEN FocusControl = '' ELSE FocusControl = Parm1
Set_Status(0)
QuoteNo = Get_Property(@WINDOW:'.QUOTE_NO','TEXT')
IF QuoteNo = '' THEN RETURN
QuoteItemDesc = XLATE('QUOTE',QuoteNo,QUOTE_PROC_DESC$,'X')
QuoteDetail = XLATE('QUOTE',QuoteNo,QUOTE_DETAIL$,'X')
TypeOver = ''
TypeOver<PDISPLAY$> = QuoteItemDesc:@VM:QuoteDetail
IF TypeOver = '' THEN
ErrMsg('No item descriptions found on Quote')
RETURN
END
Desc = Popup(@WINDOW,TypeOver,'QUOTE_DETAIL')
IF Get_Status(errCode) THEN
ErrMsg(errCode)
END
IF Desc NE '' THEN
obj_Appwindow('LUValReturn',Desc:@RM:FocusControl)
END
RETURN
* * * * * * *
CustLotsLF:
* * * * * * *
CustLotTotal = Get_Property(@WINDOW:'.CUST_LOT_TOTAL','TEXT')
OrderNo = Get_Property(@WINDOW:'.ORDER_NO','TEXT')
ItemNo = Get_Property(@WINDOW:'.ITEM_NO','TEXT')
IF CustLotTotal = '' THEN RETURN
IF OrderNo = '' THEN RETURN
IF ItemNo = '' THEN RETURN
OrgCustLotTotal = XLATE('ORDER_DET',OrderNo:'*':ItemNo,'CUST_LOT_TOTAL','X')
IF CustLotTotal NE OrgCustLotTotal AND OrgCustLotTotal NE '' THEN
Recipients = XLATE('NOTIFICATION','WO_ENTRY',NOTIFICATION_USER_ID$,'X')
SentFrom = @USER4
Subject = 'Expected Wafers Quantity Change ':OrderNo:'*':ItemNo
Message = 'Expected Wafer Quantity was changed on this order item.'
AttachWindow = 'ORDER_DET'
AttachKey = OrderNo:'*':ItemNo
SendToGroup = ''
Parms = Recipients:@RM:SentFrom:@RM:Subject:@RM:Message:@RM:AttachWindow:@RM:AttachKey:@RM:SendToGroup
obj_Notes('Create',Parms)
IF Get_Status(errCode) THEN
ErrMsg(errCode)
END
END
RETURN
* * * * * * *
ExpRxDtLF:
* * * * * * *
OrderNo = Get_Property(@WINDOW:'.ORDER_NO','TEXT')
ItemNo = Get_Property(@WINDOW:'.ITEM_NO','TEXT')
ExpRxDt = Get_Property(@WINDOW:'.EXP_RX_DT','TEXT')
IF OrderNo = '' THEN RETURN
IF ItemNo = '' THEN RETURN
IF ExpRxDt NE '' THEN
thisRxDt = ICONV(ExpRxDt,'D')
IF thisRxDt = '' THEN
ErrorMsg ='Invalid ExpRxDt ':QUOTE(ExpRxDt):' passed to routine.'
RETURN
END
END ELSE
thisRxDt = ''
END
OrgRxDt = XLATE('ORDER_DET',OrderNo:'*':ItemNo,'EXP_RX_DT','X')
IF thisRxDt NE OrgRxDt AND OrgRxDt NE '' THEN
Recipients = XLATE('NOTIFICATION','WO_ENTRY',NOTIFICATION_USER_ID$,'X')
SentFrom = @USER4
Subject = 'Expected Material Receipt Date Change':OrderNo:'*':ItemNo
Message = 'Expected Wafer Receipt Date was changed from ':OCONV(OrgRxDt,'D4/'):' to ':ExpRxDt:'.'
AttachWindow = 'ORDER_DET'
AttachKey = OrderNo:'*':ItemNo
SendToGroup = ''
Parms = Recipients:@RM:SentFrom:@RM:Subject:@RM:Message:@RM:AttachWindow:@RM:AttachKey:@RM:SendToGroup
obj_Notes('Create',Parms)
IF Get_Status(errCode) THEN
ErrMsg(errCode)
END
END
RETURN
* * * * * * *
ItemDescGF:
* * * * * * *
ItemDesc = Get_Property(@WINDOW:'.ITEM_DESC','TEXT')
IF ItemDesc NE '' THEN RETURN
QuoteNo = Get_Property(@WINDOW:'.QUOTE_NO','TEXT')
IF QuoteNo = '' THEN RETURN
QuoteItemDesc = XLATE('QUOTE',QuoteNo,QUOTE_PROC_DESC$,'X')
Set_Property(@WINDOW:'.ITEM_DESC','TEXT',QuoteItemDesc)
Set_Property(@WINDOW:'.ITEM_DESC','SELECTION',1:@FM:65534)
RETURN