public void Hinzufuegen_Position(ArtikelId artikel, int menge, decimal preis) { var bonId = _geraet.Aktueller_oder_neuer_Bon(); var cmd = new Position_zu_Bon_hinzufuegen(bonId, PositionId.Neu, artikel, 1, 0m); _verkauf.Execute(cmd); }
private void Handle(Position_zu_Bon_hinzufuegen cmd, UnitOfWork uow) { if (Bon.Status.Project(uow.History(cmd.Bon)) == BonStatus.Unbekannt) { uow.AddEvent(cmd.Bon, new Bon_wurde_eroeffnet(cmd.Bon)); } if (Bon.Status.Project(uow.History(cmd.Bon)) == BonStatus.Offen) { uow.AddEvent(cmd.Bon, new Position_wurde_zu_Bon_hinzugefuegt(cmd.Bon, cmd.Position, cmd.Artikel, cmd.Menge, cmd.Betrag)); } else { // Fachliche Fehler: die Exception "Error" bricht die Transaktion ab, enthält ein Event, dass ggf. statt des Transaktionsewrgebnisses veröffentlicht werden kann (nicht implementiert, s. CommandHandler). // Falls der Fehler nicht fatal ist, kann auch das Event einfach so zur Uow hinzugefügt werden. throw new Error(new Bon_konnte_nicht_bearbeitet_werden(cmd.Bon, $"Die Position kann nicht hinzugefügt werden, da der Bon im Status '{Bon.Status.Project(uow.History(cmd.Bon))}' ist.")); } }