コード例 #1
0
        public void Delete(Frachteinheit frae)
        {
            Contract.Requires(frae != null);
            Contract.Requires(frae.FraeNr > 0);

            persistenceService.Delete(frae);
        }
コード例 #2
0
 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;
        }