Quintiq file version 2.0
|
#parent: #root
|
Method AddClosureForSPIP (
|
TransformerSmartPlan tranformersmartplan,
|
LibOpt_Scope scope,
|
RunContextForCapacityPlanning runcontext
|
)
|
{
|
TextBody:
|
[*
|
// >> begin compute relation to last SPIP in scope
|
traverse( runcontext.FirstPeriod_MP().MacroPlan(), StockingPoint_MP, sp )
|
{
|
sp.MetaOptimizerLastSPIP( relflush );
|
}
|
|
stockingpoints := construct( StockingPoint_MPs );
|
traverse( scope.GetStockingPointInPeriodInOptimizerRun(), Elements, spip, not spip.StockingPoint_MP().IsPlannedInfinite() )
|
{
|
sp := spip.StockingPoint_MP();
|
start := spip.Start();
|
if ( isnull( sp.MetaOptimizerLastSPIP() ) )
|
{
|
stockingpoints.Add( sp );
|
sp.MetaOptimizerLastSPIP( relset, spip );
|
}
|
else if ( start > sp.MetaOptimizerLastSPIP().Start() )
|
{
|
sp.MetaOptimizerLastSPIP( relset, spip );
|
}
|
}
|
// << end compute relation to last SPIP in scope
|
|
traverse( stockingpoints, Elements.MetaOptimizerLastSPIP, spip )
|
{
|
traverse( spip,
|
ProductInStockingPointInPeriod.astype( ProductInStockingPointInPeriodPlanning ),
|
pispip,
|
scope.Contains( pispip.ProductInStockingPoint_MP().PISPInOptimizerRun() )
|
and ( isnull( pispip.PISPIPInOptimizerRun() )
|
or not scope.Contains( pispip.PISPIPInOptimizerRun() ) ) ) // those pispips adjacent to spip not in scope for which we know there is some other pispip in scope. Since spip is latest period we also know
|
{ // this pispip has period < spip
|
pispiptoadd := pispip;
|
repeat // keep adding and go back period until we hit the pispip in scope
|
{
|
scope.Add( pispiptoadd );
|
pispiptoadd := pispiptoadd.PreviousPlanningPISPIP();
|
}
|
until ( scope.Contains( pispiptoadd.PISPIPInOptimizerRun() ) )
|
}
|
}
|
*]
|
InterfaceProperties { Accessibility: 'Module' }
|
}
|