Ich habe mir einmal ein paar Gedanken über den Verkauf gemacht. Eigentlich können wir das Datenmodell aus der DB einfach übernehmen. Um den Warenkorb mit Merchandising abzubilden brauchen wir nur ein paar kleine Änderungen:

- Eine Überklasse für Transaktionen und gekaufte Merchandising Artikel (Bestellung?, Bestellposition?) die im Warenkorb dargestellt wird. Die Klasse stellt die Schnittstellen zur Verfügung damit die Daten in der Liste dargestellt werden können. Die Funktionen für find, kaufen und aus dem Warenkorb entfernen werden dann einfach in der Businessschicht je nach Typ der Klasse implementiert. Ich kümmere mich am Freitag Abend/Samstag um die Überklasse und die Implementierung für die Transaktionen (bestellten Tickets).
- Es gibt einen neuen Status für die Transaktionen im Warenkorb: WARENKORB. Alle Transaktionen mit diesem Status werden im Warenkorb angezeigt. Im Verkauf werden nur die verkauften Tickets angezeigt, Merchandising wird nicht angezeigt und kann auch nicht storniert werden.
- Der Status STORNO ist meiner Meinung nach unnötig. Ich werde ihn in weiterer Folge löschen. Das Problem ist folgendes: In der Platzansicht sollten alle Plätze angezeigt werden die keine Transaktion_id haben. Wenn ich nun eine Transaktion storniere besteht die Verbindung zu den Plätzen weiter und diese können nicht wieder gebucht werden. Um dieses Problem zu verhindern muss ich die Transaktion_id bei den Plätzen sowieso wieder null setzen. Sobald diese Zuordnung weg ist, ist die Transaktion aber eigentlich nichts mehr wert und ich kann sie sowieso löschen. Die anderen Stati bleiben aber: RESERVIERUNG (reserviert), BUCHUNG (gekauft) und WARENKORB (neu, siehe oben).

Die einzelnen Schritte unserer Applikation sind also folgende:
- Reservieren eines Tickets aus der Aufführung: Anlegen einer neuen Transaktion mit dem Status BUCHUNG und einem Kunden. Update des Feld Transaktion der ausgewählten Plätze
- Kaufen (in den Warenkorb legen) eines Tickets aus der Aufführung: Anlegen einer neuen Transaktion mit dem Status WARENKORB und einem Kunden. Update des Feld Transaktion der ausgewählten Plätze
- Kaufen (in den Warenkorb legen) eines Reservierten Tickets: Update des Status der Transaktion von RESERVIERT auf WARENKORB
- Kaufen eines Tickets aus dem Warenkorb: Update des Status der Transaktion von WARENKORB auf BUCHUNG
- Beim stornieren (egal ob einer Reservierung, aus dem Warenkorb entfernen oder einer verkauften Karte): Löschend er Transaktion und eine Update über alle Plätze um die Transaktion_id wieder null zu setzen und die Plätze damit freizugeben.

Damit sollte der gesamte Workflow für den Kartenverkauf abgedeckt sein. Für den verkauf von Merchandising müssen vielleicht noch ein paar kleine Anpassungen vorgenommen werden, für diese sollten wir aber nach dem MR weiterschauen.

Alle einverstanden?