project QadFinancials > class BCInvoice > method ValidateComponentPreVat

Description

Validation method that is run from ValidateComponentPre. Fills amounts concerning VAT.
It is run before the ancestor code of the ValidateComponent.


Parameters


idCInvoiceExchangeRateinputdecimalExchange rate of creditor invoice
idCInvoiceRateScaleinputdecimalScale factor of creditor invoice
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


QadFinancials
method BCInvoice.ValidateComponentPre


program code (program5/bcinvoice.p)

/* ======================================================================== */
/* IMPORTANT: This method is run from ValidateComponentPre                  */
/* The code in this method is nested within the for each t_sCInvoice        */
/* This can only work when both methods are defined in the same segment (5) */
/* ======================================================================== */

for each t_sCInvoiceVat where
         t_sCInvoiceVat.tc_ParentRowid = t_sCInvoice.tc_Rowid and
         t_sCInvoiceVat.tc_Status      = "N":U:
    /* Delete duplicated records which already deleted in tCInvoiceVat but not deleted in t_sCInvoiceVat */
    find first tCInvoiceVat where 
               tCInvoiceVat.tc_Rowid = t_sCInvoiceVat.tc_Rowid no-error.
    if not available tCInvoiceVat 
    then do:
        delete t_sCInvoiceVat.
        next.
    end.
    
    if (t_sCInvoiceVat.CInvoiceVatVatCreditCC <> 0 and t_sCInvoiceVat.CInvoiceVatVatDebitCC <> 0 and t_sCInvoiceVat.CInvoiceVatVatCreditCC <> t_sCInvoiceVat.CInvoiceVatVatDebitCC ) 
    then do: 
        assign vcMessage = #T-2'There are non-zero values in SC Tax Amount DR and CR. They must be equal or one must be zero.':255(670628250)T-2#.  
    
        <M-19 run SetMessage
           (input  vcMessage (icMessage), 
            input  '':U (icArguments), 
            input  '':U (icFieldName), 
            input  '':U (icFieldValue), 
            input  'E':U (icType), 
            input  3 (iiSeverity), 
            input  tCInvoiceVat.tc_Rowid (icRowid), 
            input  'qadfin-644767':U (icFcMsgNumber), 
            input  '':U (icFcExplanation), 
            input  '':U (icFcIdentification), 
            input  '':U (icFcContext), 
            output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
                            
        assign oiReturnStatus = -1.
        Return.
    end.
    
    
    
    /* Fill LC amounts */
    if t_sCInvoice.tcCurrencyCode = vcCompanyLC
    then assign t_sCInvoiceVat.CInvoiceVatVatBaseDebitLC  = t_sCInvoiceVat.CInvoiceVatVatBaseDebitTC
                t_sCInvoiceVat.CInvoiceVatVatBaseCreditLC = t_sCInvoiceVat.CInvoiceVatVatBaseCreditTC
                t_sCInvoiceVat.CInvoiceVatVatDebitLC      = t_sCInvoiceVat.CInvoiceVatVatDebitTC
                t_sCInvoiceVat.CInvoiceVatVatCreditLC     = t_sCInvoiceVat.CInvoiceVatVatCreditTC.
    else assign t_sCInvoiceVat.CInvoiceVatVatBaseDebitLC  = <M-76 GetAmountPreferencingExpected
                                                               (input  t_sCInvoiceVat.CInvoiceVatVatBaseDebitLC (idExpectedAmount), 
                                                                input  t_sCInvoiceVat.CInvoiceVatVatBaseDebitTC * t_sCInvoice.CInvoiceExchangeRate * t_sCInvoice.CInvoiceRateScale (idCalculatedAmount), 
                                                                input  viCompanyLCId (iiCurrencyId)) in BCInvoice>
                t_sCInvoiceVat.CInvoiceVatVatBaseCreditLC = <M-42 GetAmountPreferencingExpected
                                                               (input  t_sCInvoiceVat.CInvoiceVatVatBaseCreditLC (idExpectedAmount), 
                                                                input  t_sCInvoiceVat.CInvoiceVatVatBaseCreditTC * t_sCInvoice.CInvoiceExchangeRate * t_sCInvoice.CInvoiceRateScale (idCalculatedAmount), 
                                                                input  viCompanyLCId (iiCurrencyId)) in BCInvoice>
                t_sCInvoiceVat.CInvoiceVatVatDebitLC      = <M-50 GetAmountPreferencingExpected
                                                               (input  t_sCInvoiceVat.CInvoiceVatVatDebitLC (idExpectedAmount), 
                                                                input  t_sCInvoiceVat.CInvoiceVatVatDebitTC * t_sCInvoice.CInvoiceExchangeRate * t_sCInvoice.CInvoiceRateScale (idCalculatedAmount), 
                                                                input  viCompanyLCId (iiCurrencyId)) in BCInvoice>
                t_sCInvoiceVat.CInvoiceVatVatCreditLC     = <M-79 GetAmountPreferencingExpected
                                                               (input  t_sCInvoiceVat.CInvoiceVatVatCreditLC (idExpectedAmount), 
                                                                input  t_sCInvoiceVat.CInvoiceVatVatCreditTC * t_sCInvoice.CInvoiceExchangeRate * t_sCInvoice.CInvoiceRateScale (idCalculatedAmount), 
                                                                input  viCompanyLCId (iiCurrencyId)) in BCInvoice>.

    /* Fill CC amounts */
    if viCompanyCCId <> 0 and
       viCompanyCCId <> ?
    then do:
        if t_sCInvoice.tcCurrencyCode = vcCompanyCC
        then assign t_sCInvoiceVat.CInvoiceVatVatBaseDebitCC  = t_sCInvoiceVat.CInvoiceVatVatBaseDebitTC
                    t_sCInvoiceVat.CInvoiceVatVatBaseCreditCC = t_sCInvoiceVat.CInvoiceVatVatBaseCreditTC
                    t_sCInvoiceVat.CInvoiceVatVatDebitCC      = t_sCInvoiceVat.CInvoiceVatVatDebitTC
                    t_sCInvoiceVat.CInvoiceVatVatCreditCC     = t_sCInvoiceVat.CInvoiceVatVatCreditTC.
        else if vlDomainIsStatutory = false
        then assign t_sCInvoiceVat.CInvoiceVatVatBaseDebitCC  = t_sCInvoiceVat.CInvoiceVatVatBaseDebitLC
                    t_sCInvoiceVat.CInvoiceVatVatBaseCreditCC = t_sCInvoiceVat.CInvoiceVatVatBaseCreditLC
                    t_sCInvoiceVat.CInvoiceVatVatDebitCC      = t_sCInvoiceVat.CInvoiceVatVatDebitLC
                    t_sCInvoiceVat.CInvoiceVatVatCreditCC     = t_sCInvoiceVat.CInvoiceVatVatCreditLC.
        else do:
            if idCInvoiceExchangeRate = ?
            then do:
                <M-29 run GetExRateByEntityInvoiceFlag
                   (input  t_sCInvoice.CInvoiceDate (itCInvoiceDate), 
                    input  t_sCInvoice.CInvoicePostingDate (itCInvoicePostingDate), 
                    input  0 (iiFromCurrencyId), 
                    input  t_sCInvoice.tcCurrencyCode (icFromCurrencyCode), 
                    input  viCompanyCCId (iiToCurrencyId), 
                    input  vcCompanyCC (icToCurrencyCode), 
                    input  0 (iiExchangeRateTypeId), 
                    input  {&EXCHANGERATETYPE-STATUTORY} (icExchangeRateTypeCode), 
                    output idCInvoiceExchangeRate (odCInvoiceExchangeRate), 
                    output idCInvoiceRateScale (odCInvoiceRateScale), 
                    output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
                if viFcReturnSuper <> 0 or oiReturnStatus  >= 0
                then assign oiReturnStatus = viFcReturnSuper.
                
                <M-57 run CheckLinkedInvoiceCC
                   (input  t_sCInvoice.tc_Rowid (icInvoiceRowid), 
                    input-output idCInvoiceExchangeRate (bdExchangeRate), 
                    input-output idCInvoiceRateScale (bdRateScale), 
                    output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
                
                if viFcReturnSuper <> 0 or oiReturnStatus  >= 0
                then assign oiReturnStatus = viFcReturnSuper.
                
            end. /* if idCInvoiceExchangeRate = ? */
            
            assign t_sCInvoiceVat.CInvoiceVatVatBaseDebitCC  = if t_sCInvoiceVat.CInvoiceVatVatBaseDebitCC > 0 
                                                                then t_sCInvoiceVat.CInvoiceVatVatBaseDebitCC
                                                                else  <M-8 RoundAmount
                                                                          (input  t_sCInvoiceVat.CInvoiceVatVatBaseDebitTC * idCInvoiceExchangeRate * idCInvoiceRateScale (idUnroundedAmount), 
                                                                           input  viCompanyCCId (iiCurrencyID), 
                                                                           input  vcCompanyCC (icCurrencyCode)) in business>
                   t_sCInvoiceVat.CInvoiceVatVatBaseCreditCC = if t_sCInvoiceVat.CInvoiceVatVatBaseCreditCC > 0 
                                                                then t_sCInvoiceVat.CInvoiceVatVatBaseCreditCC
                                                                else    <M-9 RoundAmount
                                                                          (input  t_sCInvoiceVat.CInvoiceVatVatBaseCreditTC * idCInvoiceExchangeRate * idCInvoiceRateScale (idUnroundedAmount), 
                                                                           input  viCompanyCCId (iiCurrencyID), 
                                                                           input  vcCompanyCC (icCurrencyCode)) in business>
                   t_sCInvoiceVat.CInvoiceVatVatDebitCC      = if t_sCInvoiceVat.CInvoiceVatVatDebitCC > 0 
                                                                then t_sCInvoiceVat.CInvoiceVatVatDebitCC
                                                                else    <M-10 RoundAmount
                                                                          (input  t_sCInvoiceVat.CInvoiceVatVatDebitTC * idCInvoiceExchangeRate * idCInvoiceRateScale (idUnroundedAmount), 
                                                                           input  viCompanyCCId (iiCurrencyID), 
                                                                           input  vcCompanyCC (icCurrencyCode)) in business>
                   t_sCInvoiceVat.CInvoiceVatVatCreditCC     = if t_sCInvoiceVat.CInvoiceVatVatCreditCC > 0 
                                                                then t_sCInvoiceVat.CInvoiceVatVatCreditCC
                                                                else    <M-11 RoundAmount
                                                                          (input  t_sCInvoiceVat.CInvoiceVatVatCreditTC * idCInvoiceExchangeRate * idCInvoiceRateScale (idUnroundedAmount), 
                                                                           input  viCompanyCCId (iiCurrencyID), 
                                                                           input  vcCompanyCC (icCurrencyCode)) in business>.

        end. /* else do: */
    end. /* if viCompanyCCId <> 0 and */
end. /* for each t_sCInvoiceVat where */

/* Fill the VAT fields on CInvoice */
if t_sCInvoice.tc_Status  = "N":U or
   t_sCInvoice.tc_Status  = "C":U
then do:
    for each t_sCInvoiceVat where
             t_sCInvoiceVat.tc_ParentRowid = t_sCInvoice.tc_Rowid and
             t_sCInvoiceVat.tc_Status     <> "D":U:
        if t_sCInvoiceVat.CInvoiceVatSequence = 1
        then accumulate t_sCInvoiceVat.CInvoiceVatVatBaseDebitTC  (total)
                        t_sCInvoiceVat.CInvoiceVatVatBaseCreditTC (total)
                        t_sCInvoiceVat.CInvoiceVatVatBaseDebitLC  (total)
                        t_sCInvoiceVat.CInvoiceVatVatBaseCreditLC (total)
                        t_sCInvoiceVat.CInvoiceVatVatBaseDebitCC  (total)
                        t_sCInvoiceVat.CInvoiceVatVatBaseCreditCC (total).
                   
        accumulate t_sCInvoiceVat.CInvoiceVatVatDebitTC      (total)
                   t_sCInvoiceVat.CInvoiceVatVatCreditTC     (total)
                   t_sCInvoiceVat.CInvoiceVatNonRecTaxAmtTC  (total)
                   t_sCInvoiceVat.CInvoiceVatVatDebitLC      (total)
                   t_sCInvoiceVat.CInvoiceVatVatCreditLC     (total)
                   t_sCInvoiceVat.CInvoiceVatVatDebitCC      (total)
                   t_sCInvoiceVat.CInvoiceVatVatCreditCC     (total).
    end.

    assign t_sCInvoice.CInvoiceVatBaseDebitTC  = accum total t_sCInvoiceVat.CInvoiceVatVatBaseDebitTC
           t_sCInvoice.CInvoiceVatBaseCreditTC = accum total t_sCInvoiceVat.CInvoiceVatVatBaseCreditTC
           t_sCInvoice.CInvoiceVatDebitTC      = accum total t_sCInvoiceVat.CInvoiceVatVatDebitTC
           t_sCInvoice.CInvoiceVatCreditTC     = accum total t_sCInvoiceVat.CInvoiceVatVatCreditTC
           t_sCInvoice.CInvoiceNonRecTaxAmtTC  = accum total t_sCInvoiceVat.CInvoiceVatNonRecTaxAmtTC
           t_sCInvoice.CInvoiceVatBaseDebitLC  = accum total t_sCInvoiceVat.CInvoiceVatVatBaseDebitLC
           t_sCInvoice.CInvoiceVatBaseCreditLC = accum total t_sCInvoiceVat.CInvoiceVatVatBaseCreditLC
           t_sCInvoice.CInvoiceVatDebitLC      = accum total t_sCInvoiceVat.CInvoiceVatVatDebitLC
           t_sCInvoice.CInvoiceVatCreditLC     = accum total t_sCInvoiceVat.CInvoiceVatVatCreditLC
           t_sCInvoice.CInvoiceVatBaseDebitCC  = accum total t_sCInvoiceVat.CInvoiceVatVatBaseDebitCC
           t_sCInvoice.CInvoiceVatBaseCreditCC = accum total t_sCInvoiceVat.CInvoiceVatVatBaseCreditCC
           t_sCInvoice.CInvoiceVatDebitCC      = accum total t_sCInvoiceVat.CInvoiceVatVatDebitCC
           t_sCInvoice.CInvoiceVatCreditCC     = accum total t_sCInvoiceVat.CInvoiceVatVatCreditCC.           
end.