Showing posts with label Batch job. Show all posts
Showing posts with label Batch job. Show all posts

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();

    }

}

Purchase Orders

 Before confirming a Purchase Order, the system should display a confirmation popup if the purchase order is associated with an active inter...