2using System.Xml.Serialization;
3using LotSizingDataModel.Core.Common;
4using LotSizingDataModel.Core.PhysicalModel;
13[XmlType(TypeName =
"closedLoopReturnStream")]
20 private int _distributionCenterId;
21 private WarehouseReference _recoveryWarehouse =
23 private double _recoveryYield = 1.0;
41 int distributionCenterId,
42 WarehouseReference recoveryWarehouse,
69 throw new ArgumentOutOfRangeException(
79 [XmlAttribute(
"itemId")]
87 throw new ArgumentOutOfRangeException(
97 [XmlAttribute(
"distributionCenterId")]
100 get => _distributionCenterId;
105 throw new ArgumentOutOfRangeException(
110 ref _distributionCenterId,
115 [XmlElement(
"recoveryWarehouse")]
118 get => _recoveryWarehouse;
121 ref _recoveryWarehouse,
123 new WarehouseReference());
126 [XmlAttribute(
"recoveryYield")]
129 get => _recoveryYield;
132 if (!
double.IsFinite(value) ||
136 throw new ArgumentOutOfRangeException(
139 "Recovery yield must belong to ]0,1].");
148 [XmlElement(
"returnQuantity")]
151 get => _returnQuantity;
159 [XmlElement(
"recoveryCapacity", IsNullable =
true)]
162 get => _recoveryCapacity;
165 ref _recoveryCapacity,
169 [XmlElement(
"collectionUnitCost")]
172 get => _collectionUnitCost;
175 ref _collectionUnitCost,
180 [XmlElement(
"recoveryUnitCost")]
183 get => _recoveryUnitCost;
186 ref _recoveryUnitCost,
191 [XmlElement(
"disposalUnitCost")]
194 get => _disposalUnitCost;
197 ref _disposalUnitCost,
222 RecoveryCapacity.PlanningHorizon ==
232 throw new ArgumentOutOfRangeException(
233 nameof(periodCount));
262 throw new InvalidOperationException(
263 "A closed-loop return stream requires a strictly positive identifier.");
268 throw new InvalidOperationException(
269 "A closed-loop return stream requires a strictly positive item identifier.");
274 throw new InvalidOperationException(
275 "A closed-loop return stream requires a strictly positive distribution-center identifier.");
280 throw new InvalidOperationException(
281 "A closed-loop return stream requires a valid recovery warehouse.");
288 throw new InvalidOperationException(
289 "Recovery yield must belong to ]0,1].");
294 throw new InvalidOperationException(
295 "All closed-loop return-stream time series must use one planning horizon.");
bool HasConsistentPlanningHorizon
ClosedLoopTimeSeriesParameter CollectionUnitCost
ClosedLoopReturnStream(int id, int itemId, int distributionCenterId, WarehouseReference recoveryWarehouse, int planningHorizon)
void ResizeTimeSeries(int periodCount)
WarehouseReference RecoveryWarehouse
ClosedLoopTimeSeriesParameter ReturnQuantity
ClosedLoopTimeSeriesParameter? RecoveryCapacity
ClosedLoopTimeSeriesParameter RecoveryUnitCost
ClosedLoopTimeSeriesParameter DisposalUnitCost
Non-negative period-dependent quantity or unit-cost series used by the closed-loop instance extension...