project QadFinancials > class BCompany > method ApiStdMaintainTTDetail

Description

Sub-method of ApiStdMaintainTTDetail.


Parameters


icActioninputcharacterThis input parameter defines what should happen with the input data:
- SAVE: Save the data if there were no errors.
- SAVESTORE: Save the data if there were no errors. If there were, save as draft.
- STORE: Save the data as draft.
- VALIDATE: Validate the input data, but do not save the data.
bcLstReturninput-outputcharacterReturns the list of returnvalues for all records that were processed.
bcLstPrimKeyinput-outputcharacterReturns the list of IDs for all records that were processed.
bcLstRowidinput-outputcharacterReturns the list of Rowids for each records that was processed.
blSaveAsDraftinput-outputlogicalSave as draft
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


QadFinancials
method BCompany.ApiStdMaintainTT


program code (program7/bcompany.p)

/*==========================================================*/
/* create/modify CompanySharedSet records                   */
/*==========================================================*/
<Q-2 run DomainByDomainSharedSet (all) (Read) (NoCache)
   (input tApiCompany.Domain_ID, (DomainID)
    input ?, (SharedSetID)
    input '':U, (SharedSetCode)
    input '':U, (SharedSetType)
    output dataset tqDomainByDomainSharedSet) in BDomain >
                              
for each tqDomainByDomainSharedSet:
    
    /* ==================================== */
    /* Find the appropriate exsiting record */
    /* ==================================== */  
    find tCompanySharedSet where         
         tCompanySharedSet.tc_ParentRowid  = tCompany.tc_Rowid and
         tCompanySharedSet.tcSharedSetCode = tqDomainByDomainSharedSet.tcSharedSetCode
         no-error.
    
    /* ================================= */
    /* Check for Create / Update         */
    /* ================================= */
    if available tqDomainByDomainSharedSet
    then do:
        assign tCompanySharedSet.tc_Status = "":U.
        buffer-compare tqDomainByDomainSharedSet to tCompanySharedSet save vlBufferCompareResult.
        if vlBufferCompareResult = true
        then next.
        assign tCompanySharedSet.tc_Status = "C":U.
    end. /* if available tCompanySharedSet */
    else do:        
        <M-1 run AddDetailLine (input  'CompanySharedSet':U (icTable), 
                        input  tCompany.tc_Rowid (icParentRowid), 
                        output viFcReturnSuper (oiReturnStatus)) in BCompany>            
        if viFcReturnSuper <> 0
        then do:
            assign oiReturnStatus = viFcReturnSuper.
            if oiReturnStatus < 0
            then do: 
                assign blSaveAsDraft  = (icAction <> {&DAEMONACTION-SAVE} and icAction <> {&DAEMONACTION-VALIDATE})
                       bcLstReturn    = bcLstReturn  + chr(4) + string(viFcReturnSuper)
                       bcLstPrimKey   = bcLstPrimKey + chr(4) + "*":U
                       bcLstRowid     = bcLstRowid   + chr(4) + "*":U.
                return.
            end. /* if oiReturnStatus < 0 */
        end. /* if viFcReturnSuper <> 0 */
    end. /* NOT if available tCompanySharedSet */
    buffer-copy tqDomainByDomainSharedSet to tCompanySharedSet.

end. /* for each tApiCompanySharedSet */

/* ====================================================== */
/* Remove the longer used CompanySharedSet of the Company */
/* ====================================================== */
for each tCompanySharedSet where
         tCompanySharedSet.tc_ParentRowid = tCompany.tc_Rowid :
    /* Check if the record still exists */
    find first tqDomainByDomainSharedSet where            
                    tqDomainByDomainSharedSet.tcSharedSetCode = tCompanySharedSet.tcSharedSetCode
                    no-error.
    if not available tqDomainByDomainSharedSet
    then if tCompanySharedSet.tc_Status = "N":U 
         then delete tCompanySharedSet.
         else assign tCompanySharedSet.tc_Status = "D":U.
end. /* for each tApiCompanySharedSet where ... */



/* ================================================================================= */
/* create/modify CompanyProperty records                                             */
/* Exceptional case because it is not sure whether the relation between Company and  */
/* CompanyProperty is based on tc_rowid/tc_parentrowid or on Company_ID/CompanyCode  */
/* ================================================================================= */
for each tApiCompanyPropertyRef where  
         tApiCompanyPropertyRef.tc_ParentRowid = tApiCompany.tc_Rowid
         by tApiCompanyPropertyRef.tc_Rowid :
    
    /* ==================================== */
    /* Find the appropriate exsiting record */
    /* ==================================== */
    find first tCompanyPropertyRef where 
               tCompanyPropertyRef.tc_ParentRowid      = tCompany.tc_Rowid and 
               tCompanyPropertyRef.CompanyPropertyCode = tApiCompanyPropertyRef.CompanyPropertyCode
               no-error.
    if not available tCompanyPropertyRef
    then find first tCompanyPropertyRef where 
                    tCompanyPropertyRef.tc_ParentRowid = tCompany.tc_Rowid and 
                    tCompanyPropertyRef.Company_ID     = tApiCompanyPropertyRef.Company_ID
                    no-error.
    if not available tCompanyPropertyRef
    then find tCompanyPropertyRef where 
              tCompanyPropertyRef.tc_ParentRowid = tCompany.tc_Rowid 
              no-error /* no first option because the find should only retrieve a single record by itself */.
    if not available tCompanyPropertyRef
    then find tCompanyPropertyRef where 
              tCompanyPropertyRef.Company_ID = tCompany.Company_ID 
              no-error /* no first option because the find should only retrieve a single record by itself */.
    
    /* ======================================================== */
    /* Check for Create / Update                                */
    /* Note: Create is done ate the moment tCompany is created  */
    /* ======================================================== */
    if available tCompanyPropertyRef
    then do:
        buffer-compare tApiCompanyPropertyRef except 
            CompanyProperty_ID
            Company_ID
            Currency_ID
            tc_ParentRowid
            tc_Status     
            to tCompanyPropertyRef save vlBufferCompareResult.
        if vlBufferCompareResult = true
        then next.
        if tCompanyPropertyRef.tc_Status = "":U
        then assign tCompanyPropertyRef.tc_Status = 'C':U.
        buffer-copy tApiCompanyPropertyRef except 
            CompanyProperty_ID
            Company_ID
            Currency_ID
            tc_ParentRowid
            tc_Status     
            to tCompanyPropertyRef.
        
        /* Get the currency from the domain */
         <Q-3 run DomainPropertyByDomain (all) (Read) (NoCache)
            (input tApiCompany.Domain_ID, (DomainID)
             output dataset tqDomainPropertyByDomain) in BDomainProperty >

        for first tqDomainPropertyByDomain:
            assign tCompanyPropertyRef.Currency_ID = tqDomainPropertyByDomain.tiCurrency_ID
                tCompanyPropertyRef.tcCurrencyCode = tqDomainPropertyByDomain.tcCurrencyCode.
        end.
    end. /* if available tCompanyPropertyRef */   
    
end. /* for each tApiCompanyPropertyRef where  */

/* ======================================================= */
/* Remove the longer used CompanyProperties of the Company */
/* ======================================================= */
/* NOTE: Removal is not supported as you cannot have a Company-record without a single    */
/* underlaying CompanyProperty-record. We will not give any error here based on the input */