public void UpdateSendungsanfrageStatus(Sendungsanfrage sa, SendungsanfrageStatusTyp neuerStatus) { Contract.Requires(sa == null); Contract.Requires(sa.SaNr > 0); sa.UpdateStatus(neuerStatus); }
internal void LehneAngebotAb(Sendungsanfrage sa) { Contract.Requires(sa != null); Contract.Requires(sa.Status == SendungsanfrageStatusTyp.Geplant); Contract.Requires(this.transportPlanungservice != null); sa.UpdateStatus(SendungsanfrageStatusTyp.Abgelehnt); this.transportPlanungservice.LöscheTransportpläneAsync(sa.SaNr); }
public void NehmeAngebotAn(Sendungsanfrage sa) { Contract.Requires(sa == null); Contract.Requires(sa.SaNr > 0); if (sa.Status != SendungsanfrageStatusTyp.Geplant) { throw new ArgumentException("Sendungsanfrage kann nicht angenommen werden, da sie sich im Zustand '" + sa.Status.ToString() + "' befindet."); } sa.UpdateStatus(SendungsanfrageStatusTyp.Angenommen); }
public void FühreTransportplanAus(Transportplan gewählterPlan, Sendungsanfrage sa) { Contract.Requires(gewählterPlan != null); Contract.Requires(sa != null); this.auftragServices.UpdateSendungsanfrageStatus(sa.SaNr, SendungsanfrageStatusTyp.InAusfuehrung); gewählterPlan.UpdateStatus(TransportplanStatusTyp.InAusfuehrung); if (this.timeServices.Now > gewählterPlan.AbholungAm) { gewählterPlan.Meldungen.Add(new TransportplanMeldungTyp(this.timeServices.Now, TransportplanMeldungTyp.MeldungTag.AbholzeitUeberschritten, "Ausführung des Plans " + gewählterPlan.TpNr + " unterbrochen, da die Abholzeit " + sa.AbholzeitfensterEnde + " überschritten wurde.")); this.auftragServices.UpdateSendungsanfrageStatus(sa.SaNr, SendungsanfrageStatusTyp.Unterbrochen); return; } // beauftrage alle (Teil-)Transporte und sichere die Frachtauftragsnummer in der Transportaktivität foreach (TransportAktivitaet ta in gewählterPlan.TransportplanSchritte) { ta.Frachtauftrag = unterbeauftragungServices.BeauftrageTransport(ta.FrachtfuehrerRahmenvertrag, ta.PlanStartzeit, ta.PlanEndezeit, ta.VerwendeteKapazitaetTEU, ta.VerwendeteKapazitaetFEU, sa.SaNr); } // lösche alle anderen mit derselben Sendungsanfrage assoziierten alternativen Transportpläne (dies gibt die geplanten Ressourcen frei) List<Transportplan> ltp = this.tp_REPO.SucheZuSendungsanfrage(gewählterPlan.SaNr); ltp.ForEach((plan) => { if (plan.TpNr != gewählterPlan.TpNr) { this.tp_REPO.Delete(plan); } }); }
private void ErzeugeTransportpläneZuSendungsanfrage(Sendungsanfrage sa, TransportplanungJob job) { Contract.Requires(sa != null); List<Frachteinheit> fe = null; fe = ErzeugeFrachteinheitenFür(sa.Sendungspositionen, job); if (job.Abort) { return; } List<List<Transportbeziehung>> p = transportnetzServices.GeneriereAllePfadeVonBis(sa.StartLokation, sa.ZielLokation); if (p.Count == 0) { job.Meldungen.Add(new TransportplanungMeldung( TransportplanungMeldungTag.KeinWegVorhanden, "Kein Weg von " + sa.StartLokation + " bis " + sa.ZielLokation + " vorhanden.")); job.Abort = true; return; } List<Transportplan> ltp = new List<Transportplan>(); foreach (List<Transportbeziehung> pfad in p) { List<TransportplanSchritt> tps = ErzeugePlanFür(pfad, fe, sa.AbholzeitfensterStart, sa.AbholzeitfensterEnde); if (tps != null) { Transportplan tp = new Transportplan(); tp.TransportplanSchritte = tps; tp.Frachteinheiten = fe.Select(_fe => (Frachteinheit)_fe.Clone()).ToList(); tp.SaNr = sa.SaNr; tp.UpdateStatus(TransportplanStatusTyp.Geplant); ltp.Add(tp); } } Contract.Ensures(ltp != null); // Füge die erzeugten Transportpläne dem Repository hinzu ltp.ForEach((tp) => { this.tp_REPO.Save(tp); }); }
public void Save(Sendungsanfrage sa) { persistenceService.Save(sa); }
public long GibZielLokationFuerSendungsanfrage(Sendungsanfrage sa) { Contract.Requires(sa == null); Contract.Requires(sa.SaNr > 0); return sa.ZielLokation; }