| Quintiq file version 2.0 | 
| #parent: #root | 
| Method GetBaseCost ( | 
|   AccountCost accountcost, | 
|   UnitPeriod unitperiod | 
| ) remote as Real | 
| { | 
|   Description: 'Returns base cost of a given period - used in designer' | 
|   TextBody: | 
|   [* | 
|     // Returns base cost of a given period - used in designer | 
|     basecost := 0.0; | 
|     if( not isnull( unitperiod ) ) | 
|     { | 
|       if( unitperiod.IsPlanning() ) | 
|       { | 
|        | 
|         // costs are of type fixed | 
|         if( this.CostDriver() = Translations::MP_AccountAssignmentCostDriverFixed() ) | 
|         { | 
|           basecost := unitperiod.GetFixedBaseCost( this, accountcost ); | 
|         } | 
|         // costs are of type staffing | 
|         else if( this.CostDriver() = Translations::MP_AccountAssignmentCostDriverStaffing() ) | 
|         { | 
|           basecost := unitperiod.GetStaffingBaseCost( this, accountcost ); | 
|         } | 
|         // costs are of type NrOfUnits | 
|         else if( this.CostDriver() = Translations::MP_AccountAssignmentCostDriverNrOfUnits() ) | 
|         { | 
|           basecost := unitperiod.GetNrOfUnitsBaseCost( this, accountcost ); | 
|         } | 
|         // costs are of type volume, which require a bit more work | 
|         else if( this.CostDriver() = Translations::MP_AccountAssignmentCostDriverVolume() ) | 
|         { | 
|           uaip := select( this, UnitAccountInPeriodForVolume, aip, true, aip.UnitPeriod() = unitperiod ); | 
|           if( not isnull( uaip ) ) | 
|           { | 
|             basecost := uaip.TotalBaseCost(); | 
|           } | 
|         } | 
|         // costs are of type Time, which requires a bit more work | 
|         else if( this.CostDriver() = Translations::MP_AccountAssignmentCostDriverTime() ) | 
|         { | 
|           uaip := select( this, UnitAccountInPeriodForTime, aip, true, aip.UnitPeriod() = unitperiod ); | 
|           if( not isnull( uaip ) ) | 
|           { | 
|             basecost := uaip.TotalBaseCost(); | 
|           } | 
|         } | 
|         // costs are of type lot, with requires a bit more work | 
|         else if( this.CostDriver() = Translations::MP_AccountAssignmentCostDriverLot() ) | 
|         {  | 
|           uaip := select( this, UnitAccountInPeriodForLot, aip, true, aip.UnitPeriod() = unitperiod ); | 
|           if( not isnull( uaip ) ) | 
|           { | 
|             basecost := uaip.TotalBaseCost(); | 
|           } | 
|         } | 
|         // costs are of type One time cost, which requires a bit more work | 
|         else if( this.CostDriver() = Translations::MP_AccountAssignmentCostDriverOneTime() ) | 
|         {  | 
|           uaip := select( this, UnitAccountInPeriodForOneTimeCost, aip, true, aip.UnitPeriod() = unitperiod ); | 
|           if( not isnull( uaip ) ) | 
|           { | 
|             basecost := uaip.TotalBaseCost(); | 
|           } | 
|         } | 
|         else if( this.CostDriver() = Translations::MP_AccountAssignmentCostDriverChangeover() ) | 
|         { | 
|           uaip := select( this, UnitAccountInPeriodForChangeover, aip, true, aip.UnitPeriod() = unitperiod ); | 
|           basecost := uaip.TotalBaseCost(); | 
|         } | 
|       } | 
|       else if( unitperiod.IsBase() )  // Base, fraction the value from planning period | 
|       { | 
|         basecost := this.GetBaseCost( accountcost, unitperiod.PlanningUP() ) * unitperiod.PlanningSystemRatio(); | 
|       } | 
|       else                            // Non base non planning, retrieve the value of base periods | 
|       { | 
|         basecost := sum( unitperiod.GetChildrenOfPeriodDimension(), Elements, up, this.GetBaseCost( accountcost, up ) ) | 
|       } | 
|     } | 
|      | 
|     return basecost; | 
|   *] | 
| } |