COMPILE FUNCTION Comm_Dialog_WO_Scan_Substrates(Method, Parm1) #pragma precomp SRP_PreCompiler /* Commuter module for Dialog_WO_Scan window. 08/12/2004 - John C. Henry, J.C. Henry & Co., Inc. */ DECLARE SUBROUTINE Set_Property, End_Dialog, Set_Status, ErrMsg, Extract_SI_Keys DECLARE SUBROUTINE obj_Appwindow, Start_Window, Msg DECLARE FUNCTION Get_Property, Get_Status, Dialog_Box, Send_Message $INSERT MSG_EQUATES $INSERT APPCOLORS EQU CRLF$ TO \0D0A\ EQU COL$LQP_LOT TO 1 ;* Equates for Lot_Qty... edit table controls used to scan in label data EQU COL$LQP_QTY TO 2 EQU COL$LQP_PART TO 3 ;* This is either Cust Part No OR Substrate Part Number depending on which control is visible EQU CA$ITEM_NO TO 1 ;* Equates for Checking Array passed to Scan routine EQU CA$LOT_NO TO 2 EQU CA$LOT_QTY TO 3 EQU CA$CUST_PART_NO TO 4 EQU CA$SUB_PART_NO TO 5 EQU CA$SCANNED_LOT_QTY TO 6 EQU CA$VERIFY_PART_NO TO 7 ErrTitle = 'Error in Comm_Dialog_WO_Scan' ErrorMsg = '' Result = '' BEGIN CASE CASE Method = 'Create' ; GOSUB Create CASE Method = 'OK' ; GOSUB OK CASE Method = 'Cancel' ; GOSUB Cancel CASE Method = 'LQP' ; GOSUB LQP CASE 1 ErrMsg(ErrTitle:@SVM:'Unknown method ':QUOTE(Method):' passed to routine.') END CASE RETURN Result * * * * * * * Create: * * * * * * * OrderNo = Parm1[1,@FM] CheckArray = FIELD(Parm1,@FM,2,999) Set_Property(@WINDOW:'@ORDER_NO',OrderNo) Set_Property(@WINDOW,'@CHECK_ARRAY',CheckArray) obj_AppWindow('Create') TimeStamp = OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS') Set_Property(@WINDOW:'.RX_DTM','DEFPROP',TimeStamp) Set_Property(@WINDOW,'FOCUS',@WINDOW:'.RX_DTM') Set_Property(@WINDOW:'.RX_DTM','SELECTION',1:@FM:65534) GOSUB Refresh * * * * * * * Close: * * * * * * * * * * * * * * Cancel: * * * * * * * End_Dialog(@WINDOW,'Cancel') RETURN * * * * * * * Refresh: * * * * * * * ListArray = Get_Property(CtrlEntId,'ARRAY') CheckArray = Get_Property(@WINDOW,'@CHECK_ARRAY') TotalScannedQty = SUM(ListArray) TotalOrderQty = SUM(CheckArray) Set_Property(@WINDOW:'.ORDER_QTY','TEXT',OCONV(TotalOrderQty,'MD0,')) Set_Property(@WINDOW:'.SCANNED_QTY','TEXT',OCONV(TotalScannedQty,'MD0,')) IF TotalScannedQty = TotalOrderQty THEN Set_Property(@WINDOW:'.SCANNED_QTY','BACKCOLOR',GREEN$) END ELSE Set_Property(@WINDOW:'.SCANNED_QTY','BACKCOLOR',RED$) END RETURN * * * * * * * LQP: * * * * * * * CtrlEntID = Get_Property(@WINDOW,'FOCUS') StripANSI = Get_Property(@WINDOW:'.STRIP_ANSI','CHECK') SkipSubANSI = Get_Property(@WINDOW:'.SKIP_SUBSTRATE_ANSI','CHECK') CheckArray = Get_Property(@WINDOW,'@CHECK_ARRAY') IF CtrlEntID = @WINDOW:'.LOT_QTY' THEN ColCnt = 2 ELSE ColCnt = 3 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') IF ListData = '' THEN ColPointer = CurrCol LinePointer = CurrRow * Find the first non-empty cell LOOP Test = ListData 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 NE '' THEN BEGIN CASE CASE PrevCol = COL$LQP_LOT IF StripANSI THEN RawLot = TRIM(ListData) IF RawLot[1,2] = '1T' THEN LotNo = RawLot[3,99] END ELSE TypeOver = '' TypeOver = 'B&Rescan' TypeOver = 'Scanned Code ':QUOTE(RawLot):' is not an ANSI Lot No.' Msg(@WINDOW,TypeOver,'LABEL_DATA_ERROR') Set_Property(CtrlEntId,"SELPOS",PrevSelPos) Set_Property(CtrlEntID,'INVALUE','',PrevSelPos) RETURN END END ELSE LotNo = TRIM(ListData) END IF CtrlEntID NE @WINDOW:'.LOT_QTY_SUB_PART' THEN * Don't check Customer Lot Numbers if scanning substrates LOCATE LotNo IN CheckArray USING @VM SETTING Pos ELSE * Accept or Rescan message TypeOver = '' TypeOver = 'B&Rescan' TypeOver = 'Lot No ':QUOTE(LotNo):' not found in':@TM:'Order Item Lot Numbers!' Resp = Msg(@WINDOW,TypeOver,'LABEL_DATA_ERROR') LotNo = '' ;* Clear entered field for a rescan Set_Property(CtrlEntId,"SELPOS",PrevSelPos) ;* Cursor to Lot No for a rescan END END Set_Property(CtrlEntID,'INVALUE',LotNo,PrevSelPos) CASE PrevCol = COL$LQP_QTY IF StripANSI THEN RawLotQty = ListData IF RawLotQty[1,1] = 'Q' THEN LotQty = RawLotQty[2,99] END ELSE TypeOver = '' TypeOver = 'B&Rescan' TypeOver = 'Scanned Code ':QUOTE(RawLotQty):' is not an ANSI Quantity' Msg(@WINDOW,TypeOver,'LABEL_DATA_ERROR') Set_Property(CtrlEntId,"SELPOS",PrevSelPos) Set_Property(CtrlEntID,'INVALUE','',PrevSelPos) RETURN END END ELSE LotQty = ListData END IF NOT(NUM(LotQty)) THEN * Accept or Rescan message TypeOver = '' TypeOver = 'B&Rescan' TypeOver = 'Lot Qty ':QUOTE(LotQty):' is not a number!' Resp = Msg(@WINDOW,TypeOver,'LABEL_DATA_ERROR') LotNo = '' ;* Clear entered field for a rescan Set_Property(CtrlEntId,"SELPOS",PrevSelPos) ;* Cursor to Lot No for a rescan END Set_Property(CtrlEntID,'INVALUE',LotQty,PrevSelPos) CASE PrevCol = COL$LQP_PART IF StripANSI AND NOT(SkipSubAnsi) THEN ;*************************************** RawPartNo = TRIM(ListData) IF RawPartNo[1,1] = 'P' OR RawPartNo[1,1] = 'S' THEN PartNo = RawPartNo[2,99] END ELSE TypeOver = '' TypeOver = 'B&Rescan' TypeOver = 'Scanned Code ':QUOTE(RawPartNo):' is not an ANSI Part No' Msg(@WINDOW,TypeOver,'LABEL_DATA_ERROR') Set_Property(CtrlEntId,"SELPOS",PrevSelPos) Set_Property(CtrlEntID,'INVALUE','',PrevSelPos) RETURN END END ELSE PartNo = ListData END IF CtrlEntID = @WINDOW:'.LOT_QTY_PART' THEN * Check Customer Part Numbers LOCATE PartNo IN CheckArray USING @VM SETTING Pos THEN PartNo = CheckArray END ELSE * Accept or Rescan message TypeOver = '' TypeOver = 'B&Rescan' TypeOver = 'Part No ':QUOTE(PartNo):' not found in':@TM:'Order Customer Part Numbers!' Resp = Msg(@WINDOW,TypeOver,'LABEL_DATA_ERROR') PartNo = '' ;* Clear entered field for a rescan Set_Property(CtrlEntId,"SELPOS",PrevSelPos) ;* Cursor to Lot No for a rescan END END ELSE * Check Substrate Part Numbers LOCATE PartNo IN CheckArray USING @VM SETTING Pos ELSE * Accept or Rescan message TypeOver = '' TypeOver = 'B&Rescan' TypeOver = 'Part No ':QUOTE(PartNo):' not found in':@TM:'Order Substrate Part Numbers!' Resp = Msg(@WINDOW,TypeOver,'LABEL_DATA_ERROR') PartNo = '' ;* Clear entered field for a rescan Set_Property(CtrlEntId,"SELPOS",PrevSelPos) ;* Cursor to Lot No for a rescan END END ;* End of check for Customer supplied or Inventory substrate part number Set_Property(CtrlEntID,'INVALUE',PartNo,PrevSelPos) END CASE END GOSUB Refresh RETURN * * * * * * * OK: * * * * * * * CtrlEntID = @WINDOW:'.FIELD_RADIO' CheckArray = Get_Property(@WINDOW,'@CHECK_ARRAY') ControlSelection = Get_Property(CtrlEntID,'VALUE') Ctrls = @WINDOW:'.LOT_QTY':@RM ; Props = 'VISIBLE':@RM Ctrls := @WINDOW:'.LOT_QTY_PART':@RM ; Props := 'VISIBLE':@RM Ctrls := @WINDOW:'.LOT_QTY_SUB_PART' ; Props := 'VISIBLE' BEGIN CASE CASE ControlSelection = 'LQ' ; Ctrl = @WINDOW:'.LOT_QTY' CASE ControlSelection = 'LQP' ; Ctrl = @WINDOW:'.LOT_QTY_PART' CASE ControlSelection = 'LQSP' ; Ctrl = @WINDOW:'.LOT_QTY_SUB_PART' END CASE ListData = Get_Property(Ctrl,'LIST') TimeStamp = Get_Property(@WINDOW:'.RX_DTM','TEXT') TimeStamp = ICONV(TimeStamp,'DT') IF TimeStamp = '' THEN ErrMsg('Invalid Received DateTime data entered. "mm/dd/yy hh:mm:ss" is the basic format.') RETURN END * TimeStamp = ICONV(OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS'),'DT') CheckArray = '' ;* Clear scanned lot quantities column LineCnt = 1 LOOP TestVal = ListData UNTIL TestVal = '' LotNo = TRIM(ListData) Qty = TRIM(ListData) IF ControlSelection = 'LQ' THEN LOCATE LotNo IN CheckArray USING @VM SETTING Pos THEN OrderItemNo = CheckArray CustPartNo = CheckArray SubPartNo = CheckArray CheckArray = CheckArray + Qty END ELSE * Accept or Rescan message TypeOver = '' TypeOver = 'B&Rescan' TypeOver = 'Lot No ':QUOTE(LotNo):' not found in':@TM:'Order Item Lot Numbers!' Resp = Msg(@WINDOW,TypeOver,'LABEL_DATA_ERROR') LotNo = '' ;* Clear entered field for a rescan Set_Property(CtrlEntId,"SELPOS",COL$LOT_NO:@FM:LineCnt) ;* Cursor to Lot No for a rescan RETURN END END IF ControlSelection = 'LQP' THEN CustPartNo = TRIM(ListData) LOCATE LotNo IN CheckArray USING @VM SETTING Pos THEN OrderItemNo = CheckArray SubPartNo = CheckArray CheckArray = CheckArray + Qty END ELSE * Accept or Rescan message TypeOver = '' TypeOver = 'B&Rescan' TypeOver = 'Lot No ':QUOTE(LotNo):' not found in':@TM:'Order Item Lot Numbers!' Resp = Msg(@WINDOW,TypeOver,'LABEL_DATA_ERROR') LotNo = '' ;* Clear entered field for a rescan Set_Property(CtrlEntId,"SELPOS",COL$LOT_NO:@FM:LineCnt) ;* Cursor to Lot No for a rescan RETURN END END IF ControlSelection = 'LQSP' THEN SubPartNo = TRIM(ListData) OrderItemNo = CheckArray ;* Changed 2/8/2010 from ' = 1 ' JCH CustPartNo = CheckArray END Result<1,LineCnt> = LineCnt Result<2,LineCnt> = LotNo ;* Lot No Result<3,LineCnt> = Qty Result<4,LineCnt> = CustPartNo ;* PartNo Result<5,LineCnt> = SubPartNo ;* Substrate Part No Result<6,LineCnt> = OCONV(TimeStamp,'DT') Result<7,LineCnt> = @USER4 Result<8,LineCnt> = OrderItemNo LineCnt += 1 REPEAT IF ControlSelection NE 'LQSP' THEN * Orders with Epi supplied substrates don't have any lot quantities to check against. ProblemQtyLots = '' FOR I = 1 TO COUNT(CheckArray,@VM) + (CheckArray NE '') IF (CheckArray NE '') AND (CheckArray NE CheckArray) THEN * Lot quantity mismatch ProblemQtyLots<-1> = CheckArray END NEXT I IF ProblemQtyLots NE '' THEN LineCnt = 1 LOOP TestVal = ListData UNTIL TestVal = '' LotNo = TRIM(ListData) LOCATE LotNo IN ProblemQtyLots USING @FM SETTING Pos THEN stat = Send_Message(Ctrl,'COLOR_BY_POS',0,LineCnt,RED$) ;* Flag all the lines with lot numbers having qty problems END LineCnt += 1 REPEAT ErrMsg('Lot Quantity(s) Scanned do not match Order Item Lot Quantity(s)!||Review and rescan highlighted items.') RETURN END END ELSE * END End_Dialog(@WINDOW,Result) RETURN