Tuesday, September 23, 2025

Update Consolidate MainAccount for old records

 Update existing records to ensure the Consolidation Account field is correctly populated based on the Consolidate MainAccount setup.

1. Contract Class:-

[DataContractAttribute]

[SysOperationAlwaysInitializeAttribute]

internal final class UpdateConsolidateAccountContract 

    implements SysOperationValidatable, SysOperationInitializable

{

    TransDate fromDate;


    [DataMemberAttribute,

     SysOperationLabel(literalStr("Transaction date"))]

    public TransDate parmFromDate(TransDate _fromDate = fromDate)

    {

        fromDate = _fromDate;

        return fromDate;

    }


    public boolean validate()

    {

        boolean isValid = true;


        if (!fromDate)

        {

            isValid = checkFailed("Date must be filled in.");

        }


        return isValid;

    }


    public void initialize()

    {

        fromDate = mkDate(1, 1, 2025);

    }

}


2. Service Class:-

internal final class UpdateConsolidateAccountService extends SysOperationServiceBase

{

    public void processOperation(UpdateConsolidateAccountContract contract)

    {

        GeneralJournalAccountEntry      generalJournalAccountEntry;

        GeneralJournalEntry             generalJournalEntry;

        MainAccountConsolidateAccount   consolidationAccount;

        LedgerParameters                ledgerParameters;

        TransDate                       transactionDate = contract.parmFromDate();


        select ledgerParameters

            where ledgerParameters.DataAreaId == curExt();

        

        if (ledgerParameters.ConsolidateAccountGroup)

        {

            while select forupdate generalJournalAccountEntry

                join generalJournalEntry

                    where generalJournalAccountEntry.GeneralJournalEntry == generalJournalEntry.RecId

                       && generalJournalAccountEntry.ConsolidationMainAccount == ""

                       && generalJournalEntry.SubledgerVoucherDataAreaId == curExt()

                       && generalJournalEntry.AccountingDate >= transactionDate

            {

                try

                {

                    select firstonly consolidationAccount

                        where consolidationAccount.MainAccount == generalJournalAccountEntry.MainAccount

                           && consolidationAccount.ConsolidateAccountGroup == ledgerParameters.ConsolidateAccountGroup;

                

                    if (consolidationAccount)

                    {

                        ttsBegin;

                        generalJournalAccountEntry.ConsolidationMainAccount = consolidationAccount.ConsolidationMainAccount;

                        generalJournalAccountEntry.ConsolidateAccountName   = consolidationAccount.Name;

                        generalJournalAccountEntry.doUpdate();

                        ttsCommit;

                    }

                }

                catch

                {

                    error(UpdateConsolidateAccountService::getError());

                    continue;

                }

            }

        }

    }


    public static str getError()

    {

        SysInfologEnumerator      sysInfologEnumerator;

        SysInfologMessageStruct   infoMessageStruct;

        str                       logMessage;

        str                       logString;

        int                       i;


        #Define.NewLine('\n')

        sysInfologEnumerator = SysInfologEnumerator::newData(infolog.infologData());


        while (sysInfologEnumerator.moveNext())

        {

            i = 1;

            if (logMessage)

            {

                logMessage += #NewLine;

            }

            infoMessageStruct = SysInfologMessageStruct::construct(sysInfologEnumerator.currentMessage());

            while (i <= infoMessageStruct.prefixDepth())

            {

                logString += infoMessageStruct.preFixTextElement(i) + '. ';

                i++;

            }

            logString += infoMessageStruct.message();

            logMessage += infoMessageStruct.message();

        }


        infolog().clear();

        return logMessage;

    }

}


3. controller class:-

internal final class UpdateConsolidateAccountController extends SysOperationServiceController

{

    public void new()

    {

        super();

        this.parmClassName(classStr(UpdateConsolidateAccountService));

        this.parmMethodName(methodStr(UpdateConsolidateAccountService, processOperation));

        this.parmDialogCaption("Update consolidate main account");

        // this.parmExecutionMode(SysOperationExecutionMode::ScheduledBatch);

    }


    public ClassDescription caption()

    {

        return "Update consolidate main account";

    }


    public static void main(Args args)

    {

        UpdateConsolidateAccountController controller = new UpdateConsolidateAccountController();

        controller.parmInBatch(true);

        controller.parmShowDialog(true);

        controller.startOperation();

    }

}

No comments:

Post a Comment

Update Consolidate MainAccount for old records

  Update existing records to ensure the  Consolidation Account  field is correctly populated based on the  Consolidate MainAccount  setup. 1...