2using System.Collections.Generic;
4using System.Xml.Serialization;
5using LotSizingDataModel.Core.Common;
6using LotSizingDataModel.Core.PhysicalModel;
11[XmlType(TypeName =
"workCenterSchedulingDecision")]
16 private WorkCenterReference _workCenter =
new();
17 private int _planningHorizon;
24 WorkCenterReference workCenter,
28 throw new ArgumentNullException(nameof(workCenter));
32 [XmlElement(
"workCenter")]
38 ArgumentNullException.ThrowIfNull(value);
39 SetProperty(ref _workCenter, value);
43 [XmlAttribute(
"planningHorizon")]
46 get => _planningHorizon;
50 [XmlArray(
"microPeriods")]
51 [XmlArrayItem(
"microPeriodDecision")]
52 public List<ProductionMicroPeriodDecision>
MicroPeriods {
get; } =
new();
62 decision.MicroPeriod.MacroPeriod,
63 decision.MicroPeriod.MicroPeriodIndex
71 WorkCenter.PlantId > 0 &&
72 WorkCenter.WorkCenterId > 0 &&
75 decision.IsInternallyValid &&
79 public IReadOnlyList<ProductionMicroPeriodDecision>
83 throw new ArgumentOutOfRangeException(
86 "The macro period is outside the scheduling horizon.");
90 decision.MicroPeriod.MacroPeriod == macroPeriod)
92 decision.MicroPeriod.MicroPeriodIndex)
99 ArgumentNullException.ThrowIfNull(decision);
102 throw new ArgumentException(
103 "The micro-period decision is not internally valid.",
107 throw new ArgumentException(
108 "The micro-period macro index exceeds the scheduling horizon.",
112 existing.RefersToSameMicroPeriod(decision)))
113 throw new InvalidOperationException(
114 $
"A micro-period decision already exists for {decision.MicroPeriod}.");
126 throw new ArgumentOutOfRangeException(
129 "The planning horizon cannot be negative.");
132 ref _planningHorizon,
137 decision.MicroPeriod.MacroPeriod > periodCount);
ProductionMicroPeriodReference MicroPeriod
WorkCenterSchedulingDecision()
void AddMicroPeriodDecision(ProductionMicroPeriodDecision decision)
void ResizeTimeSeries(int periodCount)
IReadOnlyList< ProductionMicroPeriodDecision > GetMicroPeriods(int macroPeriod)
WorkCenterReference WorkCenter
bool HasUniqueMicroPeriodKeys
WorkCenterSchedulingDecision(WorkCenterReference workCenter, int planningHorizon)
List< ProductionMicroPeriodDecision > MicroPeriods
int MicroPeriodDecisionCount