project QadFinancials > class BPosting > method ValidateComponentPreAssignPostingLineCross

Description

This method establishes relation between two cross company postings created from the operational.


Parameters


oiReturnStatusoutputintegerReturn status of the method.


Internal usage


QadFinancials
method BPosting.ValidateComponentPreAssignPostingLine


program code (program4/bposting.p)

/* =========================================================================================== *
 * Method:         ValidateComponentPreAssignPostingLineCross                                  *
 * Desc:           This method updates cross company link of the postings inside current       *
 *                 instance of the BPosting component. This cross company link is updated only *
 *                 in case of the Posting created from the operational.                        *
 *                 It also generates correction records for the PostingHist daemon if needed   *
 * =========================================================================================== */
 

/* ========================================================================================================== *
 * Process only those lines created from the operational, where the cross company link is not yet established *
 * ========================================================================================================== */
if t_sPosting.PostingOriginIsExternal         <> true                or 
   t_sPostingLine.tlLinkedCrCyDaemonReqExists  = true                or
   t_sPostingLine.tcGLTypeCode                <> {&GLTYPECODE-CROSS} or 
   t_sPostingLine.tc_status                    = "D"                 or
   t_sPostingLine.PostingLineCrossExternRef    = "":U                or
   t_sPostingLine.PostingLineCrossExternRef    = ?                   or
   (t_sPostingLine.CrossCompanyPostingLine_ID <> 0 and 
    t_sPostingLine.CrossCompanyPostingLine_ID <> ?)
then leave.
            

/* ===================================================================================== */
/* Try to find a postingline in our business-instance with the same CrossExternRef value */  
/* and that is not yet linked to another posting-line (CrossCompanyXXX-fields = 0)       */
/* Note: bCrossCompanyPostingLine is a buffer on t_sPostingLine                          */
/* ===================================================================================== */
find bCrossCompanyPostingLine where 
     bCrossCompanyPostingLine.tc_rowid                  <> t_sPostingLine.tc_rowid                  and 
     bCrossCompanyPostingLine.Company_ID                <> t_sPostingLine.Company_ID                and 
     bCrossCompanyPostingLine.tc_status                 <> "D":U                                    and
     bCrossCompanyPostingLine.PostingLineCrossExternRef  = t_sPostingLine.PostingLineCrossExternRef and 
     bCrossCompanyPostingLine.Currency_ID                = t_sPostingLine.Currency_ID               and
     bCrossCompanyPostingLine.PostingLineCreditTC        = t_sPostingLine.PostingLineDebitTC        and
     bCrossCompanyPostingLine.PostingLineDebitTC         = t_sPostingLine.PostingLineCreditTC       and 
    (bCrossCompanyPostingLine.CrossCompanyPostingLine_ID = 0  or
     bCrossCompanyPostingLine.CrossCompanyPostingLine_ID = ?)                                       and
   ((bCrossCompanyPostingLine.PostingLineCreditTC <> ? and 
     bCrossCompanyPostingLine.PostingLineCreditTC <> 0 and 
     bCrossCompanyPostingLine.PostingLineCreditTC = t_sPostingLine.PostingLineDebitTC) or
    (bCrossCompanyPostingLine.PostingLineDebitTC <> ? and 
     bCrossCompanyPostingLine.PostingLineDebitTC <> 0 and 
     bCrossCompanyPostingLine.PostingLineDebitTC = t_sPostingLine.PostingLineCreditTC))                   
     no-error.                  
