Quintiq file version 2.0
|
#parent: #root
|
StaticMethod Dispatch (
|
Date startDate,
|
Date endDate,
|
const OfflinePlanTable offlinePlan,
|
RecycleBin owner
|
)
|
{
|
TextBody:
|
[*
|
// Akari Sep-4-2024 (created)
|
owner.DispatchShiftSchedulingInformation( relflush );
|
macroPlan := offlinePlan.MacroPlan();
|
now := DateTime::Now();
|
|
shiftPatterns := selectset( macroPlan,ShiftPattern,object,true );
|
shiftPatternIndexTree := NamedValueTree::Create();
|
for( i := 0; i < shiftPatterns.Size(); i++){
|
shiftPattern := shiftPatterns.Element( i );
|
shiftPatternHandle := shiftPatternIndexTree.GetHandle( shiftPattern.Name() );
|
shiftPatternIndexTree.Root().AddChild( shiftPatternHandle,i );
|
}
|
|
units := selectset( macroPlan,Unit,object, true );
|
unitIndexTree := NamedValueTree::Create();
|
for( i := 0; i < units.Size(); i++){
|
unit := units.Element( i );
|
unitHandle := unitIndexTree.GetHandle( unit.Name() );
|
unitIndexTree.Root().AddChild( unitHandle,i );
|
}
|
|
traverse( offlinePlan,OfflinePlanRow,row ){
|
productID := row.ProductID();
|
productLine := row.ProductionLine();
|
factory := constnull( Unit );
|
{
|
unitHandle := unitIndexTree.GetHandle( productLine );
|
unitIndex := guard( unitIndexTree.Root().Child( unitHandle ), null( NamedValue ));
|
if( not isnull( unitIndex )){
|
unit := units.Element( unitIndex.GetValueAsNumber() );
|
temp1 := unit;
|
temp2 := unit.Parent();
|
while( not isnull( temp1.Parent())){
|
temp2 := temp1;
|
temp1 := temp1.Parent();
|
}
|
factory := temp2;
|
}
|
}
|
traverse( row,OfflinePlanCell,cell ,startDate <= cell.OfflinePlanColumn().ColumnDate() and endDate > cell.OfflinePlanColumn().ColumnDate()){
|
shiftDate := cell.OfflinePlanColumn().ColumnDate();
|
shiftName := cell.Shift();
|
shiftVolume := cell.Quantity();
|
shiftDayTime := constnull( ShiftDayTime );
|
{
|
shiftPatternHandle := shiftPatternIndexTree.GetHandle( shiftName );
|
shiftPatternIndex := guard( shiftPatternIndexTree.Root().Child( shiftPatternHandle ),null( NamedValue ));
|
if( not isnull( shiftPatternIndex )){
|
shiftPattern := shiftPatterns.Element( shiftPatternIndex.GetValueAsNumber() );
|
shiftDayTime := select( shiftPattern,ShiftDayTime,object,true );
|
}
|
}
|
if( shiftVolume <> 0 ){
|
shiftSchedulingInformations := DispatchShiftSchedulingInformation::SplitShifts( owner,shiftName,shiftVolume );
|
|
traverse( shiftSchedulingInformations,Elements,shiftSchedulingInformation ){
|
shiftSchedulingInformation.InterfaceTime( now );
|
shiftSchedulingInformation.VersionName( macroPlan.MDSMacroPlan().Description() );
|
shiftSchedulingInformation.Product( productID );
|
shiftSchedulingInformation.ProductLine( productLine );
|
shiftSchedulingInformation.ShiftDate( shiftDate );
|
// shiftSchedulingInformation.InterfaceTime( now );
|
// shiftSchedulingInformation.InterfaceTime( now );
|
// shiftSchedulingInformation.InterfaceTime( now );
|
// shiftSchedulingInformation.InterfaceTime( now );
|
|
|
if( not isnull( shiftDayTime )){
|
shiftSchedulingInformation.ShiftStartDate( shiftDayTime.StartDateTime() );
|
shiftSchedulingInformation.ShiftEndDate( shiftDayTime.EndDateTIme() );
|
}
|
if( not isnull( factory )){
|
shiftSchedulingInformation.FactoryName( factory.Name() );
|
}
|
}
|
}
|
}
|
}
|
*]
|
}
|