@startuml !pragma layout smetana title UML-Klassendiagramm Programmoberflaeche (Gruppe D) skinparam classAttributeIconSize 0 skinparam linetype ortho package "gui" { class HauptFenster { - aktuellesModul : String - wechsleZu(String) } interface ModulPanel { + aktualisiere() + hatUngespeicherteAenderungen() : boolean } class KundenPanel class ProduktPanel class DokumentListenPanel class RechnungsWizardDialog class StammdatenController { + kundenListe(String) : List + produkteListe(String) : List } class DokumentListenController { + gefiltert(DokumentStatus) : List + aktionenFuer(Dokument) : BelegAktionen + storniere(String, boolean) : Meldung } class RechnungsWizardController { + weiter() : boolean + zurueck() + erzeugeZusammenfassung() : String + speichern() : Meldung } class RechnungsWizardModel { - aktuellerSchritt : WizardSchritt - kundenNr : String - positionen : List - rechnungsdatum : LocalDate - zahlungsziel : LocalDate } enum WizardSchritt { KUNDE_WAEHLEN POSITIONEN_ERFASSEN DATEN_BESTAETIGEN ZUSAMMENFASSUNG SPEICHERN } class Meldung { - typ : MeldungsTyp - feldname : String - text : String } class BelegAktionen class PositionsEingabe } package "Schnittstellen Gruppen A-C" { interface DokumentService interface KundenService interface ProduktService } package "gemeinsam" { class EreignisBus } ModulPanel <|.. KundenPanel ModulPanel <|.. ProduktPanel ModulPanel <|.. DokumentListenPanel HauptFenster *-- KundenPanel HauptFenster *-- ProduktPanel HauptFenster *-- DokumentListenPanel KundenPanel --> StammdatenController ProduktPanel --> StammdatenController DokumentListenPanel --> DokumentListenController RechnungsWizardDialog --> RechnungsWizardController StammdatenController --> KundenService StammdatenController --> ProduktService DokumentListenController --> DokumentService RechnungsWizardController --> DokumentService RechnungsWizardController --> KundenService RechnungsWizardController --> ProduktService RechnungsWizardController *-- RechnungsWizardModel RechnungsWizardModel --> WizardSchritt RechnungsWizardModel *-- PositionsEingabe RechnungsWizardController --> Meldung DokumentListenController --> BelegAktionen KundenPanel ..> EreignisBus : aktualisiert ProduktPanel ..> EreignisBus : aktualisiert DokumentListenPanel ..> EreignisBus : aktualisiert @enduml