if available bCrossCompanyPostingLine
then do:
    assign bCrossCompanyPostingLine.CrossCompanyPostingLine_ID  = t_sPostingLine.PostingLine_ID
           bCrossCompanyPostingLine.CrossCompanyPosting_ID      = t_sPostingLine.Posting_ID
           bCrossCompanyPostingLine.CrossCompany_ID             = t_sPostingLine.Company_ID
           bCrossCompanyPostingLine.IntercoBusinessRelation_ID  = t_sPostingLine.IntercoBusinessRelation_ID
           bCrossCompanyPostingLine.tc_status                   = (if bCrossCompanyPostingLine.tc_status = "":U then "C":U else bCrossCompanyPostingLine.tc_status)
           t_sPostingLine.CrossCompanyPostingLine_ID            = bCrossCompanyPostingLine.PostingLine_ID
           t_sPostingLine.CrossCompanyPosting_ID                = bCrossCompanyPostingLine.Posting_ID
           t_sPostingLine.CrossCompany_ID                       = bCrossCompanyPostingLine.Company_ID
           t_sPostingLine.tc_status                             = (if t_sPostingLine.tc_status = "":U then "C":U else t_sPostingLine.tc_status).
        /* Get business relation for cross company posting */
        <M-26 run CalcCrossCompanyBusinessRelation
           (input  t_sPostingLine.CrossCompany_ID (iiCrossCompanyId), 
            input  ? (icCrossCompanyCode), 
            output t_sPostingLine.tcIntercoBusinessRelationCode (ocBusinessRelationICCode), 
            output t_sPostingLine.IntercoBusinessRelation_ID (oiBusinessRelationId), 
            output viFcReturnSuper (oiReturnStatus)) in BPosting>
        if oiReturnStatus = 0 or oiReturnStatus > 0 and viFcReturnSuper < 0 then assign oiReturnStatus = viFcReturnSuper.
        if oiReturnStatus < 0 then return.
        <M-54 run CalcCrossCompanyBusinessRelation
           (input  bCrossCompanyPostingLine.CrossCompany_ID (iiCrossCompanyId), 
            input  ? (icCrossCompanyCode), 
            output bCrossCompanyPostingLine.tcIntercoBusinessRelationCode (ocBusinessRelationICCode), 
            output bCrossCompanyPostingLine.IntercoBusinessRelation_ID (oiBusinessRelationId), 
            output viFcReturnSuper (oiReturnStatus)) in BPosting>
        if oiReturnStatus = 0 or oiReturnStatus > 0 and viFcReturnSuper < 0 then assign oiReturnStatus = viFcReturnSuper.
        if oiReturnStatus < 0 then return.   
