project QadFinancials > class BCInvoice > method ValidateComponentPostBank

Description

This method is a submethod of ValidateComponentAll.

This method validates the Creditor Invoice Bank fields.


Parameters


ilDaemonLogicByPassinputlogicalDaemonLogicByPass; Indicates if the daemon-logic should be by-passed or not
blStart12input-outputlogicalIs component BPaymentFormat already started or not ?
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


QadFinancials
method BCInvoice.ValidateComponentPost


program code (program5/bcinvoice.p)

assign vdBankToPayTC = 0.

for each t_sCInvoiceBank where
         t_sCInvoiceBank.tc_ParentRowid = t_sCInvoice.tc_Rowid and
         t_sCInvoiceBank.tc_Status     <> "D":U:
    if t_sCInvoiceBank.tc_Status <> "N":U
    then do:
        find t_iCInvoiceBank where
             t_iCInvoiceBank.tc_Rowid = t_sCInvoiceBank.tc_Rowid
             no-error.

        if not available t_iCInvoiceBank
        then do:
            <M-1 run SetMessage
               (input  trim(#T-1'The system cannot find initial values for supplier invoice bank with bank number $1 (Supplier Invoice $2 $3 $4).':255(65483)t-1#) (icMessage), 
                input  t_sCInvoiceBank.tcBankNumber + chr(2) + string(t_sCInvoice.CInvoicePostingYear) + chr(2) + t_sCInvoice.tcJournalCode + chr(2) + string(t_sCInvoice.CInvoiceVoucher) (icArguments), 
                input  '':U (icFieldName), 
                input  '':U (icFieldValue), 
                input  'E':U (icType), 
                input  '':U (iiSeverity), 
                input  t_sCInvoiceBank.tc_Rowid (icRowid), 
                input  'QadFin-7085':U (icFcMsgNumber), 
                input  '':U (icFcExplanation), 
                input  '':U (icFcIdentification), 
                input  '':U (icFcContext), 
                output viFcReturnSuper (oiReturnStatus)) in BCInvoice>

            assign oiReturnStatus = -1.
            next.
        end.
    end.

    /* Bank To Pay cannot be 0 for new Bank records if Invoice Amount is not 0 */
    if ((t_sCInvoice.tc_Status                = "N":U                             or
         t_sCInvoice.tc_Status                = "C":U                             and
         ((t_sCInvoice.CInvoiceIsTaxExcluded = false and t_sCInvoice.tdCInvoiceOriginalTC    <> t_iCInvoice.tdCInvoiceOriginalTC) or
          (t_sCInvoice.CInvoiceIsTaxExcluded = true  and t_sCInvoice.tdCInvoiceVatBaseTC     <> t_iCInvoice.tdCInvoiceVatBaseTC ))) or
         t_sCInvoiceBank.tc_Status            = "N":U)                            and
         t_sCInvoice.tdCInvoiceOriginalTC    <> 0                                 and
         t_sCInvoice.tdCInvoiceOriginalTC    <> ?                                 and
        (t_sCInvoiceBank.CInvoiceBankToPayTC  = 0                                 or
         t_sCInvoiceBank.CInvoiceBankToPayTC  = ?)
    then do:
        <M-2 run SetMessage
           (input  trim(#T-4'The payment amount in the transaction currency cannot be zero for bank $1.':255(65484)t-4#) (icMessage), 
            input  t_sCInvoiceBank.tcBankNumber (icArguments), 
            input  'tCInvoiceBank.CInvoiceBankToPayTC':U (icFieldName), 
            input  t_sCInvoiceBank.CInvoiceBankToPayTC (icFieldValue), 
            input  'E':U (icType), 
            input  3 (iiSeverity), 
            input  '':U (icRowid), 
            input  'QadFin-7086':U (icFcMsgNumber), 
            input  '':U (icFcExplanation), 
            input  '':U (icFcIdentification), 
            input  '':U (icFcContext), 
            output viFcReturnSuper (oiReturnStatus)) in BCInvoice>

        assign oiReturnStatus = -1.
    end.
    

    /* Bank To Pay cannot be changed if the invoice was selected and still is selected */
    if (t_sCInvoice.tc_Status                = "":U   or
        t_sCInvoice.tc_Status                = "C":U) and
        t_sCInvoice.CInvoiceIsSelected       = true   and
        t_iCInvoice.CInvoiceIsSelected       = true   and
        t_sCInvoiceBank.tc_Status            = "C":U  and
        t_sCInvoiceBank.CInvoiceBankToPayTC <> t_iCInvoiceBank.CInvoiceBankToPayTC and
        /* PWI only for the records that are modified by another program then payment selection */
        t_sCInvoiceBank.tlValidatePayment    = true and       
        /* This flag is to by-pass validation for payment selection un-confirm through a daemon */
        ilDaemonLogicByPass = true
    then do:
    
     assign vcMessage      = trim(#T-22'You cannot modify the payment accounts because the invoice is (partly) paid or included in a payment that is currently being processed.':150(1224)T-22#) + chr(10) +
                                trim(subst(#T-23'GL Calendar Year = &1; GL Period = &2; Daybook = &3; Voucher = &4.':255(969)T-23#, string(t_sCInvoice.CInvoicePostingYear), string(t_sCInvoice.CInvoicePostingPeriod), t_sCInvoice.tcJournalCode, string(t_sCInvoice.CInvoiceVoucher)))
               oiReturnStatus = -1.

        <M-21 run SetMessage
           (input  vcMessage (icMessage), 
            input  '':U (icArguments), 
            input  '':U (icFieldName), 
            input  '':U (icFieldValue), 
            input  'E':U (icType), 
            input  3 (iiSeverity), 
            input  t_sCInvoice.tc_Rowid (icRowid), 
            input  'QadFin-7118':U (icFcMsgNumber), 
            input  '':U (icFcExplanation), 
            input  '':U (icFcIdentification), 
            input  '':U (icFcContext), 
            output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
    end.

    assign vdBankToPayTC = vdBankToPayTC + t_sCInvoiceBank.CInvoiceBankToPayTC.

    for each t_sCInvoiceBankPayCode where
             t_sCInvoiceBankPayCode.tc_ParentRowid = t_sCInvoiceBank.tc_Rowid and
            (t_sCInvoiceBankPayCode.tc_Status      = "N":U                    or
             t_sCInvoiceBankPayCode.tc_Status      = "C":U):
        if t_sCInvoiceBankPayCode.tc_Status = "C":U
        then do:
            find t_iCInvoiceBankPayCode where
                 t_iCInvoiceBankPayCode.tc_Rowid = t_sCInvoiceBankPayCode.tc_Rowid
                 no-error.

            if not available t_iCInvoiceBankPayCode
            then do:
                <M-17 run SetMessage
          (input  trim(#T-18'The system cannot find initial values for the supplier invoice bank pay code with bank number $1 (Supplier Invoice $2 $3 $4).':255(65524)t-18#) (icMessage), 
           input  t_sCInvoiceBank.tcBankNumber + chr(2) + string(t_sCInvoice.CInvoicePostingYear) + chr(2) + t_sCInvoice.tcJournalCode + chr(2) + string(t_sCInvoice.CInvoiceVoucher) (icArguments), 
           input  '':U (icFieldName), 
           input  '':U (icFieldValue), 
           input  'E':U (icType), 
           input  '':U (iiSeverity), 
           input  t_sCInvoiceBankPayCode.tc_Rowid (icRowid), 
           input  'QadFin-7114':U (icFcMsgNumber), 
           input  '':U (icFcExplanation), 
           input  '':U (icFcIdentification), 
           input  '':U (icFcContext), 
           output viFcReturnSuper (oiReturnStatus)) in BCInvoice>

                assign oiReturnStatus = -1.
                next.
            end.
        end.

        if t_sCInvoiceBankPayCode.tc_Status        = "C":U and
           t_sCInvoiceBankPayCode.PayFormatCode_ID = t_iCInvoiceBankPayCode.PayFormatCode_ID
        then next.

        if not blStart12
        then do:
            <I-19 {bFcStartAndOpenInstance
                 &CLASS              = "BPaymentFormat"}>

            assign blStart12 = true.
        end.

        <M-20 run ValidatePayCode
           (input  t_sCInvoiceBankPayCode.PayFormatGroup_ID (iiPayFormatGroupId), 
            input  t_sCInvoiceBankPayCode.PayFormatCode_ID (iiPayFormatCodeId), 
            input  t_sCInvoiceBankPayCode.CInvoiceBankPayCodeValue (icPayCodeValue), 
            input  true (ilCheckMandatory), 
            input  t_sCInvoice.CInvoicePostingYear (iiYear), 
            input  t_sCInvoice.tcJournalCode (icDaybook), 
            input  t_sCInvoice.CInvoiceVoucher (iiVoucherNumber), 
            output viFcReturnSuper (oiReturnStatus)) in BPaymentFormat>

        if viFcReturnSuper < 0 or
           oiReturnStatus  = 0
        then assign oiReturnStatus = viFcReturnSuper.
    end.
end.

/* The sum of the payment bank account lines must be equal to the invoice balance */
if (t_sCInvoice.tc_Status                = "N":U                                or
    t_sCInvoice.tc_Status                = "C":U                                and
   (t_sCInvoice.CInvoiceBalanceDebitTC  <> t_iCInvoice.CInvoiceBalanceDebitTC   or
    t_sCInvoice.CInvoiceBalanceCreditTC <> t_iCInvoice.CInvoiceBalanceCreditTC) or
    can-find(first t_sCInvoiceBank where
                   t_sCInvoiceBank.tc_ParentRowid = t_sCInvoice.tc_Rowid and
                   t_sCInvoiceBank.tc_Status     <> "":U))                      and
    t_sCInvoice.CInvoiceType            <> {&INVOICETYPE-PREPAYMENT}            and
    can-find(first t_sCInvoiceBank where
                   t_sCInvoiceBank.tc_ParentRowid = t_sCInvoice.tc_Rowid and
                   t_sCInvoiceBank.tc_status     <> "D":U)
then do:
    if t_sCInvoice.CInvoiceBalanceDebitTC  <> 0                                  and
       t_sCInvoice.CInvoiceBalanceDebitTC  <> ?                                  and
       vdBankToPayTC                       <> t_sCInvoice.CInvoiceBalanceDebitTC or
       t_sCInvoice.CInvoiceBalanceCreditTC <> 0                                  and
       t_sCInvoice.CInvoiceBalanceCreditTC <> ?                                  and
       vdBankToPayTC                       <> t_sCInvoice.CInvoiceBalanceCreditTC
    then do:
        assign vcMessage      = trim(subst(#T-12'The sum of all payment bank account lines must be equal to the TC invoice amount (&1).':150(1194)T-12#, string(t_sCInvoice.tdCInvoiceOriginalTC))) + chr(10) +
                                trim(subst(#T-13'The credit balance of the supplier invoice is &1.':255(1195)t-13#, string(t_sCInvoice.CInvoiceBalanceCreditTC)))                                        + chr(10) +
                                trim(subst(#T-14'The debit balance of the supplier invoice is &1.':255(1196)t-14#, string(t_sCInvoice.CInvoiceBalanceDebitTC)))                                          + chr(10) +
                                trim(subst(#T-15'The accumulated bank lines amount is &1.':255(1197)t-15#,string(vdBankToPayTC)))                                                                        + chr(10) +
                                trim(subst(#T-16'GL Calendar Year = &1; GL Period = &2; Daybook = &3; Voucher = &4.':255(969)T-16#, string(t_sCInvoice.CInvoicePostingYear), string(t_sCInvoice.CInvoicePostingPeriod), t_sCInvoice.tcJournalCode, string(t_sCInvoice.CInvoiceVoucher)))
               oiReturnStatus = -1.

        <M-11 run SetMessage
           (input  vcMessage (icMessage), 
            input  '':U (icArguments), 
            input  'tCInvoice.tdCInvoiceOriginalTC':U (icFieldName), 
            input  string(t_sCInvoice.tdCInvoiceOriginalTC) (icFieldValue), 
            input  'E':U (icType), 
            input  3 (iiSeverity), 
            input  t_sCInvoice.tc_Rowid (icRowid), 
            input  'QadFin-7109':U (icFcMsgNumber), 
            input  '':U (icFcExplanation), 
            input  '':U (icFcIdentification), 
            input  '':U (icFcContext), 
            output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
    end.
end.