40 if (userexit_buffer) userexit_buffer.
call(b,
PythonObject(data->constrainedPlanning));
53 int countProcurements = 0;
54 int indexProcurements = -1;
56 Date latest_next = Date::infiniteFuture;
57 vector<OperationPlan*> procurements(30);
61 earliest_next = i->getDates().getEnd();
63 procurements[countProcurements++] = &*i;
71 if (data->constrainedPlanning)
83 double produced = 0.0;
84 double consumed = 0.0;
85 double current_inventory = 0.0;
86 const FlowPlan* current_flowplan = NULL;
88 latest_next != Date::infiniteFuture || cur != b->
getFlowPlans().
end(); )
93 current_date = latest_next;
94 current_flowplan = NULL;
96 else if (earliest_next && earliest_next < cur->getDate())
99 current_date = earliest_next;
100 current_flowplan = NULL;
105 if (current_date && current_date >= cur->getDate())
112 current_date = cur->getDate();
113 bool noConsumers =
true;
116 if (cur->getType() != 1)
121 current_flowplan =
static_cast<const FlowPlan*
>(&*(cur++));
131 while (cur != b->
getFlowPlans().
end() && cur->getDate() == current_date);
133 if (noConsumers)
continue;
138 current_inventory = produced - consumed;
141 if (current_date < earliest_next)
148 && data->constrainedPlanning)
157 && current_date < latest_next)
159 if (current_date == earliest_next) earliest_next = Date::infinitePast;
165 if (current_date == earliest_next
168 for (
int cnt=indexProcurements;
172 double origqty = procurements[cnt]->getQuantity();
173 procurements[cnt]->setQuantity(
174 procurements[cnt]->getQuantity()
176 produced += procurements[cnt]->getQuantity() - origqty;
177 current_inventory = produced - consumed;
183 && data->constrainedPlanning)
190 earliest_next = Date::infinitePast;
204 if (indexProcurements >= countProcurements)
217 else if (procurements[indexProcurements]->getDates().getEnd() == current_date
218 && procurements[indexProcurements]->getQuantity() == order_qty)
221 produced += order_qty;
229 produced += procurements[indexProcurements]->getQuantity();
230 order_qty -= procurements[indexProcurements]->getQuantity();
242 current_inventory = produced - consumed;
247 latest_next = Date::infiniteFuture;
255 while (indexProcurements < countProcurements)
270 && cur->getOnhand() < shortage)
272 shortage = cur->getOnhand();
274 if (startdate == Date::infinitePast) startdate = cur->getDate();
281 if (data->logConstraints)
288 if (data->constrainedPlanning)