end. /* if available bCrossCompanyPostingLine */
else do :
    /* =============================================================================== */
    /* Try to find a postingline in the db with the same CrossExternRef value          */  
    /* and that is not yet linked to another posting-line (CrossCompanyXXX-fields = 0) */
    /* =============================================================================== */
    <Q-70 run PostingLineByCrossExternRef (all) (Read) (NoCache)
       (input t_sPostingLine.Company_ID, (NotCompanyId)
        input t_sPostingLine.PostingLineCrossExternRef, (PostingLineCrossExternRef)
        input t_sPostingLine.tc_Rowid, (PostingLineRowid)
        input -999999, (CrossCompanyPostingLineID)
        input ?, (CompanyId)
        output dataset tqPostingLineByCrossExternRef) in BPosting>
    find tqPostingLineByCrossExternRef where
         tqPostingLineByCrossExternRef.tiCompany_ID                <> t_sPostingLine.Company_ID                and
         tqPostingLineByCrossExternRef.tcPostingLineCrossExternRef  = t_sPostingLine.PostingLineCrossExternRef and
        (tqPostingLineByCrossExternRef.tiCrossCompanyPostingLine_ID = 0 or 
         tqPostingLineByCrossExternRef.tiCrossCompanyPostingLine_ID = ?)                                       and
         tqPostingLineByCrossExternRef.tcCurrencyCode               = t_sPostingLine.tcCurrencyCode            and
       ((tqPostingLineByCrossExternRef.tdPostingLineCreditTC <> ? and
         tqPostingLineByCrossExternRef.tdPostingLineCreditTC <> 0 and 
         tqPostingLineByCrossExternRef.tdPostingLineCreditTC = t_sPostingLine.PostingLineDebitTC) or
        (tqPostingLineByCrossExternRef.tdPostingLineDebitTC <> 0 and
         tqPostingLineByCrossExternRef.tdPostingLineDebitTC <> ? and
         tqPostingLineByCrossExternRef.tdPostingLineDebitTC = t_sPostingLine.PostingLineCreditTC))
        no-error.
    if not available tqPostingLineByCrossExternRef
    then leave.
    /* Update posting in the current business component */
    assign t_sPostingLine.CrossCompanyPostingLine_ID  = tqPostingLineByCrossExternRef.tiPostingLine_ID
           t_sPostingLine.CrossCompanyPosting_ID      = tqPostingLineByCrossExternRef.tiPosting_ID
           t_sPostingLine.CrossCompany_ID             = tqPostingLineByCrossExternRef.tiCompany_ID
           t_sPostingLine.tcCrossCompanyCode          = tqPostingLineByCrossExternRef.tcCompanyCode
           t_sPostingLine.tc_status                   = (if t_sPostingLine.tc_Status = "":U then "C":U else t_sPostingLine.tc_Status).
    <M-2 run CalcCrossCompanyBusinessRelation
       (input  t_sPostingLine.CrossCompany_ID (iiCrossCompanyId), 
        input  ? (icCrossCompanyCode), 
        output t_sPostingLine.tcIntercoBusinessRelationCode (ocBusinessRelationICCode), 
        output t_sPostingLine.IntercoBusinessRelation_ID (oiBusinessRelationId), 
        output viFcReturnSuper (oiReturnStatus)) in BPosting>
    if oiReturnStatus = 0 or oiReturnStatus > 0 and viFcReturnSuper < 0 then assign oiReturnStatus = viFcReturnSuper.
    if oiReturnStatus < 0 then return.
    /* Make correction of the incorrect posting hist record, which was created for the Cross company posting line *
     * already available in the database                                                                          */
    /* Get business relation of the entity of the posting in the component. This Intercompany will be *
     * updated to in the PreSave method to the database                                               */
    <M-1 run CalcCrossCompanyBusinessRelation
       (input  t_sPostingLine.Company_ID (iiCrossCompanyId), 
        input  ? (icCrossCompanyCode), 
        output vcDummy (ocBusinessRelationICCode), 
        output viBusinessRelationId (oiBusinessRelationId), 
        output viFcReturnSuper (oiReturnStatus)) in BPosting>
    if viFcReturnSuper <> 0 then assign oiReturnStatus = viFcReturnSuper.
    if viFcReturnSuper <  0 then return.
    /* Create correction QPostingLine record */
    create tApiQPostingLine.
    assign viApiQPostingLineID                         = viApiQPostingLineID + 1
           tApiQPostingLine.QPostingLine_ID            = viApiQPostingLineID
           tApiQPostingLine.Company_ID                 = tqPostingLineByCrossExternRef.tiCompany_ID
           tApiQPostingLine.Period_ID                  = tqPostingLineByCrossExternRef.tiPeriod_ID
           tApiQPostingLine.GL_ID                      = tqPostingLineByCrossExternRef.tiGL_ID
           tApiQPostingLine.Division_ID                = tqPostingLineByCrossExternRef.tiDivision_ID
           tApiQPostingLine.CostCentre_ID              = tqPostingLineByCrossExternRef.tiCostCentre_ID
           tApiQPostingLine.Project_ID                 = tqPostingLineByCrossExternRef.tiProject_ID
           tApiQPostingLine.Journal_ID                 = tqPostingLineByCrossExternRef.tiJournal_ID
           tApiQPostingLine.Currency_ID                = tqPostingLineByCrossExternRef.tiCurrency_ID
           tApiQPostingLine.IntercoBusinessRelation_ID = tqPostingLineByCrossExternRef.tiIntercoBusinessRelation_ID
           tApiQPostingLine.QPostingLineDebitLC        = - tqPostingLineByCrossExternRef.tdPostingLineDebitLC
           tApiQPostingLine.QPostingLineCreditLC       = - tqPostingLineByCrossExternRef.tdPostingLineCreditLC
           tApiQPostingLine.QPostingLineDebitTC        = - tqPostingLineByCrossExternRef.tdPostingLineDebitTC
           tApiQPostingLine.QPostingLineCreditTC       = - tqPostingLineByCrossExternRef.tdPostingLineCreditTC
           tApiQPostingLine.QPostingLineDebitCC        = - tqPostingLineByCrossExternRef.tdPostingLineDebitCC
           tApiQPostingLine.QPostingLineCreditCC       = - tqPostingLineByCrossExternRef.tdPostingLineCreditCC
           tApiQPostingLine.QPostingLineQTY            = - tqPostingLineByCrossExternRef.tdPostingLineQTY
           tApiQPostingLine.QPostingLineInfo           = string(tqPostingLineByCrossExternRef.tiPostingYear) + "/":U + string(tqPostingLineByCrossExternRef.tiPostingPeriod) + "/":U + tqPostingLineByCrossExternRef.tcJournalCode + "/":U + string(tqPostingLineByCrossExternRef.tiPostingVoucher)
           tApiQPostingLine.PeriodYearPeriod           = tqPostingLineByCrossExternRef.tiPostingYear * 100 + tqPostingLineByCrossExternRef.tiPostingPeriod
           tApiQPostingLine.Layer_ID                   = tqPostingLineByCrossExternRef.tiLayer_ID
           tApiQPostingLine.JournalTypeCode            = tqPostingLineByCrossExternRef.tcJournalTypeCode
           tApiQPostingLine.tc_Rowid                   = string(viApiQPostingLineID)
           tApiQPostingLine.tc_ParentRowid             = "":U
           tApiQPostingLine.tc_Status                  = "N":U.
    /* Create new correct update record for Posting Hist record */
    create tApiQPostingLine.
    assign viApiQPostingLineID                         = viApiQPostingLineID + 1
           tApiQPostingLine.QPostingLine_ID            = viApiQPostingLineID
           tApiQPostingLine.Company_ID                 = tqPostingLineByCrossExternRef.tiCompany_ID
           tApiQPostingLine.Period_ID                  = tqPostingLineByCrossExternRef.tiPeriod_ID
           tApiQPostingLine.GL_ID                      = tqPostingLineByCrossExternRef.tiGL_ID
           tApiQPostingLine.Division_ID                = tqPostingLineByCrossExternRef.tiDivision_ID
           tApiQPostingLine.CostCentre_ID              = tqPostingLineByCrossExternRef.tiCostCentre_ID
           tApiQPostingLine.Project_ID                 = tqPostingLineByCrossExternRef.tiProject_ID
           tApiQPostingLine.Journal_ID                 = tqPostingLineByCrossExternRef.tiJournal_ID
           tApiQPostingLine.Currency_ID                = tqPostingLineByCrossExternRef.tiCurrency_ID
           tApiQPostingLine.IntercoBusinessRelation_ID = viBusinessRelationId
           tApiQPostingLine.QPostingLineDebitLC        = tqPostingLineByCrossExternRef.tdPostingLineDebitLC
           tApiQPostingLine.QPostingLineCreditLC       = tqPostingLineByCrossExternRef.tdPostingLineCreditLC
           tApiQPostingLine.QPostingLineDebitTC        = tqPostingLineByCrossExternRef.tdPostingLineDebitTC
           tApiQPostingLine.QPostingLineCreditTC       = tqPostingLineByCrossExternRef.tdPostingLineCreditTC
           tApiQPostingLine.QPostingLineDebitCC        = tqPostingLineByCrossExternRef.tdPostingLineDebitCC
           tApiQPostingLine.QPostingLineCreditCC       = tqPostingLineByCrossExternRef.tdPostingLineCreditCC
           tApiQPostingLine.QPostingLineQTY            = tqPostingLineByCrossExternRef.tdPostingLineQTY
           tApiQPostingLine.QPostingLineInfo           = string(tqPostingLineByCrossExternRef.tiPostingYear) + "/":U + string(tqPostingLineByCrossExternRef.tiPostingPeriod) + "/":U + tqPostingLineByCrossExternRef.tcJournalCode + "/":U + string(tqPostingLineByCrossExternRef.tiPostingVoucher)
           tApiQPostingLine.PeriodYearPeriod           = tqPostingLineByCrossExternRef.tiPostingYear * 100 + tqPostingLineByCrossExternRef.tiPostingPeriod
           tApiQPostingLine.Layer_ID                   = tqPostingLineByCrossExternRef.tiLayer_ID
           tApiQPostingLine.JournalTypeCode            = tqPostingLineByCrossExternRef.tcJournalTypeCode
           tApiQPostingLine.tc_Rowid                   = string(viApiQPostingLineID)
           tApiQPostingLine.tc_ParentRowid             = "":U
           tApiQPostingLine.tc_Status                  = "N":U.
end. /* else if available bCrossCompanyPostingLine */