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

424 lines
10 KiB
Plaintext

COMPILE FUNCTION Comm_Dialog_PO_No_Change(Method, Parm1)
#pragma precomp SRP_PreCompiler
/*
Commuter module for Dialog_PO_No_Change window.
02/20/2017 - David Klotz & Francois Rivard
*/
DECLARE SUBROUTINE Set_Property, End_Dialog, Set_Status, ErrMsg
DECLARE SUBROUTINE obj_Appwindow, Start_Window, Msg, Btree.Extract
DECLARE SUBROUTINE RList, obj_Tables
DECLARE SUBROUTINE Print_WO_Mat_In_Labels, Print_WMI_Labels, Print_WMO_Labels, Print_Cass_Labels
DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Popup, Send_Message, MemberOf
DECLARE FUNCTION obj_Tables
DECLARE FUNCTION Msg, Obj_WO_Step
EQU CRLF$ TO \0D0A\
$INSERT APPCOLORS
$INSERT COMPANY_EQUATES
$INSERT CUST_EPI_PART_EQUATES
$INSERT EPI_PART_EQUATES
$INSERT LSL_USERS_EQU
$INSERT MSG_EQUATES
$INSERT NOTIFICATION_EQU
$INSERT POPUP_EQUATES
$INSERT LOGICAL
$INSERT PROD_SPEC_EQU
$INSERT PROD_VER_EQUATES
$INSERT QUOTE_EQU
$INSERT QUOTE_DET_EQU
$INSERT QUOTE_SIGS_EQU
$INSERT RDS_EQUATES
$INSERT REACT_RUN_EQUATES
$INSERT SECURITY_RIGHTS_EQU
$INSERT WM_IN_EQUATES
$INSERT WM_OUT_EQUATES
$INSERT WO_LOG_EQUATES
$INSERT WO_STEP_EQU
$INSERT WO_MAT_EQUATES
$INSERT ORDER_EQU
$INSERT ORDER_DET_EQU
EQU COL$CASSETTES TO 1
EQU TARGET_ACTIVELIST$ TO 5
EQU COL$WO_PARAM_CASSETTE TO 1
EQU COL$WO_PARAM_RDS TO 2
EQU COL$WO_PARAM_LOT TO 3
EQU COL$WO_PARAM_PO TO 4
* EQU COL$WO_PARAM_HOT_LOT TO 5
ErrTitle = 'Error in Comm_Dialog_PO_No_Change'
ErrorMsg = ''
ErrCode = ''
Result = ''
BEGIN CASE
CASE Method = 'Create' ; GOSUB Create
CASE Method = 'NewPONoLF' ; GOSUB NewPONoLF
CASE Method = 'SelectAll' ; GOSUB SelectAll
CASE Method = 'ClearAll' ; GOSUB ClearAll
CASE Method = 'PrintLabels' ; GOSUB PrintLabels
CASE Method = 'Update' ; GOSUB Update
CASE Method = 'Exit' ; GOSUB Exit
CASE Method = 'Close' ; GOSUB Close
CASE 1
ErrMsg(ErrTitle:@SVM:'Unknown method ':QUOTE(Method):' passed to routine.')
END CASE
RETURN Result
* * * * * * *
Create:
* * * * * * *
obj_AppWindow('Create')
WONo = Parm1[1,@FM]
/* Initialize the window's header with the Work Order number */
Title = 'Work Order: ':WONo:' - Change PO Number'
Set_Property(@WINDOW,'TEXT',Title)
Set_Property(@WINDOW:'.WO_NO','TEXT',WONo)
GOSUB RefreshCassettesList
RETURN
**********
NewPONoLF:
**********
RETURN
************
PrintLabels:
************
RDSListCtrl = @WINDOW:'.WO_NO'
WONo = Get_Property(RDSListCtrl, 'TEXT')
IF (WONo NE '') THEN
WOSteps = XLATE('WO_LOG',WONo,WO_LOG_WO_STEP_KEY$,'X')
IF INDEX(WOSteps,@VM,1) THEN
Buttons = ''
FOR I = 1 TO COUNT(WOSteps,@VM) + (WOSteps NE '')
Buttons<I> = 'Step ':I
NEXT I
SWAP @FM WITH ',' IN Buttons
Buttons = 'B':Buttons
TypeOver = ''
TypeOver<MTEXT$> = 'Which Work Order step do you wish to print labels for?'
TypeOver<MTYPE$> = Buttons
TypeOver<MICON$> = '?'
TypeOver<MCAPTION$> = 'MultiStep WorkOrder Selection'
WOStep = Msg(@window, TypeOver)
MultiStepFlag = WOStep
END ELSE
WOStep = 1
MultiStepFlag = 0
END
IF (WOStep = 1) THEN
PSNo = XLATE('WO_STEP',WONo:'*1',WO_STEP_PROD_SPEC_ID$,'X')
ReactorType = XLATE('PROD_SPEC',PSNo,PROD_SPEC_REACTOR_TYPE$,'X')
BEGIN CASE
CASE ReactorType = 'GAN'
Print_WO_Mat_In_Labels(WONo,'')
CASE ReactorType = 'EPP' OR ReactorType = 'P'
Print_WMI_Labels(WONo,1)
Print_WMO_Labels(WONo,1)
CASE 1
RDSNos = XLATE('WO_STEP',WOSteps<1,1>,WO_STEP_RDS_KEY$,'X')
IF INDEX(RDSNos,@VM,1) THEN
TypeOver = ''
TypeOver<PDISPLAY$> = RDSNos
TypeOver<PFIELD$> = 2
TypeOver<PTYPE$> = 'K'
RDSKeys = Popup(@WINDOW,TypeOver,'WO_LOG_RTS')
END ELSE
RDSKeys = RDSNos
END
IF RDSKeys = '' THEN
ErrMsg('No RDS Numbers Selected or Work Order Not Yet Released to Production.')
END ELSE
CONVERT @VM TO @FM IN RDSKeys
Print_Cass_Labels(RDSKeys,MultiStepFlag) ;* Updated labels with Akrion Bar Codes
END
END CASE
END ELSE
Def = ""
Def<MTEXT$> = "Adjusting Step ":WOStep:" Scheduled Quantities..."
Def<MTYPE$> = "U"
MsgUp = Msg(@window, Def)
RDSNos = obj_WO_Step('AdjStepRDSQtys', WOStep:@RM:WOSteps)
IF Get_Status(errCode) THEN
ErrMsg(errCode) ;* Display error from the update
Msg(@WINDOW,MsgUp) ;* Take down the processing message
obj_AppWindow('LoadFormKeys',@WINDOW:@RM:WONo) ;* Reload the data in the form
RETURN
END
Msg(@WINDOW,MsgUp)
IF INDEX(RDSNos,@VM,1) THEN
TypeOver = ''
TypeOver<PDISPLAY$> = RDSNos
TypeOver<PFIELD$> = 2
TypeOver<PTYPE$> = 'K'
RDSKeys = Popup(@WINDOW,TypeOver,'WO_LOG_RTS')
END ELSE
RDSKeys = RDSNos
END
IF RDSKeys = '' THEN
ErrMsg('No RDS Numbers Selected or Work Order Not Yet Released to Production.')
END ELSE
CONVERT @VM TO @FM IN RDSKeys
Print_Cass_Labels(RDSKeys,MultiStepFlag) ;* Updated labels with Akrion Bar Codes
END
END
END ELSE
ErrMsg('WARNING: WO number is missing.')
END
RETURN
* * * * * * *
SelectAll:
* * * * * * *
RDSListCtrl = @WINDOW:'.RDSNOS'
SelectedItems = Get_Property(RDSListCtrl, 'SELPOS')
RDSKeyList = Get_Property(RDSListCtrl, 'LIST')
RDSListCount = COUNT(RDSKeyList,@FM) + (RDSKeyList NE '')
FOR RDSListIndex = 1 TO RDSListCount
IF NOT(Inlist(SelectedItems<2>, RDSListIndex, @VM)) THEN
Set_Property(RDSListCtrl, 'SELPOS', '1':@FM:RDSListindex)
END
NEXT RDSListIndex
RETURN
*********
ClearAll:
*********
RDSListCtrl = @WINDOW:'.RDSNOS'
SelectedItems = Get_Property(RDSListCtrl, 'SELPOS')
RDSKeyList = Get_Property(RDSListCtrl, 'LIST')
RDSListCount = COUNT(RDSKeyList,@FM) + (RDSKeyList NE '')
FOR RDSListIndex = 1 TO RDSListCount
IF Inlist(SelectedItems<2>, RDSListIndex, @VM) THEN
Set_Property(RDSListCtrl, 'SELPOS', '1':@FM:RDSListindex)
END
NEXT RDSListIndex
RETURN
*********************
RefreshCassettesList:
*********************
OPEN 'DICT.RDS' TO DictVar THEN
RDSNos = ''
Flag = ''
SearchString = 'WO':@VM:WONo:@FM
Btree.Extract(SearchString, 'RDS', DictVar, RDSNos, '', Flag)
IF Get_Status(errCode) THEN
ErrMsg(errCode)
RETURN
END
END ELSE
ErrMsg('Unable to open "DICT.RDS" for index lookup in COMM_DIALOG_PO_NO_CHANGE routine.')
RETURN
END
IF INDEX(RDSNos,@VM,1) THEN /* Sort only if two or more records are found */
RDSNos := @VM /* Need a trailer delimiter */
CONVERT @VM TO @RM IN RDSNos
CALL V119('S','','A','R',RDSNos,'') /* Sort the RDS numbers in ascending order */
CONVERT @RM TO @VM IN RDSNos
RDSNos[-1,1] = '' /* Strip previous added trailing delimiter */
END ELSE
NULL
END
OPEN 'RDS' TO RDS_Table ELSE
ErrMsg('Unable to open "RDS" for reads in COMM_DIALOG_PO_NO_CHANGE - Create Event')
RETURN
END
RDS_List = ''
RDSListCount = 0
kCnt = COUNT(RDSNos,@VM) + (RDSNos NE '')
FOR I = 1 TO kCnt
RDSNo = RDSNos<1,I>
READ RDS_Rec FROM RDS_Table,RDSNo THEN
PONo = RDS_Rec<RDS_PO$>
CassNo = RDS_Rec<RDS_CASS_NO$>
LotNo = RDS_Rec<RDS_LOT_NUM$>
OPEN 'DICT.WO_MAT' TO DictVar THEN
SearchString = 'WO_NO':@VM:WONo:@FM
WO_MAT_Keys = ''
Flag = ''
Btree.Extract(SearchString, 'WO_MAT', DictVar, WO_MAT_Keys, '', Flag)
IF Get_Status(errCode) THEN
ErrMsg(errCode)
RETURN
END
END ELSE
ErrMsg('Unable to open "DICT.WO_MAT" for index lookup in COMM_DIALOG_PO_NO_CHANGE routine.')
RETURN
END
OPEN 'WO_MAT' TO WO_MAT_Table ELSE
ErrMsg('Unable to open "WO_MAT" for reads in COMM_DIALOG_PO_NO_CHANGE - Create Event')
RETURN
END
CassetteFound = 0
CassettesCount = COUNT(WO_MAT_Keys,@VM) + (WO_MAT_Keys NE '')
FOR CassettesLoopIndex = 1 TO CassettesCount
WO_MAT_Key = WO_MAT_Keys<1, CassettesLoopIndex>
WO_MAT_Key_Cass = FIELD(WO_MAT_Key,'*',2)
IF (WO_MAT_Key_Cass = CassNo) THEN
READ WO_MAT_Rec FROM WO_MAT_Table,WO_MAT_Key THEN
IF (WO_MAT_Rec<WO_MAT_SHIP_NO$> = '') THEN
RDSListCount = RDSListCount + 1
IF (WO_MAT_Rec<WO_MAT_HOT_LOT$> = 1) THEN
HotLot = 'Hot'
END ELSE
HotLot = ''
END
RDS_List<RDSListCount> = CassNo:@VM:RDSNo:@VM:LotNo:@VM:PONo:@VM:HotLot
END
END
CassetteFound = 1
END
UNTIL CassetteFound = 1
NEXT CassettesLoopIndex
END
NEXT I
Set_Property(@WINDOW:'.RDSNOS','LIST',RDS_List)
RETURN
******
Close:
******
End_Dialog(@WINDOW,'Exit')
RETURN
*****
Exit:
*****
End_Dialog(@WINDOW,'Exit')
RETURN
*******
Update:
*******
RDSListCtrl = @WINDOW:'.WO_NO'
WONo = Get_Property(RDSListCtrl, 'TEXT')
IF (WONo NE '') THEN
NewPONumberCtrl = @WINDOW:'.NEW_PO_NO'
NewPONumber = TRIM(Get_Property(NewPONumberCtrl, 'DEFPROP'))
RDSListCtrl = @WINDOW:'.RDSNOS'
SelectedItems = Get_Property(RDSListCtrl, 'SELPOS')
RDSKeyList = Get_Property(RDSListCtrl, 'LIST')
RDSListCount = COUNT(RDSKeyList,@FM) + (RDSKeyList NE '')
SelectedItemsCount = COUNT(SelectedItems<2>,@VM) + (SelectedItems<2> NE '')
IF (SelectedItemsCount > 0) THEN
Cassettes = ''
FOR RDSListIndex = 1 TO RDSListCount
IF (Inlist(SelectedItems<2>, RDSListIndex, @VM)) THEN
Cassettes := RDSKeyList<RDSListIndex, COL$CASSETTES>:@VM
END
NEXT RDSListIndex
Cassettes[-1,1] = ''
***********************************************
* Update the RDS table with the new PO number *
***********************************************
IF (NewPONumber NE '') THEN
OPEN 'RDS' TO RDSTable ELSE
ErrMsg("ERROR! OBJ_WO_LOG :ChangePONo : Unable to open the RDS Table!")
RETURN
END
RLIST('SELECT REACT_RUN WITH WO_NO = ':QUOTE(WONo):' ',TARGET_ACTIVELIST$,'','','')
Done = 0
LOOP
READNEXT RDSNo ELSE Done = 1
UNTIL Done
READ RDSRec FROM RDSTable,RDSNo THEN
PONo = RDSRec<RDS_PO$>
RONo = XLATE('RDS', RDSNo, 'RUN_ORDER_NUM', 'X')
LOCATE RONo IN Cassettes USING @VM SETTING Pos THEN
RDSRec<RDS_PO$> = NewPONumber
WRITE RDSRec ON RDSTable,RDSNo THEN
Null
END
obj_Tables('WriteRec','RDS':@RM:RDSNo:@RM:@RM:RDSRec)
Result = 'PO Number Changed'
END
END
REPEAT
/* After making the update, refresh the LIST of cassettes */
GOSUB RefreshCassettesList
END
END ELSE
ErrMsg('INFO: A new PO number value is required.')
Set_Property(@WINDOW,'FOCUS',@WINDOW:'.NEW_PO_NO')
END
END ELSE
ErrMsg('WARNING: WO number is missing.')
END
RETURN