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;
61 earliest_next = i->getDates().getEnd();
64 procurements.push_back(&*i);
74 if (data->constrainedPlanning)
86 double produced = 0.0;
87 double consumed = 0.0;
88 double current_inventory = 0.0;
89 const FlowPlan* current_flowplan = NULL;
91 latest_next != Date::infiniteFuture || cur != b->
getFlowPlans().
end(); )
96 current_date = latest_next;
97 current_flowplan = NULL;
99 else if (earliest_next && earliest_next < cur->getDate())
102 current_date = earliest_next;
103 current_flowplan = NULL;
108 if (current_date && current_date >= cur->getDate())
115 current_date = cur->getDate();
116 bool noConsumers =
true;
119 if (cur->getType() != 1)
124 current_flowplan =
static_cast<const FlowPlan*
>(&*(cur++));
134 while (cur != b->
getFlowPlans().
end() && cur->getDate() == current_date);
136 if (noConsumers)
continue;
141 current_inventory = produced - consumed;
144 if (current_date < earliest_next)
151 && data->constrainedPlanning)
160 && current_date < latest_next)
162 if (current_date == earliest_next) earliest_next = Date::infinitePast;
168 if (current_date == earliest_next
171 for (
int cnt=indexProcurements;
175 double origqty = procurements[cnt]->getQuantity();
176 procurements[cnt]->setQuantity(
177 procurements[cnt]->getQuantity()
179 produced += procurements[cnt]->getQuantity() - origqty;
180 current_inventory = produced - consumed;
186 && data->constrainedPlanning)
193 earliest_next = Date::infinitePast;
207 if (indexProcurements >= countProcurements)
221 else if (procurements[indexProcurements]->getDates().getEnd() == current_date
222 && procurements[indexProcurements]->getQuantity() == order_qty)
225 produced += order_qty;
233 produced += procurements[indexProcurements]->getQuantity();
234 order_qty -= procurements[indexProcurements]->getQuantity();
246 current_inventory = produced - consumed;
251 latest_next = Date::infiniteFuture;
259 while (indexProcurements < countProcurements)
274 && cur->getOnhand() < shortage)
276 shortage = cur->getOnhand();
278 if (startdate == Date::infinitePast) startdate = cur->getDate();
285 if (data->logConstraints)
292 if (data->constrainedPlanning)