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
| idCInvoiceExchangeRate | input | decimal | Exchange rate of creditor invoice |
| idCInvoiceRateScale | input | decimal | Scale factor of creditor invoice |
| oiReturnStatus | output | integer | Return status of the method. |
Internal usage
QadFinancials
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.