| Quintiq file version 2.0 | 
| #parent: #root | 
| StaticMethod UpdateNonFinancialKPIValueInPeriod ( | 
|   KPIValues kpivalues, | 
|   Period_MP period, | 
|   DateTime start, | 
|   DateTime end, | 
|   Scenario scenario | 
| ) | 
| { | 
|   Description: 'Update kpi value in period other than account kpis' | 
|   TextBody: | 
|   [* | 
|     // Non financial kpis | 
|     traverse( kpivalues, Elements, kpivalue ) | 
|     { | 
|       kpiname := kpivalue.KPI().Name(); | 
|      | 
|       // Only create for TargetInventoryLevel, Fulfillment, Volume and PostponedPenalty | 
|       if( kpiname = Translations::MP_GlobalParameters_KPISafetyStock() ) | 
|       { | 
|         value := guard( period.TargetInventoryLevelFulfillment() / period.TargetInventoryLevel() * 100, 0 ); | 
|         KPIValueInPeriod::Create( kpivalue, start, end, value, kpiname ); | 
|       } | 
|      | 
|       else if( kpiname = Translations::MP_GlobalParameters_KPIFulfillmentName() ) | 
|       { | 
|         value := guard( period.SalesDemandFulfillmentWithExclusion() / period.SalesDemandQuantityWithExclusion() * 100, 0 ); | 
|         KPIValueInPeriod::Create( kpivalue, start, end, value, kpiname ); | 
|       } | 
|      | 
|       else if( kpiname = Translations::MP_GlobalParameters_KPIVolumeName() ) | 
|       { | 
|         value := period.SalesDemandFulfillmentWithExclusion(); | 
|         KPIValueInPeriod::Create( kpivalue, start, end, value, kpiname ); | 
|       } | 
|      | 
|       else if( kpiname = Translations::MP_GlobalParameters_KPIPostponementPenaltyName() ) | 
|       { | 
|         value := period.PostponedSalesDemandPenalty(); | 
|         KPIValueInPeriod::Create( kpivalue, start, end, value, kpiname ); | 
|       } | 
|        | 
|       // Total expired quantity KPI | 
|       else if( kpiname = Translations::MP_GlobalParameters_KPITotalExpiredQuantity() ) | 
|       { | 
|         value := period.TotalExpiredQuantity(); | 
|         KPIValueInPeriod::Create( kpivalue, start, end, value, kpiname ); | 
|       } | 
|       // Number of shelf-life violation KPI | 
|       else if( kpiname = Translations::MP_GlobalParameters_KPINumberOfShelfLifeViolation() ) | 
|       { | 
|         value := [Real] period.NumberOfShelfLifeViolations(); | 
|         KPIValueInPeriod::Create( kpivalue, start, end, value, kpiname ); | 
|       } | 
|     } | 
|   *] | 
| } |