Quintiq file version 2.0 
 | 
#parent: #root 
 | 
StaticMethod Dispatch ( 
 | 
  const MacroPlan macroPlan, 
 | 
  Archive owner, 
 | 
  String versionFlag 
 | 
) 
 | 
{ 
 | 
  TextBody: 
 | 
  [* 
 | 
    // Akari Aug-21-2024 (created) 
 | 
    // owner.DispatchShiftPlan( relflush ); 
 | 
    // owner.RB_DispatchShiftPlanBroker().Source().FlatQuery( "truncate table A_DispatchShiftPlan" ); 
 | 
     
 | 
    dispatchShiftPlans := selectset( owner,DispatchShiftPlan,dispatchShiftPlan,true ); 
 | 
    dispatchShiftPlanIndexTree := NamedValueTree::Create(); 
 | 
    for( i := 0 ; i < dispatchShiftPlans.Size() ; i++){ 
 | 
      dispatchShiftPlan := dispatchShiftPlans.Element( i ); 
 | 
      dispatchShiftPlanHandle := dispatchShiftPlanIndexTree.GetHandle( dispatchShiftPlan.FactoryName() + dispatchShiftPlan.ProductLine() + dispatchShiftPlan.ShiftDate().AsQUILL() ); 
 | 
      dispatchShiftPlanIndexTree.Root().AddChild( dispatchShiftPlanHandle,i ); 
 | 
    } 
 | 
     
 | 
    now := DateTime::Now(); 
 | 
    macroPlanName := macroPlan.MDSMacroPlan().Description(); 
 | 
    traverse( macroPlan,Unit.UnitPeriod.astype( UnitPeriodTime ).ShiftPlan,shiftPlan ,shiftPlan.UnitPeriodTime().Period_MP().StartDate() >= macroPlan.StartOfPlanning().Date()){ 
 | 
       factory := shiftPlan.UnitPeriodTime().Unit(); 
 | 
       while( factory.HasParent() ){ 
 | 
         temp1 := factory; 
 | 
         factory := factory.Parent(); 
 | 
         if( not factory.HasParent() ){ 
 | 
           factory := temp1; 
 | 
         } 
 | 
       } 
 | 
       productLine :=  shiftPlan.UnitPeriodTime().Unit().ID(); 
 | 
       shiftDate := shiftPlan.UnitPeriodTime().Period_MP().StartDate(); 
 | 
       factoryName := factory.ID(); 
 | 
        
 | 
       dispatchShiftPlanHandle := dispatchShiftPlanIndexTree.GetHandle( factoryName + productLine + shiftDate.AsQUILL() ); 
 | 
       dispatchShiftPlanIndex := guard( dispatchShiftPlanIndexTree.Root().Child( dispatchShiftPlanHandle ),null( NamedValue )); 
 | 
       if( not isnull( dispatchShiftPlanIndex )){ 
 | 
         dispatchShiftPlan := dispatchShiftPlans.Element( dispatchShiftPlanIndex.GetValueAsNumber() ); 
 | 
         dispatchShiftPlan.Tips( shiftPlan.Remark() ); 
 | 
         dispatchShiftPlan.VersionName( macroPlanName ); 
 | 
         dispatchShiftPlan.VersionFlag( versionFlag ); 
 | 
         dispatchShiftPlan.InterfaceTime( now ); 
 | 
       }else{ 
 | 
         owner.DispatchShiftPlan( relnew,ID := OS:: GenerateGUIDAsString(), 
 | 
                                  ProductLine := productLine, 
 | 
                                  FactoryName := factory.ID(), 
 | 
                                   
 | 
                                  ShiftDate := shiftDate, 
 | 
                                  Tips := shiftPlan.Remark(), 
 | 
                                  VersionName := macroPlanName, 
 | 
                                  VersionFlag := versionFlag, 
 | 
                                  InterfaceTime := now ); 
 | 
       } 
 | 
    } 
 | 
     
 | 
    // owner.RB_DispatchShiftPlanBroker().AsyncExecute(); 
 | 
  *] 
 | 
} 
 |