project QadFinancials > class BPosting > method AdditionalUpdatesPreCreateTempTables

Description

Create the temp-tables used to pass to other components. This way, we only need to go through the instance records once.


Parameters


ilPostingChangedinputlogical
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


QadFinancials
method BPosting.AdditionalUpdatesPre


program code (program5/bposting.p)

/* ================== */
/* Exception Handling */
/* ================== */
assign oiReturnStatus      = -98
       viLocalReturnStatus = 0.

TEMPTABLEBLOCK:
do:
    /* ======================================= */
    /* create temp-table for open item records */
    /* GL Open Item Reconciliation             */
    /* ======================================= */
    assign viLayerID = tPosting.tiLayer_ID.
    if available t_iPosting and tPosting.Journal_ID <> t_iPosting.Journal_ID and tPosting.Journal_ID <> 0 and tPosting.Journal_ID <> ?
    then do:
        <Q-6 run JournalByLayerIDJournalID (all) (Read) (Cache)
           (input ?, (LayerId)
            input ?, (CompanyId)
            input tPosting.Journal_ID, (JournalID)
            output dataset tqJournalByLayerIDJournalID) in BJournal>

        find first tqJournalByLayerIDJournalID where
                   tqJournalByLayerIDJournalID.tiJournal_ID =  tPosting.Journal_ID 
                   no-error.
        if available tqJournalByLayerIDJournalID
        then assign viLayerID = tqJournalByLayerIDJournalID.tiLayer_ID.
    end.

    for each tPostingLine where
             tPostingLine.tc_ParentRowid  = tPosting.tc_Rowid  and
             tPostingLine.tc_Status       = "C":U              and
             tPostingLine.tcGLTypeCode   <> {&GLTYPECODE-OPEN} 
    no-lock:
    
        find t_iPostingLine where
             t_iPostingLine.PostingLine_ID = tPostingLine.PostingLine_ID and
             t_iPostingLine.tc_ParentRowid = tPosting.tc_Rowid            and
             t_iPostingLine.tcGLTypeCode   = {&GLTYPECODE-OPEN}  
             no-error.       
             
        if available t_iPostingLine
        then do:
        
            <M-57 run AdditionalUpdatesPreCreateTempTablesD  (output viFcReturnSuper (oiReturnStatus)) in BPosting>
            if viFcReturnSuper <> 0 and viLocalReturnStatus >= 0
            then assign viLocalReturnStatus = viFcReturnSuper.
            if viFcReturnSuper < 0 
            then leave TEMPTABLEBLOCK.  
        end. /*if available t_iPostingLine*/
    end. /*for each tPostingLine where*/

    for each tPostingLine where
             tPostingLine.tc_ParentRowid = tPosting.tc_Rowid and
             tPostingLine.tcGLTypeCode   = {&GLTYPECODE-OPEN}  :
     
        find t_iPostingLine where
             t_iPostingLine.tc_Rowid = tPostingLine.tc_Rowid
             no-error.

        /* =========================================================== */
        /* only execute when you have changed record in allocate later */
        /* =========================================================== */
        if not available t_iPostingLine and
           tPostingLine.tcAllocationType = {&ALLOCATIONTYPE-LATER}
        then next.

        /* ==================================================== */
        /* create tGLOpenItemMovement records for DELETED lines */
        /* ==================================================== */
        if tPosting.tc_Status = "D":U or tPostingLine.tc_Status = "D":U
        then do:
            if not available t_iPosting or
               not available t_iPostingLine
            then next.
            
            <M-40 run AdditionalUpdatesPreCreateTempTablesD  (output viFcReturnSuper (oiReturnStatus)) in BPosting>
            if viFcReturnSuper <> 0 and viLocalReturnStatus >= 0
            then assign viLocalReturnStatus = viFcReturnSuper.
            if viFcReturnSuper < 0 
            then leave TEMPTABLEBLOCK.
    
            next.
        end.
    
        /* ================================================ */
        /* create tGLOpenItemMovement records for NEW lines */
        /* ================================================ */
        if tPosting.tc_Status <> "D":U and tPostingLine.tc_Status = "N":U
        then do:
            <M-53 run AdditionalUpdatesPreCreateTempTablesN  (output viFcReturnSuper (oiReturnStatus)) in BPosting>
            if viFcReturnSuper <> 0 and viLocalReturnStatus >= 0
            then assign viLocalReturnStatus = viFcReturnSuper.
            if viFcReturnSuper < 0 
            then leave TEMPTABLEBLOCK.

            next.
        end.

        /* ===================================================== */
        /* create tGLOpenItemMovement records for MODIFIED lines */
        /* ===================================================== */
        if tPosting.tc_Status               <> "D":U                                and
           tPostingLine.tc_Status           <> "N":U                                and
           available t_iPostingLine                                                 and
          ( tPostingLine.tcAllocationType    <> t_iPostingLine.tcAllocationType      or
           tPostingLine.tcAllocationKey     <> t_iPostingLine.tcAllocationKey       or
           tPostingLine.PostingLineDebitTC  <> t_iPostingLine.PostingLineDebitTC    or
           tPostingLine.PostingLineDebitLC  <> t_iPostingLine.PostingLineDebitLC    or
           tPostingLine.PostingLineDebitCC  <> t_iPostingLine.PostingLineDebitCC    or
           tPostingLine.PostingLineCreditTC <> t_iPostingLine.PostingLineCreditTC   or
           tPostingLine.PostingLineCreditLC <> t_iPostingLine.PostingLineCreditLC   or
           tPostingLine.PostingLineCreditCC <> t_iPostingLine.PostingLineCreditCC   or
           tPostingLine.GL_ID               <> t_iPostingLine.GL_ID                 or
           tPostingLine.Currency_ID         <> t_iPostingLine.Currency_ID)
        then do:
            if not available t_iPosting or
               not available t_iPostingLine
            then next.
            
            <M-2 run AdditionalUpdatesPreCreateTempTablesC  (output viFcReturnSuper (oiReturnStatus)) in BPosting>
            if viFcReturnSuper <> 0 and viLocalReturnStatus >= 0
            then assign viLocalReturnStatus = viFcReturnSuper.
            if viFcReturnSuper < 0 
            then leave TEMPTABLEBLOCK.
    
            next.
        end.
    end. /* end for each tPostingLine {&GLTYPECODE-OPEN} */

    /* ====================== */
    /* create history records */
    /* ====================== */
    for each tPostingLine where
             tPostingLine.tc_ParentRowid = tPosting.tc_Rowid :
     
        find t_iPostingLine where
             t_iPostingLine.tc_Rowid = tPostingLine.tc_Rowid
             no-error.

        /* =========================================== */
        /* A Create tApiQPostingLine for DELETED lines */
        /* =========================================== */
        if tPostingLine.tc_Status = "D":U or
           tPosting.tc_Status     = "D":U
        then do:
            if not available t_iPosting or
               not available t_iPostingLine
            then leave TEMPTABLEBLOCK.
    
            create tApiQPostingLine.
    
            assign viApiQPostingLineID                         = viApiQPostingLineID + 1
                   tApiQPostingLine.QPostingLine_ID            = viApiQPostingLineID
                   tApiQPostingLine.Company_ID                 = t_iPosting.Company_ID
                   tApiQPostingLine.Period_ID                  = t_iPosting.Period_ID
                   tApiQPostingLine.GL_ID                      = t_iPostingLine.GL_ID
                   tApiQPostingLine.Division_ID                = t_iPostingLine.Division_ID
                   tApiQPostingLine.CostCentre_ID              = t_iPostingLine.CostCentre_ID
                   tApiQPostingLine.Project_ID                 = t_iPostingLine.Project_ID
                   tApiQPostingLine.Journal_ID                 = t_iPosting.Journal_ID
                   tApiQPostingLine.Currency_ID                = t_iPostingLine.Currency_ID
                   tApiQPostingLine.IntercoBusinessRelation_ID = t_iPostingLine.IntercoBusinessRelation_ID
                   tApiQPostingLine.QPostingLineDebitLC        = - t_iPostingLine.PostingLineDebitLC
                   tApiQPostingLine.QPostingLineCreditLC       = - t_iPostingLine.PostingLineCreditLC
                   tApiQPostingLine.QPostingLineDebitTC        = - t_iPostingLine.PostingLineDebitTC
                   tApiQPostingLine.QPostingLineCreditTC       = - t_iPostingLine.PostingLineCreditTC
                   tApiQPostingLine.QPostingLineDebitCC        = - t_iPostingLine.PostingLineDebitCC
                   tApiQPostingLine.QPostingLineCreditCC       = - t_iPostingLine.PostingLineCreditCC
                   tApiQPostingLine.QPostingLineQTY            = - t_iPostingLine.PostingLineQTY
                   tApiQPostingLine.QPostingLineInfo           = string(tPosting.PostingYear) + "/":U + string(tPosting.PostingPeriod) + "/":U + tPosting.tcJournalCode + "/":U + string(tPosting.PostingVoucher)
                   tApiQPostingLine.PeriodYearPeriod           = t_iPosting.PostingYear * 100 + t_iPosting.PostingPeriod
                   tApiQPostingLine.Layer_ID                   = t_iPosting.tiLayer_ID
                   tApiQPostingLine.JournalTypeCode            = t_iPosting.tcJournalTypeCode
                   tApiQPostingLine.tc_Rowid                   = string(viApiQPostingLineID)
                   tApiQPostingLine.tc_ParentRowid             = "":U
                   tApiQPostingLine.tc_Status                  = "N":U
                   tApiQPostingLine.QPostingDate               = t_iPostingLine.PostingDate. 
    
            /* =================================================================== */
            /* A.1 Create tApiQPostingSaf records for the tApiQPostingLine records */
            /* =================================================================== */
            for each t_iPostingSaf where
                     t_iPostingSaf.tc_ParentRowid = tPostingLine.tc_Rowid:
                create tApiQPostingSaf.
    
                assign viApiQPostingSafID                       = viApiQPostingSafID + 1
                       tApiQPostingSaf.QPostingSaf_ID           = viApiQPostingSafID
                       tApiQPostingSaf.QPostingLine_ID          = viApiQPostingLineID
                       tApiQPostingSaf.Saf_ID                   = t_iPostingSaf.Saf_ID
                       tApiQPostingSaf.QPostingSafParentType    = t_iPostingSaf.PostingSafParentType
                       tApiQPostingSaf.QPostingSafInputSequence = t_iPostingSaf.PostingSafInputSequence
                       tApiQPostingSaf.SafStructure_ID          = t_iPostingSaf.SafStructure_ID
                       tApiQPostingSaf.tc_Rowid                 = string(viApiQPostingSafID)
                       tApiQPostingSaf.tc_ParentRowid           = tApiQPostingLine.tc_Rowid
                       tApiQPostingSaf.tc_Status                = "N":U.
    
                if vlBankCashTrxInRealTime = TRUE and
                   (t_iPostingLine.tcGLTypeCode = {&GLTYPECODE-BANK} or
                    t_iPostingLine.tcGLTypeCode = {&GLTYPECODE-CASH})
                then do:
                    create tApiQPostingSafBank.
                    buffer-copy tApiQPostingSaf to tApiQPostingSafBank.
                    delete tApiQPostingSaf.
                end.
            end.
    
            if vlBankCashTrxInRealTime = TRUE and 
              (t_iPostingLine.tcGLTypeCode = {&GLTYPECODE-BANK} or
               t_iPostingLine.tcGLTypeCode = {&GLTYPECODE-CASH})
            then do:
                create tApiQPostingLineBank.
                buffer-copy tApiQPostingLine to tApiQPostingLineBank.
                delete tApiQPostingLine.
            end.

        end. /* A Create tApiQPostingLine for DELETED lines */
    
        /* ============================================ */
        /* B Create tApiQPostingLine for MODIFIED lines */
        /* ============================================ */
        if (ilPostingChanged = true and
            tPostingLine.tc_status <> 'N':U) or
           ((tPostingLine.tc_Status = 'C':U or           /* Posting-line changed */
            (tPostingLine.tc_Status = '':U and           /* Posting-safs changed */
             can-find (first tPostingSaf where
                             tPostingSaf.tc_ParentRowid = tPostingLine.tc_Rowid and
                             tPostingSaf.tc_status     <> '':U)))               and
           tPosting.tc_Status    <> 'D':U)              /* Posting not deleted */
        then do:
            if tPostingLine.tc_Status = '':U and
               ilPostingChanged = false
            then do:
                assign vlSafModif = false.
                for each tPostingSaf where
                         tPostingSaf.tc_ParentRowid = tPostingLine.tc_Rowid:
                    if tPostingSaf.tc_Status = 'C':U or
                       tPostingSaf.tc_Status = 'N':U or
                      (tPostingSaf.tc_Status = 'D':U and
                       can-find( t_iPostingSaf where
                                 t_iPostingSaf.tc_Rowid = tPostingSaf.tc_Rowid))
                    then do:
                        assign vlSafModif = true.
                        leave.
                    end.
                end.
                if vlSafModif = false
                then leave TEMPTABLEBLOCK.
            end.
    
            /* Find the original PostingLine (before changes) */
            if not available t_iPostingLine
            then do:
                assign vcMessage      = trim(#T-4'The original record for this posting line cannot be found.':255(3258)T-4#) + chr(10) +
                                        trim(subst("tPostingLine.tc_Rowid: &1.":U, trim(tPostingLine.tc_rowid)))
                       oiReturnStatus = -5.
    
                <M-3 run SetMessage
                   (input  vcMessage (icMessage), 
                    input  '':U (icArguments), 
                    input  '':U (icFieldName), 
                    input  tPostingLine.tc_Rowid (icFieldValue), 
                    input  'E':U (icType), 
                    input  3 (iiSeverity), 
                    input  tPostingLine.tc_Rowid (icRowid), 
                    input  'QadFin-7582':U (icFcMsgNumber), 
                    input  '':U (icFcExplanation), 
                    input  '':U (icFcIdentification), 
                    input  '':U (icFcContext), 
                    output viFcReturnSuper (oiReturnStatus)) in BPosting>
    
                leave TEMPTABLEBLOCK.
            end.
    
            /* ==================================================================================== */
            /* B.1 Positive QPostingLine for new values                                             */
            /* ==================================================================================== */
            create tApiQPostingLine.
    
            assign viApiQPostingLineID                         = viApiQPostingLineID + 1
                   tApiQPostingLine.QPostingLine_ID            = viApiQPostingLineID
                   tApiQPostingLine.Company_ID                 = tPosting.Company_ID
                   tApiQPostingLine.Period_ID                  = tPosting.Period_ID
                   tApiQPostingLine.GL_ID                      = tPostingLine.GL_ID
                   tApiQPostingLine.Division_ID                = tPostingLine.Division_ID
                   tApiQPostingLine.CostCentre_ID              = tPostingLine.CostCentre_ID
                   tApiQPostingLine.Project_ID                 = tPostingLine.Project_ID
                   tApiQPostingLine.Journal_ID                 = tPosting.Journal_ID
                   tApiQPostingLine.Currency_ID                = tPostingLine.Currency_ID
                   tApiQPostingLine.IntercoBusinessRelation_ID = tPostingLine.IntercoBusinessRelation_ID
                   tApiQPostingLine.QPostingLineDebitLC        = tPostingLine.PostingLineDebitLC
                   tApiQPostingLine.QPostingLineCreditLC       = tPostingLine.PostingLineCreditLC
                   tApiQPostingLine.QPostingLineDebitTC        = tPostingLine.PostingLineDebitTC
                   tApiQPostingLine.QPostingLineCreditTC       = tPostingLine.PostingLineCreditTC
                   tApiQPostingLine.QPostingLineDebitCC        = tPostingLine.PostingLineDebitCC
                   tApiQPostingLine.QPostingLineCreditCC       = tPostingLine.PostingLineCreditCC
                   tApiQPostingLine.QPostingLineQTY            = tPostingLine.PostingLineQTY
                   tApiQPostingLine.QPostingLineInfo           = string(tPosting.PostingYear) + "/":U + string(tPosting.PostingPeriod) + "/":U + tPosting.tcJournalCode + "/":U + string(tPosting.PostingVoucher)
                   tApiQPostingLine.PeriodYearPeriod           = tPosting.PostingYear * 100 + tPosting.PostingPeriod               
                   tApiQPostingLine.JournalTypeCode            = tPosting.tcJournalTypeCode
                   tApiQPostingLine.tc_Rowid                   = string(viApiQPostingLineID)
                   tApiQPostingLine.tc_ParentRowid             = "":U
                   tApiQPostingLine.tc_Status                  = "N":U
                   tApiQPostingLine.QPostingDate               = t_iPostingLine.PostingDate.
                   
            /* Assign the Layer */
            assign tApiQPostingLine.Layer_ID = viLayerID.
    
            /* =============================================================== */
            /* Create tApiQPostingSaf records for the tApiQPostingLine records */
            /* =============================================================== */
            for each tPostingSaf where
                     tPostingSaf.tc_ParentRowid = tPostingLine.tc_Rowid and
                     tPostingSaf.tc_Status     <> "D":U:
                create tApiQPostingSaf.
    
                assign viApiQPostingSafID                       = viApiQPostingSafID + 1
                       tApiQPostingSaf.QPostingSaf_ID           = viApiQPostingSafID
                       tApiQPostingSaf.QPostingLine_ID          = viApiQPostingLineID
                       tApiQPostingSaf.Saf_ID                   = tPostingSaf.Saf_ID
                       tApiQPostingSaf.QPostingSafParentType    = tPostingSaf.PostingSafParentType
                       tApiQPostingSaf.QPostingSafInputSequence = tPostingSaf.PostingSafInputSequence
                       tApiQPostingSaf.SafStructure_ID          = tPostingSaf.SafStructure_ID
                       tApiQPostingSaf.tc_Rowid                 = string(viApiQPostingSafID)
                       tApiQPostingSaf.tc_ParentRowid           = tApiQPostingLine.tc_Rowid
                       tApiQPostingSaf.tc_Status                = "N":U.
    
                if vlBankCashTrxInRealTime = TRUE and
                   (tPostingLine.tcGLTypeCode = {&GLTYPECODE-BANK} or
                    tPostingLine.tcGLTypeCode = {&GLTYPECODE-CASH})
                then do:
                    create tApiQPostingSafBank.
                    buffer-copy tApiQPostingSaf to tApiQPostingSafBank.
                    delete tApiQPostingSaf.
                end.
            end. /* for each tPostingSaf */
    
            if vlBankCashTrxInRealTime = TRUE and
               (tPostingLine.tcGLTypeCode = {&GLTYPECODE-BANK} or
                tPostingLine.tcGLTypeCode = {&GLTYPECODE-CASH})
            then do:
                create tApiQPostingLineBank.
                buffer-copy tApiQPostingLine to tApiQPostingLineBank.
                delete tApiQPostingLine.
            end.
    
            /* ==================================================================================== */
            /* B.2 Negative QPostingLine with old values                                            */
            /* ==================================================================================== */
            create tApiQPostingLine.
    
            assign viApiQPostingLineID                         = viApiQPostingLineID + 1
                   tApiQPostingLine.QPostingLine_ID            = viApiQPostingLineID
                   tApiQPostingLine.Company_ID                 = t_iPosting.Company_ID
                   tApiQPostingLine.Period_ID                  = t_iPosting.Period_ID
                   tApiQPostingLine.GL_ID                      = t_iPostingLine.GL_ID
                   tApiQPostingLine.Division_ID                = t_iPostingLine.Division_ID
                   tApiQPostingLine.CostCentre_ID              = t_iPostingLine.CostCentre_ID
                   tApiQPostingLine.Project_ID                 = t_iPostingLine.Project_ID
                   tApiQPostingLine.Journal_ID                 = t_iPosting.Journal_ID
                   tApiQPostingLine.Currency_ID                = t_iPostingLine.Currency_ID
                   tApiQPostingLine.IntercoBusinessRelation_ID = t_iPostingLine.IntercoBusinessRelation_ID
                   tApiQPostingLine.QPostingLineDebitLC        = - t_iPostingLine.PostingLineDebitLC
                   tApiQPostingLine.QPostingLineCreditLC       = - t_iPostingLine.PostingLineCreditLC
                   tApiQPostingLine.QPostingLineDebitTC        = - t_iPostingLine.PostingLineDebitTC
                   tApiQPostingLine.QPostingLineCreditTC       = - t_iPostingLine.PostingLineCreditTC
                   tApiQPostingLine.QPostingLineDebitCC        = - t_iPostingLine.PostingLineDebitCC
                   tApiQPostingLine.QPostingLineCreditCC       = - t_iPostingLine.PostingLineCreditCC
                   tApiQPostingLine.QPostingLineQTY            = - t_iPostingLine.PostingLineQTY
                   tApiQPostingLine.QPostingLineInfo           = string(tPosting.PostingYear) + "/":U + string(tPosting.PostingPeriod) + "/":U + tPosting.tcJournalCode + "/":U + string(tPosting.PostingVoucher)
                   tApiQPostingLine.PeriodYearPeriod           = t_iPosting.PostingYear * 100 + t_iPosting.PostingPeriod
                   tApiQPostingLine.Layer_ID                   = t_iPosting.tiLayer_ID
                   tApiQPostingLine.JournalTypeCode            = t_iPosting.tcJournalTypeCode
                   tApiQPostingLine.tc_Rowid                   = string(viApiQPostingLineID)
                   tApiQPostingLine.tc_ParentRowid             = "":U
                   tApiQPostingLine.tc_Status                  = "N":U
                   tApiQPostingLine.QPostingDate               = t_iPostingLine.PostingDate.
    
            /* =============================================================== */
            /* Create tApiQPostingSaf records for the tApiQPostingLine records */
            /* =============================================================== */
            for each t_iPostingSaf where
                     t_iPostingSaf.tc_ParentRowid = tPostingLine.tc_Rowid and
                     t_iPostingSaf.tc_Status     <> "D":U:
                create tApiQPostingSaf.
    
                assign viApiQPostingSafID                       = viApiQPostingSafID + 1
                       tApiQPostingSaf.QPostingSaf_ID           = viApiQPostingSafID
                       tApiQPostingSaf.QPostingLine_ID          = viApiQPostingLineID
                       tApiQPostingSaf.Saf_ID                   = t_iPostingSaf.Saf_ID
                       tApiQPostingSaf.QPostingSafParentType    = t_iPostingSaf.PostingSafParentType
                       tApiQPostingSaf.QPostingSafInputSequence = t_iPostingSaf.PostingSafInputSequence
                       tApiQPostingSaf.SafStructure_ID          = t_iPostingSaf.SafStructure_ID
                       tApiQPostingSaf.tc_Rowid                 = string(viApiQPostingSafID)
                       tApiQPostingSaf.tc_ParentRowid           = tApiQPostingLine.tc_Rowid
                       tApiQPostingSaf.tc_Status                = "N":U.
    
                if vlBankCashTrxInRealTime = TRUE and
                   (t_iPostingLine.tcGLTypeCode = {&GLTYPECODE-BANK} or
                    t_iPostingLine.tcGLTypeCode = {&GLTYPECODE-CASH})
                then do:
                    create tApiQPostingSafBank.
                    buffer-copy tApiQPostingSaf to tApiQPostingSafBank.
                    delete tApiQPostingSaf.
                end.
            end. /* for each t_iPostingSaf */
    
            if vlBankCashTrxInRealTime = TRUE and
               (t_iPostingLine.tcGLTypeCode = {&GLTYPECODE-BANK} or
                t_iPostingLine.tcGLTypeCode = {&GLTYPECODE-CASH})
            then do:
                create tApiQPostingLineBank.
                buffer-copy tApiQPostingLine to tApiQPostingLineBank.
                delete tApiQPostingLine.
            end.
        end. /* B Create tApiQPostingLine for MODIFIED lines */
    
        /* ======================================= */
        /* C Create tApiQPostingLine for NEW lines */
        /* ======================================= */
        if tPostingLine.tc_Status = "N":U and
           tPosting.tc_Status    <> "D":U
        then do:
            <M-42 run AdditionalUpdatesCreateQPostingLineN  (output viFcReturnSuper (oiReturnStatus)) in BPosting>
            if viFcReturnSuper <> 0 and viLocalReturnStatus >= 0
            then assign viLocalReturnStatus = viFcReturnSuper.
            if viFcReturnSuper < 0 
            then leave TEMPTABLEBLOCK.
            
        end. /* C Create tApiQPostingLine for NEW lines */
        
    end. /* for each tpostingline */
    
end. /* TEMPTABLEBLOCK */

/* ================== */
/* Exception Handling */
/* ================== */
assign oiReturnStatus = viLocalReturnStatus.