project QadFinancials > class BDInvoice > method APIJournalNbrVal

Description

API method to allow the operationals validate daybook codes for consecutive and chronological numbering violations.


Parameters


iiCompanyIdinputintegerInput parameter : company id number.
tAPIDaybookValidationinput-outputtemp-table
itPostingDateinputdatePosting Date
olIsConsecutiveNbroutputlogicalConsecutive numbering is enabled.
olIsChronologicalNbroutputlogicalChronological Numbering is enabled.
olChronoWarningoutputlogicalChoronological numbering will return a warning instead of an error.
tApiDinvoiceDaybookSetsinput-outputtemp-tableInput-output parameter: daybook sets to be validated.
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


unused


program code (program5/bdinvoice.p)

/* =================================================================================================================== */
/* API method to allow the operationals validate daybook codes for chronological numbering violations. Note this method*/
/* does not check consecutive numbering !!                                                                             */
/* This method is called as part of Print and Post. The daybook codes are the codes which might which are used during  */
/* the invoice run                                                                                                     */
/* called by us/so/soivpval.p                                                                                          */
/* =================================================================================================================== */
/* input        iiCompanyId             company id number                                                              */
/* input        itPostingDate           Posting Date                                                                   */

/* input-output tAPIDaybookValidation                                                                                  */
/* input-output tApiDinvoiceDaybookSets daybook sets to be validated                                                   */

/* output       olIsConsecutiveNbr      Consecutive numbering is enabled                                               */
/* output       olIsChronologicalNbr    Chronological Numbering is enabled                                             */
/* output       olChronoWarning         Choronological numbering will return a warning or error                        */
/*                                      It should be read in combination with vlCCNIsChronolNr                         */
/*                                        vlCCNIsChronolNr=no                      --> nothing to happen               */
/*                                        vlCCNIsChronolNr=yes olChronoWarning=no  --> Warning message                 */
/*                                        vlCCNIsChronolNr=yes olChronoWarning=yes --> Error message                   */

/* output       oiReturnStatus          Return status of the method                                                    */
/* =================================================================================================================== */
/* 1 The output parameters olIsConsecutiveNbr olIsChronologicalNbr olChronoWarning reflect the setup of the system     */
/* 2 tApiDinvoiceDaybookSets.tlInvoiceFoundInPeriod                                                                    */
/*    * Contains the DayBookSets used in the Print and Post run                                                        */
/*    * The system will check if there are Invoices created for this daybookset in the period holding itPostingDate    */
/*      if so tApiDinvoiceDaybookSets.tlInvoiceFoundInPeriod is set to true                                            */
/* 3 tAPIDaybookValidation.tlChronologicalError                                                                        */
/*    * Contains the DayBooks linked to the daybooksets which are used in the Print and Post run                       */
/*    * For each Daybook, the system will check the chronological order if needed. If any invoice using the daybook    */
/*      has been posted in a date greater than the posting date, the field stlChronologicalError is set to yes         */
/* =================================================================================================================== */
         
assign oiReturnStatus       = -98
       viLocalReturnStatus  = 0.

/* Set the Entity to the working entity if not supplied */
if iiCompanyId = 0 or iiCompanyId = ?
then assign iiCompanyId = viCompanyId.

/* =================================================================================================================== */
/* 1. Set the class data items that hold the consecutive and chronological numbering settings for the working domain   */
/* =================================================================================================================== */
<Q-90 run CompanyForDomainProperties (all) (Read) (NoCache)
   (input iiCompanyId, (CompanyId)
    input ?, (CompanyCode)
    output dataset tqCompanyForDomainProperties) in BCompany>

find first tqCompanyForDomainProperties no-error.
if available tqCompanyForDomainProperties
then do:
    assign vlCCNIsConsecutNr  = tqCompanyForDomainProperties.tlDomainPropertyIsConsecutNr
           vlCCNIsChronolNr   = tqCompanyForDomainProperties.tlDomainPropertyIsChronolNr
           vlCCNIsPopupInvNr  = tqCompanyForDomainProperties.tlDomainPropertyIsPopupInvNr.
           
     if vlCCNIsChronolNr and tqCompanyForDomainProperties.tcDomainPropertyNonChronErr = {&NONCHRONOLOGICAL-ERROR}
     then assign vlCCNNonChronError = TRUE.
     else assign vlCCNNonChronError = FALSE.

end. /* if available tqDomainPropertyForNumbering */
else do:

    assign vlCCNIsConsecutNr  = false
           vlCCNIsChronolNr   = false
           vlCCNIsPopupInvNr  = false
           vlCCNNonChronError = false.

end. /* NOT if available tqDomainPropertyForNumbering */


