Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method SyncPlannedOrdersFromMacroPlan ( 
 | 
  MacroPlan macroplan, 
 | 
  String mpsplanid 
 | 
) 
 | 
{ 
 | 
  Description: 'Create planned orders from period tasks from macroplan.' 
 | 
  TextBody: 
 | 
  [* 
 | 
    existing := this.IOMPSPlannedOrder( relget ); 
 | 
    updates := construct( IOMPSPlannedOrders ); 
 | 
     
 | 
    // Get periods within the planning horizon 
 | 
    end := macroplan.LastPlanningPeriod().End(); 
 | 
    if( macroplan.GlobalParameters_MP().ExportHorizon().IsFinite() ) 
 | 
    { 
 | 
      end := macroplan.StartOfPlanning() + macroplan.GlobalParameters_MP().ExportHorizon(); 
 | 
    } 
 | 
     
 | 
    periods := selectset( macroplan, PlanningPeriod, pp, pp.IsInPeriod( macroplan.StartOfPlanning(), end ) ); 
 | 
    routings := selectset( macroplan, Routing, r, r.IsEnabled() ); 
 | 
     
 | 
    // Group by Period, RoutingID 
 | 
    traverse( periods, Elements, p ) 
 | 
    { 
 | 
      traverse( routings, Elements.LastStep, ls ) 
 | 
      { 
 | 
        qty := sum( ls, Operation.PeriodTaskOperation, pto, pto.Quantity() > 0.0 and pto.UnitPeriod().Period_MP() = p, pto.Quantity() ); 
 | 
         
 | 
        if( qty > 0.0 ) 
 | 
        { 
 | 
          ioplannedorder := IOMPSPlannedOrder::Create( this, ls.RoutingID(), p.End(), mpsplanid, qty, p.Start(), p.End() ); 
 | 
         
 | 
          updates.Add( ioplannedorder ); 
 | 
        } 
 | 
      } 
 | 
    } 
 | 
     
 | 
    // Get the set of old PlannedOrder to be deleted 
 | 
    tobedeleteset := existing.Difference( updates ); 
 | 
     
 | 
    traverse( tobedeleteset, Elements, ele ) 
 | 
    { 
 | 
      ele.Delete(); 
 | 
    } 
 | 
  *] 
 | 
  InterfaceProperties { Accessibility: 'Module' } 
 | 
} 
 |