project QadFinancials > class BAPMatching > method AddAPMatching

Description

AddAPMatching: Create an APMatching-record based upon the input parameters


Parameters


iiCInvoiceIDinputintegerID of the Invoice
icAPMatchingStatusinputcharacter
icAPMatchingJournalCodeinputcharacterJournal-code to be used for the matching.
If no value is received for this parameter and there is only one journal with the correct type, then that one will be used
ilIsUpdateCInvoiceAutomaticallyinputlogicalDo you want to automatically update the supplier invoice?
oiAPMatchingIDoutputintegercorresponds with field APMatching_ID of the newly create tAPMatching record
ocAPMatchingTcRowidoutputcharactercorresponds with field tc_rowid of the newly create tAPMatchign record
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


QadFinancials
method BCInvoiceAPMatching.CreateAPMatchingRun


program code (program8/bapmatching.p)

    /* ================================ */
    /* Exception handling - Start Block */
    /* ================================ */
    assign oiReturnStatus      = -98
           viLocalReturnStatus = 0.
    MAINADDBLOCK: Do :
        
        /* ============== */
        /* Validate input */
        /* ============== */
        if iiCInvoiceID = 0 or 
           iiCInvoiceID = ? 
        then do :
            assign viLocalReturnStatus = -3
                   vcMsgAPMatching     = trim(#T-1'The system cannot create a matching header if the invoice ID is not specified.':255(70287)t-1#).
            <M-2 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-8315':U (icFcMsgNumber), 
                input  '':U (icFcExplanation), 
                input  '':U (icFcIdentification), 
                input  '':U (icFcContext), 
                output viFcReturnSuper (oiReturnStatus)) in BAPMatching>
            Leave MAINADDBLOCK.
        end. /* if iiCInvoiceID = 0 or  */
        if icAPMatchingStatus = "":U or 
           icAPMatchingStatus = ? 
        then do :
            assign viLocalReturnStatus = -3
                   vcMsgAPMatching     = trim(#T-4'The system cannot create a matching header if the matching status is not specified.':255(70288)t-4#).
            <M-3 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-8316':U (icFcMsgNumber), 
                input  '':U (icFcExplanation), 
                input  '':U (icFcIdentification), 
                input  '':U (icFcContext), 
                output viFcReturnSuper (oiReturnStatus)) in BAPMatching>
            Leave MAINADDBLOCK.
        end. /* if icAPMatchingStatus = "" or  */
        else do :
            if icAPMatchingStatus <> {&APMATCHINGSTATUS-INITIAL} and 
               icAPMatchingStatus <> {&APMATCHINGSTATUS-FINISHED}
            then do :
                assign viLocalReturnStatus = -3
                       vcMsgAPMatching     = trim(substitute(#T-6'The system cannot create a matching header with an invalid status (&1).':255(70289)t-6#,icAPMatchingStatus)).
                <M-5 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-8317':U (icFcMsgNumber), 
                    input  '':U (icFcExplanation), 
                    input  '':U (icFcIdentification), 
                    input  '':U (icFcContext), 
                    output viFcReturnSuper (oiReturnStatus)) in BAPMatching>
                Leave MAINADDBLOCK.
            end. /*  if icAPMatchingStatus <> {&APMATCHINGSTATUS-INITIAL} and  */
        end. /* Not if icAPMatchingStatus = "" or  */
        
        /* ============================================================================== */
        /* Find the invoice based upon its ID to get its Registration-number and Company  */
        /* ============================================================================== */
        <Q-16 run CInvoiceByIDForRegistrationNr (all) (Read) (NoCache)
           (input iiCInvoiceID, (CInvoiceID)
            input ?, (CompanyId)
            output dataset tqCInvoiceByIDForRegistrationNr) in BCInvoice >
        Find first tqCInvoiceByIDForRegistrationNr where
                   tqCInvoiceByIDForRegistrationNr.tiCInvoice_ID = iiCInvoiceID
                   no-lock no-error.
        if not available tqCInvoiceByIDForRegistrationNr
        then do :
            assign viLocalReturnStatus = -3
                   vcMsgAPMatching     = trim(substitute(#T-9'Cannot create a matching header because the invoice &1 is invalid.':255(70290)t-9#,string(iiCInvoiceID))).
            <M-8 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-8318':U (icFcMsgNumber), 
                input  '':U (icFcExplanation), 
                input  '':U (icFcIdentification), 
                input  '':U (icFcContext), 
                output viFcReturnSuper (oiReturnStatus)) in BAPMatching>
            Leave MAINADDBLOCK.
        end. /* if not avaiable tqCInvoiceByIDForRegistrationNr */
        else do :
            if tqCInvoiceByIDForRegistrationNr.tiCompany_ID <> viCompanyID
            then do :
                assign viLocalReturnStatus = -3
                       vcMsgAPMatching     = trim(substitute(#T-11'Cannot create a matching header because the invoice &1 belongs to an entity &2 that differs from the current entity &3.':255(70292)t-11#,string(iiCInvoiceID),string(tqCInvoiceByIDForRegistrationNr.tiCompany_ID),string(viCompanyID))).
                <M-10 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-8319':U (icFcMsgNumber), 
                    input  '':U (icFcExplanation), 
                    input  '':U (icFcIdentification), 
                    input  '':U (icFcContext), 
                    output viFcReturnSuper (oiReturnStatus)) in BAPMatching>
                Leave MAINADDBLOCK.
            end. /* if tqCInvoiceByIDForRegistrationNr.tiCompany_ID <> viCompanyID */
            else 
                if tqCInvoiceByIDForRegistrationNr.tiCInvoiceRegistrationNr = 0 or 
                   tqCInvoiceByIDForRegistrationNr.tiCInvoiceRegistrationNr = ?
                then do :
                    assign viLocalReturnStatus = -3
                           vcMsgAPMatching     = trim(substitute(#T-13'Cannot create a matching header because the invoice &1 does not have a registration number.':255(70293)t-13#,string(iiCInvoiceID))).
                    <M-12 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-8320':U (icFcMsgNumber), 
                        input  '':U (icFcExplanation), 
                        input  '':U (icFcIdentification), 
                        input  '':U (icFcContext), 
                        output viFcReturnSuper (oiReturnStatus)) in BAPMatching>
                    Leave MAINADDBLOCK.
                end. /* if tqCInvoiceByIDForRegistrationNr.tiCInvoiceRegistrationNr = 0 or  */
        end. /* Not if not avaiable tqCInvoiceByIDForRegistrationNr */
        
        /* ========================================================================== */
        /* Create a new APM header and Fill the output param pointing to this record. */
        /* Assign some fields in the new record: APMStatus,CI and Registration-nbr       */
        /* ========================================================================== */
        <M-14 run AddDetailLine
           (input  'APMatching':U (icTable), 
            input  '':U (icParentRowid), 
            output viFcReturnSuper (oiReturnStatus)) in BAPMatching>
        if viFcReturnSuper <> 0
        then assign viLocalReturnStatus = viFcReturnSuper.
        if viFcReturnSuper < 0
        then Leave MAINADDBLOCK.
        assign tAPMatching.APMatchingStatus                = icAPMatchingStatus
               tAPMatching.tiCInvoiceRegistrationNr        = tqCInvoiceByIDForRegistrationNr.tiCInvoiceRegistrationNr
               tAPMatching.tlIsUpdateCInvoiceAutomatically = ilIsUpdateCInvoiceAutomatically
               oiAPMatchingID                              = tAPMatching.APMatching_ID
               ocAPMatchingTcRowid                         = tAPMatching.tc_Rowid.
        
        /* ========================================================================== */
        /* Call defaulting-method to get all invoice-related data into the APM-header */
        /* ========================================================================== */
        <M-15 run DefaultValuesInvoice
           (input  tAPMatching.tc_Rowid (icAPMatchingTcRowid), 
            input-output tAPMatching.tiCInvoicePostingYear (biInvoiceYear), 
            input-output tAPMatching.tcCInvoiceJournalCode (bcInvoiceJournal), 
            input-output tAPMatching.tiCInvoiceVoucher (biInvoiceVoucher), 
            input-output tAPMatching.tcCInvoiceReference (bcInvoiceReference), 
            input-output tAPMatching.tiCInvoiceRegistrationNr (biInvoiceRegistrationNr), 
            input-output tAPMatching.tcCreditorCode (bcCreditorCode), 
            input  ? (iiOldReasonID), 
            input-output tAPMatching.Reason_ID (biNewReasonID), 
            input-output tAPMatching.tcReasonCode (bcNewReasonCode), 
            output tAPMatching.tiBusinessRelationID (oiBusinessRelationID), 
            output tAPMatching.tcBusinessRelationCode (ocBusinessRelationCode), 
            output tAPMatching.tcBusinessRelationICCode (ocBusinessRelationICCode), 
            output tAPMatching.tcCurrencyCode (ocCurrencyCode), 
            output tAPMatching.APMatchingTotalAmountTC (odAmountToMatchTC), 
            output tAPMatching.APMatchingTotalAmountLC (odAmountToMatchLC), 
            output tAPMatching.CInvoice_ID (oiCInvoiceId), 
            output tAPMatching.tdCInvoiceExchangeRate (odCInvoiceExchangeRate), 
            output tAPMatching.tdCInvoiceRateScale (odCInvoiceRateScale), 
            output tAPMatching.tdCInvoiceCCRate (odCInvoiceCCRate), 
            output tAPMatching.tdCInvoiceCCScale (odCInvoiceCCScale), 
            output tAPMatching.tdCInvoiceLCCCRate (odCInvoiceLCCCRate), 
            output tAPMatching.tdCInvoiceLCCCScale (odCInvoiceLCCCScale), 
            output tAPMatching.ttCInvoiceDate (otCInvoiceDate), 
            output tAPMatching.ttCInvoicePostingDate (otCInvoicePostingDate), 
            output tAPMatching.ttCInvoiceTaxPointDate (otCInvoiceTaxPointDate), 
            output tAPMatching.tcCInvoiceType (ocCInvoiceType), 
            output tAPMatching.tcCInvoicePaymentConditionCode (ocCInvoicePaymentCondition), 
            output tAPMatching.tlCInvoiceIsInitialStatus (olCInvoiceIsInitialStatus), 
            output tAPMatching.APMatchingARRecTaxTC (odTaxAcrueReceiptRecovTC), 
            output tAPMatching.APMatchingARNRecTaxTC (odTaxAcrueReceiptNonRecovTC), 
            output tAPMatching.APMatchingAIRecTaxTC (odTaxAcrueInvoiceRecovTC), 
            output tAPMatching.APMatchingAINRecTaxTC (odTaxAcrueInvoiceNonRecovTC), 
            output tAPMatching.APMatchingCInvoiceDiscPct (odInvoiceDiscountPercentage), 
            output tAPMatching.tcCreditorAddrTaxIDFederal (ocCreditorAddrTaxIDFederal), 
            output tAPMatching.tcCreditorAddrTaxIDState (ocCreditorAddrTaxIDState), 
            output tAPMatching.tcCreditorAddrTaxIDMisc1 (ocCreditorAddrTaxIDMisc1), 
            output tAPMatching.tcCreditorAddrTaxIDMisc2 (ocCreditorAddrTaxIDMisc2), 
            output tAPMatching.tcCreditorAddrTaxIDMisc3 (ocCreditorAddrTaxIDMisc3), 
            output tAPMatching.tlCreditorAddrIsTaxInCity (olCreditorAddrIsTaxInCity), 
            output tAPMatching.tlCreditorAddrIsEUCountry (olCreditorAddrIsEUCountry), 
            output tAPMatching.tcShipToAddrCountryCode (ocCreditorAddrCountryCode), 
            output tAPMatching.tiCreditorAddr_ID (oiCreditorAddrID), 
            output tAPMatching.tcShipToAddrTaxIDFederal (ocShipToAddrTaxIDFederal), 
            output tAPMatching.tcShipToAddrTaxIDState (ocShipToAddrTaxIDState), 
            output tAPMatching.tcShipToAddrTaxIDMisc1 (ocShipToAddrTaxIDMisc1), 
            output tAPMatching.tcShipToAddrTaxIDMisc2 (ocShipToAddrTaxIDMisc2), 
            output tAPMatching.tcShipToAddrTaxIDMisc3 (ocShipToAddrTaxIDMisc3), 
            output tAPMatching.tiShipToAddrTaxDeclaration (oiShipToAddrTaxDeclarat), 
            output tAPMatching.tlShipToAddrIsTaxInCity (olShipToAddrIsTaxInCity), 
            output tAPMatching.tlShipToAddrIsEUCountry (olShipToAddrIsEUCountry), 
            output tAPMatching.tcShipToAddrCountryCode (ocShipToAddrCountryCode), 
            output viDummy (oiOriginalAPMatchingID), 
            output tOrderFilterAPM (tOrderFilterAPM), 
            output tAPMatching.APMatchingDate (otPostingDate), 
            output viFcReturnSuper (oiReturnStatus)) in BAPMatching>
        
        /* =============================================================================== */
        /* Set the Date, Yr & Pd of the matching equal to the corresponding invoice-fields */
        /* If the JournalCode was specified as input then use that one. If no JournalCode  */
        /* was specified then keep the default that was set by the InitialValues           */
        /* =============================================================================== */
        assign tAPMatching.APMatchingDate = tqCInvoiceByIDForRegistrationNr.ttCInvoicePostingDate
               tAPMatching.tiPeriodYear   = tqCInvoiceByIDForRegistrationNr.tiCInvoicePostingYear
               tAPMatching.tiPeriodPeriod = tqCInvoiceByIDForRegistrationNr.tiCInvoicePostingPeriod.
        if icAPMatchingJournalCode <> "":U and 
           icAPMatchingJournalCode <> ?
        then assign tAPMatching.tcJournalCode = icAPMatchingJournalCode.
        
    END. /* MAINADDBLOCK */
   
    /* ======================== */
    /* Exception handling       */
    /* ======================== */
    assign oiReturnStatus = viLocalReturnStatus.