Quintiq file version 2.0
|
#parent: #root
|
MethodOverride GetAnchorPISPIPs (
|
LibOpt_Scope scope,
|
RunContextForCapacityPlanning runcontext,
|
RunContextMeta runcontextmeta
|
) as owning ProductInStockingPointInPeriodPlannings
|
{
|
TextBody:
|
[*
|
mp := runcontext.FirstPeriod_MP().MacroPlan();
|
|
start := runcontext.FirstPeriod_MP().Start();
|
end := runcontext.LastPeriod_MP().Start();
|
|
randomproduct := minselect( mp,
|
Product_MP,
|
p,
|
p.IsInOptimizerPuzzle()
|
and p.IsLeaf()
|
and p.ProductInStockingPoint_MP( relsize ) > 0,
|
Real::Random() );
|
randompisp := minselect( randomproduct,
|
ProductInStockingPoint_MP,
|
pisp,
|
pisp.IsInOptimizerPuzzle()
|
and pisp.IsLeaf()
|
and pisp.ProductInStockingPointInPeriodPlanning(relsize ) > 0, Real::Random() );
|
candidates := selectset( randompisp,
|
ProductInStockingPointInPeriodPlanning.astype( ProductInStockingPointInPeriodPlanningLeaf ),
|
p,
|
start <= p.Start()
|
and p.Start() <= end
|
);
|
|
if ( candidates.Size() = 0 ) // in very exceptional case above faster selection can lead to randompisp without leaf pispips. Next is failsafe
|
{
|
candidates := selectset( mp,
|
Product_MP.ProductInStockingPoint_MP.ProductInStockingPointInPeriodPlanning.astype( ProductInStockingPointInPeriodPlanningLeaf ),
|
p,
|
p.ProductInStockingPoint_MP().IsInOptimizerPuzzle()
|
and start <= p.Start()
|
and p.Start() <= end );
|
}
|
anchor := construct( ProductInStockingPointInPeriodPlanningLeafs );
|
anchor.Add( candidates.Element( Number::Random( 0, candidates.Size()-1) ) );
|
this.SetDescriptionAnchor( anchor );
|
return &anchor;
|
*]
|
}
|