public void Abschliessen() { BestellungSpecs.NichtAbgeschlossen .And(Specs.Existiert) .ThrowDomainErrorIfNotStatisfied(this); ArtikelSpecs.Zugeordnet .And(ArtikelSpecs.Status(ArtikelStatus.Offen)) .ForAll() .ThrowDomainErrorIfNotStatisfied(this.Artikel); var zugeordneteArtikel = (from artikel in this.Artikel group artikel by artikel.Benutzer into artikelNachBenutzer select artikelNachBenutzer).ToArray(); foreach (var artikelNachBenutzer in zugeordneteArtikel) { var beschreibung = $"Bestellung bei {this.state.Lieferdienst}"; var betrag = artikelNachBenutzer.Sum(a => a.Betrag); var datum = this.state.Datum; var e = new BezahlungAngefordert(artikelNachBenutzer.Key, beschreibung, betrag, datum); this.Emit(e); } if (!zugeordneteArtikel.Any()) { this.Emit(new BestellungAbgeschlossen()); } }
public void Apply(BezahlungAngefordert e) { this.UpdateArtikel(e.Benutzer, a => a.Status = ArtikelStatus.BezahlungAngefordert); }