/* =================================================================================================================== */
/* If chronological numbering is active, determine tlInvoiceFoundInPeriod and  tlChronologicalError                    */
/* =================================================================================================================== */
if vlCCNIsConsecutNr = TRUE and vlCCNIsChronolNr = TRUE
then do:
    
    /* =============================================================================================================== */
    /* 2. Determine tApiDinvoiceDaybookSets.tlInvoiceFoundInPeriod (this is per daybookset)                            */
    /* =============================================================================================================== */

     <Q-93 run PeriodByStartEndDate (all) (Read) (NoCache)
        (input iiCompanyId, (CompanyId)
         input itPostingDate, (Date)
         output dataset tqPeriodByStartEndDate) in BPeriod>

    find first tqPeriodByStartEndDate where
               tqPeriodByStartEndDate.tiCompany_ID      = iiCompanyId    and
               tqPeriodByStartEndDate.ttPeriodStartDate <= itPostingDate and
               tqPeriodByStartEndDate.ttPeriodEndDate   >= itPostingDate and
               tqPeriodByStartEndDate.tcPeriodTypeCode  = {&PERIODTYPECODE-NORMAL}
               no-error.

    if available tqPeriodByStartEndDate
    then do:

        for each tApiDinvoiceDaybookSets :
    
            /* Get all the daybooks linked to the DaybookSet */           
            <Q-10 run DaybookSetBeginsCode (all) (Read) (NoCache)
               (input tApiDinvoiceDaybookSets.tcDaybookSet, (DaybookSetCode)
                input tqCompanyForDomainProperties.tcDomainCode, (DomainCode)
                output dataset tqDaybookSetBeginsCode) in BMfgDaybookSet>
    
            find tqDaybookSetBeginsCode where
                 tqDaybookSetBeginsCode.tcdybs_domain = tqCompanyForDomainProperties.tcDomainCode and
                 tqDaybookSetBeginsCode.tcdybs_code   = tApiDinvoiceDaybookSets.tcDaybookSet
                 no-error.

            if available tqDaybookSetBeginsCode
            then do:

                /* 1 Check tcdybs_invoices_dybk */
                if tqDaybookSetBeginsCode.tcdybs_invoices_dybk <> '' and tApiDinvoiceDaybookSets.tlInvoiceFoundInPeriod = false
                then do :
                    <M-38 run APIJournalNbrValDet1
                       (input  iiCompanyId (iiCompany_ID), 
                        input  tqDaybookSetBeginsCode.tcdybs_invoices_dybk (icJournalCode), 
                        input  tqPeriodByStartEndDate.tiPeriod_ID (iiPeriod_ID), 
                        output tApiDinvoiceDaybookSets.tlInvoiceFoundInPeriod (olInvoiceFound), 
                        output viFcReturnSuper (oiReturnStatus)) in BDInvoice>
                end. /* tcdybs_invoices_dybk */

                /* 2 Check tcdybs_credit_dybk */
                if tqDaybookSetBeginsCode.tcdybs_credit_dybk <> '' and tApiDinvoiceDaybookSets.tlInvoiceFoundInPeriod = false
                then do :
                    <M-89 run APIJournalNbrValDet1
                       (input  iiCompanyId (iiCompany_ID), 
                        input  tqDaybookSetBeginsCode.tcdybs_credit_dybk (icJournalCode), 
                        input  tqPeriodByStartEndDate.tiPeriod_ID (iiPeriod_ID), 
                        output tApiDinvoiceDaybookSets.tlInvoiceFoundInPeriod (olInvoiceFound), 
                        output viFcReturnSuper (oiReturnStatus)) in BDInvoice>
                end. /* tcdybs_credit_dybk */    

                /* 3 Check tcdybs_pos_criv_dybk */
                if tqDaybookSetBeginsCode.tcdybs_pos_criv_dybk <> '' and tApiDinvoiceDaybookSets.tlInvoiceFoundInPeriod = false
                then do :
                    <M-42 run APIJournalNbrValDet1
                       (input  iiCompanyId (iiCompany_ID), 
                        input  tqDaybookSetBeginsCode.tcdybs_pos_criv_dybk (icJournalCode), 
                        input  tqPeriodByStartEndDate.tiPeriod_ID (iiPeriod_ID), 
                        output tApiDinvoiceDaybookSets.tlInvoiceFoundInPeriod (olInvoiceFound), 
                        output viFcReturnSuper (oiReturnStatus)) in BDInvoice>
                end. /* tcdybs_pos_criv_dybk */    

                /* 4 Check tcdybs_neg_criv_dybk */
                if tqDaybookSetBeginsCode.tcdybs_neg_criv_dybk <> '' and tApiDinvoiceDaybookSets.tlInvoiceFoundInPeriod = false
                then do :
                    <M-91 run APIJournalNbrValDet1
                       (input  iiCompanyId (iiCompany_ID), 
                        input  tqDaybookSetBeginsCode.tcdybs_neg_criv_dybk (icJournalCode), 
                        input  tqPeriodByStartEndDate.tiPeriod_ID (iiPeriod_ID), 
                        output tApiDinvoiceDaybookSets.tlInvoiceFoundInPeriod (olInvoiceFound), 
                        output viFcReturnSuper (oiReturnStatus)) in BDInvoice>
                end. /* tcdybs_neg_criv_dybk */    

                /* 5 Check tcdybs_pos_crcn_dybk */
                if tqDaybookSetBeginsCode.tcdybs_pos_crcn_dybk <> '' and tApiDinvoiceDaybookSets.tlInvoiceFoundInPeriod = false
                then do :
                    <M-21 run APIJournalNbrValDet1
                       (input  iiCompanyId (iiCompany_ID), 
                        input  tqDaybookSetBeginsCode.tcdybs_pos_crcn_dybk (icJournalCode), 
                        input  tqPeriodByStartEndDate.tiPeriod_ID (iiPeriod_ID), 
                        output tApiDinvoiceDaybookSets.tlInvoiceFoundInPeriod (olInvoiceFound), 
                        output viFcReturnSuper (oiReturnStatus)) in BDInvoice>
                end. /* tcdybs_pos_crcn_dybk */    

                /* 6 Check tcdybs_neg_crcn_dybk */
                if tqDaybookSetBeginsCode.tcdybs_neg_crcn_dybk <> '' and tApiDinvoiceDaybookSets.tlInvoiceFoundInPeriod = false
                then do :
                    <M-92 run APIJournalNbrValDet1
                       (input  iiCompanyId (iiCompany_ID), 
                        input  tqDaybookSetBeginsCode.tcdybs_neg_crcn_dybk (icJournalCode), 
                        input  tqPeriodByStartEndDate.tiPeriod_ID (iiPeriod_ID), 
                        output tApiDinvoiceDaybookSets.tlInvoiceFoundInPeriod (olInvoiceFound), 
                        output viFcReturnSuper (oiReturnStatus)) in BDInvoice>
                end. /* tcdybs_neg_crcn_dybk */    

                /* 7 Check tcdybs_interco_dybk */
                if tqDaybookSetBeginsCode.tcdybs_interco_dybk <> '' and tApiDinvoiceDaybookSets.tlInvoiceFoundInPeriod = false
                then do :
                    <M-85 run APIJournalNbrValDet1
                       (input  iiCompanyId (iiCompany_ID), 
                        input  tqDaybookSetBeginsCode.tcdybs_interco_dybk (icJournalCode), 
                        input  tqPeriodByStartEndDate.tiPeriod_ID (iiPeriod_ID), 
                        output tApiDinvoiceDaybookSets.tlInvoiceFoundInPeriod (olInvoiceFound), 
                        output viFcReturnSuper (oiReturnStatus)) in BDInvoice>
                end. /* tcdybs_interco_dybk */    

                /* 8 Check tcdybs_adjustment_dybk */
                if tqDaybookSetBeginsCode.tcdybs_adjustment_dybk <> '' and tApiDinvoiceDaybookSets.tlInvoiceFoundInPeriod = false
                then do :
                    <M-43 run APIJournalNbrValDet1
                       (input  iiCompanyId (iiCompany_ID), 
                        input  tqDaybookSetBeginsCode.tcdybs_adjustment_dybk (icJournalCode), 
                        input  tqPeriodByStartEndDate.tiPeriod_ID (iiPeriod_ID), 
                        output tApiDinvoiceDaybookSets.tlInvoiceFoundInPeriod (olInvoiceFound), 
                        output viFcReturnSuper (oiReturnStatus)) in BDInvoice>
                end. /* tcdybs_adjustment_dybk */    

            end. /* if available tqDaybookSetBeginsCode */
    
        end. /* for each tApiDinvoiceDaybookSets */

    end. /* if available tqGLCalendarYrByDateDomain */

    /* =============================================================================================================== */
    /* 3. Determine tAPIDaybookValidation.tlChronologicalError (this is per daybook)                                   */
    /* =============================================================================================================== */         
    for each tAPIDaybookValidation:
        
         assign tAPIDaybookValidation.tlChronologicalError = FALSE.

         <M-18 run APIJournalNbrValDet2
            (input  iiCompanyId (iiCompany_ID), 
             input  tAPIDaybookValidation.tcJournalCode (icJournalCode), 
             input  itPostingDate (itInvoicePostingDate), 
             output tAPIDaybookValidation.tlChronologicalError (olInvoiceFound), 
             output viFcReturnSuper (oiReturnStatus)) in BDInvoice>
    
    end. /* for each tAPIDaybookValidation */
    
end. /* if vlCCNIsConsecutNr = TRUE and vlCCNIsChronolNr = TRUE */

/* ========================================================================= */
/* Set the output variables                                                  */
/* Note the setting of olChronoWarning is strange and indicates error or not */
/* vlCCNIsChronolNr=no                      --> nothing to happen            */
/* vlCCNIsChronolNr=yes olChronoWarning=no  --> Warning message              */
/* vlCCNIsChronolNr=yes olChronoWarning=yes --> Error message                */
/* ========================================================================= */

assign olIsConsecutiveNbr   = vlCCNIsConsecutNr
       olIsChronologicalNbr = vlCCNIsChronolNr
       olChronoWarning      = vlCCNNonChronError.
       
assign oiReturnStatus = viLocalReturnStatus.