project QadFinancials > class BBankNumber > method CreateCDBankNumberAsCopy

Description

Create supplier/customer bank number from the copy of existing one. Different bank payment format is linked.


Parameters


iiOriginalBankNumberIDinputinteger
iiNewPayFormatIDinputinteger
oiNewBankNumberIDoutputinteger
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


QadFinancials
method BCDocument.ApiSetCDocumentStatusChange
method BCDocument.ValidateComponentPreCreditor
method BDDocument.ApiSetDDocumentStatusChange
method BDDocument.ValidateComponentPreDebtor


program code (program3/bbanknumber.p)

/* =================================================================================================== */
/* Method      : CreateCDBankNumberAsCopy                                                              */
/* Desc        : This method creates a bank number for customer/supplier                               */
/* --------------------------------------------------------------------------------------------------- */
/* Params:  (I)  OriginalBankNumberID     ID of original bank number                                   */
/*          (I)  NewPayFormatID           New Payment format ID for new  bank number                   */
/*          (O)  NewBankNumberID          ID of new bank number                                        */
/* =================================================================================================== */

assign oiReturnStatus = -98.

if iiOriginalBankNumberID = ? or iiOriginalBankNumberID = 0
then do:
    assign oiReturnStatus = -1
           vcMsg          = #T-7'Original bank number cannot be empty.':255(70309)T-7#.
    <M-4 run SetMessage
       (input  vcMsg (icMessage), 
        input  '':U (icArguments), 
        input  '':U (icFieldName), 
        input  '':U (icFieldValue), 
        input  'S':U (icType), 
        input  3 (iiSeverity), 
        input  '':U (icRowid), 
        input  'QadFin-8305':U (icFcMsgNumber), 
        input  '':U (icFcExplanation), 
        input  '':U (icFcIdentification), 
        input  '':U (icFcContext), 
        output viFcReturnSuper (oiReturnStatus)) in BBankNumber>
    return.
end. /* if iiOriginalBankNumberID = ? or iiOriginalBankNumberID = 0 */

if not can-find (first tBankNumber where
                       tBankNumber.BankNumber_ID = iiOriginalBankNumberID)
then do:
    <M-1 run DataLoad
       (input  '':U (icRowids), 
        input  string(iiOriginalBankNumberID) (icPkeys), 
        input  '':U (icObjectIds), 
        input  '':U (icFreeform), 
        input  true (ilKeepPrevious), 
        output viFcReturnSuper (oiReturnStatus)) in BBankNumber>
    if viFcReturnSuper <> 0 then assign oiReturnStatus = viFcReturnSuper.
    if viFcReturnSuper < 0 then return.
end. /* if not can-find (first tBankNumber where */

find first bBankNumber where
           bBankNumber.BankNumber_ID = iiOriginalBankNumberID no-error.

if not available bBankNumber
then do:
    assign oiReturnStatus = -1
           vcMsg          = #T-8'The bank number specified is not defined in the system (ID: $1).':255(70311)T-8#
           vcMsg          = substitute(vcMsg, string(iiOriginalBankNumberID)).
    <M-5 run SetMessage
       (input  vcMsg (icMessage), 
        input  '':U (icArguments), 
        input  '':U (icFieldName), 
        input  '':U (icFieldValue), 
        input  'S':U (icType), 
        input  3 (iiSeverity), 
        input  '':U (icRowid), 
        input  'QadFin-8306':U (icFcMsgNumber), 
        input  '':U (icFcExplanation), 
        input  '':U (icFcIdentification), 
        input  '':U (icFcContext), 
        output viFcReturnSuper (oiReturnStatus)) in BBankNumber>
    return.
end. /* if not available bBankNumber */

assign viParentObjectID = bBankNumber.ParentObject_ID.

find first tBankNumber where 
                    tBankNumber.ParentObject_ID = bBankNumber.ParentObject_ID and 
                    tBankNumber.BankPayFormat_ID = iiNewPayFormatID
no-lock no-error.
if not available tBankNumber then do:
    /* Create copy from original bank number */
    <M-2 run AddDetailLine
       (input  'BankNumber':U (icTable), 
        input  '':U (icParentRowid), 
        output viFcReturnSuper (oiReturnStatus)) in BBankNumber>
    if viFcReturnSuper <> 0 then assign oiReturnStatus = viFcReturnSuper.
    if viFcReturnSuper < 0 then return.
    
    buffer-copy bBankNumber
    except bBankNumber.BankNumber_ID
           bBankNumber.tc_ParentRowid
           bBankNumber.tc_Rowid
           bBankNumber.tc_Status 
           bBankNumber.BankPayFormat_ID
        to tBankNumber.
    assign tBankNumber.BankPayFormat_ID    = iiNewPayFormatID.
