project QadFinancials > class BAPMatching > method UpdateCInvoiceFromAPMClassTables

Description

UpdateCInvoiceFromAPMClassTables: this public, non-api method can be called from other classes and it will update the total amount of the invoice and the tax-details of the invoice


Parameters


icAPMatchingTcRowidinputcharactericAPMatchingTcRowid: TcRowid of the APMatching record.
If this param has a value then param iiAPMatchingID will be ignored
iiAPMatchingIDinputintegeriiAPMatching: ID of the Matching:
In case icAPMatchingTcRowid is filled then this parameter will not be used
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


unused


program code (program8/bapmatching.p)

/* ================== */
    /* Exception handling */
    /* ================== */
    assign oiReturnStatus      = -98
           viLocalReturnStatus = 0.
    
    /* ================== */
    /* Start Block        */
    /* ================== */
    UPDATECINVOICEBLOCK : DO :
        
        /* ================================================================================= */
        /* Validate input / Find tAPMatching baed upon the input params                      */
        /* Not all possible validations are done here because method "UpdateCInvoiceFromAPM" */
        /* that is called at the end of this method has quite some validations itself        */
        /* ================================================================================= */
        if icAPMatchingTcRowid <> "":U and
           icAPMatchingTcRowid <> ?
        then find tAPMatching where 
                  tAPMatching.tc_Rowid = icAPMatchingTcRowid
                  no-lock no-error.
        else find tAPMatching where 
                  tAPMatching.APMatching_ID = iiAPMatchingID
                  no-lock no-error.
        if not available tAPMatching
        then do :
            assign vcMsgAPMatching     = trim(substitute(#T-58'The system cannot update the invoice from the matching because the matching cannot be found based upon the TC row ID (&1) and the ID (&2) that was passed.':255(70335)T-58#,icAPMatchingTcRowid,string(iiAPMatchingID)))
                   viLocalReturnStatus = -3.
            <M-43 run SetMessage
               (input  vcMsgAPMatching (icMessage), 
                input  '':U (icArguments), 
                input  '':U (icFieldName), 
                input  '':U (icFieldValue), 
                input  'E':U (icType), 
                input  3 (iiSeverity), 
                input  '':U (icRowid), 
                input  'QadFin-8359':U (icFcMsgNumber), 
                input  '':U (icFcExplanation), 
                input  '':U (icFcIdentification), 
                input  '':U (icFcContext), 
                output viFcReturnSuper (oiReturnStatus)) in BAPMatching>
            Leave UPDATECINVOICEBLOCK.
        end. /* if not available tAPMatching */
        if tAPMatching.CInvoice_ID = 0 or 
           tAPMatching.CInvoice_ID = ?
        then do :
            assign vcMsgAPMatching     = trim(substitute(#T-66'The system cannot update the invoice from the matching because the matching is not linked to the invoice.':255(70333)T-66#))
                   viLocalReturnStatus = -3.
            <M-51 run SetMessage
               (input  vcMsgAPMatching (icMessage), 
                input  '':U (icArguments), 
                input  '':U (icFieldName), 
                input  '':U (icFieldValue), 
                input  'E':U (icType), 
                input  3 (iiSeverity), 
                input  '':U (icRowid), 
                input  'QadFin-8362':U (icFcMsgNumber), 
                input  '':U (icFcExplanation), 
                input  '':U (icFcIdentification), 
                input  '':U (icFcContext), 
                output viFcReturnSuper (oiReturnStatus)) in BAPMatching>
            Leave UPDATECINVOICEBLOCK.
        end. /* if tAPMatching.CInvoice_ID = 0 or */
        
        /* ================================================================================= */
        /* Call the method in this class that performs the call to BCInvoice to update it    */
        /* Check if the current tAPMatching record is the only one in the business-instance: */
        /* If so, then we can simply pass the class-table tAPMatchingLn and tAPMatchingLnTax */
        /* if not, the we have to fill temp-tables tSPTAPMatchingLn and tSPTAPMatchingLnTax  */
        /* with the records of tAPMatchingLn and tAPMatchingLnTax of the current tAPMatching */
        /* The disadvantage of this is that we have 2 calls to the same method but I could   */
        /* not find another way without creating the performance-loss bofcopying temp-tables */
        /* ================================================================================= */
        if can-find (first btAPMatching where 
                           btAPMatching.tc_Rowid <> tAPMatching.tc_Rowid)
        then do : 
            empty temp-table tSPTAPMatchingLn.
            empty temp-table tSPTAPMatchingLnTax.
            empty temp-table tSPTAPMatchingLnWHT.
            for each tAPMatchingLn where 
                     tAPMatchingLn.tc_ParentRowid  = tAPMatching.tc_Rowid and 
                     tAPMatchingLn.tc_Status      <> "D":U :
                create tSPTAPMatchingLn.
                buffer-copy tAPMatchingLn
                            to tSPTAPMatchingLn.
                for each tAPMatchingLnTax where 
                         tAPMatchingLnTax.tc_ParentRowid = tAPMatchingLn.tc_Rowid  and 
                         tAPMatchingLnTax.tc_Status      <> "D":U :
                    create tSPTAPMatchingLnTax.
                    buffer-copy tAPMatchingLnTax
                                to tSPTAPMatchingLnTax.
                end. /* for each tAPMatchingLnTax where  */
                for each tAPMatchingLnWHT where 
                         tAPMatchingLnWHT.tc_ParentRowid = tAPMatchingLn.tc_Rowid  and 
                         tAPMatchingLnWHT.tc_Status      <> "D":U :
                    create tSPTAPMatchingLnWHT.
                    buffer-copy tAPMatchingLnWHT
                                to tSPTAPMatchingLnWHT.
                end. /* for each tAPMatchingLnWHT where  */
            end. /* for each tAPMatchingLn where  */
            <M-68 run UpdateCInvoiceFromUIAPM
               (input  tAPMatching.tc_Rowid (iiAPMatchingID), 
                input  tAPMatching.CInvoice_ID (iiCInvoiceID), 
                input  ? (iiPostingID), 
                input  tSPTAPMatchingLn (tSPTAPMatchingLn), 
                input  tSPTAPMatchingLnTax (tSPTAPMatchingLnTax), 
                input  tSPTAPMatchingLnWHT (tSPTAPMatchingLnWHT), 
                output viFcReturnSuper (oiReturnStatus)) in BAPMatching>
            empty temp-table tSPTAPMatchingLn.
            empty temp-table tSPTAPMatchingLnTax.
            empty temp-table tSPTAPMatchingLnWHT.
        end. /* if can-find (first btAPMatching where */
        else do :                   
            <M-67 run UpdateCInvoiceFromUIAPM
               (input  tAPMatching.tc_Rowid (iiAPMatchingID), 
                input  tAPMatching.CInvoice_ID (iiCInvoiceID), 
                input  ? (iiPostingID), 
                input  tAPMatchingLn (tSPTAPMatchingLn), 
                input  tAPMatchingLnTax (tSPTAPMatchingLnTax), 
                input  tAPMatchingLnWHT (tSPTAPMatchingLnWHT), 
                output viFcReturnSuper (oiReturnStatus)) in BAPMatching>
        end. /* Not if can-find (first btAPMatching where */
        if viFcReturnSuper <> 0 then assign viLocalReturnStatus = viFcReturnSuper.
        if viFcReturnSuper < 0 then Leave UPDATECINVOICEBLOCK.
        
    END. /* UPDATECINVOICEBLOCK */   
    
    /* ================== */
    /* Exception handling */
    /* ================== */
    assign oiReturnStatus  = viLocalReturnStatus.