project QadFinancials > class BCInvoice > method ValidateComponentPostAnalysis

Description

This method is a submethod of ValidateComponentAll.

This method validates the Creditor Invoices fields related to analysis : division, cost centre and project


Parameters


blStart4input-outputlogicalIs query tqProjectForInvoiceValidation already started or not ?
blStart8input-outputlogicalIs query tqGLForInvoiceVal already started or not ?
blStart9input-outputlogicalIs query tqCostCentreForInvoiceVal already started or not ?
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


QadFinancials
method BCInvoice.ValidateComponentPost


program code (program5/bcinvoice.p)

/* Read control account if necessary */
if ((t_sCInvoice.tc_Status      = "N":U                     or
     t_sCInvoice.tc_Status      = "C":U                     and
    (t_sCInvoice.ControlGL_ID  <> t_iCInvoice.ControlGL_ID  or
     t_sCInvoice.Division_ID   <> t_iCInvoice.Division_ID)) and
    (t_sCInvoice.Division_ID    = 0                         or
     t_sCInvoice.Division_ID    = ?))                       or
    (t_sCInvoice.tc_Status      = "N":U                     or
     t_sCInvoice.tc_Status      = "C":U                     and
    (t_sCInvoice.ControlGL_ID  <> t_iCInvoice.ControlGL_ID  or
     t_sCInvoice.Project_ID    <> t_iCInvoice.Project_ID    or
     t_sCInvoice.CostCentre_ID <> t_iCInvoice.CostCentre_ID))
then do:
    if not blStart8
    then do:
        <Q-14 run GLForInvoiceVal  (Start) in BGL >
        assign blStart8 = true.
    end.

    <Q-15 run GLForInvoiceVal (all) (Read) (Cache)
       (input ?, (CompanyId)
        input t_sCInvoice.ControlGL_ID, (GLId)
        output dataset tqGLForInvoiceVal) in BGL >

    find first tqGLForInvoiceVal where
               tqGLForInvoiceVal.tiGL_ID = t_sCInvoice.ControlGL_ID
               no-error.
end.

/* Division is mandatory if control account is with divisions */
if (t_sCInvoice.tc_Status     = "N":U                     or
    t_sCInvoice.tc_Status     = "C":U                     and
   (t_sCInvoice.ControlGL_ID <> t_iCInvoice.ControlGL_ID  or
    t_sCInvoice.Division_ID  <> t_iCInvoice.Division_ID)) and
   (t_sCInvoice.Division_ID   = 0                         or
    t_sCInvoice.Division_ID   = ?)                        and
    tqGLForInvoiceVal.tlGLIsDivisionAccount
