Quintiq file version 2.0
|
#parent: #root
|
Method LimitSuggestedQuantityToAvailableCapacity (
|
Real quantity,
|
Boolean usecurrentcapacity
|
) declarative remote as Real
|
{
|
Description: 'Only limit the suggested quantity to remaining available capacity'
|
TextBody:
|
[*
|
// soh yee Jun-25-2013 (created)
|
|
up := this.UnitPeriod();
|
value := quantity;
|
|
// Passed in quantity, convert to quantity to process as unit capacity is calculated based on quantity to process setting.
|
// Only limit the suggested quantity to remaining capacity.
|
if( not up.IsPlannedInfinite() )
|
{
|
ontype( up )
|
{
|
UnitPeriodTimeBase as upt:
|
{
|
freecapacity := ifexpr( usecurrentcapacity, upt.FreeCapacity() , upt.TotalAvailableCapacity() ) * this.RequiredCapacity();
|
value := freecapacity.HoursAsReal();
|
}
|
UnitPeriodQuantityBase as upq:
|
{
|
value := ifexpr( usecurrentcapacity, upq.FreeCapacity(), upq.TotalAvailableCapacity() );
|
}
|
}
|
|
// Find the max quantity allowed by taking lot size into consideration.
|
// E.g., if available capacity = 1000, lot size = 30, process max quantity = 3000, the actual max quantity is 990. If we pass in 1000 to the next method,
|
// it will round to 1020 instead of 990.
|
if( this.Process_MP().HasLotSize() )
|
{
|
lotsize := this.Process_MP().LotSize();
|
value := floor( value / lotsize ) * lotsize;
|
}
|
quantityout := guard( value / this.Process_MP().QuantityToProcessFactor(), value ); // Convert the quantity to process back to quantity out again.
|
value := minvalue( quantity, quantityout ); // Take the min value between available capacity and unfulfilled quantity, in quantity out.
|
}
|
|
return value;
|
*]
|
}
|