Fixed time operation
Create an operation plan
If lead time constraints are enabled and the operation plan is planned too early
Try resizing the operationplan to fit in the feasible time window
If not feasible
Log the lead time as a constraint for meeting the demand on time
Calculate the earliest date the operation can be completed
Return a promise with quantity 0 and the next ask date computed above
If capacity constraints are enabled
Loop until no capacity overloads are found
Loop over all loadplans
Ask the resource solver to check for overloads
If a capacity constraint is found, the resource solver will move the operation plan to an earlier date or resize it
We then restart the loop over the loadplans
If the operation plan is found to be capacity infeasible
Return a promise with quantity 0
For each consuming flowplans
Ask the flow for the requested quantity on the planned date
If the complete quantity is not feasible
Keep track of the date with extra supply
If the operationplan is not feasible but the next feasible date is earlier than the maximum date
Repeat from the top for the new feasible date
else if any material was not feasible
Try resizing the operationplan to fit in a smaller time window
If successful
Repeat from the top with a smaller quantity
else
Return 0 reply
else
Return positive reply
Time-per operation
The loop is identical to one for the fixed_time operations, since the operation class rather than the solver contains the logic to compute the duration of an operationplan.
Alternate operation
Remaining quantity = Q
Next ask date = infinite future
Loop through all alternate sub operations
If the alternate is not effective on the ask date, skip this alternate
Create top operation plan descriptor
Call Operation->ask(Remaining quantity, D)
If some quantity could be planned along the alternate
Check for material and capacity constraints on the top operation plan
Reduce the remaining quantity
Break out of the loop if the requested quantity is completely planned
Else
If the next ask date of the alternate is less than the current minimum
update the next ask date
If the total quantity planned over all alternates is less than the requested quantity
Repeat the loop over all alternate sub operations, but evaluate only alternates whose effectivity ends before the ask date
Return the planned quantity and the next ask date
Routing operation
Create the top operation plan
Check the flowplans and loadplans of the top operation plan
Initialize Q2 to Q and D2 to D
For all steps of the routing
Call the operation solver with arguments (Q2,D2)
Update Q2 if planned quantity < Q2
Update D2 with the operation time