| Quintiq file version 2.0 | 
| #parent: #root | 
| Method SynchronizeSalesDemandInPeriod ( | 
|   Boolean resetoptimizerfulfillment | 
| ) | 
| { | 
|   Description: 'Synchronize sales demand in period on base period modification.' | 
|   TextBody: | 
|   [* | 
|     // desmondt Nov-5-2015 (modified) | 
|     oldsdips := selectset( this, SalesDemandInPeriod, sdip, true ); | 
|     newsdips := construct( SalesDemandInPeriods ); | 
|      | 
|     // If quantity had been updated, reset the optimizer fulfillment sales demand in the Pispip and the pispips onwards so that the calc system fulfilled quantity will kicks in | 
|     /* e.g | 
|     Period         Jan  Feb  March April | 
|     SalesDemandInPeriod HasOptimizerFulfillment | 
|     Sales demand 1 true true true  true | 
|     Sales demand 2 true true true  true | 
|     Sales demand 3 true true true  true  | 
|      | 
|     When a sales demand quantity in Feb had been updated, ALL sales demand from Feb ~ April will be reseted. | 
|      | 
|     Period         Jan  Feb  March April | 
|     SalesDemandInPeriod HasOptimizerFulfillment | 
|     Sales demand 1 true false false  false | 
|     Sales demand 2 true false false  false | 
|     Sales demand 3 true false false  false | 
|     */ | 
|     if( resetoptimizerfulfillment ) | 
|     { | 
|       sdip := this.First(); | 
|       if( not isnull( sdip ) | 
|           and not isnull( sdip.AsSalesDemandInPeriodBase() ) ) | 
|       { | 
|         sdip.AsSalesDemandInPeriodBase().ResetSalesDemandFulfillmentForThisPeriodOnwards(); | 
|       } | 
|     } | 
|      | 
|     if( this.StartDate().IsFinite() and this.EndDate().IsFinite() ) | 
|     { | 
|       // SDiPs to get generated on planning period level | 
|       pispips := this.GetPlanningPISPIPs(); | 
|       traverse( pispips, Elements, pispip )  | 
|       {  | 
|         sdip := this.GetSalesDemandInPeriod( pispip ); | 
|         if( not isnull( sdip ) ) | 
|         { | 
|           newsdips.Add( sdip ); | 
|         } | 
|       } | 
|     } | 
|      | 
|     // Get the difference(obsolete) SDIP | 
|     deprecatedsdips := oldsdips.Difference( newsdips ); | 
|      | 
|     // Remove the obsolete SDIP | 
|     SalesDemandInPeriod::Delete( deprecatedsdips ); | 
|   *] | 
|   InterfaceProperties { Accessibility: 'Extensible' } | 
| } |