Quintiq file version 2.0
|
#parent: #root
|
StaticMethod CreateWithProductInTrips (
|
ProductInStockingPointInPeriodPlannings pispips,
|
LaneLeg laneleg
|
) as Trip
|
{
|
Description: 'Given multiple PISPIP, create trip with product in trip for every PISPIP.'
|
TextBody:
|
[*
|
// desmondt Jun-7-2015 (created)
|
// Do not select existing trips, will retain all existing and create new trips.
|
trips := construct( Trips );
|
newtrip := null( Trip );
|
// To get the number of stocking points inorder to make sure all the selected instances are planned.
|
nrofsp := counter( pispips, Elements.StockingPointInPeriod.StockingPoint_MP, sp, true );
|
|
for( x := 0; x < nrofsp; x++ )
|
{
|
// Sort by decending UnfulfilledQuantity
|
sortedpispips := selectsortedset( pispips, Elements, e, true, -e.GetUnfulfilledQuantity() );
|
|
traverse( sortedpispips, Elements, pispip )
|
{
|
if( isnull( laneleg ) )
|
{
|
// Select a lane with least lead time
|
laneleg := minselect( pispip, ProductInStockingPoint_MP.LaneLegOutput.LaneLeg, ll,
|
ll.GetIsEnabled(),
|
ll.LeadTime() );
|
}
|
// Look for existing trip that can transport the product in sp in period
|
trip := select( trips, Elements, e,
|
e.LaneLeg() = laneleg,
|
e.Arrival() = pispip.Period_MP().End() );
|
|
if( not isnull( trip ) )
|
{
|
suggestedqty := trip.GetSuggestedQuantity( pispip );
|
|
// If there is already an existing trip and no product in it, add product in trip.
|
pit := trip.AddProduct( pispip,
|
0.0,
|
true );
|
|
// Avoid replacing quantity with 0, suggested quantity will be 0 on second loop if it was fulfilled in the first loop
|
pit.Update( maxvalue( suggestedqty, pit.Quantity() ), true );
|
}
|
else
|
{
|
// Create new trip with product in trip if there is no existing trip
|
newtrip := Trip::CreateWithProductInTrip( laneleg, pispip );
|
trips.Add( newtrip );
|
}
|
}
|
}
|
|
return newtrip;
|
*]
|
}
|