then do:
    <M-16 run SetMessage
       (input  trim(#T-17'You must specify a sub-account because the control account ($1) is defined with cost center analysis.':255(65488)T-17#) (icMessage), 
        input  t_sCInvoice.tcControlGLCode (icArguments), 
        input  'tCInvoice.tcDivisionCode':U (icFieldName), 
        input  t_sCInvoice.tcDivisionCode (icFieldValue), 
        input  'E':U (icType), 
        input  3 (iiSeverity), 
        input  t_sCInvoice.tc_Rowid (icRowid), 
        input  'QadFin-7092':U (icFcMsgNumber), 
        input  '':U (icFcExplanation), 
        input  '':U (icFcIdentification), 
        input  '':U (icFcContext), 
        output viFcReturnSuper (oiReturnStatus)) in BCInvoice>

    assign oiReturnStatus = -1.
end.

/* Project is mandatory if control account is with projects */
if (t_sCInvoice.tc_Status     = "N":U                    or
    t_sCInvoice.tc_Status     = "C":U                    and
   (t_sCInvoice.ControlGL_ID <> t_iCInvoice.ControlGL_ID or
    t_sCInvoice.Project_ID   <> t_iCInvoice.Project_ID)) and
   (t_sCInvoice.Project_ID   = 0                         or
    t_sCInvoice.Project_ID   = ?)                        and
    tqGLForInvoiceVal.tlGLIsProjectAccount
then do:
    <M-18 run SetMessage
       (input  trim(#T-18'You must specify a project because the control account ($1) is defined with project analysis.':255(65493)T-18#) (icMessage), 
        input  t_sCInvoice.tcControlGLCode (icArguments), 
        input  'tCInvoice.tcProjectCode':U (icFieldName), 
        input  t_sCInvoice.tcProjectCode (icFieldValue), 
        input  'E':U (icType), 
        input  3 (iiSeverity), 
        input  t_sCInvoice.tc_Rowid (icRowid), 
        input  'QadFin-7093':U (icFcMsgNumber), 
        input  '':U (icFcExplanation), 
        input  '':U (icFcIdentification), 
        input  '':U (icFcContext), 
        output viFcReturnSuper (oiReturnStatus)) in BCInvoice>

    assign oiReturnStatus = -1.
end.

/* Cost centre is mandatory if control account is with cost centres */
if (t_sCInvoice.tc_Status      = "N":U                       or
    t_sCInvoice.tc_Status      = "C":U                       and
   (t_sCInvoice.ControlGL_ID  <> t_iCInvoice.ControlGL_ID    or
    t_sCInvoice.CostCentre_ID <> t_iCInvoice.CostCentre_ID)) and
   (t_sCInvoice.CostCentre_ID  = 0                           or
    t_sCInvoice.CostCentre_ID  = ?)                          and
    tqGLForInvoiceVal.tlGLIsCostCentreAccount
then do:
    <M-19 run SetMessage
       (input  trim(#T-20'You must specify a cost centerbecause the control account ($1) is defined with cost center analysis..':255(65496)T-20#) (icMessage), 
        input  t_sCInvoice.tcControlGLCode (icArguments), 
        input  'tCInvoice.tcCostCentreCode':U (icFieldName), 
        input  t_sCInvoice.tcCostCentreCode (icFieldValue), 
        input  'E':U (icType), 
        input  3 (iiSeverity), 
        input  t_sCInvoice.tc_Rowid (icRowid), 
        input  'QadFin-7094':U (icFcMsgNumber), 
        input  '':U (icFcExplanation), 
        input  '':U (icFcIdentification), 
        input  '':U (icFcContext), 
        output viFcReturnSuper (oiReturnStatus)) in BCInvoice>

    assign oiReturnStatus = -1.
end.

/* Validate Project */
if (t_sCInvoice.tc_Status   = "N":U                   or
    t_sCInvoice.tc_Status   = "C":U                   and
    t_sCInvoice.Project_ID <> t_iCInvoice.Project_ID) and
    t_sCInvoice.Project_ID <> 0                       and
    t_sCInvoice.Project_ID <> ?
then do:
    if not blStart4
    then do:
        <Q-1 run ProjectForInvoiceValidation  (Start) in BProject >
        assign blStart4 = true.
    end.

    <Q-2 run ProjectForInvoiceValidation (all) (Read) (Cache)
       (input ?, (CompanyId)
        input t_sCInvoice.Project_ID, (ProjectId)
        output dataset tqProjectForInvoiceValidation) in BProject >

    find first tqProjectForInvoiceValidation where
               tqProjectForInvoiceValidation.tiProject_ID = t_sCInvoice.Project_ID
               no-error.

    if not available tqProjectForInvoiceValidation
    then do:
        <M-3 run SetMessage
           (input  trim(#T-1'The specified project is not defined in the system or is invalid.':255(65450)T-1#) (icMessage), 
            input  '':U (icArguments), 
            input  'tCInvoice.tcProjectCode':U (icFieldName), 
            input  t_sCInvoice.tcProjectCode (icFieldValue), 
            input  'E':U (icType), 
            input  3 (iiSeverity), 
            input  t_sCInvoice.tc_Rowid (icRowid), 
            input  'QadFin-7068':U (icFcMsgNumber), 
            input  '':U (icFcExplanation), 
            input  '':U (icFcIdentification), 
            input  '':U (icFcContext), 
            output viFcReturnSuper (oiReturnStatus)) in BCInvoice>

        assign oiReturnStatus = -1.
        return.
    end.

    if tqProjectForInvoiceValidation.tlProjectIsTemplate
    then do:
        <M-4 run SetMessage
           (input  trim(#T-5'Template projects are not allowed on supplier invoices.':250(1091)T-5#) (icMessage), 
            input  '':U (icArguments), 
            input  'tCInvoice.tcProjectCode':U (icFieldName), 
            input  t_sCInvoice.tcProjectCode (icFieldValue), 
            input  'E':U (icType), 
            input  3 (iiSeverity), 
            input  t_sCInvoice.tc_Rowid (icRowid), 
            input  'QadFin-7069':U (icFcMsgNumber), 
            input  '':U (icFcExplanation), 
            input  '':U (icFcIdentification), 
            input  '':U (icFcContext), 
            output viFcReturnSuper (oiReturnStatus)) in BCInvoice>

        assign oiReturnStatus = -1.
        return.
    end.
    
    if tqProjectForInvoiceValidation.tlProjectStatusIsActive <> true
    then do:
        <M-6 run SetMessage
           (input  trim(#T-6'You can only specify projects with an active project status.':255(65451)T-6#) (icMessage), 
            input  '':U (icArguments), 
            input  'tCInvoice.tcProjectCode':U (icFieldName), 
            input  t_sCInvoice.tcProjectCode (icFieldValue), 
            input  'E':U (icType), 
            input  3 (iiSeverity), 
            input  t_sCInvoice.tc_Rowid (icRowid), 
            input  'QadFin-7070':U (icFcMsgNumber), 
            input  '':U (icFcExplanation), 
            input  '':U (icFcIdentification), 
            input  '':U (icFcContext), 
            output viFcReturnSuper (oiReturnStatus)) in BCInvoice>

        assign oiReturnStatus = -1.
    end.

    if tqProjectForInvoiceValidation.tlProjectStatusIsActive <> true
    then do:
        <M-7 run SetMessage
           (input  trim(#T-8'You can only specify projects with an active project status.':255(65451)T-8#) (icMessage), 
            input  '':U (icArguments), 
            input  'tCInvoice.tcProjectCode':U (icFieldName), 
            input  t_sCInvoice.tcProjectCode (icFieldValue), 
            input  'E':U (icType), 
            input  3 (iiSeverity), 
            input  t_sCInvoice.tc_Rowid (icRowid), 
            input  'QadFin-7071':U (icFcMsgNumber), 
            input  '':U (icFcExplanation), 
            input  '':U (icFcIdentification), 
            input  '':U (icFcContext), 
            output viFcReturnSuper (oiReturnStatus)) in BCInvoice>

        assign oiReturnStatus = -1.
    end.

    if tqProjectForInvoiceValidation.tcProjectStatusSystemStatus <> {&PROJECTSYSTEMSTATUS-OPEN}
    then do:
        <M-9 run SetMessage
           (input  trim(#T-9'Only projects with system status $1 are allowed.':255(65452)T-9#) (icMessage), 
            input  {&PROJECTSYSTEMSTATUS-OPEN-TR} (icArguments), 
            input  'tCInvoice.tcProjectCode':U (icFieldName), 
            input  t_sCInvoice.tcProjectCode (icFieldValue), 
            input  'E':U (icType), 
            input  3 (iiSeverity), 
            input  t_sCInvoice.tc_Rowid (icRowid), 
            input  'QadFin-7072':U (icFcMsgNumber), 
            input  '':U (icFcExplanation), 
            input  '':U (icFcIdentification), 
            input  '':U (icFcContext), 
            output viFcReturnSuper (oiReturnStatus)) in BCInvoice>

        assign oiReturnStatus = -1.
    end.
end.

/* Validate Cost Centre */
if (t_sCInvoice.tc_Status      = "N":U                      or
    t_sCInvoice.tc_Status      = "C":U                      and
    t_sCInvoice.CostCentre_ID <> t_iCInvoice.CostCentre_ID) and
    t_sCInvoice.CostCentre_ID <> 0                          and
    t_sCInvoice.CostCentre_ID <> ?
then do:
    if not blStart9
    then do:
        <Q-22 run CostCentreForInvoiceVal  (Start) in BCostCentre >
        assign blStart9 = true.
    end.

    <Q-23 run CostCentreForInvoiceVal (all) (Read) (NoCache)
       (input ?, (CompanyId)
        input t_sCInvoice.CostCentre_ID, (CostCentreId)
        output dataset tqCostCentreForInvoiceVal) in BCostCentre >

    find first tqCostCentreForInvoiceVal where
               tqCostCentreForInvoiceVal.tiCostCentre_ID = t_sCInvoice.CostCentre_ID
               no-error.

    if not available tqCostCentreForInvoiceVal
    then do:
        <M-24 run SetMessage
           (input  trim(#T-22'The specified cost center is not defined in the system.':255(65499)T-22#) (icMessage), 
            input  '':U (icArguments), 
            input  'tCInvoice.tcCostCentreCode':U (icFieldName), 
            input  t_sCInvoice.tcCostCentreCode (icFieldValue), 
            input  'E':U (icType), 
            input  3 (iiSeverity), 
            input  t_sCInvoice.tc_Rowid (icRowid), 
            input  'QadFin-7096':U (icFcMsgNumber), 
            input  '':U (icFcExplanation), 
            input  '':U (icFcIdentification), 
            input  '':U (icFcContext), 
            output viFcReturnSuper (oiReturnStatus)) in BCInvoice>

        assign oiReturnStatus = -1.
        return.
    end.

    <M-25 run ValIsActive
       (input  t_sCInvoice.tcCostCentreCode (icTargetField), 
        input  'tCInvoice.tcCostCentreCode':U (icTargetFieldName), 
        input  t_sCInvoice.tc_Rowid (icRowid), 
        input  tqCostCentreForInvoiceVal.tlCostCentreIsActive (ilIsActive), 
        input  trim(#T-23'Cost Center':40(5214)T-23#) (icParentObjectLabel), 
        output viFcReturnSuper (oiReturnStatus)) in BCInvoice>

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