Monday, June 25, 2018

Creating and revising the Project Budget from Project Forecasts in D365

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

No comments:

Post a Comment