public void Delete(Frachteinheit frae) { Contract.Requires(frae != null); Contract.Requires(frae.FraeNr > 0); persistenceService.Delete(frae); }
public virtual Frachteinheit ToEntity() { Frachteinheit fe = new Frachteinheit(); fe.FraeNr = this.FraeNr; fe.FraeTyp = this.FraeTyp; fe.Sendungspositionen = this.Sendungspositionen.Select(item => item).ToList(); return fe; }
/// <summary> /// Erzeugt Frachteinheiten (TEU, FEU) für Sendungspositionen. /// </summary> /// <pre>sps.Count > 0</pre> private List<Frachteinheit> ErzeugeFrachteinheitenFür(IList<Sendungsposition> sps, TransportplanungJob job) { Contract.Requires(sps.Count > 0); List<Frachteinheit> lfe = new List<Frachteinheit>(); // TODO: besserer Algorithmus nötig; Volumen der Fracht wird hier nicht beachtet, sondern nur das Gewicht. decimal restKapazität = 0m; Frachteinheit fe = null; foreach (Sendungsposition sp in sps) { if (sp.Bruttogewicht > FEU.MAXZULADUNG_TONS) { // Ware zu schwer; kann nicht transportiert werden. job.Meldungen.Add(new TransportplanungMeldung( TransportplanungMeldungTag.FrachteinheitenBildungNichtMöglich, "Das Bruttogewicht der Sendungsposition " + sp.SendungspositionsNr + " ist zu hoch.")); return new List<Frachteinheit>(); } // Falls noch Restkapazität vorhanden und nicht die erste zu erstellende Frachteinheit if (restKapazität - sp.Bruttogewicht < 0 && fe != null) { lfe.Add(fe); fe = null; } if (fe == null) { // Neue Frachteinheit anlegen, Typ (TEU, FEU) ist abhängig von Gewicht der Sendungsposition if (sp.Bruttogewicht > TEU.MAXZULADUNG_TONS) { fe = new Frachteinheit(FrachteinheitTyp.FEU); restKapazität = FEU.MAXZULADUNG_TONS; } else { fe = new Frachteinheit(FrachteinheitTyp.TEU); restKapazität = TEU.MAXZULADUNG_TONS; } } fe.Sendungspositionen.Add(sp.SendungspositionsNr); restKapazität = restKapazität - sp.Bruttogewicht; } // evtl. letzte erstellte Frachteinheit noch hinzunehmen if (fe.Sendungspositionen.Count > 0) { lfe.Add(fe); } Contract.Ensures(lfe.Count > 0); return lfe; }