COMPILE FUNCTION WO_Mat_Reship(EntID,Event,Parm1,Parm2,Parm3,Parm4,Parm5) /* Commuter module for the WO_MAT_RESHIP window. ** This uses the WO_LOG table! ** 12/10/2014 John C. Henry, J.C. Henry & Co., Inc. */ DECLARE SUBROUTINE obj_Appwindow, ErrMsg, Send_Message, Set_Property, Obj_Wo_Mat, Msg, obj_Tables, RList, Print_SAP_Cass_Ship_Label, Print_Cass_Labels Declare subroutine SRP_JSON, Form_Services DECLARE FUNCTION Get_Property, obj_Tables, Send_Message, Memberof, Work_Order_Services, Error_Services, SRP_JSON $insert LOGICAL $INSERT APPCOLORS $INSERT RTI_STYLE_EQUATES $INSERT WO_MAT_EQUATES $INSERT WO_LOG_EQUATES $insert WO_STEP_EQUATES $insert RDS_EQUATES EQU CRLF$ TO \0D0A\ EQU TAB$ TO \09\ EQU TARGET_ACTIVELIST$ TO 5 EQU COL$CASS_NO TO 1 EQU COL$LOT_NO TO 2 EQU COL$QTY TO 3 EQU COL$EPI_PART_NO TO 4 EQU COL$CURR_STATUS TO 5 EQU COL$BATCH_NO TO 6 EQU COL$SAP_CASS_ID TO 7 EQU COL$SHIP_RDS_NO TO 8 EQU COL$RDS_CUST_NO TO 9 EQU COL$RDS_CUST_PN TO 10 ErrTitle = 'Error in PROD_VER Commuter PROD_VER' ErrorMsg = '' Result = '' BEGIN CASE CASE EntID = @WINDOW BEGIN CASE CASE Event = 'CLEAR' ; GOSUB Clear CASE Event = 'CREATE' ; GOSUB Create CASE Event = 'CLOSE' ; GOSUB Close END CASE CASE EntID = @WINDOW:'.CASS_NO' BEGIN CASE CASE Event = 'POSCHANGED' ; GOSUB CassPC CASE Event = 'DBLCLK' ; GOSUB CassDC END CASE Case EntID = @Window : '.WO' AND Event = 'LOSTFOCUS' ; GoSub WO.LOSTFOCUS Case EntID = @Window : '.WO' AND Event = 'CHANGED' ; GoSub WO.CHANGED CASE EntID = @WINDOW:'.POST_BUTTON' AND Event = 'CLICK' ; GOSUB PostChanges CASE EntID = @WINDOW:'.PRINT_RDS_WMO_LABELS' AND Event = 'CLICK' ; GOSUB PrintRDSWMOLabels CASE EntID = @WINDOW:'.PRINT_CASSETTE_LABELS' AND Event = 'CLICK' ; GOSUB PrintCassShipLabels CASE EntID = @WINDOW:'.RESHIP_CUST_NO' AND Event = 'LOSTFOCUS' ; GoSub UpdateCustomerName CASE 1 ErrorMsg = 'Unknown Parameters ':EntID:' - ':Event:' passed to commuter' ErrMsg(ErrorMsg) END CASE IF ErrorMsg NE '' THEN ErrMsg(ErrTitle:@SVM:ErrorMsg) END RETURN Result * * * * * * * Create: * * * * * * * obj_Appwindow('Create',@WINDOW) If Memberof(@User4, 'CONFIG_LIMITED') then Set_Property(@Window : '.POST_BUTTON', 'ENABLED', True$) Set_Property(@Window : '.PRINT_RDS_WMO_LABELS', 'ENABLED', True$) Set_Property(@Window : '.PRINT_CASSETTE_LABELS', 'ENABLED', True$) end GOSUB Refresh RETURN * * * * * * * Clear: * * * * * * * Form_Services('CloseControlMessage', EntId) RETURN * * * * * * * Refresh: * * * * * * * * 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 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 /* Reference code StatusArray = Get_Property(@WINDOW:'.PROC_STEP_NO','ARRAY') LOOP StatusVal = StatusArray[-1,1] UNTIL StatusVal NE @VM OR StatusArray = '' StatusArray[-1,1] = '' REPEAT StatCnt = COUNT(StatusArray,@VM) + (StatusArray NE '') FOR I = 1 TO StatCnt StatusVal = StatusArray<1,I> IF StatusVal[1,1] = 'I' THEN stat = Send_Message(@WINDOW:'.PROC_STEP_NO','COLOR_BY_POS',COL$PSN_STATUS,I,RED$) END IF StatusVal[1,1] = 'H' THEN stat = Send_Message(@WINDOW:'.PROC_STEP_NO','COLOR_BY_POS',COL$PSN_STATUS,I,ORANGE$) END NEXT I */ RETURN * * * * * * * Close: * * * * * * * Form_Services('CloseControlMessage', EntId) RETURN WO.LOSTFOCUS: Form_Services('CloseControlMessage', EntId) FocusControl = Get_Property(@Window, 'FOCUS') If FocusControl NE @Window : '.CLOSE' then // Focus did not go to the Close button. Validate work order. WONo = Get_Property(EntID, 'TEXT') If WONo NE '' then WorkOrder = Work_Order_Services('GetWorkOrder', WONo, False$) If Error_Services('NoError') then If SRP_JSON(objWorkOrder, 'PARSE', WorkOrder) EQ '' then Closed = SRP_JSON(objWorkOrder, 'GETVALUE', 'Closed') SRP_JSON(objWorkOrder, 'RELEASE') If Closed _NEC 'Yes' then Set_Property(EntID, 'FOCUS', True$) Message = 'Work Order ' : WONo : ' is still open. Re-shipping is only allowed after a work order has been closed.' Form_Services('DisplayControlMessage', Message, '', EntID, 'VALIDATION', 'RGB(229,20,0)') end end end end end return WO.CHANGED: Form_Services('CloseControlMessage', EntId) return UpdateCustomerName: NewCustNo = Get_Property(@Window : '.RESHIP_CUST_NO', 'TEXT') Name = Xlate('COMPANY', NewCustNo, 'CO_NAME', 'X') Set_Property(@Window : '.RESHIP_CUST_NAME', 'TEXT', Name) return * * * * * * * PostChanges: * * * * * * * Ctrls = @WINDOW:'.WO':@RM ; Props = 'DEFPROP':@RM Ctrls := @WINDOW:'.RESHIP_CUST_NO':@RM ; Props := 'DEFPROP':@RM Ctrls := @WINDOW:'.RESHIP_CUST_PART_NO':@RM ; Props := 'DEFPROP':@RM Ctrls := @WINDOW:'.RESHIP_REASON':@RM ; Props := 'DEFPROP':@RM Ctrls := @WINDOW:'.CASS_NO':@RM ; Props := 'LIST':@RM Ctrls := @WINDOW:'.RESHIP_CUST_EPI_PART_NO':@RM ; Props := 'DEFPROP':@RM Ctrls := @WINDOW:'.RESHIP_CUST_PO':@RM ; Props := 'DEFPROP':@RM Ctrls := @WINDOW:'.RESHIP_CUST_PSN':@RM ; Props := 'DEFPROP':@RM Ctrls := @WINDOW:'.RESHIP_DATE' ; Props := 'DEFPROP' Vals = Get_Property(Ctrls,Props) WONo = Vals[1,@RM] ReshipCustNo = Vals[COL2()+1,@RM] ReshipCustPartNo = Vals[COL2()+1,@RM] ReshipReason = Vals[COL2()+1,@RM] SlotList = Vals[COL2()+1,@RM] ReshipEpiPartNo = Vals[COL2()+1,@RM] ReshipCustPO = Vals[COL2()+1,@RM] ReshipCustPSN = Vals[COL2()+1,@RM] ReshipDate = Vals[COL2()+1,@RM] * Get list of selected line numbers * SlotSelection = Get_Property(@Window: '.CASS_NO','SELPOS') SelectedRows = SlotSelection<2> CONVERT @VM TO @FM in SelectedRows SelCnt = COUNT(SelectedRows,@FM) + (SelectedRows NE '') IF SelCnt = 0 THEN ErrorMsg = 'You must select at least one cassette row in order to Reship.' FocusCtrl = @Window : '.CASS_NO' END FocusCtrl = '' IF ReshipReason = '' THEN ErrorMsg = 'Reship Reason is a required field.' ; FocusCtrl = @Window : '.RESHIP_REASON' IF ReshipDate = '' THEN ErrorMsg = 'Reship Date is a required field.' ; FocusCtrl = @Window : '.RESHIP_DATE' IF ReshipCustPSN = '' THEN ErrorMsg = 'Reship Cust PSN is a required field.' ; FocusCtrl = @Window : '.RESHIP_CUST_PSN' IF ReshipCustPO = '' THEN ErrorMsg = 'Reship Cust PO is a required field.' ; FocusCtrl = @Window : '.RESHIP_CUST_PO' IF ReshipEpiPartNo = '' THEN ErrorMsg = 'Reship Epi Part No is a required field.' ; FocusCtrl = @Window : '.RESHIP_CUST_EPI_PART_NO' IF ReshipCustPartNo = '' THEN ErrorMsg = 'Reship Cust Part No is a required field.' ; FocusCtrl = @Window : '.RESHIP_CUST_PART_NO' IF ReshipCustNo = '' THEN ErrorMsg = 'Reship Cust No is a required field.' ; FocusCtrl = @Window : '.RESHIP_CUST_NO' IF WONo = '' THEN ErrorMsg = 'WO_No is a required field.' ; FocusCtrl = @Window : '.WO' WOMatKeys = '' ReshipNo = '' If ErrorMsg EQ '' then GoSub AddReship Msg(@Window, 'Finished with the re-ship process.') end else Set_Property(FocusCtrl, 'FOCUS', True$) end RETURN PrintRDSWMOLabels: WONo = Get_Property(@Window : '.WO', 'TEXT') CassList = Get_Property(@Window : '.CASS_NO', 'LIST') SlotSelection = Get_Property(@Window: '.CASS_NO','SELPOS') SelectedRows = SlotSelection<2> CONVERT @VM TO @FM in SelectedRows SelCnt = COUNT(SelectedRows,@FM) + (SelectedRows NE '') RDSNos = '' FOR I = 1 TO SelCnt RowNo = SelectedRows RDSNos := CassList : @FM Next I RDSNos[-1, 1] = '' WOSteps = XLATE('WO_LOG',WONo,WO_LOG_WO_STEP_KEY$,'X') IF INDEX(WOSteps,@VM,1) THEN MultiStepFlag = 1 END ELSE MultiStepFlag = 0 END Print_Cass_Labels(RDSNos,MultiStepFlag) return PrintCassShipLabels: WONo = Get_Property(@Window : '.WO', 'TEXT') CassList = Get_Property(@Window : '.CASS_NO', 'LIST') SlotSelection = Get_Property(@Window: '.CASS_NO','SELPOS') SelectedRows = SlotSelection<2> CONVERT @VM TO @FM in SelectedRows SelCnt = COUNT(SelectedRows,@FM) + (SelectedRows NE '') WOSteps = '' CassNos = '' RDSNos = '' WOStep = XLATE('WO_LOG',WONo,WO_LOG_WO_STEP_KEY$,'X')[-1,'B':@VM] StepNo = WOStep[-1,'B*'] FOR I = 1 TO SelCnt RowNo = SelectedRows WOSteps := StepNo : @VM CassNos := CassList : @VM RDSNos := CassList : @VM Next I WOSteps[-1, 1] = '' CassNos[-1, 1] = '' RDSNos[-1, 1] = '' Print_SAP_Cass_Ship_Label( WONo,WOSteps,CassNos,RDSNos ) return * * * * * * * CassPC: * * * * * * * DEBUG RETURN * * * * * * * CassDC: * * * * * * * RETURN AddReship: ******************** * Input Parameters * ******************** RONos = '' FOR I = 1 TO SelCnt RowNo = SelectedRows RONos := SlotList : @VM Next I RONos[-1, 1] = '' WOMatKeys = '' ReshipNo = '' ReshipSAPDelNo = '' NewPONo = ReshipCustPO NewCustNo = ReshipCustNo NewPSNNo = ReshipCustPSN NewPartNo = ReshipCustPartNo NewEpiPartNo = ReshipEpiPartNo NewShipDate = ReshipDate CONVERT ',' TO @VM IN RONos ********************** * Fix WO_MAT Records * ********************** OPEN 'WO_MAT' TO WOMatTable THEN CassettesCount = COUNT(RONos,@VM) + (RONos NE '') FOR CassettesLoopIndex = 1 TO CassettesCount WOMatKey = WONo:'*':RONos<1,CassettesLoopIndex> READ WOMatRec FROM WOMatTable,WOMatKey THEN * Msg(WOMatKey : ' Replace ' : WOMatRec : ' with ' : NewPartNo) * WOMatRec = NewPartNo /* Line #003 */ WOMatRec = NewCustNo /* Line #117 */ WOMatRec = ICONV(NewShipDate,'D4/') /* Line #115 */ WOMatRec = NewEpiPartNo /* Line #119 */ WOMatRec = NewPONo /* Line #114 */ WOMatRec = NewPartNo /* Line #118 */ Reason = WOMatRec Reason := ' ' : ReshipReason Reason = Trim(Reason) WOMatRec = Reason /* Line #116 */ obj_Tables('WriteRec','WO_MAT':@RM:WOMatKey:@RM:@RM:WOMatRec) END NEXT CassettesLoopIndex END *********************** * Fix WO_STEP Records * *********************** OPEN 'WO_STEP' TO WOStepTable THEN * WOStepKey = WONo:'*1' WOStepKey = XLATE('WO_LOG',WONo,WO_LOG_WO_STEP_KEY$,'X')[-1,'B':@VM] READ WOStepRec FROM WOStepTable,WOStepKey THEN * Msg(WOStepKey : ' Replace ' : WOStepRec : ' with ' : NewPSNNo) WOStepRec = NewPSNNo /* Line #001 */ obj_Tables('WriteRec','WO_STEP':@RM:WOStepKey:@RM:@RM:WOStepRec) END END ******************* * Fix RDS Records * ******************* OPEN 'RDS' TO RDSTable THEN Done = 0 RLIST('SELECT REACT_RUN WITH WO_NO = ':QUOTE(WONo):' ',TARGET_ACTIVELIST$,'','','') LOOP READNEXT RDSNo ELSE Done = 1 UNTIL Done READ RDSRec FROM RDSTable,RDSNo THEN PONo = RDSRec RONo = XLATE('RDS',RDSNo,'RUN_ORDER_NUM','X') LOCATE RONo IN RONos USING @VM SETTING Pos THEN * Msg('WONo: ' : WONo : ' / RDSNo: ' : RDSNo : ' / RONo: ' : RONo : ' Replace ' : RDSRec : ' with ' : NewPSNNo) RDSRec = NewPONo /* Line #008 */ RDSRec = NewCustNo /* Line #009 */ RDSRec = NewPSNNo /* Line #010 */ RDSRec = NewPartNo /* Line #114 */ obj_Tables('WriteRec','RDS':@RM:RDSNo:@RM:@RM:RDSRec) END END REPEAT END ********************** * Fix WO_LOG Records * ********************** * OPEN 'WO_LOG' TO WOLogTable THEN * WOLogKey = WONo * READ WOLogRec FROM WOLogTable,WOLogKey THEN * Msg('WOLogKey: ':WOLogKey:' Replace ' : WOLogRec : ' with ' : NewCustNo) * WOLogRec = NewCustNo /* Line #003 */ * WOLogRec = ICONV(NewShipDate,'D4/') /* Line #014 */ * WOLogRec = NewEpiPartNo /* Line #048 */ * WOLogRec = NewPONo /* Line #051 */ * WOLogRec = NewPartNo /* Line #054 */ * Notes = WOLogRec * Notes := ' ' : ReshipReason * Notes = Trim(Notes) * WOLogRec = Notes /* Line #006 */ * obj_Tables('WriteRec','WO_LOG':@RM:WOLogKey:@RM:@RM:WOLogRec) * END * END return