COMPILE ROUTINE FIX_Order_Detail(Dummy) ROWDEF(CHARSTR) DECLARE SUBROUTINE obj_Schedule,Send_Dyn,Send_Infom, obj_Order, obj_WO_Log, RList, RList, ErrMsg DECLARE SUBROUTIne obj_WO_Step, Set_Status, Send_Info DECLARE FUNCTION Get_Status, Set_Printer $INSERT ORDER_EQU $INSERT WO_LOG_EQU $INSERT WO_STEP_EQU $INSERT SCHEDULE_EQU $INSERT RDS_EQU $INSERT RLIST_EQUATES 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 detail 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 OPEN 'ORDER' TO OrderTable ELSE DEBUG GOTO Bail END SelectSent = 'SELECT ORDER WITH ENTRY_DATE > = "1 1 2004"' RList(SelectSent,TARGET_ACTIVELIST$,'','','') QuoteMappings = '' QuoteMappings<1,1> = '4487' ; QuoteMappings<2,1> = '3957' QuoteMappings<1,2> = '3615' ; QuoteMappings<2,2> = '2970' QuoteMappings<1,3> = '3556' ; QuoteMappings<2,3> = '4075' RecCnt = 0 Done = 0 LOOP READNEXT OrderNo ELSE Done = 1 UNTIL Done READ OrderRec FROM OrderTable,OrderNo THEN Send_Dyn(OrderNo) RecCnt += 1 * Build the Map Table to allow mapping of old information into new format LineItemQuoteNos = OrderRec LineItemPSNs = OrderRec LineItemWOs = OrderRec LineItemScheds = OrderRec LineItemCnt = COUNT(LineItemQuoteNos,@VM) + (LineItemQuoteNos NE '') MapTable = '' FOR I = 1 TO LineItemCnt LineItemQuoteNo = LineItemQuoteNos<1,I> LineItemWO = LineItemWOs<1,I> LineItemPSN = LineItemPSNs<1,I> LOCATE LineItemQuoteNo IN QuoteMappings<1> USING @VM SETTING Pos THEN NewQuoteNo = QuoteMappings<2,Pos> ;* Corrected Quote number for multilayer PSNs = XLATE('QUOTE',NewQuoteNo,33,'X') END ELSE NewQuoteNo = '' PSNs = XLATE('QUOTE',LineItemQuoteNo,33,'X') END IF INDEX(QuoteDetKeys,@VM,1) THEN * This needs to be done by hand - multiple Quote detail items. Probable SiGe Send_Dyn(OrderNo:' -> Multiple Quote Items') GOTO Skip END ELSE LOCATE LineItemPSN IN PSNs USING @VM SETTING Step ELSE Send_Dyn(OrderNo:' -> ':LineItemPSN:' not in ':PSNs) GOTO Skip END CONVERT @VM TO @SVM IN PSNs LOCATE LineItemQuoteNo IN MapTable USING @VM SETTING LinePos THEN * Need to add the work orders to the right spot IF NewQuoteNo = '' THEN IF Step = 2 THEN MapTable = LineItemWO END ELSE LOCATE LineItemWO IN MapTable USING @SVM SETTING Dummy ELSE MapTable = INSERT(MapTable,MT_WO$,LinePos,Step,LineItemWO) END END END END ELSE MapTable = INSERT(MapTable,MT_ORG_QUOTE$,LinePos,0,LineItemQuoteNo) MapTable = INSERT(MapTable,MT_NEW_QUOTE$,LinePos,0,NewQuoteNo) MapTable = INSERT(MapTable,MT_WO$,LinePos,0,LineItemWO) IF NewQuoteNo = '' THEN MapTable = INSERT(MapTable,MT_PSN$,LinePos,0,PSNs) END ELSE MapTable = INSERT(MapTable,MT_PSN$,LinePos,0,'') END END ;* End of locate END NEXT I * OK now we have a map table to work from so we can take another pass through the line items FOR I = 1 TO LineItemCnt LineItemQuoteNo = LineItemQuoteNos<1,I> LineItemWO = LineItemWOs<1,I> LinePSN = LineItemPSNs<1,I> LineItemSched = LineItemScheds<1,I> LOCATE LineItemQuoteNo IN MapTable USING @VM SETTING Pos THEN IF MapTable NE '' THEN LineItemQuoteNo = MapTable LOCATE LineItemQuoteNo IN MapTable USING @VM SETTING Pos THEN PSNs = MapTable WONo = MapTable END ELSE debug GOTO Skip END END ELSE PSNs = MapTable WONo = MapTable END IF NOT(INDEX(PSNs,@SVM,1)) THEN * Not Multilayer - use the WONo from the line item WONo = LineItemWO END LOCATE LinePSN IN PSNs USING @SVM SETTING Step ELSE Null ;* Find step from PSN numbers WOStepKey = WONo:'*':Step END ELSE debug GOTO Skip END * WONo = NEW system Work Order number and Step = Work Order Step in new system * Step = NEW system QUOTE$ITEM_NO and WO STEP$PROC_STEP_NO * PSNs = NEW system WO_STEP$PROD_SPEC_ID * LineItemQuoteNo = NEW system QUOTE$QUOTE_NO * LineItemSched = Existing system Schedule number on this item ** Add OrderNo, QuoteNo, QuoteItemNo, Unit Price, Add_Chg_Desc and Add_Chg_Amt to WO_LOG record. ** Read Sched Rec and add CassNo,CassLotNo, CassWaferQty,CassPartNo and CassSubPartNo to WO_LOG record. ** Read/Create WOStep Record ** Add ProdSpecIds, HotLots, MakeupBoxs and SchedDts to WOStep from Schedule record ** Add WO_STEP to Schedule Record ** Using RDS_IDS from Schedule record, add WO_STEP_KEY to RDS records ** ONLY UPDATE IF NOT CORRECT -> Relational index attached * Extract Add_Chg_Desc and Add_Chg_Amt from line Item LotNo = OrderRec SetupChg = OrderRec SRPChg = OrderRec PartNo = OrderRec SubPartNo = OrderRec UnitPrice = OrderRec IF LotNo = '' OR (SetupChg NE '' OR SRPChg NE '') THEN AddChgDesc = PartNo IF SubPartNo NE '' THEN AddChgDesc := ' ':SubPartNo AddChgAmt = '' IF SetupChg NE '' THEN AddChgAmt = SetupChg IF SRPChg NE '' THEN AddChgAmt = SRPChg IF AddChgAmt = '' THEN AddChgAmt = 0 END ELSE AddChgDesc = '' AddChgAmt = '' END QuoteItemNo = 1 ;* This code doesn't process any quotes with multiple Quote Det items. oWOParms = WONo:@RM:OrderNo:@RM:LineItemQuoteNo:@RM:QuoteItemNo:@RM:UnitPrice:@RM:LineItemSched:@RM:SubPartNo:@RM:AddChgDesc:@RM:AddChgAmt obj_WO_Log('AddOrderDetail',oWOParms) IF Get_Status(errCode) THEN DEBUG errMsg(errCode) END StepPSN = PSNs<1,1,Step> oWOStepParms = WONo:@RM:Step:@RM:StepPSN:@RM:OrderRec:@RM:OrderRec obj_WO_Step('AddOrderDetail',oWOStepParms) IF Get_Status(errCode) THEN DEBUG errMsg(errCode) END oSchedParms = WONo:'*':Step:@RM:OrderRec obj_Schedule('AddOrderDetail',oSchedParms) IF Get_Status(errCode) THEN DEBUG errMsg(errCode) END NEXT I Set_Status(0) obj_Order('OrderDet',OrderNo) Send_Info(OrderNo) IF Get_Status(errCode) THEN ErrMsg(errCode) debug END Skip: END ;* End of order Record read REPEAT * * * * * * * Bail: * * * * * * * END