project QadFinancials > class BCInvoice > method CreateCIPostingExt

Description

Extension on CreateCIPosting (becaus it is growing outside of its limits)


Parameters


iiCInvoiceIdinputinteger
icCInvoiceTypeinputcharacter
idInvoiceAmountTCinputdecimal
idInvoiceAmountLCinputdecimal
idInvoiceAmountCCinputdecimal
icPostingTypeinputcharacter
iiControlPostingLineIdinputinteger
ilIsInitialStatusinputlogicalat modify: pass the initial value of the IsInitialStatus flag, in all other cases, pass false
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


QadFinancials
method BCInvoice.CreateCIPosting2


program code (program3/bcinvoice.p)

if not can-find(first tCInvoiceMovement where
                      tCInvoiceMovement.tc_ParentRowid = tCInvoice.tc_Rowid)
then do:
    <M-1 run AddDetailLine
       (input  'CInvoiceMovement':U (icTable), 
        input  tCInvoice.tc_Rowid (icParentRowid), 
        output viFcReturnSuper (oiReturnStatus)) in BCInvoice>

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

    assign tCInvoiceMovement.CInvoice_ID          = iiCInvoiceId
           tCInvoiceMovement.PostingLine_ID       = iiControlPostingLineId
           tCInvoiceMovement.CInvoiceMovementType = {&MOVEMENTTYPE-INITIAL}.

    /* only update the balances for the records that have the initial status flag on false */
    /* for example : modify initial status invoice, change invoice status code to one with initial status = false
       then the balances don't need to update here anymore, already done in ValidateComponent */
    if not ilIsInitialStatus
    then do:
        
        if icPostingType = {&POSTINGTYPE-DEBIT}
        then assign tCInvoice.CInvoiceBalanceDebitTC  = idInvoiceAmountTC
                    tCInvoice.CInvoiceBalanceDebitLC  = idInvoiceAmountLC
                    tCInvoice.CInvoiceBalanceDebitCC  = if idInvoiceAmountCC = ? then 0
                                                        else idInvoiceAmountCC                    
                    tCInvoice.CInvoiceBalanceCreditTC = 0
                    tCInvoice.CInvoiceBalanceCreditLC = 0
                    tCInvoice.CInvoiceBalanceCreditCC = 0.

        if icPostingType = {&POSTINGTYPE-CREDIT}
        then assign tCInvoice.CInvoiceBalanceCreditTC = idInvoiceAmountTC
                    tCInvoice.CInvoiceBalanceCreditLC = idInvoiceAmountLC
                    tCInvoice.CInvoiceBalanceCreditCC = if idInvoiceAmountCC = ? then 0
                                                        else idInvoiceAmountCC     
                    tCInvoice.CInvoiceBalanceDebitTC  = 0
                    tCInvoice.CInvoiceBalanceDebitLC  = 0
                    tCInvoice.CInvoiceBalanceDebitCC  = 0.

    
        assign tCInvoice.CInvoiceBalanceTC = tCInvoice.CInvoiceBalanceDebitTC - tCInvoice.CInvoiceBalanceCreditTC
               tCInvoice.CInvoiceBalanceLC = tCInvoice.CInvoiceBalanceDebitLC - tCInvoice.CInvoiceBalanceCreditLC
               tCInvoice.CInvoiceBalanceCC = tCInvoice.CInvoiceBalanceDebitCC - tCInvoice.CInvoiceBalanceCreditCC
               tCInvoice.CInvoiceIsOpen =
                   tCInvoice.CInvoiceBalanceTC <> 0 or
                   tCInvoice.CInvoiceBalanceLC <> 0 or
                   tCInvoice.CInvoiceBalanceCC <> 0
               tCInvoice.tc_Status =
                   if tCInvoice.tc_Status = "":U
                   then "C":U
                   else tCInvoice.tc_Status.
    end. /* if not ilIsInitialStatus */
end. /* if not can-find(first tCInvoiceMovement where */