COMPILE FUNCTION obj_Invoice(Method,Parms) /* Methods for Invoice table 02/28/2005 JCH - Initial Coding Properties: Methods: Create(DataStruct) ;* Create new record CommInvoice(DataStruct) ;* Returns Commercial Invoice data structure */ DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, NextKey, obj_WM_Out, obj_Popup DECLARE SUBROUTINE Set_Status, Msg, obj_Tables, obj_Notes, ErrMsg $INSERT INVOICE_EQU $INSERT ORDER_EQU $INSERT ORDER_DET_EQU $INSERT QUOTE_SPEC_EQU $INSERT QUOTE_EQU $INSERT PROD_SPEC_EQU $INSERT RDS_EQU $INSERT SCHEDULE_EQU $INSERT WO_LOG_EQUATES $INSERT WO_STEP_EQU $INSERT WO_MAT_EQUATES $INSERT COMPANY_EQU $INSERT COC_EQU $INSERT QUOTE_SIGS_EQU $INSERT MSG_EQUATES EQU COMM_INVOICE_SHIP_TO$ TO 1 EQU COMM_INVOICE_PHONE_TYPE$ TO 2 EQU COMM_INVOICE_PHONE_NO$ TO 3 EQU COMM_INVOICE_SHIP_DT$ TO 4 EQU COMM_INVOICE_PO$ TO 5 EQU COMM_INVOICE_SHIP_NO$ TO 6 EQU COMM_INVOICE_ORIGIN$ TO 7 EQU COMM_INVOICE_SHIP_VIA$ TO 8 EQU COMM_INVOICE_ITEM_ORD_NO$ TO 9 EQU COMM_INOVICE_ITEM_ORD_ITEM$ TO 10 EQU COMM_INVOICE_ITEM_QTY$ TO 11 EQU COMM_INVOICE_ITEM_DESC$ TO 12 EQU COMM_INVOICE_ITEM_PRICE$ TO 13 EQU COMM_INVOICE_ITEM_EXT_AMT$ TO 14 EQU COMM_INVOICE_SUB_SUPPLIED_BY$ TO 15 EQU COMM_INVOICE_INCO_CODE$ TO 16 ErrTitle = 'Error in Stored Procedure "obj_Invoice"' 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 = 'Create' ; GOSUB Create CASE Method = 'CommInvoice' ; GOSUB CommInvoice CASE 1 END CASE IF ErrorMsg NE '' THEN Set_Status(-1,ErrTitle:@SVM:ErrorMsg) RETURN '' END RETURN Result * * * * * * * Create: * * * * * * * ShipNo = Parms[1,@RM] ShipDt = Parms[COL2()+1,@RM] WONo = Parms[COL2()+1,@RM] WOSteps = Parms[COL2()+1,@RM] CassNos = Parms[COL2()+1,@RM] RDSNos = Parms[COL2()+1,@RM] IF ShipNo = '' THEN ErrorMsg = 'Null Parameter "ShipNo" passed to routine. (':Method:')' IF ShipDt = '' THEN ErrorMsg = 'Null Parameter "ShipDt" passed to routine. (':Method:')' IF WONo = '' THEN ErrorMsg = 'Null Parameter "WONo" passed to routine. (':Method:')' IF WOSteps = '' THEN ErrorMsg = 'Null Parameter "WOSteps" passed to routine. (':Method:')' IF CassNos = '' THEN ErrorMsg = 'Null Parameter "CassNos" passed to routine. (':Method:')' IF NOT(ASSIGNED(RDSNos)) THEN RDSNos = '' IF ErrorMsg NE '' THEN RETURN thisShipDt = ICONV(ShipDt,'D') IF thisShipDt = '' THEN ErrorMsg = 'Invalid Parameter "ShipDt" ':ShipDt:' passed to routine. (':Method:')' RETURN END WORec = XLATE('WO_LOG',WONo,'','X') OrderNo = WORec OrderRec = XLATE('ORDER',OrderNo,'','X') InvNo = NextKey('INVOICE') InvRec = '' InvRec = OrderNo InvRec = OrderRec InvRec = OrderRec InvRec = ShipNo InvRec = @USER4 InvRec = Date() InvRec = thisShipDt InvRec = '' InvRec = '' InvRec = OrderRec InvRec = OrderRec InvRec = OrderRec InvRec = OrderRec InvRec = OrderRec InvRec = OrderRec InvRec = OrderRec InvRec = OrderRec InvRec = OrderRec InvRec = OrderRec InvRec = OrderRec InvRec = OrderRec InvRec = OrderRec InvRec = OrderRec InvRec = OrderRec InvRec = OrderRec InvRec = 'M' ;* Mesa * Stuff to load from the RDS records that were shipped InvRec = '' InvRec = '' InvRec = '' InvRec = '' InvRec = '' InvRec = '' InvRec = '' InvRec = '' InvRec = '' InvRec = '' InvRec = '' InvRec = '' InvRec = '' IF RDSNos NE '' THEN FOR I = 1 TO COUNT(RDSNos,@VM) + (RDSNos NE '') RDSNo = RDSNos<1,I> RDSRec = XLATE('RDS',RDSNo,'','X') CassNo = CassNos<1,I> WaferQty = XLATE('WO_MAT',WONo:'*':CassNo,'CURR_WFR_CNT','X') OrderItem = RDSRec QuoteNo = RDSRec LotNo = RDSRec PartNo = RDSRec *WaferQty = XLATE('RDS',RDSNo,'WFRS_OUT','X') Rejects = RDSRec - WaferQty ProdSpecID = RDSRec GLCode = XLATE('PROD_SPEC',ProdSpecID,'SUB_PRODUCT','X') GLCode = GLCode[1,'-'] UnitPrice = XLATE('ORDER_DET',OrderNo:'*':OrderItem,ORDER_DET_UNIT_PRICE$,'X') LOCATE LotNo IN InvRec USING @VM SETTING Pos THEN InvRec = InvRec + WaferQty END ELSE InvRec = INSERT(InvRec,INVOICE_LOT_NUM$,Pos,0,LotNo) InvRec = INSERT(InvRec,INVOICE_QUOTE_IDS$,Pos,0,QuoteNo) InvRec = INSERT(InvRec,INVOICE_SCHEDULE_IDS$,Pos,0,'') InvRec = INSERT(InvRec,INVOICE_WO$,Pos,0,WoNo) InvRec = INSERT(InvRec,INVOICE_PART_NUM$,Pos,0,PartNo) InvRec = INSERT(InvRec,INVOICE_SETUP_CHARGE$,Pos,0,'') InvRec = INSERT(InvRec,INVOICE_SRP_CHARGE$,Pos,0,'') InvRec = INSERT(InvRec,INVOICE_QUANTITY$,Pos,0,WaferQty) InvRec = INSERT(InvRec,INVOICE_PRICE$,Pos,0,UnitPrice) InvRec = INSERT(InvRec,INVOICE_GL_ACCT$,Pos,0,GLCode) InvRec = INSERT(InvRec,INVOICE_REJECTS$,Pos,0,Rejects) InvRec = INSERT(InvRec,INVOICE_UNPROCESSED$,Pos,0,'') InvRec = INSERT(InvRec,INVOICE_OD_ITEM_NO$,Pos,0,OrderItem) END NEXT I END ELSE QuoteNo = XLATE('WO_LOG',WONo,'QUOTE_NO','X') FOR I = 1 TO COUNT(CassNos,@VM) + (CassNos NE '') CassNo = CassNos<1,I> WOStep = WOSteps<1,I> InboundCassData = obj_WM_Out('InCassData',WONo:'*':WOStep:'*':CassNo:@RM ) FOR N = 1 TO COUNT(InboundCassData<1>,@VM) + (InboundCassData<1> NE '') IF InboundCassData<1,N>[1,'*'] = WONo THEN InCassNo = InboundCassData<1,N>[-1,'B*'] InLotNo = InboundCassData<2,N> InPartNo = InboundCassData<3,N> END NEXT N IF NOT(ASSIGNED(InCassNo)) THEN InCassNo = InboundCassData<1,1>[-1,'B*'] InLotNo = InboundCassData<2,1> InPartNo = InboundCassData<3,1> END WOMatKey = WONo:'*':InCassNo WOMatRec = XLATE('WO_MAT',WOMatKey,'','X') OrderItem = WOMatRec LotNo = WOMatRec PartNo = WOMatRec WaferQty = XLATE('WM_OUT',WONo:'*':WOStep:'*':CassNo,'WFRS_OUT','X') Rejects = XLATE('WM_OUT',WONo:'*':WOStep:'*':CassNo,'WFRS_SCHED','X') - WaferQty ProdSpecID = XLATE('WO_STEP',WONo:'*':WOStep,WO_STEP_PROD_SPEC_ID$,'X') GLCode = XLATE('PROD_SPEC',ProdSpecID,'SUB_PRODUCT','X') GLCode = GLCode[1,'-'] UnitPrice = XLATE('ORDER_DET',OrderNo:'*':OrderItem,ORDER_DET_UNIT_PRICE$,'X') LOCATE LotNo IN InvRec USING @VM SETTING Pos THEN InvRec = InvRec + WaferQty END ELSE InvRec = INSERT(InvRec,INVOICE_LOT_NUM$,Pos,0,LotNo) InvRec = INSERT(InvRec,INVOICE_QUOTE_IDS$,Pos,0,QuoteNo) InvRec = INSERT(InvRec,INVOICE_SCHEDULE_IDS$,Pos,0,'') InvRec = INSERT(InvRec,INVOICE_WO$,Pos,0,WoNo) InvRec = INSERT(InvRec,INVOICE_PART_NUM$,Pos,0,PartNo) InvRec = INSERT(InvRec,INVOICE_SETUP_CHARGE$,Pos,0,'') InvRec = INSERT(InvRec,INVOICE_SRP_CHARGE$,Pos,0,'') InvRec = INSERT(InvRec,INVOICE_QUANTITY$,Pos,0,WaferQty) InvRec = INSERT(InvRec,INVOICE_PRICE$,Pos,0,UnitPrice) InvRec = INSERT(InvRec,INVOICE_GL_ACCT$,Pos,0,GLCode) InvRec = INSERT(InvRec,INVOICE_REJECTS$,Pos,0,Rejects) InvRec = INSERT(InvRec,INVOICE_UNPROCESSED$,Pos,0,'') InvRec = INSERT(InvRec,INVOICE_OD_ITEM_NO$,Pos,0,OrderItem) END NEXT I END FOR I = 1 TO COUNT(InvRec,@VM) + (InvRec NE '') InvRec = I NEXT I obj_Tables('WriteRec','INVOICE':@RM:InvNo:@RM:@RM:InvRec) RETURN * * * * * * * CommInvoice: * * * * * * * ShipNo = Parms[1,@RM] IF ShipNo = '' THEN ErrorMsg = 'Null parameter "ShipNo" passed to routine. (':Method:')' RETURN END ShipRec = XLATE('COC',ShipNo,'','X') ShipVia = ShipRec TrackingNos = ShipRec BoxCnts = ShipRec ShipWeights = ShipRec InvRec = '' * Build line item details WorkOrderNo = ShipRec WORec = XLATE('WO_LOG',WorkOrderNo,'','X') FirstStepPSN = XLATE('WO_STEP',WorkOrderNo:'*1',WO_STEP_PROD_SPEC_ID$,'X') SpecSubstrate = XLATE('PROD_SPEC',FirstStepPSN,PROD_SPEC_SPEC_SUBSTRATE$,'X') WaferDesc = SpecSubstrate<1,QSSubWafersize$>:' silicon wafers' SubSupplyBy = SpecSubstrate<1,QSSubWafersSupBy$> ;* C - Customer, L - EPI Services SWAP ' mm ' WITH 'mm/' IN WaferDesc SWAP ' in' WITH 'in' IN WaferDesc WOCustNo = WORec ShipToInfo = XLATE('COMPANY',WOCustNo,'SHIP_TO_INFO','X') ;*XLATE('ORDER',OrderNo,'SHIP_TO_INFO','X') INCOCode = WORec ;*OrderRec INCOCodeDesc = obj_Popup('CodeDesc','INCO_CODES':@RM:INCOCode) InvRec = '' InvRec = ShipToInfo InvRec = INCOCode CustNo = WORec CustRec = XLATE('COMPANY',CustNo,'','X') CompPhones = CustRec CompPhoneTypes = CustRec CompIntPhones = CustRec CompIntPhoneTypes = CustRec Phones = '' PhoneTypes = '' IF CompPhones NE '' THEN Phones<1,-1> = CompPhones PhoneTypes<1,-1> = CompPhoneTypes END IF CompIntPhones NE '' THEN Phones<1,-1> = CompIntPhones PhoneTypes<1,-1> = CompIntPhoneTypes END InvRec = PhoneTypes InvRec = Phones InvRec = ShipRec InvRec = WORec InvRec = ShipNo InvRec = XLATE('COMPANY',WOCustNo,COMPANY_COUNTRY$,'X') InvRec = ShipRec InvRec = SubSupplyBy Captive = XLATE('COMPANY',WOCustNo,COMPANY_CAPTIVE$,'X') Consignment = XLATE('COMPANY',WOCustNo,COMPANY_CONSIGNMENT$,'X') BEGIN CASE CASE Captive ; Ordertype = 'CAPTIVE' CASE Consignment ; OrderType = 'CAPTIVE' CASE 1 ; OrderType = 'MERCHANT' END CASE * Build the Order Line Item Detail from RDS records using local methods OrderShippedQtys = '' OrderRejQtys = '' OrderRDSNos = '' RDSNos = ShipRec WOCassNos = ShipRec IF RDSNos = '' THEN WOStepNos = ShipRec FOR I = 1 TO COUNT(WOCassNos,@VM) + (WOCassNos NE '') WOStepNo = WOStepNos<1,I> WOCassNo = WOCassNos<1,I> WfrsOut = XLATE('WM_OUT',WorkOrderNo:'*':WOStepNo:'*':WOCassNo,'WAFER_CNT','X') Rejects = 0 OrderShippedQtys = OrderShippedQtys> + WfrsOut OrderRejQtys = OrderRejQtys + Rejects OrderRDSNos<1,-1> = WorkOrderNo:'.':WOStepNo:'.':WOCassNo ;* Substitute CassID for RDS NEXT I END ELSE CassCnt = COUNT(WOCassNos,@VM) + (WOCassNos NE '') FOR I = 1 TO CassCnt WOMatKey = WorkOrderNo:'*':WOCassNos<1,I> CassRejQty = XLATE('WO_MAT',WOMatKey,'CURR_WFR_CNT_REJ','X') CassShipQty = XLATE('WO_MAT',WOMatKey,'CURR_WFR_CNT','X') CassPTQty = XLATE('WO_MAT',WOMatKey,'CURR_WFR_CNT_PT','X') IF Captive OR Consignment THEN CassRejQty = 0 END ELSE CassRejQty += CassPTQty END OrderShippedQtys = OrderShippedQtys + CassShipQty OrderRejQtys = OrderRejQtys + CassRejQty NEXT I END CustPONo = WORec TotalWafersOrdered = WORec TotalShipWfrQty = XLATE('COC',ShipNo,'TOT_QTY','X') ;* Total Good Wafers on Shipment TotalShipRejQty = XLATE('COC',ShipNo,'TOT_REJ','X') ;* Total Reject Wafers in Shipment TotalShipProdQty = XLATE('COC',ShipNo,'TOT_PROD','X') TotalShipmentWafers = TotalShipWfrQty + TotalShipRejQty + TotalShipProdQty ;* Total wafers in this shipment PrevShipNos = XLATE('WO_LOG',WorkOrderNo,'SHIP_NO','X') Done = 0 LOOP UNTIL Done LOCATE ShipNo IN PrevShipNos USING @VM SETTING Pos THEN PrevShipNos = DELETE(PrevShipNos,1,Pos,0) ;* Remove current shipment from list END ELSE Done = 1 END REPEAT PrevSRP_MiscQtys = XLATE('COC',PrevShipNos,'ITEM_MISC_QTY','X') CONVERT @VM TO '' IN PrevSRP_MiscQtys IF PrevSRP_MiscQtys NE '' THEN SurchargesSent = 1 ELSE SurchargesSent = 0 TotPrevShipQtys = SUM(XLATE('COC',PrevShipNos,'TOT_WAFERS_SHIPPED','X')) ;* All wafers shipped on previous shipments against this Work Order TotPrevShipWfrQty = SUM(XLATE('COC',PrevShipNos,'TOT_QTY','X')) TotPrevShipRejQty = SUM(XLATE('COC',PrevShipNos,'TOT_REJ','X')) TotPrevShipProdQty = SUM(XLATE('COC',PrevShipNos,'TOT_PROD','X')) EpiPN = WORec QuoteNo = WORec QuoteRec = XLATE('QUOTE',QuoteNo,'','X') CommInvUnitPrice = QuoteRec ;* Commercial Invoice Override pricing from Quote CommInvRejUnitPrice = QuoteRec CommInvAddItemQtys = QuoteRec ;* Additional line items added to bottom of invoice CommInvAddItemDescs = QuoteRec CommInvAddItemUnitPrices = QuoteRec CommInvTestWfrQtys = QuoteRec ;* Test wafer charges override information CommInvTestWfrDescs = QuoteRec CommInvTestWfrUnitPrices = QuoteRec LineCnt = 0 IF OrderShippedQtys > 0 THEN LineCnt += 1 InvRec = INSERT(InvRec,COMM_INVOICE_ITEM_ORD_NO$,LineCnt,0,WorkOrderNo) InvRec = INSERT(InvRec,COMM_INOVICE_ITEM_ORD_ITEM$,LineCnt,0,FIELD(OrderItemKey,'*',2)) InvRec = INSERT(InvRec,COMM_INVOICE_ITEM_QTY$,LineCnt,0,ItemQty) InvRec = INSERT(InvRec,COMM_INVOICE_ITEM_DESC$,LineCnt,0,WaferDesc) InvRec = INSERT(InvRec,COMM_INVOICE_ITEM_PRICE$,LineCnt,0,UnitPrice) InvRec = INSERT(InvRec,COMM_INVOICE_ITEM_EXT_AMT$,LineCnt,0,OCONV(ICONV(UnitPrice*ItemQty,'MD32'),'MD32,$')) END ;* End of check for Shipped Qtys IF CommInvTestWfrQtys NE '' THEN LineCnt += 1 OrderItemKey = LineCnt:'R' ;* Add an 'R' for Rejects and change the pricing ItemQty = CommInvTestWfrQtys ItemDesc = CommInvTestWfrDescs UnitPrice = OCONV(CommInvTestWfrUnitPrices,'MD2,') InvoicedOrderDetKeys = INSERT(InvoicedOrderDetKeys,1,LineCnt,0,OrderItemKey) InvRec = INSERT(InvRec,COMM_INVOICE_ITEM_ORD_NO$,LineCnt,0,OrderNo) InvRec = INSERT(InvRec,COMM_INOVICE_ITEM_ORD_ITEM$,LineCnt,0,FIELD(OrderItemKey,'*',2)) InvRec = INSERT(InvRec,COMM_INVOICE_ITEM_QTY$,LineCnt,0,ItemQty) InvRec = INSERT(InvRec,COMM_INVOICE_ITEM_DESC$,LineCnt,0,ItemDesc) InvRec = INSERT(InvRec,COMM_INVOICE_ITEM_PRICE$,LineCnt,0,UnitPrice) InvRec = INSERT(InvRec,COMM_INVOICE_ITEM_EXT_AMT$,LineCnt,0,OCONV(ICONV(UnitPrice*ItemQty,'MD32'),'MD32,$')) END IF OrderItemRejQtys > 0 THEN IF CommInvRejUnitPrice NE '' THEN UnitPrice = OCONV(CommInvRejUnitPrice,'MD32') END ELSE UnitPrice = OCONV(100,'MD32') END ItemQty = OrderItemRejQtys<1,I> OrderItemKey := 'R' ;* Add an 'R' for Rejects and change the pricing LOCATE OrderItemKey IN InvoicedOrderDetKeys BY 'AR' USING @VM SETTING Pos THEN InvRec = InvRec + ItemQty ExtItemQty = InvRec InvRec = OCONV(ICONV(UnitPrice*ExtItemQty,'MD32'),'MD32,$') END ELSE InvoicedOrderDetKeys = INSERT(InvoicedOrderDetKeys,1,Pos,0,OrderItemKey) InvRec = INSERT(InvRec,COMM_INVOICE_ITEM_ORD_NO$,Pos,0,OrderNo) InvRec = INSERT(InvRec,COMM_INOVICE_ITEM_ORD_ITEM$,Pos,0,FIELD(OrderItemKey,'*',2)) InvRec = INSERT(InvRec,COMM_INVOICE_ITEM_QTY$,Pos,0,ItemQty) InvRec = INSERT(InvRec,COMM_INVOICE_ITEM_DESC$,Pos,0,WaferDesc:'(Rejects/Test)') InvRec = INSERT(InvRec,COMM_INVOICE_ITEM_PRICE$,Pos,0,UnitPrice) InvRec = INSERT(InvRec,COMM_INVOICE_ITEM_EXT_AMT$,Pos,0,OCONV(ICONV(UnitPrice*ItemQty,'MD32'),'MD32,$')) END END IF CommInvAddItemQtys NE '' THEN LineCnt = COUNT(CommInvAddItemQtys,@VM) + (CommInvAddItemQtys NE '') + 1 FOR I = 1 TO COUNT(CommInvAddItemQtys,@VM) + (CommInvAddItemQtys NE '') OrderItemKey = OrderNo:'**' ItemQty = CommInvAddItemQtys<1,I> ItemDesc = CommInvAddItemDescs<1,I> UnitPrice = OCONV(CommInvAddItemUnitPrices<1,I>,'MD2,') InvoicedOrderDetKeys = INSERT(InvoicedOrderDetKeys,1,LineCnt + I,0,OrderItemKey) InvRec = INSERT(InvRec,COMM_INVOICE_ITEM_ORD_NO$,LineCnt + I,0,OrderNo) InvRec = INSERT(InvRec,COMM_INOVICE_ITEM_ORD_ITEM$,LineCnt + I,0,'-') InvRec = INSERT(InvRec,COMM_INVOICE_ITEM_QTY$,LineCnt + I,0,ItemQty) InvRec = INSERT(InvRec,COMM_INVOICE_ITEM_DESC$,LineCnt + I,0,ItemDesc) InvRec = INSERT(InvRec,COMM_INVOICE_ITEM_PRICE$,LineCnt + I,0,UnitPrice) InvRec = INSERT(InvRec,COMM_INVOICE_ITEM_EXT_AMT$,LineCnt + I,0,OCONV(ICONV(UnitPrice*ItemQty,'MD32'),'MD32,$')) NEXT I END Result = InvRec RETURN