| Quintiq file version 2.0 | 
| #parent: #root | 
| Method Update ( | 
|   DateTime startofplanning, | 
|   PeriodSpecification_MP periodspecification, | 
|   Boolean iscleanupactuals, | 
|   Boolean isfromdb | 
| ) | 
| { | 
|   Description: 'Update method' | 
|   TextBody: | 
|   [* | 
|     this.StartOfPlanning( startofplanning ); | 
|     this.IsManuallyConfigured( not isfromdb ); | 
|     // We will roll the period by sequnce with the one have the earlsiest start. | 
|     sortedperiodspec := selectsortedset( this, MacroPlan.PeriodSpecification_MP, pspec,  | 
|                                          not pspec.IsDummyPlanningPeriod(),  | 
|                                          pspec.FirstInPeriodSpecification().Start() ); | 
|      | 
|     traverse( sortedperiodspec, Elements, spec ) | 
|     { | 
|       // Only update alignment for the other period spec except the one being selected in the period form. (Period Roll) | 
|       updatealignment := spec <> periodspecification; | 
|       spec.SynchronizePeriodAlignment( startofplanning, updatealignment, isnull( periodspecification ), isfromdb ); | 
|     } | 
|      | 
|     traverse( this, MacroPlan.PeriodSpecification_MP, pp ) | 
|     { | 
|       pp.SynchronizePeriods(); | 
|     } | 
|      | 
|     this.MacroPlan().SynchronizeBasePeriods(); | 
|     this.MacroPlan().SynchronizeGapPlanningPeriods(); | 
|     if( iscleanupactuals ) | 
|     { | 
|       this.MacroPlan().CleanUpActuals(); | 
|     } | 
|      | 
|     // We need to create pispips for new base periods | 
|     // Now that pispip has different subclasses, we need to | 
|     // recreate them whenever the following attributes change | 
|     // Product.IsLeaf, Period.IsBase and Period.IsPlanning | 
|     periods := selectset( this, MacroPlan.Period_MP, period, true ) | 
|     pisps := selectset( this.MacroPlan(), Product_MP.ProductInStockingPoint_MP, pisp, true ) | 
|     this.MacroPlan().CreateProductInStockingPointInPeriod( pisps, periods, false /*isondelete*/ ); | 
|      | 
|     //Update unit calendar window when the period horizon changes | 
|     this.MacroPlan().UpdateUnitCalendar(); | 
|      | 
|     //Set Campaign and its Transition history | 
|     this.MacroPlan().SetHistoricalCampaignAndTransition(); | 
|   *] | 
| } |