Exemple #1
0
        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."));
            }
        }