| Quintiq file version 2.0 | 
| #parent: #root | 
| StaticMethod UpdateAccountKPIValueInPeriod ( | 
|   KPIValues accountkpis, | 
|   Period_MP period, | 
|   DateTime start, | 
|   DateTime end, | 
|   Scenario scenario | 
| ) | 
| { | 
|   Description: 'Update the kpi value in period for account kpis' | 
|   TextBody: | 
|   [* | 
|     // soh yee Jul-14-2014 (created) | 
|      | 
|     periods := construct( KPIValueInPeriods ); | 
|      | 
|     // Account KPIs is sorted from non-children to the highest level, such that the arithmetic operation can take places for accounts with children | 
|     traverse( accountkpis, Elements, kpivalue ) | 
|     { | 
|       kpiname := kpivalue.KPI().Name(); | 
|       account := select( period, MacroPlan.Account_MP, a, a.Name() = kpiname ); | 
|      | 
|       sales := 0.0; | 
|       inventoryholding := 0.0; | 
|       fixed := 0.0; | 
|       nrofunits := 0.0; | 
|       time := 0.0; | 
|       volume := 0.0; | 
|       staffing := 0.0; | 
|      | 
|       createsales := false; | 
|       createinventoryholding := false; | 
|       createfixed := false; | 
|       createnrofunits := false; | 
|       createtime := false; | 
|       createvolume := false; | 
|       createstaffing := false; | 
|      | 
|      | 
|       // Accounts without any children. | 
|       traverse( account, AccountAssignment, aa, aa.Account_MP().Child( relsize ) = 0 ) | 
|       { | 
|         costdriver := aa.CostDriver(); | 
|      | 
|         // Sales | 
|         if( costdriver = Translations::MP_AccountAssignmentCostDriverSales() ) | 
|         { | 
|           sales := sales + aa.GetSalesAccountValueInPeriod( period ); | 
|            | 
|           createsales := true; | 
|         } | 
|      | 
|         // Inventory holding | 
|         else if( costdriver = Translations::MP_AccountAssignmentCostDriverInventoryHolding() ) | 
|         { | 
|           inventoryholding := inventoryholding + aa.GetInventoryHoldingAccountValueInPeriod( period ); | 
|            | 
|           createinventoryholding := true; | 
|         } | 
|      | 
|         // Fixed | 
|         else if( costdriver = Translations::MP_AccountAssignmentCostDriverFixed() ) | 
|         { | 
|           fixed := fixed + aa.GetFixedAccountValueInPeriod( period ); | 
|      | 
|           createfixed := true; | 
|         } | 
|      | 
|         //Staffing | 
|         else if( costdriver = Translations::MP_AccountAssignmentCostDriverStaffing() ) | 
|         { | 
|           staffing := staffing + aa.GetStaffingAccountValueInPeriod( period ); | 
|                                                  | 
|           createstaffing := true; | 
|         } | 
|      | 
|         // Nr of units | 
|         else if( costdriver = Translations::MP_AccountAssignmentCostDriverNrOfUnits() ) | 
|         { | 
|           nrofunits := nrofunits + aa.GetNrOfUnitsAccountValueInPeriod( period ); | 
|            | 
|           createnrofunits := true; | 
|         } | 
|      | 
|         // Time | 
|         else if( costdriver = Translations::MP_AccountAssignmentCostDriverTime() ) | 
|         { | 
|           time := time + aa.GetTimeAccountValueInPeriod( period ); | 
|            | 
|           createtime := true; | 
|         } | 
|      | 
|         // Volume | 
|         else if( costdriver = Translations::MP_AccountAssignmentCostDriverVolume() ) | 
|         { | 
|           volume := volume + aa.GetVolumeAccountValueInPeriod( period ); | 
|                                              | 
|           createvolume := true; | 
|         } | 
|       } | 
|      // create kpivalue in period for each of account assignment and acount kpis | 
|       ScenarioManager::CreateKPIValueInPeriod( createsales, createinventoryholding, createfixed,  | 
|                                                createstaffing,createnrofunits, createtime,  | 
|                                                createvolume, kpivalue, start, end,  | 
|                                                sales, inventoryholding, fixed, staffing,  | 
|                                                nrofunits, time, volume, account, kpiname, periods );  | 
|      | 
|     } | 
|      | 
|     ScenarioManager::UpdateMarginAcount( period, periods, scenario, start, end ); | 
|   *] | 
| } |