Creating and revising the Project Budget from Project Forecasts in D365FFO – AX – X++

With the following code we can able to import the project budget and revising too

    MenuItemName                actionName;
    MenuFunction                menuFunction;
    Args                        args = new args();
    IProjBudgetGridUpdatable    projBudgetGridUpdatable;
    ProjBudget                  projBudget,ProjBudgetWFStatus,projBudgetRec;
    ProjBudgetLine              projBudgetLine,PBL;
    projBudgetRevision          projBudgetRevision;
    projBudgetRevisionLine      projBudgetRevisionLine;
    ProjBudgetAllocationLine    projBudgetAllocationLine;
    ForecastModelId             defaultModelIdForForecastImport;
    FormDataSource              projBudget_ds,ProjBudgetLineRevenue_ds,ProjBudgetLineCost_ds;
    ProjBudgetImportBatch       projBudgetImportBatch = new ProjBudgetImportBatch();


    args = new Args();
    actionName = menuitemActionStr(projBudgetImportBatch);

    ttsbegin;

    projbudget::findOrCreateProjectBudget("HH");
    Select forupdate projBudget where projBudget.RootProjId == "HH";
    if(projBudget.BudgetWorkflowStatus == ProjBudgetWorkflowStatus::Created)
    {

        projBudgetImportBatch.parmProjId("HH");
        projBudgetImportBatch.parmProjBudgetRecId(projBudget.RecId);
        projBudgetImportBatch.parmSource("CurrentF");
        projBudgetImportBatch.parmMarkValue(0);
        projBudgetImportBatch.parmProjBudgetImportOptions(ProjBudgetImportOptions::Units);
        projBudgetImportBatch.parmProjBaseBudgetOn(projbaseBudgetOn::Forecast);
        projBudgetImportBatch.parmSummarizeByCategory(noyes::Yes);
        projBudgetImportBatch.parmInBatch(noyes::No);
        args.parmObject(projBudgetImportBatch);
        menuFunction = new MenuFunction(actionName, MenuItemType::Action);
        menuFunction.run(args);
        projbudget::updateProjBudgetStatus(projBudget.RecId,ProjBudgetWorkflowStatus::Submitted);
        projbudget::updateProjBudgetStatus(projBudget.RecId,ProjBudgetWorkflowStatus::Approved);
        args.record(projbudget);
        args.parmEnumType(enumnum(ProjBudgetManagerActionType));
        args.parmEnum(ProjBudgetManagerActionType::Commit);
        ProjBudgetManager::main(args);

    }
    projBudgetLine.clear();
    projBudgetRec.clear();


    // Budget revision
    if(projBudget.BudgetWorkflowStatus == ProjBudgetWorkflowStatus::Approved)
    {
        projBudgetRevision::createRevision(projBudget.RecId);
        select ProjBudgetRevision  where ProjBudgetRevision.ProjBudget == projBudget.RecId;
        projBudgetImportBatch.parmProjId("HH");
        projBudgetImportBatch.parmProjBudgetRecId(projBudget.RecId);
        projBudgetImportBatch.parmProjBudgetRevisionRecId(projBudgetRevision.RecId);
        projBudgetImportBatch.parmSource("CurrentF");
        projBudgetImportBatch.parmMarkValue(0);
        projBudgetImportBatch.parmProjBudgetImportOptions(ProjBudgetImportOptions::Units);
        projBudgetImportBatch.parmProjBaseBudgetOn(projbaseBudgetOn::Forecast);
        projBudgetImportBatch.parmSummarizeByCategory(noyes::Yes);
        projBudgetImportBatch.parmInBatch(noyes::No);
        args.parmObject(projBudgetImportBatch);
        menuFunction = new MenuFunction(actionName, MenuItemType::Action);
        menuFunction.run(args);
        ProjBudgetRevision::updateProjBudgetRevisionStatus(ProjBudgetRevision.RecId,ProjBudgetRevisionWFStatus::Submitted);
        ProjBudgetRevision::updateProjBudgetRevisionStatus(ProjBudgetRevision.RecId,ProjBudgetRevisionWFStatus::Approved);
        args.record(ProjBudgetRevision);
        ProjBudgetRevisionManager::main(args);
        while select forupdate PBL where PBL.ProjId == "HH"
        {
            PBL.UncommittedRevisions =0;
            PBL.update();

            while select projBudgetRevisionLine where projBudgetRevisionLine.ProjBudgetRevision == ProjBudgetRevision.RecId
            {
                select forupdate projBudgetAllocationLine where projBudgetAllocationLine.ProjBudgetLine == PBL.RecId;
                projBudgetAllocationLine.CommittedRevisions = projBudgetRevisionLine.RevisionAmount;
                projBudgetAllocationLine.TotalAllocationAmount = projBudgetRevisionLine.NewTotalBudget;
                projBudgetAllocationLine.update();
            }
        }
    }

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s