project QadFinancials > class BDInvoice > method ApiStdMaintainTTWithIntPostCreateVat

Description

Create DInvoiceVat records based on the records that were passed by the caller.


Parameters


icDInvoiceRowidinputcharacterDInvoice Rowid
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


QadFinancials
method BDInvoice.ApiStdMaintainTTWithIntPost


program code (program8/bdinvoice.p)

/* ===================================================================== */
/* Create tCInvoiceVat records based upon the tApiStdDInvoiceVat records */
/* ===================================================================== */
for each tApiStdDInvoiceVat where
         tApiStdDInvoiceVat.tc_Status <> "D":
    <M-84 run AddDetailLine
       (input  'DInvoiceVat':U (icTable), 
        input  icDInvoiceRowid (icParentRowid), 
        output viFcReturnSuper (oiReturnStatus)) in BDInvoice>
    if viFcReturnSuper < 0
    then do:
        assign oiReturnStatus = viFcReturnSuper.
        return.
    end. /* if viFcReturnSuper < 0 */
    buffer-copy tApiStdDInvoiceVat
         except tApiStdDInvoiceVat.DInvoiceVAT_ID
                tApiStdDInvoiceVat.DInvoice_ID
                tApiStdDInvoiceVat.tc_ParentRowid
                tApiStdDInvoiceVat.tc_Rowid
                tApiStdDInvoiceVat.tc_Status
             to tDInvoiceVat. 
    if (tDInvoiceVat.DInvoiceVatVatCreditCC <> 0 and tDInvoiceVat.DInvoiceVatVatCreditCC <> ?) or
       (tDInvoiceVat.DInvoiceVatVatDebitCC  <> 0 and tDInvoiceVat.DInvoiceVatVatDebitCC  <> ?)
    then assign vdExchangeRateCC                         = if tDInvoiceVat.DInvoiceVatVatCreditCC <> 0 and tDInvoiceVat.DInvoiceVatVatCreditTC <> 0
                                                           then tDInvoiceVat.DInvoiceVatVatCreditCC / tDInvoiceVat.DInvoiceVatVatCreditTC
                                                           else if tDInvoiceVat.DInvoiceVatVatDebitCC <> 0 and tDInvoiceVat.DInvoiceVatVatDebitTC <> 0
                                                                then tDInvoiceVat.DInvoiceVatVatDebitCC / tDInvoiceVat.DInvoiceVatVatDebitTC
                                                                else ? 
                tDInvoiceVat.DInvoiceVatVatBaseCreditCC  = <M-46 RoundAmount
                                                              (input  tDInvoiceVat.DInvoiceVatVatBaseCreditTC * vdExchangeRateCC (idUnroundedAmount), 
                                                               input  viCompanyCCID (iiCurrencyID), 
                                                               input  vcCompanyCC (icCurrencyCode)) in BDInvoice>
                tDInvoiceVat.DInvoiceVatVatBaseDebitCC   = <M-53 RoundAmount
                                                              (input  tDInvoiceVat.DInvoiceVatVatBaseDebitTC * vdExchangeRateCC (idUnroundedAmount), 
                                                               input  viCompanyCCID (iiCurrencyID), 
                                                               input  vcCompanyCC (icCurrencyCode)) in BDInvoice>.
end. /* for each tApiDInvoiceVat where */ 

/* =================================================================== */
/* Get some Debtor related info that we need to create the posting etc */
/* =================================================================== */
if not available tqDebtorByDebtor and 
   tApiDInvoice.Company_ID   <> 0    and tApiDInvoice.Company_ID   <> ? and
   tApiDInvoice.tcDebtorCode <> "":U and tApiDInvoice.tcDebtorCode <> ? 
then do:
    <Q-7 run DebtorByDebtor (first) (Read) (NoCache)
       (input tApiDInvoice.Company_ID, (CompanyId)
        input {&ADDRESSTYPECODESYSTEM-HEADOFFICE}, (AddressType)
        input tApiDInvoice.Debtor_ID, (DebtorId)
        input tApiDInvoice.tcDebtorCode, (DebtorCode)
        output dataset tqDebtorByDebtor) in BDebtor>
    Find first tqDebtorByDebtor no-lock no-error.
    if not available tqDebtorByDebtor
    then return.
end. /* if not available tqDebtorByDebtor and  */

/* ============================================================ */
/* First get the existing tDInvoice and tDInvoicePosting record */
/* ============================================================ */
find tDInvoice where
     tDInvoice.tc_Rowid = icDInvoiceRowid
     no-lock no-error.
if not available tDInvoice
then return.
find first tDInvoicePosting where
           tDInvoicePosting.tc_ParentRowid = tDInvoice.tc_rowid
           no-lock no-error.
assign viDInvoicePostingID = (if available tDInvoicePosting
                              then tDInvoicePosting.Posting_ID
                              else ?).

