project QadFinancials > class BCInvoice > method CreateCInvoicesReason

Description

default all values based on reason code


Parameters


blStartReasonByIdCodeinput-outputlogicalChecks if the query tqReasonByIdCode was already started or not ?
blStartReasonByInitialStatusinput-outputlogicalChecks if the query tqReasonByInitialStatus was already started or not ?
ilIsReasonFromCreditorinputlogical
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


QadFinancials
method BCInvoice.CreateCInvoices


program code (program3/bcinvoice.p)

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

REASONBLOCK : Do:
    if tCInvoice.Reason_ID    <> 0 or
       tCInvoice.tcReasonCode <> "":U
    then do:
        if not blStartReasonByIdCode
        then do:
             <Q-5 run ReasonByIdCode  (Start) in BReason >
             assign blStartReasonByIdCode = true.
        end.

        <Q-1 run ReasonByIdCode (all) (Read) (Cache)
           (input tCInvoice.Reason_ID, (ReasonId)
            input if tCInvoice.Reason_ID = 0 then tCInvoice.tcReasonCode else '':U, (ReasonCode)
            output dataset tqReasonByIdCode) in BReason >
        find first tqReasonByIdCode no-error.
        if available tqReasonByIdCode
        then assign tCInvoice.CInvoiceIsLockPayment      = tqReasonByIdCode.tlReasonIsLockPayment
                    tCInvoice.CInvoiceIsInitialStatus    = tqReasonByIdCode.tlReasonIsInitialStatus
                    tCInvoice.CInvoiceIsInvoiceApproved  = tqReasonByIdCode.tlReasonIsInvoiceApproved
                    tCInvoice.tcReasonAllocationStatus   = tqReasonByIdCode.tcReasonAllocationStatus
                    tCInvoice.CInvoiceAllocationStatus   = tqReasonByIdCode.tcReasonAllocationStatus
                    tCInvoice.CInvoiceIsLogisticMatching = tqReasonByIdCode.tlReasonIsLogisticMatching.
        else assign tCInvoice.CInvoiceIsLockPayment      = false
                    tCInvoice.CInvoiceIsInitialStatus    = false
                    tCInvoice.CInvoiceIsInvoiceApproved  = false
                    tCInvoice.tcReasonAllocationStatus   = "":U
                    tCInvoice.CInvoiceAllocationStatus   = "":U
                    tCInvoice.CInvoiceIsLogisticMatching = false.
    
        /* if not prepayment, initial and status is taken from creditor , then search first record *
         * that is not initial and use that, if no record found, give error        */
        if tCInvoice.CInvoiceType <> {&INVOICETYPE-PREPAYMENT} and
           tCInvoice.CInvoiceIsInitialStatus and
           ilIsReasonFromCreditor
        then do:
             if not blStartReasonByInitialStatus
             then do:
                 <Q-6 run ReasonByInitialStatus  (Start) in BReason >
                 assign blStartReasonByInitialStatus = true.
             end.

             <Q-2 run ReasonByInitialStatus (all) (Read) (Cache)
                (input false, (ReasonIsInitialStatus)
                 output dataset tqReasonByInitialStatus) in BReason >
             find first tqReasonByInitialStatus where
                        tqReasonByInitialStatus.tlReasonIsInitialStatus = false
                        no-lock no-error.
             if available tqReasonByInitialStatus
             then assign tCInvoice.tcReasonCode               = tqReasonByInitialStatus.tcReasonCode
                         tCInvoice.CInvoiceIsLockPayment      = tqReasonByInitialStatus.tlReasonIsLockPayment
                         tCInvoice.CInvoiceIsInitialStatus    = tqReasonByInitialStatus.tlReasonIsInitialStatus
                         tCInvoice.CInvoiceIsInvoiceApproved  = tqReasonByInitialStatus.tlReasonIsInvoiceApproved
                         tCInvoice.tcReasonAllocationStatus   = tqReasonByInitialStatus.tcReasonAllocationStatus
                         tCInvoice.CInvoiceAllocationStatus   = tqReasonByInitialStatus.tcReasonAllocationStatus
                         tCInvoice.CInvoiceIsLogisticMatching = tqReasonByInitialStatus.tlReasonIsLogisticMatching.
            else do:
                assign viLocalReturnStatus = -1.
                <M-3 run SetMessage
                   (input  trim(#T-31'No Invoice Status Code found that is not Initial. Please create one first.':255(999890087)T-31#) (icMessage), 
                    input  '':U (icArguments), 
                    input  '':U (icFieldName), 
                    input  '':U (icFieldValue), 
                    input  'E':U (icType), 
                    input  3 (iiSeverity), 
                    input  '':U (icRowid), 
                    input  'QadFin-8821':U (icFcMsgNumber), 
                    input  '' (icFcExplanation), 
                    input  '' (icFcIdentification), 
                    input  '' (icFcContext), 
                    output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
                Leave REASONBLOCK.
            end.
        end.
        
        /* if prepayment, initial or lock payment and status is taken from creditor , then search   *
         * first record that is not initial, active, invoice approved, not lock payment, Allocation *
         * status = Allocation or Any, not logistics matching and use that, if no record found, give error */
        if tCInvoice.CInvoiceType = {&INVOICETYPE-PREPAYMENT} and
           ilIsReasonFromCreditor and
           (tCInvoice.CInvoiceIsInitialStatus or tCInvoice.CInvoiceIsLockPayment)
        then do:
             if not blStartReasonByInitialStatus
             then do:
                 <Q-90 run ReasonByInitialStatus  (Start) in BReason>
                 assign blStartReasonByInitialStatus = true.
             end.

             <Q-49 run ReasonByInitialStatus (all) (Read) (Cache)
                (input false, (ReasonIsInitialStatus)
                 output dataset tqReasonByInitialStatus) in BReason>
             find first tqReasonByInitialStatus where
                        tqReasonByInitialStatus.tlReasonIsInitialStatus    = false and
                        tqReasonByInitialStatus.tlReasonIsActive           = true  and
                        tqReasonByInitialStatus.tlReasonIsLockPayment      = false and
                        tqReasonByInitialStatus.tlReasonIsInvoiceApproved  = true  and
                        tqReasonByInitialStatus.tlReasonIsLogisticMatching = false and
                        tqReasonByInitialStatus.tcReasonAllocationStatus   = {&ALLOCSTATUS-ALLOC}
                        no-error.
             if not available tqReasonByInitialStatus
             then 
                 find first tqReasonByInitialStatus where
                            tqReasonByInitialStatus.tlReasonIsInitialStatus    = false and
                            tqReasonByInitialStatus.tlReasonIsActive           = true  and
                            tqReasonByInitialStatus.tlReasonIsLockPayment      = false and
                            tqReasonByInitialStatus.tlReasonIsInvoiceApproved  = true  and
                            tqReasonByInitialStatus.tlReasonIsLogisticMatching = false and
                            tqReasonByInitialStatus.tcReasonAllocationStatus   = {&ALLOCSTATUS-ANY}
                            no-error.
             if available tqReasonByInitialStatus
             then
                 assign tCInvoice.tcReasonCode               = tqReasonByInitialStatus.tcReasonCode
                        tCInvoice.CInvoiceIsLockPayment      = tqReasonByInitialStatus.tlReasonIsLockPayment
                        tCInvoice.CInvoiceIsInitialStatus    = tqReasonByInitialStatus.tlReasonIsInitialStatus
                        tCInvoice.CInvoiceIsInvoiceApproved  = tqReasonByInitialStatus.tlReasonIsInvoiceApproved
                        tCInvoice.tcReasonAllocationStatus   = tqReasonByInitialStatus.tcReasonAllocationStatus
                        tCInvoice.CInvoiceAllocationStatus   = if tqReasonByInitialStatus.tcReasonAllocationStatus = {&ALLOCSTATUS-ALLOC} then {&ALLOCSTATUS-ALLOC} else {&ALLOCSTATUS-NOALLOC}
                        tCInvoice.CInvoiceIsLogisticMatching = tqReasonByInitialStatus.tlReasonIsLogisticMatching.
            else do:
                assign viLocalReturnStatus = -1.
                <M-61 run SetMessage
                   (input  trim(#T-14'No Invoice Status Code found that is not Initial. Please make active or create one.':255(786738999)T-14#) (icMessage), 
                    input  '':U (icArguments), 
                    input  '':U (icFieldName), 
                    input  '':U (icFieldValue), 
                    input  'E':U (icType), 
                    input  3 (iiSeverity), 
                    input  '':U (icRowid), 
                    input  'qadfin-266566':U (icFcMsgNumber), 
                    input  '' (icFcExplanation), 
                    input  '' (icFcIdentification), 
                    input  '' (icFcContext), 
                    output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
                Leave REASONBLOCK.
            end.
        end.

        if tCInvoice.CInvoiceType             = {&INVOICETYPE-PREPAYMENT} and
           tCInvoice.CInvoiceAllocationStatus = {&ALLOCSTATUS-ANY}
        then assign tCInvoice.CInvoiceAllocationStatus = {&ALLOCSTATUS-NOALLOC}.

     end.
 end.

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