| Quintiq file version 2.0 | 
| #parent: #root | 
| Method GetActualCostPerPeriodSpecification ( | 
|   Period_MP period, | 
|   output Real totalCost | 
| ) remote | 
| { | 
|   Description: 'Get the cost as per IsPlanning/IsBase/Others' | 
|   TextBody: | 
|   [* | 
|     if( period.IsPlanning() ) //planning period, derive calculation | 
|     { | 
|       if( this.CostDriver() = Translations::MP_AccountAssignmentCostDriverVolume() ) | 
|       { | 
|         totalCost := sum( this, Operation.PeriodTaskOperation, pto, | 
|                           pto.UnitPeriod().Period_MP() = period, | 
|                           pto.GetTotalBaseCostForVolume( this.UnitAccount() ) ); | 
|       }     | 
|       else if( this.CostDriver() = Translations::MP_AccountAssignmentCostDriverTime() ) | 
|       { | 
|         totalCost := sum( this, Operation.PeriodTaskOperation, pto, | 
|                           pto.UnitPeriod().Period_MP() = period, | 
|                           pto.GetTotalBaseCostForHour( this.UnitAccount() ) ); | 
|       }  | 
|       else if( this.CostDriver() = Translations::MP_AccountAssignmentCostDriverLot() )  | 
|       { | 
|         totalCost := sum( this, Operation.PeriodTaskOperation, pto, | 
|                           pto.UnitPeriod().Period_MP() = period, | 
|                           pto.GetTotalBaseCostForLot( this.UnitAccount() ) ); | 
|       } | 
|       else if( this.CostDriver() = Translations::MP_AccountAssignmentCostDriverOneTime() )  | 
|       { | 
|         // For each period with utilization (qty > 0) will incur the cost | 
|         totalCost := sum( this, Operation.PeriodTaskOperation, pto, | 
|                           pto.QuantityToProcess() > 0 and pto.UnitPeriod().Period_MP() = period, | 
|                           pto.GetTotalBaseCostForOneTimeCost( this.UnitAccount() ) ); | 
|       } | 
|     } | 
|     else if( period.IsBase() ) //base period, disaggregate from planning period | 
|     { | 
|       totalCost := this.GetActualCosts( period.PlanningPeriod() ) * period.PlanningSystemRatio(); | 
|     } | 
|     else  //non base non planning, sum from planning | 
|     { | 
|       traverse( this, Operation.PeriodTaskOperation, pto, pto.UnitPeriod().Period_MP() = period ) | 
|       { | 
|         traverse( pto.UnitPeriod().GetChildrenOfPeriodDimension(), Elements, childspip ) | 
|         { | 
|           totalCost := totalCost + this.GetActualCosts( childspip.Period_MP() ); | 
|         } | 
|       }                   | 
|     } | 
|   *] | 
| } |