COMPILE FUNCTION obj_Order(Method,Parms) /* Methods for Order table 08/15/2004 JCH - Initial Coding Properties: Methods: Find() ;* Lookup Order number Ord_WOLog(OrderNo,OrderRecord) ;* Adds detail information to WO_LOG from old format Order window */ DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, Dialog_Box, obj_WO_Log, NextKey DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, Send_Dyn, obj_WO_Step, obj_WO_Log, Btree.Extract, ErrMsg DECLARE SUBROUTINE obj_Order_Det, obj_Order_Change, obj_Notes, Send_Info $INSERT MSG_EQUATES $INSERT ORDER_EQU $INSERT ORDER_DET_EQU $INSERT QUOTE_EQU $INSERT PROD_SPEC_EQU $INSERT COMPANY_EQU $INSERT WO_LOG_EQU $INSERT WO_STEP_EQU $INSERT VISION_LOG_EQUATES ;* Auto generated from dictionary builder $INSERT QUOTE_SIGS_EQU $INSERT NOTIFICATION_EQU $INSERT RDS_EQU EQU MT_ORG_QUOTE$ TO 1 ;* Quote as found in Order Line Item EQU MT_NEW_QUOTE$ TO 2 ;* Quote as corrected for multi step processes EQU MT_PSN$ TO 3 ;* PSN(s) as found in corrected quote table -> position of PSN in this list gives step number EQU MT_WO$ TO 4 ;* WO(s) from Order Line Item - items multiple WO's will always use the second (or) only wo found here ErrTitle = 'Error in Stored Procedure "obj_Order"' ErrorMsg = '' IF NOT(ASSIGNED(Method)) THEN ErrorMsg = 'Unassigned parameter "Method" passed to subroutine' IF NOT(ASSIGNED(Parms)) THEN Parms = '' IF ErrorMsg NE '' THEN Set_Status(-1,ErrTitle:@SVM:ErrorMsg) RETURN '' END Result = '' BEGIN CASE CASE Method = 'Find' ; GOSUB Find CASE Method = 'CurrStatus' ; GOSUB CurrStatus CASE Method = 'WOQuotes' ; GOSUB WOQuotes CASE Method = 'PostVision' ; GOSUB PostVision CASE Method = 'POChange' ; GOSUB POChange CASE 1 ErrorMsg = 'Unknown Method ':QUOTE(Method):' passed to routine.' END CASE IF ErrorMsg NE '' THEN Set_Status(-1,ErrTitle:@SVM:ErrorMsg) RETURN '' END RETURN Result * * * * * * * CurrStatus: * * * * * * * OrderNo = Parms[1,@RM] OrderRec = Parms[COL2()+1,@RM] IF OrderNo = '' THEN RETURN ;* No error just return IF OrderRec = '' THEN OrderRec = XLATE('ORDER',OrderNo,'','X') IF OrderRec = '' THEN RETURN ;* No error just return BEGIN CASE END CASE Result = '' RETURN * * * * * * * Find: * * * * * * * OrderKeys = Dialog_Box( 'DIALOG_ORDER_FIND', @WINDOW, '' ) Result = OrderKeys RETURN * * * * * * * WOQuotes: * * * * * * * IF NOT(ASSIGNED(OrderNo)) THEN OrderNo = Parms[1,@RM] OrderRec = Parms[COL2()+1,@RM] END ELSE OrderRec = '' END IF OrderNo = '' THEN RETURN IF OrderRec = '' THEN OrderRec = XLATE('ORDER',OrderNo,'','X') END IF OrderRec = '' THEN RETURN OrderDetKeys = OrderRec ItemNos = '' FOR I = 1 TO COUNT(OrderDetKeys,@VM) + (OrderDetKeys NE '') ItemNos<1,I> = FIELD(OrderDetKeys<1,I>,'*',2) NEXT I ItemQuoteNos = XLATE('ORDER_DET',OrderDetKeys,ORDER_DET_QUOTE_NO$,'X') ItemPromiseDts = XLATE('ORDER_DET',OrderDetKeys,ORDER_DET_PROMISE_DT$,'X') ItemWorkOrders = XLATE('ORDER_DET',OrderDetKeys,ORDER_DET_WO_NO$,'X') ItemQtys = XLATE('ORDER_DET',OrderDetKeys,ORDER_DET_ITEM_QTY$,'X') SortArray = '' QuoteResults = '' PromiseDtResults = '' ItemNoResults = '' WorkOrderResults = '' FOR I = 1 TO COUNT(ItemQuoteNos,@VM) + (ItemQuoteNos NE '') IF ItemQtys<1,I> > 0 THEN Element = ItemQuoteNos<1,I>:'*':ItemPromiseDts<1,I> LOCATE Element IN SortArray BY 'AR' USING @VM SETTING Pos THEN ItemNoResults = INSERT(ItemNoResults,1,Pos,-1,ItemNos<1,I>) END ELSE SortArray = INSERT(SortArray,1,Pos,0,Element) QuoteResults = INSERT(QuoteResults,1,Pos,0,ItemQuoteNos<1,I>) PromiseDtResults = INSERT(PromiseDtResults,1,Pos,0,ItemPromiseDts<1,I>) ItemNoResults = INSERT(ItemNoResults,1,Pos,0,ItemNos<1,I>) WorkOrderResults = INSERT(WorkOrderResults,1,Pos,0,ItemWorkOrders<1,I>) END END ;* End of check for cancelled line item NEXT I SWAP @SVM WITH ', ' IN ItemNoResults Result = QuoteResults:@FM:PromiseDtResults:@FM:ItemNoResults:@FM:WorkOrderResults:@FM:SortArray RETURN * * * * * * * * PostVision: * * * * * * * * * Create or Update Order information from the AS400 - Vision system VisionOrderNo = Parms[1,@RM] ;* Order<48> VisionItemNo = Parms[COL2()+1,@RM] ;* Order_Det<18> - same as OI item number LineItemStatus = Parms[COL2()+1,@RM] ;* Order_Det<19> BillToCustNo = Parms[COL2()+1,@RM] ;* Order<46> ;* Vision Customer Number ShipToCustNo = Parms[COL2()+1,@RM] ;* Order<47> ;* Vision Customer Number CustPONo = Parms[COL2()+1,@RM] ;* Order<41> EpiPartNo = Parms[COL2()+1,@RM] ;* Order_Det<3> PartType = Parms[COL2()+1,@RM] ;* Order_Det<20> CustPartNo = Parms[COL2()+1,@RM] ;* Order_Det<8> ItemQty = Parms[COL2()+1,@RM] ;* Order_Det<6> ItemShipQty = Parms[COL2()+1,@RM] ;* Order_Det<21> ItemNetQty = Parms[COL2()+1,@RM] ;* Not Used ItemUnitPrice = Parms[COL2()+1,@RM] ;* Order_Det<5> ItemExtPrice = Parms[COL2()+1,@RM] ;* Not Used ItemPromiseDt = Parms[COL2()+1,@RM] ;* Order_Det<11> ItemReqShipDt = Parms[COL2()+1,@RM] ;* Order_Det<13> ItemCalcSWODt = Parms[COL2()+1,@RM] ;* Order_Det<14> ItemCRD = Parms[COL2()+1,@RM] ;* Order_Det<12> ItemQuoteNo = Parms[COL2()+1,@RM] ;* Order_Det<22> CustName = Parms[COL2()+1,@RM] ;* Order<49> IF VisionOrderNo = '' THEN RETURN IF ItemQuoteNo = '' THEN RETURN OrderNo = XLATE('VISION_ORDER',VisionOrderNo,1,'X') IF OrderNo = '' THEN ItemNo = ABS(VisionItemNo) END ELSE OrderDetKeys = XLATE('ORDER',OrderNo,ORDER_ORDER_DET_KEY$,'X') VisionItemNos = XLATE('ORDER_DET',OrderDetKeys,ORDER_DET_VISION_LINE_NO$,'X') LOCATE VisionItemNo IN VisionItemNos USING @VM SETTING Pos THEN ItemNo = FIELD(OrderDetKeys<1,Pos>,'*',2) ;* Take the item number for the second part of the key END ELSE ItemNo = ABS(VisionItemNo) END END QuoteRec = XLATE('QUOTE',ItemQuoteNo,'','X') *** Get Epi Customer Number *** OPEN 'DICT.COMPANY' TO DictCompany ELSE ErrMsg('Unable to open "DICT.COMPANY" for lookup in COMM_CUSTOMER_EPI - CompNoLF Method.') RETURN END SearchString = 'VISION_CUST_NO':@VM:ShipToCustNo:@FM Option = '' Flag = '' Btree.Extract(SearchString,'COMPANY',DictCompany,EpiCustNo,Option,Flag) ;* Get Epi Cust No *** Verify Customer Number is on record *** SendMessage = 0 IF EpiCustNo = '' THEN LogNo = NextKey('VISION_LOG') LogRec = '' LogRec = ICONV(OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS'),'DT') LogRec = 'No EPI Cust No. for Vision Ship To Customer' LogRec = VisionOrderNo LogRec = VisionItemNo LogRec = OrderNo LogRec = ItemNo LogRec = 'SHIP_TO_CUST_NO' LogRec = ShipToCustNo LogRec = '' ;* Log as an error OVParms = 'VISION_LOG':@RM:LogNo:@RM:@RM:LogRec obj_Tables('WriteRec',OVParms) Recipients = XLATE('NOTIFICATION','ORDER_ENTRY',NOTIFICATION_USER_ID$,'X') SentFrom = "Vision Posting Process" Subject = 'Vision Error Logged ':LogNo Message = 'Errors occured while attempting to post an order from Vision' AttachWindow = 'VISION_LOG' AttachKey = LogNo SendToGroup = '' Parms = Recipients:@RM:SentFrom:@RM:Subject:@RM:Message:@RM:AttachWindow:@RM:AttachKey:@RM:SendToGroup obj_Notes('Create',Parms) RETURN END ELSE Captive = XLATE('COMPANY',EpiCustNo,COMPANY_CAPTIVE$,'X') IF Captive THEN LogNo = NextKey('VISION_LOG') LogRec = '' LogRec = ICONV(OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS'),'DT') LogRec = 'Order with Captive EPI Cust No. Received from Vision' LogRec = VisionOrderNo LogRec = VisionItemNo LogRec = OrderNo LogRec = ItemNo LogRec = 'CUST_NO' LogRec = ShipToCustNo LogRec = '' ;* Log as an error OVParms = 'VISION_LOG':@RM:LogNo:@RM:@RM:LogRec obj_Tables('WriteRec',OVParms) Recipients = XLATE('NOTIFICATION','ORDER_ENTRY',NOTIFICATION_USER_ID$,'X') ;* OrderNotif$ is customer service SentFrom = "Vision Posting Process" Subject = 'Vision Error Logged ':LogNo Message = 'Errors occured while attempting to post an order from Vision' AttachWindow = 'VISION_LOG' AttachKey = LogNo SendToGroup = '' Parms = Recipients:@RM:SentFrom:@RM:Subject:@RM:Message:@RM:AttachWindow:@RM:AttachKey:@RM:SendToGroup obj_Notes('Create',Parms) RETURN END ;* End of check for captive END ;* End of check for Null EpiCustNo Send_Info('Posting Vision order...') *** Verify Customer Part Number matches that on the Quote -> PSN *** IF PartType = '2' THEN StepPSNs = QuoteRec FirstStepPSN = StepPSNs<1,1> CustPartNos = XLATE('PROD_SPEC',FirstStepPSN,PROD_SPEC_CUST_PART_NO$,'X') CustPartDesc = XLATE('PROD_SPEC',FirstStepPSN,PROD_SPEC_PN_DESC$,'X') OldStylePartNos = '' FOR I = 1 TO COUNT(CustPartNos,@VM) + (CustPartNos NE '') OldStylePartNos<1,I> = CustPartNos<1,I>:CustPartDesc<1,I> NEXT I CONVERT @LOWER_CASE TO @UPPER_CASE IN CustPartNos LOCATE CustPartNo IN CustPartNos USING @VM SETTING Dummy ELSE LOCATE CustPartNo IN OldStylePartNos USING @VM SETTING Dummy ELSE SWAP @VM WITH ', ' IN CustPartNos LogNo = NextKey('VISION_LOG') LogRec = '' LogRec = ICONV(OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS'),'DT') LogRec = 'Cust Part No. ':QUOTE(CustPartNo):' Not Found IN PSN: ':FirstStepPSN LogRec = VisionOrderNo LogRec = VisionItemNo LogRec = OrderNo LogRec = ItemNo LogRec = 'CUST_PART_NO' LogRec = CustPartNo LogRec = CustPartNos ;* Log as an error OVParms = 'VISION_LOG':@RM:LogNo:@RM:@RM:LogRec obj_Tables('WriteRec',OVParms) Recipients = XLATE('NOTIFICATION','ORDER_ENTRY',NOTIFICATION_USER_ID$,'X') ;* OrderNotif$ is customer service SentFrom = "Vision Posting Process" Subject = 'Vision Error Logged ':LogNo Message = 'Errors occured while attempting to post an order from Vision' AttachWindow = 'VISION_LOG' AttachKey = LogNo SendToGroup = '' Parms = Recipients:@RM:SentFrom:@RM:Subject:@RM:Message:@RM:AttachWindow:@RM:AttachKey:@RM:SendToGroup obj_Notes('Create',Parms) RETURN END END END ;* End of check for part type 2 *** Verify Customer Number on the Quote *** QuoteCustNo = QuoteRec * EpiCustNo is the EpiShipToCustNo on the order SearchString = 'VISION_CUST_NO':@VM:BillToCustNo:@FM Option = '' Flag = '' Btree.Extract(SearchString,'COMPANY',DictCompany,EpiBillCustNo,Option,Flag) ;* Get Epi BillToCustNo LogMessage = '' IF EpiCustNo NE QuoteCustNo THEN IF EpiBillCustNo NE QuoteCustNo THEN LogMessage = "Customer No on the Quote is NOT one of the Customer Numbers on the Order" END END IF LogMessage NE '' THEN * Customer Number mismatch LogNo = NextKey('VISION_LOG') LogRec = '' LogRec = ICONV(OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS'),'DT') LogRec = "Customer Number on Quote doesn't match either Customer Number on Order" LogRec = VisionOrderNo LogRec = VisionItemNo LogRec = OrderNo LogRec = ItemNo LogRec = 'QUOTE_NO' LogRec = 'S':ShipToCustNo:'>':EpiCustNo:' - B':BillToCustNo:'>':EpiBillCustNo LogRec = QuoteCustNo ;* Log as an error OVParms = 'VISION_LOG':@RM:LogNo:@RM:@RM:LogRec obj_Tables('WriteRec',OVParms) Recipients = XLATE('NOTIFICATION','ORDER_ENTRY',NOTIFICATION_USER_ID$,'X') ;* OrderNotif$ is customer service SentFrom = "Vision Posting Process" Subject = 'Vision Error Logged ':LogNo Message = 'Errors occured while attempting to post an order from Vision' AttachWindow = 'VISION_LOG' AttachKey = LogNo SendToGroup = '' Parms = Recipients:@RM:SentFrom:@RM:Subject:@RM:Message:@RM:AttachWindow:@RM:AttachKey:@RM:SendToGroup obj_Notes('Create',Parms) RETURN END DefaultItemDesc = QuoteRec IF DefaultItemDesc = '' THEN ItemDesc = 'Order from Vision' END ELSE ItemDesc = DefaultItemDesc END OCTableNames = '' OCRecordKeys = '' OCColumns = '' OCValues = '' OCOldValues = '' OCNewValues = '' IF OrderNo = '' THEN * New Order OrderNo = NextKey('ORDER') OrderRec = '' OrderRec = 'VISION' OrderRec = Date() OrderRec = VisionOrderNo OrderRec = EpiCustNo OrderRec = ShipToCustNo OrderRec = BillToCustNo OrderRec = CustPONo OrderRec = CustName * Added 08/25/2005 JCH - J.C. Henry & Co., Inc. CustRec = XLATE('COMPANY',EpiCustNo,'','X') CustBillTo = CustRec IF CustBillTo = '' OR (BillToCustNo = ShipToCustNo) THEN OrderRec = CustRec OrderRec = CustRec OrderRec = CustRec OrderRec = CustRec OrderRec = CustRec OrderRec = CustRec OrderRec = CustRec END ELSE BillCustRec = XLATE('COMPANY',CustBillTo,'','X') OrderRec = BillCustRec OrderRec = BillCustRec OrderRec = BillCustRec OrderRec = BillCustRec OrderRec = BillCustRec OrderRec = BillCustRec OrderRec = BillCustRec END OrderRec = CustRec OrderRec = CustRec OrderRec = CustRec OrderRec = CustRec OrderRec = CustRec OrderRec = CustRec IF CustRec = '' THEN OrderRec = 'USA' END ELSE OrderRec = CustRec END OrderRec = CustRec OrderRec = CustRec OrderRec = CustRec OrderRec = CustRec OrderRec = CustRec * End of added code obj_Tables('WriteRec','ORDER':@RM:OrderNo:@RM:@RM:OrderRec) *obj_Tables('WriteRec','VISION_ORDER':@RM:VisionOrderNo:@RM:@RM:OrderNo) ;* Application maintained cross reference table ;* Changed to a Relational Index 8/26/2005 JCH ODParms = OrderNo:@RM ODParms := ItemNo:@RM ODParms := ItemQuoteNo:@RM ODParms := EpiPartNo:@RM ODParms := ItemDesc:@RM ;* XLATE to EPI_PART table ? ODParms := ItemUnitPrice:@RM ODParms := ItemQty:@RM ODParms := '':@RM ;* Pass WONo as null ODParms := VisionItemNo:@RM ODParms := LineItemStatus:@RM ODParms := PartType:@RM ODParms := CustPartNo:@RM ODParms := ItemShipQty:@RM ODParms := ItemPromiseDt:@RM ODParms := ItemReqShipDt:@RM ODParms := ItemCalcSWODt:@RM ODParms := ItemCRD obj_Order_Det('Create',ODParms) OCTableNames = 'ORDER_DET' OCRecordKeys = OrderNo:'*':ItemNo IF PartType = '2' OR PartType = '5' THEN WONo = obj_WO_Log('Create',OrderNo:@RM:ItemNo:@RM:ItemQuoteNo) IF Get_Status(errCode) THEN RETURN Send_Info(' ') END ELSE obj_Order_Det('AddWONo',OrderNo:@RM:ItemNo:@RM:WONo) OCTableNames<1,-1> = 'WO_LOG' OCRecordKeys<1,-1> = WONo END END Reason = 'New from Vision' obj_Order_Change('Create',OrderNo:@RM:OCTableNames:@RM:OCRecordKeys:@RM:OCColumns:@RM:OCValues:@RM:OCOldValues:@RM:OCNewValues:@RM:Reason:@RM:'VISION') END ELSE * No changes to the order itself IF RowExists('ORDER_DET', OrderNo:'*':ItemNo) THEN * This is an update ODParms = 'ORDER_DET':@RM:OrderNo:'*':ItemNo OrderDetRec = obj_Tables('ReadRec',ODParms) IF Get_Status(errCode) THEN Send_Info(' ') RETURN END WONo = OrderDetRec WORec = XLATE('WO_LOG',WONo,'','X') OCCnt = 0 ;* Order Change log parameters OCTableNames = '' OCRecordKeys = '' OCColumns = '' OCValues = '' OCNewValues = '' OCOldValues = '' IF WORec NE '' THEN LogRec = '' * Material has been received Reason = 'Vision Change after Material Received' IF WORec = '' THEN IF OrderDetRec NE ICONV(ItemQty,'MD0') THEN OCCnt += 1 OCTableNames<1,OCCnt> = 'ORDER_DET' OCRecordKeys<1,OCCnt> = OrderNo:'*':ItemNo OCColumns<1,OCCnt> = 'ITEM_QTY' OCValues<1,OCCnt> = '' OCNewValues<1,OCCnt> = ICONV(ItemQty,'MD0') OCOldValues<1,OCCnt> = OrderDetRec END OrderDetRec = ICONV(ItemQty,'MD0') ;* Work Order not yet Released to Production END ELSE IF ICONV(ItemQty,'MD0') NE OrderDetRec THEN LogRec = 'ITEM_QTY' LogRec = ICONV(ItemQty,'MD0') LogRec = OrderDetRec ;* Log as an error END END * Error Log stuff IF ICONV(ItemPromiseDt,'D') NE OrderDetRec THEN LogRec = 'PROMISE_DT' LogRec = ICONV(ItemPromiseDt,'D') LogRec = OrderDetRec END IF ICONV(ItemCRD,'D') NE OrderDetRec THEN LogRec = 'CUST_REQ_DT' LogRec = ICONV(ItemCRD,'D') LogRec = OrderDetRec END IF LogRec NE '' THEN LogNo = NextKey('VISION_LOG') LogRec = ICONV(OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS'),'DT') LogRec = 'Order Item Update after Material Received' LogRec = VisionOrderNo LogRec = VisionItemNo LogRec = OrderNo LogRec = ItemNo OVParms = 'VISION_LOG':@RM:LogNo:@RM:@RM:LogRec obj_Tables('WriteRec',OVParms) Recipients = XLATE('NOTIFICATION','ORDER_ENTRY',NOTIFICATION_USER_ID$,'X') ;* OrderNotif$ is customer service SentFrom = "Vision Posting Process" Subject = 'Vision Error Logged ':LogNo Message = 'Errors occured while attempting to post an order from Vision' AttachWindow = 'VISION_LOG' AttachKey = LogNo SendToGroup = '' Parms = Recipients:@RM:SentFrom:@RM:Subject:@RM:Message:@RM:AttachWindow:@RM:AttachKey:@RM:SendToGroup obj_Notes('Create',Parms) END IF OrderDetRec NE ICONV(ItemUnitPrice,'MD2') THEN OCCnt += 1 OCTableNames<1,OCCnt> = 'ORDER_DET' OCRecordKeys<1,OCCnt> = OrderNo:'*':ItemNo OCColumns<1,OCCnt> = 'UNIT_PRICE' OCValues<1,OCCnt> = '' OCNewValues<1,OCCnt> = ICONV(ItemUnitPrice,'MD2') OCOldValues<1,OCCnt> = OrderDetRec END IF OrderDetRec NE ICONV(ItemReqShipDt,'D') THEN OCCnt += 1 OCTableNames<1,OCCnt> = 'ORDER_DET' OCRecordKeys<1,OCCnt> = OrderNo:'*':ItemNo OCColumns<1,OCCnt> = 'REQ_SHIP_DT' OCValues<1,OCCnt> = '' OCNewValues<1,OCCnt> = ICONV(ItemReqShipDt,'D') OCOldValues<1,OCCnt> = OrderDetRec END IF OrderDetRec NE ICONV(ItemCalcSWODt,'D') THEN OCCnt += 1 OCTableNames<1,OCCnt> = 'ORDER_DET' OCRecordKeys<1,OCCnt> = OrderNo:'*':ItemNo OCColumns<1,OCCnt> = 'SHIP_WIN_DT' OCValues<1,OCCnt> = '' OCNewValues<1,OCCnt> = ICONV(ItemCalcSWODt,'D') OCOldValues<1,OCCnt> = OrderDetRec END IF OrderDetRec NE LineItemStatus THEN OCCnt += 1 OCTableNames<1,OCCnt> = 'ORDER_DET' OCRecordKeys<1,OCCnt> = OrderNo:'*':ItemNo OCColumns<1,OCCnt> = 'VISION_ITEM_STATUS' OCValues<1,OCCnt> = '' OCNewValues<1,OCCnt> = LineItemStatus OCOldValues<1,OCCnt> = OrderDetRec END IF OrderDetRec NE ICONV(ItemShipQty,'MD0') THEN OCCnt += 1 OCTableNames<1,OCCnt> = 'ORDER_DET' OCRecordKeys<1,OCCnt> = OrderNo:'*':ItemNo OCColumns<1,OCCnt> = 'VISION_SHIP_QTY' OCValues<1,OCCnt> = '' OCNewValues<1,OCCnt> = ICONV(ItemShipQty,'MD0') OCOldValues<1,OCCnt> = OrderDetRec END IF OCCnt > 0 THEN obj_Order_Change('Create',OrderNo:@RM:OCTableNames:@RM:OCRecordKeys:@RM:OCColumns:@RM:OCValues:@RM:OCOldValues:@RM:OCNewValues:@RM:Reason:@RM:'VISION') END OrderDetRec = ICONV(ItemUnitPrice,'MD2') OrderDetRec = ICONV(ItemReqShipDt,'D') OrderDetRec = ICONV(ItemCalcSWODt,'D') OrderDetRec = LineItemStatus OrderDetRec = ICONV(ItemShipQty,'MD0') ODParms = FieldStore(ODParms,@RM,4,1,OrderDetRec) obj_Tables('WriteRec',ODParms) END ELSE * CustWaferInfo entered * Material Received * Released OrderDetTotShipQty = XLATE('ORDER_DET',OrderNo:'*':ItemNo,'TOTAL_SHIP_QTY','X') ;***************************** OrderDetItemQty = OrderDetRec IF LineItemStatus = 'C' THEN BEGIN CASE CASE OrderDetTotShipQty = 0 AND WORec = '' * Item is being cancelled zero out qtys and prices ItemUnitPrice = 0 ItemQty = 0 IF WONo NE '' THEN obj_WO_Log('RemOrderItem',WONo:@RM:OrderNo:@RM:ItemNo) END OrderDetRec = '' Reason = 'Vision Order Item Cancellation Received' CASE OrderDetTotShipQty = OrderDetItemQty Reason = 'Vision Order Item Closed from Vision' CASE 1 Reason = 'Vision Order Change Received' END CASE END ELSE Reason = 'Vision Order Change Received' END IF OrderDetRec NE ICONV(ItemUnitPrice,'MD2') THEN OCCnt += 1 OCTableNames<1,OCCnt> = 'ORDER_DET' OCRecordKeys<1,OCCnt> = OrderNo:'*':ItemNo OCColumns<1,OCCnt> = 'UNIT_PRICE' OCValues<1,OCCnt> = '' OCNewValues<1,OCCnt> = ICONV(ItemUnitPrice,'MD2') OCOldValues<1,OCCnt> = OrderDetRec END IF OrderDetRec NE ICONV(ItemQty,'MD0') THEN OCCnt += 1 OCTableNames<1,OCCnt> = 'ORDER_DET' OCRecordKeys<1,OCCnt> = OrderNo:'*':ItemNo OCColumns<1,OCCnt> = 'ITEM_QTY' OCValues<1,OCCnt> = '' OCNewValues<1,OCCnt> = ICONV(ItemQty,'MD0') OCOldValues<1,OCCnt> = OrderDetRec END IF OrderDetRec NE ICONV(ItemPromiseDt,'D') THEN OCCnt += 1 OCTableNames<1,OCCnt> = 'ORDER_DET' OCRecordKeys<1,OCCnt> = OrderNo:'*':ItemNo OCColumns<1,OCCnt> = 'PROMISE_DT' OCValues<1,OCCnt> = '' OCNewValues<1,OCCnt> = ICONV(ItemPromiseDt,'D') OCOldValues<1,OCCnt> = OrderDetRec END IF OrderDetRec NE ICONV(ItemCRD,'D') THEN OCCnt += 1 OCTableNames<1,OCCnt> = 'ORDER_DET' OCRecordKeys<1,OCCnt> = OrderNo:'*':ItemNo OCColumns<1,OCCnt> = 'CUST_REQ_DT$' OCValues<1,OCCnt> = '' OCNewValues<1,OCCnt> = ICONV(ItemCRD,'D') OCOldValues<1,OCCnt> = OrderDetRec END IF OrderDetRec NE ICONV(ItemReqShipDt,'D') THEN OCCnt += 1 OCTableNames<1,OCCnt> = 'ORDER_DET' OCRecordKeys<1,OCCnt> = OrderNo:'*':ItemNo OCColumns<1,OCCnt> = 'REQ_SHIP_DT' OCValues<1,OCCnt> = '' OCNewValues<1,OCCnt> = ICONV(ItemReqShipDt,'D') OCOldValues<1,OCCnt> = OrderDetRec END IF OrderDetRec NE ICONV(ItemCalcSWODt,'D') THEN OCCnt += 1 OCTableNames<1,OCCnt> = 'ORDER_DET' OCRecordKeys<1,OCCnt> = OrderNo:'*':ItemNo OCColumns<1,OCCnt> = 'SHIP_WIN_DT' OCValues<1,OCCnt> = '' OCNewValues<1,OCCnt> = ICONV(ItemCalcSWODt,'D') OCOldValues<1,OCCnt> = OrderDetRec END IF OrderDetRec NE LineItemStatus THEN OCCnt += 1 OCTableNames<1,OCCnt> = 'ORDER_DET' OCRecordKeys<1,OCCnt> = OrderNo:'*':ItemNo OCColumns<1,OCCnt> = 'VISION_ITEM_STATUS' OCValues<1,OCCnt> = '' OCNewValues<1,OCCnt> = LineItemStatus OCOldValues<1,OCCnt> = OrderDetRec END IF OrderDetRec NE ICONV(ItemShipQty,'MD0') THEN OCCnt += 1 OCTableNames<1,OCCnt> = 'ORDER_DET' OCRecordKeys<1,OCCnt> = OrderNo:'*':ItemNo OCColumns<1,OCCnt> = 'VISION_SHIP_QTY' OCValues<1,OCCnt> = '' OCNewValues<1,OCCnt> = ICONV(ItemShipQty,'MD0') OCOldValues<1,OCCnt> = OrderDetRec END obj_Order_Change('Create',OrderNo:@RM:OCTableNames:@RM:OCRecordKeys:@RM:OCColumns:@RM:OCValues:@RM:OCOldValues:@RM:OCNewValues:@RM:Reason) OrderDetRec = ICONV(ItemUnitPrice,'MD2') OrderDetRec = ICONV(ItemQty,'MD0') OrderDetRec = ICONV(ItemPromiseDt,'D') OrderDetRec = ICONV(ItemCRD,'D') OrderDetRec = ICONV(ItemReqShipDt,'D') OrderDetRec = ICONV(ItemCalcSWODt,'D') OrderDetRec = LineItemStatus OrderDetRec = ICONV(ItemShipQty,'MD0') ODParms = FieldStore(ODParms,@RM,4,1,OrderDetRec) obj_Tables('WriteRec',ODParms) END ;* End of check for material received END ELSE * This is a new detail record GOSUB WOQuotes WorkOrders = Result<4> QuoteShipDtPairs = Result<5> Result = '' ODQuoteDate = ItemQuoteNo:'*':ICONV(ItemPromiseDt,'D') LOCATE ODQuoteDate IN QuoteShipDtPairs BY 'AR' USING @VM SETTING Pos THEN WONo = WorkOrders<1,Pos> IF WONo NE '' AND ( PartType = '2' OR PartType = '5') THEN obj_WO_Log('AddOrderItem',WONo:@RM:OrderNo:@RM:ItemNo) END END ELSE WONo = '' END ODParms = OrderNo:@RM ODParms := ItemNo:@RM ODParms := ItemQuoteNo:@RM ODParms := EpiPartNo:@RM ODParms := ItemDesc:@RM ;* XLATE to EPI_PART table ? ODParms := ItemUnitPrice:@RM ODParms := ItemQty:@RM ODParms := WONo:@RM ;* Pass as null ODParms := VisionItemNo:@RM ODParms := LineItemStatus:@RM ODParms := PartType:@RM ODParms := CustPartNo:@RM ODParms := ItemShipQty:@RM ODParms := ItemPromiseDt:@RM ODParms := ItemReqShipDt:@RM ODParms := ItemCalcSWODt:@RM ODParms := ItemCRD obj_Order_Det('Create',ODParms) IF WONo = '' AND ( PartType = '2' OR PartType = '5') THEN WONo = obj_WO_Log('Create',OrderNo:@RM:ItemNo:@RM:ItemQuoteNo) IF Get_Status(errCode) THEN Send_Info(' ') RETURN END ELSE obj_Order_Det('AddWONo',OrderNo:@RM:ItemNo:@RM:WONo) END END END END Send_Info(' ') ;* Look at the whole line!!!!!!!!!!!!!!!!!!! RETURN * * * * * * * POChange: * * * * * * * OrderNo = Parms[1,@RM] OrgPONo = Parms[COL2()+1,@RM] PONo = Parms[COL2()+1,@RM] IF OrderNo = '' THEN ErrorMsg = 'Unassigned parameter "OrderNo" passed to routine (':Method:').' IF OrgPONo = '' THEN ErrorMsg = 'Unassigned parameter "OrgPONo" passed to routine (':Method:').' IF PONo = '' THEN ErrorMsg = 'Unassigned parameter "PONo" passed to routine (':Method:').' IF ErrorMsg NE '' THEN RETURN OrderRec= XLATE('ORDER',OrderNo,'','X') WONos = OrderRec ;* Get List of Work Orders on Order WOStepKeys = XLATE('WO_LOG',WONos,WO_LOG_WO_STEP_KEY$,'X') ;* Get List of all WO Steps for All Work Orders on Order CONVERT @VM TO @FM IN WOStepKeys RdsNos = XLATE('WO_STEP',WOStepKeys,WO_STEP_RDS_KEY$,'X') ;* Get List of all RDS Keys for all WOSteps on all Work Orders CONVERT @FM TO @VM IN RdsNos RTParms = 'RDS' LockedRDSNos = '' FOR I = 1 TO COUNT(RdsNos,@VM) + (RdsNos NE '') RdsNo = RdsNos<1,I> IF RdsNo NE '' THEN RTParms = FieldStore(RTParms, @RM, 2, 1, RdsNo) obj_Tables('LockRec',RTParms) IF Get_Status(errCode) THEN FOR N = 1 TO COUNT(LockedRDSNos,@VM) + (LockedRDSNos NE '') RTParms = FieldStore(RTParms, @RM, 2, 1, LockedRDSNos<1,N>) obj_Tables('UnlockRec',RTParms) ;* Unlock everything locked up to here NEXT N otParms = 'ORDER':@RM:OrderNo OrderRec = obj_Tables('ReadRec',otParms) OrderRec = OrgPONo otParms = FieldStore(otParms,@RM,4,1,OrderRec) obj_Tables('WriteRec',otParms) ErrorMsg = 'Unable to lock RDS ':QUOTE(RdsNo):' for delete.' RETURN END ELSE LockedRDSNos<1,-1> = RdsNo END END NEXT I RDSTableVar = FIELD(RTParms,@RM,3) FOR I = 1 TO COUNT(LockedRDSNos,@VM) + (LockedRDSNos NE '') LockedRDSNo = LockedRDSNos<1,I> READ RDSRec FROM RDSTableVar,LockedRDSNo THEN RDSRec = PONo RTParms = FieldStore(RTParms, @RM, 2, 1, LockedRDSNo) RTParms = FieldStore(RTParms, @RM, 4, 1, RDSRec) obj_Tables('WriteRec',RTParms) ;* Write and unlock RDS records END NEXT I Result = WONos RETURN