Quintiq file version 2.0
|
#parent: #root
|
Method RunSmartPlanForPeriodTask (
|
ProductInStockingPointInPeriodPlanning smartplanpispip,
|
Real userqty,
|
Units units,
|
ScenarioManager scenariomanager,
|
Process_MP process
|
)
|
{
|
Description: 'For smart plan on specific routing / leg. Will call the RunSmalPlan with some default parameters'
|
TextBody:
|
[*
|
//Pre-set smart plan parameters
|
issmartplanforperiodtask := true;
|
run := this.Optimization().GetLastSmartPlanAlgorithmRun( issmartplanforperiodtask );
|
hastotalsupplyuser := true;
|
newsupplyfromprocess := 0.0;
|
if ( process.istype( Operation ) )
|
{
|
routing := process.astype( Operation ).RoutingStep().Routing();
|
newsupplyfromprocess := sum( smartplanpispip,
|
Supply_MP.astype( NewSupply ),
|
ns,
|
guard( ns.Process_MP().astype( Operation ).RoutingStep().Routing() = routing, false),
|
ns.Quantity() );
|
}
|
else if ( process.istype( LaneLeg ) )
|
{
|
newsupplyfromprocess := sum( smartplanpispip,
|
Supply_MP.astype( NewSupply ),
|
ns,
|
ns.Process_MP() = process,
|
ns.Quantity() )
|
}
|
else
|
{
|
error( 'unsupported type in RunSmartPlanForPeriodTask' );
|
}
|
|
|
|
diff := newsupplyfromprocess - userqty;
|
totalsupplyuser := smartplanpispip.SupplyQuantity() - diff;
|
|
//this flag is to overwrite user value on smart plan pispip level. Smart plan on period task is a level lower.
|
//so we will set this to false here and only choose to reset the "other period task" supplying to the pispip.
|
//say R1,R2 are supply to PISPIP X.
|
//We're setting the period task qty for R1. In this case, R2 is the "other period task"
|
isoverwritemanual := false;
|
isupstreamsmartplan := true;
|
ismiddleoutsmartplan := false;
|
isonlyplanonestepupstream := true;
|
isusingselectedunits := true;
|
|
strategy := AlgorithmRun::GetLastStrategyUsed( this.GlobalParameters_MP(), run, scenariomanager, true, true );
|
periodstart := this.FirstPlanningPeriod();
|
periodend := this.LastPlanningPeriod();
|
AlgorithmRun::GetLastOptimizationHorizon( run, this, periodstart, periodend );
|
|
smartplanpispips := construct( ProductInStockingPointInPeriodPlannings );
|
smartplanpispips.Add( smartplanpispip );
|
|
ProductInStockingPointInPeriod::ResetSuppliesBeforeSmartPlan( smartplanpispips, process );
|
|
this.RunSmartPlan( true /*issmartplan*/,
|
issmartplanforperiodtask,
|
smartplanpispips,
|
hastotalsupplyuser,
|
totalsupplyuser,
|
isupstreamsmartplan,
|
ismiddleoutsmartplan,
|
isonlyplanonestepupstream,
|
strategy,
|
isoverwritemanual,
|
periodstart,
|
periodend,
|
isusingselectedunits,
|
units,
|
process,
|
false ); // not re-using StrategyMacroPlan
|
*]
|
}
|