end.

oiNewBankNumberID               = tBankNumber.BankNumber_ID.

if bBankNumber.BankNumberIsDefault = true
then assign bBankNumber.BankNumberIsDefault = false
            bBankNumber.tc_Status           = "C":U.
else assign tBankNumber.BankNumberIsDefault = true.              

/* Copy BankNumberPayCode records */
for each bBankNumberPayCode where
         bBankNumberPayCode.BankNumber_ID = bBankNumber.BankNumber_ID:
    find first tBankNumberPayCode where 
        tBankNumberPayCode.BankNumber_ID  = tBankNumber.BankNumber_ID and 
        tBankNumberPayCode.PayFormatGroup_ID = bBankNumberPayCode.PayFormatGroup_ID
    no-lock no-error.
    if not available tBankNumberPayCode
    then do:
        <M-3 run AddDetailLine
           (input  'BankNumberPayCode':U (icTable), 
            input  tBankNumber.tc_Rowid (icParentRowid), 
            output viFcReturnSuper (oiReturnStatus)) in BBankNumber>
        if viFcReturnSuper <> 0 then assign oiReturnStatus = viFcReturnSuper.
        if viFcReturnSuper < 0 then return.
        buffer-copy bBankNumberPayCode
        except bBankNumberPayCode.BankNumberPayCode_ID
               bBankNumberPayCode.tc_Rowid
               bBankNumberPayCode.tc_ParentRowid
               bBankNumberPayCode.tc_Status
               bBankNumberPayCode.BankNumber_ID
            to tBankNumberPayCode.
        assign tBankNumberPayCode.BankNumber_ID  = tBankNumber.BankNumber_ID
               tBankNumberPayCode.tc_ParentRowid = tBankNumber.tc_Rowid.
    end.
end. /* for each bBankNumberPayCode where */

/*Change Default Bank Number*/  
<Q-15 run BankNumberByPayFormatParentObj (all) (Read) (NoCache)
   (input ?, (PaymentFormatID)
    input bBankNumber.ParentObject_ID, (ParentObjectID)
    input viCompanyId, (CompanyId)
    output dataset tqBankNumberByPayFormatParentObj) in BBankNumber >
    
assign vcList = "":U.
for each tqBankNumberByPayFormatParentObj where
         tqBankNumberByPayFormatParentObj.tiParentObject_ID = bBankNumber.ParentObject_ID and
         tqBankNumberByPayFormatParentObj.tiCompany_ID      = viCompanyId:
    if vcList = "":U then assign vcList = string(tqBankNumberByPayFormatParentObj.tiBankNumber_ID).
    else assign vcList = vcList + chr(4) + string(tqBankNumberByPayFormatParentObj.tiBankNumber_ID).
end. /* for each tqBankNumberByPayFormatParentObj where */

if vcList <> "":U
then do:
    <M-40 run DataLoad
       (input  '':U (icRowids), 
        input  vcList (icPkeys), 
        input  '':U (icObjectIds), 
        input  '':U (icFreeform), 
        input  true (ilKeepPrevious), 
        output viFcReturnSuper (oiReturnStatus)) in BBankNumber>
    if viFcReturnSuper <> 0 then assign oiReturnStatus = viFcReturnSuper.
    if viFcReturnSuper < 0 then return.
end.

for each tBankNumber where
         tBankNumber.ParentObject_ID = viParentObjectID:
    if can-find (first tqBankNumberByPayFormatParentObj where
                       tqBankNumberByPayFormatParentObj.tiBankNumber_ID = tBankNumber.BankNumber_ID and
                       tqBankNumberByPayFormatParentObj.tiCompany_ID    = viCompanyId) or 
                       (tBankNumber.tc_Status       = 'N':U and
                       tBankNumber.ParentObject_ID  = bBankNumber.ParentObject_ID)
    then do:
        if tBankNumber.BankNumberIsDefault = true and
           tBankNumber.BankNumber_ID      <> oiNewBankNumberID
        then assign tBankNumber.BankNumberIsDefault = false.
        
        if tBankNumber.tc_Status      <> 'N':U and
           tBankNumber.ParentObject_ID = bBankNumber.ParentObject_ID
        then assign tBankNumber.tc_Status           = "C":U.
    end.
end. /* for each tBankNumber where */

<M-6 run ValidateBCAndAdditionalUpdates  (output viFcReturnSuper (oiReturnStatus)) in BBankNumber>
if viFcReturnSuper <> 0 then assign oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0 then return.

if oiReturnStatus = -98 then assign oiReturnStatus = 0.