/* ============================================ */                              
/* Assign the total invoice amount in TC and LC */
/* ============================================ */
assign vdDInvoiceAmountTC = if tApiDInvoice.DInvoiceOriginalDebitTC <> 0 and 
                               tApiDInvoice.DInvoiceOriginalDebitTC <> ? 
                            then tApiDInvoice.DInvoiceOriginalDebitTC 
                            else tApiDInvoice.DInvoiceOriginalCreditTC
       vdDInvoiceAmountLC = if tApiDInvoice.DInvoiceOriginalDebitLC <> 0 and 
                               tApiDInvoice.DInvoiceOriginalDebitLC <> ? 
                            then tApiDInvoice.DInvoiceOriginalDebitLC 
                            else tApiDInvoice.DInvoiceOriginalCreditLC.

/* ========================================== */
/* Re-compose the Posting using the new taxes */
/* ========================================== */
/* Empty unused input param-table before making the call */
empty temp-table tDIAccount.
<M-66 run CreateDIPosting
   (input  tDInvoice.DInvoice_ID (iiDInvoiceId), 
    input  tDInvoice.Period_ID (iiPeriodId), 
    input  tDInvoice.DInvoicePostingYear (iiPeriodYear), 
    input  tDInvoice.DInvoicePostingYearPeriod (iiPeriodPeriod), 
    input  tDInvoice.DInvoicePostingDate (itPostingDate), 
    input  tDInvoice.Debtor_ID (iiDebtorId), 
    input  tDInvoice.tcDebtorCode (icDebtorCode), 
    input  tDInvoice.DInvoiceType (icDInvoiceType), 
    input  tDInvoice.Division_ID (iiDivisionId), 
    input  tDInvoice.tcDivisionCode (icDivisionCode), 
    input  tDInvoice.Journal_ID (iiJournalId), 
    input  tDInvoice.tcJournalCode (icJournalCode), 
    input  tDInvoice.DInvoiceVoucher (iiVoucher), 
    input  tDInvoice.DInvoiceTaxPointDate (itTaxPointDate), 
    input  tDInvoice.DInvoiceDescription (icDescription), 
    input  vdDInvoiceAmountTC (idInvoiceAmountTC), 
    input  vdDInvoiceAmountLC (idInvoiceAmountLC), 
    input  ? (idInvoiceAmountCC), 
    input  tDInvoice.DInvoiceCurrency_ID (iiCurrencyId), 
    input  tDInvoice.tcCurrencyCode (icCurrencyCode), 
    input  tDInvoice.DInvoiceExchangeRate (idExchangeRate), 
    input  tDInvoice.DInvoiceRateScale (idExchangeRateScale), 
    input  tDInvoice.DInvoiceDIText (icDIText), 
    input  tDInvoice.DInvoiceDate (itInvoiceDate), 
    input  ' ':U (icPostingType), 
    input-output viDInvoicePostingID (biPostingId), 
    input-output viBJournalEntryDIID (biBJournalEntryId), 
    input  tDIAccount (tDIAccount), 
    input-output tDInvoiceVat (tApiDInvoiceVat), 
    input  ' ':U (icGLCode), 
    input  tDInvoice.tcCostCentreCode (icCostCentreCode), 
    input  tDInvoice.tcProjectCode (icProjectCode), 
    input  false (ilOnlyControlAccount), 
    input  ? (icShipFromCountryCode), 
    input  ? (icShipToCountryCode), 
    input  ? (ilShipFromCountryIsEUCountry), 
    input  ? (ilShipToCountryIsEUCountry), 
    input  ? (icTxclTaxCls), 
    input  ? (icTxuTaxUsage), 
    input  ? (icShipToTxzTaxZone), 
    input  ? (icTxenvTaxEnv), 
    input  ? (icPaymentCondition), 
    input  ? (ilIsTaxInCityFromShipTo), 
    input  tDInvoice.DInvoiceIsTaxable (ilIsTaxable), 
    input  tDInvoice.tcCostCentreCode (icControlCostCentreCode), 
    input  tDInvoice.tcProjectCode (icControlProjectCode), 
    input  ? (iiShipFromAddressId), 
    input  ? (iiShipToAddressId), 
    input  ? (icSoldToDebtorCode), 
    input  tDInvoice.DInvoiceIsTaxExcluded (ilDInvoiceIsTaxExcluded), 
    input  tqDebtorByDebtor.tcBusinessRelationCode (icBusinessRelationCode), 
    input  tqDebtorByDebtor.tcBusinessRelationICCode (icBusinessRelationICCode), 
    input  tqDebtorByDebtor.tiInvControlGLProfile_ID (iiInvControlGLProfileId), 
    input  tqDebtorByDebtor.tiCnControlGLProfile_ID (iiCnControlGLProfileId), 
    input  tqDebtorByDebtor.tiPrepayControlGLProfile_ID (iiPrepayControlGLProfileId), 
    input  tqDebtorByDebtor.tiSalesAccountGLProfile_ID (iiSalesAccGLProfileId), 
    input  tqDebtorByDebtor.tiFinChgGLProfile_ID (iiFinChgGLProfileId), 
    input  tDInvoice.tcDivisionCode (icControlDivisionCode), 
    input  0 (iiDeductionControlGLProfileId), 
    input  ? (idExchangeRateCC), 
    input  ? (idExchangeRateScaleCC), 
    output viFcReturnSuper (oiReturnStatus)) in BDInvoice>
if viFcReturnSuper <> 0 
then assign oiReturnStatus = viFcReturnSuper.
if oiReturnStatus < 0 
then Return.