From a4fc34134196ad199362b790a9a104d8d9eebee1 Mon Sep 17 00:00:00 2001 From: Lucas <3023626@stud.hs-mannheim.de> Date: Wed, 10 Jun 2026 17:22:08 +0200 Subject: [PATCH] Pflichtenheft + Maven Build --- .gitignore | 10 + Pflichtenheft_GruppeA.md | 560 ++++++++++++++++++ Pflichtenheft_GruppeA.pdf | Bin 0 -> 179286 bytes Pflichtenheft_GruppeB.md | 503 ++++++++++++++++ Pflichtenheft_GruppeB.pdf | Bin 0 -> 175129 bytes Pflichtenheft_GruppeC.md | 511 ++++++++++++++++ Pflichtenheft_GruppeC.pdf | Bin 0 -> 175100 bytes Pflichtenheft_GruppeD.md | 541 +++++++++++++++++ Pflichtenheft_GruppeD.pdf | Bin 0 -> 181314 bytes dependency-reduced-pom.xml | 88 +++ mvnw | 21 + mvnw.cmd | 31 + pom.xml | 108 ++++ src/main/java/de/team1/faktura/Main.java | 85 +++ .../de/team1/faktura/dokumente/Angebot.java | 25 + .../dokumente/Auftragsbestaetigung.java | 13 + .../dokumente/BelegnummernGenerator.java | 13 + .../de/team1/faktura/dokumente/Belegtyp.java | 28 + .../de/team1/faktura/dokumente/Dokument.java | 167 ++++++ .../dokumente/DokumentReferenzPruefung.java | 31 + .../faktura/dokumente/DokumentRepository.java | 17 + .../faktura/dokumente/DokumentService.java | 54 ++ .../faktura/dokumente/DokumentStatus.java | 11 + .../faktura/dokumente/Dokumentposition.java | 79 +++ .../EinfacherBelegnummernGenerator.java | 49 ++ .../dokumente/JsonDokumentRepository.java | 74 +++ .../team1/faktura/dokumente/Lieferschein.java | 25 + .../faktura/dokumente/PdfBoxPdfExporter.java | 152 +++++ .../team1/faktura/dokumente/PdfExporter.java | 12 + .../faktura/dokumente/Positionsangabe.java | 9 + .../de/team1/faktura/dokumente/Rechnung.java | 59 ++ .../dokumente/StandardDokumentService.java | 241 ++++++++ .../de/team1/faktura/dokumente/Summen.java | 10 + .../java/de/team1/faktura/gemeinsam/Csv.java | 43 ++ .../faktura/gemeinsam/JsonPersistenz.java | 26 + .../gemeinsam/LoeschAbgelehntException.java | 13 + .../gemeinsam/ValidierungsException.java | 20 + .../de/team1/faktura/gui/BelegAktionen.java | 9 + .../de/team1/faktura/gui/BelegDialog.java | 186 ++++++ .../faktura/gui/DokumentListenController.java | 61 ++ .../faktura/gui/DokumentListenPanel.java | 312 ++++++++++ .../de/team1/faktura/gui/HauptFenster.java | 76 +++ .../de/team1/faktura/gui/KundenPanel.java | 330 +++++++++++ .../java/de/team1/faktura/gui/Meldung.java | 19 + .../de/team1/faktura/gui/MeldungsAnzeige.java | 51 ++ .../de/team1/faktura/gui/MeldungsTyp.java | 9 + .../java/de/team1/faktura/gui/ModulPanel.java | 14 + .../team1/faktura/gui/PositionsEingabe.java | 8 + .../de/team1/faktura/gui/ProduktPanel.java | 351 +++++++++++ .../gui/RechnungsWizardController.java | 170 ++++++ .../faktura/gui/RechnungsWizardDialog.java | 281 +++++++++ .../faktura/gui/RechnungsWizardModel.java | 64 ++ .../faktura/gui/StammdatenController.java | 31 + .../de/team1/faktura/gui/WizardSchritt.java | 12 + .../EinfacherKundennummernGenerator.java | 43 ++ .../faktura/kunden/JsonKundenRepository.java | 92 +++ .../java/de/team1/faktura/kunden/Kunde.java | 113 ++++ .../team1/faktura/kunden/KundenCsvExport.java | 36 ++ .../kunden/KundenReferenzPruefung.java | 11 + .../faktura/kunden/KundenRepository.java | 21 + .../team1/faktura/kunden/KundenService.java | 16 + .../kunden/KundenVerwaltungsService.java | 90 +++ .../kunden/KundennummernGenerator.java | 10 + .../EinfacherProduktnummernGenerator.java | 43 ++ .../produkte/JsonProduktRepository.java | 92 +++ .../de/team1/faktura/produkte/Produkt.java | 92 +++ .../faktura/produkte/ProduktCsvExport.java | 37 ++ .../produkte/ProduktReferenzPruefung.java | 11 + .../faktura/produkte/ProduktRepository.java | 21 + .../faktura/produkte/ProduktService.java | 16 + .../produkte/ProduktVerwaltungsService.java | 105 ++++ .../produkte/ProduktnummernGenerator.java | 10 + .../faktura/dokumente/DokumentzyklusTest.java | 241 ++++++++ .../team1/faktura/dokumente/TestBelege.java | 31 + .../gui/OberflaechenControllerTest.java | 334 +++++++++++ .../faktura/kunden/KundenVerwaltungTest.java | 201 +++++++ .../produkte/ProduktVerwaltungTest.java | 197 ++++++ 77 files changed, 7476 insertions(+) create mode 100644 .gitignore create mode 100644 Pflichtenheft_GruppeA.md create mode 100644 Pflichtenheft_GruppeA.pdf create mode 100644 Pflichtenheft_GruppeB.md create mode 100644 Pflichtenheft_GruppeB.pdf create mode 100644 Pflichtenheft_GruppeC.md create mode 100644 Pflichtenheft_GruppeC.pdf create mode 100644 Pflichtenheft_GruppeD.md create mode 100644 Pflichtenheft_GruppeD.pdf create mode 100644 dependency-reduced-pom.xml create mode 100644 mvnw create mode 100644 mvnw.cmd create mode 100644 pom.xml create mode 100644 src/main/java/de/team1/faktura/Main.java create mode 100644 src/main/java/de/team1/faktura/dokumente/Angebot.java create mode 100644 src/main/java/de/team1/faktura/dokumente/Auftragsbestaetigung.java create mode 100644 src/main/java/de/team1/faktura/dokumente/BelegnummernGenerator.java create mode 100644 src/main/java/de/team1/faktura/dokumente/Belegtyp.java create mode 100644 src/main/java/de/team1/faktura/dokumente/Dokument.java create mode 100644 src/main/java/de/team1/faktura/dokumente/DokumentReferenzPruefung.java create mode 100644 src/main/java/de/team1/faktura/dokumente/DokumentRepository.java create mode 100644 src/main/java/de/team1/faktura/dokumente/DokumentService.java create mode 100644 src/main/java/de/team1/faktura/dokumente/DokumentStatus.java create mode 100644 src/main/java/de/team1/faktura/dokumente/Dokumentposition.java create mode 100644 src/main/java/de/team1/faktura/dokumente/EinfacherBelegnummernGenerator.java create mode 100644 src/main/java/de/team1/faktura/dokumente/JsonDokumentRepository.java create mode 100644 src/main/java/de/team1/faktura/dokumente/Lieferschein.java create mode 100644 src/main/java/de/team1/faktura/dokumente/PdfBoxPdfExporter.java create mode 100644 src/main/java/de/team1/faktura/dokumente/PdfExporter.java create mode 100644 src/main/java/de/team1/faktura/dokumente/Positionsangabe.java create mode 100644 src/main/java/de/team1/faktura/dokumente/Rechnung.java create mode 100644 src/main/java/de/team1/faktura/dokumente/StandardDokumentService.java create mode 100644 src/main/java/de/team1/faktura/dokumente/Summen.java create mode 100644 src/main/java/de/team1/faktura/gemeinsam/Csv.java create mode 100644 src/main/java/de/team1/faktura/gemeinsam/JsonPersistenz.java create mode 100644 src/main/java/de/team1/faktura/gemeinsam/LoeschAbgelehntException.java create mode 100644 src/main/java/de/team1/faktura/gemeinsam/ValidierungsException.java create mode 100644 src/main/java/de/team1/faktura/gui/BelegAktionen.java create mode 100644 src/main/java/de/team1/faktura/gui/BelegDialog.java create mode 100644 src/main/java/de/team1/faktura/gui/DokumentListenController.java create mode 100644 src/main/java/de/team1/faktura/gui/DokumentListenPanel.java create mode 100644 src/main/java/de/team1/faktura/gui/HauptFenster.java create mode 100644 src/main/java/de/team1/faktura/gui/KundenPanel.java create mode 100644 src/main/java/de/team1/faktura/gui/Meldung.java create mode 100644 src/main/java/de/team1/faktura/gui/MeldungsAnzeige.java create mode 100644 src/main/java/de/team1/faktura/gui/MeldungsTyp.java create mode 100644 src/main/java/de/team1/faktura/gui/ModulPanel.java create mode 100644 src/main/java/de/team1/faktura/gui/PositionsEingabe.java create mode 100644 src/main/java/de/team1/faktura/gui/ProduktPanel.java create mode 100644 src/main/java/de/team1/faktura/gui/RechnungsWizardController.java create mode 100644 src/main/java/de/team1/faktura/gui/RechnungsWizardDialog.java create mode 100644 src/main/java/de/team1/faktura/gui/RechnungsWizardModel.java create mode 100644 src/main/java/de/team1/faktura/gui/StammdatenController.java create mode 100644 src/main/java/de/team1/faktura/gui/WizardSchritt.java create mode 100644 src/main/java/de/team1/faktura/kunden/EinfacherKundennummernGenerator.java create mode 100644 src/main/java/de/team1/faktura/kunden/JsonKundenRepository.java create mode 100644 src/main/java/de/team1/faktura/kunden/Kunde.java create mode 100644 src/main/java/de/team1/faktura/kunden/KundenCsvExport.java create mode 100644 src/main/java/de/team1/faktura/kunden/KundenReferenzPruefung.java create mode 100644 src/main/java/de/team1/faktura/kunden/KundenRepository.java create mode 100644 src/main/java/de/team1/faktura/kunden/KundenService.java create mode 100644 src/main/java/de/team1/faktura/kunden/KundenVerwaltungsService.java create mode 100644 src/main/java/de/team1/faktura/kunden/KundennummernGenerator.java create mode 100644 src/main/java/de/team1/faktura/produkte/EinfacherProduktnummernGenerator.java create mode 100644 src/main/java/de/team1/faktura/produkte/JsonProduktRepository.java create mode 100644 src/main/java/de/team1/faktura/produkte/Produkt.java create mode 100644 src/main/java/de/team1/faktura/produkte/ProduktCsvExport.java create mode 100644 src/main/java/de/team1/faktura/produkte/ProduktReferenzPruefung.java create mode 100644 src/main/java/de/team1/faktura/produkte/ProduktRepository.java create mode 100644 src/main/java/de/team1/faktura/produkte/ProduktService.java create mode 100644 src/main/java/de/team1/faktura/produkte/ProduktVerwaltungsService.java create mode 100644 src/main/java/de/team1/faktura/produkte/ProduktnummernGenerator.java create mode 100644 src/test/java/de/team1/faktura/dokumente/DokumentzyklusTest.java create mode 100644 src/test/java/de/team1/faktura/dokumente/TestBelege.java create mode 100644 src/test/java/de/team1/faktura/gui/OberflaechenControllerTest.java create mode 100644 src/test/java/de/team1/faktura/kunden/KundenVerwaltungTest.java create mode 100644 src/test/java/de/team1/faktura/produkte/ProduktVerwaltungTest.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bf61a71 --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +# Maven-Build +target/ + +# Lokale Laufzeitdaten der Anwendung (IF-01, Q-06) +daten/ + +# IDE +.idea/ +.vscode/ +*.iml diff --git a/Pflichtenheft_GruppeA.md b/Pflichtenheft_GruppeA.md new file mode 100644 index 0000000..a078b6a --- /dev/null +++ b/Pflichtenheft_GruppeA.md @@ -0,0 +1,560 @@ +--- +title: "Pflichtenheft" +subtitle: "Desktop-Fakturierungsanwendung — Gruppe A: Prozess / Dokumentenzyklus" +author: + - Team 1 – Gruppe A +version: "1.0" +lang: de-DE +toc: true +toc-depth: 3 +numbersections: false +papersize: a4 +geometry: "margin=3cm" +fontsize: 12pt +linestretch: 1.5 +mainfont: "Times New Roman" +sansfont: "Arial" +monofont: "DejaVu Sans Mono" +header-includes: | + \usepackage{fancyhdr} + \usepackage{lastpage} + \pagestyle{fancy} + \fancyhf{} + \fancyhead[L]{Team 1 – Gruppe A} + \fancyhead[C]{Pflichtenheft} + \fancyhead[R]{Version 1.0} + \fancyfoot[C]{\thepage\ /\ \pageref{LastPage}} + \renewcommand{\headrulewidth}{0.4pt} + \renewcommand{\footrulewidth}{0pt} +--- + +\newpage + ++-------------------------+-------------------------+-------------------------+ +| Autor | Prüfer | Freigebender | ++=========================+=========================+=========================+ +| Strubel, Lucas | Prof. Dr. Marmitt, Gerd | Prof. Dr. Marmitt, Gerd | +| Kaiser, Luca | | | ++-------------------------+-------------------------+-------------------------+ +| Gruppe A (Prozess) | Modulverantwortlicher | Modulverantwortlicher | ++-------------------------+-------------------------+-------------------------+ +| 09.06.2026 | 09.06.2026 | 09.06.2026 | ++-------------------------+-------------------------+-------------------------+ + +**Freigabevermerk:** Dieses Dokument ist nach Prüfung und Freigabe durch den +Modulverantwortlichen verbindliche Spezifikationsgrundlage für die Implementierung +und den Modultest der Komponente *Prozess / Dokumentenzyklus*. + +## Dokumentenhistorie + +| Version | Datum | Autor | Grund der Änderung | +|---------|------------|-----------------------------|---------------------| +| 1.0 | 09.06.2026 | Lucas Strubel, Luca Kaiser | Initiale Erstellung | + +\newpage + +## 1. Einleitung + +### 1.1 Zweck des Dokuments +Dieses Pflichtenheft (System Requirements Specification, SRS) beschreibt aus Sicht des +Auftragnehmers, **wie** die Komponente *Prozess / Dokumentenzyklus* der +Desktop-Fakturierungsanwendung die Anforderungen des Lastenhefts (v1.3) erfüllt. Es +konkretisiert die fachlichen Anforderungen in testbare Systemanforderungen und dient als +direkte Grundlage für Design, Implementierung sowie den Komponenten- bzw. Modultestplan +(Kapitel 10). + +### 1.2 Ziel +Ziel dieses Pflichtenhefts ist die vollständige und testbare Spezifikation der Erzeugung, +Verknüpfung und Statusführung der vier kaufmännischen Belegtypen (Angebot, +Auftragsbestätigung, Lieferschein, Rechnung), der geführten Rechnungserstellung sowie der +Rechnungsstornierung. + +### 1.3 Geltungsbereich +Dieses Dokument gilt für die Komponente **Gruppe A — Prozess / Dokumentenzyklus**. Die +Gesamtanwendung wird arbeitsteilig in vier Komponenten entwickelt; jede Untergruppe pflegt +ein eigenes Pflichtenheft: + +| Gruppe | Komponente | Eigenes Pflichtenheft | +|--------|-------------------------|-----------------------| +| A | Prozess / Dokumentenzyklus | **dieses Dokument** | +| B | Verwaltung von Produkten | separat | +| C | Verwaltung von Kunden | separat | +| D | Programmoberfläche | separat | + +Die Komponente A **nutzt** Kunden (Gruppe C) und Produkte (Gruppe B) lesend über definierte +interne Schnittstellen (Kapitel 6.2) und wird über die Programmoberfläche (Gruppe D) +bedient. Stammdatenpflege (Anlegen/Ändern/Löschen von Kunden und Produkten) ist **nicht** +Gegenstand dieses Dokuments. + +### 1.4 Definitionen und Abkürzungen +Fachbegriffe (Angebot, Auftragsbestätigung, Lieferschein, Rechnung, Dokumentenzyklus, +GoBD, DSGVO, …) sind im Glossar des Lastenhefts (§ 8.1) definiert und gelten unverändert. +Dokumentspezifische Abkürzungen siehe Kapitel 11. + +### 1.5 Referenzen +- Lastenheft „Desktop-Fakturierungsanwendung", Team 1, Version 1.3, 09.06.2026 +- Project Charter, Team 1, Version 1.3, 14.05.2026 +- § 14 UStG — Pflichtangaben einer Rechnung +- GoBD — Grundsätze zur ordnungsmäßigen Führung und Aufbewahrung von Büchern +- DSGVO — EU-Verordnung 2016/679 +- Vorlesungsunterlagen Software Engineering 1 (SoSe 2026), Foliensatz „Lasten- und Pflichtenheft" + +--- + +## 2. Systemüberblick + +### 2.1 Kurzbeschreibung +Die Anwendung ist eine **Einzelplatz-Stand-Alone-Desktop-Anwendung** mit **lokaler +Datenhaltung** (keine Cloud, kein Server). Die Bedienung erfolgt über eine **minimale +grafische Benutzeroberfläche** (Gruppe D), über die die Funktionalität des +Dokumentenzyklus zugänglich gemacht wird. Erzeugte Belege werden lokal als **PDF** +exportiert und können optional gedruckt oder per Standard-E-Mail-Client versendet werden. + +Die Komponente *Prozess / Dokumentenzyklus* stellt die fachliche Kernlogik bereit: +Belegerzeugung, automatische Summen- und Steuerberechnung, Vergabe eindeutiger +Belegnummern, Verknüpfung aufeinanderfolgender Belege, Statusführung und Stornierung. + +### 2.2 Abgrenzung (Was gehört dazu / was nicht) +**Im Umfang dieser Komponente:** + +- Erstellen von Angebot, Auftragsbestätigung, Lieferschein, Rechnung +- Übernahme von Daten aus Vorgängerbelegen (Dokumentenzyklus-Konsistenz) +- Automatische Berechnung von Netto-, Steuer- und Bruttobeträgen (Snapshot-Prinzip) +- Vergabe fortlaufender, lückenloser Belegnummern +- Geführte (schrittweise) Rechnungserstellung +- Statusführung und Stornierung von Rechnungen +- PDF-Export der Belege + +**Nicht im Umfang dieser Komponente:** + +- Anlegen/Ändern/Löschen von Kunden (Gruppe C) und Produkten (Gruppe B) +- Aufbau und Layout der GUI (Gruppe D) +- E-Rechnungsformate (ZUGFeRD/XRechnung), Mahnwesen, Buchhaltung (LH-Nichtziele) + +### 2.3 Grobe Systemfunktionen +Erstellen von Belegen → Berechnen der Summen → Vergeben der Belegnummer → Persistieren → +PDF-Export → Statuswechsel (inkl. Storno). + +### 2.4 UML-Bezug +Ein gemeinsames Use-Case-Diagramm aller Gruppen gibt den Überblick über die Akteure und +Ziele. Die für Gruppe A relevanten Use Cases sind: *Angebot erstellen*, +*Auftragsbestätigung erstellen*, *Lieferschein erstellen*, *Rechnung erstellen (geführt)* +und *Rechnung stornieren*. Die detaillierte logische Architektur dieser Komponente folgt +in Kapitel 7. + +--- + +## 3. Stakeholder und Kontext +Stakeholder und Systemkontext sind im Lastenheft (§ 2, § 3) beschrieben und gelten +unverändert. Für diese Komponente ist der maßgebliche Akteur: + +- **Anwender:in** — natürliche Person (Selbstständige:r, Freiberufler:in, + Kleinstunternehmer:in), die den Dokumentenzyklus eigenverantwortlich durchführt. + +Angrenzende Systeme/Komponenten: lokales Dateisystem (Persistenz, PDF), optional Drucker +und Standard-E-Mail-Client sowie intern die Komponenten Kundenverwaltung (C) und +Produktverwaltung (B). + +--- + +## 4. Funktionale Anforderungen + +Die Anforderungen sind nach Belegtyp gruppiert und mit den Satzschablonen des Foliensatzes +formuliert. Jede Anforderung ist eindeutig, vollständig, widerspruchsfrei und verifizierbar. + +> **Belegnummern (übergreifend, GR-01):** Belegnummern sind **eindeutig** und werden +> **vom System generiert** (nicht durch den Anwender eingegeben). Sie werden als +> `String` geführt, **nicht** als `int`, weil die Nummern ein festes Format mit +> führenden Nullen und Präfix besitzen (z. B. `R-2026-000124`); ein ganzzahliger Typ +> würde führende Nullen verlieren. Pro Belegtyp wird ein eigener, fortlaufender und +> **lückenloser** Zähler auf Basis der höchsten bisher vergebenen Nummer geführt. +> Präfixe: `AN-` (Angebot), `AB-` (Auftragsbestätigung), `LS-` (Lieferschein), +> `R-` (Rechnung). + +### 4.1 Angebot (aus BA-09) + +**F-01:** Das System MUSS es der Anwender:in ERMÖGLICHEN, ein Angebot für einen +existierenden Kunden mit mindestens einer Position aus dem Produktkatalog zu erstellen. + +**F-02:** WENN ein Angebot gespeichert wird, DANN MUSS das System eine eindeutige +Angebotsnummer (Präfix `AN-`), das Erstelldatum und ein Gültigkeitsdatum setzen. + +**F-03:** Das System MUSS für jedes Angebot die Netto-, Steuer- und Bruttosumme automatisch +aus den Positionen berechnen (siehe F-23). + +**F-04:** Das System MUSS es ERMÖGLICHEN, ein gespeichertes Angebot als PDF in das lokale +Dateisystem zu exportieren. + +### 4.2 Auftragsbestätigung (aus BA-10) + +**F-05:** Das System MUSS es ERMÖGLICHEN, eine Auftragsbestätigung zu erstellen, wobei +Kunde, Positionen und Mengen aus einem vorhandenen Angebot übernommen werden können +(siehe F-22). + +**F-06:** WENN eine Auftragsbestätigung gespeichert wird, DANN MUSS das System eine +eindeutige AB-Nummer (Präfix `AB-`) vergeben und — sofern aus einem Angebot erzeugt — eine +Rückreferenz auf das Angebot speichern. + +**F-07:** Das System MUSS es ERMÖGLICHEN, eine Auftragsbestätigung als PDF zu exportieren. + +### 4.3 Lieferschein (aus BA-11) + +**F-08:** Das System MUSS es ERMÖGLICHEN, einen Lieferschein mit Lieferdatum, Positionen +und Liefermengen zu erstellen; Kunde und Positionen können aus einer Auftragsbestätigung +übernommen werden (siehe F-22). + +**F-09:** WENN ein Lieferschein gespeichert wird, DANN MUSS das System eine eindeutige +Lieferscheinnummer (Präfix `LS-`) vergeben und — sofern aus einer Auftragsbestätigung +erzeugt — eine Rückreferenz speichern. + +**F-10:** Das System MUSS es ERMÖGLICHEN, einen Lieferschein als PDF zu exportieren. + +### 4.4 Rechnung (aus BA-12) + +**F-11:** Das System MUSS es ERMÖGLICHEN, eine Rechnung für einen Kunden mit mindestens +einer Position zu erstellen. + +**F-12:** WENN eine Rechnung gespeichert wird, DANN MUSS das System eine fortlaufende, +lückenlose Rechnungsnummer (Präfix `R-`) auf Basis der höchsten bisher vergebenen Nummer +vergeben (GR-01). + +**F-13:** Das System MUSS in jeder Rechnung die Pflichtangaben gemäß § 14 UStG führen: +Rechnungsnummer, Rechnungsdatum, Leistungsdatum, Kundendaten, Positionen mit Einzel- und +Gesamtbeträgen, Steuersatz und Steuerbetrag sowie Netto-, Steuer- und Bruttosumme. + +**F-14:** WENN bei der Rechnungserstellung kein abweichendes Zahlungsziel angegeben ist, +DANN MUSS das System ein Standard-Zahlungsziel von **14 Kalendertagen** ab Rechnungsdatum +setzen (GR-06). + +**F-15:** Das System MUSS es ERMÖGLICHEN, eine Rechnung als PDF zu exportieren. + +### 4.5 Geführte Rechnungserstellung (aus BA-13) + +**F-16:** Das System MUSS es ERMÖGLICHEN, die Rechnungserstellung schrittweise +durchzuführen: (1) Kunde auswählen, (2) mindestens eine Produktposition mit Menge erfassen, +(3) Rechnungsdatum und Zahlungsziel bestätigen, (4) Zusammenfassung prüfen, (5) speichern. + +**F-17:** WENN die Schritteingabe abgeschlossen ist, DANN MUSS das System vor dem Speichern +eine **Zusammenfassung** mit Kunde, allen Positionen, Mengen, Netto-/Steuer-/Bruttosumme, +Rechnungsdatum und Zahlungsziel anzeigen. + +**F-18:** WENN ein Pflichtfeld fehlt (kein Kunde, keine Position, kein Rechnungsdatum), +DANN MUSS das System das Speichern ablehnen und das fehlende Pflichtfeld benennen (GR/Q-09). + +### 4.6 Rechnung stornieren (aus BA-14) + +**F-19:** Das System MUSS es ERMÖGLICHEN, eine gespeicherte Rechnung im Status `OFFEN` zu +stornieren. + +**F-20:** WENN eine Rechnung storniert wird, DANN MUSS das System ihren Status auf +`STORNIERT` setzen, sie nicht mehr in der Liste offener Rechnungen führen und den Vorgang +mit Datum protokollieren. + +**F-21:** WENN eine Rechnung den Status `STORNIERT` hat, DANN MUSS das System jede weitere +inhaltliche Änderung ablehnen. + +### 4.7 Übergreifende Prozessregeln + +**F-22 (Dokumentenzyklus-Konsistenz, GR-05):** WENN ein Beleg aus einem Vorgängerbeleg +erzeugt wird, DANN MUSS das System Kunde, Positionen und Mengen übernehmen und eine +eindeutige Rückreferenz auf den Vorgänger speichern. + +**F-23 (Steuer-/Summenberechnung, GR-03):** WENN eine Position gespeichert wird, DANN MUSS +das System Netto-, Steuer- und Bruttobetrag automatisch berechnen, wobei der zum Zeitpunkt +der Belegerstellung gültige Steuersatz und Einzelpreis des Produkts als unveränderlicher +**Snapshot** in der Position abgelegt werden. + +**F-24 (Unveränderlichkeit, GR-02 / Q-07):** WENN ein Beleg den Status `VERSENDET` hat, +DANN MUSS das System jede inhaltliche Änderung ablehnen; Korrekturen erfolgen ausschließlich +über neue Belege (Storno-/Korrekturrechnung). + +--- + +## 5. Nicht-funktionale Anforderungen + +**NF-PERF-01 (aus Q-03):** Das System MUSS die Erstellung und den PDF-Export eines beliebigen +Belegtyps INNERHALB VON 2 SEKUNDEN abschließen, bei Belegen mit bis zu 50 Positionen und +einem Datenbestand gemäß Q-01 (bis 5.000 Kunden/Produkte). + +**NF-INT-01 (aus Q-07 / GR-02):** Das System MUSS nach dem Status `VERSENDET` einer Rechnung +**jede** inhaltliche Änderung ablehnen; zulässig bleiben ausschließlich Storno- bzw. +Korrekturvorgänge über neue Belege. + +**NF-USE-01 (aus Q-05):** Die geführte Erstellung einer vollständigen Rechnung an einen +bestehenden Kunden MUSS von einer erstmaligen Anwender:in OHNE EXTERNE HILFE IN WENIGER ALS +10 MINUTEN im ersten Versuch abgeschlossen werden können (Nachweis durch Usability-Test mit +mind. 5 Testpersonen). + +**NF-USE-02 (aus Q-09):** Das System MUSS fehlende Pflichtangaben in den Belegformularen so +markieren und benennen, dass mindestens 80 % der Testpersonen die fehlende Eingabe ohne +externe Hilfe im ersten Korrekturversuch ergänzen können. + +--- + +## 6. Daten und Schnittstellen + +Dieses Kapitel ist direkter Input für den Modultestplan (Kapitel 10). Datentypen werden +bereits als Java-Typen angegeben. + +### 6.1 Datenobjekte und Datentypen + +**Designgrundsätze:** + +- **Geldbeträge** werden als `java.math.BigDecimal` mit **Scale 2** und kaufmännischer + Rundung (`RoundingMode.HALF_UP`) geführt — **nicht** als `double` (Gleitkomma-Rundungs­fehler + wären für Beträge unzulässig). +- **Belegnummern** werden als `String` geführt (festes Format mit Präfix und führenden + Nullen, z. B. `"R-2026-000124"`) — **nicht** als `int`. +- **Datumswerte** werden als `java.time.LocalDate` geführt. +- **Mengen** werden als `int` (Stückzahl) geführt. +- **Steuersätze** werden als `BigDecimal` als Faktor geführt (z. B. `0.19`). + +#### `enum DokumentStatus` +`{ ENTWURF, OFFEN, VERSENDET, STORNIERT }` + +#### Klasse `Dokumentposition` +| Attribut | Java-Typ | Beschreibung | +|-------------------|---------------|--------------| +| produktReferenz | `String` | Produktnummer des referenzierten Produkts (Gruppe B) | +| bezeichnung | `String` | Snapshot der Produktbezeichnung zum Erstellzeitpunkt | +| menge | `int` | Stückzahl (> 0) | +| einzelpreisNetto | `BigDecimal` | Snapshot Netto-Einzelpreis (Scale 2) | +| steuersatz | `BigDecimal` | Snapshot Steuersatz, z. B. `0.19` | +| positionssummeNetto | `BigDecimal` | `einzelpreisNetto * menge` (Scale 2) | + +#### Abstrakte Klasse `Dokument` +| Attribut | Java-Typ | Beschreibung | +|----------------|----------------------------|--------------| +| belegnummer | `String` | eindeutig, vom System generiert | +| datum | `LocalDate` | Erstelldatum | +| kundenReferenz | `String` | Kundennummer (Gruppe C) | +| positionen | `List` | mind. 1 Position | +| status | `DokumentStatus` | Lebenszyklus-Status | +| vorgaengerNr | `String` (optional, `null`)| Rückreferenz auf Vorgängerbeleg (GR-05) | +| summeNetto | `BigDecimal` | Summe aller Positionssummen (Scale 2) | +| summeSteuer | `BigDecimal` | Summe der Steuerbeträge (Scale 2) | +| summeBrutto | `BigDecimal` | `summeNetto + summeSteuer` (Scale 2) | + +#### Spezialisierungen (erben von `Dokument`) +| Klasse | Zusätzliche Attribute (Java-Typ) | +|------------------------|----------------------------------| +| `Angebot` | `gueltigBis: LocalDate` | +| `Auftragsbestaetigung` | — (nutzt `vorgaengerNr` → Angebot) | +| `Lieferschein` | `lieferdatum: LocalDate` | +| `Rechnung` | `leistungsdatum: LocalDate`, `zahlungsziel: LocalDate`, `storniertAm: LocalDate` (optional) | + +### 6.2 Schnittstellen + +**Externe Schnittstellen:** + +| ID | Schnittstelle | Zweck | +|-------|---------------------------|-------| +| IF-01 | Lokales Dateisystem | Persistenz der Belege, Ablage exportierter PDF-Dokumente | +| IF-02 | Druckersystem (optional) | Direkter Druck eines Belegs | +| IF-03 | Standard-E-Mail-Client (optional) | Versand eines Belegs als PDF-Anhang | + +**Interne Schnittstellen (zu anderen Komponenten), als Java-Interfaces skizziert:** + +```java +// Lesender Zugriff auf Kundenstammdaten (Gruppe C) +public interface KundenService { + Kunde findeKunde(String kundennummer); // null, wenn nicht vorhanden +} + +// Lesender Zugriff auf Produktstammdaten (Gruppe B) +public interface ProduktService { + Produkt findeProdukt(String produktnummer); +} + +// PDF-Export eines Belegs (IF-01) +public interface PdfExporter { + void exportiere(Dokument dokument, Path zielDatei); +} +``` + +**Belegnummern-Schnittstelle (komponenteninterner Dienst):** + +```java +public interface BelegnummernGenerator { + // liefert die nächste lückenlose Nummer für den Belegtyp (GR-01) + String naechsteNummer(Belegtyp typ, int jahr); +} +``` + +> IF-Satzschablone (Beispiel IF-01): *Das System MUSS eine Datei-Schnittstelle +> bereitstellen, die es dem lokalen Dateisystem ERMÖGLICHT, Belege zu persistieren und PDF- +> Dokumente abzulegen. Die Schnittstelle MUSS gängige Dateipfade (`java.nio.file.Path`) +> verwenden.* + +--- + +## 7. Systemarchitektur (logisch, grob) + +Die Komponente folgt einer einfachen Schichtung: die GUI (Gruppe D) ruft den +`DokumentService` auf, der die Fachlogik kapselt und die Dienste `BelegnummernGenerator`, +`KundenService`, `ProduktService` und `PdfExporter` nutzt. Belege werden über ein +`DokumentRepository` im lokalen Dateisystem persistiert. + +### 7.1 Klassendiagramm + + + +![Abbildung 1: UML-Klassendiagramm Dokumentenzyklus (Gruppe A)] + +**Beschreibung zu Abbildung 1:** Das Klassendiagramm zeigt die abstrakte Oberklasse +`Dokument` mit den Spezialisierungen `Angebot`, `Auftragsbestaetigung`, `Lieferschein` und +`Rechnung` (Vererbung). Ein `Dokument` besteht aus einer bis vielen `Dokumentposition`- +Objekten (Komposition `Dokument` ◆—— `Dokumentposition`, Multiplizität `1..*`). Jede +`Dokumentposition` referenziert ein `Produkt` (Gruppe B), ein `Dokument` referenziert einen +`Kunde` (Gruppe C) — jeweils über die Stammdatennummer (lose Kopplung). Der `DokumentService` +orchestriert die Erstellung und nutzt den `BelegnummernGenerator` (Vergabe lückenloser +Belegnummern), die Schnittstellen `KundenService`/`ProduktService` (Stammdaten) sowie den +`PdfExporter` (PDF-Export). Der Status eines Belegs wird über das Enum `DokumentStatus` +abgebildet. + +### 7.2 Sequenzdiagramm + + + +![Abbildung 2: UML-Sequenzdiagramm „Rechnung erstellen" (Gruppe A)] + +**Beschreibung zu Abbildung 2:** Das Sequenzdiagramm stellt den Ablauf *Rechnung erstellen* +dar. Die Anwender:in löst über die GUI (Gruppe D) `erstelleRechnung(kundenNr, positionen)` +am `DokumentService` aus. Dieser ermittelt über `KundenService.findeKunde(...)` und +`ProduktService.findeProdukt(...)` die Stammdaten (Snapshot), berechnet je Position und in +Summe Netto-, Steuer- und Bruttobetrag (F-23), fordert vom `BelegnummernGenerator` mit +`naechsteNummer(RECHNUNG, jahr)` eine lückenlose Rechnungsnummer an (GR-01), setzt das +Standard-Zahlungsziel (+14 Tage, GR-06), persistiert den Beleg über das `DokumentRepository` +und exportiert ihn über `PdfExporter.exportiere(...)`. Abschließend wird die gespeicherte +`Rechnung` an die GUI zurückgegeben. + +--- + +## 8. Testbare Abnahmekriterien + +**AC-A-01 (zu F-01–F-04, NF-PERF-01)** — *Angebot erstellen und exportieren* +Vorbedingung: Ein Kunde und 5 Produkte sind erfasst. +Aktion: Anwender:in erstellt ein Angebot mit 5 Positionen und exportiert es als PDF. +Erwartet: Das Angebot ist mit Angebotsnummer (`AN-…`) und korrekten Summen gespeichert; der +PDF-Export ist in ≤ 2 Sekunden abgeschlossen. + +**AC-A-02 (zu F-05–F-07, F-22)** — *Auftragsbestätigung aus Angebot* +Vorbedingung: Ein Angebot liegt vor. +Aktion: Anwender:in erstellt eine Auftragsbestätigung mit Übernahme aller Positionen. +Erwartet: Die AB ist mit eindeutiger Nummer (`AB-…`), übernommenen Positionen/Mengen und +Rückreferenz auf das Angebot gespeichert und als PDF exportierbar. + +**AC-A-03 (zu F-08–F-10, F-22)** — *Lieferschein erstellen* +Vorbedingung: Eine Auftragsbestätigung liegt vor. +Aktion: Anwender:in erstellt einen Lieferschein mit Lieferdatum. +Erwartet: Der Lieferschein ist mit eindeutiger Nummer (`LS-…`), Lieferdatum und allen +Positionsdaten gespeichert und als PDF exportierbar. + +**AC-A-04 (zu F-11–F-15, F-23)** — *Rechnung mit Pflichtangaben und Standard-Zahlungsziel* +Vorbedingung: Kunde und mind. eine Position liegen vor; letzte Rechnungsnummer = `R-2026-000123`. +Aktion: Anwender:in erstellt eine Rechnung mit Rechnungsdatum 09.06.2026 ohne abweichendes +Zahlungsziel. +Erwartet: Die Rechnung trägt die Nummer `R-2026-000124`, ein Zahlungsziel 23.06.2026 +(+14 Tage), alle Pflichtangaben gem. § 14 UStG sowie korrekte Netto-/Steuer-/Bruttosummen. + +**AC-A-05 (zu F-16–F-18, NF-USE-01/02)** — *Geführte Rechnungserstellung* +Vorbedingung: Mind. ein Kunde und ein Produkt vorhanden. +Aktion: Anwender:in durchläuft die geführte Erstellung (Kunde → Position+Menge → Datum/ +Zahlungsziel → Zusammenfassung → speichern). +Erwartet: Vor dem Speichern erscheint eine Zusammenfassung mit Kunde, Position, Menge, +Summen, Rechnungsdatum und Zahlungsziel; fehlt ein Pflichtfeld, wird das Speichern abgelehnt +und das fehlende Feld benannt. + +**AC-A-06 (zu F-19–F-21)** — *Rechnung stornieren* +Vorbedingung: Eine Rechnung im Status `OFFEN` existiert. +Aktion: Anwender:in storniert die Rechnung. +Erwartet: Status wird `STORNIERT`, die Rechnung erscheint nicht mehr in der Liste offener +Rechnungen, der Vorgang ist mit Datum protokolliert; weitere Änderungen werden abgelehnt. + +**AC-A-07 (zu F-23, F-24, NF-INT-01)** — *Snapshot und Unveränderlichkeit* +Vorbedingung: Eine Rechnung mit einem Produkt ist erstellt; danach wird der Produktpreis +geändert; eine zweite Rechnung im Status `VERSENDET` existiert. +Aktion: Vergleich der ersten Rechnung mit dem geänderten Produktpreis; Änderungsversuch an +der versendeten Rechnung. +Erwartet: Die erste Rechnung behält den ursprünglichen Preis (Snapshot); der Änderungsversuch +an der versendeten Rechnung wird abgelehnt. + +--- + +## 9. Traceability LH ↔ PH + +Jede für Gruppe A relevante Lastenheft-Anforderung ist mindestens einer +Pflichtenheft-Anforderung zugeordnet. + +| LH-Anforderung | Beschreibung (LH) | PH-Anforderung(en) | +|----------------|-------------------------------------------|---------------------------| +| BA-09 | Angebot erstellen | F-01, F-02, F-03, F-04 | +| BA-10 | Auftragsbestätigung erstellen | F-05, F-06, F-07, F-22 | +| BA-11 | Lieferschein erstellen | F-08, F-09, F-10, F-22 | +| BA-12 | Rechnung erstellen | F-11, F-12, F-13, F-14, F-15 | +| BA-13 | Geführte Rechnungserstellung | F-16, F-17, F-18 | +| BA-14 | Rechnung stornieren | F-19, F-20, F-21 | +| GR-01 | Lückenlose Rechnungsnummern | F-12 (Belegnummern-Regel) | +| GR-02 | Unveränderlichkeit versendeter Dokumente | F-24, F-21, NF-INT-01 | +| GR-03 | Steuerberechnung (Snapshot) | F-23, F-03, F-13 | +| GR-05 | Dokumentenzyklus-Konsistenz | F-22, F-06, F-09 | +| GR-06 | Standard-Zahlungsziel 14 Tage | F-14 | +| Q-03 | Performance PDF-Erstellung ≤ 2 s | NF-PERF-01 | +| Q-05 | Usability Ersterstellung Rechnung | NF-USE-01 | +| Q-07 | Unveränderlichkeit versendeter Rechnungen | NF-INT-01, F-24 | +| Q-09 | Pflichtfeldhinweise ≥ 80 % | NF-USE-02, F-18 | + +> Hinweis: GR-04 (Löschsperre für verknüpfte Kunden) liegt in der Verantwortung von +> Gruppe C; Komponente A nutzt Kundendaten nur lesend (IF/`KundenService`) und ist von +> dieser Regel betroffen, spezifiziert sie aber nicht. + +--- + +## 10. Modultestplan + +Die folgenden Testfälle sind deterministisch (feste Ein-/Ausgaben) und mit JUnit 5 +umsetzbar. Geldbeträge werden als `BigDecimal` mit Scale 2 erwartet +(`assertEquals(new BigDecimal("119.00"), …)` bzw. `compareTo`). + +| TC | Abgedeckte PH-Anf. | Vorbedingung | Eingabe | Erwartetes Ergebnis | +|-------|--------------------|--------------|---------|---------------------| +| TC-01 | F-23, F-03 | Position mit Netto 100.00 €, Steuersatz 0.19 | `berechne()` | Steuer = 19.00, Brutto = 119.00 (Scale 2) | +| TC-02 | F-23 | Einzelpreis 50.00 €, Menge 3 | Positionssumme berechnen | positionssummeNetto = 150.00 | +| TC-03 | F-03, F-13 | Beleg mit 2 Positionen (150.00 € @ 0.19; 50.00 € @ 0.07) | Summen berechnen | summeNetto = 200.00, summeSteuer = 32.00, summeBrutto = 232.00 | +| TC-04 | F-12, GR-01 | Letzte Rechnungsnummer `R-2026-000123` | `naechsteNummer(RECHNUNG, 2026)` | liefert `R-2026-000124` (lückenlos) | +| TC-05 | F-12 (Format) | Zähler = 7, Jahr 2026 | `naechsteNummer(RECHNUNG, 2026)` | liefert `R-2026-000007` (führende Nullen, `String`) | +| TC-06 | F-14, GR-06 | Rechnungsdatum 2026-06-09, kein Zahlungsziel | Rechnung erstellen | zahlungsziel = 2026-06-23 (+14 Tage) | +| TC-07 | F-14 | Rechnungsdatum 2026-06-09, Zahlungsziel 2026-07-31 | Rechnung erstellen | zahlungsziel = 2026-07-31 (übernommen) | +| TC-08 | F-24, NF-INT-01 | Rechnung im Status `VERSENDET` | `setzePosition(...)` / Änderung | wirft `IllegalStateException` | +| TC-09 | F-19, F-20 | Rechnung im Status `OFFEN` | `storniere()` | Status = `STORNIERT`; nicht in `offeneRechnungen()`; `storniertAm` gesetzt | +| TC-10 | F-22, GR-05 | Angebot `AN-2026-000001` mit Kunde + 2 Positionen | `ausAngebot(angebot)` (AB erzeugen) | AB übernimmt Kunde/Positionen/Mengen; `vorgaengerNr = "AN-2026-000001"` | +| TC-11 | F-23, F-24 | Rechnung mit Produkt @ 50.00 €; danach Produktpreis → 80.00 € | erste Rechnung erneut lesen | einzelpreisNetto bleibt 50.00 (Snapshot unverändert) | +| TC-12 | F-18, NF-USE-02 | Rechnung ohne Kunde **oder** ohne Position | `speichere()` | Speichern abgelehnt; Validierungsfehler benennt fehlendes Pflichtfeld | +| TC-13 | F-11, F-12, F-13 | Kunde + 1 Position vorhanden | vollständige Rechnung erstellen | Rechnung gespeichert, Nummer vergeben, alle § 14 UStG-Pflichtangaben gesetzt | + +Damit sind 13 Testfälle (> 10) spezifiziert, die alle funktionalen Kernregeln (F-12, F-14, +F-18, F-22, F-23, F-24) sowie die zentralen Geschäftsregeln (GR-01, GR-02, GR-03, GR-05, +GR-06) abdecken. + +--- + +## 11. Anhänge + +### 11.1 Abkürzungen +| Abkürzung | Bedeutung | +|-----------|-----------| +| F | Funktionale Anforderung (Pflichtenheft) | +| NF | Nicht-funktionale Anforderung (Pflichtenheft) | +| IF | Schnittstelle (Interface) | +| AC | Abnahmekriterium | +| TC | Testfall (Test Case) | +| BA | Benutzeranforderung (Lastenheft) | +| GR | Geschäftsregel (Lastenheft) | +| Q | Qualitätsanforderung (Lastenheft) | +| SRS | System Requirements Specification (Pflichtenheft) | + +### 11.2 Glossar +Es gilt das Glossar des Lastenhefts (§ 8.1) unverändert. + +### 11.3 Referenzen +Siehe Kapitel 1.5. diff --git a/Pflichtenheft_GruppeA.pdf b/Pflichtenheft_GruppeA.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b91933b69ad1cb52280ab214dad559484aa364cc GIT binary patch literal 179286 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%0D3%p`mlhl_3V!xZH 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 YxOuslTfnh$^RRQW!ckI6C`!WpA4o-I>i_@% literal 0 HcmV?d00001 diff --git a/Pflichtenheft_GruppeB.md b/Pflichtenheft_GruppeB.md new file mode 100644 index 0000000..beeed17 --- /dev/null +++ b/Pflichtenheft_GruppeB.md @@ -0,0 +1,503 @@ +--- +title: "Pflichtenheft" +subtitle: "Desktop-Fakturierungsanwendung — Gruppe B: Verwaltung von Produkten" +author: + - Team 1 – Gruppe B +version: "1.0" +lang: de-DE +toc: true +toc-depth: 3 +numbersections: false +papersize: a4 +geometry: "margin=3cm" +fontsize: 12pt +linestretch: 1.5 +mainfont: "Times New Roman" +sansfont: "Arial" +monofont: "DejaVu Sans Mono" +header-includes: | + \usepackage{fancyhdr} + \usepackage{lastpage} + \pagestyle{fancy} + \fancyhf{} + \fancyhead[L]{Team 1 – Gruppe B} + \fancyhead[C]{Pflichtenheft} + \fancyhead[R]{Version 1.0} + \fancyfoot[C]{\thepage\ /\ \pageref{LastPage}} + \renewcommand{\headrulewidth}{0.4pt} + \renewcommand{\footrulewidth}{0pt} +--- + +\newpage + ++-----------------------------+-------------------------+-------------------------+ +| Autor | Prüfer | Freigebender | ++=============================+=========================+=========================+ +| Berhane, Meron\ | Prof. Dr. Marmitt, Gerd | Prof. Dr. Marmitt, Gerd | +| SchulzeAmeling, Jan-Micah\ | | | +| Volz, Jessica | | | ++-----------------------------+-------------------------+-------------------------+ +| Gruppe B (Produkte) | Modulverantwortlicher | Modulverantwortlicher | ++-----------------------------+-------------------------+-------------------------+ +| 10.06.2026 | 10.06.2026 | 10.06.2026 | ++-----------------------------+-------------------------+-------------------------+ + +**Freigabevermerk:** Dieses Dokument ist nach Prüfung und Freigabe durch den +Modulverantwortlichen verbindliche Spezifikationsgrundlage für die Implementierung +und den Modultest der Komponente *Verwaltung von Produkten*. + +## Dokumentenhistorie + +| Version | Datum | Autor | Grund der Änderung | +|---------|------------|----------------------------------------------------|---------------------| +| 1.0 | 10.06.2026 | Meron Berhane, Jan-Micah SchulzeAmeling, Jessica Volz | Initiale Erstellung | + +\newpage + +## 1. Einleitung + +### 1.1 Zweck des Dokuments +Dieses Pflichtenheft (System Requirements Specification, SRS) beschreibt aus Sicht des +Auftragnehmers, **wie** die Komponente *Verwaltung von Produkten* der +Desktop-Fakturierungsanwendung die Anforderungen des Lastenhefts (v1.3) erfüllt. Es +konkretisiert die fachlichen Anforderungen in testbare Systemanforderungen und dient als +direkte Grundlage für Design, Implementierung sowie den Komponenten- bzw. Modultestplan +(Kapitel 10). + +### 1.2 Ziel +Ziel dieses Pflichtenhefts ist die vollständige und testbare Spezifikation der Verwaltung +von Produktstammdaten: Anlegen, Ändern, Löschen (mit Löschsperre) sowie Suchen und +Auflisten von Produkten, einschließlich der Vergabe eindeutiger Produktnummern, der +Validierung der Eingaben und der Bereitstellung der Produktdaten für den Dokumentenzyklus +(Gruppe A). + +### 1.3 Geltungsbereich +Dieses Dokument gilt für die Komponente **Gruppe B — Verwaltung von Produkten**. Die +Gesamtanwendung wird arbeitsteilig in vier Komponenten entwickelt; jede Untergruppe pflegt +ein eigenes Pflichtenheft: + +| Gruppe | Komponente | Eigenes Pflichtenheft | +|--------|-------------------------|-----------------------| +| A | Prozess / Dokumentenzyklus | separat | +| B | Verwaltung von Produkten | **dieses Dokument** | +| C | Verwaltung von Kunden | separat | +| D | Programmoberfläche | separat | + +Die Komponente B **stellt** Produktstammdaten lesend für den Dokumentenzyklus (Gruppe A) +über eine definierte interne Schnittstelle bereit (Kapitel 6.2) und wird über die +Programmoberfläche (Gruppe D) bedient. Die Erzeugung von Belegen, die Snapshot-Bildung +von Preisen und Steuersätzen in Dokumentpositionen (GR-03) sowie die Kundenverwaltung +(Gruppe C) sind **nicht** Gegenstand dieses Dokuments. + +### 1.4 Definitionen und Abkürzungen +Fachbegriffe (Produkt, Dokumentposition, Snapshot, GoBD, DSGVO, CRUD, …) sind im Glossar +des Lastenhefts (§ 8.1) definiert und gelten unverändert. Dokumentspezifische Abkürzungen +siehe Kapitel 11. + +### 1.5 Referenzen +- Lastenheft „Desktop-Fakturierungsanwendung", Team 1, Version 1.3, 09.06.2026 +- Project Charter, Team 1, Version 1.3, 14.05.2026 +- Pflichtenheft Gruppe A „Prozess / Dokumentenzyklus", Version 1.0, 09.06.2026 +- GoBD — Grundsätze zur ordnungsmäßigen Führung und Aufbewahrung von Büchern +- DSGVO — EU-Verordnung 2016/679 +- Vorlesungsunterlagen Software Engineering 1 (SoSe 2026), Foliensatz „Lasten- und Pflichtenheft" + +--- + +## 2. Systemüberblick + +### 2.1 Kurzbeschreibung +Die Anwendung ist eine **Einzelplatz-Stand-Alone-Desktop-Anwendung** mit **lokaler +Datenhaltung** (keine Cloud, kein Server). Die Bedienung erfolgt über eine **minimale +grafische Benutzeroberfläche** (Gruppe D), über die die Funktionalität der +Produktverwaltung zugänglich gemacht wird. + +Die Komponente *Verwaltung von Produkten* stellt die Stammdatenpflege des Produktkatalogs +bereit: Anlegen, Ändern und Löschen von Produkten, Vergabe eindeutiger Produktnummern, +Validierung der Eingaben, Suche und sortierte Auflistung sowie der lesende Zugriff für die +Dokumenterstellung (Gruppe A) und der Export der Produktstammdaten in einem offenen Format. + +### 2.2 Abgrenzung (Was gehört dazu / was nicht) +**Im Umfang dieser Komponente:** + +- Anlegen von Produkten mit Pflicht- und optionalen Feldern +- Vergabe eindeutiger, vom System generierter Produktnummern +- Ändern von Produktdaten (Bezeichnung, Preis, Steuersatz, …) +- Löschen von Produkten inkl. Löschsperre bei referenzierten Produkten +- Suchen und sortiertes Auflisten von Produkten +- Bereitstellung des lesenden Zugriffs für Gruppe A (`ProduktService`) +- Export der Produktstammdaten in einem offenen, dokumentierten Format (Anteil an Q-08) + +**Nicht im Umfang dieser Komponente:** + +- Erstellung und Statusführung von Belegen (Gruppe A) +- Snapshot-Bildung von Preis/Steuersatz in Dokumentpositionen (GR-03, Gruppe A) +- Verwaltung von Kunden (Gruppe C) +- Aufbau und Layout der GUI (Gruppe D) +- Lagerverwaltung, Bestandsführung, Webshop-Anbindung (LH-Nichtziele) + +### 2.3 Grobe Systemfunktionen +Erfassen eines Produkts → Validieren der Eingaben → Vergeben der Produktnummer → +Persistieren → Suchen/Auflisten → Ändern → Löschen (mit Referenzprüfung) → Export. + +### 2.4 UML-Bezug +Ein gemeinsames Use-Case-Diagramm aller Gruppen gibt den Überblick über die Akteure und +Ziele. Die für Gruppe B relevanten Use Cases sind: *Produkt anlegen*, *Produktdaten +ändern*, *Produkt löschen* und *Produkte suchen und auflisten*. Die detaillierte logische +Architektur dieser Komponente folgt in Kapitel 7. + +--- + +## 3. Stakeholder und Kontext +Stakeholder und Systemkontext sind im Lastenheft (§ 2, § 3) beschrieben und gelten +unverändert. Für diese Komponente ist der maßgebliche Akteur: + +- **Anwender:in** — natürliche Person (Selbstständige:r, Freiberufler:in, + Kleinstunternehmer:in), die den Produktkatalog eigenverantwortlich pflegt. + +Angrenzende Systeme/Komponenten: lokales Dateisystem (Persistenz, Datenexport) sowie +intern die Komponenten Dokumentenzyklus (A, lesender Konsument der Produktdaten) und +Programmoberfläche (D). + +--- + +## 4. Funktionale Anforderungen + +Die Anforderungen sind nach CRUD-Operationen gruppiert und mit den Satzschablonen des +Foliensatzes formuliert. Jede Anforderung ist eindeutig, vollständig, widerspruchsfrei und +verifizierbar. + +> **Produktnummern (übergreifend):** Produktnummern sind **eindeutig** und werden +> **vom System generiert** (nicht durch den Anwender eingegeben). Sie werden als +> `String` geführt, **nicht** als `int`, weil die Nummern ein festes Format mit +> Präfix und führenden Nullen besitzen (z. B. `P-000042`); ein ganzzahliger Typ +> würde führende Nullen verlieren. Die Nummer wird fortlaufend auf Basis der höchsten +> bisher vergebenen Nummer ermittelt und ist nach der Vergabe **unveränderlich**. +> Anders als bei Rechnungsnummern (GR-01, Gruppe A) besteht keine +> Lückenlosigkeits-Pflicht. + +### 4.1 Produkt anlegen (aus BA-05) + +**F-01:** Das System MUSS es der Anwender:in ERMÖGLICHEN, ein neues Produkt mit den +Pflichtfeldern Bezeichnung, Netto-Einzelpreis und Steuersatz sowie den optionalen Feldern +Beschreibung und Einheit anzulegen. + +**F-02:** WENN ein Produkt gespeichert wird, DANN MUSS das System eine eindeutige +Produktnummer (Präfix `P-`, fortlaufend, führende Nullen) vergeben und anzeigen. + +**F-03:** WENN ein Produkt gespeichert wird, DANN MUSS das System die Eingaben validieren: +der Netto-Einzelpreis MUSS größer oder gleich `0.00` sein und der Steuersatz MUSS einem +der zulässigen Werte `{0.00, 0.07, 0.19}` entsprechen; andernfalls MUSS das Speichern +abgelehnt werden. + +**F-04:** WENN ein Pflichtfeld fehlt (keine Bezeichnung, kein Einzelpreis, kein +Steuersatz), DANN MUSS das System das Speichern ablehnen und das fehlende Pflichtfeld +benennen (Q-09). + +### 4.2 Produktdaten ändern (aus BA-06) + +**F-05:** Das System MUSS es der Anwender:in ERMÖGLICHEN, die Felder Bezeichnung, +Beschreibung, Netto-Einzelpreis, Steuersatz und Einheit eines bestehenden Produkts zu +ändern und persistent zu speichern. + +**F-06:** WENN ein Produkt geändert wird, DANN MUSS das System sicherstellen, dass +ausschließlich **neue** Dokumente den geänderten Wert verwenden; bereits erstellte +Dokumente bleiben unverändert, da Gruppe A Preis und Steuersatz als Snapshot in der +Dokumentposition ablegt (GR-02, GR-03). Die Komponente B speichert ausschließlich den +jeweils aktuellen Stand. + +**F-07:** Das System MUSS die Produktnummer nach der Vergabe vor jeder Änderung schützen; +ein Änderungsversuch an der Produktnummer MUSS abgelehnt werden. + +### 4.3 Produkt löschen (aus BA-07) + +**F-08:** Das System MUSS es der Anwender:in ERMÖGLICHEN, ein nicht referenziertes Produkt +nach einer Bestätigungsabfrage dauerhaft zu löschen. + +**F-09:** WENN das zu löschende Produkt in mindestens einer Dokumentposition referenziert +wird, DANN MUSS das System den Löschvorgang ablehnen und einen Hinweis anzeigen, dass das +Produkt in Dokumenten verwendet wird. + +**F-10:** WENN ein Löschvorgang ausgelöst wird, DANN MUSS das System vor dem Löschen über +die Schnittstelle `ProduktReferenzPruefung` (Gruppe A, Kapitel 6.2) prüfen, ob das Produkt +in Dokumentpositionen referenziert ist. + +### 4.4 Produkte suchen und auflisten (aus BA-08) + +**F-11:** Das System MUSS es der Anwender:in ERMÖGLICHEN, alle Produkte in einer nach +Bezeichnung sortierten Liste anzuzeigen. + +**F-12:** Das System MUSS es der Anwender:in ERMÖGLICHEN, Produkte über eine Suche nach +Bezeichnung oder Produktnummer zu filtern; die Suche MUSS Teilzeichenketten finden und +Groß-/Kleinschreibung ignorieren. + +**F-13:** WENN eine Suche ausgeführt wird, DANN MUSS das System das gefilterte Ergebnis +innerhalb der Vorgabe aus Q-02 anzeigen (siehe NF-PERF-01). + +### 4.5 Übergreifende Regeln und Dienste + +**F-14 (Bereitstellung für Gruppe A):** Das System MUSS eine lesende Schnittstelle +`ProduktService` bereitstellen, die es der Komponente Dokumentenzyklus (Gruppe A) +ERMÖGLICHT, ein Produkt anhand seiner Produktnummer abzurufen; existiert kein Produkt zur +Nummer, MUSS `null` zurückgegeben werden. + +**F-15 (Datenexport, Anteil an Q-08):** Das System MUSS es der Anwender:in ERMÖGLICHEN, +alle Produktstammdaten vollständig in ein offenes, dokumentiertes Format (CSV, UTF-8, +Semikolon-getrennt, mit Kopfzeile) in das lokale Dateisystem zu exportieren. + +--- + +## 5. Nicht-funktionale Anforderungen + +**NF-PERF-01 (aus Q-01/Q-02):** Das System MUSS Such- und Auflistungsergebnisse der +Produktverwaltung INNERHALB VON 1 SEKUNDE anzeigen, bei einem Datenbestand von bis zu +5.000 Produkten (Q-01) auf einem typischen Endanwender-PC. + +**NF-EXP-01 (aus Q-08, anteilig):** Das System MUSS den vollständigen Export der +Produktstammdaten (F-15) INNERHALB VON 30 SEKUNDEN abschließen, bei einem Datenbestand +gemäß Q-01. + +**NF-USE-01 (aus Q-09):** Das System MUSS fehlende Pflichtangaben im Formular „Produkt +anlegen/ändern" so markieren und benennen, dass mindestens 80 % der Testpersonen die +fehlende Eingabe ohne externe Hilfe im ersten Korrekturversuch ergänzen können (Nachweis +durch Usability-Test mit mind. 5 Testpersonen). + +**NF-SEC-01 (aus Q-06, anteilig):** Das System MUSS alle Produktdaten ausschließlich lokal +auf dem Anwender-PC ablegen; eine Übertragung an externe Dienste findet NICHT statt. + +--- + +## 6. Daten und Schnittstellen + +Dieses Kapitel ist direkter Input für den Modultestplan (Kapitel 10). Datentypen werden +bereits als Java-Typen angegeben. + +### 6.1 Datenobjekte und Datentypen + +**Designgrundsätze (konsistent zu Gruppe A):** + +- **Geldbeträge** werden als `java.math.BigDecimal` mit **Scale 2** und kaufmännischer + Rundung (`RoundingMode.HALF_UP`) geführt — **nicht** als `double` (Gleitkomma-Rundungs­fehler + wären für Beträge unzulässig). +- **Produktnummern** werden als `String` geführt (festes Format mit Präfix und führenden + Nullen, z. B. `"P-000042"`) — **nicht** als `int`. +- **Steuersätze** werden als `BigDecimal` als Faktor geführt (z. B. `0.19`); zulässige + Werte: `0.00`, `0.07`, `0.19`. + +#### Klasse `Produkt` +| Attribut | Java-Typ | Beschreibung | +|-------------------|---------------|--------------| +| produktnummer | `String` | eindeutig, vom System generiert, unveränderlich (F-02, F-07) | +| bezeichnung | `String` | Pflichtfeld, nicht leer | +| beschreibung | `String` (optional, `null`) | Freitext | +| einzelpreisNetto | `BigDecimal` | Pflichtfeld, Scale 2, ≥ 0.00 | +| steuersatz | `BigDecimal` | Pflichtfeld, Faktor aus `{0.00, 0.07, 0.19}` | +| einheit | `String` (optional, `null`) | z. B. `"Stück"`, `"Stunde"` | + +### 6.2 Schnittstellen + +**Externe Schnittstellen:** + +| ID | Schnittstelle | Zweck | +|-------|---------------------------|-------| +| IF-01 | Lokales Dateisystem | Persistenz der Produktstammdaten | +| IF-04 | Datenexport-Schnittstelle | Export der Produktstammdaten als CSV (F-15, Q-08) | + +**Interne Schnittstellen (zu anderen Komponenten), als Java-Interfaces skizziert:** + +```java +// Von Gruppe B IMPLEMENTIERT, von Gruppe A genutzt (lesender Zugriff) +public interface ProduktService { + Produkt findeProdukt(String produktnummer); // null, wenn nicht vorhanden +} + +// Von Gruppe A BEREITGESTELLT, von Gruppe B genutzt (Löschsperre, F-10) +public interface ProduktReferenzPruefung { + boolean istProduktReferenziert(String produktnummer); +} +``` + +**Komponenteninterne Dienste:** + +```java +public interface ProduktnummernGenerator { + // liefert die nächste fortlaufende Produktnummer, z. B. "P-000042" + String naechsteNummer(); +} + +public interface ProduktRepository { + Produkt speichere(Produkt produkt); + void loesche(String produktnummer); + List alleSortiertNachBezeichnung(); + List suche(String suchbegriff); // Bezeichnung ODER Produktnummer +} +``` + +> IF-Satzschablone (Beispiel IF-04): *Das System MUSS eine Export-Schnittstelle +> bereitstellen, die es der Anwender:in ERMÖGLICHT, alle Produktstammdaten als +> CSV-Datei (UTF-8, Semikolon-getrennt) in das lokale Dateisystem +> (`java.nio.file.Path`) zu exportieren.* + +--- + +## 7. Systemarchitektur (logisch, grob) + +Die Komponente folgt einer einfachen Schichtung: die GUI (Gruppe D) ruft den +`ProduktVerwaltungsService` auf, der die Fachlogik (Validierung, Nummernvergabe, +Löschsperre) kapselt und die Dienste `ProduktnummernGenerator`, `ProduktRepository` und +`ProduktReferenzPruefung` (Gruppe A) nutzt. Gegenüber Gruppe A implementiert die +Komponente das Interface `ProduktService`. Produkte werden über das `ProduktRepository` +im lokalen Dateisystem persistiert. + +### 7.1 Klassendiagramm + + + +![Abbildung 1: UML-Klassendiagramm Produktverwaltung (Gruppe B)] + +**Beschreibung zu Abbildung 1:** Das Klassendiagramm zeigt die Entitätsklasse `Produkt` +mit ihren Attributen (Kapitel 6.1). Der `ProduktVerwaltungsService` orchestriert Anlegen, +Ändern, Löschen und Suche: er nutzt den `ProduktnummernGenerator` (Vergabe eindeutiger +Produktnummern, F-02), das `ProduktRepository` (Persistenz, IF-01) und die von Gruppe A +bereitgestellte Schnittstelle `ProduktReferenzPruefung` (Löschsperre, F-09/F-10). +Zusätzlich realisiert der `ProduktVerwaltungsService` das Interface `ProduktService` +(lesender Zugriff für Gruppe A, F-14). Dokumentpositionen (Gruppe A) referenzieren ein +`Produkt` ausschließlich über die Produktnummer (lose Kopplung). + +### 7.2 Sequenzdiagramm + + + +![Abbildung 2: UML-Sequenzdiagramm „Produkt löschen mit Löschsperre" (Gruppe B)] + +**Beschreibung zu Abbildung 2:** Das Sequenzdiagramm stellt den Ablauf *Produkt löschen* +dar. Die Anwender:in löst über die GUI (Gruppe D) `loescheProdukt(produktnummer)` am +`ProduktVerwaltungsService` aus. Dieser prüft zuerst über +`ProduktReferenzPruefung.istProduktReferenziert(produktnummer)` (Gruppe A), ob das Produkt +in Dokumentpositionen verwendet wird. Liefert die Prüfung `true`, wird der Löschvorgang +abgelehnt und ein Hinweis an die GUI zurückgegeben (F-09). Liefert sie `false`, fordert +das System die Bestätigung der Anwender:in an (F-08) und löscht das Produkt anschließend +über `ProduktRepository.loesche(produktnummer)` dauerhaft aus dem lokalen Datenbestand. + +--- + +## 8. Testbare Abnahmekriterien + +**AC-B-01 (zu F-01–F-04)** — *Produkt anlegen* +Vorbedingung: Modul Produktverwaltung geöffnet; höchste vergebene Produktnummer = `P-000041`. +Aktion: Anwender:in erfasst ein Produkt mit Bezeichnung „Beratungsstunde", Einzelpreis +`80.00`, Steuersatz `0.19` und speichert. +Erwartet: Das Produkt ist persistent gespeichert und trägt die Produktnummer `P-000042`; +die Nummer wird angezeigt. + +**AC-B-02 (zu F-04, NF-USE-01)** — *Pflichtfeldprüfung* +Vorbedingung: Formular „Produkt anlegen" geöffnet. +Aktion: Anwender:in lässt den Einzelpreis leer und versucht zu speichern. +Erwartet: Das Speichern wird abgelehnt; das Feld „Einzelpreis (netto)" wird als fehlendes +Pflichtfeld markiert und benannt. + +**AC-B-03 (zu F-05, F-06, GR-02/GR-03)** — *Produkt ändern, Snapshot-Verhalten* +Vorbedingung: Ein Produkt (`50.00` €) ist in einer früheren Rechnung (Gruppe A) erfasst. +Aktion: Anwender:in ändert den Einzelpreis auf `80.00` € und erstellt anschließend eine +neue Rechnung mit diesem Produkt. +Erwartet: Die Änderung ist gespeichert; die alte Rechnung behält den ursprünglichen Preis +(Snapshot bei Gruppe A), die neue Rechnung übernimmt `80.00` €. + +**AC-B-04 (zu F-08–F-10)** — *Löschsperre für referenzierte Produkte* +Vorbedingung: Produkt `P-000010` wird in einer Dokumentposition referenziert; Produkt +`P-000011` ist unverknüpft. +Aktion: Anwender:in versucht, `P-000010` zu löschen; anschließend löscht sie `P-000011` +nach Bestätigung. +Erwartet: Das Löschen von `P-000010` wird mit Hinweis abgelehnt; `P-000011` ist dauerhaft +entfernt und erscheint nicht mehr in der Liste. + +**AC-B-05 (zu F-11–F-13, NF-PERF-01)** — *Produkt suchen und auflisten* +Vorbedingung: Mindestens 100 Produkte sind im System. +Aktion: Anwender:in sucht ein Produkt anhand eines Teils der Bezeichnung. +Erwartet: Die sortierte Trefferliste erscheint in ≤ 1 Sekunde (Q-02); die Suche findet das +Produkt auch bei abweichender Groß-/Kleinschreibung. + +**AC-B-06 (zu F-15, NF-EXP-01)** — *Produktstammdaten exportieren* +Vorbedingung: Mindestens 100 Produkte sind im System. +Aktion: Anwender:in exportiert die Produktstammdaten. +Erwartet: Eine CSV-Datei (UTF-8, Semikolon-getrennt, mit Kopfzeile) mit allen Produkten +und allen Attributen liegt im gewählten Zielordner; der Export dauert ≤ 30 Sekunden. + +--- + +## 9. Traceability LH ↔ PH + +Jede für Gruppe B relevante Lastenheft-Anforderung ist mindestens einer +Pflichtenheft-Anforderung zugeordnet. + +| LH-Anforderung | Beschreibung (LH) | PH-Anforderung(en) | +|----------------|-------------------------------------------|---------------------------| +| BA-05 | Produkte anlegen | F-01, F-02, F-03, F-04 | +| BA-06 | Produktdaten ändern | F-05, F-06, F-07 | +| BA-07 | Produkte löschen | F-08, F-09, F-10 | +| BA-08 | Produkte suchen und auflisten | F-11, F-12, F-13 | +| GR-02 | Unveränderlichkeit versendeter Dokumente | F-06 (Abgrenzung) | +| Q-01 | Datenbestand 5.000 Produkte | NF-PERF-01 | +| Q-02 | Suche/Auflistung ≤ 1 s | NF-PERF-01, F-13 | +| Q-06 | Lokale Speicherung | NF-SEC-01 | +| Q-08 | Datenexport ≤ 30 s | F-15, NF-EXP-01 | +| Q-09 | Pflichtfeldhinweise ≥ 80 % | NF-USE-01, F-04 | + +> Hinweis: GR-03 (Steuerberechnung/Snapshot) liegt in der Verantwortung von Gruppe A; +> Komponente B liefert lediglich den jeweils aktuellen Preis und Steuersatz über +> `ProduktService` und spezifiziert die Snapshot-Bildung nicht. PZ-01 (CRUD-Verwaltung +> der Produktstammdaten) wird durch BA-05–BA-08 vollständig abgedeckt. + +--- + +## 10. Modultestplan + +Die folgenden Testfälle sind deterministisch (feste Ein-/Ausgaben) und mit JUnit 5 +umsetzbar. Geldbeträge werden als `BigDecimal` mit Scale 2 erwartet +(`assertEquals(new BigDecimal("80.00"), …)` bzw. `compareTo`). Die Schnittstelle +`ProduktReferenzPruefung` (Gruppe A) wird im Modultest durch einen Stub/Mock ersetzt. + +| TC | Abgedeckte PH-Anf. | Vorbedingung | Eingabe | Erwartetes Ergebnis | +|-------|--------------------|--------------|---------|---------------------| +| TC-01 | F-01, F-02 | Höchste Produktnummer `P-000041` | Produkt („Beratungsstunde", 80.00, 0.19) speichern | Produkt persistiert; Produktnummer = `P-000042` | +| TC-02 | F-02 (Format) | Zähler = 7 | `naechsteNummer()` | liefert `P-000007` (führende Nullen, `String`) | +| TC-03 | F-03 | gültiges Produkt | Einzelpreis `-1.00` | Speichern abgelehnt (Validierungsfehler „Einzelpreis") | +| TC-04 | F-03 | gültiges Produkt | Steuersatz `0.15` | Speichern abgelehnt (unzulässiger Steuersatz) | +| TC-05 | F-04, NF-USE-01 | Produkt ohne Bezeichnung | `speichere()` | Speichern abgelehnt; Validierungsfehler benennt „Bezeichnung" | +| TC-06 | F-05 | Produkt `P-000042` mit Preis 80.00 | Preis auf 95.00 ändern, speichern | gespeichertes Produkt hat einzelpreisNetto = 95.00 | +| TC-07 | F-07 | Produkt `P-000042` | Änderungsversuch der Produktnummer auf `P-999999` | wirft `IllegalArgumentException` / Änderung abgelehnt | +| TC-08 | F-08 | Produkt unverknüpft (Stub: `istProduktReferenziert` → `false`) | `loescheProdukt("P-000011")` mit Bestätigung | Produkt entfernt; nicht mehr in `alleSortiertNachBezeichnung()` | +| TC-09 | F-09, F-10 | Stub: `istProduktReferenziert("P-000010")` → `true` | `loescheProdukt("P-000010")` | Löschen abgelehnt; Produkt weiterhin vorhanden; Hinweis erzeugt | +| TC-10 | F-11 | Produkte „Zaun", „Anker", „Mast" | `alleSortiertNachBezeichnung()` | Reihenfolge: „Anker", „Mast", „Zaun" | +| TC-11 | F-12 | Produkt „Beratungsstunde" | `suche("BERATUNG")` | Trefferliste enthält „Beratungsstunde" (case-insensitive, Teilstring) | +| TC-12 | F-12 | Produkt `P-000042` | `suche("P-000042")` | Trefferliste enthält genau dieses Produkt | +| TC-13 | F-14 | Kein Produkt `P-999999` vorhanden | `findeProdukt("P-999999")` | liefert `null` | +| TC-14 | F-15 | 3 Produkte im Bestand | `exportiereCsv(ziel)` | CSV-Datei mit Kopfzeile + 3 Datenzeilen, Semikolon-getrennt, UTF-8 | + +Damit sind 14 Testfälle (> 10) spezifiziert, die alle funktionalen Kernregeln (F-02, +F-03, F-04, F-07, F-09, F-12, F-14, F-15) sowie die relevanten Geschäftsregeln und +Qualitätsvorgaben (GR-02-Abgrenzung, Q-02, Q-08, Q-09) abdecken. + +--- + +## 11. Anhänge + +### 11.1 Abkürzungen +| Abkürzung | Bedeutung | +|-----------|-----------| +| F | Funktionale Anforderung (Pflichtenheft) | +| NF | Nicht-funktionale Anforderung (Pflichtenheft) | +| IF | Schnittstelle (Interface) | +| AC | Abnahmekriterium | +| TC | Testfall (Test Case) | +| BA | Benutzeranforderung (Lastenheft) | +| GR | Geschäftsregel (Lastenheft) | +| Q | Qualitätsanforderung (Lastenheft) | +| CSV | Comma-Separated Values (offenes Exportformat) | +| SRS | System Requirements Specification (Pflichtenheft) | + +### 11.2 Glossar +Es gilt das Glossar des Lastenhefts (§ 8.1) unverändert. + +### 11.3 Referenzen +Siehe Kapitel 1.5. diff --git a/Pflichtenheft_GruppeB.pdf b/Pflichtenheft_GruppeB.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1765f7b448100ea032ba815d22913eacd2714fd3 GIT binary patch literal 175129 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 z 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 **Kundennummern (übergreifend):** Kundennummern sind **eindeutig** und werden +> **vom System generiert** (nicht durch den Anwender eingegeben). Sie werden als +> `String` geführt, **nicht** als `int`, weil die Nummern ein festes Format mit +> Präfix und führenden Nullen besitzen (z. B. `K-000017`); ein ganzzahliger Typ +> würde führende Nullen verlieren. Die Nummer wird fortlaufend auf Basis der höchsten +> bisher vergebenen Nummer ermittelt und ist nach der Vergabe **unveränderlich**. +> Anders als bei Rechnungsnummern (GR-01, Gruppe A) besteht keine +> Lückenlosigkeits-Pflicht. + +### 4.1 Kunde anlegen (aus BA-01) + +**F-01:** Das System MUSS es der Anwender:in ERMÖGLICHEN, einen neuen Kunden mit den +Pflichtfeldern Name und Anschrift (Straße, PLZ, Ort) sowie den optionalen Feldern E-Mail, +Telefon und USt-IdNr. anzulegen. + +**F-02:** WENN ein Kunde gespeichert wird, DANN MUSS das System eine eindeutige +Kundennummer (Präfix `K-`, fortlaufend, führende Nullen) vergeben und anzeigen. + +**F-03:** WENN ein Pflichtfeld fehlt (kein Name, keine vollständige Anschrift), DANN MUSS +das System das Speichern ablehnen und das fehlende Pflichtfeld benennen (Q-09). + +**F-04:** WENN eine E-Mail-Adresse angegeben wird, DANN MUSS das System deren Format +prüfen (mindestens ein `@` mit Zeichen davor und dahinter) und bei ungültigem Format das +Speichern ablehnen. + +### 4.2 Kundendaten ändern (aus BA-02) + +**F-05:** Das System MUSS es der Anwender:in ERMÖGLICHEN, die Felder Name, Anschrift, +E-Mail, Telefon und USt-IdNr. eines bestehenden Kunden zu ändern und persistent zu +speichern; die Pflichtfeldprüfung (F-03) gilt unverändert. + +**F-06:** WENN ein Kunde geändert wird, DANN MUSS das System sicherstellen, dass bereits +versendete Dokumente unverändert bleiben; dies ist gewährleistet, weil Gruppe A die +Kundendaten zum Erstellzeitpunkt in den Beleg übernimmt (GR-02). Die Komponente C +speichert ausschließlich den jeweils aktuellen Stand. + +**F-07:** Das System MUSS die Kundennummer nach der Vergabe vor jeder Änderung schützen; +ein Änderungsversuch an der Kundennummer MUSS abgelehnt werden. + +### 4.3 Kunde löschen (aus BA-03, GR-04) + +**F-08:** Das System MUSS es der Anwender:in ERMÖGLICHEN, einen Kunden ohne verknüpfte +Dokumente nach einer Bestätigungsabfrage dauerhaft zu löschen. + +**F-09 (GR-04):** WENN der zu löschende Kunde aktive oder archivierte Dokumente +referenziert, DANN MUSS das System den Löschvorgang ablehnen und einen Hinweis mit der +**Anzahl der verknüpften Dokumente** anzeigen. + +**F-10:** WENN ein Löschvorgang ausgelöst wird, DANN MUSS das System vor dem Löschen über +die Schnittstelle `KundenReferenzPruefung` (Gruppe A, Kapitel 6.2) die Anzahl der +Dokumente ermitteln, die den Kunden referenzieren. + +### 4.4 Kunden suchen und auflisten (aus BA-04) + +**F-11:** Das System MUSS es der Anwender:in ERMÖGLICHEN, alle Kunden in einer nach Name +sortierten Liste anzuzeigen. + +**F-12:** Das System MUSS es der Anwender:in ERMÖGLICHEN, Kunden über eine Volltextsuche +nach Name oder Kundennummer zu filtern; die Suche MUSS Teilzeichenketten finden und +Groß-/Kleinschreibung ignorieren. + +**F-13:** WENN eine Suche ausgeführt wird, DANN MUSS das System das gefilterte Ergebnis +innerhalb der Vorgabe aus Q-02 anzeigen (siehe NF-PERF-01). + +### 4.5 Übergreifende Regeln und Dienste + +**F-14 (Bereitstellung für Gruppe A):** Das System MUSS eine lesende Schnittstelle +`KundenService` bereitstellen, die es der Komponente Dokumentenzyklus (Gruppe A) +ERMÖGLICHT, einen Kunden anhand seiner Kundennummer abzurufen; existiert kein Kunde zur +Nummer, MUSS `null` zurückgegeben werden. + +**F-15 (Datenexport, Anteil an Q-08):** Das System MUSS es der Anwender:in ERMÖGLICHEN, +alle Kundenstammdaten vollständig in ein offenes, dokumentiertes Format (CSV, UTF-8, +Semikolon-getrennt, mit Kopfzeile) in das lokale Dateisystem zu exportieren. + +--- + +## 5. Nicht-funktionale Anforderungen + +**NF-PERF-01 (aus Q-01/Q-02):** Das System MUSS Such- und Auflistungsergebnisse der +Kundenverwaltung INNERHALB VON 1 SEKUNDE anzeigen, bei einem Datenbestand von bis zu +5.000 Kunden (Q-01) auf einem typischen Endanwender-PC. + +**NF-EXP-01 (aus Q-08, anteilig):** Das System MUSS den vollständigen Export der +Kundenstammdaten (F-15) INNERHALB VON 30 SEKUNDEN abschließen, bei einem Datenbestand +gemäß Q-01. + +**NF-USE-01 (aus Q-09):** Das System MUSS fehlende Pflichtangaben im Formular „Kunde +anlegen/ändern" so markieren und benennen, dass mindestens 80 % der Testpersonen die +fehlende Eingabe ohne externe Hilfe im ersten Korrekturversuch ergänzen können (Nachweis +durch Usability-Test mit mind. 5 Testpersonen). + +**NF-SEC-01 (aus Q-06, anteilig / DSGVO):** Das System MUSS 100 % der personenbezogenen +Kundendaten ausschließlich lokal auf dem Anwender-PC ablegen; eine Übertragung an externe +Dienste findet NICHT statt (Nachweis durch Netzwerk-Monitoring während eines +repräsentativen Nutzungslaufs). + +--- + +## 6. Daten und Schnittstellen + +Dieses Kapitel ist direkter Input für den Modultestplan (Kapitel 10). Datentypen werden +bereits als Java-Typen angegeben. + +### 6.1 Datenobjekte und Datentypen + +**Designgrundsätze (konsistent zu Gruppe A):** + +- **Kundennummern** werden als `String` geführt (festes Format mit Präfix und führenden + Nullen, z. B. `"K-000017"`) — **nicht** als `int`. +- **Postleitzahlen** werden als `String` geführt — **nicht** als `int`, weil führende + Nullen erhalten bleiben müssen (z. B. `"01067"` Dresden). +- Optionale Felder sind als `null` zulässig; Pflichtfelder dürfen weder `null` noch leer + sein. + +#### Klasse `Kunde` +| Attribut | Java-Typ | Beschreibung | +|---------------|---------------|--------------| +| kundennummer | `String` | eindeutig, vom System generiert, unveränderlich (F-02, F-07) | +| name | `String` | Pflichtfeld, nicht leer (Firmen- oder Personenname) | +| strasse | `String` | Pflichtfeld (Anschrift) | +| plz | `String` | Pflichtfeld (Anschrift, führende Nullen) | +| ort | `String` | Pflichtfeld (Anschrift) | +| eMail | `String` (optional, `null`) | Format gemäß F-04 | +| telefon | `String` (optional, `null`) | Freitext | +| ustIdNr | `String` (optional, `null`) | Umsatzsteuer-Identifikationsnummer | + +### 6.2 Schnittstellen + +**Externe Schnittstellen:** + +| ID | Schnittstelle | Zweck | +|-------|---------------------------|-------| +| IF-01 | Lokales Dateisystem | Persistenz der Kundenstammdaten | +| IF-04 | Datenexport-Schnittstelle | Export der Kundenstammdaten als CSV (F-15, Q-08) | + +**Interne Schnittstellen (zu anderen Komponenten), als Java-Interfaces skizziert:** + +```java +// Von Gruppe C IMPLEMENTIERT, von Gruppe A genutzt (lesender Zugriff) +public interface KundenService { + Kunde findeKunde(String kundennummer); // null, wenn nicht vorhanden +} + +// Von Gruppe A BEREITGESTELLT, von Gruppe C genutzt (Löschsperre GR-04, F-10) +public interface KundenReferenzPruefung { + // Anzahl aktiver und archivierter Dokumente, die den Kunden referenzieren + int anzahlVerknuepfterDokumente(String kundennummer); +} +``` + +**Komponenteninterne Dienste:** + +```java +public interface KundennummernGenerator { + // liefert die nächste fortlaufende Kundennummer, z. B. "K-000017" + String naechsteNummer(); +} + +public interface KundenRepository { + Kunde speichere(Kunde kunde); + void loesche(String kundennummer); + List alleSortiertNachName(); + List suche(String suchbegriff); // Name ODER Kundennummer +} +``` + +> IF-Satzschablone (Beispiel IF-04): *Das System MUSS eine Export-Schnittstelle +> bereitstellen, die es der Anwender:in ERMÖGLICHT, alle Kundenstammdaten als +> CSV-Datei (UTF-8, Semikolon-getrennt) in das lokale Dateisystem +> (`java.nio.file.Path`) zu exportieren.* + +--- + +## 7. Systemarchitektur (logisch, grob) + +Die Komponente folgt einer einfachen Schichtung: die GUI (Gruppe D) ruft den +`KundenVerwaltungsService` auf, der die Fachlogik (Validierung, Nummernvergabe, +Löschsperre GR-04) kapselt und die Dienste `KundennummernGenerator`, `KundenRepository` +und `KundenReferenzPruefung` (Gruppe A) nutzt. Gegenüber Gruppe A implementiert die +Komponente das Interface `KundenService`. Kunden werden über das `KundenRepository` im +lokalen Dateisystem persistiert. + +### 7.1 Klassendiagramm + + + +![Abbildung 1: UML-Klassendiagramm Kundenverwaltung (Gruppe C)] + +**Beschreibung zu Abbildung 1:** Das Klassendiagramm zeigt die Entitätsklasse `Kunde` +mit ihren Attributen (Kapitel 6.1). Der `KundenVerwaltungsService` orchestriert Anlegen, +Ändern, Löschen und Suche: er nutzt den `KundennummernGenerator` (Vergabe eindeutiger +Kundennummern, F-02), das `KundenRepository` (Persistenz, IF-01) und die von Gruppe A +bereitgestellte Schnittstelle `KundenReferenzPruefung` (Löschsperre GR-04, F-09/F-10). +Zusätzlich realisiert der `KundenVerwaltungsService` das Interface `KundenService` +(lesender Zugriff für Gruppe A, F-14). Dokumente (Gruppe A) referenzieren einen `Kunde` +ausschließlich über die Kundennummer (lose Kopplung). + +### 7.2 Sequenzdiagramm + + + +![Abbildung 2: UML-Sequenzdiagramm „Kunde löschen mit Löschsperre (GR-04)" (Gruppe C)] + +**Beschreibung zu Abbildung 2:** Das Sequenzdiagramm stellt den Ablauf *Kunde löschen* +dar. Die Anwender:in löst über die GUI (Gruppe D) `loescheKunde(kundennummer)` am +`KundenVerwaltungsService` aus. Dieser ermittelt zuerst über +`KundenReferenzPruefung.anzahlVerknuepfterDokumente(kundennummer)` (Gruppe A) die Anzahl +der Dokumente, die den Kunden referenzieren. Ist die Anzahl größer als 0, wird der +Löschvorgang abgelehnt und ein Hinweis mit der Anzahl der verknüpften Dokumente an die +GUI zurückgegeben (F-09, GR-04). Ist die Anzahl 0, fordert das System die Bestätigung der +Anwender:in an (F-08) und löscht den Kunden anschließend über +`KundenRepository.loesche(kundennummer)` dauerhaft aus dem lokalen Datenbestand. + +--- + +## 8. Testbare Abnahmekriterien + +**AC-C-01 (zu F-01–F-03, NF-PERF-01)** — *Kunde anlegen und auffinden* +Vorbedingung: Anwendung gestartet, Modul Kundenverwaltung geöffnet; höchste vergebene +Kundennummer = `K-000016`. +Aktion: Anwender:in erfasst einen neuen Kunden mit Pflichtfeldern (Name, Straße, PLZ, +Ort) und speichert. +Erwartet: Das System vergibt die Kundennummer `K-000017` und zeigt sie an; der Kunde +erscheint in der Suchergebnisliste innerhalb von ≤ 1 Sekunde (Q-02). + +**AC-C-02 (zu F-03, F-04, NF-USE-01)** — *Pflichtfeld- und Formatprüfung* +Vorbedingung: Formular „Kunde anlegen" geöffnet. +Aktion: Anwender:in lässt den Ort leer und versucht zu speichern; anschließend trägt sie +eine ungültige E-Mail-Adresse („max.mustermann") ein und versucht erneut zu speichern. +Erwartet: Beide Speicherversuche werden abgelehnt; das fehlende Pflichtfeld „Ort" bzw. +das ungültige E-Mail-Format wird benannt. + +**AC-C-03 (zu F-05–F-07)** — *Kundendaten ändern* +Vorbedingung: Ein Kunde mit mindestens einer verknüpften, versendeten Rechnung existiert. +Aktion: Anwender:in ändert einen Adressbestandteil und speichert. +Erwartet: Die Änderung ist persistent gespeichert; die bereits versendete Rechnung +(Gruppe A) zeigt weiterhin die ursprüngliche Anschrift; die Kundennummer ist unverändert. + +**AC-C-04 (zu F-08–F-10, GR-04)** — *Löschsperre für verknüpfte Kunden* +Vorbedingung: Kunde `K-000010` referenziert 3 Dokumente; Kunde `K-000011` ist unverknüpft. +Aktion: Anwender:in versucht, `K-000010` zu löschen; anschließend löscht sie `K-000011` +nach Bestätigung. +Erwartet: Das Löschen von `K-000010` wird abgelehnt, der Hinweis nennt die Anzahl „3" +verknüpfter Dokumente; `K-000011` ist dauerhaft entfernt und erscheint nicht mehr in der +Liste. + +**AC-C-05 (zu F-11–F-13, NF-PERF-01)** — *Kunden suchen und auflisten* +Vorbedingung: Mindestens 100 Kunden sind im System. +Aktion: Anwender:in sucht einen Kunden anhand eines Teils des Namens und anschließend +anhand der Kundennummer. +Erwartet: Beide Trefferlisten erscheinen in ≤ 1 Sekunde (Q-02), sind nach Name sortiert +und enthalten den gesuchten Kunden (auch bei abweichender Groß-/Kleinschreibung). + +**AC-C-06 (zu F-15, NF-EXP-01, NF-SEC-01)** — *Kundenstammdaten exportieren* +Vorbedingung: Mindestens 100 Kunden sind im System. +Aktion: Anwender:in exportiert die Kundenstammdaten; während des Nutzungslaufs läuft ein +Netzwerk-Monitoring. +Erwartet: Eine CSV-Datei (UTF-8, Semikolon-getrennt, mit Kopfzeile) mit allen Kunden und +allen Attributen liegt im gewählten Zielordner; der Export dauert ≤ 30 Sekunden; das +Monitoring zeigt keine Datenübertragung an externe Dienste. + +--- + +## 9. Traceability LH ↔ PH + +Jede für Gruppe C relevante Lastenheft-Anforderung ist mindestens einer +Pflichtenheft-Anforderung zugeordnet. + +| LH-Anforderung | Beschreibung (LH) | PH-Anforderung(en) | +|----------------|-------------------------------------------|---------------------------| +| BA-01 | Kunden anlegen | F-01, F-02, F-03, F-04 | +| BA-02 | Kundendaten ändern | F-05, F-06, F-07 | +| BA-03 | Kunden löschen | F-08, F-09, F-10 | +| BA-04 | Kunden suchen und auflisten | F-11, F-12, F-13 | +| GR-02 | Unveränderlichkeit versendeter Dokumente | F-06 (Abgrenzung) | +| GR-04 | Referenzielle Integrität Kunden | F-09, F-10 | +| Q-01 | Datenbestand 5.000 Kunden | NF-PERF-01 | +| Q-02 | Suche/Auflistung ≤ 1 s | NF-PERF-01, F-13 | +| Q-06 | Lokale Speicherung (DSGVO) | NF-SEC-01 | +| Q-08 | Datenexport ≤ 30 s | F-15, NF-EXP-01 | +| Q-09 | Pflichtfeldhinweise ≥ 80 % | NF-USE-01, F-03 | + +> Hinweis: Die Übernahme der Kundendaten in Belege (Snapshot zum Erstellzeitpunkt) liegt +> in der Verantwortung von Gruppe A; Komponente C liefert lediglich den jeweils aktuellen +> Datenstand über `KundenService`. PZ-01 (CRUD-Verwaltung der Kundenstammdaten) wird +> durch BA-01–BA-04 vollständig abgedeckt. + +--- + +## 10. Modultestplan + +Die folgenden Testfälle sind deterministisch (feste Ein-/Ausgaben) und mit JUnit 5 +umsetzbar. Die Schnittstelle `KundenReferenzPruefung` (Gruppe A) wird im Modultest durch +einen Stub/Mock ersetzt. + +| TC | Abgedeckte PH-Anf. | Vorbedingung | Eingabe | Erwartetes Ergebnis | +|-------|--------------------|--------------|---------|---------------------| +| TC-01 | F-01, F-02 | Höchste Kundennummer `K-000016` | Kunde („Muster GmbH", „Hauptstr. 1", „68163", „Mannheim") speichern | Kunde persistiert; Kundennummer = `K-000017` | +| TC-02 | F-02 (Format) | Zähler = 7 | `naechsteNummer()` | liefert `K-000007` (führende Nullen, `String`) | +| TC-03 | F-03, NF-USE-01 | Kunde ohne Ort | `speichere()` | Speichern abgelehnt; Validierungsfehler benennt „Ort" | +| TC-04 | F-03 | Kunde mit leerem Namen (`""`) | `speichere()` | Speichern abgelehnt; Validierungsfehler benennt „Name" | +| TC-05 | F-04 | Kunde mit E-Mail `"max.mustermann"` | `speichere()` | Speichern abgelehnt (ungültiges E-Mail-Format) | +| TC-06 | F-04 | Kunde mit E-Mail `"max@beispiel.de"` | `speichere()` | Kunde gespeichert (gültiges Format) | +| TC-07 | F-05 | Kunde `K-000017` mit Ort „Mannheim" | Ort auf „Heidelberg" ändern, speichern | gespeicherter Kunde hat ort = „Heidelberg" | +| TC-08 | F-07 | Kunde `K-000017` | Änderungsversuch der Kundennummer auf `K-999999` | wirft `IllegalArgumentException` / Änderung abgelehnt | +| TC-09 | F-08 | Stub: `anzahlVerknuepfterDokumente` → `0` | `loescheKunde("K-000011")` mit Bestätigung | Kunde entfernt; nicht mehr in `alleSortiertNachName()` | +| TC-10 | F-09, F-10, GR-04 | Stub: `anzahlVerknuepfterDokumente("K-000010")` → `3` | `loescheKunde("K-000010")` | Löschen abgelehnt; Kunde weiterhin vorhanden; Hinweis enthält Anzahl `3` | +| TC-11 | F-11 | Kunden „Zimmer", „Albrecht", „Maier" | `alleSortiertNachName()` | Reihenfolge: „Albrecht", „Maier", „Zimmer" | +| TC-12 | F-12 | Kunde „Muster GmbH" | `suche("MUSTER")` | Trefferliste enthält „Muster GmbH" (case-insensitive, Teilstring) | +| TC-13 | F-12, F-14 | Kunde `K-000017` vorhanden; `K-999999` nicht | `suche("K-000017")`; `findeKunde("K-999999")` | Treffer enthält `K-000017`; `findeKunde` liefert `null` | +| TC-14 | F-15 | 3 Kunden im Bestand | `exportiereCsv(ziel)` | CSV-Datei mit Kopfzeile + 3 Datenzeilen, Semikolon-getrennt, UTF-8 | + +Damit sind 14 Testfälle (> 10) spezifiziert, die alle funktionalen Kernregeln (F-02, +F-03, F-04, F-07, F-09, F-12, F-14, F-15) sowie die zentrale Geschäftsregel GR-04 und +die Qualitätsvorgaben (Q-02, Q-08, Q-09) abdecken. + +--- + +## 11. Anhänge + +### 11.1 Abkürzungen +| Abkürzung | Bedeutung | +|-----------|-----------| +| F | Funktionale Anforderung (Pflichtenheft) | +| NF | Nicht-funktionale Anforderung (Pflichtenheft) | +| IF | Schnittstelle (Interface) | +| AC | Abnahmekriterium | +| TC | Testfall (Test Case) | +| BA | Benutzeranforderung (Lastenheft) | +| GR | Geschäftsregel (Lastenheft) | +| Q | Qualitätsanforderung (Lastenheft) | +| CSV | Comma-Separated Values (offenes Exportformat) | +| USt-IdNr. | Umsatzsteuer-Identifikationsnummer | +| SRS | System Requirements Specification (Pflichtenheft) | + +### 11.2 Glossar +Es gilt das Glossar des Lastenhefts (§ 8.1) unverändert. + +### 11.3 Referenzen +Siehe Kapitel 1.5. diff --git a/Pflichtenheft_GruppeC.pdf b/Pflichtenheft_GruppeC.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9cc1fd035efbddd2d79a6af7f7944a40f7280d8d GIT binary patch literal 175100 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®Q)%5|HCo7zb>_ZQtR@BU6h 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

^<;@yREu%8s@l$b96PM!M@xJ)p_+b1*oQv!A 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

Neben der Kundenreferenz werden Name und Anschrift des Kunden als + * Snapshot zum Erstellzeitpunkt abgelegt, damit bereits erstellte Belege + * von späteren Stammdatenänderungen unberührt bleiben (C-F-06, AC-C-03). + * + *

Belege im Status {@code VERSENDET} oder {@code STORNIERT} lehnen jede + * inhaltliche Änderung mit {@link IllegalStateException} ab (F-24, GR-02). + */ +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "typ") +@JsonSubTypes({ + @JsonSubTypes.Type(value = Angebot.class, name = "ANGEBOT"), + @JsonSubTypes.Type(value = Auftragsbestaetigung.class, name = "AUFTRAGSBESTAETIGUNG"), + @JsonSubTypes.Type(value = Lieferschein.class, name = "LIEFERSCHEIN"), + @JsonSubTypes.Type(value = Rechnung.class, name = "RECHNUNG") +}) +@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, + getterVisibility = JsonAutoDetect.Visibility.NONE, + isGetterVisibility = JsonAutoDetect.Visibility.NONE, + setterVisibility = JsonAutoDetect.Visibility.NONE) +public abstract class Dokument { + + private String belegnummer; + private LocalDate datum; + private String kundenReferenz; + private String kundeName; + private String kundeAnschrift; + private List positionen = new ArrayList<>(); + private DokumentStatus status = DokumentStatus.ENTWURF; + private String vorgaengerNr; + private BigDecimal summeNetto = BigDecimal.ZERO.setScale(2); + private BigDecimal summeSteuer = BigDecimal.ZERO.setScale(2); + private BigDecimal summeBrutto = BigDecimal.ZERO.setScale(2); + + public abstract Belegtyp belegtyp(); + + /** Lehnt inhaltliche Änderungen versendeter/stornierter Belege ab (F-24, F-21, GR-02). */ + public void pruefeAenderbar() { + if (status == DokumentStatus.VERSENDET || status == DokumentStatus.STORNIERT) { + throw new IllegalStateException( + "Der Beleg " + belegnummer + " ist im Status " + status + + " und darf inhaltlich nicht mehr geändert werden (GR-02)."); + } + } + + /** Ersetzt die Positionen und berechnet die Summen neu (F-23). */ + public void setzePositionen(List neuePositionen) { + pruefeAenderbar(); + this.positionen = new ArrayList<>(neuePositionen); + berechneSummen(); + } + + /** Netto-, Steuer- und Bruttosumme aus den Positionen, Scale 2 (F-03, F-23, TC-03). */ + public void berechneSummen() { + BigDecimal netto = BigDecimal.ZERO; + BigDecimal steuer = BigDecimal.ZERO; + for (Dokumentposition position : positionen) { + netto = netto.add(position.getPositionssummeNetto()); + steuer = steuer.add(position.getSteuerbetrag()); + } + this.summeNetto = netto.setScale(2, RoundingMode.HALF_UP); + this.summeSteuer = steuer.setScale(2, RoundingMode.HALF_UP); + this.summeBrutto = this.summeNetto.add(this.summeSteuer); + } + + /** Statuswechsel auf {@code VERSENDET}; danach greift die Unveränderlichkeit (GR-02). */ + public void versende() { + if (status == DokumentStatus.VERSENDET) { + return; + } + if (status == DokumentStatus.STORNIERT) { + throw new IllegalStateException( + "Ein stornierter Beleg kann nicht versendet werden."); + } + status = DokumentStatus.VERSENDET; + } + + public String getBelegnummer() { + return belegnummer; + } + + /** Einmalige Vergabe durch das System (Kapitel 4, Belegnummern-Regel). */ + public void setBelegnummer(String belegnummer) { + if (this.belegnummer != null && !this.belegnummer.equals(belegnummer)) { + throw new IllegalArgumentException( + "Die Belegnummer ist nach der Vergabe unveränderlich."); + } + this.belegnummer = belegnummer; + } + + public LocalDate getDatum() { + return datum; + } + + public void setDatum(LocalDate datum) { + pruefeAenderbar(); + this.datum = datum; + } + + public String getKundenReferenz() { + return kundenReferenz; + } + + public String getKundeName() { + return kundeName; + } + + public String getKundeAnschrift() { + return kundeAnschrift; + } + + /** Übernimmt die Kundendaten als Snapshot zum Erstellzeitpunkt (GR-05, AC-C-03). */ + public void setzeKunde(String kundenReferenz, String kundeName, String kundeAnschrift) { + pruefeAenderbar(); + this.kundenReferenz = kundenReferenz; + this.kundeName = kundeName; + this.kundeAnschrift = kundeAnschrift; + } + + public List getPositionen() { + return Collections.unmodifiableList(positionen); + } + + public DokumentStatus getStatus() { + return status; + } + + protected void setzeStatus(DokumentStatus status) { + this.status = status; + } + + public String getVorgaengerNr() { + return vorgaengerNr; + } + + /** Rückreferenz auf den Vorgängerbeleg im Dokumentenzyklus (GR-05, F-22). */ + public void setVorgaengerNr(String vorgaengerNr) { + pruefeAenderbar(); + this.vorgaengerNr = vorgaengerNr; + } + + public BigDecimal getSummeNetto() { + return summeNetto; + } + + public BigDecimal getSummeSteuer() { + return summeSteuer; + } + + public BigDecimal getSummeBrutto() { + return summeBrutto; + } +} diff --git a/src/main/java/de/team1/faktura/dokumente/DokumentReferenzPruefung.java b/src/main/java/de/team1/faktura/dokumente/DokumentReferenzPruefung.java new file mode 100644 index 0000000..b595261 --- /dev/null +++ b/src/main/java/de/team1/faktura/dokumente/DokumentReferenzPruefung.java @@ -0,0 +1,31 @@ +package de.team1.faktura.dokumente; + +import de.team1.faktura.kunden.KundenReferenzPruefung; +import de.team1.faktura.produkte.ProduktReferenzPruefung; + +/** + * Von Gruppe A bereitgestellte Referenzprüfungen für die Löschsperren der + * Stammdatenmodule: GR-04 (Kunden, C-F-10) und B-F-10 (Produkte). + */ +public class DokumentReferenzPruefung implements KundenReferenzPruefung, ProduktReferenzPruefung { + + private final DokumentRepository repository; + + public DokumentReferenzPruefung(DokumentRepository repository) { + this.repository = repository; + } + + @Override + public int anzahlVerknuepfterDokumente(String kundennummer) { + return (int) repository.alle().stream() + .filter(d -> kundennummer.equals(d.getKundenReferenz())) + .count(); + } + + @Override + public boolean istProduktReferenziert(String produktnummer) { + return repository.alle().stream() + .flatMap(d -> d.getPositionen().stream()) + .anyMatch(p -> produktnummer.equals(p.getProduktReferenz())); + } +} diff --git a/src/main/java/de/team1/faktura/dokumente/DokumentRepository.java b/src/main/java/de/team1/faktura/dokumente/DokumentRepository.java new file mode 100644 index 0000000..4c6d604 --- /dev/null +++ b/src/main/java/de/team1/faktura/dokumente/DokumentRepository.java @@ -0,0 +1,17 @@ +package de.team1.faktura.dokumente; + +import java.util.List; + +/** + * Persistenz der Belege im lokalen Dateisystem (IF-01, A Kapitel 7). + * Belege werden nie gelöscht (GoBD: lückenlose Erfassung). + */ +public interface DokumentRepository { + + Dokument speichere(Dokument dokument); + + /** Liefert den Beleg zur Belegnummer oder {@code null}. */ + Dokument findeNachNummer(String belegnummer); + + List alle(); +} diff --git a/src/main/java/de/team1/faktura/dokumente/DokumentService.java b/src/main/java/de/team1/faktura/dokumente/DokumentService.java new file mode 100644 index 0000000..a175d7f --- /dev/null +++ b/src/main/java/de/team1/faktura/dokumente/DokumentService.java @@ -0,0 +1,54 @@ +package de.team1.faktura.dokumente; + +import java.nio.file.Path; +import java.time.LocalDate; +import java.util.List; + +/** + * Zentrale Fachlogik des Dokumentenzyklus (Pflichtenheft Gruppe A, + * Kapitel 7): Belegerzeugung, Summenberechnung, Nummernvergabe, + * Verknüpfung, Statusführung, Stornierung und PDF-Export. Wird von der + * Programmoberfläche (Gruppe D) über diese Schnittstelle genutzt. + */ +public interface DokumentService { + + /** Erstellt ein Angebot (F-01, F-02); {@code gueltigBis = null} → Datum + 30 Tage. */ + Angebot erstelleAngebot(String kundenNr, List positionen, LocalDate gueltigBis); + + /** Erstellt eine Auftragsbestätigung ohne Vorgängerbeleg (F-05, F-06). */ + Auftragsbestaetigung erstelleAuftragsbestaetigung(String kundenNr, List positionen); + + /** Erstellt einen Lieferschein ohne Vorgängerbeleg (F-08, F-09). */ + Lieferschein erstelleLieferschein(String kundenNr, List positionen, LocalDate lieferdatum); + + /** + * Erstellt eine Rechnung (F-11 bis F-15); {@code zahlungsziel = null} → + * Standard-Zahlungsziel 14 Kalendertage ab Rechnungsdatum (GR-06). + */ + Rechnung erstelleRechnung(String kundenNr, List positionen, + LocalDate rechnungsdatum, LocalDate zahlungsziel); + + /** + * Erzeugt den Folgebeleg im Dokumentenzyklus (GR-05, F-22): + * Angebot → Auftragsbestätigung → Lieferschein → Rechnung. Kunde, + * Positionen und Mengen werden übernommen, die Rückreferenz gespeichert. + */ + Dokument erzeugeFolgebeleg(String belegnummer); + + /** Setzt den Belegstatus auf {@code VERSENDET}; danach gilt GR-02. */ + void versende(String belegnummer); + + /** Storniert eine offene Rechnung (F-19, F-20). */ + void storniere(String rechnungsnummer); + + List alleDokumente(); + + /** Alle Rechnungen im Status {@code OFFEN} (F-20). */ + List offeneRechnungen(); + + /** Berechnet die Summen für die Wizard-Zusammenfassung (D-F-12), ohne zu speichern. */ + Summen berechneSummen(List positionen); + + /** Exportiert den Beleg als PDF in das lokale Dateisystem (F-04, F-07, F-10, F-15). */ + void exportierePdf(String belegnummer, Path zielDatei); +} diff --git a/src/main/java/de/team1/faktura/dokumente/DokumentStatus.java b/src/main/java/de/team1/faktura/dokumente/DokumentStatus.java new file mode 100644 index 0000000..881d2b9 --- /dev/null +++ b/src/main/java/de/team1/faktura/dokumente/DokumentStatus.java @@ -0,0 +1,11 @@ +package de.team1.faktura.dokumente; + +/** + * Lebenszyklus-Status eines Belegs (Pflichtenheft Gruppe A, Kapitel 6.1). + */ +public enum DokumentStatus { + ENTWURF, + OFFEN, + VERSENDET, + STORNIERT +} diff --git a/src/main/java/de/team1/faktura/dokumente/Dokumentposition.java b/src/main/java/de/team1/faktura/dokumente/Dokumentposition.java new file mode 100644 index 0000000..2354239 --- /dev/null +++ b/src/main/java/de/team1/faktura/dokumente/Dokumentposition.java @@ -0,0 +1,79 @@ +package de.team1.faktura.dokumente; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; + +import java.math.BigDecimal; +import java.math.RoundingMode; + +/** + * Position eines Belegs (Gruppe A, Kapitel 6.1). Bezeichnung, Einzelpreis + * und Steuersatz sind ein unveränderlicher Snapshot des Produkts zum + * Erstellzeitpunkt (GR-03, F-23). Beträge: {@code BigDecimal}, Scale 2, + * kaufmännische Rundung. + */ +@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, + getterVisibility = JsonAutoDetect.Visibility.NONE, + isGetterVisibility = JsonAutoDetect.Visibility.NONE, + setterVisibility = JsonAutoDetect.Visibility.NONE) +public class Dokumentposition { + + private String produktReferenz; + private String bezeichnung; + private int menge; + private BigDecimal einzelpreisNetto; + private BigDecimal steuersatz; + private BigDecimal positionssummeNetto; + + public Dokumentposition() { + } + + public Dokumentposition(String produktReferenz, String bezeichnung, int menge, + BigDecimal einzelpreisNetto, BigDecimal steuersatz) { + this.produktReferenz = produktReferenz; + this.bezeichnung = bezeichnung; + this.menge = menge; + this.einzelpreisNetto = einzelpreisNetto.setScale(2, RoundingMode.HALF_UP); + this.steuersatz = steuersatz; + this.positionssummeNetto = berechnePositionssummeNetto(); + } + + /** {@code einzelpreisNetto * menge}, Scale 2 (F-23, TC-02). */ + private BigDecimal berechnePositionssummeNetto() { + return einzelpreisNetto.multiply(BigDecimal.valueOf(menge)) + .setScale(2, RoundingMode.HALF_UP); + } + + public BigDecimal getPositionssummeNetto() { + return positionssummeNetto; + } + + /** Steuerbetrag der Position: {@code positionssummeNetto * steuersatz}, Scale 2 (F-23, TC-01). */ + public BigDecimal getSteuerbetrag() { + return positionssummeNetto.multiply(steuersatz).setScale(2, RoundingMode.HALF_UP); + } + + /** Bruttobetrag der Position: Netto + Steuer (TC-01). */ + public BigDecimal getPositionssummeBrutto() { + return positionssummeNetto.add(getSteuerbetrag()); + } + + public String getProduktReferenz() { + return produktReferenz; + } + + public String getBezeichnung() { + return bezeichnung; + } + + public int getMenge() { + return menge; + } + + public BigDecimal getEinzelpreisNetto() { + return einzelpreisNetto; + } + + public BigDecimal getSteuersatz() { + return steuersatz; + } +} diff --git a/src/main/java/de/team1/faktura/dokumente/EinfacherBelegnummernGenerator.java b/src/main/java/de/team1/faktura/dokumente/EinfacherBelegnummernGenerator.java new file mode 100644 index 0000000..01d1b8a --- /dev/null +++ b/src/main/java/de/team1/faktura/dokumente/EinfacherBelegnummernGenerator.java @@ -0,0 +1,49 @@ +package de.team1.faktura.dokumente; + +import java.util.HashMap; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * Belegnummern im Format {@code --NNNNNN}. Je Belegtyp und + * Jahr wird ein eigener fortlaufender Zähler auf Basis der höchsten bisher + * vergebenen Nummer geführt; Rechnungsnummern sind damit lückenlos, da + * Belege nie gelöscht werden (GR-01, F-12). + */ +public class EinfacherBelegnummernGenerator implements BelegnummernGenerator { + + private static final Pattern FORMAT = Pattern.compile("(AN|AB|LS|R)-(\\d{4})-(\\d{6})"); + + private final Map zaehler = new HashMap<>(); + + public EinfacherBelegnummernGenerator() { + } + + /** Initialisiert die Zähler aus den höchsten bereits vergebenen Nummern im Bestand. */ + public static EinfacherBelegnummernGenerator ausRepository(DokumentRepository repository) { + EinfacherBelegnummernGenerator generator = new EinfacherBelegnummernGenerator(); + for (Dokument dokument : repository.alle()) { + Matcher matcher = FORMAT.matcher(dokument.getBelegnummer()); + if (matcher.matches()) { + String schluessel = matcher.group(1) + "-" + matcher.group(2); + int wert = Integer.parseInt(matcher.group(3)) + 1; + generator.zaehler.merge(schluessel, wert, Math::max); + } + } + return generator; + } + + /** Setzt den Zähler explizit, z. B. {@code setzeZaehler(RECHNUNG, 2026, 7)} → {@code R-2026-000007}. */ + public void setzeZaehler(Belegtyp typ, int jahr, int wert) { + zaehler.put(typ.praefix() + "-" + jahr, wert); + } + + @Override + public synchronized String naechsteNummer(Belegtyp typ, int jahr) { + String schluessel = typ.praefix() + "-" + jahr; + int naechste = zaehler.getOrDefault(schluessel, 1); + zaehler.put(schluessel, naechste + 1); + return String.format("%s-%04d-%06d", typ.praefix(), jahr, naechste); + } +} diff --git a/src/main/java/de/team1/faktura/dokumente/JsonDokumentRepository.java b/src/main/java/de/team1/faktura/dokumente/JsonDokumentRepository.java new file mode 100644 index 0000000..1622527 --- /dev/null +++ b/src/main/java/de/team1/faktura/dokumente/JsonDokumentRepository.java @@ -0,0 +1,74 @@ +package de.team1.faktura.dokumente; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import de.team1.faktura.gemeinsam.JsonPersistenz; + +import java.io.IOException; +import java.io.UncheckedIOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; + +/** + * JSON-Datei-Persistenz der Belege (IF-01). Die Polymorphie der Belegtypen + * wird über das {@code typ}-Feld abgebildet (siehe {@link Dokument}). + */ +public class JsonDokumentRepository implements DokumentRepository { + + private final Path datei; + private final ObjectMapper mapper = JsonPersistenz.mapper(); + private final List dokumente = new ArrayList<>(); + + public JsonDokumentRepository(Path datei) { + this.datei = datei; + lade(); + } + + private void lade() { + if (!Files.exists(datei)) { + return; + } + try { + dokumente.addAll(mapper.readValue(datei.toFile(), new TypeReference>() { })); + } catch (IOException e) { + throw new UncheckedIOException("Belegbestand konnte nicht gelesen werden: " + datei, e); + } + } + + private void schreibe() { + try { + if (datei.getParent() != null) { + Files.createDirectories(datei.getParent()); + } + mapper.writeValue(datei.toFile(), dokumente); + } catch (IOException e) { + throw new UncheckedIOException("Belegbestand konnte nicht gespeichert werden: " + datei, e); + } + } + + @Override + public Dokument speichere(Dokument dokument) { + dokumente.removeIf(d -> d.getBelegnummer().equals(dokument.getBelegnummer())); + dokumente.add(dokument); + schreibe(); + return dokument; + } + + @Override + public Dokument findeNachNummer(String belegnummer) { + return dokumente.stream() + .filter(d -> d.getBelegnummer().equals(belegnummer)) + .findFirst() + .orElse(null); + } + + @Override + public List alle() { + return dokumente.stream() + .sorted(Comparator.comparing(Dokument::getBelegnummer)) + .toList(); + } +} diff --git a/src/main/java/de/team1/faktura/dokumente/Lieferschein.java b/src/main/java/de/team1/faktura/dokumente/Lieferschein.java new file mode 100644 index 0000000..b54e56c --- /dev/null +++ b/src/main/java/de/team1/faktura/dokumente/Lieferschein.java @@ -0,0 +1,25 @@ +package de.team1.faktura.dokumente; + +import java.time.LocalDate; + +/** + * Lieferschein (BA-11, A-F-08 bis F-10): Beleg mit Lieferdatum. + */ +public class Lieferschein extends Dokument { + + private LocalDate lieferdatum; + + @Override + public Belegtyp belegtyp() { + return Belegtyp.LIEFERSCHEIN; + } + + public LocalDate getLieferdatum() { + return lieferdatum; + } + + public void setLieferdatum(LocalDate lieferdatum) { + pruefeAenderbar(); + this.lieferdatum = lieferdatum; + } +} diff --git a/src/main/java/de/team1/faktura/dokumente/PdfBoxPdfExporter.java b/src/main/java/de/team1/faktura/dokumente/PdfBoxPdfExporter.java new file mode 100644 index 0000000..463a67b --- /dev/null +++ b/src/main/java/de/team1/faktura/dokumente/PdfBoxPdfExporter.java @@ -0,0 +1,152 @@ +package de.team1.faktura.dokumente; + +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDPageContentStream; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.font.PDFont; +import org.apache.pdfbox.pdmodel.font.PDType1Font; +import org.apache.pdfbox.pdmodel.font.Standard14Fonts; + +import java.io.IOException; +import java.io.UncheckedIOException; +import java.math.BigDecimal; +import java.nio.file.Files; +import java.nio.file.Path; +import java.time.format.DateTimeFormatter; + +/** + * PDF-Export der Belege mit Apache PDFBox (A-F-04, F-07, F-10, F-15). + * Rechnungen enthalten die Pflichtangaben gemäß § 14 UStG (F-13): + * Belegnummer, Rechnungs- und Leistungsdatum, Kundendaten, Positionen mit + * Einzel- und Gesamtbeträgen, Steuersatz/-betrag sowie die Summen. + */ +public class PdfBoxPdfExporter implements PdfExporter { + + private static final DateTimeFormatter DATUM = DateTimeFormatter.ofPattern("dd.MM.yyyy"); + private static final float RAND = 50; + private static final float ZEILENHOEHE = 14; + + private final PDFont normal = new PDType1Font(Standard14Fonts.FontName.HELVETICA); + private final PDFont fett = new PDType1Font(Standard14Fonts.FontName.HELVETICA_BOLD); + + @Override + public void exportiere(Dokument dokument, Path zielDatei) { + try (PDDocument pdf = new PDDocument()) { + Schreiber schreiber = new Schreiber(pdf); + + schreiber.zeile(fett, 16, dokument.belegtyp().anzeigename() + " " + dokument.getBelegnummer()); + if (dokument.getStatus() == DokumentStatus.STORNIERT) { + schreiber.zeile(fett, 12, "*** STORNIERT ***"); + } + schreiber.leer(); + schreiber.zeile(normal, 10, "Datum: " + format(dokument.getDatum())); + if (dokument instanceof Angebot angebot) { + schreiber.zeile(normal, 10, "Gültig bis: " + format(angebot.getGueltigBis())); + } + if (dokument instanceof Lieferschein lieferschein) { + schreiber.zeile(normal, 10, "Lieferdatum: " + format(lieferschein.getLieferdatum())); + } + if (dokument instanceof Rechnung rechnung) { + schreiber.zeile(normal, 10, "Leistungsdatum: " + format(rechnung.getLeistungsdatum())); + schreiber.zeile(normal, 10, "Zahlbar bis: " + format(rechnung.getZahlungsziel())); + } + if (dokument.getVorgaengerNr() != null) { + schreiber.zeile(normal, 10, "Referenz: " + dokument.getVorgaengerNr()); + } + schreiber.leer(); + schreiber.zeile(fett, 10, "Kunde"); + schreiber.zeile(normal, 10, dokument.getKundeName() + " (" + dokument.getKundenReferenz() + ")"); + schreiber.zeile(normal, 10, dokument.getKundeAnschrift()); + schreiber.leer(); + + schreiber.zeile(fett, 10, String.format("%-4s %-10s %-34s %6s %12s %6s %12s", + "Pos", "Produkt", "Bezeichnung", "Menge", "Einzelpreis", "USt", "Summe")); + int pos = 1; + for (Dokumentposition position : dokument.getPositionen()) { + schreiber.zeile(normal, 10, String.format("%-4d %-10s %-34s %6d %12s %5s%% %12s", + pos++, + position.getProduktReferenz(), + kuerze(position.getBezeichnung(), 34), + position.getMenge(), + betrag(position.getEinzelpreisNetto()), + prozent(position.getSteuersatz()), + betrag(position.getPositionssummeNetto()))); + } + schreiber.leer(); + schreiber.zeile(normal, 10, "Summe netto: " + betrag(dokument.getSummeNetto()) + " EUR"); + schreiber.zeile(normal, 10, "Umsatzsteuer: " + betrag(dokument.getSummeSteuer()) + " EUR"); + schreiber.zeile(fett, 11, "Summe brutto: " + betrag(dokument.getSummeBrutto()) + " EUR"); + + schreiber.schliesse(); + if (zielDatei.getParent() != null) { + Files.createDirectories(zielDatei.getParent()); + } + pdf.save(zielDatei.toFile()); + } catch (IOException e) { + throw new UncheckedIOException("PDF-Export fehlgeschlagen: " + zielDatei, e); + } + } + + private static String format(java.time.LocalDate datum) { + return datum == null ? "—" : DATUM.format(datum); + } + + private static String betrag(BigDecimal wert) { + return wert.toPlainString().replace('.', ','); + } + + private static String prozent(BigDecimal steuersatz) { + return steuersatz.multiply(new BigDecimal("100")).stripTrailingZeros().toPlainString(); + } + + private static String kuerze(String text, int maxLaenge) { + if (text == null) { + return ""; + } + return text.length() <= maxLaenge ? text : text.substring(0, maxLaenge - 1) + "…"; + } + + /** Zeilenweiser Schreiber mit automatischem Seitenumbruch. */ + private final class Schreiber { + + private final PDDocument pdf; + private PDPageContentStream inhalt; + private float y; + + Schreiber(PDDocument pdf) throws IOException { + this.pdf = pdf; + neueSeite(); + } + + private void neueSeite() throws IOException { + if (inhalt != null) { + inhalt.close(); + } + PDPage seite = new PDPage(PDRectangle.A4); + pdf.addPage(seite); + inhalt = new PDPageContentStream(pdf, seite); + y = PDRectangle.A4.getHeight() - RAND; + } + + void zeile(PDFont font, float groesse, String text) throws IOException { + if (y < RAND + ZEILENHOEHE) { + neueSeite(); + } + inhalt.beginText(); + inhalt.setFont(font, groesse); + inhalt.newLineAtOffset(RAND, y); + inhalt.showText(text); + inhalt.endText(); + y -= ZEILENHOEHE; + } + + void leer() { + y -= ZEILENHOEHE / 2; + } + + void schliesse() throws IOException { + inhalt.close(); + } + } +} diff --git a/src/main/java/de/team1/faktura/dokumente/PdfExporter.java b/src/main/java/de/team1/faktura/dokumente/PdfExporter.java new file mode 100644 index 0000000..e09552c --- /dev/null +++ b/src/main/java/de/team1/faktura/dokumente/PdfExporter.java @@ -0,0 +1,12 @@ +package de.team1.faktura.dokumente; + +import java.nio.file.Path; + +/** + * PDF-Export eines Belegs in das lokale Dateisystem + * (IF-01; A-F-04, F-07, F-10, F-15). + */ +public interface PdfExporter { + + void exportiere(Dokument dokument, Path zielDatei); +} diff --git a/src/main/java/de/team1/faktura/dokumente/Positionsangabe.java b/src/main/java/de/team1/faktura/dokumente/Positionsangabe.java new file mode 100644 index 0000000..59b80c1 --- /dev/null +++ b/src/main/java/de/team1/faktura/dokumente/Positionsangabe.java @@ -0,0 +1,9 @@ +package de.team1.faktura.dokumente; + +/** + * Eingabedaten einer Belegposition: Produktreferenz und Menge. + * Aus dieser Angabe erzeugt der {@link DokumentService} die + * {@link Dokumentposition} mit Preis-/Steuersatz-Snapshot (GR-03). + */ +public record Positionsangabe(String produktnummer, int menge) { +} diff --git a/src/main/java/de/team1/faktura/dokumente/Rechnung.java b/src/main/java/de/team1/faktura/dokumente/Rechnung.java new file mode 100644 index 0000000..166e83a --- /dev/null +++ b/src/main/java/de/team1/faktura/dokumente/Rechnung.java @@ -0,0 +1,59 @@ +package de.team1.faktura.dokumente; + +import java.time.LocalDate; + +/** + * Rechnung (BA-12 bis BA-14): führt die Pflichtangaben gemäß § 14 UStG + * (F-13), das Zahlungsziel (GR-06) und die Stornierung (F-19 bis F-21). + */ +public class Rechnung extends Dokument { + + private LocalDate leistungsdatum; + private LocalDate zahlungsziel; + private LocalDate storniertAm; + + @Override + public Belegtyp belegtyp() { + return Belegtyp.RECHNUNG; + } + + /** + * Storniert eine offene Rechnung (F-19, F-20): Status wird + * {@code STORNIERT}, der Vorgang wird mit Datum protokolliert. + */ + public void storniere(LocalDate datum) { + if (getStatus() != DokumentStatus.OFFEN) { + throw new IllegalStateException( + "Nur Rechnungen im Status OFFEN können storniert werden (F-19), " + + "aktueller Status: " + getStatus()); + } + setzeStatus(DokumentStatus.STORNIERT); + this.storniertAm = datum; + } + + public void storniere() { + storniere(LocalDate.now()); + } + + public LocalDate getLeistungsdatum() { + return leistungsdatum; + } + + public void setLeistungsdatum(LocalDate leistungsdatum) { + pruefeAenderbar(); + this.leistungsdatum = leistungsdatum; + } + + public LocalDate getZahlungsziel() { + return zahlungsziel; + } + + public void setZahlungsziel(LocalDate zahlungsziel) { + pruefeAenderbar(); + this.zahlungsziel = zahlungsziel; + } + + public LocalDate getStorniertAm() { + return storniertAm; + } +} diff --git a/src/main/java/de/team1/faktura/dokumente/StandardDokumentService.java b/src/main/java/de/team1/faktura/dokumente/StandardDokumentService.java new file mode 100644 index 0000000..3629bb5 --- /dev/null +++ b/src/main/java/de/team1/faktura/dokumente/StandardDokumentService.java @@ -0,0 +1,241 @@ +package de.team1.faktura.dokumente; + +import de.team1.faktura.gemeinsam.ValidierungsException; +import de.team1.faktura.kunden.Kunde; +import de.team1.faktura.kunden.KundenService; +import de.team1.faktura.produkte.Produkt; +import de.team1.faktura.produkte.ProduktService; + +import java.nio.file.Path; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; + +/** + * Standardimplementierung des {@link DokumentService} (Gruppe A, Kapitel 7): + * orchestriert {@link BelegnummernGenerator}, {@link KundenService}, + * {@link ProduktService}, {@link DokumentRepository} und {@link PdfExporter}. + */ +public class StandardDokumentService implements DokumentService { + + /** Standard-Zahlungsziel in Kalendertagen ab Rechnungsdatum (GR-06, F-14). */ + public static final int STANDARD_ZAHLUNGSZIEL_TAGE = 14; + + /** Standard-Gültigkeit eines Angebots in Kalendertagen ab Erstelldatum (F-02). */ + public static final int STANDARD_GUELTIGKEIT_TAGE = 30; + + private final DokumentRepository repository; + private final BelegnummernGenerator nummernGenerator; + private final KundenService kundenService; + private final ProduktService produktService; + private final PdfExporter pdfExporter; + + public StandardDokumentService(DokumentRepository repository, + BelegnummernGenerator nummernGenerator, + KundenService kundenService, + ProduktService produktService, + PdfExporter pdfExporter) { + this.repository = repository; + this.nummernGenerator = nummernGenerator; + this.kundenService = kundenService; + this.produktService = produktService; + this.pdfExporter = pdfExporter; + } + + @Override + public Angebot erstelleAngebot(String kundenNr, List positionen, LocalDate gueltigBis) { + Kunde kunde = pruefeKunde(kundenNr); + List dokumentpositionen = bauePositionen(positionen); + LocalDate datum = LocalDate.now(); + + Angebot angebot = new Angebot(); + angebot.setBelegnummer(nummernGenerator.naechsteNummer(Belegtyp.ANGEBOT, datum.getYear())); + angebot.setDatum(datum); + angebot.setzeKunde(kunde.getKundennummer(), kunde.getName(), kunde.anschrift()); + angebot.setGueltigBis(gueltigBis != null ? gueltigBis : datum.plusDays(STANDARD_GUELTIGKEIT_TAGE)); + angebot.setzePositionen(dokumentpositionen); + repository.speichere(angebot); + return angebot; + } + + @Override + public Auftragsbestaetigung erstelleAuftragsbestaetigung(String kundenNr, List positionen) { + Kunde kunde = pruefeKunde(kundenNr); + List dokumentpositionen = bauePositionen(positionen); + LocalDate datum = LocalDate.now(); + + Auftragsbestaetigung ab = new Auftragsbestaetigung(); + ab.setBelegnummer(nummernGenerator.naechsteNummer(Belegtyp.AUFTRAGSBESTAETIGUNG, datum.getYear())); + ab.setDatum(datum); + ab.setzeKunde(kunde.getKundennummer(), kunde.getName(), kunde.anschrift()); + ab.setzePositionen(dokumentpositionen); + repository.speichere(ab); + return ab; + } + + @Override + public Lieferschein erstelleLieferschein(String kundenNr, List positionen, LocalDate lieferdatum) { + Kunde kunde = pruefeKunde(kundenNr); + List dokumentpositionen = bauePositionen(positionen); + LocalDate datum = LocalDate.now(); + + Lieferschein lieferschein = new Lieferschein(); + lieferschein.setBelegnummer(nummernGenerator.naechsteNummer(Belegtyp.LIEFERSCHEIN, datum.getYear())); + lieferschein.setDatum(datum); + lieferschein.setzeKunde(kunde.getKundennummer(), kunde.getName(), kunde.anschrift()); + lieferschein.setLieferdatum(lieferdatum != null ? lieferdatum : datum); + lieferschein.setzePositionen(dokumentpositionen); + repository.speichere(lieferschein); + return lieferschein; + } + + @Override + public Rechnung erstelleRechnung(String kundenNr, List positionen, + LocalDate rechnungsdatum, LocalDate zahlungsziel) { + Kunde kunde = pruefeKunde(kundenNr); + List dokumentpositionen = bauePositionen(positionen); + if (rechnungsdatum == null) { + throw new ValidierungsException("Rechnungsdatum", + "Das Pflichtfeld 'Rechnungsdatum' fehlt (F-18)."); + } + + Rechnung rechnung = new Rechnung(); + rechnung.setBelegnummer(nummernGenerator.naechsteNummer(Belegtyp.RECHNUNG, rechnungsdatum.getYear())); + rechnung.setDatum(rechnungsdatum); + rechnung.setLeistungsdatum(rechnungsdatum); + rechnung.setzeKunde(kunde.getKundennummer(), kunde.getName(), kunde.anschrift()); + rechnung.setZahlungsziel(zahlungsziel != null + ? zahlungsziel + : rechnungsdatum.plusDays(STANDARD_ZAHLUNGSZIEL_TAGE)); + rechnung.setzePositionen(dokumentpositionen); + rechnung.setzeStatus(DokumentStatus.OFFEN); + repository.speichere(rechnung); + return rechnung; + } + + @Override + public Dokument erzeugeFolgebeleg(String belegnummer) { + Dokument vorgaenger = pruefeBeleg(belegnummer); + LocalDate datum = LocalDate.now(); + + Dokument folgebeleg = switch (vorgaenger.belegtyp()) { + case ANGEBOT -> new Auftragsbestaetigung(); + case AUFTRAGSBESTAETIGUNG -> { + Lieferschein lieferschein = new Lieferschein(); + lieferschein.setLieferdatum(datum); + yield lieferschein; + } + case LIEFERSCHEIN -> { + Rechnung rechnung = new Rechnung(); + rechnung.setLeistungsdatum(datum); + rechnung.setZahlungsziel(datum.plusDays(STANDARD_ZAHLUNGSZIEL_TAGE)); + yield rechnung; + } + case RECHNUNG -> throw new ValidierungsException("Beleg", + "Für eine Rechnung kann kein Folgebeleg erzeugt werden."); + }; + + folgebeleg.setBelegnummer(nummernGenerator.naechsteNummer(folgebeleg.belegtyp(), datum.getYear())); + folgebeleg.setDatum(datum); + // Übernahme von Kunde, Positionen und Mengen aus dem Vorgänger (GR-05, F-22) + folgebeleg.setzeKunde(vorgaenger.getKundenReferenz(), + vorgaenger.getKundeName(), vorgaenger.getKundeAnschrift()); + folgebeleg.setzePositionen(new ArrayList<>(vorgaenger.getPositionen())); + folgebeleg.setVorgaengerNr(vorgaenger.getBelegnummer()); + if (folgebeleg instanceof Rechnung rechnung) { + rechnung.setLeistungsdatum(datum); + rechnung.setzeStatus(DokumentStatus.OFFEN); + } + repository.speichere(folgebeleg); + return folgebeleg; + } + + @Override + public void versende(String belegnummer) { + Dokument dokument = pruefeBeleg(belegnummer); + dokument.versende(); + repository.speichere(dokument); + } + + @Override + public void storniere(String rechnungsnummer) { + Dokument dokument = pruefeBeleg(rechnungsnummer); + if (!(dokument instanceof Rechnung rechnung)) { + throw new ValidierungsException("Beleg", + "Nur Rechnungen können storniert werden (F-19)."); + } + rechnung.storniere(); + repository.speichere(rechnung); + } + + @Override + public List alleDokumente() { + return repository.alle(); + } + + @Override + public List offeneRechnungen() { + return repository.alle().stream() + .filter(d -> d instanceof Rechnung && d.getStatus() == DokumentStatus.OFFEN) + .map(d -> (Rechnung) d) + .toList(); + } + + @Override + public Summen berechneSummen(List positionen) { + Rechnung probe = new Rechnung(); + probe.setzePositionen(bauePositionen(positionen)); + return new Summen(probe.getSummeNetto(), probe.getSummeSteuer(), probe.getSummeBrutto()); + } + + @Override + public void exportierePdf(String belegnummer, Path zielDatei) { + pdfExporter.exportiere(pruefeBeleg(belegnummer), zielDatei); + } + + private Kunde pruefeKunde(String kundenNr) { + if (kundenNr == null || kundenNr.isBlank()) { + throw new ValidierungsException("Kunde", + "Das Pflichtfeld 'Kunde' fehlt (F-18)."); + } + Kunde kunde = kundenService.findeKunde(kundenNr); + if (kunde == null) { + throw new ValidierungsException("Kunde", + "Der Kunde " + kundenNr + " existiert nicht."); + } + return kunde; + } + + private Dokument pruefeBeleg(String belegnummer) { + Dokument dokument = repository.findeNachNummer(belegnummer); + if (dokument == null) { + throw new ValidierungsException("Beleg", + "Der Beleg " + belegnummer + " existiert nicht."); + } + return dokument; + } + + /** Baut die Positionen mit Produkt-Snapshot; mindestens eine Position erforderlich (F-18). */ + private List bauePositionen(List positionen) { + if (positionen == null || positionen.isEmpty()) { + throw new ValidierungsException("Position", + "Mindestens eine 'Position' ist erforderlich (F-18)."); + } + List ergebnis = new ArrayList<>(); + for (Positionsangabe angabe : positionen) { + if (angabe.menge() <= 0) { + throw new ValidierungsException("Menge", + "Die 'Menge' muss größer als 0 sein."); + } + Produkt produkt = produktService.findeProdukt(angabe.produktnummer()); + if (produkt == null) { + throw new ValidierungsException("Produkt", + "Das Produkt " + angabe.produktnummer() + " existiert nicht."); + } + // Snapshot von Bezeichnung, Einzelpreis und Steuersatz (GR-03, F-23) + ergebnis.add(new Dokumentposition(produkt.getProduktnummer(), produkt.getBezeichnung(), + angabe.menge(), produkt.getEinzelpreisNetto(), produkt.getSteuersatz())); + } + return ergebnis; + } +} diff --git a/src/main/java/de/team1/faktura/dokumente/Summen.java b/src/main/java/de/team1/faktura/dokumente/Summen.java new file mode 100644 index 0000000..cd4d69f --- /dev/null +++ b/src/main/java/de/team1/faktura/dokumente/Summen.java @@ -0,0 +1,10 @@ +package de.team1.faktura.dokumente; + +import java.math.BigDecimal; + +/** + * Berechnete Netto-, Steuer- und Bruttosumme eines Belegs (F-23); + * wird u. a. für die Wizard-Zusammenfassung (D-F-12) bereitgestellt. + */ +public record Summen(BigDecimal netto, BigDecimal steuer, BigDecimal brutto) { +} diff --git a/src/main/java/de/team1/faktura/gemeinsam/Csv.java b/src/main/java/de/team1/faktura/gemeinsam/Csv.java new file mode 100644 index 0000000..7e68feb --- /dev/null +++ b/src/main/java/de/team1/faktura/gemeinsam/Csv.java @@ -0,0 +1,43 @@ +package de.team1.faktura.gemeinsam; + +import java.io.IOException; +import java.io.UncheckedIOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; + +/** + * Hilfsfunktionen für den CSV-Export der Stammdaten + * (B-F-15, C-F-15: UTF-8, Semikolon-getrennt, mit Kopfzeile). + */ +public final class Csv { + + public static final String TRENNZEICHEN = ";"; + + private Csv() { + } + + /** Maskiert einen Wert für CSV; {@code null} wird als leeres Feld geschrieben. */ + public static String feld(String wert) { + if (wert == null) { + return ""; + } + if (wert.contains(TRENNZEICHEN) || wert.contains("\"") || wert.contains("\n")) { + return "\"" + wert.replace("\"", "\"\"") + "\""; + } + return wert; + } + + /** Schreibt die Zeilen als UTF-8-Datei in das lokale Dateisystem (IF-04). */ + public static void schreibe(Path zielDatei, List zeilen) { + try { + if (zielDatei.getParent() != null) { + Files.createDirectories(zielDatei.getParent()); + } + Files.write(zielDatei, zeilen, StandardCharsets.UTF_8); + } catch (IOException e) { + throw new UncheckedIOException("CSV-Export fehlgeschlagen: " + zielDatei, e); + } + } +} diff --git a/src/main/java/de/team1/faktura/gemeinsam/JsonPersistenz.java b/src/main/java/de/team1/faktura/gemeinsam/JsonPersistenz.java new file mode 100644 index 0000000..4467521 --- /dev/null +++ b/src/main/java/de/team1/faktura/gemeinsam/JsonPersistenz.java @@ -0,0 +1,26 @@ +package de.team1.faktura.gemeinsam; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; + +/** + * Zentral konfigurierter Jackson-ObjectMapper für die lokale + * JSON-Persistenz (IF-01). Datumswerte werden als ISO-Strings + * geschrieben (offenes, dokumentiertes Format, Q-08). + */ +public final class JsonPersistenz { + + private JsonPersistenz() { + } + + public static ObjectMapper mapper() { + ObjectMapper mapper = new ObjectMapper(); + mapper.registerModule(new JavaTimeModule()); + mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); + mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); + mapper.enable(SerializationFeature.INDENT_OUTPUT); + return mapper; + } +} diff --git a/src/main/java/de/team1/faktura/gemeinsam/LoeschAbgelehntException.java b/src/main/java/de/team1/faktura/gemeinsam/LoeschAbgelehntException.java new file mode 100644 index 0000000..0b9892e --- /dev/null +++ b/src/main/java/de/team1/faktura/gemeinsam/LoeschAbgelehntException.java @@ -0,0 +1,13 @@ +package de.team1.faktura.gemeinsam; + +/** + * Ablehnung eines Löschvorgangs wegen referenzieller Integrität + * (GR-04 Kunden, B-F-09 Produkte). Die Meldung enthält den Hinweis + * für die Anwender:in (bei Kunden inkl. Anzahl verknüpfter Dokumente). + */ +public class LoeschAbgelehntException extends RuntimeException { + + public LoeschAbgelehntException(String message) { + super(message); + } +} diff --git a/src/main/java/de/team1/faktura/gemeinsam/ValidierungsException.java b/src/main/java/de/team1/faktura/gemeinsam/ValidierungsException.java new file mode 100644 index 0000000..ee0daa4 --- /dev/null +++ b/src/main/java/de/team1/faktura/gemeinsam/ValidierungsException.java @@ -0,0 +1,20 @@ +package de.team1.faktura.gemeinsam; + +/** + * Validierungsfehler, der das betroffene Eingabefeld namentlich benennt + * (Q-09: Pflichtfeldhinweise; A-F-18, B-F-04, C-F-03, D-F-16). + */ +public class ValidierungsException extends RuntimeException { + + private final String feldname; + + public ValidierungsException(String feldname, String message) { + super(message); + this.feldname = feldname; + } + + /** Name des fehlenden oder ungültigen Eingabefelds, z. B. "Ort". */ + public String getFeldname() { + return feldname; + } +} diff --git a/src/main/java/de/team1/faktura/gui/BelegAktionen.java b/src/main/java/de/team1/faktura/gui/BelegAktionen.java new file mode 100644 index 0000000..4814d60 --- /dev/null +++ b/src/main/java/de/team1/faktura/gui/BelegAktionen.java @@ -0,0 +1,9 @@ +package de.team1.faktura.gui; + +/** + * Je Beleg verfügbare Aktionen der Dokumentliste (D-F-07, F-08, F-14): + * inhaltliche Änderungsaktionen sind bei versendeten/stornierten Belegen + * deaktiviert, der PDF-Export bleibt stets verfügbar. + */ +public record BelegAktionen(boolean stornierbar, boolean aenderbar, boolean pdfExport) { +} diff --git a/src/main/java/de/team1/faktura/gui/BelegDialog.java b/src/main/java/de/team1/faktura/gui/BelegDialog.java new file mode 100644 index 0000000..70217e5 --- /dev/null +++ b/src/main/java/de/team1/faktura/gui/BelegDialog.java @@ -0,0 +1,186 @@ +package de.team1.faktura.gui; + +import de.team1.faktura.dokumente.Belegtyp; +import de.team1.faktura.dokumente.Dokument; +import de.team1.faktura.dokumente.DokumentService; +import de.team1.faktura.dokumente.Positionsangabe; +import de.team1.faktura.gemeinsam.ValidierungsException; +import de.team1.faktura.kunden.Kunde; +import de.team1.faktura.kunden.KundenService; +import de.team1.faktura.produkte.Produkt; +import de.team1.faktura.produkte.ProduktService; + +import javax.swing.DefaultComboBoxModel; +import javax.swing.DefaultListModel; +import javax.swing.JButton; +import javax.swing.JComboBox; +import javax.swing.JDialog; +import javax.swing.JLabel; +import javax.swing.JList; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JSpinner; +import javax.swing.JTextField; +import javax.swing.SpinnerNumberModel; +import java.awt.BorderLayout; +import java.awt.FlowLayout; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.Insets; +import java.awt.Window; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; +import java.util.ArrayList; +import java.util.List; + +/** + * Dialog zur direkten Erstellung von Angebot, Auftragsbestätigung oder + * Lieferschein (BA-09 bis BA-11). Rechnungen werden über die geführte + * Erstellung (Wizard, D-F-09) angelegt; Folgebelege über die Dokumentliste. + */ +public class BelegDialog extends JDialog { + + private static final DateTimeFormatter DATUM = DateTimeFormatter.ofPattern("dd.MM.yyyy"); + + private final DokumentService dokumentService; + + private final JComboBox typWahl = new JComboBox<>( + new Belegtyp[]{Belegtyp.ANGEBOT, Belegtyp.AUFTRAGSBESTAETIGUNG, Belegtyp.LIEFERSCHEIN}); + private final JComboBox kundenWahl = new JComboBox<>(); + private final JComboBox produktWahl = new JComboBox<>(); + private final JSpinner mengeWahl = new JSpinner(new SpinnerNumberModel(1, 1, 99999, 1)); + private final DefaultListModel positionsListenModel = new DefaultListModel<>(); + private final JList positionsListe = new JList<>(positionsListenModel); + private final JLabel datumBeschriftung = new JLabel("Gültig bis (leer = +30 Tage):"); + private final JTextField datumFeld = new JTextField(10); + + private final List positionen = new ArrayList<>(); + + public BelegDialog(Window besitzer, DokumentService dokumentService, + KundenService kundenService, ProduktService produktService) { + super(besitzer, "Neuen Beleg erstellen", ModalityType.APPLICATION_MODAL); + this.dokumentService = dokumentService; + + kundenWahl.setModel(new DefaultComboBoxModel<>( + kundenService.suche("").toArray(new Kunde[0]))); + produktWahl.setModel(new DefaultComboBoxModel<>( + produktService.suche("").toArray(new Produkt[0]))); + + baueOberflaeche(); + pack(); + setLocationRelativeTo(besitzer); + } + + private void baueOberflaeche() { + setLayout(new BorderLayout(8, 8)); + + JPanel kopf = new JPanel(new GridBagLayout()); + GridBagConstraints c = new GridBagConstraints(); + c.insets = new Insets(3, 3, 3, 3); + c.anchor = GridBagConstraints.WEST; + c.fill = GridBagConstraints.HORIZONTAL; + + c.gridx = 0; + c.gridy = 0; + kopf.add(new JLabel("Belegtyp: *"), c); + c.gridx = 1; + typWahl.addActionListener(e -> aktualisiereDatumsfeld()); + kopf.add(typWahl, c); + + c.gridx = 0; + c.gridy = 1; + kopf.add(new JLabel("Kunde: *"), c); + c.gridx = 1; + kopf.add(kundenWahl, c); + + c.gridx = 0; + c.gridy = 2; + kopf.add(datumBeschriftung, c); + c.gridx = 1; + kopf.add(datumFeld, c); + add(kopf, BorderLayout.NORTH); + + JPanel mitte = new JPanel(new BorderLayout(5, 5)); + JPanel eingabe = new JPanel(new FlowLayout(FlowLayout.LEFT)); + eingabe.add(new JLabel("Produkt:")); + eingabe.add(produktWahl); + eingabe.add(new JLabel("Menge:")); + eingabe.add(mengeWahl); + JButton hinzufuegen = new JButton("Hinzufügen"); + hinzufuegen.addActionListener(e -> fuegePositionHinzu()); + eingabe.add(hinzufuegen); + JButton entfernen = new JButton("Entfernen"); + entfernen.addActionListener(e -> entfernePosition()); + eingabe.add(entfernen); + mitte.add(eingabe, BorderLayout.NORTH); + mitte.add(new JScrollPane(positionsListe), BorderLayout.CENTER); + add(mitte, BorderLayout.CENTER); + + JPanel knoepfe = new JPanel(new FlowLayout(FlowLayout.RIGHT)); + JButton abbrechen = new JButton("Abbrechen"); + abbrechen.addActionListener(e -> dispose()); + JButton erstellen = new JButton("Erstellen"); + erstellen.addActionListener(e -> erstelle()); + knoepfe.add(abbrechen); + knoepfe.add(erstellen); + add(knoepfe, BorderLayout.SOUTH); + } + + private void aktualisiereDatumsfeld() { + Belegtyp typ = (Belegtyp) typWahl.getSelectedItem(); + datumBeschriftung.setText(switch (typ) { + case ANGEBOT -> "Gültig bis (leer = +30 Tage):"; + case LIEFERSCHEIN -> "Lieferdatum (leer = heute):"; + default -> "Datum (entfällt):"; + }); + datumFeld.setEnabled(typ == Belegtyp.ANGEBOT || typ == Belegtyp.LIEFERSCHEIN); + } + + private void fuegePositionHinzu() { + Produkt produkt = (Produkt) produktWahl.getSelectedItem(); + if (produkt == null) { + return; + } + int menge = (Integer) mengeWahl.getValue(); + positionen.add(new Positionsangabe(produkt.getProduktnummer(), menge)); + positionsListenModel.addElement(menge + " x " + produkt.getBezeichnung() + + " (" + produkt.getProduktnummer() + ")"); + } + + private void entfernePosition() { + int index = positionsListe.getSelectedIndex(); + if (index >= 0) { + positionen.remove(index); + positionsListenModel.remove(index); + } + } + + private void erstelle() { + Kunde kunde = (Kunde) kundenWahl.getSelectedItem(); + String kundenNr = kunde == null ? null : kunde.getKundennummer(); + LocalDate datum; + try { + String text = datumFeld.getText().trim(); + datum = text.isEmpty() ? null : LocalDate.parse(text, DATUM); + } catch (DateTimeParseException e) { + MeldungsAnzeige.zeige(this, Meldung.fehler("Datum", + "Das Datum ist ungültig. Format: TT.MM.JJJJ"), null); + return; + } + try { + Belegtyp typ = (Belegtyp) typWahl.getSelectedItem(); + Dokument beleg = switch (typ) { + case ANGEBOT -> dokumentService.erstelleAngebot(kundenNr, positionen, datum); + case AUFTRAGSBESTAETIGUNG -> dokumentService.erstelleAuftragsbestaetigung(kundenNr, positionen); + case LIEFERSCHEIN -> dokumentService.erstelleLieferschein(kundenNr, positionen, datum); + default -> throw new IllegalStateException("Unerwarteter Belegtyp: " + typ); + }; + MeldungsAnzeige.zeige(this, Meldung.erfolg(beleg.belegtyp().anzeigename() + " " + + beleg.getBelegnummer() + " wurde erstellt."), null); + dispose(); + } catch (ValidierungsException e) { + MeldungsAnzeige.zeige(this, Meldung.fehler(e.getFeldname(), e.getMessage()), null); + } + } +} diff --git a/src/main/java/de/team1/faktura/gui/DokumentListenController.java b/src/main/java/de/team1/faktura/gui/DokumentListenController.java new file mode 100644 index 0000000..c847d50 --- /dev/null +++ b/src/main/java/de/team1/faktura/gui/DokumentListenController.java @@ -0,0 +1,61 @@ +package de.team1.faktura.gui; + +import de.team1.faktura.dokumente.Dokument; +import de.team1.faktura.dokumente.DokumentService; +import de.team1.faktura.dokumente.DokumentStatus; +import de.team1.faktura.dokumente.Rechnung; +import de.team1.faktura.gemeinsam.ValidierungsException; + +import java.util.List; + +/** + * Dialogführung der Dokumentliste (D-F-06 bis F-08, F-14, F-15): + * Statusfilter, verfügbare Aktionen je Beleg und Stornierung nach + * Bestätigung. GUI-frei und damit ohne Oberfläche testbar. + */ +public class DokumentListenController { + + private final DokumentService dokumentService; + + public DokumentListenController(DokumentService dokumentService) { + this.dokumentService = dokumentService; + } + + /** Dokumentliste, optional nach Status gefiltert (F-06); {@code null} = alle. */ + public List gefiltert(DokumentStatus statusFilter) { + return dokumentService.alleDokumente().stream() + .filter(d -> statusFilter == null || d.getStatus() == statusFilter) + .toList(); + } + + /** + * Verfügbare Aktionen je Beleg: Stornieren nur für Rechnungen im + * Status {@code OFFEN} (F-14); inhaltliche Änderungen nur solange der + * Beleg nicht versendet/storniert ist (F-08, GR-02); PDF-Export immer. + */ + public BelegAktionen aktionenFuer(Dokument dokument) { + boolean stornierbar = dokument instanceof Rechnung + && dokument.getStatus() == DokumentStatus.OFFEN; + boolean aenderbar = dokument.getStatus() == DokumentStatus.ENTWURF + || dokument.getStatus() == DokumentStatus.OFFEN; + return new BelegAktionen(stornierbar, aenderbar, true); + } + + /** + * Storniert erst nach Bestätigung der Anwender:in (F-15); ohne + * Bestätigung erfolgt kein Aufruf an die Fachkomponente. + */ + public Meldung storniere(String rechnungsnummer, boolean bestaetigt) { + if (!bestaetigt) { + return null; + } + try { + dokumentService.storniere(rechnungsnummer); + return Meldung.erfolg("Die Rechnung " + rechnungsnummer + " wurde storniert."); + } catch (ValidierungsException e) { + return Meldung.fehler(e.getFeldname(), e.getMessage()); + } catch (IllegalStateException e) { + return Meldung.fehler(null, e.getMessage()); + } + } +} diff --git a/src/main/java/de/team1/faktura/gui/DokumentListenPanel.java b/src/main/java/de/team1/faktura/gui/DokumentListenPanel.java new file mode 100644 index 0000000..22838a2 --- /dev/null +++ b/src/main/java/de/team1/faktura/gui/DokumentListenPanel.java @@ -0,0 +1,312 @@ +package de.team1.faktura.gui; + +import de.team1.faktura.dokumente.Dokument; +import de.team1.faktura.dokumente.DokumentService; +import de.team1.faktura.dokumente.DokumentStatus; +import de.team1.faktura.gemeinsam.ValidierungsException; +import de.team1.faktura.kunden.KundenService; +import de.team1.faktura.produkte.ProduktService; + +import javax.swing.JButton; +import javax.swing.JComboBox; +import javax.swing.JFileChooser; +import javax.swing.JLabel; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTable; +import javax.swing.ListSelectionModel; +import javax.swing.SwingUtilities; +import javax.swing.table.AbstractTableModel; +import java.awt.BorderLayout; +import java.awt.Desktop; +import java.awt.FlowLayout; +import java.awt.Window; +import java.net.URI; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +/** + * Modulansicht Dokumente (D-F-06 bis F-08, F-14, F-15): Dokumentliste mit + * Statusfilter, Belegaktionen (PDF-Export, optional Druck und E-Mail), + * geführte Rechnungserstellung (Wizard) und Stornierung mit + * Bestätigungsdialog. + */ +public class DokumentListenPanel extends JPanel implements ModulPanel { + + private static final DateTimeFormatter DATUM = DateTimeFormatter.ofPattern("dd.MM.yyyy"); + + private final DokumentService dokumentService; + private final KundenService kundenService; + private final ProduktService produktService; + private final DokumentListenController controller; + + private final JComboBox statusFilter = new JComboBox<>( + new String[]{"Alle", "ENTWURF", "OFFEN", "VERSENDET", "STORNIERT"}); + private final DokumentTabellenModel tabellenModel = new DokumentTabellenModel(); + private final JTable tabelle = new JTable(tabellenModel); + + private final JButton folgebelegKnopf = new JButton("Folgebeleg erzeugen"); + private final JButton versendenKnopf = new JButton("Versenden"); + private final JButton stornierenKnopf = new JButton("Stornieren"); + private final JButton pdfKnopf = new JButton("PDF exportieren"); + private final JButton druckenKnopf = new JButton("Drucken"); + private final JButton mailKnopf = new JButton("Per E-Mail senden"); + + public DokumentListenPanel(DokumentService dokumentService, + KundenService kundenService, + ProduktService produktService) { + this.dokumentService = dokumentService; + this.kundenService = kundenService; + this.produktService = produktService; + this.controller = new DokumentListenController(dokumentService); + baueOberflaeche(); + aktualisiere(); + } + + private void baueOberflaeche() { + setLayout(new BorderLayout(8, 8)); + + JPanel kopf = new JPanel(new FlowLayout(FlowLayout.LEFT)); + kopf.add(new JLabel("Statusfilter:")); + kopf.add(statusFilter); + statusFilter.addActionListener(e -> aktualisiere()); + + JButton neueRechnung = new JButton("Neue Rechnung (Assistent)…"); + neueRechnung.addActionListener(e -> oeffneWizard()); + JButton neuerBeleg = new JButton("Neuer Beleg…"); + neuerBeleg.addActionListener(e -> oeffneBelegDialog()); + kopf.add(neueRechnung); + kopf.add(neuerBeleg); + add(kopf, BorderLayout.NORTH); + + tabelle.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + tabelle.getSelectionModel().addListSelectionListener(e -> aktualisiereAktionen()); + add(new JScrollPane(tabelle), BorderLayout.CENTER); + + JPanel aktionen = new JPanel(new FlowLayout(FlowLayout.LEFT)); + folgebelegKnopf.addActionListener(e -> erzeugeFolgebeleg()); + versendenKnopf.addActionListener(e -> versende()); + stornierenKnopf.addActionListener(e -> storniere()); + pdfKnopf.addActionListener(e -> exportierePdf()); + druckenKnopf.addActionListener(e -> drucke()); + mailKnopf.addActionListener(e -> sendePerMail()); + aktionen.add(folgebelegKnopf); + aktionen.add(versendenKnopf); + aktionen.add(stornierenKnopf); + aktionen.add(pdfKnopf); + aktionen.add(druckenKnopf); + aktionen.add(mailKnopf); + add(aktionen, BorderLayout.SOUTH); + aktualisiereAktionen(); + } + + private Dokument auswahl() { + int zeile = tabelle.getSelectedRow(); + return zeile < 0 ? null : tabellenModel.dokumente.get(zeile); + } + + /** Aktiviert/deaktiviert die Belegaktionen gemäß Status (F-08, F-14). */ + private void aktualisiereAktionen() { + Dokument dokument = auswahl(); + if (dokument == null) { + for (JButton knopf : List.of(folgebelegKnopf, versendenKnopf, stornierenKnopf, + pdfKnopf, druckenKnopf, mailKnopf)) { + knopf.setEnabled(false); + } + return; + } + BelegAktionen verfuegbar = controller.aktionenFuer(dokument); + folgebelegKnopf.setEnabled(dokument.belegtyp() != de.team1.faktura.dokumente.Belegtyp.RECHNUNG); + versendenKnopf.setEnabled(verfuegbar.aenderbar()); + stornierenKnopf.setEnabled(verfuegbar.stornierbar()); + pdfKnopf.setEnabled(verfuegbar.pdfExport()); + druckenKnopf.setEnabled(verfuegbar.pdfExport()); + mailKnopf.setEnabled(verfuegbar.pdfExport()); + } + + private void oeffneWizard() { + RechnungsWizardController wizardController = + new RechnungsWizardController(dokumentService, kundenService, produktService); + Window fenster = SwingUtilities.getWindowAncestor(this); + RechnungsWizardDialog dialog = new RechnungsWizardDialog(fenster, wizardController, + kundenService, produktService); + dialog.setVisible(true); + aktualisiere(); + } + + private void oeffneBelegDialog() { + Window fenster = SwingUtilities.getWindowAncestor(this); + BelegDialog dialog = new BelegDialog(fenster, dokumentService, kundenService, produktService); + dialog.setVisible(true); + aktualisiere(); + } + + private void erzeugeFolgebeleg() { + Dokument dokument = auswahl(); + if (dokument == null) { + return; + } + try { + Dokument folgebeleg = dokumentService.erzeugeFolgebeleg(dokument.getBelegnummer()); + aktualisiere(); + MeldungsAnzeige.zeige(this, Meldung.erfolg(folgebeleg.belegtyp().anzeigename() + " " + + folgebeleg.getBelegnummer() + " wurde aus " + dokument.getBelegnummer() + + " erzeugt."), null); + } catch (ValidierungsException e) { + MeldungsAnzeige.zeige(this, Meldung.fehler(e.getFeldname(), e.getMessage()), null); + } + } + + private void versende() { + Dokument dokument = auswahl(); + if (dokument == null) { + return; + } + int antwort = JOptionPane.showConfirmDialog(this, + "Beleg " + dokument.getBelegnummer() + " als versendet markieren?\n" + + "Danach sind keine inhaltlichen Änderungen mehr möglich (GR-02).", + "Versenden", JOptionPane.YES_NO_OPTION); + if (antwort != JOptionPane.YES_OPTION) { + return; + } + try { + dokumentService.versende(dokument.getBelegnummer()); + aktualisiere(); + MeldungsAnzeige.zeige(this, Meldung.erfolg("Der Beleg " + dokument.getBelegnummer() + + " ist jetzt im Status VERSENDET."), null); + } catch (IllegalStateException e) { + MeldungsAnzeige.zeige(this, Meldung.fehler(null, e.getMessage()), null); + } + } + + /** Stornierung mit Bestätigungsdialog: Rechnungsnummer und Bruttosumme (F-15). */ + private void storniere() { + Dokument dokument = auswahl(); + if (dokument == null) { + return; + } + int antwort = JOptionPane.showConfirmDialog(this, + "Rechnung " + dokument.getBelegnummer() + " über " + + dokument.getSummeBrutto().toPlainString() + " EUR (brutto) wirklich stornieren?", + "Rechnung stornieren", JOptionPane.YES_NO_OPTION); + Meldung meldung = controller.storniere(dokument.getBelegnummer(), + antwort == JOptionPane.YES_OPTION); + aktualisiere(); + MeldungsAnzeige.zeige(this, meldung, null); + } + + private void exportierePdf() { + Dokument dokument = auswahl(); + if (dokument == null) { + return; + } + JFileChooser auswahlDialog = new JFileChooser(); + auswahlDialog.setSelectedFile(new java.io.File(dokument.getBelegnummer() + ".pdf")); + if (auswahlDialog.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) { + Path ziel = auswahlDialog.getSelectedFile().toPath(); + dokumentService.exportierePdf(dokument.getBelegnummer(), ziel); + MeldungsAnzeige.zeige(this, Meldung.erfolg("Das PDF wurde exportiert nach " + ziel), null); + } + } + + /** Optionaler Druck über das Betriebssystem (IF-02). */ + private void drucke() { + Dokument dokument = auswahl(); + if (dokument == null) { + return; + } + try { + Path temp = Files.createTempFile(dokument.getBelegnummer() + "-", ".pdf"); + dokumentService.exportierePdf(dokument.getBelegnummer(), temp); + Desktop.getDesktop().print(temp.toFile()); + } catch (Exception e) { + MeldungsAnzeige.zeige(this, Meldung.fehler(null, + "Drucken nicht möglich: " + e.getMessage()), null); + } + } + + /** Optionaler Versand über den Standard-E-Mail-Client (IF-03). */ + private void sendePerMail() { + Dokument dokument = auswahl(); + if (dokument == null) { + return; + } + try { + Path temp = Files.createTempFile(dokument.getBelegnummer() + "-", ".pdf"); + dokumentService.exportierePdf(dokument.getBelegnummer(), temp); + String betreff = URLEncoder.encode(dokument.belegtyp().anzeigename() + " " + + dokument.getBelegnummer(), StandardCharsets.UTF_8).replace("+", "%20"); + String text = URLEncoder.encode("Bitte das exportierte PDF anhängen:\n" + temp, + StandardCharsets.UTF_8).replace("+", "%20"); + Desktop.getDesktop().mail(new URI("mailto:?subject=" + betreff + "&body=" + text)); + } catch (Exception e) { + MeldungsAnzeige.zeige(this, Meldung.fehler(null, + "E-Mail-Client konnte nicht geöffnet werden: " + e.getMessage()), null); + } + } + + @Override + public boolean hatUngespeicherteAenderungen() { + return false; + } + + @Override + public void aktualisiere() { + DokumentStatus filter = switch ((String) statusFilter.getSelectedItem()) { + case "ENTWURF" -> DokumentStatus.ENTWURF; + case "OFFEN" -> DokumentStatus.OFFEN; + case "VERSENDET" -> DokumentStatus.VERSENDET; + case "STORNIERT" -> DokumentStatus.STORNIERT; + default -> null; + }; + tabellenModel.setze(controller.gefiltert(filter)); + aktualisiereAktionen(); + } + + private static final class DokumentTabellenModel extends AbstractTableModel { + + private static final String[] SPALTEN = + {"Belegnummer", "Typ", "Datum", "Kunde", "Bruttosumme", "Status"}; + + private List dokumente = new ArrayList<>(); + + void setze(List neueDokumente) { + this.dokumente = new ArrayList<>(neueDokumente); + fireTableDataChanged(); + } + + @Override + public int getRowCount() { + return dokumente.size(); + } + + @Override + public int getColumnCount() { + return SPALTEN.length; + } + + @Override + public String getColumnName(int spalte) { + return SPALTEN[spalte]; + } + + @Override + public Object getValueAt(int zeile, int spalte) { + Dokument dokument = dokumente.get(zeile); + return switch (spalte) { + case 0 -> dokument.getBelegnummer(); + case 1 -> dokument.belegtyp().anzeigename(); + case 2 -> dokument.getDatum() == null ? "" : DATUM.format(dokument.getDatum()); + case 3 -> dokument.getKundeName() + " (" + dokument.getKundenReferenz() + ")"; + case 4 -> dokument.getSummeBrutto().toPlainString() + " EUR"; + default -> dokument.getStatus().name(); + }; + } + } +} diff --git a/src/main/java/de/team1/faktura/gui/HauptFenster.java b/src/main/java/de/team1/faktura/gui/HauptFenster.java new file mode 100644 index 0000000..95f002e --- /dev/null +++ b/src/main/java/de/team1/faktura/gui/HauptFenster.java @@ -0,0 +1,76 @@ +package de.team1.faktura.gui; + +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JToolBar; +import java.awt.BorderLayout; +import java.awt.CardLayout; +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * Hauptfenster mit Navigation zu den drei Modulen Kundenverwaltung, + * Produktverwaltung und Dokumente (D-F-01). Beim Modulwechsel wird bei + * ungespeicherten Formulareingaben nachgefragt (D-F-02). + */ +public class HauptFenster extends JFrame { + + private final CardLayout karten = new CardLayout(); + private final JPanel kartenPanel = new JPanel(karten); + private final Map module = new LinkedHashMap<>(); + + private String aktuellesModul; + + public HauptFenster(KundenPanel kundenPanel, ProduktPanel produktPanel, + DokumentListenPanel dokumentePanel) { + super("Fakturierung — Team 1"); + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + setLayout(new BorderLayout()); + + module.put("Kunden", kundenPanel); + module.put("Produkte", produktPanel); + module.put("Dokumente", dokumentePanel); + + JToolBar navigation = new JToolBar(); + navigation.setFloatable(false); + for (Map.Entry eintrag : module.entrySet()) { + JButton knopf = new JButton(eintrag.getKey()); + knopf.addActionListener(e -> wechsleZu(eintrag.getKey())); + navigation.add(knopf); + } + add(navigation, BorderLayout.NORTH); + + kartenPanel.add(kundenPanel, "Kunden"); + kartenPanel.add(produktPanel, "Produkte"); + kartenPanel.add(dokumentePanel, "Dokumente"); + add(kartenPanel, BorderLayout.CENTER); + + aktuellesModul = "Kunden"; + karten.show(kartenPanel, aktuellesModul); + + setSize(1100, 650); + setLocationRelativeTo(null); + } + + /** Modulwechsel mit Nachfrage bei ungespeicherten Eingaben (D-F-02). */ + private void wechsleZu(String modulName) { + if (modulName.equals(aktuellesModul)) { + return; + } + ModulPanel aktuell = module.get(aktuellesModul); + if (aktuell.hatUngespeicherteAenderungen()) { + int antwort = JOptionPane.showConfirmDialog(this, + "Das Formular enthält ungespeicherte Eingaben. Modul trotzdem wechseln?", + "Ungespeicherte Eingaben", JOptionPane.YES_NO_OPTION, + JOptionPane.WARNING_MESSAGE); + if (antwort != JOptionPane.YES_OPTION) { + return; + } + } + aktuellesModul = modulName; + module.get(modulName).aktualisiere(); + karten.show(kartenPanel, modulName); + } +} diff --git a/src/main/java/de/team1/faktura/gui/KundenPanel.java b/src/main/java/de/team1/faktura/gui/KundenPanel.java new file mode 100644 index 0000000..f948bc0 --- /dev/null +++ b/src/main/java/de/team1/faktura/gui/KundenPanel.java @@ -0,0 +1,330 @@ +package de.team1.faktura.gui; + +import de.team1.faktura.gemeinsam.LoeschAbgelehntException; +import de.team1.faktura.gemeinsam.ValidierungsException; +import de.team1.faktura.kunden.Kunde; +import de.team1.faktura.kunden.KundenCsvExport; +import de.team1.faktura.kunden.KundenVerwaltungsService; + +import javax.swing.JButton; +import javax.swing.JComponent; +import javax.swing.JFileChooser; +import javax.swing.JLabel; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JSplitPane; +import javax.swing.JTable; +import javax.swing.JTextField; +import javax.swing.ListSelectionModel; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import javax.swing.table.AbstractTableModel; +import java.awt.BorderLayout; +import java.awt.FlowLayout; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.Insets; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * Modulansicht Kundenverwaltung (D-F-03 bis F-05): sortierte Liste mit + * Suchfeld, Formular mit gekennzeichneten Pflichtfeldern, CSV-Export. + */ +public class KundenPanel extends JPanel implements ModulPanel { + + private final KundenVerwaltungsService service; + private final KundenCsvExport csvExport; + + private final JTextField suchfeld = new JTextField(20); + private final KundenTabellenModel tabellenModel = new KundenTabellenModel(); + private final JTable tabelle = new JTable(tabellenModel); + + private final JTextField nameFeld = new JTextField(20); + private final JTextField strasseFeld = new JTextField(20); + private final JTextField plzFeld = new JTextField(8); + private final JTextField ortFeld = new JTextField(20); + private final JTextField eMailFeld = new JTextField(20); + private final JTextField telefonFeld = new JTextField(20); + private final JTextField ustIdNrFeld = new JTextField(20); + private final JLabel nummerAnzeige = new JLabel("— neuer Kunde —"); + private final Map felder = new LinkedHashMap<>(); + + private String gewaehlteNummer; + private boolean ungespeichert; + + public KundenPanel(KundenVerwaltungsService service, KundenCsvExport csvExport) { + this.service = service; + this.csvExport = csvExport; + felder.put("Name", nameFeld); + felder.put("Straße", strasseFeld); + felder.put("PLZ", plzFeld); + felder.put("Ort", ortFeld); + felder.put("E-Mail", eMailFeld); + baueOberflaeche(); + aktualisiere(); + } + + private void baueOberflaeche() { + setLayout(new BorderLayout(8, 8)); + + JPanel suchleiste = new JPanel(new FlowLayout(FlowLayout.LEFT)); + suchleiste.add(new JLabel("Suche (Name oder Kundennummer):")); + suchleiste.add(suchfeld); + suchfeld.getDocument().addDocumentListener(neuerSuchListener()); + add(suchleiste, BorderLayout.NORTH); + + tabelle.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + tabelle.getSelectionModel().addListSelectionListener(e -> { + if (!e.getValueIsAdjusting()) { + ladeAuswahl(); + } + }); + + JSplitPane teiler = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, + new JScrollPane(tabelle), baueFormular()); + teiler.setResizeWeight(0.55); + add(teiler, BorderLayout.CENTER); + } + + private JPanel baueFormular() { + JPanel formular = new JPanel(new GridBagLayout()); + GridBagConstraints c = new GridBagConstraints(); + c.insets = new Insets(3, 3, 3, 3); + c.anchor = GridBagConstraints.WEST; + c.fill = GridBagConstraints.HORIZONTAL; + + int zeile = 0; + zeile = formularZeile(formular, c, zeile, "Kundennummer:", nummerAnzeige); + zeile = formularZeile(formular, c, zeile, "Name: *", nameFeld); + zeile = formularZeile(formular, c, zeile, "Straße: *", strasseFeld); + zeile = formularZeile(formular, c, zeile, "PLZ: *", plzFeld); + zeile = formularZeile(formular, c, zeile, "Ort: *", ortFeld); + zeile = formularZeile(formular, c, zeile, "E-Mail:", eMailFeld); + zeile = formularZeile(formular, c, zeile, "Telefon:", telefonFeld); + zeile = formularZeile(formular, c, zeile, "USt-IdNr.:", ustIdNrFeld); + + DocumentListener aenderungsListener = neuerAenderungsListener(); + for (JComponent feld : List.of(nameFeld, strasseFeld, plzFeld, ortFeld, + eMailFeld, telefonFeld, ustIdNrFeld)) { + ((JTextField) feld).getDocument().addDocumentListener(aenderungsListener); + } + + JPanel knoepfe = new JPanel(new FlowLayout(FlowLayout.LEFT)); + JButton neu = new JButton("Neu"); + neu.addActionListener(e -> leereFormular()); + JButton speichern = new JButton("Speichern"); + speichern.addActionListener(e -> speichere()); + JButton loeschen = new JButton("Löschen"); + loeschen.addActionListener(e -> loesche()); + JButton export = new JButton("CSV-Export"); + export.addActionListener(e -> exportiere()); + knoepfe.add(neu); + knoepfe.add(speichern); + knoepfe.add(loeschen); + knoepfe.add(export); + + c.gridx = 0; + c.gridy = zeile; + c.gridwidth = 2; + formular.add(knoepfe, c); + return formular; + } + + private int formularZeile(JPanel formular, GridBagConstraints c, int zeile, + String beschriftung, JComponent feld) { + c.gridx = 0; + c.gridy = zeile; + c.gridwidth = 1; + c.weightx = 0; + formular.add(new JLabel(beschriftung), c); + c.gridx = 1; + c.weightx = 1; + formular.add(feld, c); + return zeile + 1; + } + + private void speichere() { + try { + Kunde kunde = gewaehlteNummer == null + ? new Kunde() + : service.findeKunde(gewaehlteNummer); + kunde.setName(nameFeld.getText().trim()); + kunde.setStrasse(strasseFeld.getText().trim()); + kunde.setPlz(plzFeld.getText().trim()); + kunde.setOrt(ortFeld.getText().trim()); + kunde.setEMail(leerZuNull(eMailFeld.getText())); + kunde.setTelefon(leerZuNull(telefonFeld.getText())); + kunde.setUstIdNr(leerZuNull(ustIdNrFeld.getText())); + + Kunde gespeichert = gewaehlteNummer == null + ? service.legeAn(kunde) + : service.aendere(kunde); + ungespeichert = false; + gewaehlteNummer = gespeichert.getKundennummer(); + nummerAnzeige.setText(gespeichert.getKundennummer()); + aktualisiere(); + MeldungsAnzeige.zeige(this, Meldung.erfolg("Der Kunde wurde gespeichert. Kundennummer: " + + gespeichert.getKundennummer()), felder); + } catch (ValidierungsException e) { + MeldungsAnzeige.zeige(this, Meldung.fehler(e.getFeldname(), e.getMessage()), felder); + } + } + + private void loesche() { + if (gewaehlteNummer == null) { + return; + } + int antwort = JOptionPane.showConfirmDialog(this, + "Kunde " + gewaehlteNummer + " wirklich dauerhaft löschen?", + "Kunde löschen", JOptionPane.YES_NO_OPTION); + if (antwort != JOptionPane.YES_OPTION) { + return; + } + try { + service.loescheKunde(gewaehlteNummer); + leereFormular(); + aktualisiere(); + MeldungsAnzeige.zeige(this, Meldung.erfolg("Der Kunde wurde gelöscht."), felder); + } catch (LoeschAbgelehntException e) { + MeldungsAnzeige.zeige(this, Meldung.fehler(null, e.getMessage()), felder); + } + } + + private void exportiere() { + JFileChooser auswahl = new JFileChooser(); + auswahl.setSelectedFile(new java.io.File("kunden.csv")); + if (auswahl.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) { + csvExport.exportiereCsv(auswahl.getSelectedFile().toPath()); + MeldungsAnzeige.zeige(this, Meldung.erfolg("Die Kundenstammdaten wurden exportiert nach " + + auswahl.getSelectedFile()), felder); + } + } + + private void ladeAuswahl() { + int zeile = tabelle.getSelectedRow(); + if (zeile < 0) { + return; + } + Kunde kunde = tabellenModel.kunden.get(zeile); + gewaehlteNummer = kunde.getKundennummer(); + nummerAnzeige.setText(kunde.getKundennummer()); + nameFeld.setText(kunde.getName()); + strasseFeld.setText(kunde.getStrasse()); + plzFeld.setText(kunde.getPlz()); + ortFeld.setText(kunde.getOrt()); + eMailFeld.setText(kunde.getEMail() == null ? "" : kunde.getEMail()); + telefonFeld.setText(kunde.getTelefon() == null ? "" : kunde.getTelefon()); + ustIdNrFeld.setText(kunde.getUstIdNr() == null ? "" : kunde.getUstIdNr()); + ungespeichert = false; + } + + private void leereFormular() { + gewaehlteNummer = null; + nummerAnzeige.setText("— neuer Kunde —"); + for (JComponent feld : List.of(nameFeld, strasseFeld, plzFeld, ortFeld, + eMailFeld, telefonFeld, ustIdNrFeld)) { + ((JTextField) feld).setText(""); + } + tabelle.clearSelection(); + ungespeichert = false; + } + + private static String leerZuNull(String text) { + String wert = text.trim(); + return wert.isEmpty() ? null : wert; + } + + @Override + public boolean hatUngespeicherteAenderungen() { + return ungespeichert; + } + + @Override + public void aktualisiere() { + String begriff = suchfeld.getText().trim(); + tabellenModel.setze(begriff.isEmpty() + ? service.alleSortiertNachName() + : service.suche(begriff)); + } + + private DocumentListener neuerSuchListener() { + return new DocumentListener() { + @Override + public void insertUpdate(DocumentEvent e) { + aktualisiere(); + } + + @Override + public void removeUpdate(DocumentEvent e) { + aktualisiere(); + } + + @Override + public void changedUpdate(DocumentEvent e) { + aktualisiere(); + } + }; + } + + private DocumentListener neuerAenderungsListener() { + return new DocumentListener() { + @Override + public void insertUpdate(DocumentEvent e) { + ungespeichert = true; + } + + @Override + public void removeUpdate(DocumentEvent e) { + ungespeichert = true; + } + + @Override + public void changedUpdate(DocumentEvent e) { + ungespeichert = true; + } + }; + } + + private static final class KundenTabellenModel extends AbstractTableModel { + + private static final String[] SPALTEN = {"Kundennummer", "Name", "Straße", "PLZ", "Ort"}; + + private List kunden = new ArrayList<>(); + + void setze(List neueKunden) { + this.kunden = new ArrayList<>(neueKunden); + fireTableDataChanged(); + } + + @Override + public int getRowCount() { + return kunden.size(); + } + + @Override + public int getColumnCount() { + return SPALTEN.length; + } + + @Override + public String getColumnName(int spalte) { + return SPALTEN[spalte]; + } + + @Override + public Object getValueAt(int zeile, int spalte) { + Kunde kunde = kunden.get(zeile); + return switch (spalte) { + case 0 -> kunde.getKundennummer(); + case 1 -> kunde.getName(); + case 2 -> kunde.getStrasse(); + case 3 -> kunde.getPlz(); + default -> kunde.getOrt(); + }; + } + } +} diff --git a/src/main/java/de/team1/faktura/gui/Meldung.java b/src/main/java/de/team1/faktura/gui/Meldung.java new file mode 100644 index 0000000..cc1906f --- /dev/null +++ b/src/main/java/de/team1/faktura/gui/Meldung.java @@ -0,0 +1,19 @@ +package de.team1.faktura.gui; + +/** + * Einheitliche Fehler- und Erfolgsmeldung der Oberfläche (D-F-16, F-17). + * + * @param typ Erfolg oder Fehler + * @param feldname betroffenes Eingabefeld bei Validierungsfehlern, sonst {@code null} + * @param text anzuzeigender Meldungstext + */ +public record Meldung(MeldungsTyp typ, String feldname, String text) { + + public static Meldung erfolg(String text) { + return new Meldung(MeldungsTyp.ERFOLG, null, text); + } + + public static Meldung fehler(String feldname, String text) { + return new Meldung(MeldungsTyp.FEHLER, feldname, text); + } +} diff --git a/src/main/java/de/team1/faktura/gui/MeldungsAnzeige.java b/src/main/java/de/team1/faktura/gui/MeldungsAnzeige.java new file mode 100644 index 0000000..89a402b --- /dev/null +++ b/src/main/java/de/team1/faktura/gui/MeldungsAnzeige.java @@ -0,0 +1,51 @@ +package de.team1.faktura.gui; + +import javax.swing.BorderFactory; +import javax.swing.JComponent; +import javax.swing.JOptionPane; +import javax.swing.UIManager; +import javax.swing.border.Border; +import java.awt.Color; +import java.awt.Component; +import java.util.Map; + +/** + * Einheitliche Darstellung von Fehler- und Erfolgsmeldungen (D-F-16, F-17): + * Das betroffene Eingabefeld wird optisch markiert UND die Meldung benennt + * das Feld namentlich (Q-09). + */ +public final class MeldungsAnzeige { + + private static final Border FEHLER_RAND = BorderFactory.createLineBorder(Color.RED, 2); + + private MeldungsAnzeige() { + } + + /** + * Zeigt die Meldung als Dialog an und markiert bei Validierungsfehlern + * das betroffene Feld rot; alle übrigen Felder werden zurückgesetzt. + */ + public static void zeige(Component parent, Meldung meldung, Map felder) { + if (felder != null) { + felder.forEach((name, feld) -> feld.setBorder(UIManager.getBorder("TextField.border"))); + if (meldung != null && meldung.feldname() != null) { + JComponent feld = felder.get(meldung.feldname()); + if (feld != null) { + feld.setBorder(FEHLER_RAND); + feld.requestFocusInWindow(); + } + } + } + if (meldung == null) { + return; + } + if (meldung.typ() == MeldungsTyp.FEHLER) { + JOptionPane.showMessageDialog(parent, meldung.text(), + meldung.feldname() != null ? "Eingabe unvollständig: " + meldung.feldname() : "Fehler", + JOptionPane.ERROR_MESSAGE); + } else { + JOptionPane.showMessageDialog(parent, meldung.text(), "Erfolg", + JOptionPane.INFORMATION_MESSAGE); + } + } +} diff --git a/src/main/java/de/team1/faktura/gui/MeldungsTyp.java b/src/main/java/de/team1/faktura/gui/MeldungsTyp.java new file mode 100644 index 0000000..b2894c7 --- /dev/null +++ b/src/main/java/de/team1/faktura/gui/MeldungsTyp.java @@ -0,0 +1,9 @@ +package de.team1.faktura.gui; + +/** + * Art einer Benutzer-Meldung (Gruppe D, Kapitel 6.1). + */ +public enum MeldungsTyp { + ERFOLG, + FEHLER +} diff --git a/src/main/java/de/team1/faktura/gui/ModulPanel.java b/src/main/java/de/team1/faktura/gui/ModulPanel.java new file mode 100644 index 0000000..75d1d31 --- /dev/null +++ b/src/main/java/de/team1/faktura/gui/ModulPanel.java @@ -0,0 +1,14 @@ +package de.team1.faktura.gui; + +/** + * Gemeinsame Schnittstelle der Modulansichten für das Hauptfenster + * (D-F-01, F-02): Navigation und Schutz ungespeicherter Eingaben. + */ +public interface ModulPanel { + + /** {@code true}, wenn das Formular ungespeicherte Eingaben enthält (F-02). */ + boolean hatUngespeicherteAenderungen(); + + /** Lädt die Daten der Ansicht neu (z. B. nach Modulwechsel). */ + void aktualisiere(); +} diff --git a/src/main/java/de/team1/faktura/gui/PositionsEingabe.java b/src/main/java/de/team1/faktura/gui/PositionsEingabe.java new file mode 100644 index 0000000..3cae4a1 --- /dev/null +++ b/src/main/java/de/team1/faktura/gui/PositionsEingabe.java @@ -0,0 +1,8 @@ +package de.team1.faktura.gui; + +/** + * Im Wizard erfasste Position: gewähltes Produkt und Stückzahl + * (Gruppe D, Kapitel 6.1). + */ +public record PositionsEingabe(String produktnummer, int menge) { +} diff --git a/src/main/java/de/team1/faktura/gui/ProduktPanel.java b/src/main/java/de/team1/faktura/gui/ProduktPanel.java new file mode 100644 index 0000000..3d4bc8c --- /dev/null +++ b/src/main/java/de/team1/faktura/gui/ProduktPanel.java @@ -0,0 +1,351 @@ +package de.team1.faktura.gui; + +import de.team1.faktura.gemeinsam.LoeschAbgelehntException; +import de.team1.faktura.gemeinsam.ValidierungsException; +import de.team1.faktura.produkte.Produkt; +import de.team1.faktura.produkte.ProduktCsvExport; +import de.team1.faktura.produkte.ProduktVerwaltungsService; + +import javax.swing.JButton; +import javax.swing.JComboBox; +import javax.swing.JComponent; +import javax.swing.JFileChooser; +import javax.swing.JLabel; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JSplitPane; +import javax.swing.JTable; +import javax.swing.JTextField; +import javax.swing.ListSelectionModel; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import javax.swing.table.AbstractTableModel; +import java.awt.BorderLayout; +import java.awt.FlowLayout; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.Insets; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * Modulansicht Produktverwaltung (D-F-03 bis F-05): sortierte Liste mit + * Suchfeld, Formular mit gekennzeichneten Pflichtfeldern, CSV-Export. + */ +public class ProduktPanel extends JPanel implements ModulPanel { + + private static final String[] STEUERSAETZE = {"19 %", "7 %", "0 %"}; + + private final ProduktVerwaltungsService service; + private final ProduktCsvExport csvExport; + + private final JTextField suchfeld = new JTextField(20); + private final ProduktTabellenModel tabellenModel = new ProduktTabellenModel(); + private final JTable tabelle = new JTable(tabellenModel); + + private final JTextField bezeichnungFeld = new JTextField(20); + private final JTextField beschreibungFeld = new JTextField(20); + private final JTextField preisFeld = new JTextField(10); + private final JComboBox steuersatzWahl = new JComboBox<>(STEUERSAETZE); + private final JTextField einheitFeld = new JTextField(10); + private final JLabel nummerAnzeige = new JLabel("— neues Produkt —"); + private final Map felder = new LinkedHashMap<>(); + + private String gewaehlteNummer; + private boolean ungespeichert; + + public ProduktPanel(ProduktVerwaltungsService service, ProduktCsvExport csvExport) { + this.service = service; + this.csvExport = csvExport; + felder.put("Bezeichnung", bezeichnungFeld); + felder.put("Einzelpreis", preisFeld); + felder.put("Steuersatz", steuersatzWahl); + baueOberflaeche(); + aktualisiere(); + } + + private void baueOberflaeche() { + setLayout(new BorderLayout(8, 8)); + + JPanel suchleiste = new JPanel(new FlowLayout(FlowLayout.LEFT)); + suchleiste.add(new JLabel("Suche (Bezeichnung oder Produktnummer):")); + suchleiste.add(suchfeld); + suchfeld.getDocument().addDocumentListener(neuerSuchListener()); + add(suchleiste, BorderLayout.NORTH); + + tabelle.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + tabelle.getSelectionModel().addListSelectionListener(e -> { + if (!e.getValueIsAdjusting()) { + ladeAuswahl(); + } + }); + + JSplitPane teiler = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, + new JScrollPane(tabelle), baueFormular()); + teiler.setResizeWeight(0.55); + add(teiler, BorderLayout.CENTER); + } + + private JPanel baueFormular() { + JPanel formular = new JPanel(new GridBagLayout()); + GridBagConstraints c = new GridBagConstraints(); + c.insets = new Insets(3, 3, 3, 3); + c.anchor = GridBagConstraints.WEST; + c.fill = GridBagConstraints.HORIZONTAL; + + int zeile = 0; + zeile = formularZeile(formular, c, zeile, "Produktnummer:", nummerAnzeige); + zeile = formularZeile(formular, c, zeile, "Bezeichnung: *", bezeichnungFeld); + zeile = formularZeile(formular, c, zeile, "Beschreibung:", beschreibungFeld); + zeile = formularZeile(formular, c, zeile, "Einzelpreis (netto): *", preisFeld); + zeile = formularZeile(formular, c, zeile, "Steuersatz: *", steuersatzWahl); + zeile = formularZeile(formular, c, zeile, "Einheit:", einheitFeld); + + DocumentListener aenderungsListener = neuerAenderungsListener(); + for (JTextField feld : List.of(bezeichnungFeld, beschreibungFeld, preisFeld, einheitFeld)) { + feld.getDocument().addDocumentListener(aenderungsListener); + } + + JPanel knoepfe = new JPanel(new FlowLayout(FlowLayout.LEFT)); + JButton neu = new JButton("Neu"); + neu.addActionListener(e -> leereFormular()); + JButton speichern = new JButton("Speichern"); + speichern.addActionListener(e -> speichere()); + JButton loeschen = new JButton("Löschen"); + loeschen.addActionListener(e -> loesche()); + JButton export = new JButton("CSV-Export"); + export.addActionListener(e -> exportiere()); + knoepfe.add(neu); + knoepfe.add(speichern); + knoepfe.add(loeschen); + knoepfe.add(export); + + c.gridx = 0; + c.gridy = zeile; + c.gridwidth = 2; + formular.add(knoepfe, c); + return formular; + } + + private int formularZeile(JPanel formular, GridBagConstraints c, int zeile, + String beschriftung, JComponent feld) { + c.gridx = 0; + c.gridy = zeile; + c.gridwidth = 1; + c.weightx = 0; + formular.add(new JLabel(beschriftung), c); + c.gridx = 1; + c.weightx = 1; + formular.add(feld, c); + return zeile + 1; + } + + private void speichere() { + try { + Produkt produkt = gewaehlteNummer == null + ? new Produkt() + : service.findeProdukt(gewaehlteNummer); + produkt.setBezeichnung(bezeichnungFeld.getText().trim()); + produkt.setBeschreibung(leerZuNull(beschreibungFeld.getText())); + produkt.setEinzelpreisNetto(parsePreis(preisFeld.getText())); + produkt.setSteuersatz(gewaehlterSteuersatz()); + produkt.setEinheit(leerZuNull(einheitFeld.getText())); + + Produkt gespeichert = gewaehlteNummer == null + ? service.legeAn(produkt) + : service.aendere(produkt); + ungespeichert = false; + gewaehlteNummer = gespeichert.getProduktnummer(); + nummerAnzeige.setText(gespeichert.getProduktnummer()); + aktualisiere(); + MeldungsAnzeige.zeige(this, Meldung.erfolg("Das Produkt wurde gespeichert. Produktnummer: " + + gespeichert.getProduktnummer()), felder); + } catch (ValidierungsException e) { + MeldungsAnzeige.zeige(this, Meldung.fehler(e.getFeldname(), e.getMessage()), felder); + } + } + + /** Akzeptiert deutsches und englisches Dezimaltrennzeichen. */ + private BigDecimal parsePreis(String text) { + String wert = text.trim().replace(',', '.'); + if (wert.isEmpty()) { + throw new ValidierungsException("Einzelpreis", + "Das Pflichtfeld 'Einzelpreis (netto)' fehlt."); + } + try { + return new BigDecimal(wert).setScale(2, java.math.RoundingMode.HALF_UP); + } catch (NumberFormatException e) { + throw new ValidierungsException("Einzelpreis", + "Der 'Einzelpreis (netto)' ist keine gültige Zahl: " + text); + } + } + + private BigDecimal gewaehlterSteuersatz() { + return switch (steuersatzWahl.getSelectedIndex()) { + case 0 -> new BigDecimal("0.19"); + case 1 -> new BigDecimal("0.07"); + default -> new BigDecimal("0.00"); + }; + } + + private void loesche() { + if (gewaehlteNummer == null) { + return; + } + int antwort = JOptionPane.showConfirmDialog(this, + "Produkt " + gewaehlteNummer + " wirklich dauerhaft löschen?", + "Produkt löschen", JOptionPane.YES_NO_OPTION); + if (antwort != JOptionPane.YES_OPTION) { + return; + } + try { + service.loescheProdukt(gewaehlteNummer); + leereFormular(); + aktualisiere(); + MeldungsAnzeige.zeige(this, Meldung.erfolg("Das Produkt wurde gelöscht."), felder); + } catch (LoeschAbgelehntException e) { + MeldungsAnzeige.zeige(this, Meldung.fehler(null, e.getMessage()), felder); + } + } + + private void exportiere() { + JFileChooser auswahl = new JFileChooser(); + auswahl.setSelectedFile(new java.io.File("produkte.csv")); + if (auswahl.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) { + csvExport.exportiereCsv(auswahl.getSelectedFile().toPath()); + MeldungsAnzeige.zeige(this, Meldung.erfolg("Die Produktstammdaten wurden exportiert nach " + + auswahl.getSelectedFile()), felder); + } + } + + private void ladeAuswahl() { + int zeile = tabelle.getSelectedRow(); + if (zeile < 0) { + return; + } + Produkt produkt = tabellenModel.produkte.get(zeile); + gewaehlteNummer = produkt.getProduktnummer(); + nummerAnzeige.setText(produkt.getProduktnummer()); + bezeichnungFeld.setText(produkt.getBezeichnung()); + beschreibungFeld.setText(produkt.getBeschreibung() == null ? "" : produkt.getBeschreibung()); + preisFeld.setText(produkt.getEinzelpreisNetto().toPlainString()); + steuersatzWahl.setSelectedIndex(switch (produkt.getSteuersatz().stripTrailingZeros().toPlainString()) { + case "0.19" -> 0; + case "0.07" -> 1; + default -> 2; + }); + einheitFeld.setText(produkt.getEinheit() == null ? "" : produkt.getEinheit()); + ungespeichert = false; + } + + private void leereFormular() { + gewaehlteNummer = null; + nummerAnzeige.setText("— neues Produkt —"); + for (JTextField feld : List.of(bezeichnungFeld, beschreibungFeld, preisFeld, einheitFeld)) { + feld.setText(""); + } + steuersatzWahl.setSelectedIndex(0); + tabelle.clearSelection(); + ungespeichert = false; + } + + private static String leerZuNull(String text) { + String wert = text.trim(); + return wert.isEmpty() ? null : wert; + } + + @Override + public boolean hatUngespeicherteAenderungen() { + return ungespeichert; + } + + @Override + public void aktualisiere() { + String begriff = suchfeld.getText().trim(); + tabellenModel.setze(begriff.isEmpty() + ? service.alleSortiertNachBezeichnung() + : service.suche(begriff)); + } + + private DocumentListener neuerSuchListener() { + return new DocumentListener() { + @Override + public void insertUpdate(DocumentEvent e) { + aktualisiere(); + } + + @Override + public void removeUpdate(DocumentEvent e) { + aktualisiere(); + } + + @Override + public void changedUpdate(DocumentEvent e) { + aktualisiere(); + } + }; + } + + private DocumentListener neuerAenderungsListener() { + return new DocumentListener() { + @Override + public void insertUpdate(DocumentEvent e) { + ungespeichert = true; + } + + @Override + public void removeUpdate(DocumentEvent e) { + ungespeichert = true; + } + + @Override + public void changedUpdate(DocumentEvent e) { + ungespeichert = true; + } + }; + } + + private static final class ProduktTabellenModel extends AbstractTableModel { + + private static final String[] SPALTEN = {"Produktnummer", "Bezeichnung", "Einzelpreis (netto)", "Steuersatz", "Einheit"}; + + private List produkte = new ArrayList<>(); + + void setze(List neueProdukte) { + this.produkte = new ArrayList<>(neueProdukte); + fireTableDataChanged(); + } + + @Override + public int getRowCount() { + return produkte.size(); + } + + @Override + public int getColumnCount() { + return SPALTEN.length; + } + + @Override + public String getColumnName(int spalte) { + return SPALTEN[spalte]; + } + + @Override + public Object getValueAt(int zeile, int spalte) { + Produkt produkt = produkte.get(zeile); + return switch (spalte) { + case 0 -> produkt.getProduktnummer(); + case 1 -> produkt.getBezeichnung(); + case 2 -> produkt.getEinzelpreisNetto().toPlainString() + " EUR"; + case 3 -> produkt.getSteuersatz().multiply(new BigDecimal("100")) + .stripTrailingZeros().toPlainString() + " %"; + default -> produkt.getEinheit() == null ? "" : produkt.getEinheit(); + }; + } + } +} diff --git a/src/main/java/de/team1/faktura/gui/RechnungsWizardController.java b/src/main/java/de/team1/faktura/gui/RechnungsWizardController.java new file mode 100644 index 0000000..87ea364 --- /dev/null +++ b/src/main/java/de/team1/faktura/gui/RechnungsWizardController.java @@ -0,0 +1,170 @@ +package de.team1.faktura.gui; + +import de.team1.faktura.dokumente.DokumentService; +import de.team1.faktura.dokumente.Positionsangabe; +import de.team1.faktura.dokumente.Rechnung; +import de.team1.faktura.dokumente.StandardDokumentService; +import de.team1.faktura.dokumente.Summen; +import de.team1.faktura.gemeinsam.ValidierungsException; +import de.team1.faktura.kunden.Kunde; +import de.team1.faktura.kunden.KundenService; +import de.team1.faktura.produkte.Produkt; +import de.team1.faktura.produkte.ProduktService; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.List; + +/** + * Dialogführung der geführten Rechnungserstellung (D-F-09 bis F-13): + * Schrittfolge, Vollständigkeitsprüfung je Schritt, Zusammenfassung und + * genau ein Speicheraufruf an den {@link DokumentService} (Gruppe A). + * GUI-frei und damit im Modultest ohne Oberfläche prüfbar. + */ +public class RechnungsWizardController { + + private static final DateTimeFormatter DATUM = DateTimeFormatter.ofPattern("dd.MM.yyyy"); + private static final List REIHENFOLGE = List.of(WizardSchritt.values()); + + private final DokumentService dokumentService; + private final KundenService kundenService; + private final ProduktService produktService; + private final RechnungsWizardModel model = new RechnungsWizardModel(); + + private Meldung letzteMeldung; + private Rechnung gespeicherteRechnung; + + public RechnungsWizardController(DokumentService dokumentService, + KundenService kundenService, + ProduktService produktService) { + this.dokumentService = dokumentService; + this.kundenService = kundenService; + this.produktService = produktService; + } + + public RechnungsWizardModel getModel() { + return model; + } + + public Meldung getLetzteMeldung() { + return letzteMeldung; + } + + public Rechnung getGespeicherteRechnung() { + return gespeicherteRechnung; + } + + /** + * Wechselt zum nächsten Schritt; bei unvollständiger Eingabe wird der + * Wechsel verhindert und die fehlende Eingabe benannt (F-10, Q-09). + */ + public boolean weiter() { + Meldung fehler = pruefeAktuellenSchritt(); + if (fehler != null) { + letzteMeldung = fehler; + return false; + } + int index = REIHENFOLGE.indexOf(model.getAktuellerSchritt()); + if (index < REIHENFOLGE.size() - 1) { + model.setAktuellerSchritt(REIHENFOLGE.get(index + 1)); + } + letzteMeldung = null; + return true; + } + + /** Rückkehr zum vorherigen Schritt ohne Verlust der Eingaben (F-11). */ + public void zurueck() { + int index = REIHENFOLGE.indexOf(model.getAktuellerSchritt()); + if (index > 0) { + model.setAktuellerSchritt(REIHENFOLGE.get(index - 1)); + } + letzteMeldung = null; + } + + /** Vollständigkeitsprüfung des aktuellen Schritts (F-10). */ + private Meldung pruefeAktuellenSchritt() { + return switch (model.getAktuellerSchritt()) { + case KUNDE_WAEHLEN -> model.getKundenNr() == null + ? Meldung.fehler("Kunde", "Bitte zuerst einen Kunden auswählen.") + : null; + case POSITIONEN_ERFASSEN -> pruefePositionen(); + case DATEN_BESTAETIGEN -> model.getRechnungsdatum() == null + ? Meldung.fehler("Rechnungsdatum", "Bitte ein Rechnungsdatum angeben.") + : null; + case ZUSAMMENFASSUNG, SPEICHERN -> null; + }; + } + + private Meldung pruefePositionen() { + if (model.getPositionen().isEmpty()) { + return Meldung.fehler("Position", "Bitte mindestens eine Position erfassen."); + } + for (PositionsEingabe position : model.getPositionen()) { + if (position.menge() <= 0) { + return Meldung.fehler("Menge", "Die Menge muss größer als 0 sein."); + } + } + return null; + } + + /** + * Zusammenfassung für Schritt 4 (F-12): Kunde, Positionen, Mengen, + * Summen (vom {@link DokumentService} berechnet), Rechnungsdatum und + * Zahlungsziel. + */ + public String erzeugeZusammenfassung() { + StringBuilder text = new StringBuilder(); + Kunde kunde = kundenService.findeKunde(model.getKundenNr()); + text.append("Kunde: ") + .append(kunde != null ? kunde.getName() + " (" + kunde.getKundennummer() + ")" + : model.getKundenNr()) + .append('\n'); + + text.append("Positionen:\n"); + for (PositionsEingabe position : model.getPositionen()) { + Produkt produkt = produktService.findeProdukt(position.produktnummer()); + String bezeichnung = produkt != null ? produkt.getBezeichnung() : position.produktnummer(); + text.append(" ").append(position.menge()).append(" x ") + .append(bezeichnung).append(" (").append(position.produktnummer()).append(")\n"); + } + + Summen summen = dokumentService.berechneSummen(positionsangaben()); + text.append("Summe netto: ").append(summen.netto().toPlainString()).append(" EUR\n"); + text.append("Umsatzsteuer: ").append(summen.steuer().toPlainString()).append(" EUR\n"); + text.append("Summe brutto: ").append(summen.brutto().toPlainString()).append(" EUR\n"); + + text.append("Rechnungsdatum: ").append(DATUM.format(model.getRechnungsdatum())).append('\n'); + LocalDate zahlungsziel = model.getZahlungsziel() != null + ? model.getZahlungsziel() + : model.getRechnungsdatum().plusDays(StandardDokumentService.STANDARD_ZAHLUNGSZIEL_TAGE); + text.append("Zahlungsziel: ").append(DATUM.format(zahlungsziel)); + if (model.getZahlungsziel() == null) { + text.append(" (Standard: 14 Tage)"); + } + return text.toString(); + } + + /** + * Löst genau einen Speicheraufruf am {@link DokumentService} aus (F-13); + * Validierungsfehler der Fachkomponente werden als Meldung mit dem + * betroffenen Feld dargestellt (F-05, F-16). + */ + public Meldung speichern() { + try { + gespeicherteRechnung = dokumentService.erstelleRechnung( + model.getKundenNr(), positionsangaben(), + model.getRechnungsdatum(), model.getZahlungsziel()); + letzteMeldung = Meldung.erfolg("Die Rechnung " + gespeicherteRechnung.getBelegnummer() + + " wurde gespeichert."); + } catch (ValidierungsException e) { + letzteMeldung = Meldung.fehler(e.getFeldname(), e.getMessage()); + } + return letzteMeldung; + } + + private List positionsangaben() { + return model.getPositionen().stream() + .map(p -> new Positionsangabe(p.produktnummer(), p.menge())) + .toList(); + } +} diff --git a/src/main/java/de/team1/faktura/gui/RechnungsWizardDialog.java b/src/main/java/de/team1/faktura/gui/RechnungsWizardDialog.java new file mode 100644 index 0000000..c560034 --- /dev/null +++ b/src/main/java/de/team1/faktura/gui/RechnungsWizardDialog.java @@ -0,0 +1,281 @@ +package de.team1.faktura.gui; + +import de.team1.faktura.kunden.Kunde; +import de.team1.faktura.kunden.KundenService; +import de.team1.faktura.produkte.Produkt; +import de.team1.faktura.produkte.ProduktService; + +import javax.swing.DefaultComboBoxModel; +import javax.swing.DefaultListModel; +import javax.swing.JButton; +import javax.swing.JComboBox; +import javax.swing.JDialog; +import javax.swing.JLabel; +import javax.swing.JList; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JSpinner; +import javax.swing.JTextArea; +import javax.swing.JTextField; +import javax.swing.ListSelectionModel; +import javax.swing.SpinnerNumberModel; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import java.awt.BorderLayout; +import java.awt.CardLayout; +import java.awt.FlowLayout; +import java.awt.Window; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; + +/** + * Wizard-Dialog der geführten Rechnungserstellung mit genau fünf Schritten + * (D-F-09 bis F-13); Dialogführung und Validierung liegen im GUI-freien + * {@link RechnungsWizardController}. + */ +public class RechnungsWizardDialog extends JDialog { + + private static final DateTimeFormatter DATUM = DateTimeFormatter.ofPattern("dd.MM.yyyy"); + + private final RechnungsWizardController controller; + private final KundenService kundenService; + private final ProduktService produktService; + + private final CardLayout karten = new CardLayout(); + private final JPanel kartenPanel = new JPanel(karten); + + private final JTextField kundenSuche = new JTextField(18); + private final DefaultListModel kundenListenModel = new DefaultListModel<>(); + private final JList kundenListe = new JList<>(kundenListenModel); + + private final JComboBox produktWahl = new JComboBox<>(); + private final JSpinner mengeWahl = new JSpinner(new SpinnerNumberModel(1, 1, 99999, 1)); + private final DefaultListModel positionsListenModel = new DefaultListModel<>(); + private final JList positionsListe = new JList<>(positionsListenModel); + + private final JTextField rechnungsdatumFeld = new JTextField(10); + private final JTextField zahlungszielFeld = new JTextField(10); + + private final JTextArea zusammenfassung = new JTextArea(14, 50); + + private final JButton zurueckKnopf = new JButton("< Zurück"); + private final JButton weiterKnopf = new JButton("Weiter >"); + private final JButton speichernKnopf = new JButton("Speichern"); + private final JLabel schrittAnzeige = new JLabel(); + + public RechnungsWizardDialog(Window besitzer, RechnungsWizardController controller, + KundenService kundenService, ProduktService produktService) { + super(besitzer, "Geführte Rechnungserstellung", ModalityType.APPLICATION_MODAL); + this.controller = controller; + this.kundenService = kundenService; + this.produktService = produktService; + baueOberflaeche(); + ladeKunden(""); + ladeProdukte(); + zeigeSchritt(); + pack(); + setLocationRelativeTo(besitzer); + } + + private void baueOberflaeche() { + setLayout(new BorderLayout(8, 8)); + add(schrittAnzeige, BorderLayout.NORTH); + + kartenPanel.add(baueSchrittKunde(), WizardSchritt.KUNDE_WAEHLEN.name()); + kartenPanel.add(baueSchrittPositionen(), WizardSchritt.POSITIONEN_ERFASSEN.name()); + kartenPanel.add(baueSchrittDaten(), WizardSchritt.DATEN_BESTAETIGEN.name()); + kartenPanel.add(baueSchrittZusammenfassung(), WizardSchritt.ZUSAMMENFASSUNG.name()); + kartenPanel.add(baueSchrittSpeichern(), WizardSchritt.SPEICHERN.name()); + add(kartenPanel, BorderLayout.CENTER); + + JPanel knoepfe = new JPanel(new FlowLayout(FlowLayout.RIGHT)); + JButton abbrechen = new JButton("Abbrechen"); + abbrechen.addActionListener(e -> dispose()); + zurueckKnopf.addActionListener(e -> { + controller.zurueck(); + zeigeSchritt(); + }); + weiterKnopf.addActionListener(e -> weiter()); + speichernKnopf.addActionListener(e -> speichere()); + knoepfe.add(abbrechen); + knoepfe.add(zurueckKnopf); + knoepfe.add(weiterKnopf); + knoepfe.add(speichernKnopf); + add(knoepfe, BorderLayout.SOUTH); + } + + /** Schritt 1: Kunde auswählen (F-09). */ + private JPanel baueSchrittKunde() { + JPanel panel = new JPanel(new BorderLayout(5, 5)); + JPanel suche = new JPanel(new FlowLayout(FlowLayout.LEFT)); + suche.add(new JLabel("Suche:")); + suche.add(kundenSuche); + kundenSuche.getDocument().addDocumentListener(new DocumentListener() { + @Override + public void insertUpdate(DocumentEvent e) { + ladeKunden(kundenSuche.getText().trim()); + } + + @Override + public void removeUpdate(DocumentEvent e) { + ladeKunden(kundenSuche.getText().trim()); + } + + @Override + public void changedUpdate(DocumentEvent e) { + ladeKunden(kundenSuche.getText().trim()); + } + }); + panel.add(suche, BorderLayout.NORTH); + + kundenListe.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + kundenListe.addListSelectionListener(e -> { + Kunde kunde = kundenListe.getSelectedValue(); + controller.getModel().setKundenNr(kunde == null ? null : kunde.getKundennummer()); + }); + panel.add(new JScrollPane(kundenListe), BorderLayout.CENTER); + return panel; + } + + /** Schritt 2: mindestens eine Produktposition mit Menge erfassen (F-09). */ + private JPanel baueSchrittPositionen() { + JPanel panel = new JPanel(new BorderLayout(5, 5)); + JPanel eingabe = new JPanel(new FlowLayout(FlowLayout.LEFT)); + eingabe.add(new JLabel("Produkt:")); + eingabe.add(produktWahl); + eingabe.add(new JLabel("Menge:")); + eingabe.add(mengeWahl); + JButton hinzufuegen = new JButton("Hinzufügen"); + hinzufuegen.addActionListener(e -> { + Produkt produkt = (Produkt) produktWahl.getSelectedItem(); + if (produkt == null) { + return; + } + int menge = (Integer) mengeWahl.getValue(); + controller.getModel().fuegePositionHinzu( + new PositionsEingabe(produkt.getProduktnummer(), menge)); + positionsListenModel.addElement(menge + " x " + produkt.getBezeichnung() + + " (" + produkt.getProduktnummer() + ")"); + }); + eingabe.add(hinzufuegen); + JButton entfernen = new JButton("Entfernen"); + entfernen.addActionListener(e -> { + int index = positionsListe.getSelectedIndex(); + if (index >= 0) { + controller.getModel().entfernePosition(index); + positionsListenModel.remove(index); + } + }); + eingabe.add(entfernen); + panel.add(eingabe, BorderLayout.NORTH); + panel.add(new JScrollPane(positionsListe), BorderLayout.CENTER); + return panel; + } + + /** Schritt 3: Rechnungsdatum und Zahlungsziel bestätigen (F-09). */ + private JPanel baueSchrittDaten() { + JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT)); + panel.add(new JLabel("Rechnungsdatum (TT.MM.JJJJ): *")); + rechnungsdatumFeld.setText(DATUM.format(LocalDate.now())); + panel.add(rechnungsdatumFeld); + panel.add(new JLabel("Zahlungsziel (leer = 14 Tage):")); + panel.add(zahlungszielFeld); + return panel; + } + + /** Schritt 4: Zusammenfassung prüfen (F-12). */ + private JPanel baueSchrittZusammenfassung() { + JPanel panel = new JPanel(new BorderLayout()); + zusammenfassung.setEditable(false); + panel.add(new JScrollPane(zusammenfassung), BorderLayout.CENTER); + return panel; + } + + /** Schritt 5: speichern (F-13). */ + private JPanel baueSchrittSpeichern() { + JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT)); + panel.add(new JLabel("Alle Angaben sind erfasst. Klicken Sie auf „Speichern“, " + + "um die Rechnung zu erstellen.")); + return panel; + } + + private void weiter() { + if (controller.getModel().getAktuellerSchritt() == WizardSchritt.DATEN_BESTAETIGEN + && !uebernehmeDaten()) { + return; + } + if (!controller.weiter()) { + MeldungsAnzeige.zeige(this, controller.getLetzteMeldung(), null); + return; + } + zeigeSchritt(); + } + + /** Übernimmt die Datumsfelder in das Modell; bei Formatfehlern Meldung (F-10, Q-09). */ + private boolean uebernehmeDaten() { + try { + controller.getModel().setRechnungsdatum( + LocalDate.parse(rechnungsdatumFeld.getText().trim(), DATUM)); + } catch (DateTimeParseException e) { + MeldungsAnzeige.zeige(this, Meldung.fehler("Rechnungsdatum", + "Das 'Rechnungsdatum' ist ungültig. Format: TT.MM.JJJJ"), null); + return false; + } + String zahlungsziel = zahlungszielFeld.getText().trim(); + if (zahlungsziel.isEmpty()) { + controller.getModel().setZahlungsziel(null); + } else { + try { + controller.getModel().setZahlungsziel(LocalDate.parse(zahlungsziel, DATUM)); + } catch (DateTimeParseException e) { + MeldungsAnzeige.zeige(this, Meldung.fehler("Zahlungsziel", + "Das 'Zahlungsziel' ist ungültig. Format: TT.MM.JJJJ"), null); + return false; + } + } + return true; + } + + private void speichere() { + Meldung meldung = controller.speichern(); + MeldungsAnzeige.zeige(this, meldung, null); + if (meldung.typ() == MeldungsTyp.ERFOLG) { + dispose(); + } + } + + private void zeigeSchritt() { + WizardSchritt schritt = controller.getModel().getAktuellerSchritt(); + if (schritt == WizardSchritt.ZUSAMMENFASSUNG) { + zusammenfassung.setText(controller.erzeugeZusammenfassung()); + } + karten.show(kartenPanel, schritt.name()); + schrittAnzeige.setText(" Schritt " + (schritt.ordinal() + 1) + " von 5: " + schrittName(schritt)); + zurueckKnopf.setEnabled(schritt.ordinal() > 0); + weiterKnopf.setEnabled(schritt != WizardSchritt.SPEICHERN); + speichernKnopf.setEnabled(schritt == WizardSchritt.SPEICHERN); + } + + private static String schrittName(WizardSchritt schritt) { + return switch (schritt) { + case KUNDE_WAEHLEN -> "Kunde auswählen"; + case POSITIONEN_ERFASSEN -> "Positionen erfassen"; + case DATEN_BESTAETIGEN -> "Rechnungsdatum und Zahlungsziel"; + case ZUSAMMENFASSUNG -> "Zusammenfassung prüfen"; + case SPEICHERN -> "Speichern"; + }; + } + + private void ladeKunden(String suchbegriff) { + kundenListenModel.clear(); + for (Kunde kunde : kundenService.suche(suchbegriff)) { + kundenListenModel.addElement(kunde); + } + } + + private void ladeProdukte() { + produktWahl.setModel(new DefaultComboBoxModel<>( + produktService.suche("").toArray(new Produkt[0]))); + } +} diff --git a/src/main/java/de/team1/faktura/gui/RechnungsWizardModel.java b/src/main/java/de/team1/faktura/gui/RechnungsWizardModel.java new file mode 100644 index 0000000..98c942d --- /dev/null +++ b/src/main/java/de/team1/faktura/gui/RechnungsWizardModel.java @@ -0,0 +1,64 @@ +package de.team1.faktura.gui; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; + +/** + * UI-Zustandsmodell der geführten Rechnungserstellung (Gruppe D, + * Kapitel 6.1). Frei von GUI-Framework-Klassen und damit ohne + * Oberfläche testbar. + */ +public class RechnungsWizardModel { + + private WizardSchritt aktuellerSchritt = WizardSchritt.KUNDE_WAEHLEN; + private String kundenNr; + private final List positionen = new ArrayList<>(); + private LocalDate rechnungsdatum = LocalDate.now(); + private LocalDate zahlungsziel; + + public WizardSchritt getAktuellerSchritt() { + return aktuellerSchritt; + } + + void setAktuellerSchritt(WizardSchritt schritt) { + this.aktuellerSchritt = schritt; + } + + public String getKundenNr() { + return kundenNr; + } + + public void setKundenNr(String kundenNr) { + this.kundenNr = kundenNr; + } + + public List getPositionen() { + return positionen; + } + + public void fuegePositionHinzu(PositionsEingabe position) { + positionen.add(position); + } + + public void entfernePosition(int index) { + positionen.remove(index); + } + + public LocalDate getRechnungsdatum() { + return rechnungsdatum; + } + + public void setRechnungsdatum(LocalDate rechnungsdatum) { + this.rechnungsdatum = rechnungsdatum; + } + + /** {@code null} = Standard-Zahlungsziel der Gruppe A (GR-06: +14 Tage). */ + public LocalDate getZahlungsziel() { + return zahlungsziel; + } + + public void setZahlungsziel(LocalDate zahlungsziel) { + this.zahlungsziel = zahlungsziel; + } +} diff --git a/src/main/java/de/team1/faktura/gui/StammdatenController.java b/src/main/java/de/team1/faktura/gui/StammdatenController.java new file mode 100644 index 0000000..4c39e5a --- /dev/null +++ b/src/main/java/de/team1/faktura/gui/StammdatenController.java @@ -0,0 +1,31 @@ +package de.team1.faktura.gui; + +import de.team1.faktura.kunden.Kunde; +import de.team1.faktura.kunden.KundenService; +import de.team1.faktura.produkte.Produkt; +import de.team1.faktura.produkte.ProduktService; + +import java.util.List; + +/** + * Controller der Stammdaten-Ansichten (D-F-03): delegiert Suchanfragen an + * die Dienste der Gruppen B und C; die GUI rechnet und filtert selbst nicht. + */ +public class StammdatenController { + + private final KundenService kundenService; + private final ProduktService produktService; + + public StammdatenController(KundenService kundenService, ProduktService produktService) { + this.kundenService = kundenService; + this.produktService = produktService; + } + + public List sucheKunden(String suchbegriff) { + return kundenService.suche(suchbegriff); + } + + public List sucheProdukte(String suchbegriff) { + return produktService.suche(suchbegriff); + } +} diff --git a/src/main/java/de/team1/faktura/gui/WizardSchritt.java b/src/main/java/de/team1/faktura/gui/WizardSchritt.java new file mode 100644 index 0000000..ac17725 --- /dev/null +++ b/src/main/java/de/team1/faktura/gui/WizardSchritt.java @@ -0,0 +1,12 @@ +package de.team1.faktura.gui; + +/** + * Die fünf Schritte der geführten Rechnungserstellung (D-F-09, BA-13). + */ +public enum WizardSchritt { + KUNDE_WAEHLEN, + POSITIONEN_ERFASSEN, + DATEN_BESTAETIGEN, + ZUSAMMENFASSUNG, + SPEICHERN +} diff --git a/src/main/java/de/team1/faktura/kunden/EinfacherKundennummernGenerator.java b/src/main/java/de/team1/faktura/kunden/EinfacherKundennummernGenerator.java new file mode 100644 index 0000000..2e49531 --- /dev/null +++ b/src/main/java/de/team1/faktura/kunden/EinfacherKundennummernGenerator.java @@ -0,0 +1,43 @@ +package de.team1.faktura.kunden; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * Fortlaufende Kundennummern im Format {@code K-NNNNNN} (Präfix, führende + * Nullen) auf Basis der höchsten bisher vergebenen Nummer (C, Kapitel 4). + */ +public class EinfacherKundennummernGenerator implements KundennummernGenerator { + + private static final Pattern FORMAT = Pattern.compile("K-(\\d{6})"); + + private int zaehler; + + /** @param zaehler Wert der nächsten zu vergebenden Nummer (TC-02: Zähler 7 → {@code K-000007}). */ + public EinfacherKundennummernGenerator(int zaehler) { + this.zaehler = zaehler; + } + + /** Initialisiert den Zähler aus der höchsten bereits vergebenen Nummer im Bestand. */ + public static EinfacherKundennummernGenerator ausRepository(KundenRepository repository) { + int hoechste = repository.alleSortiertNachName().stream() + .map(Kunde::getKundennummer) + .mapToInt(EinfacherKundennummernGenerator::nummernWert) + .max() + .orElse(0); + return new EinfacherKundennummernGenerator(hoechste + 1); + } + + private static int nummernWert(String kundennummer) { + if (kundennummer == null) { + return 0; + } + Matcher matcher = FORMAT.matcher(kundennummer); + return matcher.matches() ? Integer.parseInt(matcher.group(1)) : 0; + } + + @Override + public synchronized String naechsteNummer() { + return String.format("K-%06d", zaehler++); + } +} diff --git a/src/main/java/de/team1/faktura/kunden/JsonKundenRepository.java b/src/main/java/de/team1/faktura/kunden/JsonKundenRepository.java new file mode 100644 index 0000000..ae346f6 --- /dev/null +++ b/src/main/java/de/team1/faktura/kunden/JsonKundenRepository.java @@ -0,0 +1,92 @@ +package de.team1.faktura.kunden; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import de.team1.faktura.gemeinsam.JsonPersistenz; + +import java.io.IOException; +import java.io.UncheckedIOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.Locale; + +/** + * JSON-Datei-Persistenz der Kunden (IF-01). Der Bestand wird vollständig + * im Speicher gehalten (Q-01/Q-02: bis 5.000 Kunden, Suche ≤ 1 s) und bei + * jeder Änderung in die Datei geschrieben. + */ +public class JsonKundenRepository implements KundenRepository { + + private final Path datei; + private final ObjectMapper mapper = JsonPersistenz.mapper(); + private final List kunden = new ArrayList<>(); + + public JsonKundenRepository(Path datei) { + this.datei = datei; + lade(); + } + + private void lade() { + if (!Files.exists(datei)) { + return; + } + try { + kunden.addAll(mapper.readValue(datei.toFile(), new TypeReference>() { })); + } catch (IOException e) { + throw new UncheckedIOException("Kundenbestand konnte nicht gelesen werden: " + datei, e); + } + } + + private void schreibe() { + try { + if (datei.getParent() != null) { + Files.createDirectories(datei.getParent()); + } + mapper.writeValue(datei.toFile(), kunden); + } catch (IOException e) { + throw new UncheckedIOException("Kundenbestand konnte nicht gespeichert werden: " + datei, e); + } + } + + @Override + public Kunde speichere(Kunde kunde) { + kunden.removeIf(k -> k.getKundennummer().equals(kunde.getKundennummer())); + kunden.add(kunde); + schreibe(); + return kunde; + } + + @Override + public void loesche(String kundennummer) { + kunden.removeIf(k -> k.getKundennummer().equals(kundennummer)); + schreibe(); + } + + @Override + public Kunde findeNachNummer(String kundennummer) { + return kunden.stream() + .filter(k -> k.getKundennummer().equals(kundennummer)) + .findFirst() + .orElse(null); + } + + @Override + public List alleSortiertNachName() { + return kunden.stream() + .sorted(Comparator.comparing(Kunde::getName, String.CASE_INSENSITIVE_ORDER)) + .toList(); + } + + @Override + public List suche(String suchbegriff) { + String begriff = suchbegriff == null ? "" : suchbegriff.toLowerCase(Locale.ROOT); + return kunden.stream() + .filter(k -> k.getName().toLowerCase(Locale.ROOT).contains(begriff) + || k.getKundennummer().toLowerCase(Locale.ROOT).contains(begriff)) + .sorted(Comparator.comparing(Kunde::getName, String.CASE_INSENSITIVE_ORDER)) + .toList(); + } +} diff --git a/src/main/java/de/team1/faktura/kunden/Kunde.java b/src/main/java/de/team1/faktura/kunden/Kunde.java new file mode 100644 index 0000000..c721e88 --- /dev/null +++ b/src/main/java/de/team1/faktura/kunden/Kunde.java @@ -0,0 +1,113 @@ +package de.team1.faktura.kunden; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; + +/** + * Kundenstammdaten (Pflichtenheft Gruppe C, Kapitel 6.1). + * Kundennummer und PLZ werden als {@code String} geführt (führende Nullen). + * Die Kundennummer ist nach Vergabe unveränderlich (C-F-07). + */ +@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, + getterVisibility = JsonAutoDetect.Visibility.NONE, + isGetterVisibility = JsonAutoDetect.Visibility.NONE, + setterVisibility = JsonAutoDetect.Visibility.NONE) +public class Kunde { + + private String kundennummer; + private String name; + private String strasse; + private String plz; + private String ort; + private String eMail; + private String telefon; + private String ustIdNr; + + public Kunde() { + } + + public Kunde(String name, String strasse, String plz, String ort) { + this.name = name; + this.strasse = strasse; + this.plz = plz; + this.ort = ort; + } + + public String getKundennummer() { + return kundennummer; + } + + /** Einmalige Vergabe durch das System; jede spätere Änderung wird abgelehnt (C-F-07). */ + public void setKundennummer(String kundennummer) { + if (this.kundennummer != null && !this.kundennummer.equals(kundennummer)) { + throw new IllegalArgumentException( + "Die Kundennummer ist nach der Vergabe unveränderlich (C-F-07)."); + } + this.kundennummer = kundennummer; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getStrasse() { + return strasse; + } + + public void setStrasse(String strasse) { + this.strasse = strasse; + } + + public String getPlz() { + return plz; + } + + public void setPlz(String plz) { + this.plz = plz; + } + + public String getOrt() { + return ort; + } + + public void setOrt(String ort) { + this.ort = ort; + } + + public String getEMail() { + return eMail; + } + + public void setEMail(String eMail) { + this.eMail = eMail; + } + + public String getTelefon() { + return telefon; + } + + public void setTelefon(String telefon) { + this.telefon = telefon; + } + + public String getUstIdNr() { + return ustIdNr; + } + + public void setUstIdNr(String ustIdNr) { + this.ustIdNr = ustIdNr; + } + + /** Anschrift einzeilig, z. B. für die Beleg-Übernahme durch Gruppe A. */ + public String anschrift() { + return strasse + ", " + plz + " " + ort; + } + + @Override + public String toString() { + return (kundennummer != null ? kundennummer + " — " : "") + name; + } +} diff --git a/src/main/java/de/team1/faktura/kunden/KundenCsvExport.java b/src/main/java/de/team1/faktura/kunden/KundenCsvExport.java new file mode 100644 index 0000000..8976ddb --- /dev/null +++ b/src/main/java/de/team1/faktura/kunden/KundenCsvExport.java @@ -0,0 +1,36 @@ +package de.team1.faktura.kunden; + +import de.team1.faktura.gemeinsam.Csv; + +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; + +import static de.team1.faktura.gemeinsam.Csv.TRENNZEICHEN; +import static de.team1.faktura.gemeinsam.Csv.feld; + +/** + * Export aller Kundenstammdaten als CSV (C-F-15, Q-08): + * UTF-8, Semikolon-getrennt, mit Kopfzeile, alle Attribute. + */ +public class KundenCsvExport { + + private final KundenRepository repository; + + public KundenCsvExport(KundenRepository repository) { + this.repository = repository; + } + + public void exportiereCsv(Path zielDatei) { + List zeilen = new ArrayList<>(); + zeilen.add(String.join(TRENNZEICHEN, + "kundennummer", "name", "strasse", "plz", "ort", "eMail", "telefon", "ustIdNr")); + for (Kunde k : repository.alleSortiertNachName()) { + zeilen.add(String.join(TRENNZEICHEN, + feld(k.getKundennummer()), feld(k.getName()), feld(k.getStrasse()), + feld(k.getPlz()), feld(k.getOrt()), feld(k.getEMail()), + feld(k.getTelefon()), feld(k.getUstIdNr()))); + } + Csv.schreibe(zielDatei, zeilen); + } +} diff --git a/src/main/java/de/team1/faktura/kunden/KundenReferenzPruefung.java b/src/main/java/de/team1/faktura/kunden/KundenReferenzPruefung.java new file mode 100644 index 0000000..c58389b --- /dev/null +++ b/src/main/java/de/team1/faktura/kunden/KundenReferenzPruefung.java @@ -0,0 +1,11 @@ +package de.team1.faktura.kunden; + +/** + * Löschsperre GR-04: von Gruppe A bereitgestellt, von Gruppe C vor jedem + * Löschvorgang genutzt (C-F-10). + */ +public interface KundenReferenzPruefung { + + /** Anzahl aktiver und archivierter Dokumente, die den Kunden referenzieren. */ + int anzahlVerknuepfterDokumente(String kundennummer); +} diff --git a/src/main/java/de/team1/faktura/kunden/KundenRepository.java b/src/main/java/de/team1/faktura/kunden/KundenRepository.java new file mode 100644 index 0000000..893bcd5 --- /dev/null +++ b/src/main/java/de/team1/faktura/kunden/KundenRepository.java @@ -0,0 +1,21 @@ +package de.team1.faktura.kunden; + +import java.util.List; + +/** + * Persistenz der Kundenstammdaten im lokalen Dateisystem (IF-01, C Kapitel 6.2). + */ +public interface KundenRepository { + + Kunde speichere(Kunde kunde); + + void loesche(String kundennummer); + + /** Liefert den Kunden zur Nummer oder {@code null}. */ + Kunde findeNachNummer(String kundennummer); + + List alleSortiertNachName(); + + /** Suche über Name ODER Kundennummer (Teilstring, case-insensitive). */ + List suche(String suchbegriff); +} diff --git a/src/main/java/de/team1/faktura/kunden/KundenService.java b/src/main/java/de/team1/faktura/kunden/KundenService.java new file mode 100644 index 0000000..e349af8 --- /dev/null +++ b/src/main/java/de/team1/faktura/kunden/KundenService.java @@ -0,0 +1,16 @@ +package de.team1.faktura.kunden; + +import java.util.List; + +/** + * Lesender Zugriff auf Kundenstammdaten — von Gruppe C implementiert, + * von Gruppe A (Dokumentenzyklus) und Gruppe D (GUI) genutzt (C-F-14). + */ +public interface KundenService { + + /** Liefert den Kunden zur Kundennummer oder {@code null}, wenn nicht vorhanden. */ + Kunde findeKunde(String kundennummer); + + /** Volltextsuche über Name oder Kundennummer (Teilstring, case-insensitive, C-F-12). */ + List suche(String suchbegriff); +} diff --git a/src/main/java/de/team1/faktura/kunden/KundenVerwaltungsService.java b/src/main/java/de/team1/faktura/kunden/KundenVerwaltungsService.java new file mode 100644 index 0000000..c8a012b --- /dev/null +++ b/src/main/java/de/team1/faktura/kunden/KundenVerwaltungsService.java @@ -0,0 +1,90 @@ +package de.team1.faktura.kunden; + +import de.team1.faktura.gemeinsam.LoeschAbgelehntException; +import de.team1.faktura.gemeinsam.ValidierungsException; + +import java.util.List; + +/** + * Fachlogik der Kundenverwaltung (Pflichtenheft Gruppe C): + * Validierung (F-03, F-04), Nummernvergabe (F-02), Löschsperre GR-04 + * (F-08–F-10) sowie lesender Zugriff für Gruppe A (F-14). + */ +public class KundenVerwaltungsService implements KundenService { + + private final KundenRepository repository; + private final KundennummernGenerator nummernGenerator; + private final KundenReferenzPruefung referenzPruefung; + + public KundenVerwaltungsService(KundenRepository repository, + KundennummernGenerator nummernGenerator, + KundenReferenzPruefung referenzPruefung) { + this.repository = repository; + this.nummernGenerator = nummernGenerator; + this.referenzPruefung = referenzPruefung; + } + + /** Legt einen neuen Kunden an und vergibt die Kundennummer (F-01, F-02). */ + public Kunde legeAn(Kunde kunde) { + validiere(kunde); + kunde.setKundennummer(nummernGenerator.naechsteNummer()); + return repository.speichere(kunde); + } + + /** Ändert einen bestehenden Kunden; die Pflichtfeldprüfung gilt unverändert (F-05). */ + public Kunde aendere(Kunde kunde) { + if (kunde.getKundennummer() == null) { + throw new ValidierungsException("Kundennummer", "Der Kunde wurde noch nicht angelegt."); + } + validiere(kunde); + return repository.speichere(kunde); + } + + /** + * Löscht einen Kunden ohne verknüpfte Dokumente (F-08); bei verknüpften + * Dokumenten wird der Vorgang mit Angabe der Anzahl abgelehnt (F-09, GR-04). + */ + public void loescheKunde(String kundennummer) { + int anzahl = referenzPruefung.anzahlVerknuepfterDokumente(kundennummer); + if (anzahl > 0) { + throw new LoeschAbgelehntException( + "Der Kunde " + kundennummer + " kann nicht gelöscht werden: " + + anzahl + " verknüpfte Dokumente vorhanden (GR-04)."); + } + repository.loesche(kundennummer); + } + + public List alleSortiertNachName() { + return repository.alleSortiertNachName(); + } + + @Override + public List suche(String suchbegriff) { + return repository.suche(suchbegriff); + } + + @Override + public Kunde findeKunde(String kundennummer) { + return repository.findeNachNummer(kundennummer); + } + + /** Pflichtfeld- und Formatprüfung (F-03, F-04); benennt das betroffene Feld (Q-09). */ + private void validiere(Kunde kunde) { + pruefePflichtfeld(kunde.getName(), "Name"); + pruefePflichtfeld(kunde.getStrasse(), "Straße"); + pruefePflichtfeld(kunde.getPlz(), "PLZ"); + pruefePflichtfeld(kunde.getOrt(), "Ort"); + String eMail = kunde.getEMail(); + if (eMail != null && !eMail.isBlank() && !eMail.matches(".+@.+")) { + throw new ValidierungsException("E-Mail", + "Das Feld 'E-Mail' hat ein ungültiges Format: " + eMail); + } + } + + private void pruefePflichtfeld(String wert, String feldname) { + if (wert == null || wert.isBlank()) { + throw new ValidierungsException(feldname, + "Das Pflichtfeld '" + feldname + "' fehlt."); + } + } +} diff --git a/src/main/java/de/team1/faktura/kunden/KundennummernGenerator.java b/src/main/java/de/team1/faktura/kunden/KundennummernGenerator.java new file mode 100644 index 0000000..4bf279b --- /dev/null +++ b/src/main/java/de/team1/faktura/kunden/KundennummernGenerator.java @@ -0,0 +1,10 @@ +package de.team1.faktura.kunden; + +/** + * Vergabe eindeutiger, fortlaufender Kundennummern (C-F-02). + */ +public interface KundennummernGenerator { + + /** Liefert die nächste fortlaufende Kundennummer, z. B. {@code "K-000017"}. */ + String naechsteNummer(); +} diff --git a/src/main/java/de/team1/faktura/produkte/EinfacherProduktnummernGenerator.java b/src/main/java/de/team1/faktura/produkte/EinfacherProduktnummernGenerator.java new file mode 100644 index 0000000..743c11c --- /dev/null +++ b/src/main/java/de/team1/faktura/produkte/EinfacherProduktnummernGenerator.java @@ -0,0 +1,43 @@ +package de.team1.faktura.produkte; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * Fortlaufende Produktnummern im Format {@code P-NNNNNN} (Präfix, führende + * Nullen) auf Basis der höchsten bisher vergebenen Nummer (B, Kapitel 4). + */ +public class EinfacherProduktnummernGenerator implements ProduktnummernGenerator { + + private static final Pattern FORMAT = Pattern.compile("P-(\\d{6})"); + + private int zaehler; + + /** @param zaehler Wert der nächsten zu vergebenden Nummer (TC-02: Zähler 7 → {@code P-000007}). */ + public EinfacherProduktnummernGenerator(int zaehler) { + this.zaehler = zaehler; + } + + /** Initialisiert den Zähler aus der höchsten bereits vergebenen Nummer im Bestand. */ + public static EinfacherProduktnummernGenerator ausRepository(ProduktRepository repository) { + int hoechste = repository.alleSortiertNachBezeichnung().stream() + .map(Produkt::getProduktnummer) + .mapToInt(EinfacherProduktnummernGenerator::nummernWert) + .max() + .orElse(0); + return new EinfacherProduktnummernGenerator(hoechste + 1); + } + + private static int nummernWert(String produktnummer) { + if (produktnummer == null) { + return 0; + } + Matcher matcher = FORMAT.matcher(produktnummer); + return matcher.matches() ? Integer.parseInt(matcher.group(1)) : 0; + } + + @Override + public synchronized String naechsteNummer() { + return String.format("P-%06d", zaehler++); + } +} diff --git a/src/main/java/de/team1/faktura/produkte/JsonProduktRepository.java b/src/main/java/de/team1/faktura/produkte/JsonProduktRepository.java new file mode 100644 index 0000000..b8f7b3f --- /dev/null +++ b/src/main/java/de/team1/faktura/produkte/JsonProduktRepository.java @@ -0,0 +1,92 @@ +package de.team1.faktura.produkte; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import de.team1.faktura.gemeinsam.JsonPersistenz; + +import java.io.IOException; +import java.io.UncheckedIOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.Locale; + +/** + * JSON-Datei-Persistenz der Produkte (IF-01). Der Bestand wird vollständig + * im Speicher gehalten (Q-01/Q-02: bis 5.000 Produkte, Suche ≤ 1 s) und bei + * jeder Änderung in die Datei geschrieben. + */ +public class JsonProduktRepository implements ProduktRepository { + + private final Path datei; + private final ObjectMapper mapper = JsonPersistenz.mapper(); + private final List produkte = new ArrayList<>(); + + public JsonProduktRepository(Path datei) { + this.datei = datei; + lade(); + } + + private void lade() { + if (!Files.exists(datei)) { + return; + } + try { + produkte.addAll(mapper.readValue(datei.toFile(), new TypeReference>() { })); + } catch (IOException e) { + throw new UncheckedIOException("Produktbestand konnte nicht gelesen werden: " + datei, e); + } + } + + private void schreibe() { + try { + if (datei.getParent() != null) { + Files.createDirectories(datei.getParent()); + } + mapper.writeValue(datei.toFile(), produkte); + } catch (IOException e) { + throw new UncheckedIOException("Produktbestand konnte nicht gespeichert werden: " + datei, e); + } + } + + @Override + public Produkt speichere(Produkt produkt) { + produkte.removeIf(p -> p.getProduktnummer().equals(produkt.getProduktnummer())); + produkte.add(produkt); + schreibe(); + return produkt; + } + + @Override + public void loesche(String produktnummer) { + produkte.removeIf(p -> p.getProduktnummer().equals(produktnummer)); + schreibe(); + } + + @Override + public Produkt findeNachNummer(String produktnummer) { + return produkte.stream() + .filter(p -> p.getProduktnummer().equals(produktnummer)) + .findFirst() + .orElse(null); + } + + @Override + public List alleSortiertNachBezeichnung() { + return produkte.stream() + .sorted(Comparator.comparing(Produkt::getBezeichnung, String.CASE_INSENSITIVE_ORDER)) + .toList(); + } + + @Override + public List suche(String suchbegriff) { + String begriff = suchbegriff == null ? "" : suchbegriff.toLowerCase(Locale.ROOT); + return produkte.stream() + .filter(p -> p.getBezeichnung().toLowerCase(Locale.ROOT).contains(begriff) + || p.getProduktnummer().toLowerCase(Locale.ROOT).contains(begriff)) + .sorted(Comparator.comparing(Produkt::getBezeichnung, String.CASE_INSENSITIVE_ORDER)) + .toList(); + } +} diff --git a/src/main/java/de/team1/faktura/produkte/Produkt.java b/src/main/java/de/team1/faktura/produkte/Produkt.java new file mode 100644 index 0000000..3233ccb --- /dev/null +++ b/src/main/java/de/team1/faktura/produkte/Produkt.java @@ -0,0 +1,92 @@ +package de.team1.faktura.produkte; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; + +import java.math.BigDecimal; + +/** + * Produktstammdaten (Pflichtenheft Gruppe B, Kapitel 6.1). + * Geldbeträge als {@code BigDecimal} (Scale 2), Steuersatz als Faktor + * (zulässig: 0.00, 0.07, 0.19). Die Produktnummer ist nach Vergabe + * unveränderlich (B-F-07). + */ +@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, + getterVisibility = JsonAutoDetect.Visibility.NONE, + isGetterVisibility = JsonAutoDetect.Visibility.NONE, + setterVisibility = JsonAutoDetect.Visibility.NONE) +public class Produkt { + + private String produktnummer; + private String bezeichnung; + private String beschreibung; + private BigDecimal einzelpreisNetto; + private BigDecimal steuersatz; + private String einheit; + + public Produkt() { + } + + public Produkt(String bezeichnung, BigDecimal einzelpreisNetto, BigDecimal steuersatz) { + this.bezeichnung = bezeichnung; + this.einzelpreisNetto = einzelpreisNetto; + this.steuersatz = steuersatz; + } + + public String getProduktnummer() { + return produktnummer; + } + + /** Einmalige Vergabe durch das System; jede spätere Änderung wird abgelehnt (B-F-07). */ + public void setProduktnummer(String produktnummer) { + if (this.produktnummer != null && !this.produktnummer.equals(produktnummer)) { + throw new IllegalArgumentException( + "Die Produktnummer ist nach der Vergabe unveränderlich (B-F-07)."); + } + this.produktnummer = produktnummer; + } + + public String getBezeichnung() { + return bezeichnung; + } + + public void setBezeichnung(String bezeichnung) { + this.bezeichnung = bezeichnung; + } + + public String getBeschreibung() { + return beschreibung; + } + + public void setBeschreibung(String beschreibung) { + this.beschreibung = beschreibung; + } + + public BigDecimal getEinzelpreisNetto() { + return einzelpreisNetto; + } + + public void setEinzelpreisNetto(BigDecimal einzelpreisNetto) { + this.einzelpreisNetto = einzelpreisNetto; + } + + public BigDecimal getSteuersatz() { + return steuersatz; + } + + public void setSteuersatz(BigDecimal steuersatz) { + this.steuersatz = steuersatz; + } + + public String getEinheit() { + return einheit; + } + + public void setEinheit(String einheit) { + this.einheit = einheit; + } + + @Override + public String toString() { + return (produktnummer != null ? produktnummer + " — " : "") + bezeichnung; + } +} diff --git a/src/main/java/de/team1/faktura/produkte/ProduktCsvExport.java b/src/main/java/de/team1/faktura/produkte/ProduktCsvExport.java new file mode 100644 index 0000000..95cc718 --- /dev/null +++ b/src/main/java/de/team1/faktura/produkte/ProduktCsvExport.java @@ -0,0 +1,37 @@ +package de.team1.faktura.produkte; + +import de.team1.faktura.gemeinsam.Csv; + +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; + +import static de.team1.faktura.gemeinsam.Csv.TRENNZEICHEN; +import static de.team1.faktura.gemeinsam.Csv.feld; + +/** + * Export aller Produktstammdaten als CSV (B-F-15, Q-08): + * UTF-8, Semikolon-getrennt, mit Kopfzeile, alle Attribute. + */ +public class ProduktCsvExport { + + private final ProduktRepository repository; + + public ProduktCsvExport(ProduktRepository repository) { + this.repository = repository; + } + + public void exportiereCsv(Path zielDatei) { + List zeilen = new ArrayList<>(); + zeilen.add(String.join(TRENNZEICHEN, + "produktnummer", "bezeichnung", "beschreibung", "einzelpreisNetto", "steuersatz", "einheit")); + for (Produkt p : repository.alleSortiertNachBezeichnung()) { + zeilen.add(String.join(TRENNZEICHEN, + feld(p.getProduktnummer()), feld(p.getBezeichnung()), feld(p.getBeschreibung()), + feld(p.getEinzelpreisNetto() == null ? null : p.getEinzelpreisNetto().toPlainString()), + feld(p.getSteuersatz() == null ? null : p.getSteuersatz().toPlainString()), + feld(p.getEinheit()))); + } + Csv.schreibe(zielDatei, zeilen); + } +} diff --git a/src/main/java/de/team1/faktura/produkte/ProduktReferenzPruefung.java b/src/main/java/de/team1/faktura/produkte/ProduktReferenzPruefung.java new file mode 100644 index 0000000..06d1799 --- /dev/null +++ b/src/main/java/de/team1/faktura/produkte/ProduktReferenzPruefung.java @@ -0,0 +1,11 @@ +package de.team1.faktura.produkte; + +/** + * Löschsperre für referenzierte Produkte: von Gruppe A bereitgestellt, + * von Gruppe B vor jedem Löschvorgang genutzt (B-F-10). + */ +public interface ProduktReferenzPruefung { + + /** {@code true}, wenn das Produkt in mindestens einer Dokumentposition referenziert wird. */ + boolean istProduktReferenziert(String produktnummer); +} diff --git a/src/main/java/de/team1/faktura/produkte/ProduktRepository.java b/src/main/java/de/team1/faktura/produkte/ProduktRepository.java new file mode 100644 index 0000000..8d7b553 --- /dev/null +++ b/src/main/java/de/team1/faktura/produkte/ProduktRepository.java @@ -0,0 +1,21 @@ +package de.team1.faktura.produkte; + +import java.util.List; + +/** + * Persistenz der Produktstammdaten im lokalen Dateisystem (IF-01, B Kapitel 6.2). + */ +public interface ProduktRepository { + + Produkt speichere(Produkt produkt); + + void loesche(String produktnummer); + + /** Liefert das Produkt zur Nummer oder {@code null}. */ + Produkt findeNachNummer(String produktnummer); + + List alleSortiertNachBezeichnung(); + + /** Suche über Bezeichnung ODER Produktnummer (Teilstring, case-insensitive). */ + List suche(String suchbegriff); +} diff --git a/src/main/java/de/team1/faktura/produkte/ProduktService.java b/src/main/java/de/team1/faktura/produkte/ProduktService.java new file mode 100644 index 0000000..70319ac --- /dev/null +++ b/src/main/java/de/team1/faktura/produkte/ProduktService.java @@ -0,0 +1,16 @@ +package de.team1.faktura.produkte; + +import java.util.List; + +/** + * Lesender Zugriff auf Produktstammdaten — von Gruppe B implementiert, + * von Gruppe A (Dokumentenzyklus) und Gruppe D (GUI) genutzt (B-F-14). + */ +public interface ProduktService { + + /** Liefert das Produkt zur Produktnummer oder {@code null}, wenn nicht vorhanden. */ + Produkt findeProdukt(String produktnummer); + + /** Suche über Bezeichnung oder Produktnummer (Teilstring, case-insensitive, B-F-12). */ + List suche(String suchbegriff); +} diff --git a/src/main/java/de/team1/faktura/produkte/ProduktVerwaltungsService.java b/src/main/java/de/team1/faktura/produkte/ProduktVerwaltungsService.java new file mode 100644 index 0000000..9eeb4de --- /dev/null +++ b/src/main/java/de/team1/faktura/produkte/ProduktVerwaltungsService.java @@ -0,0 +1,105 @@ +package de.team1.faktura.produkte; + +import de.team1.faktura.gemeinsam.LoeschAbgelehntException; +import de.team1.faktura.gemeinsam.ValidierungsException; + +import java.math.BigDecimal; +import java.util.List; + +/** + * Fachlogik der Produktverwaltung (Pflichtenheft Gruppe B): + * Validierung (F-03, F-04), Nummernvergabe (F-02), Löschsperre + * (F-08–F-10) sowie lesender Zugriff für Gruppe A (F-14). + */ +public class ProduktVerwaltungsService implements ProduktService { + + /** Zulässige Steuersätze als Faktor (B-F-03). */ + private static final List ZULAESSIGE_STEUERSAETZE = List.of( + new BigDecimal("0.00"), new BigDecimal("0.07"), new BigDecimal("0.19")); + + private final ProduktRepository repository; + private final ProduktnummernGenerator nummernGenerator; + private final ProduktReferenzPruefung referenzPruefung; + + public ProduktVerwaltungsService(ProduktRepository repository, + ProduktnummernGenerator nummernGenerator, + ProduktReferenzPruefung referenzPruefung) { + this.repository = repository; + this.nummernGenerator = nummernGenerator; + this.referenzPruefung = referenzPruefung; + } + + /** Legt ein neues Produkt an und vergibt die Produktnummer (F-01, F-02). */ + public Produkt legeAn(Produkt produkt) { + validiere(produkt); + produkt.setProduktnummer(nummernGenerator.naechsteNummer()); + return repository.speichere(produkt); + } + + /** + * Ändert ein bestehendes Produkt (F-05). Bereits erstellte Dokumente bleiben + * unverändert, da Gruppe A Preis und Steuersatz als Snapshot ablegt (F-06). + */ + public Produkt aendere(Produkt produkt) { + if (produkt.getProduktnummer() == null) { + throw new ValidierungsException("Produktnummer", "Das Produkt wurde noch nicht angelegt."); + } + validiere(produkt); + return repository.speichere(produkt); + } + + /** + * Löscht ein nicht referenziertes Produkt (F-08); referenzierte Produkte + * werden mit Hinweis abgelehnt (F-09, F-10). + */ + public void loescheProdukt(String produktnummer) { + if (referenzPruefung.istProduktReferenziert(produktnummer)) { + throw new LoeschAbgelehntException( + "Das Produkt " + produktnummer + " kann nicht gelöscht werden: " + + "es wird in Dokumenten verwendet."); + } + repository.loesche(produktnummer); + } + + public List alleSortiertNachBezeichnung() { + return repository.alleSortiertNachBezeichnung(); + } + + @Override + public List suche(String suchbegriff) { + return repository.suche(suchbegriff); + } + + @Override + public Produkt findeProdukt(String produktnummer) { + return repository.findeNachNummer(produktnummer); + } + + /** Pflichtfeld- und Wertebereichsprüfung (F-03, F-04); benennt das betroffene Feld (Q-09). */ + private void validiere(Produkt produkt) { + if (produkt.getBezeichnung() == null || produkt.getBezeichnung().isBlank()) { + throw new ValidierungsException("Bezeichnung", + "Das Pflichtfeld 'Bezeichnung' fehlt."); + } + BigDecimal preis = produkt.getEinzelpreisNetto(); + if (preis == null) { + throw new ValidierungsException("Einzelpreis", + "Das Pflichtfeld 'Einzelpreis (netto)' fehlt."); + } + if (preis.compareTo(BigDecimal.ZERO) < 0) { + throw new ValidierungsException("Einzelpreis", + "Der 'Einzelpreis (netto)' muss größer oder gleich 0,00 sein."); + } + BigDecimal steuersatz = produkt.getSteuersatz(); + if (steuersatz == null) { + throw new ValidierungsException("Steuersatz", + "Das Pflichtfeld 'Steuersatz' fehlt."); + } + boolean zulaessig = ZULAESSIGE_STEUERSAETZE.stream() + .anyMatch(s -> s.compareTo(steuersatz) == 0); + if (!zulaessig) { + throw new ValidierungsException("Steuersatz", + "Unzulässiger 'Steuersatz' " + steuersatz + "; zulässig sind 0.00, 0.07 und 0.19."); + } + } +} diff --git a/src/main/java/de/team1/faktura/produkte/ProduktnummernGenerator.java b/src/main/java/de/team1/faktura/produkte/ProduktnummernGenerator.java new file mode 100644 index 0000000..331d7f6 --- /dev/null +++ b/src/main/java/de/team1/faktura/produkte/ProduktnummernGenerator.java @@ -0,0 +1,10 @@ +package de.team1.faktura.produkte; + +/** + * Vergabe eindeutiger, fortlaufender Produktnummern (B-F-02). + */ +public interface ProduktnummernGenerator { + + /** Liefert die nächste fortlaufende Produktnummer, z. B. {@code "P-000042"}. */ + String naechsteNummer(); +} diff --git a/src/test/java/de/team1/faktura/dokumente/DokumentzyklusTest.java b/src/test/java/de/team1/faktura/dokumente/DokumentzyklusTest.java new file mode 100644 index 0000000..6218135 --- /dev/null +++ b/src/test/java/de/team1/faktura/dokumente/DokumentzyklusTest.java @@ -0,0 +1,241 @@ +package de.team1.faktura.dokumente; + +import de.team1.faktura.gemeinsam.ValidierungsException; +import de.team1.faktura.kunden.Kunde; +import de.team1.faktura.kunden.KundenService; +import de.team1.faktura.produkte.Produkt; +import de.team1.faktura.produkte.ProduktService; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +import java.math.BigDecimal; +import java.nio.file.Path; +import java.time.LocalDate; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; + +/** + * Modultestplan Gruppe A (Pflichtenheft A, Kapitel 10): TC-01 bis TC-13. + * Die Schnittstellen der Gruppen B und C werden durch Stubs ersetzt, + * der PDF-Export durch einen No-Op-Stub. + */ +class DokumentzyklusTest { + + private static final String KUNDE_NR = "K-000001"; + private static final String PRODUKT_NR = "P-000001"; + + @TempDir + Path tempDir; + + private JsonDokumentRepository repository; + private EinfacherBelegnummernGenerator nummernGenerator; + private Map produkte; + private StandardDokumentService service; + + @BeforeEach + void setUp() { + repository = new JsonDokumentRepository(tempDir.resolve("dokumente.json")); + nummernGenerator = new EinfacherBelegnummernGenerator(); + + Kunde kunde = new Kunde("Muster GmbH", "Hauptstr. 1", "68163", "Mannheim"); + kunde.setKundennummer(KUNDE_NR); + KundenService kundenStub = new KundenService() { + @Override + public Kunde findeKunde(String kundennummer) { + return KUNDE_NR.equals(kundennummer) ? kunde : null; + } + + @Override + public List suche(String suchbegriff) { + return List.of(kunde); + } + }; + + produkte = new HashMap<>(); + produkte.put(PRODUKT_NR, produkt(PRODUKT_NR, "Beratungsstunde", "50.00", "0.19")); + ProduktService produktStub = new ProduktService() { + @Override + public Produkt findeProdukt(String produktnummer) { + return produkte.get(produktnummer); + } + + @Override + public List suche(String suchbegriff) { + return List.copyOf(produkte.values()); + } + }; + + PdfExporter pdfStub = (dokument, ziel) -> { }; + service = new StandardDokumentService(repository, nummernGenerator, + kundenStub, produktStub, pdfStub); + } + + private static Produkt produkt(String nummer, String bezeichnung, String preis, String steuersatz) { + Produkt produkt = new Produkt(bezeichnung, new BigDecimal(preis), new BigDecimal(steuersatz)); + produkt.setProduktnummer(nummer); + return produkt; + } + + @Test + @DisplayName("TC-01: Position 100.00 EUR @ 0.19 -> Steuer 19.00, Brutto 119.00") + void tc01SteuerUndBruttoEinerPosition() { + Dokumentposition position = new Dokumentposition( + PRODUKT_NR, "Test", 1, new BigDecimal("100.00"), new BigDecimal("0.19")); + assertEquals(new BigDecimal("19.00"), position.getSteuerbetrag()); + assertEquals(new BigDecimal("119.00"), position.getPositionssummeBrutto()); + } + + @Test + @DisplayName("TC-02: Einzelpreis 50.00 EUR, Menge 3 -> Positionssumme 150.00") + void tc02Positionssumme() { + Dokumentposition position = new Dokumentposition( + PRODUKT_NR, "Test", 3, new BigDecimal("50.00"), new BigDecimal("0.19")); + assertEquals(new BigDecimal("150.00"), position.getPositionssummeNetto()); + } + + @Test + @DisplayName("TC-03: Beleg mit 150.00 @ 0.19 und 50.00 @ 0.07 -> 200.00 / 32.00 / 232.00") + void tc03BelegSummen() { + Rechnung rechnung = new Rechnung(); + rechnung.setBelegnummer("R-2026-000001"); + rechnung.setzePositionen(List.of( + new Dokumentposition("P-1", "A", 1, new BigDecimal("150.00"), new BigDecimal("0.19")), + new Dokumentposition("P-2", "B", 1, new BigDecimal("50.00"), new BigDecimal("0.07")))); + assertEquals(new BigDecimal("200.00"), rechnung.getSummeNetto()); + assertEquals(new BigDecimal("32.00"), rechnung.getSummeSteuer()); + assertEquals(new BigDecimal("232.00"), rechnung.getSummeBrutto()); + } + + @Test + @DisplayName("TC-04: letzte Rechnungsnummer R-2026-000123 -> naechste R-2026-000124 (lückenlos)") + void tc04LueckenloseRechnungsnummer() { + repository.speichere(TestBelege.rechnung("R-2026-000123", DokumentStatus.OFFEN)); + EinfacherBelegnummernGenerator generator = + EinfacherBelegnummernGenerator.ausRepository(repository); + assertEquals("R-2026-000124", generator.naechsteNummer(Belegtyp.RECHNUNG, 2026)); + } + + @Test + @DisplayName("TC-05: Zähler 7, Jahr 2026 -> R-2026-000007 (führende Nullen, String)") + void tc05NummernFormat() { + nummernGenerator.setzeZaehler(Belegtyp.RECHNUNG, 2026, 7); + assertEquals("R-2026-000007", nummernGenerator.naechsteNummer(Belegtyp.RECHNUNG, 2026)); + } + + @Test + @DisplayName("TC-06: kein Zahlungsziel -> Standard +14 Tage (GR-06)") + void tc06StandardZahlungsziel() { + Rechnung rechnung = service.erstelleRechnung(KUNDE_NR, + List.of(new Positionsangabe(PRODUKT_NR, 1)), + LocalDate.of(2026, 6, 9), null); + assertEquals(LocalDate.of(2026, 6, 23), rechnung.getZahlungsziel()); + } + + @Test + @DisplayName("TC-07: abweichendes Zahlungsziel wird übernommen") + void tc07AbweichendesZahlungsziel() { + Rechnung rechnung = service.erstelleRechnung(KUNDE_NR, + List.of(new Positionsangabe(PRODUKT_NR, 1)), + LocalDate.of(2026, 6, 9), LocalDate.of(2026, 7, 31)); + assertEquals(LocalDate.of(2026, 7, 31), rechnung.getZahlungsziel()); + } + + @Test + @DisplayName("TC-08: Änderung einer versendeten Rechnung wirft IllegalStateException (GR-02)") + void tc08UnveraenderlichkeitVersendet() { + Rechnung rechnung = service.erstelleRechnung(KUNDE_NR, + List.of(new Positionsangabe(PRODUKT_NR, 1)), LocalDate.of(2026, 6, 9), null); + service.versende(rechnung.getBelegnummer()); + Rechnung versendet = (Rechnung) repository.findeNachNummer(rechnung.getBelegnummer()); + assertThrows(IllegalStateException.class, () -> versendet.setzePositionen(List.of( + new Dokumentposition("P-9", "Neu", 1, new BigDecimal("1.00"), new BigDecimal("0.19"))))); + } + + @Test + @DisplayName("TC-09: Storno einer offenen Rechnung -> STORNIERT, nicht mehr offen, storniertAm gesetzt") + void tc09Storno() { + Rechnung rechnung = service.erstelleRechnung(KUNDE_NR, + List.of(new Positionsangabe(PRODUKT_NR, 1)), LocalDate.of(2026, 6, 9), null); + service.storniere(rechnung.getBelegnummer()); + + Rechnung storniert = (Rechnung) repository.findeNachNummer(rechnung.getBelegnummer()); + assertEquals(DokumentStatus.STORNIERT, storniert.getStatus()); + assertTrue(service.offeneRechnungen().stream() + .noneMatch(r -> r.getBelegnummer().equals(rechnung.getBelegnummer()))); + assertNotNull(storniert.getStorniertAm()); + } + + @Test + @DisplayName("TC-10: AB aus Angebot übernimmt Kunde, Positionen, Mengen und Rückreferenz (GR-05)") + void tc10FolgebelegAusAngebot() { + produkte.put("P-000002", produkt("P-000002", "Zweitprodukt", "10.00", "0.07")); + Angebot angebot = service.erstelleAngebot(KUNDE_NR, List.of( + new Positionsangabe(PRODUKT_NR, 2), + new Positionsangabe("P-000002", 5)), null); + + Dokument folgebeleg = service.erzeugeFolgebeleg(angebot.getBelegnummer()); + + assertTrue(folgebeleg instanceof Auftragsbestaetigung); + assertEquals(angebot.getBelegnummer(), folgebeleg.getVorgaengerNr()); + assertEquals(angebot.getKundenReferenz(), folgebeleg.getKundenReferenz()); + assertEquals(2, folgebeleg.getPositionen().size()); + assertEquals(2, folgebeleg.getPositionen().get(0).getMenge()); + assertEquals(5, folgebeleg.getPositionen().get(1).getMenge()); + } + + @Test + @DisplayName("TC-11: Produktpreisänderung lässt bestehende Rechnung unverändert (Snapshot, GR-03)") + void tc11Snapshot() { + Rechnung rechnung = service.erstelleRechnung(KUNDE_NR, + List.of(new Positionsangabe(PRODUKT_NR, 1)), LocalDate.of(2026, 6, 9), null); + + produkte.put(PRODUKT_NR, produkt(PRODUKT_NR, "Beratungsstunde", "80.00", "0.19")); + + Rechnung gelesen = (Rechnung) repository.findeNachNummer(rechnung.getBelegnummer()); + assertEquals(new BigDecimal("50.00"), gelesen.getPositionen().get(0).getEinzelpreisNetto()); + } + + @Test + @DisplayName("TC-12: fehlender Kunde bzw. fehlende Position -> Validierungsfehler benennt Pflichtfeld") + void tc12PflichtfeldValidierung() { + ValidierungsException ohneKunde = assertThrows(ValidierungsException.class, + () -> service.erstelleRechnung(null, + List.of(new Positionsangabe(PRODUKT_NR, 1)), LocalDate.now(), null)); + assertEquals("Kunde", ohneKunde.getFeldname()); + + ValidierungsException ohnePosition = assertThrows(ValidierungsException.class, + () -> service.erstelleRechnung(KUNDE_NR, List.of(), LocalDate.now(), null)); + assertEquals("Position", ohnePosition.getFeldname()); + } + + @Test + @DisplayName("TC-13: vollständige Rechnung mit allen Pflichtangaben gemäß § 14 UStG") + void tc13VollstaendigeRechnung() { + Rechnung rechnung = service.erstelleRechnung(KUNDE_NR, + List.of(new Positionsangabe(PRODUKT_NR, 2)), LocalDate.of(2026, 6, 9), null); + + Rechnung gespeichert = (Rechnung) repository.findeNachNummer(rechnung.getBelegnummer()); + assertNotNull(gespeichert); + assertTrue(gespeichert.getBelegnummer().startsWith("R-2026-")); + assertEquals(LocalDate.of(2026, 6, 9), gespeichert.getDatum()); + assertEquals(LocalDate.of(2026, 6, 9), gespeichert.getLeistungsdatum()); + assertEquals("Muster GmbH", gespeichert.getKundeName()); + assertEquals("Hauptstr. 1, 68163 Mannheim", gespeichert.getKundeAnschrift()); + assertEquals(1, gespeichert.getPositionen().size()); + assertEquals(new BigDecimal("0.19"), gespeichert.getPositionen().get(0).getSteuersatz()); + assertEquals(new BigDecimal("100.00"), gespeichert.getSummeNetto()); + assertEquals(new BigDecimal("19.00"), gespeichert.getSummeSteuer()); + assertEquals(new BigDecimal("119.00"), gespeichert.getSummeBrutto()); + assertNotNull(gespeichert.getZahlungsziel()); + assertFalse(service.offeneRechnungen().isEmpty()); + } +} diff --git a/src/test/java/de/team1/faktura/dokumente/TestBelege.java b/src/test/java/de/team1/faktura/dokumente/TestBelege.java new file mode 100644 index 0000000..3898cf4 --- /dev/null +++ b/src/test/java/de/team1/faktura/dokumente/TestBelege.java @@ -0,0 +1,31 @@ +package de.team1.faktura.dokumente; + +import java.math.BigDecimal; +import java.util.List; + +/** + * Testhelfer: erzeugt Belege in definierten Status für die Modultests + * (auch der Gruppe D), da der Statuswechsel im Produktivcode bewusst nur + * über die Fachlogik möglich ist. + */ +public final class TestBelege { + + private TestBelege() { + } + + public static Rechnung rechnung(String belegnummer, DokumentStatus status) { + Rechnung rechnung = new Rechnung(); + rechnung.setBelegnummer(belegnummer); + rechnung.setzePositionen(List.of(new Dokumentposition( + "P-000001", "Testprodukt", 1, new BigDecimal("100.00"), new BigDecimal("0.19")))); + rechnung.setzeStatus(status); + return rechnung; + } + + public static Angebot angebot(String belegnummer, DokumentStatus status) { + Angebot angebot = new Angebot(); + angebot.setBelegnummer(belegnummer); + angebot.setzeStatus(status); + return angebot; + } +} diff --git a/src/test/java/de/team1/faktura/gui/OberflaechenControllerTest.java b/src/test/java/de/team1/faktura/gui/OberflaechenControllerTest.java new file mode 100644 index 0000000..059dfcd --- /dev/null +++ b/src/test/java/de/team1/faktura/gui/OberflaechenControllerTest.java @@ -0,0 +1,334 @@ +package de.team1.faktura.gui; + +import de.team1.faktura.dokumente.Angebot; +import de.team1.faktura.dokumente.Auftragsbestaetigung; +import de.team1.faktura.dokumente.Dokument; +import de.team1.faktura.dokumente.DokumentService; +import de.team1.faktura.dokumente.DokumentStatus; +import de.team1.faktura.dokumente.Lieferschein; +import de.team1.faktura.dokumente.Positionsangabe; +import de.team1.faktura.dokumente.Rechnung; +import de.team1.faktura.dokumente.Summen; +import de.team1.faktura.dokumente.TestBelege; +import de.team1.faktura.gemeinsam.ValidierungsException; +import de.team1.faktura.kunden.Kunde; +import de.team1.faktura.kunden.KundenService; +import de.team1.faktura.produkte.Produkt; +import de.team1.faktura.produkte.ProduktService; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import java.math.BigDecimal; +import java.nio.file.Path; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +/** + * Modultestplan Gruppe D (Pflichtenheft D, Kapitel 10): TC-01 bis TC-14. + * Getestet wird die GUI-freie Controller- und Modell-Schicht; die + * Service-Schnittstellen der Gruppen A-C werden durch Stubs ersetzt. + */ +class OberflaechenControllerTest { + + private DokumentServiceStub dokumentService; + private KundenService kundenService; + private ProduktService produktService; + private RechnungsWizardController wizard; + + @BeforeEach + void setUp() { + dokumentService = new DokumentServiceStub(); + + Kunde kunde = new Kunde("Muster GmbH", "Hauptstr. 1", "68163", "Mannheim"); + kunde.setKundennummer("K-000017"); + kundenService = new KundenService() { + @Override + public Kunde findeKunde(String kundennummer) { + return "K-000017".equals(kundennummer) ? kunde : null; + } + + @Override + public List suche(String suchbegriff) { + return kunde.getName().toLowerCase().contains(suchbegriff.toLowerCase()) + ? List.of(kunde) : List.of(); + } + }; + + Produkt produkt = new Produkt("Beratungsstunde", new BigDecimal("80.00"), new BigDecimal("0.19")); + produkt.setProduktnummer("P-000042"); + produktService = new ProduktService() { + @Override + public Produkt findeProdukt(String produktnummer) { + return "P-000042".equals(produktnummer) ? produkt : null; + } + + @Override + public List suche(String suchbegriff) { + return List.of(produkt); + } + }; + + wizard = new RechnungsWizardController(dokumentService, kundenService, produktService); + } + + private void fuelleGueltigesModell() { + wizard.getModel().setKundenNr("K-000017"); + wizard.getModel().fuegePositionHinzu(new PositionsEingabe("P-000042", 2)); + wizard.getModel().setRechnungsdatum(LocalDate.of(2026, 6, 10)); + } + + @Test + @DisplayName("TC-01: neuer Wizard startet mit Schritt KUNDE_WAEHLEN") + void tc01ErsterSchritt() { + assertEquals(WizardSchritt.KUNDE_WAEHLEN, wizard.getModel().getAktuellerSchritt()); + } + + @Test + @DisplayName("TC-02: viermal weiter() mit gültigen Eingaben durchläuft alle Schritte") + void tc02Schrittfolge() { + fuelleGueltigesModell(); + + assertTrue(wizard.weiter()); + assertEquals(WizardSchritt.POSITIONEN_ERFASSEN, wizard.getModel().getAktuellerSchritt()); + assertTrue(wizard.weiter()); + assertEquals(WizardSchritt.DATEN_BESTAETIGEN, wizard.getModel().getAktuellerSchritt()); + assertTrue(wizard.weiter()); + assertEquals(WizardSchritt.ZUSAMMENFASSUNG, wizard.getModel().getAktuellerSchritt()); + assertTrue(wizard.weiter()); + assertEquals(WizardSchritt.SPEICHERN, wizard.getModel().getAktuellerSchritt()); + } + + @Test + @DisplayName("TC-03: ohne Kunden wird der Wechsel verhindert; Meldung benennt 'Kunde' (F-10)") + void tc03KeinKunde() { + assertFalse(wizard.weiter()); + assertEquals(WizardSchritt.KUNDE_WAEHLEN, wizard.getModel().getAktuellerSchritt()); + assertEquals(MeldungsTyp.FEHLER, wizard.getLetzteMeldung().typ()); + assertEquals("Kunde", wizard.getLetzteMeldung().feldname()); + } + + @Test + @DisplayName("TC-04: leere Positionsliste verhindert den Wechsel; Meldung benennt 'Position'") + void tc04KeinePosition() { + wizard.getModel().setKundenNr("K-000017"); + assertTrue(wizard.weiter()); + + assertFalse(wizard.weiter()); + assertEquals("Position", wizard.getLetzteMeldung().feldname()); + } + + @Test + @DisplayName("TC-05: Position mit Menge 0 verhindert den Wechsel; Meldung benennt 'Menge'") + void tc05MengeNull() { + wizard.getModel().setKundenNr("K-000017"); + wizard.getModel().fuegePositionHinzu(new PositionsEingabe("P-000042", 0)); + assertTrue(wizard.weiter()); + + assertFalse(wizard.weiter()); + assertEquals("Menge", wizard.getLetzteMeldung().feldname()); + } + + @Test + @DisplayName("TC-06: zurueck() bis Schritt 1 erhält Kunde und Positionen (F-11)") + void tc06ZurueckOhneDatenverlust() { + fuelleGueltigesModell(); + wizard.weiter(); + wizard.weiter(); + assertEquals(WizardSchritt.DATEN_BESTAETIGEN, wizard.getModel().getAktuellerSchritt()); + + wizard.zurueck(); + wizard.zurueck(); + + assertEquals(WizardSchritt.KUNDE_WAEHLEN, wizard.getModel().getAktuellerSchritt()); + assertEquals("K-000017", wizard.getModel().getKundenNr()); + assertEquals(1, wizard.getModel().getPositionen().size()); + assertEquals(2, wizard.getModel().getPositionen().get(0).menge()); + } + + @Test + @DisplayName("TC-07: Zusammenfassung enthält Kunde, Positionen, Mengen, Summen, Datum, Zahlungsziel (F-12)") + void tc07Zusammenfassung() { + fuelleGueltigesModell(); + dokumentService.summen = new Summen( + new BigDecimal("200.00"), new BigDecimal("38.00"), new BigDecimal("238.00")); + + String text = wizard.erzeugeZusammenfassung(); + + assertTrue(text.contains("Muster GmbH")); + assertTrue(text.contains("2 x Beratungsstunde")); + assertTrue(text.contains("200.00")); + assertTrue(text.contains("38.00")); + assertTrue(text.contains("238.00")); + assertTrue(text.contains("10.06.2026")); + assertTrue(text.contains("Zahlungsziel")); + } + + @Test + @DisplayName("TC-08: speichern() löst genau einen Aufruf aus; Erfolgsmeldung nennt Rechnungsnummer (F-13)") + void tc08GenauEinSpeicheraufruf() { + fuelleGueltigesModell(); + + Meldung meldung = wizard.speichern(); + + assertEquals(1, dokumentService.erstelleRechnungAufrufe); + assertEquals(MeldungsTyp.ERFOLG, meldung.typ()); + assertTrue(meldung.text().contains("R-2026-000124")); + } + + @Test + @DisplayName("TC-09: Validierungsfehler der Fachkomponente wird als Fehlermeldung dargestellt (F-05/F-16)") + void tc09SpeichernFehlerfall() { + fuelleGueltigesModell(); + dokumentService.erstelleRechnungFehler = + new ValidierungsException("Rechnungsdatum", "Das Pflichtfeld 'Rechnungsdatum' fehlt."); + + Meldung meldung = wizard.speichern(); + + assertEquals(MeldungsTyp.FEHLER, meldung.typ()); + assertEquals("Rechnungsdatum", meldung.feldname()); + } + + @Test + @DisplayName("TC-10: Stornieren ist nur bei Rechnungen im Status OFFEN aktiviert (F-14)") + void tc10StornierenNurOffen() { + DokumentListenController controller = new DokumentListenController(dokumentService); + Rechnung offen = TestBelege.rechnung("R-2026-000001", DokumentStatus.OFFEN); + Rechnung versendet = TestBelege.rechnung("R-2026-000002", DokumentStatus.VERSENDET); + Rechnung storniert = TestBelege.rechnung("R-2026-000003", DokumentStatus.STORNIERT); + + assertTrue(controller.aktionenFuer(offen).stornierbar()); + assertFalse(controller.aktionenFuer(versendet).stornierbar()); + assertFalse(controller.aktionenFuer(storniert).stornierbar()); + } + + @Test + @DisplayName("TC-11: ohne Bestätigung kein Service-Aufruf; mit Bestätigung genau einer (F-15)") + void tc11StornoNurNachBestaetigung() { + DokumentListenController controller = new DokumentListenController(dokumentService); + + assertNull(controller.storniere("R-2026-000124", false)); + assertEquals(0, dokumentService.storniereAufrufe); + + controller.storniere("R-2026-000124", true); + assertEquals(1, dokumentService.storniereAufrufe); + assertEquals("R-2026-000124", dokumentService.letzteStornierteNummer); + } + + @Test + @DisplayName("TC-12: versendeter Beleg: Änderungsaktionen deaktiviert, PDF-Export aktiviert (F-08)") + void tc12VersendeterBeleg() { + DokumentListenController controller = new DokumentListenController(dokumentService); + Rechnung versendet = TestBelege.rechnung("R-2026-000002", DokumentStatus.VERSENDET); + + BelegAktionen aktionen = controller.aktionenFuer(versendet); + assertFalse(aktionen.aenderbar()); + assertTrue(aktionen.pdfExport()); + } + + @Test + @DisplayName("TC-13: Statusfilter OFFEN liefert genau die offenen Belege (F-06)") + void tc13Statusfilter() { + dokumentService.dokumente.add(TestBelege.rechnung("R-2026-000001", DokumentStatus.OFFEN)); + dokumentService.dokumente.add(TestBelege.rechnung("R-2026-000002", DokumentStatus.OFFEN)); + dokumentService.dokumente.add(TestBelege.rechnung("R-2026-000003", DokumentStatus.STORNIERT)); + + DokumentListenController controller = new DokumentListenController(dokumentService); + List offene = controller.gefiltert(DokumentStatus.OFFEN); + + assertEquals(2, offene.size()); + assertTrue(offene.stream().allMatch(d -> d.getStatus() == DokumentStatus.OFFEN)); + } + + @Test + @DisplayName("TC-14: Stammdaten-Suche delegiert an KundenService und liefert den Treffer (F-03)") + void tc14StammdatenSuche() { + StammdatenController controller = new StammdatenController(kundenService, produktService); + + List treffer = controller.sucheKunden("Muster"); + + assertEquals(1, treffer.size()); + assertEquals("K-000017", treffer.get(0).getKundennummer()); + } + + /** Zähl-Stub des DokumentService (Gruppe A) für die Controller-Tests. */ + private static final class DokumentServiceStub implements DokumentService { + + int erstelleRechnungAufrufe; + int storniereAufrufe; + String letzteStornierteNummer; + ValidierungsException erstelleRechnungFehler; + Summen summen = new Summen(BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO); + final List dokumente = new ArrayList<>(); + + @Override + public Rechnung erstelleRechnung(String kundenNr, List positionen, + LocalDate rechnungsdatum, LocalDate zahlungsziel) { + erstelleRechnungAufrufe++; + if (erstelleRechnungFehler != null) { + throw erstelleRechnungFehler; + } + Rechnung rechnung = new Rechnung(); + rechnung.setBelegnummer("R-2026-000124"); + return rechnung; + } + + @Override + public void storniere(String rechnungsnummer) { + storniereAufrufe++; + letzteStornierteNummer = rechnungsnummer; + } + + @Override + public Summen berechneSummen(List positionen) { + return summen; + } + + @Override + public List alleDokumente() { + return dokumente; + } + + @Override + public Angebot erstelleAngebot(String kundenNr, List positionen, + LocalDate gueltigBis) { + return new Angebot(); + } + + @Override + public Auftragsbestaetigung erstelleAuftragsbestaetigung(String kundenNr, + List positionen) { + return new Auftragsbestaetigung(); + } + + @Override + public Lieferschein erstelleLieferschein(String kundenNr, List positionen, + LocalDate lieferdatum) { + return new Lieferschein(); + } + + @Override + public Dokument erzeugeFolgebeleg(String belegnummer) { + return null; + } + + @Override + public void versende(String belegnummer) { + } + + @Override + public List offeneRechnungen() { + return List.of(); + } + + @Override + public void exportierePdf(String belegnummer, Path zielDatei) { + } + } +} diff --git a/src/test/java/de/team1/faktura/kunden/KundenVerwaltungTest.java b/src/test/java/de/team1/faktura/kunden/KundenVerwaltungTest.java new file mode 100644 index 0000000..da5ca7f --- /dev/null +++ b/src/test/java/de/team1/faktura/kunden/KundenVerwaltungTest.java @@ -0,0 +1,201 @@ +package de.team1.faktura.kunden; + +import de.team1.faktura.gemeinsam.LoeschAbgelehntException; +import de.team1.faktura.gemeinsam.ValidierungsException; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; + +/** + * Modultestplan Gruppe C (Pflichtenheft C, Kapitel 10): TC-01 bis TC-14. + * Die Schnittstelle {@code KundenReferenzPruefung} (Gruppe A) wird durch + * einen Stub ersetzt. + */ +class KundenVerwaltungTest { + + @TempDir + Path tempDir; + + private JsonKundenRepository repository; + private final Map verknuepfteDokumente = new HashMap<>(); + + @BeforeEach + void setUp() { + repository = new JsonKundenRepository(tempDir.resolve("kunden.json")); + } + + private KundenVerwaltungsService service(KundennummernGenerator generator) { + return new KundenVerwaltungsService(repository, generator, + kundennummer -> verknuepfteDokumente.getOrDefault(kundennummer, 0)); + } + + private KundenVerwaltungsService serviceAusRepository() { + return service(EinfacherKundennummernGenerator.ausRepository(repository)); + } + + private static Kunde kunde(String name, String strasse, String plz, String ort) { + return new Kunde(name, strasse, plz, ort); + } + + private Kunde lege(String nummer, String name) { + Kunde kunde = kunde(name, "Hauptstr. 1", "68163", "Mannheim"); + kunde.setKundennummer(nummer); + return repository.speichere(kunde); + } + + @Test + @DisplayName("TC-01: höchste Nummer K-000016 -> neuer Kunde erhält K-000017") + void tc01NummernVergabe() { + lege("K-000016", "Bestehender Kunde"); + Kunde gespeichert = serviceAusRepository() + .legeAn(kunde("Muster GmbH", "Hauptstr. 1", "68163", "Mannheim")); + assertEquals("K-000017", gespeichert.getKundennummer()); + assertNotNull(repository.findeNachNummer("K-000017")); + } + + @Test + @DisplayName("TC-02: Zähler 7 -> K-000007 (führende Nullen, String)") + void tc02NummernFormat() { + assertEquals("K-000007", new EinfacherKundennummernGenerator(7).naechsteNummer()); + } + + @Test + @DisplayName("TC-03: fehlender Ort wird abgelehnt und benannt (Q-09)") + void tc03FehlenderOrt() { + ValidierungsException fehler = assertThrows(ValidierungsException.class, + () -> serviceAusRepository().legeAn(kunde("Muster GmbH", "Hauptstr. 1", "68163", null))); + assertEquals("Ort", fehler.getFeldname()); + } + + @Test + @DisplayName("TC-04: leerer Name wird abgelehnt und benannt") + void tc04LeererName() { + ValidierungsException fehler = assertThrows(ValidierungsException.class, + () -> serviceAusRepository().legeAn(kunde("", "Hauptstr. 1", "68163", "Mannheim"))); + assertEquals("Name", fehler.getFeldname()); + } + + @Test + @DisplayName("TC-05: ungültige E-Mail 'max.mustermann' wird abgelehnt (C-F-04)") + void tc05UngueltigeEMail() { + Kunde kunde = kunde("Muster GmbH", "Hauptstr. 1", "68163", "Mannheim"); + kunde.setEMail("max.mustermann"); + ValidierungsException fehler = assertThrows(ValidierungsException.class, + () -> serviceAusRepository().legeAn(kunde)); + assertEquals("E-Mail", fehler.getFeldname()); + } + + @Test + @DisplayName("TC-06: gültige E-Mail 'max@beispiel.de' wird gespeichert") + void tc06GueltigeEMail() { + Kunde kunde = kunde("Muster GmbH", "Hauptstr. 1", "68163", "Mannheim"); + kunde.setEMail("max@beispiel.de"); + Kunde gespeichert = serviceAusRepository().legeAn(kunde); + assertEquals("max@beispiel.de", + repository.findeNachNummer(gespeichert.getKundennummer()).getEMail()); + } + + @Test + @DisplayName("TC-07: Ortsänderung Mannheim -> Heidelberg wird gespeichert") + void tc07OrtAendern() { + KundenVerwaltungsService service = serviceAusRepository(); + Kunde kunde = service.legeAn(kunde("Muster GmbH", "Hauptstr. 1", "68163", "Mannheim")); + + kunde.setOrt("Heidelberg"); + service.aendere(kunde); + + assertEquals("Heidelberg", repository.findeNachNummer(kunde.getKundennummer()).getOrt()); + } + + @Test + @DisplayName("TC-08: Änderungsversuch der Kundennummer wirft IllegalArgumentException") + void tc08KundennummerUnveraenderlich() { + Kunde kunde = serviceAusRepository().legeAn(kunde("Muster GmbH", "Hauptstr. 1", "68163", "Mannheim")); + assertThrows(IllegalArgumentException.class, + () -> kunde.setKundennummer("K-999999")); + } + + @Test + @DisplayName("TC-09: unverknüpfter Kunde wird nach Bestätigung gelöscht") + void tc09LoeschenUnverknuepft() { + lege("K-000011", "Unverknüpft"); + serviceAusRepository().loescheKunde("K-000011"); + assertTrue(repository.alleSortiertNachName().stream() + .noneMatch(k -> k.getKundennummer().equals("K-000011"))); + } + + @Test + @DisplayName("TC-10: Kunde mit 3 verknüpften Dokumenten wird nicht gelöscht; Hinweis nennt Anzahl (GR-04)") + void tc10Loeschsperre() { + lege("K-000010", "Referenziert"); + verknuepfteDokumente.put("K-000010", 3); + + LoeschAbgelehntException fehler = assertThrows(LoeschAbgelehntException.class, + () -> serviceAusRepository().loescheKunde("K-000010")); + + assertNotNull(repository.findeNachNummer("K-000010")); + assertTrue(fehler.getMessage().contains("3")); + } + + @Test + @DisplayName("TC-11: Auflistung sortiert nach Name") + void tc11Sortierung() { + lege("K-000001", "Zimmer"); + lege("K-000002", "Albrecht"); + lege("K-000003", "Maier"); + + List namen = repository.alleSortiertNachName().stream() + .map(Kunde::getName) + .toList(); + assertEquals(List.of("Albrecht", "Maier", "Zimmer"), namen); + } + + @Test + @DisplayName("TC-12: Suche ist case-insensitive und findet Teilstrings") + void tc12SucheName() { + lege("K-000001", "Muster GmbH"); + List treffer = serviceAusRepository().suche("MUSTER"); + assertTrue(treffer.stream().anyMatch(k -> k.getName().equals("Muster GmbH"))); + } + + @Test + @DisplayName("TC-13: Suche nach Kundennummer trifft; findeKunde liefert null für Unbekannte (C-F-14)") + void tc13SucheNummerUndFindeKunde() { + lege("K-000017", "Muster GmbH"); + KundenVerwaltungsService service = serviceAusRepository(); + + List treffer = service.suche("K-000017"); + assertTrue(treffer.stream().anyMatch(k -> k.getKundennummer().equals("K-000017"))); + assertNull(service.findeKunde("K-999999")); + } + + @Test + @DisplayName("TC-14: CSV-Export mit Kopfzeile, Semikolon-getrennt, UTF-8 (C-F-15)") + void tc14CsvExport() throws Exception { + lege("K-000001", "Albrecht"); + lege("K-000002", "Maier"); + lege("K-000003", "Zimmer"); + + Path ziel = tempDir.resolve("kunden.csv"); + new KundenCsvExport(repository).exportiereCsv(ziel); + + List zeilen = Files.readAllLines(ziel, StandardCharsets.UTF_8); + assertEquals(4, zeilen.size()); + assertEquals("kundennummer;name;strasse;plz;ort;eMail;telefon;ustIdNr", zeilen.get(0)); + assertTrue(zeilen.get(1).startsWith("K-000001;Albrecht;")); + } +} diff --git a/src/test/java/de/team1/faktura/produkte/ProduktVerwaltungTest.java b/src/test/java/de/team1/faktura/produkte/ProduktVerwaltungTest.java new file mode 100644 index 0000000..8027d70 --- /dev/null +++ b/src/test/java/de/team1/faktura/produkte/ProduktVerwaltungTest.java @@ -0,0 +1,197 @@ +package de.team1.faktura.produkte; + +import de.team1.faktura.gemeinsam.LoeschAbgelehntException; +import de.team1.faktura.gemeinsam.ValidierungsException; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +import java.math.BigDecimal; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; + +/** + * Modultestplan Gruppe B (Pflichtenheft B, Kapitel 10): TC-01 bis TC-14. + * Die Schnittstelle {@code ProduktReferenzPruefung} (Gruppe A) wird durch + * einen Stub ersetzt. + */ +class ProduktVerwaltungTest { + + @TempDir + Path tempDir; + + private JsonProduktRepository repository; + private final Set referenzierteProdukte = new HashSet<>(); + + @BeforeEach + void setUp() { + repository = new JsonProduktRepository(tempDir.resolve("produkte.json")); + } + + private ProduktVerwaltungsService service(ProduktnummernGenerator generator) { + return new ProduktVerwaltungsService(repository, generator, referenzierteProdukte::contains); + } + + private ProduktVerwaltungsService serviceAusRepository() { + return service(EinfacherProduktnummernGenerator.ausRepository(repository)); + } + + private static Produkt produkt(String bezeichnung, String preis, String steuersatz) { + return new Produkt(bezeichnung, new BigDecimal(preis), new BigDecimal(steuersatz)); + } + + private Produkt lege(String nummer, String bezeichnung) { + Produkt produkt = produkt(bezeichnung, "10.00", "0.19"); + produkt.setProduktnummer(nummer); + return repository.speichere(produkt); + } + + @Test + @DisplayName("TC-01: höchste Nummer P-000041 -> neues Produkt erhält P-000042") + void tc01NummernVergabe() { + lege("P-000041", "Bestehendes Produkt"); + Produkt gespeichert = serviceAusRepository() + .legeAn(produkt("Beratungsstunde", "80.00", "0.19")); + assertEquals("P-000042", gespeichert.getProduktnummer()); + assertNotNull(repository.findeNachNummer("P-000042")); + } + + @Test + @DisplayName("TC-02: Zähler 7 -> P-000007 (führende Nullen, String)") + void tc02NummernFormat() { + assertEquals("P-000007", new EinfacherProduktnummernGenerator(7).naechsteNummer()); + } + + @Test + @DisplayName("TC-03: negativer Einzelpreis wird abgelehnt") + void tc03NegativerPreis() { + ValidierungsException fehler = assertThrows(ValidierungsException.class, + () -> serviceAusRepository().legeAn(produkt("Test", "-1.00", "0.19"))); + assertEquals("Einzelpreis", fehler.getFeldname()); + } + + @Test + @DisplayName("TC-04: unzulässiger Steuersatz 0.15 wird abgelehnt") + void tc04UnzulaessigerSteuersatz() { + ValidierungsException fehler = assertThrows(ValidierungsException.class, + () -> serviceAusRepository().legeAn(produkt("Test", "10.00", "0.15"))); + assertEquals("Steuersatz", fehler.getFeldname()); + } + + @Test + @DisplayName("TC-05: fehlende Bezeichnung wird abgelehnt und benannt (Q-09)") + void tc05FehlendeBezeichnung() { + ValidierungsException fehler = assertThrows(ValidierungsException.class, + () -> serviceAusRepository().legeAn(produkt(null, "10.00", "0.19"))); + assertEquals("Bezeichnung", fehler.getFeldname()); + } + + @Test + @DisplayName("TC-06: Preisänderung 80.00 -> 95.00 wird gespeichert") + void tc06PreisAendern() { + ProduktVerwaltungsService service = serviceAusRepository(); + Produkt produkt = service.legeAn(produkt("Beratungsstunde", "80.00", "0.19")); + + produkt.setEinzelpreisNetto(new BigDecimal("95.00")); + service.aendere(produkt); + + assertEquals(new BigDecimal("95.00"), + repository.findeNachNummer(produkt.getProduktnummer()).getEinzelpreisNetto()); + } + + @Test + @DisplayName("TC-07: Änderungsversuch der Produktnummer wirft IllegalArgumentException") + void tc07ProduktnummerUnveraenderlich() { + Produkt produkt = serviceAusRepository().legeAn(produkt("Beratungsstunde", "80.00", "0.19")); + assertThrows(IllegalArgumentException.class, + () -> produkt.setProduktnummer("P-999999")); + } + + @Test + @DisplayName("TC-08: unverknüpftes Produkt wird nach Bestätigung gelöscht") + void tc08LoeschenUnverknuepft() { + lege("P-000011", "Unverknüpft"); + serviceAusRepository().loescheProdukt("P-000011"); + assertTrue(repository.alleSortiertNachBezeichnung().stream() + .noneMatch(p -> p.getProduktnummer().equals("P-000011"))); + } + + @Test + @DisplayName("TC-09: referenziertes Produkt wird nicht gelöscht (Löschsperre)") + void tc09Loeschsperre() { + lege("P-000010", "Referenziert"); + referenzierteProdukte.add("P-000010"); + + LoeschAbgelehntException fehler = assertThrows(LoeschAbgelehntException.class, + () -> serviceAusRepository().loescheProdukt("P-000010")); + + assertNotNull(repository.findeNachNummer("P-000010")); + assertTrue(fehler.getMessage().contains("P-000010")); + } + + @Test + @DisplayName("TC-10: Auflistung sortiert nach Bezeichnung") + void tc10Sortierung() { + lege("P-000001", "Zaun"); + lege("P-000002", "Anker"); + lege("P-000003", "Mast"); + + List bezeichnungen = repository.alleSortiertNachBezeichnung().stream() + .map(Produkt::getBezeichnung) + .toList(); + assertEquals(List.of("Anker", "Mast", "Zaun"), bezeichnungen); + } + + @Test + @DisplayName("TC-11: Suche ist case-insensitive und findet Teilstrings") + void tc11SucheBezeichnung() { + lege("P-000001", "Beratungsstunde"); + List treffer = serviceAusRepository().suche("BERATUNG"); + assertTrue(treffer.stream().anyMatch(p -> p.getBezeichnung().equals("Beratungsstunde"))); + } + + @Test + @DisplayName("TC-12: Suche nach Produktnummer findet genau das Produkt") + void tc12SucheNummer() { + lege("P-000042", "Beratungsstunde"); + lege("P-000043", "Anderes Produkt"); + + List treffer = serviceAusRepository().suche("P-000042"); + assertEquals(1, treffer.size()); + assertEquals("P-000042", treffer.get(0).getProduktnummer()); + } + + @Test + @DisplayName("TC-13: findeProdukt liefert null für unbekannte Nummer (B-F-14)") + void tc13FindeProduktNull() { + assertNull(serviceAusRepository().findeProdukt("P-999999")); + } + + @Test + @DisplayName("TC-14: CSV-Export mit Kopfzeile, Semikolon-getrennt, UTF-8 (B-F-15)") + void tc14CsvExport() throws Exception { + lege("P-000001", "Anker"); + lege("P-000002", "Mast"); + lege("P-000003", "Zaun"); + + Path ziel = tempDir.resolve("produkte.csv"); + new ProduktCsvExport(repository).exportiereCsv(ziel); + + List zeilen = Files.readAllLines(ziel, StandardCharsets.UTF_8); + assertEquals(4, zeilen.size()); + assertEquals("produktnummer;bezeichnung;beschreibung;einzelpreisNetto;steuersatz;einheit", + zeilen.get(0)); + assertTrue(zeilen.get(1).startsWith("P-000001;Anker;")); + } +}

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 literal 0 HcmV?d00001 diff --git a/Pflichtenheft_GruppeD.md b/Pflichtenheft_GruppeD.md new file mode 100644 index 0000000..a01e70f --- /dev/null +++ b/Pflichtenheft_GruppeD.md @@ -0,0 +1,541 @@ +--- +title: "Pflichtenheft" +subtitle: "Desktop-Fakturierungsanwendung — Gruppe D: Programmoberfläche" +author: + - Team 1 – Gruppe D +version: "1.0" +lang: de-DE +toc: true +toc-depth: 3 +numbersections: false +papersize: a4 +geometry: "margin=3cm" +fontsize: 12pt +linestretch: 1.5 +mainfont: "Times New Roman" +sansfont: "Arial" +monofont: "DejaVu Sans Mono" +header-includes: | + \usepackage{fancyhdr} + \usepackage{lastpage} + \pagestyle{fancy} + \fancyhf{} + \fancyhead[L]{Team 1 – Gruppe D} + \fancyhead[C]{Pflichtenheft} + \fancyhead[R]{Version 1.0} + \fancyfoot[C]{\thepage\ /\ \pageref{LastPage}} + \renewcommand{\headrulewidth}{0.4pt} + \renewcommand{\footrulewidth}{0pt} +--- + +\newpage + ++-----------------------------+-------------------------+-------------------------+ +| Autor | Prüfer | Freigebender | ++=============================+=========================+=========================+ +| Güngör, Mirkan\ | Prof. Dr. Marmitt, Gerd | Prof. Dr. Marmitt, Gerd | +| König, Moritz\ | | | +| Bouhki, Mohammed | | | ++-----------------------------+-------------------------+-------------------------+ +| Gruppe D (Oberfläche) | Modulverantwortlicher | Modulverantwortlicher | ++-----------------------------+-------------------------+-------------------------+ +| 10.06.2026 | 10.06.2026 | 10.06.2026 | ++-----------------------------+-------------------------+-------------------------+ + +**Freigabevermerk:** Dieses Dokument ist nach Prüfung und Freigabe durch den +Modulverantwortlichen verbindliche Spezifikationsgrundlage für die Implementierung +und den Modultest der Komponente *Programmoberfläche*. + +## Dokumentenhistorie + +| Version | Datum | Autor | Grund der Änderung | +|---------|------------|----------------------------------------------|---------------------| +| 1.0 | 10.06.2026 | Mirkan Güngör, Moritz König, Mohammed Bouhki | Initiale Erstellung | + +\newpage + +## 1. Einleitung + +### 1.1 Zweck des Dokuments +Dieses Pflichtenheft (System Requirements Specification, SRS) beschreibt aus Sicht des +Auftragnehmers, **wie** die Komponente *Programmoberfläche* der +Desktop-Fakturierungsanwendung die Anforderungen des Lastenhefts (v1.3) erfüllt. Es +konkretisiert die fachlichen Anforderungen in testbare Systemanforderungen und dient als +direkte Grundlage für Design, Implementierung sowie den Komponenten- bzw. Modultestplan +(Kapitel 10). + +### 1.2 Ziel +Ziel dieses Pflichtenhefts ist die vollständige und testbare Spezifikation der grafischen +Benutzeroberfläche: Hauptfenster und Navigation, Listen-, Such- und Formularansichten für +die Stammdatenmodule (Gruppen B und C), Belegansichten und -aktionen des Dokumentenzyklus +(Gruppe A), die geführte (schrittweise) Rechnungserstellung als Dialogfolge (Wizard), die +Stornierung mit Bestätigungsdialog sowie die einheitliche Pflichtfeld-Markierung und +Fehleranzeige. + +### 1.3 Geltungsbereich +Dieses Dokument gilt für die Komponente **Gruppe D — Programmoberfläche**. Die +Gesamtanwendung wird arbeitsteilig in vier Komponenten entwickelt; jede Untergruppe pflegt +ein eigenes Pflichtenheft: + +| Gruppe | Komponente | Eigenes Pflichtenheft | +|--------|-------------------------|-----------------------| +| A | Prozess / Dokumentenzyklus | separat | +| B | Verwaltung von Produkten | separat | +| C | Verwaltung von Kunden | separat | +| D | Programmoberfläche | **dieses Dokument** | + +Die Komponente D enthält **keine Fachlogik**: Sie ruft die Dienste der Komponenten +Dokumentenzyklus (A, `DokumentService`), Produktverwaltung (B) und Kundenverwaltung (C) +über deren definierte Schnittstellen auf und stellt deren Funktionalität dar. Die +Benutzeranforderungen BA-13 (geführte Rechnungserstellung) und BA-14 (Rechnung +stornieren) werden arbeitsteilig spezifiziert: Gruppe A beschreibt die **Fachlogik** +(F-16–F-21 im Pflichtenheft A), dieses Dokument beschreibt die **Dialogführung und +Darstellung**. + +### 1.4 Definitionen und Abkürzungen +Fachbegriffe (Dokumentenzyklus, Rechnung, GoBD, DSGVO, …) sind im Glossar des Lastenhefts +(§ 8.1) definiert und gelten unverändert. Dokumentspezifische Abkürzungen siehe +Kapitel 11. + +### 1.5 Referenzen +- Lastenheft „Desktop-Fakturierungsanwendung", Team 1, Version 1.3, 09.06.2026 +- Project Charter, Team 1, Version 1.3, 14.05.2026 +- Pflichtenheft Gruppe A „Prozess / Dokumentenzyklus", Version 1.0, 09.06.2026 +- Pflichtenheft Gruppe B „Verwaltung von Produkten", Version 1.0, 10.06.2026 +- Pflichtenheft Gruppe C „Verwaltung von Kunden", Version 1.0, 10.06.2026 +- Vorlesungsunterlagen Software Engineering 1 (SoSe 2026), Foliensatz „Lasten- und Pflichtenheft" + +--- + +## 2. Systemüberblick + +### 2.1 Kurzbeschreibung +Die Anwendung ist eine **Einzelplatz-Stand-Alone-Desktop-Anwendung** mit **lokaler +Datenhaltung** (keine Cloud, kein Server). Die Komponente *Programmoberfläche* stellt die +**minimale grafische Benutzeroberfläche** bereit, über die die gesamte Funktionalität der +Anwendung zugänglich gemacht wird: Navigation zwischen den Modulen, Listen- und +Formularansichten der Stammdaten, Belegansichten mit Aktionen (PDF-Export, optional Druck +und E-Mail-Versand) sowie die geführte Rechnungserstellung als Schritt-für-Schritt-Dialog. + +Das GUI-Framework wird gemäß dem im Project Charter dokumentierten Technologie-Stack +gewählt; dieses Pflichtenheft spezifiziert die Oberfläche framework-neutral, die +Controller-Logik jedoch bereits mit Java-Typen (Kapitel 6). + +### 2.2 Abgrenzung (Was gehört dazu / was nicht) +**Im Umfang dieser Komponente:** + +- Hauptfenster mit Navigation zu den Modulen Kunden, Produkte und Dokumente +- Listen-, Such- und Formularansichten für Kunden (Gruppe C) und Produkte (Gruppe B) +- Dokumentliste mit Statusanzeige und Belegaktionen (PDF-Export, Druck, E-Mail) der Gruppe A +- Geführte Rechnungserstellung als Wizard mit 5 Schritten inkl. Zusammenfassung (BA-13, UI-Sicht) +- Stornierung einer Rechnung mit Bestätigungsdialog (BA-14, UI-Sicht) +- Einheitliche Pflichtfeld-Markierung, Fehler- und Erfolgsmeldungen (Q-09) +- Startverhalten der Anwendung (Q-04) + +**Nicht im Umfang dieser Komponente:** + +- Fachlogik des Dokumentenzyklus: Belegerzeugung, Summenberechnung, Nummernvergabe, + Statusführung, Storno-Logik, PDF-Erzeugung (Gruppe A) +- Fachlogik und Persistenz der Stammdaten: Validierungsregeln, Nummernvergabe, + Löschsperren (Gruppen B und C) +- E-Rechnungsformate, Mahnwesen, Buchhaltung, mobile Clients (LH-Nichtziele) + +### 2.3 Grobe Systemfunktionen +Anwendung starten → Hauptfenster anzeigen → Modul wählen → Liste/Suche anzeigen → +Formular oder Wizard bedienen → Eingaben an die Fachkomponenten delegieren → Ergebnis, +Fehler- oder Erfolgsmeldung anzeigen. + +### 2.4 UML-Bezug +Ein gemeinsames Use-Case-Diagramm aller Gruppen gibt den Überblick über die Akteure und +Ziele. Die für Gruppe D relevanten Use Cases sind: *Rechnung erstellen (geführt)* und +*Rechnung stornieren* (jeweils Dialogführung) sowie der Bedienzugang zu allen Use Cases +der Gruppen A–C. Die detaillierte logische Architektur dieser Komponente folgt in +Kapitel 7. + +--- + +## 3. Stakeholder und Kontext +Stakeholder und Systemkontext sind im Lastenheft (§ 2, § 3) beschrieben und gelten +unverändert. Für diese Komponente ist der maßgebliche Akteur: + +- **Anwender:in** — natürliche Person (Selbstständige:r, Freiberufler:in, + Kleinstunternehmer:in) **ohne technische Vorkenntnisse** (PZ-03); die Oberfläche ist + das einzige Bedienelement der Anwendung. + +Angrenzende Systeme/Komponenten: intern die Komponenten Dokumentenzyklus (A), +Produktverwaltung (B) und Kundenverwaltung (C); extern — über die Dienste der Gruppe A — +Drucker und Standard-E-Mail-Client (optional). + +--- + +## 4. Funktionale Anforderungen + +Die Anforderungen sind nach Oberflächenbereichen gruppiert und mit den Satzschablonen des +Foliensatzes formuliert. Jede Anforderung ist eindeutig, vollständig, widerspruchsfrei und +verifizierbar. Alle fachlichen Operationen werden an die Komponenten A–C delegiert; die +Anforderungen dieses Kapitels betreffen ausschließlich Darstellung und Dialogführung. + +### 4.1 Hauptfenster und Navigation + +**F-01:** Das System MUSS nach dem Programmstart ein Hauptfenster anzeigen, das eine +Navigation zu den drei Modulen *Kundenverwaltung*, *Produktverwaltung* und *Dokumente* +bereitstellt. + +**F-02:** WENN die Anwender:in ein Modul auswählt, DANN MUSS das System die zugehörige +Modulansicht anzeigen, ohne dass ungespeicherte Eingaben eines Formulars unbemerkt +verloren gehen (Nachfrage bei ungespeicherten Änderungen). + +### 4.2 Stammdaten-Ansichten (Kunden, Produkte) + +**F-03:** Das System MUSS für die Module Kunden- und Produktverwaltung jeweils eine +sortierte Listenansicht mit einem Suchfeld anzeigen; Suchanfragen werden an die Dienste +der Gruppen C bzw. B delegiert und die Trefferliste wird innerhalb der Vorgabe aus Q-02 +aktualisiert (siehe NF-PERF-02). + +**F-04:** Das System MUSS für Anlegen und Ändern von Kunden und Produkten Formulare mit +allen Pflicht- und optionalen Feldern (gemäß Pflichtenheft B Kap. 6.1 und Pflichtenheft C +Kap. 6.1) anzeigen; Pflichtfelder MÜSSEN als solche gekennzeichnet sein. + +**F-05:** WENN eine Fachkomponente das Speichern oder Löschen ablehnt (z. B. fehlendes +Pflichtfeld, Löschsperre GR-04), DANN MUSS das System die zurückgemeldete Fehlermeldung +sichtbar anzeigen und das betroffene Eingabefeld markieren (Q-09). + +### 4.3 Dokumenten-Ansichten + +**F-06:** Das System MUSS eine Dokumentliste anzeigen, die je Beleg Belegnummer, Typ, +Datum, Kunde, Bruttosumme und Status (`ENTWURF`, `OFFEN`, `VERSENDET`, `STORNIERT`) +darstellt und nach Status filterbar ist. + +**F-07:** Das System MUSS je Beleg die Aktionen *PDF exportieren*, optional *Drucken* und +optional *Per E-Mail versenden* anbieten; die Ausführung wird an die Dienste der Gruppe A +delegiert. + +**F-08:** WENN ein Beleg den Status `VERSENDET` oder `STORNIERT` hat, DANN MUSS das System +alle inhaltlichen Änderungsaktionen für diesen Beleg deaktivieren (GR-02; Logik bei +Gruppe A, Darstellung hier). + +### 4.4 Geführte Rechnungserstellung (aus BA-13, UI-Sicht) + +**F-09:** Das System MUSS die Rechnungserstellung als Dialogfolge (Wizard) mit genau fünf +Schritten anbieten: (1) Kunde auswählen, (2) mindestens eine Produktposition mit Menge +erfassen, (3) Rechnungsdatum und Zahlungsziel bestätigen, (4) Zusammenfassung prüfen, +(5) speichern. + +**F-10:** WENN ein Schritt unvollständig ist (kein Kunde gewählt, keine Position erfasst, +kein Rechnungsdatum), DANN MUSS das System den Wechsel zum nächsten Schritt verhindern +und die fehlende Eingabe benennen (Q-09). + +**F-11:** Das System MUSS es der Anwender:in ERMÖGLICHEN, innerhalb des Wizards zum +vorherigen Schritt zurückzukehren, ohne dass bereits erfasste Eingaben verloren gehen. + +**F-12:** WENN Schritt 4 erreicht wird, DANN MUSS das System eine Zusammenfassung mit +Kunde, allen Positionen, Mengen, Netto-/Steuer-/Bruttosumme, Rechnungsdatum und +Zahlungsziel anzeigen; die Summen werden vom `DokumentService` (Gruppe A) berechnet und +hier unverändert dargestellt. + +**F-13:** WENN die Anwender:in in Schritt 5 speichert, DANN MUSS das System genau einen +Speicheraufruf an den `DokumentService` (Gruppe A) auslösen und anschließend eine +Erfolgsmeldung mit der vergebenen Rechnungsnummer anzeigen. + +### 4.5 Rechnung stornieren (aus BA-14, UI-Sicht) + +**F-14:** Das System MUSS die Aktion *Stornieren* ausschließlich für Rechnungen im Status +`OFFEN` anbieten. + +**F-15:** WENN die Anwender:in die Stornierung auslöst, DANN MUSS das System einen +Bestätigungsdialog mit Rechnungsnummer und Bruttosumme anzeigen; erst nach Bestätigung +wird die Stornierung an den `DokumentService` (Gruppe A) delegiert und das Ergebnis +(neuer Status `STORNIERT`) in der Dokumentliste dargestellt. + +### 4.6 Meldungen und Eingabehilfen (übergreifend) + +**F-16 (Q-09):** Das System MUSS fehlende oder ungültige Pflichtangaben in allen +Formularen einheitlich darstellen: das betroffene Feld wird optisch markiert UND die +Meldung benennt das Feld namentlich. + +**F-17:** Das System MUSS nach jeder erfolgreichen Aktion (Speichern, Löschen, Export, +Storno) eine Erfolgsmeldung anzeigen und nach jeder abgelehnten Aktion die Begründung der +Fachkomponente darstellen. + +--- + +## 5. Nicht-funktionale Anforderungen + +**NF-PERF-01 (aus Q-04):** Das System MUSS nach dem Programmstart INNERHALB VON +5 SEKUNDEN vollständig bedienbereit sein (Hauptfenster sichtbar, Navigation reagiert), +bei einem Datenbestand gemäß Q-01 (bis 5.000 Kunden/Produkte). + +**NF-PERF-02 (aus Q-02, UI-Anteil):** Das System MUSS Such- und Auflistungsergebnisse in +den Stammdaten-Ansichten INNERHALB VON 1 SEKUNDE nach Eingabe darstellen, bei einem +Datenbestand gemäß Q-01 (gemeinsam mit den Diensten der Gruppen B und C). + +**NF-USE-01 (aus Q-05):** Die geführte Erstellung einer vollständigen Rechnung an einen +bestehenden Kunden MUSS von einer erstmaligen Anwender:in OHNE EXTERNE HILFE IN WENIGER +ALS 10 MINUTEN im ersten Versuch abgeschlossen werden können (Nachweis durch +Usability-Test mit mind. 5 Testpersonen). + +**NF-USE-02 (aus Q-09):** Das System MUSS fehlende Pflichtangaben in den Formularen der +Kunden-, Produkt- und Dokumentenerstellung so markieren und benennen, dass mindestens +80 % der Testpersonen die fehlende Eingabe ohne externe Hilfe im ersten Korrekturversuch +ergänzen können (Nachweis durch Usability-Test mit mind. 5 Testpersonen). + +--- + +## 6. Daten und Schnittstellen + +Dieses Kapitel ist direkter Input für den Modultestplan (Kapitel 10). Die Komponente D +führt **keine eigenen Fachdatenobjekte**; sie arbeitet ausschließlich mit den +Datenobjekten der Gruppen A–C und einem eigenen UI-Zustandsmodell. Datentypen werden +bereits als Java-Typen angegeben. + +### 6.1 Datenobjekte und Datentypen (UI-Zustandsmodell) + +**Designgrundsätze:** + +- Die GUI hält **keinen persistenten Zustand**; alle fachlichen Daten werden über die + Service-Schnittstellen der Gruppen A–C gelesen und geschrieben. +- Die Wizard-Logik (Schrittfolge, Vollständigkeitsprüfung je Schritt) ist von der + Darstellung getrennt und damit **GUI-frei testbar** (Kapitel 10). +- Beträge und Summen werden unverändert als `BigDecimal` (Scale 2) der Gruppe A + dargestellt; die GUI rechnet selbst nicht. + +#### `enum WizardSchritt` +`{ KUNDE_WAEHLEN, POSITIONEN_ERFASSEN, DATEN_BESTAETIGEN, ZUSAMMENFASSUNG, SPEICHERN }` + +#### Klasse `RechnungsWizardModel` +| Attribut | Java-Typ | Beschreibung | +|-----------------|----------------------------|--------------| +| aktuellerSchritt | `WizardSchritt` | aktueller Dialogschritt (F-09) | +| kundenNr | `String` (optional, `null`) | gewählter Kunde (Schritt 1) | +| positionen | `List` | erfasste Positionen (Schritt 2) | +| rechnungsdatum | `LocalDate` | vorbelegt mit Tagesdatum (Schritt 3) | +| zahlungsziel | `LocalDate` (optional, `null`) | leer = Standard-Zahlungsziel der Gruppe A (GR-06) | + +#### Klasse `PositionsEingabe` +| Attribut | Java-Typ | Beschreibung | +|----------------|------------|--------------| +| produktnummer | `String` | gewähltes Produkt (Gruppe B) | +| menge | `int` | Stückzahl (> 0) | + +#### Klasse `Meldung` +| Attribut | Java-Typ | Beschreibung | +|-----------|--------------------|--------------| +| typ | `MeldungsTyp` (`enum { ERFOLG, FEHLER }`) | Darstellung (F-16, F-17) | +| feldname | `String` (optional, `null`) | betroffenes Eingabefeld bei Validierungsfehlern | +| text | `String` | anzuzeigender Meldungstext | + +### 6.2 Schnittstellen + +**Externe Schnittstellen:** keine direkten — Drucker (IF-02) und E-Mail-Client (IF-03) +werden über die Dienste der Gruppe A angebunden; die GUI bietet lediglich die +auslösenden Aktionen an (F-07). + +**Interne Schnittstellen (genutzte Dienste der anderen Komponenten), als Java-Interfaces +skizziert:** + +```java +// Gruppe A — Dokumentenzyklus (genutzt von F-06 bis F-15) +public interface DokumentService { + Rechnung erstelleRechnung(String kundenNr, List positionen, + LocalDate rechnungsdatum, LocalDate zahlungsziel); + void storniere(String rechnungsnummer); + List alleDokumente(); + void exportierePdf(String belegnummer, Path zielDatei); +} + +// Gruppe C — Kundenverwaltung (genutzt von F-03, F-04, Wizard-Schritt 1) +public interface KundenService { + Kunde findeKunde(String kundennummer); + List suche(String suchbegriff); +} + +// Gruppe B — Produktverwaltung (genutzt von F-03, F-04, Wizard-Schritt 2) +public interface ProduktService { + Produkt findeProdukt(String produktnummer); + List suche(String suchbegriff); +} +``` + +> IF-Satzschablone (Beispiel): *Das System MUSS eine Bedien-Schnittstelle bereitstellen, +> die es der Anwender:in ERMÖGLICHT, die Stornierung einer offenen Rechnung auszulösen; +> die fachliche Ausführung MUSS über `DokumentService.storniere(...)` (Gruppe A) +> erfolgen.* + +--- + +## 7. Systemarchitektur (logisch, grob) + +Die Komponente folgt dem Muster *Model–View–Controller*: Die Views (Hauptfenster, +Modulansichten, Wizard-Dialog) enthalten ausschließlich Darstellung; die Controller +(`HauptController`, `StammdatenController`, `RechnungsWizardController`, +`DokumentListenController`) kapseln Dialogführung und Vollständigkeitsprüfungen und rufen +die Service-Schnittstellen der Gruppen A–C auf. Das UI-Zustandsmodell +(`RechnungsWizardModel`, `Meldung`) ist frei von GUI-Framework-Klassen und damit im +Modultest ohne Oberfläche prüfbar. + +### 7.1 Klassendiagramm + + + +![Abbildung 1: UML-Klassendiagramm Programmoberfläche (Gruppe D)] + +**Beschreibung zu Abbildung 1:** Das Klassendiagramm zeigt die Controller-Schicht der +Oberfläche. Der `HauptController` verwaltet die Navigation (F-01, F-02) und erzeugt die +Modul-Controller. Der `StammdatenController` bedient Listen-, Such- und Formularansichten +für Kunden und Produkte und nutzt dazu `KundenService` (Gruppe C) und `ProduktService` +(Gruppe B). Der `RechnungsWizardController` führt die Schrittfolge des Enums +`WizardSchritt` über das `RechnungsWizardModel` (Komposition) und delegiert das Speichern +an den `DokumentService` (Gruppe A). Der `DokumentListenController` stellt die +Dokumentliste mit Statusfilter dar und bietet die Belegaktionen an (F-06–F-08, F-14, +F-15). Fehler- und Erfolgsmeldungen werden einheitlich über die Klasse `Meldung` +dargestellt (F-16, F-17). + +### 7.2 Sequenzdiagramm + + + +![Abbildung 2: UML-Sequenzdiagramm „Geführte Rechnungserstellung (Wizard)" (Gruppe D)] + +**Beschreibung zu Abbildung 2:** Das Sequenzdiagramm stellt die Dialogfolge *geführte +Rechnungserstellung* dar. Die Anwender:in startet den Wizard; der +`RechnungsWizardController` lädt in Schritt 1 die Kundenliste über +`KundenService.suche(...)` (Gruppe C) und in Schritt 2 die Produktliste über +`ProduktService.suche(...)` (Gruppe B). Vor jedem Schrittwechsel prüft der Controller die +Vollständigkeit des `RechnungsWizardModel` (F-10); bei fehlenden Eingaben wird eine +`Meldung` mit dem Feldnamen erzeugt und der Wechsel verhindert. In Schritt 4 fordert der +Controller die berechneten Summen für die Zusammenfassung an (Gruppe A) und stellt sie +unverändert dar (F-12). In Schritt 5 löst der Controller genau einen Aufruf +`DokumentService.erstelleRechnung(...)` aus (F-13), zeigt die Erfolgsmeldung mit der +vergebenen Rechnungsnummer an und schließt den Wizard. + +--- + +## 8. Testbare Abnahmekriterien + +**AC-D-01 (zu F-01, F-02, NF-PERF-01)** — *Programmstart und Navigation* +Vorbedingung: Datenbestand mit 5.000 Kunden und 5.000 Produkten (Q-01). +Aktion: Anwender:in startet die Anwendung und wechselt nacheinander in alle drei Module. +Erwartet: Das Hauptfenster ist in ≤ 5 Sekunden bedienbereit (Q-04); jede Modulansicht +wird angezeigt; bei ungespeicherten Formulareingaben erscheint eine Nachfrage. + +**AC-D-02 (zu F-03, NF-PERF-02)** — *Stammdaten suchen über die Oberfläche* +Vorbedingung: Mindestens 100 Kunden und 100 Produkte sind im System. +Aktion: Anwender:in gibt in der Kunden- und der Produktansicht jeweils einen Suchbegriff +ein. +Erwartet: Die gefilterte, sortierte Trefferliste erscheint jeweils in ≤ 1 Sekunde (Q-02). + +**AC-D-03 (zu F-09–F-13, NF-USE-01)** — *Geführte Rechnungserstellung (Wizard)* +Vorbedingung: Mindestens ein Kunde und ein Produkt sind im System vorhanden. +Aktion: Eine erstmalige Anwender:in durchläuft den Wizard (Kunde → Position+Menge → +Datum/Zahlungsziel → Zusammenfassung → speichern). +Erwartet: Die Zusammenfassung zeigt Kunde, Position, Menge, Summen, Rechnungsdatum und +Zahlungsziel; nach dem Speichern erscheint die Erfolgsmeldung mit Rechnungsnummer; die +Durchführung gelingt ohne externe Hilfe in < 10 Minuten (Usability-Test, ≥ 5 Personen). + +**AC-D-04 (zu F-10, F-16, NF-USE-02)** — *Pflichtfeldhinweis im Wizard und in Formularen* +Vorbedingung: Wizard-Schritt 1 geöffnet bzw. Formulare „Kunde anlegen" und „Produkt +anlegen" erreichbar. +Aktion: Testpersonen versuchen ohne Kundenauswahl in Schritt 2 zu wechseln bzw. ohne ein +Pflichtfeld zu speichern; anschließend ergänzen sie die fehlende Angabe. +Erwartet: Der Wechsel bzw. das Speichern wird zuerst verhindert, das fehlende Feld wird +markiert und benannt; in ≥ 80 % der Testdurchläufe gelingt die Korrektur ohne externe +Hilfe im ersten Versuch. + +**AC-D-05 (zu F-14, F-15)** — *Stornierung mit Bestätigungsdialog* +Vorbedingung: Eine Rechnung im Status `OFFEN` und eine im Status `VERSENDET` existieren. +Aktion: Anwender:in öffnet die Dokumentliste, prüft die angebotenen Aktionen und +storniert die offene Rechnung nach Bestätigung. +Erwartet: *Stornieren* wird nur für die offene Rechnung angeboten; der +Bestätigungsdialog zeigt Rechnungsnummer und Bruttosumme; nach Bestätigung erscheint die +Rechnung mit Status `STORNIERT` in der Liste. + +**AC-D-06 (zu F-06–F-08)** — *Dokumentliste, Statusfilter, deaktivierte Aktionen* +Vorbedingung: Belege in den Status `ENTWURF`, `OFFEN`, `VERSENDET`, `STORNIERT` existieren. +Aktion: Anwender:in filtert die Dokumentliste nach Status und öffnet einen versendeten +Beleg. +Erwartet: Der Filter zeigt ausschließlich Belege des gewählten Status; für den +versendeten Beleg sind alle inhaltlichen Änderungsaktionen deaktiviert, PDF-Export bleibt +verfügbar. + +--- + +## 9. Traceability LH ↔ PH + +Jede für Gruppe D relevante Lastenheft-Anforderung ist mindestens einer +Pflichtenheft-Anforderung zugeordnet. + +| LH-Anforderung | Beschreibung (LH) | PH-Anforderung(en) | +|----------------|-------------------------------------------|---------------------------| +| BA-13 | Geführte Rechnungserstellung (UI-Anteil) | F-09, F-10, F-11, F-12, F-13 | +| BA-14 | Rechnung stornieren (UI-Anteil) | F-14, F-15 | +| BA-01–BA-08 | Stammdatenpflege (Bedienzugang) | F-03, F-04, F-05 | +| BA-09–BA-12 | Belegerstellung (Bedienzugang) | F-06, F-07 | +| GR-02 | Unveränderlichkeit versendeter Dokumente | F-08 (Darstellung) | +| PZ-03 | Bedienbarkeit ohne Vorkenntnisse | F-09–F-13, NF-USE-01 | +| Q-02 | Suche/Auflistung ≤ 1 s (UI-Anteil) | NF-PERF-02, F-03 | +| Q-04 | Anwendungsstart ≤ 5 s | NF-PERF-01 | +| Q-05 | Usability Ersterstellung Rechnung | NF-USE-01 | +| Q-09 | Pflichtfeldhinweise ≥ 80 % | NF-USE-02, F-10, F-16 | + +> Hinweis: Die Fachlogik zu BA-13/BA-14 (Schrittvalidierung beim Speichern, +> Statuswechsel, Protokollierung) ist im Pflichtenheft der Gruppe A spezifiziert +> (F-16–F-21 dort); dieses Dokument spezifiziert ausschließlich Dialogführung und +> Darstellung. Die fachlichen Validierungs- und Performanceregeln der Stammdatenmodule +> liegen bei den Gruppen B und C. + +--- + +## 10. Modultestplan + +Die folgenden Testfälle sind deterministisch (feste Ein-/Ausgaben) und mit JUnit 5 +umsetzbar. Getestet wird die GUI-freie Controller- und Modell-Schicht (Kapitel 6.1/7); +die Service-Schnittstellen der Gruppen A–C werden durch Stubs/Mocks ersetzt. Die +Usability-Nachweise (NF-USE-01/02) erfolgen ergänzend durch manuelle Usability-Tests +(Kapitel 8) und sind nicht Teil des automatisierten Modultests. + +| TC | Abgedeckte PH-Anf. | Vorbedingung | Eingabe | Erwartetes Ergebnis | +|-------|--------------------|--------------|---------|---------------------| +| TC-01 | F-09 | Wizard neu gestartet | `aktuellerSchritt` lesen | `KUNDE_WAEHLEN` (erster Schritt) | +| TC-02 | F-09 | Schritt 1 mit gewähltem Kunden | `weiter()` 4-mal mit gültigen Eingaben | Schrittfolge: `POSITIONEN_ERFASSEN` → `DATEN_BESTAETIGEN` → `ZUSAMMENFASSUNG` → `SPEICHERN` | +| TC-03 | F-10 | Schritt 1, kein Kunde gewählt (`kundenNr = null`) | `weiter()` | Wechsel verhindert; `Meldung(FEHLER, "Kunde", …)` erzeugt | +| TC-04 | F-10 | Schritt 2, leere Positionsliste | `weiter()` | Wechsel verhindert; Meldung benennt „Position" | +| TC-05 | F-10 | Schritt 2, Position mit `menge = 0` | `weiter()` | Wechsel verhindert; Meldung benennt „Menge" | +| TC-06 | F-11 | Schritt 3 erreicht; Kunde `K-000017`, 1 Position erfasst | `zurueck()` bis Schritt 1 | `kundenNr` und `positionen` unverändert erhalten | +| TC-07 | F-12 | Schritt 4; Stub `DokumentService` liefert Summen 200.00/38.00/238.00 | Zusammenfassung erzeugen | Zusammenfassung enthält Kunde, Positionen, Mengen, 200.00/38.00/238.00, Rechnungsdatum, Zahlungsziel | +| TC-08 | F-13 | Schritt 5; gültiges Modell | `speichern()` | genau **ein** Aufruf `erstelleRechnung(...)` am Mock; Erfolgsmeldung enthält gelieferte Rechnungsnummer | +| TC-09 | F-13 (Fehlerfall) | Stub `erstelleRechnung` wirft Validierungsfehler „Rechnungsdatum" | `speichern()` | keine Erfolgsmeldung; `Meldung(FEHLER, "Rechnungsdatum", …)` dargestellt (F-05/F-16) | +| TC-10 | F-14 | Dokumentliste mit Rechnungen in `OFFEN`, `VERSENDET`, `STORNIERT` | verfügbare Aktionen je Rechnung ermitteln | *Stornieren* nur bei Status `OFFEN` aktiviert | +| TC-11 | F-15 | Rechnung `R-2026-000124` im Status `OFFEN` | `storniere()` ohne Bestätigung; danach mit Bestätigung | ohne Bestätigung: kein Service-Aufruf; mit Bestätigung: genau ein Aufruf `storniere("R-2026-000124")` | +| TC-12 | F-08 | Beleg im Status `VERSENDET` | Änderungsaktionen ermitteln | alle inhaltlichen Änderungsaktionen deaktiviert; PDF-Export aktiviert | +| TC-13 | F-06 | Belege mit Status `OFFEN` (2×) und `STORNIERT` (1×) | Statusfilter `OFFEN` anwenden | Liste enthält genau die 2 offenen Belege | +| TC-14 | F-03 | Stub `KundenService.suche("Muster")` liefert 1 Treffer | Suchbegriff „Muster" eingeben | Controller delegiert an `KundenService.suche(...)`; Trefferliste enthält genau diesen Kunden | + +Damit sind 14 Testfälle (> 10) spezifiziert, die alle funktionalen Kernregeln der +Dialogführung (F-09–F-15) sowie die übergreifenden Darstellungsregeln (F-03, F-06, F-08, +F-16) abdecken. + +--- + +## 11. Anhänge + +### 11.1 Abkürzungen +| Abkürzung | Bedeutung | +|-----------|-----------| +| F | Funktionale Anforderung (Pflichtenheft) | +| NF | Nicht-funktionale Anforderung (Pflichtenheft) | +| IF | Schnittstelle (Interface) | +| AC | Abnahmekriterium | +| TC | Testfall (Test Case) | +| BA | Benutzeranforderung (Lastenheft) | +| GR | Geschäftsregel (Lastenheft) | +| Q | Qualitätsanforderung (Lastenheft) | +| PZ | Projektziel (Lastenheft) | +| GUI | Graphical User Interface (grafische Benutzeroberfläche) | +| MVC | Model–View–Controller (Architekturmuster) | +| SRS | System Requirements Specification (Pflichtenheft) | + +### 11.2 Glossar +Es gilt das Glossar des Lastenhefts (§ 8.1) unverändert. + +### 11.3 Referenzen +Siehe Kapitel 1.5. diff --git a/Pflichtenheft_GruppeD.pdf b/Pflichtenheft_GruppeD.pdf new file mode 100644 index 0000000000000000000000000000000000000000..65cc1251b5867b463caac5ae6f2e3f8eecf821fc GIT binary patch literal 181314 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%0Db6X1)kGt$%@9?Qp+Z}3>jK?jm z&@C6<-`$SlqZU?C=OLYIB{wgjb5M@XG*iT_NstUd-3HsnQ6|rE2kxSR=Eq6gB~iB( zcUxx~YENb^^EUifE1Vu~5WqU!3G*2u1^4d*<&k}(P?-ITX=LkP!G=f|YBm54J@^bB&FQ-XoIq%uoc9-RDhU9sR z!udEqpKMW_U@n zpQi;b3tJzQbhubu8A;+Q8t`e8g;+HtmAziS4@oP5g93O}IEUQaqrx8rO4y4QW8T42 z{9X*y%?>ggm7=X zd*Or>^~v561p8ztxpJWu{573Yc&iO67;4mBd;b%6-@78)T=GcEhYpcPBl(ypizaVR zL*Bj{!n_;2gzG946pmKuL-ZlrA^YR>49y<$0-N_HTT9yjF(?hVsQ~S@JEbe=%cWQ8 zGZI^e@$$DXH zo_I%=yWL@A2#g!87R$5{w$gSL6ggkECuq1;MDR1Hc+$~wow~p^B24|Z@-uFig{~=AOY#~c)w|~tqteL)}Kdp zd(ql*=ZDYAXVGfYxS9sqHJ-7aw-0sG{d-TTK%Rrb`Jd|zW;Vol1}dSL)7USZF?h&V zs3P3qfF>L4NCrBJdrjlTZSB-Ytna@}jx7B0qg~Db zonk0r{z0(e+O=NU3VaK{k5kRQSZm*c{{AmxS?!t&7oZ|SSf-f2Clf@RK%qGR8~`^E zm17i1Qe@&J`S%c#GQfm}V?-e>$wnq%NTcb=^e@uXWE!O9*3~FWZm3cr;QjELp7?&P z_51CI_X`?!iu@zgN8H<1XW)&S8aK`i!^_Zhc-`0h3o2Cs_J4wg z53}MV`49Dn8LL#_^*CnF(gCl(+OlB0AI>?^sph8kE+YlnlD;W%uTJxtw80liM|vZD z#+sfrE4U<=$`-l{J%ts84XZbA-Eb>$JGe!^6<&XUH~{Wl^GM{0OCRfbX7%gz*-PH+ z@wRX6-7vVBI??|^;@3fn>A&Z)8ny}2%fr3C)UszCKQQuYzD5)n?ZL^ zPsfIYYr}>_&xY;`ff729+a6t=(^;}Ha zG$R8(P^JRA$=Vwim}@(L+j^?szV#Ca{m!PQENAH~t@&6Wcim6=%Gcens`BkycONW3 zeL(glJ9<7IDcuK%eQSmzHWl9iO}Yvh5!^s&Bt*)w0VzQ7I1Z z>;9YTYnZ2uf+xtUsl$YosF`b9G2rRr1Y^Uc!@&MVVzb`PSAzt{R;;D})84m0wRN58?sJY_AcO!L z492z&F9SwAj9;-W2MHt$1|tI4fG0K~leFn$nlzoYCX-2%bn>{jGvn56GnuB2?fdQj90@^)o2Iw3I%}E3zxTiQ z{`ddd|K9r?9qF7ULV14K61KdoGS9k1xW=${iLg2Y$?}4VC9Ep9Vu||YQvU5{blKy&Q->b?;VEp-A=PuIf!7qp3v0?pLTyXK? z;{0=2@A7XwEH0q;i>n`EX;g&2=;DULM{&ZIuAkPw7Z0Xmae=|gK3^uR5pvVSqTC|Q zmJ82oR=&SQn!4~K&FTw3d{=m`Tlmh zjMT^ksc}*(r=>g0+^ zYl`d*YmV|qN|}q?MTdcCLPckbE*D8fFPZJRAjstexv%Al=3IB~Vg4k?Q102>%ehkS zOPCUeHmtGW!bx5A4AX|gZ;R8t~6+e+6qm(K~$ z8gfMQ$LD9r`LBO5lnKvnQO*~eq+zLByB9(B4C3`0EZc76uc$&0iYp|3X0}uLEl1O( zXQXcS97ecSefz|wdkgQa`DX2O?Q^w1uhrd@Ilkz#nYS*|WT>Q+t*vB{#I z9qK;1^W3{T`M13J#`7lr6B~|t#=>7haXO!suE@#BpixCFz36g*^22QU0%Gc!hxSA2 zqyC0;qbWTvFK>ly>$=9hecS5-aJuYNQFKe1GC;pwhRW68WOskg+Mx917Fl~C8 zXw+$ckfvLW8tDf{aWzX5wT$sKD9xx_Xhf~Sz}KrZaba4T$beVH)3i7ftYSK86BEUk z>_+42V`&qZ0c^E6Exr^7KTc&>twYJ4ElWSJ7zJjOjmM0V@wXW-K2GoUD8NjK0Cy=OkTb=UBF&+0a|+crx4)Uvwni$}f}^m}&gQ}w+M`i`+e_APsr zu=G&T*jk*;=jGuvW4V5L-a7rdyv_Q}dA<7HybN8^h=PQo-$`1T0*wI%MHbX$8D}6qiOwP$+m5{JKZ&3+#Cc|AznNLhRz_vvwJ-Loto$l{v%oMVDNx zH;Y|}z4v0)u4GH%@4Rlkuta=_txr?{e>0Up_YkfdXWDuIH5}J`nqekc|AM%l zNgBqs0L}xffNp>c7zFeI+5tBMt^@4^;113s0SOt}@3JiIc2*470=z`?23w(tvLfIu zybO7(q@`>H@M5%8>X(A{yO-bM?Vu|ry6xx}WrxsyEy_kfj{bI5h}=xNzkv(ChuDLv zO>L?6O1I-`lwH1nycxPWk+*}!4SW;81ifwI`paJ6*}ymH*0XHj82}ghy~q22-UJq=jzA)h(E69Jaytcb@z(@z``nC@{#%bSUv~# zC-_6uzdgTAmw#bkm(QvGY5HSi{IUK2yZ$g|jvM}5m2<0rInVCrhmffp;%Yh$iQgB$ zFI_9$BfY56X<9VD)<$#@{Y{3&hTo?BD80{kV@6NLgQjJsM>F#>r}&YTpZ#LaBMWX@ zcyI2#c~36-UH*Lq*B7oWe0k~eWxJNWFXzd>E*>e>l|EPYujOkiZB^T=wp(+oH{y6z zIcnaot6RCR{+%^!?XGKH-Ehao_cyI>xXu2lCeisqbKd5=TVCFxY5&yLr`;8u|Jc23 z+nv1`eRA?>Nglqw&#K2mzvp-^dHh@A*s*p;a7XYjcFcENue<)4kACdzN;z)Yc|VS+ zD<8W${shO{f1by{wK#srcRFE{_!zUXALHym#Oi8iw_#2Fx%n=prS)!u_-(q@;=90N zW%ARWxr|B@oug-p*QmI}`ov}x*QC&BS-yCmitAXhIHlrxwoiOX#SN^EWvX}@yG`m) zaZ{#7`p3kcESR!iQgMNqbKX*Mk?C{ZQE`b`b1ta3CWS`JG8UApxQ=BnSf%26wsC<| z#SJV!`!y9$V@(SVs<=rnE_fQ81&st*8H=AGoO>v1@e73OsQz`r$&-u!gKz`k?-QN| zMT-kFR9x|)f-62$aK(oTu1TR$e5l}x4;5VTp@J(uRB*+I3U10=xU`1w^c4M#T(_!5 z!ZT9pGdW(>ML2(hL}t}4!WRI~sR|OlFoiys_U#&_g+y~N;Y(9!EGc*? z(LX}?3c}A2UQPIO95xR z(r!U%1hu?%96CmmHgP`$$d2HL>N7;XkXa+jgJ|Kk9`eL&8x=kw)l!+HjHA^{_VUsY zc<)Ew2-S>(%154)QJ)x(R_MgN6QF)$C(>_XNRigy0O!ZOJaQ}sq zBRFFRZ;wHX0D4B@g&ts|)JJ9=sx4ih9VJil@g0V)LDG9}ylnVAz2!OmWmW+m0n#p% z^hqV#PJW0cbzKL&R$`22xGTJ8ICrvcaO(NJ@|98XkdJvp`^bY_m%TJvLmz84e2{V` zvYkY`AGBkzoX7qUj({2m)qrmD{}_DYM=wQggf!(`c|>m~`j|Rm?WC`d#+XOvN?d)d zf_FaXNggNT&?8Jyp~S}!ag9;D_ft&D5+*4xv?Bmdnhw2@`0M6qz%?&d1fws z&^uu&`_PAb*Q(AdzIG{ctw}j^EeKFF?I%BZX{DLZXZux41GEMOX|+kLigSG*q6j!Z zb0UB_kUF>L=dS4RaebS*awK9iLNg~uBj-)V_k0#4q<>JajVUp}Em3TVk-WsriO_0u zfZ`_vFOAU(>-kVimDuyliYjHL45_JNm4fp%JFKqUT-$xg*{1N}lze}@*J46t5mA9cV@MSCOwwW<`3DoKjJnvCW>s8hx%5jB1~zX+=P>r8ZCY41-&<%jS8eB?TlGbfs|11aOJM1fzGHB7NQ zrjEOnY>ue=vawW56^@97TI!8RS&L#r1e?=)aRUJQkY-!h)`O&rU)`z3lVh2>mMCLbtB!b-W=SxqLtY+4Gp{8GnifK1#XF8NciSg*RpIh+SblR#tu=S&-QAHq2VZJ>VFk z6=(kI5#`)3vCGW(XC%2#%(te@?iHoALK&+;)$aNCT+fG$Xe4QUR6V1N(fkdP2E09W zNB_7Hkl5c^n2TE7tQnn6%B;=L8M?Z{m!9q-YEnr$d^d^4?r zio6c=Qm(FA)jd(svg z;+#3pCTP@7C0@G?c_-+)Nxp+@R?M$B66Kj$_6u z2l=3dw3+c=6Y@@I&iQXfYY*)ZZuE4LrQPH`m+CWaZ9A1_tWrj*iLBvXwbB)k1DJ#K zoss2Mb?HjsHrsc-)ILL{*ym8wCi0w{O3G+7QK^TdNwjZMNBV<);a+!;Pq<#)Ny#6^x#pX4 zeO>)pxo5;LZw-xwVh6&0xhWJ0ha#R>AT(AZJAy&ED=<6~i^^U8s6VpL@2inbrWXHT z#J^v5hy7zcyidF5KxjNB2SdXFuj~zl4@7t$nX|83B`@dMI;-5}35G}H7SEVB!@tpRTJkh?vF${*L5{3>xmrHMBLfEwP$XB znBtLR5s%M5>WS=?Lqi`v49QAzwlm_{9~c{!-9tmLNUoNJ(z<8+*KY}>YN+qU_~wrzH7+qP}nP6yLdGgUJWQ&V*x&db^N_1?YL zx7WdA-0)G#rTQ{?N^;TRz5@f0A8g2o5v!A*h0eb$LHy``1_nN;9_^@51N*`2(5Kou zdUz-!o!UC{Nzz~fkXARrel)Kl=T%%Zgb`yMHjlu!ya#6}1gsiK0IVaFTJ9nR=`xhK zP>-Yi6xHLIkUsTo5+Wi-(rX-87cph#b=X{AIy=YBVL|#F9}5}}fjSsf%DfyQWEiz& zB^czZ*${q==pOr19@B15pB7)TKCnT|2j{Vz;t@E}5Hpyg#Xz#MW& zO+oz;m;|iQumla-j)L|je&ss;8uqWhKEU#_6ihmk(#`oe3Z+t{p=kp|6R3waCwZHX z)8pu>k#2JL$Tugvglj{(hr6c;Mm>q0=Ci&x6Pk~^CKpFR$i+}#o%X`w!a?bS##@wlT7LgTK=ajm(161Ec=o;h`+XR|s5m1L zo@vG}u>B0^8OPLSr`8UjuRn<_5AXd9`O$-2E)U-VHo@wp!C9(s>@_}xoEQSxR1KW9 z;SFHIAhJYu1*&*(?;yfFuSvoKhYS>4Lda-UkfZNMF%MF#QU->!uyG&tB|)J0*2~h5 z6%{fb;VNV?7nVv!KN1#C&}4gL z1{Qhzruh9AqouItgXEeXWJ*gVXW@`)a3AK=I`WYPNOXLWAxvm}h=vbT$X`YEvQ%*N&4q`4bh(%hMUQ zuCA=j`DYe3w)WTOtrOGLytvus%;{W5a^mXp){8A};%Qs$)s>6e*MT17Yi><$EbfAl z)|Hh-r4UMrU(IbXWfS=ydQXzrbhAroTgEY2(~ohXV7 z73JIW9m`bQxZ1c`x=WLAbh;uXR;!x_g;ZnCd%fkQ%iI0a7EbO@E(I1LDZ0GlHQm+Q zbd^_UR@W!+mN!m8yzb!x(4Yj;dD ze9}nwb1L1nYIZE!Jxh;gujHgBN)hljh<_jF6(oO*2m7s@B22KqD*an>QK(s>S#G&# zvtlFE;fq$v_;d@j&Bqm{zS4kXDD>7bWMS*-&m^=u5x?JOMfjz})1S%|^#pT{(@4mV zzDnCHBmKijSzX7%;Z)4NZg+lqRrZAD1($EASvC%`0`v>C7j{n1SL$Q^&!nn-o|vAh zFrcfj;oETsQNQcYxAwy9ka%5(hQhrTPi?%GUJN^1#n^^5iiwk`>z8$`%em@{v_C~R zRd;A3`UR_|qO#wPp->2cPhbXkfaV(Gd8rKu0aNGGgUR{BN0E6ke&N^Og;xW<+n4S( z%1%7kUg{h(P6m4^PZ?W)4HI)`E@$DwwTyv0p%3sK*B+0+pwPl@Ly-TVe-aQJGjTJJ z6|kKiF)s}-EN|T7?JRLMcrZ{HFqX#);nMAK`BQ#V7;4e&={s^vyq{c0)I+ae561gf znSSW!CB@@snbtRz(~fVP)(>j(W4xc{^bgi^$XIVM(`;{9>Z|185`D?Z=pPI34ARMZ z*lVVIcmm)~?6qx&?d{K1U93j0pZemf=$`yjQe63Rp2=PRN_BM_57;BL_!cWs`)2g)9J z#gFtKaiCET$qfX4HKEE`39kcGG_du%BTp}%LF5HQ9ow`}GMLmA{9MZ7;zt3I-0~AM zxyw?u9}_Kz+Glw>y^5p!jmxp*t}8!akrqTtN(0tDs5yxp56kM~=%s!!xT#!AP71ta zcq@1-R#!Q~(<+r&E;v}i3}RL0tN>X}2%CWp?Kn=m6o_|v{CG3q0e@m3xGG$MZklTl z*gkqt1uOKQb8MwhCA2;8y;|bcLKBD_Oc%4IOhs!kTHy(8F5pgJ!)Dbq8_B2rr&9n- zK2CK;*>SI|2kto_7PuwfL})xX5lV$V{8o67<_}Z8@=6yQgx0}_+@~Y6tDFgLV`x3n%aW;u}jgH~nN><{6O z%>Xo4I10sQo}jhFrstQu!7;Kqta<(0#)G8CFlDnI^>PhpuWZauS23yyxUU@biey=y zz$fQoo9c_PqLo1QDWMEOpWCgh9DEK411K0+>!oWc%C$A^QQQhR7?>Ow%MvnHuUwrc z;1KB^Y21pvdaAjui)Tbbu7z+ifz-@EL3SW0**9ZhR$)WHvYglX-(qFj5_@~b?UrE` zc#*0;c*EZ}B~4>?F6nr#>09v1#e-mWQ5s0h5$(wr9#o&)#kk2@*Dz5sx2PGu$|fJG z3Fp?LCD@TNS&<&Sr0Hm6j)cWxxzPHBE-=ND*J4rU+-S2Ebg}4W+!O{PSP5Y5HHH0PPiStE&0-GUE#Q(@{y-3Raz&-Us9{<&>4_Nfe zaaHOq5~5!Alf8Dg-{SgJt{^@wbC+KFrg(c#~p*MoMh1^!swl*GAr9aNQ638IN9&I`pHgdgEa^5jV9qxd5ltd*OpbJt$`2;M(G*RnOY8mDk3SE(>kWrd2SV zce|m0#7Hyl!n!16Wju_QTDr8I%60GlF4+{EgpNLdDo$&~X0zocx-IlP#IaKqe-YuL z^|E%+eyMgr{nGSH>Ff8GkZ>&FWW41V!yjx|h#WydI;$eoeG$%72JL1nmo zO(J>G<9`s40V1Op8JdKxk+ypgL&D<7h9?&JifXg$CB3_>j`A{_;n`{*U=66zC^DvflK1~($% zF0{_<(#R;(!qN~mxnK^@%9+6jM{>Q%vawWM(I@ zVpFLOh03O;1of$oiOQD~0uB{6xUBpD5^@=H@=joep(R2Ef(&IWg}^MT zKm0$RF@8Yx4CjF1Q`dKCola>T-@coO*=y|aJPsC$$x`pyI|zV~R*%;l_keSp-$Ban zUgrVzgJgL?*CUG;ps{oa5DC!b^(pOg>t(*F_tGK7GygdPh0NM88~>0|Qd{f?q~jh< zWwup8Zk$-!9Zn-SXxi$iVW&O&e*q^h|ARuBTwijS>cqYws3yoojk!vOZw3m#N4l!+ znpwoz(2o5I@1jEuf0)#sADZAY(^C&;CNFkku@k zp|dnmrTJ$JA^Rzsx1gCwy1%FTQ-AMW5pDQ@=GrRDqTgC%Kfq?_EW75;{r8+Qjo_-W z7MB8(0=o=@qXsG^ctQxZ;1J6_qH{`jpRdM}!ji(e%z~q)oVJ{{vbv17raoC?f(AA9 zFw^nl(*B~+Jg1r09$C00sAaIFs3nQ5S}Di5wQsmEYR?ksnqJKsy!U9U97)s?HWM!A$n{wn+? zo$fmPCR}gJ78V-;vzVsHriytZCP%DVl%8P?4cq}gCJue0@rkQ+IQ^zcqHr&5bqJ8%zh`Vp&Av&!`Z z0!KT-N9CJTCjGMfN_Ba!8CJWw#CWGWMSG?2xNYo*_tAZ*>gT-vv%((i!Y!yC#3%Ni zJ5aR>{W9{SK0_2kt7gshx?li<7CL?SG!^jjW)VIN1pp2>$cL z!$U7-Y2#w*L@#Dz=wd2jYHV*}N-tw-XYOJ_z{t$U2mRkSJvJ(T)V^xYcf4`Gcz;O^S2vd9E>ES)r7=I!RupIvEp;Rb=#kTzPH+GF`d#+ z?e}vVhB%-X+*VQSlcuwB*Ifw+UP4AvYSDK(?#R!+KH3SZj{Xg`X`SNN3)l z{tYSG0emAewot!-C^PED)P0a*`^?(~aLTI4lPd?xAwZ9h1Q zVpEU4To7Wxs%8jNV`4|c7lO6^x(pdriz-im_rVWR^qoS2f*k25{QIL31U(IyR8s+> zC#^_)p74p#?SQKU6jK2$H$`~0kXMFu%8_UT{?-kpcGL?)_@2=t3!>?ltpNG`@*4(J z{cWQ@TCJd&M=#Bk3lMLpo>*;RZ=VJ79r%=K$jbpsFjCm>GUVJQC|kjQLxOIQ-PJmz zusafrchgU#@8I_AcN8(--*5$sXZmfw=|@+S+?^?a|ab^ z_M`T8Ajh?wc-Q-IjQCVksCp>a(DX&6k^_6#3(fbseM5JIdm+4K`*h#bk37xzJB!=! zPO^k1_h{J)M(2^9P|fPGF6&Ss9U<8JvZ_Z%@5qP5MVP`g$F2AB83E~Ih(+4 zbOP*zvgQq4aK7-qz~Kzpw=x2`Hyzn~P;dKc6Aq_r%zaf4z@&)h@ z>hJj>ledR#iRO~mCLJDu9U31@d7K!Y;EGDzYY(qhfD`u&NQclzZWtA&Q{K?ww#{ zW6$Xk&1y6t;VNTK_%Z#dw3XO^nMkC$#r^y?V*50p( zUd&#QUjANDU&*g2+b9A`9~4dX-py0QRBJEPbn`cAJhh&?E`(JRDuFyN0@p|9*z>sW zMI%wxBcezUZoi0~NFUkSVfek|5QgCUV9|=+NoKnw@H*VcAH7aEorr}Z?;nmC35Iuo zbME2)<_?T}V}7N#&F>1}?F`cp@Dsfvk=K}Op=6=n`Y&lhK7R7Ora(4isYwTt*MLXe-iVZM}rGxDLU!T|;kVNE;uTM~eos}R?5 zuQxXyrhsfQaX-a<7DoZQ;fiy2X6&F(KNkx8u7La(Qbs}5P^&(H#$0d6Z7vidzXC>} zF|PlM0fxA1^jE|Fd0CAEUi1siScBb*<6IBa94woW@|2l*f0rLj=9RgHt0R1mK5Onf z>tk`DJQn*UNO`xdjJ340vazr(o3eJ29BF0c?|ThXQI_9mAqot8uK-@Vv_->KOl zwsK&ubnl`v)pPR9%aC^+YO|U;IQQ`0p8RN3KTj^VF?^FfF8vD_WZ02g+SU$b>+>9Z z$X=*Hsq^~V9>EQq8@!xGqfLIJI}dEDdgVDHcdA82<(ys&TBeo-9M@1!_u72uF@&QF z+bwDM;@}^M?Sr=&!8DHC8H4x;7dj1|HC|)6QxAEHC1qXKaBj2+7{~+;ySeoE&V2ZH z#-NEj|2iFL<^2(%QTqH5UWV`)ee{h}H)-)m@`O%i4u^gm zMwYc3Brmk+*PG_TfXCHqcS*t3)>;+y>tk8cz8hAINw}Qvt&zmW)uYs{oR*SoKeUGQ z8HsE#Fh&d=l;Dghr2QN$%lbb^a5PrIc6aCf4y$`cePa)TuHv^qyE3zje<9a@(L+G? z2nhfm%<1>~mefaf z3qbA)?EJ3-b5BtG`B4gg^>ES`gg7v?IgVs6I3m(MT?s2u%`;1Qo~IZWsoON3rNk7e z&+P0_gOK72EWtFuIn6iviS5{(>#XpEU;m6AlNMhpn?)*{P30h8;hfP9x=n!Za#88p z^LSNnVKuo-8S?zuBEl2vffnJswK4Z(5N9t7@5@snyBG$bLaI>a_4h*sdEX8xtrtOs zeEaPr)B8%^CRWLy%R4CsLwM;bP2rUv7ZK3xI+m5A6j9 z>;!uA?rz%74yo?pc}&6K zxwpCyRg92=g^NDLnTBUVc3B>3w=`q6v4!E|0gAsH@Hhzt@%oqE6wScb7V37St# zV5IRKjfuJp@oSxP-=llJ=Xm8-^i-BBSFjFzSk}6Yit%%Abe1jM>HELl1cTe^*!k92 z(+ue$e+aqDz3``kEY@lumU5&}6P-3bSE;N_jP4>9R*5WimyTVX^U*~%ejT#dDSB!m zcV8G=kzKh{<$hfP3&jnodwCvFT&3nGw2@2g8LcN5b#@DuDzK{5aM{C=oh0pjdhcAr z1>VO)djXDse;BsjxCq_2| zhu`g{+6&qqWrzMKO{T0eC*TJ-H6*xP{4lWndCZwx|Mvx|_PXszm!cy=yZjdzK&#q+ zUDLqLpHdH%W_E%lXJ#UjVdebEa`JuC&~5Nx=twe`nOj=d2lSs8qdZ(~Y5n|4XVQv` zN-Ak^5ylHfIw{BabcZQCt6!g2K37Lj-=pBpsXx$UErxn4On(UTf>pZ254kGw^eGmQ zC|8tjGh-MBVW`lG2*XsHl*Fl$Mat_B3%! zl_FLCNUCK<&-YIwL^BZ-C6J&JR@ zu2?lckET;O?}R^7VJxSLTpX=M6o;`DYS^k%56{XKb0ez4wfe<$EKgAakp#4Oql6Sm z!Pt`UJQEppfNOh}Q00aV3dr92LT)IoXH^TW* z@Q~F5jc{sB3L%JHA({&+G@?>mEht#p4-uItk9TL#i_x#O3MNDWia9=l=7QXXoWYrg zr}W>%4%LHpvr8aR43JsD)HiJo`>!J^A-`=ikkxD6Ejx2cHRIoNxCdTxJi#(Z}DOg10!4~A*kSHW@)b`t2J$;m4W-z81c-XT$V>`qgW8qtD+X zYscJ?r+YaPCoekuV{P9x`w3f=OFMkYK!1fB91?YRXC&c4QRs+KKFBg4fMFfFMH=UX zOH|KDR`K*|UIDV#PP@tk)iNh!u)W#k<6B^1pV}(k1v(TeVN^A zEaY62I6@=+3?P7FpU&bf8&8K+BbRve=6Stq3aA4icC*$WP!PIEQ(|jCqA_!-!NHoGg*}Drbr#yB-XeKiE z>hz*W*b|q#FP)Mt-->T92cy$j6`Kh`lTbwk$ApGLB|WEi#ytzBkgLumuFmqB92gst zhp^-2xh$+)LHE_7;9>8!)FC=L)X!lB3^P6?V_0=mxSniuKFRYvZ=ovN)mVEzeCVV2 zZmX>4;#lwD^;q4!@BCBOfr z4GgXoteUMBhk6F^hNzbi_K+MkOkF%j8g&l#%2gcfquQe8RE~55XQTpwE_A>~0!MPf zlu~*^VTE(j9js=WZ4M&i+lC$zh8o{$V$D$SKVrv=FklG55-NdRcbRTp zMGJ*)0rvnx&p0-B!==yeJ3kyEeAFU83;DWIA=$H|v{W!^9w{ytNr@h)s0Y~Sl_+vb z0@6*JXxzM5^g`mo7E1fJ{(1RxDa?i#QZ@EM4~)sF7b!=?mJNJ9n04f(~O z-SKwmEu&NYLp1o7&LwlZ+VOiQ3r-_`Lyd*?CT{&+oxVQ7n87{S-6k{$5E68VAfWNVFH5&U}!i~u!ErynevZMNc5RRgW-%S;F(giPVlIorL8LiyTI_Gn6{`SudCD) zP*=Zdx<1fG^@z%>Tk`dEvI9kRIU< zlV^J0>nBdzOpj#LU5~Pr5&d`y)$tae%)|0Kd_06xnZo@CS# zT`C2qfxRrApFC4)x>gWUk(!~LsB7d54hcO{VBaJW*srg6t!c`5xeRi9X{=`LR^<@Y z(q?_!{#NDdcgt9zn2HoN1su`^(&UL>#Y{rw(b=Ti$|t`CZBw9ZmX=Hz=VFvdwS+Kg zhrUAidHEVSv2@2&&@#Is-=ThFKHvOqianDBk@s~Uu88tu7}i=Bi>1U$>(X7+q)Y8I zU367Y`{80?tXHY*h_ZBEFY$lz7x|H8pTcXpdZjEiCgE6(m_@Jt!qXj!a9M|~MhP&< zHz6h~*r;5Z6kF3gc$IL4T8eGpGApU!Zjf*fxgi@8bMf@4X2ucYDq>b5Cdd*e#{@7@ zAAlv4v#cICq+{W;`BbBF9WW3tU06qdFx040%mUWJ{P1%dgWm`Wa8Li}c=esub1yTMw24JQ}k?no2J2UiEQG zzw_ZRs2ivARNATsX#H81Xk+ASKRh^I2JU7}zmb&Hl7XH?(0g9P-&u29H$GhD_ZV+E z3}b)U8DG}pejl0X07w4kDK}pg0-o(+rjIEe12s2p3fK53IFV}CXB5pAUy+tso#VZ z)lhbXUme{SU&lMe$=|?EHf>Xi&$Lx5>|>IVW^0Zqo!b2#%4_l5Fe|8GU;V4T^;d|XlW{LjrJQ*q~6KXXrkKi5(5RJuO!V|1HU>rAXF-b{^mtr5UVr5ENQl($7n?CmbX@iAT7$z>l z9sf=Iw$pZMEwUyf>AP1DFbqFKRP1d|>Cr`Ok-}3HIs#3USoxP~K}kc`5$H z@~v)5*(KsD;-9L#nZI2{#zBMnEyDPR(ZUByeC*uWBA^fIRC!aDEf3cq66`N(VFE%V z#ZZ`p1WADvvOQ~tM?yHEk|l!{90akZaUaAqD;W;cy;z7YYz8clVVDKVKnlSw1K+T8 zR{}7yRFR^y7!qG@m(M3GVx_RLi@yqGFC9VpQA zW4mEmr?m+MBw98Oi-ofDPrORE{4>8lEyUnvPDv4S@7^M80Z2r`-R3r2D63XoVPf% z&-Gxd0^2{c%)A!rzi%V+visQWu+l6Z?sP~Bb)WnT-!Dsh&|&Hl!gF4;XfGUp`fgDx z1WU+()FI{&@Z!r^JyKo%cEj7~9cT)#{K<3S({^3*Yr4Q)4qN__v!rq)&J8CAm?hxN z{%#1dk>U^W(|L}nkpJ>Sll%Ka`blk@IVMWH_MZRpT#Ve zIU!wa(4t*A*_QhRM@W)SGEq10n8zzgSD1H@C30~BVLmUSp)o3zNj%L5r4I?V@BpqF zWh1#Cd6{tj#zZwX9MM%IdA=gt0->Z%AS#$DV}Q^+9gQd(xpLhD8Y9~tSM`c1DlI*m zitmy2e6~Wei7LVFw`WC*%9m7eaxpcETiDgNzp~3pR29rPUqWKB`CjmZiIV1Z#sgC0 z;jyL9r8}xztW0m);2~xnF=$@*g8Swed8=)X$4&{igRsx*N`&(b`DkTvlwGg=eMk73 z2j`+YAPF(!-NSC*$LxHf-MQ9cm>2=A!|D=yW|PbLyJjVko~!5$iaSdeD*K!}@M<{b z?{a1pyM9H=u@*w}5-41b_H}uyOMB~@z1!`b&8ri&EcNuI%;nUktUOiT0{_ih{h@7~ zn5FnU{9lb*vA<@cXtQLuhQp7(vQ!;3b!zQmy(5joPD^E04Czyb_?gn)7&^?AVAFGp zWQ_s3`^K=;HdZ|RrUPW|`Y7Vl36pVqTI(?v>BQwRnf{>`9Xd6Jkr!XZD+;qLeC}N0 zv2o{8(6kLSWA|Mc`EG8JVU6!(jTcxbe&m2r#7*EdpE^mMro(pznucE9Y6 z=+|g|&5rshuQ|WjZaq%KhMl$tQlfS?AkOx>jb`eK!=w5F^mkt>S86^9bL0KMXSr9< zYLW=!HugmOlMIGmeT&tTrdYh$D<9oRK&S5;#;H4^xlGythgu-l!zfKj!(g{;+A?T`RaN1tL(~|@?BXJp zt(-P;S(7CSp~O&pSpAM#;dT^MGMY$KLZbchA^D43@KZi9zv$LIt#Q}`$)5o;AQ%TM>e12C85eX7= zE!pjEnk__3c4CBn-lMztnYSyHk@|ivf-1&3KKyub>yWkO&_HoRh)SQ3cZxx!lEQ8w z(z1aWE+zDh%#X>3t1J54e6F911$w3J3vRYf+|FSs+coWJ?dr~@*OVueF-#WMO_CWm zQ(U3T3|MgE3Xqp{!$B9LDEun?hNi9<JLPlb;)8wi>!A=k(_Kkd| z6lYOTL~2AiQgJq2F>6;)mD4jED)4`OofkBfF$X1cW-y86UN-8C|QMgsSR7O?t zE0e{rD3zDZUP$z$;#CTH8F?A`>#6Dq>xu6j0;RWxHve96Uq^4#nmRyWJ_Ga4w}u4P zY%l@Fh7`?eb@*ehpK9e4*}F}M?}de{O>l-iwT?QmcvjOnPD8s-uYQ_&s?MPpj{wP;RZMW8?5Bq$Aa1f}JXzYyjAh!fWa- zW@3Dq_t>G{d_eBBLxh#mqzYD47z5oJQdJwI;21!WRYh18ZB^KFGV(KObSpHA)(aVR zkT)}U$~ejZ!uO#k%EP6Zi&vI0BLtNk`g7*U!DrDG6+Gq1YASDqV(`u=<5u`#{?BHJ z4=oF&50E~Ff=4P96!WsHN#`6NN?_t!L6X@b8ulz;utRev%!NQ>!EC*|rxh(56;y+N zeyazLBDG+7%RY&KsfrB@ji{3A_kl%MF=~J>FbU=`MCPsRt5v*fg&l#?7$-xb1J`Y6 z4N&9wP54o{QypGZZn;}cT&iHDDv%vUKkRYt&xJa3I-}@jM7CF!UW&{=JWW7DG8{@s zL#ZY+qNnf5fE4O!)$Q41rBY6=~+(48LAv@$RJOrw$}d)4Nej?}`(3 z2OAB^jKXzs*U;8bc2L?`TWD*LCO4#Baj#KJH!4A~CRHYztedR|#nbUAA0`I(2j>SJ zr#&2nWFqZjY$F<9Mcs$j%HYc)v|0?78lB?K(SHh2GC~3Ps zMh5cSx^=vp4M8A^TTR54FU{;Xps5r+u5--)O)8I;2kaqj)UIyiM2V5u5L;yEyf?NQ zKG#z~XAiVK!DeM6SQWFtZB&X;-Q1=+$9e^o)cHgPYh8{g#wYB!| z#UerQL2xXw~&*7B&Ey4M%6B{6>B}VJB z-p5-R6;NHF8ce)_XGz;UP8$N)HGNjxvEO)OR9P54vS*pahLcz(j0BRM z69?K9 zfb2tir$>z6)ohu*9+pox^jPJ{q_vc)#SB58O465*n>Sv5^u%G z7LR^Q{}?p#Uqd*nl-vy`0UXxPvy5^$=uetC{0Me9GT`D=P6cqY(15ezxYnzAGC%}q ztzf-kvMT+0OEur^th1exNh$2d#Z9ts>C37sTEy3Ux!7rjq|0LP(n?w_$uM-%?ow^n zkJq1|C%x1%W$#jk(Q^Qcp~TyyS1}t^IO8A7`d9m`nbLNWgh$e^-4|{n@@Dk)(mihc z5Zx8KWqI%ydJpu#H@_oRMnS8!f9e*$%qw0J8n|3@e5jQc6?)*?$@%Q zzDw@h+`^f)f>B+GfWq2IL_j`0QTT|bPF}_1@()Ld^7yK@L&L(FQHY`i2$C*E1>0FQ zL=ax{nWYB2L}`dzQv#ckf#xOS!N{F?)=TJzMev#}6=|u9wDDcK6*2xE)GpfE^{B7< zWjgv8_&>XD3W@JenW5++ikQ*$-8`ZA!=rTM8b$Dj@yaJBKKH+_j_8K7ef70DLn#=F~8nF?!6%geHKb&tvw zPTz?!@YA`wSMGpd*SEY$)xeqIfxShLnc?}kN?$@@6at~-cp~-s z?(Ua{6pP+ASGIL=lpM-;gwtEddoRW&A$C>%-BU(wX)b8itCq>PTV&17x3oK*{5}HA z{?EW^XBsQ!k~02g%!HF{GpvC^T&Z;B7mHBIvvIRucitat?#oW>JP~^$wu9v^qP ztzERH<<4dIyj#lM)1IF<7oQk%Y{@>HIeSikJ6lzC8SW&%87!1NMqq&~oIMw=Of} zFa_bFFn443tdq7EW7_!+Y*Xyf%h?HJt3Rn}8)ma?AD}7aB;96(tBK@EM;Z?zi6pvk zF#zxWZ$ybTo|+Arbs};YjlHO$3ouq$U{R-|5lUyt2>FS5Y&&bFeh_1aWKj#^eVP!% zvg%B2*&O#J1f9FyOFEiB2$$sc0X;vu+zjNlIF(eAowAF<>jXbe@g9@sM(2>G0#B{t z)V^V`h{HU_RZu* z2>ahYX3S^#e%Fia^HN%s)(72s#JA7y(H~}38y;ongz;v1Qu$`#K31F{&^=<|uUvKW zr`FW8yKg)oOqg&Oe{l%w*i^zfuCf(lEL~LMPA}`fJM7|5y2=-#c-l6D63kH<#$1Kg zyUu16qXMCE!85M{BZHI% zl)|FB>Vd1_UqaX**hB5axnsD4xP>9-0^;?MRDus8p{ordI#axRJm&eNaaH8~V^m9l zE=MB)zT`XCxJQuPIE7Ad!P@epU7V1BnG4IX8gkO+_4QbepkmzPDE-v9=oL5Pp10Dk zImnBD90JFNbO2Yf#FK$cjx_3BW5AkBGOSdx;Ib~bMw4rs0N(G#ueY@jTEhLQiIkjv zp?v#Tdd8ZV9M2O5&f828<_M9dgQuNZcgoZ}z*EH|aKAIXsUGYq3<=SwW5b?0AN-pu zC@~&?V4%Ogu5$c=dv1%RC(5l;u3I+zx3op298V6a*9|_DKVpFyz_rijg{w%@S6^aCv80f(=tWt1TlN3hJ7Wc zZE;ya&bM=faJAOOeJ8|X3%Fv3KDZDAm{Nzi{n7wAtVBvk1`Ur|Ct)da8agOl@Rli0@?%r+hM$<}JW;}O`RH!tO zo5kA$_l(;{-hFSfH;pIqkvxqjH!L<7JDyR&r!?yx9q#frt1z+T7p6rJ!e*_ac}vZl z#MN}xm-D7$JqTEAwW>N+x~Mzgd>xX(~A-oZO!IEV)?eJ3ngOL`lk{8r(mK>uwj9;h`@VZ&kE;Fc16U2gJ=}~V14?* zz4k`C9IN~rV#Tnadb3%XHh0Wi)3Ru9Tfw)KT}o}AeFKlH`fZmxnwOoPu34=P#)V-Jjc-_0 zLzdp=`wIh|A%3VehU=&JRNg8cSLKy89ys#-$Twq?ETY#jyFmJpWmx*O&9hFmZoAgT z9P^ZNj(MlN@)~=(BxO_KqEflXDUmK0zh|{(wG6Y~Voz=FMIt+AzhPc`bM!lV+!`t6 z(#U&x2%KxS@~2?n$|IN#{kvDEGNtt6D~k$omx^9zF+&YcFdrZ;R{RpB5_%E^Hsnk_`pz zBOe01<$fIyRmJUs`UDt#0Xzz;U_UxXC)-0`O|+>DPKre<7Ee~)V#8R6nQNdUqs@@b zwU{Xp>57$z>m68PRgLAPhwmP!JO1tlXtQ+SM~~@gux9Qs68<((2{8T({ zXU5g64fN(my#3aiT&kzZi*w&MrygN`yv4PA47v8~*u;rc^>=q#IU8*j6U5DbuJ_tn zmek@lYt7ZswDLH8*8$5$RG1xm6{eFdJdY{dHr3Hc|4{pyjD&y8*p(=DFZ<8Da+jTr zgN&uDHPc-y{2O<8E_WbUe7l^xTK+*}2)lVuAefB1jKZG+!Mj_P3TA&%^SM!&K&~_9 zK;2L7*1yra=nC!Bit%@1@Xv;kCv7AS#fZ9D|4`ff#?AJ{agHEwAV|>d0Jwl0V9`B_ zSYq<`eP7Mk$I|lyXaxQXi{u~(;_4#D`}sbO^vZ@#wb;z>*|G|oo=7q^ba**z{G8sQ z`FS1Q1)WGDnynqSO(fG&G`rn8DwFSzNBd~`kZ!;TuZJoW+4+Iw3!}f}Z{`JJxgu!- zIoS|I^wp?VEIZ`aaDLRN!pswM;?U8(W+oqlZ@W5s2OP#O&3E79JZiWq3+6i^1{73l zA!qPq>VjI4hv5DA022;WxXxd|fOjH1nU8oxx{!%%c*syjSLy+)I`$xJ5D(vc41$2m z1xw29oEzy|xkk%aJ9L7I7L6+I*u&Lgu|b_;9G!o;RQmM-Vbc8+3{)whG9}w3ks>5v z5$t`XvO*>L2ZQF|CDaZSCTIl(f=SN`n)DC#piC{>0=j^PE5u}Q1<|IXZ69P%F}axF%vu~xH;d^eQGV~d zA-YV6Or}H`2=mxz@B1hp%Jb>c@osfisPuzC$WFgJo7caw1W0EM>$o$yh>l|QlVTo7 z>|72>#_fle;yVR(+&FBdlcGQG{s`>?ZJV%s-LZ=wE`;dm-%33mQ7X3zltDOfYQIw| zHh^u;>*}RUiwD7J(_)kUN{zKM?ztM%T!KZ?yY2o5 z0AE0$zvSll%tCdjkh-90IvKFf2|D;B4q;u|9tn21c;GPm zOu9*vsf=Jj{!HjOUbufb*$1Fi&g57 zmIv=#TkUjMolb{ZqvkY~P8YOYN|mZI7Kcu8hfb?e@Re>C-Qwz0&H`49#bcFp2dqx5 z)M#sh0lG0qtKn4Y3?-Sd8vG)N*cfR=5{SHZX!FHmhj>$#r&${0lKtmWk4!vn=ZM=? zrl7MyuTdgeO{vKI9YW&1MN#L_RszXJOVj^BW9J@xmD@@KWYjfn#koY8?BYSSJ{zno zlO5PBx&D5%x}WYyDpTHB;*-On*a8YoUi>J9M=h2TCDy6_7R_3fO@-MNg~7sYk;1s~ z^%9wSUaAIbe%Y9;9otTB@ATW8)&KmR$Tv<0s${|u-HxvxVOE^EM=|rs3Cc)>RQRIn zM=mF1=bGtY!C;LlWOJ+;xt?^+9p{auWS5fWyn}A51zNRYhor^4+20O!y0hI*)mz%^ z&+4(3MOq&=Y1uvO)5<6LVYQ-HxkkB_-K@Nuy<7Pt`!s)u9aO%+KW`e%gEZ1z2b@J| zw`qAbpT*RL)&O^HhJmO=i{kfZ z{(#BhNo$`ARWy7ZW&Cel6`8Pp28d{O>et8-e)-XYoh2%L*T#kTR@q0GSNsR_5%Vgl zL9Jw-WK;5dlOo7B)k>}7vp3h>sd}J}X`?V-Fs1HL6TV*cMD=s6hpXSHen0f<>i6qD ztyb5mI#rV`lO2=l<~WveccTaD9><69Ax@W3;f-zgDekX+uttH}y4x1nd)rn!?y>E` zk2k-BPqt||dw1KFEzCrY*vvLkia9%)zG%U<84j2;QB|3!iX^IHt(j*t&u17#W=y6l zb6w`v%)^-5=UwlW}rB;(!RxZRX;jZEoglplZa@TO%xrezY zxHq}qaB3~*0ZcJgGsigf(Le&mjx9~KOeD3tP%f1sPAQhi8l3^>eCI0X!_GaUQ-8^-F3+5GsPy zJXleA{Jg|VZ5!K&)YjWZ+Mcpu8%=PO#Zf;7XpaYQ3FkJy389v3A z%;MDvIhUcl(V&Tci{o1jt*taSdv%F34(OadCqXnLmaeQeHhV=4&nS%GFNY%9Xj9bS zH~En+sP#zVgM5)?On(AVe>qZKb&1rKHWSHK z_1PTDQbv8*PHAw+OEeWGrK-F*Lnb}Dt$Rft*Eyuhv2nLII;o|7*6MdI-~52Xpt0)R z9)Io1@!fMZ>sl&8uIk!>UCXDheD=1BS2V;2Dz9Jb^o^EeYxy^L7bl;RZdC|17WlXj^b|Oa7F)7v^>x=D<4aSbeR561A8C?Mv zam7t$iN|SP;=B1{{0Z>CU6s@NWly%W(E(JJem@Fv{)%s5S`7R++hWGBez*iHYhe|HUu_A z?qPR@mEZ>V=X$WIydSEBT(I-Ar2u3pGF>~GZjJY>xuy4+-fP~uY3iD$2LzQSk-?jk znyD?BNj3EqgkjDQm=dHy(sL+F+IxWQkv<1HW_vzxYu#zD5%7)jy>_qCad`n9U6w^7DS;2vn;%=c57t z>tf0G0UkPlA5{jRanWHeu}KFOejtzMOD@N{P}Hh|p-{=Di_@$I;*856Gysf@cseG7 z;GnuwB~GK&eqgkeoUZ~9>rS0Wk-pUK6iEf5I4V(|k!m(F3{>B%-(`QG>IwU^RY$7~ z8;#pdgyJ#RBXfAF#Nnwjho{OMj^)j>xe^0`D^yo<=0?S-%wJ-irL=*yjPwTP=Sr@+ zv2fLSt0wGUcEPfP%Q}{|sCDUaTPLrKI3uZSwWD&*G_V%lxy%|0Dnea%UD&q!#us;e zaZPqCcCWPiyz!AOw^;)ZKC<_jsAXW34wxM9nGFSTois;jo?^{eS6P?YmN?g0RT0gT z0R{*J;(VEvNbac@S{F77Q}gRith{jKncLp|n;5Z)*-#7q>gc62J7(J- zxMBAVFMW<}pFR4>)d6#+=K-;_FCQUh9J>;@G$GBCQdnsTgo#m!Q~@QgQp6Kr-NsD3 zUZ*pI;7{;IT{xh6UBKah68P2=@U(lFJz%EPMsKv?YQs%c&;>NJCPlY78B>AO$0;TS zrZAQ>lF}|u*6EK464b)ZSn9VQSL5nmArvcvJ+3=p#KvEp06F<9z1|$tmACNGT1v%g zvq9Yn9RXuQm)336?bPkoDe1CLuiQML`%A%2_40Yv63$T^iPvhRzNs{ zuIoS54_1-f`jkJN7=9V>NA2p|s5jp=0z5uMg(=M=p!*QyS8*5HLBziF?tZrg_6JFtH3b#C zVkbC5VeCmyCEFKvrgk2i*H}HSKBV@Vj5duiUAJfLLb}(ht1yB20C*{l#-OSAJ!y7? z*BaZaB3sqls_%>)R2)(7iycaS8UAX#Mw3z3DVvln!D%c9tQ%9u0*!%*fm^uE@dwmT zRzKOHl_rMAh4e8ekCCD!bqu_ER$!vk`5@jW>-qp8TA<_$}DGYr?sSkIR_`= zi4&d8`Qiy#2pb zE!$PVzo%L$*7>2FoLeH7Bf0)FKq*7==|pKO*>LMfLQW?_64#alFPf$&hAE|{##QyTLmTPGQAv1mRViiU6yI6b(Gc=X_le9 z5AB@IXsS}5TAAROlKw6qMae_BWq*yux$33K%GK3l8rpvF^XdJ|X5H}A^(W?bUVP(< zE4EyHaxgc!xqEtjYj<_Z(HQ&GaVWa0V=E2KrD(hPo-#L?QiG`CSDQ%v0bEu|f zb~-u9C9UqfFhg#8k4=C5cT=D)Gjno>%jCDqa%BQSibgq~_~Ro; zS^RRJwnf)6Z@+p|umlZfwajfD* z1w&8mZ)ncSHE@qy!=&V{YF{W@;i{fiGD|3F0gcLQ*?ifb0?`J}9+hurKdtBFLV~dZ zhM;_!p&|^I)}%s|hqdi;&Y#+_D@o@;@`6*+4XVU^Ib5P^wI$o3={lz@UG%Yh&k}>tdB-3ej4Z*_`lHPOUOp zS_;t?m#Lx+?Ds#+=vcgUcj3;Jb*gY!6>=}Zk6hUjYUnIz7rO*5999PHE15$pvRo;@ zAP$AdUW&BHi$0L-{*5L_yU~Qq$Qv;6X5OoGgac-3S_=Abz(gCOGaT?fkN*ayzmjI- zWb3nglvpVttn(_(CXJdx!3$?g9=gQDbh^@xfVk5k!SM3`duXnc|NTQyEdA>ei$kuZ zRCPK#=)gN1SauH`>m`4;p9K89{@wmTzar&t_wRtlG5<-w(l_lG2p>S*>0Ei$m?925 z^s+8$A1bG-{*Mia--a|mH9B_gMUpgk?mNkjf~w7LO^#zPl}||0MTM3T&!PrJI7|e` zA|gODf=Kblg$Z~B^u89=px;rK@=M8YcVA{*~nUfi9 zMz(wmrYx%AYe-c%P(z(wgXsKR*kv}>=#&(QG@K5QqrkM~8Ah_wwcns8?U6j)o?cI% zXQM~$$up|`(L_Rqv*W+P`SYrToF`@Avp`-iB~B*5|K<}U@dEi3swIDv)jBUj?JUIj zQ-yxIQ9Y5PfEy}9E!U5}3pv$yQasBUo~2!crUn_Di>02q?d@}W-Z8oEzGnSZV`9-N zOnBbq2q`s~!HG_GWluYWZhKFm^-SZou@|pid|uVq>S`Tt<3y9GGGZOG$}vR7W!qD# zh%67sgFM_KuRZ-$>L5W|(-HEb;eGNM`H!CUsomPBR}ciT!8=R8Sbv3nt!bnFR?qGF zdyMz+PrLW&4;bI)|IAy7k>S;Dx4F{Hmcy1I?2pH+v2+UieMUuus}3ZQ76hQu>JTD< zusy7yf?(wJ*I#cRdHw7j?xv>HNUKM>0)vS$cX)t-P>K-zO~lx50rL<#N%-}sKSGoOvR4HPQ*^e6fsvS{Q_oC2u;JM z%K1Nu(n1>j&sL{KP7M#|Mn2_-O99oK9EEpv@x#N;kyDiMWQUn1)_o`U6q)E|$#e5g z&uPoKr*eS3Ro*^M^?442V?#MSE@zagEai=>GQlw_+jklH<==FKswDjV*10z={ctn5 zE(KrE7eCTk*;eqCCFGe+zZ~1_@r1cZgvo4NT=>yzP64>vX>hb*W6M*r+&ouE%6kP! z7-)}2AlS@QLiU>Rpcxxkq(ppx<&`|I)PhMb%So{9Sy@hksn1g$w~KJ6lGUJ5BV9|S zptd9hX|=yPo7I-3A+045#NnV8@6h7Xs>}L-dAE7c%%sfi<{jo^=96aDO#9blv$Q@` zoy?kKVMx{4x1`}{ig`)n^vfw%--g)!Z$#eI|JUBPK(|#~i_V;*|KF1Qk!9-~Te4*9 zYb$mfJ5GG$U+nmc?SvQziDS#L630?3J8AgT;a5t3q_m|4+LF?~LMgX6G6X}QxVJ5Z z`+3Qty$#&nNAgN~3zSbvDYT`r-<~-~vK<29_O1Kgy=%qt%Hm-rT};3ETz-o6Ve{aa5~}7F35?I15aaEegE4+UDY{bIi#{ ziUTgL6ac|m9C2}V&SImBvpAiC2N%0I&m8l@V@_c$u6A*20T#T@1{c@jbSjGjtBaIa z=BNvg$Q&aYjZBGJ6m@G$JywgRRRArNs=u2Y#g(Y_aO+I#e5+?Q77-=F*R}NcK2>|`&ZXV0bz*-Ydam@8sdRN- zdeoq=PKfVNNV)`F(7Hku_Cl>*t|)gGxGUsA2UaKxwfPRL(}xsc2e#`R;<7e<2uGF7+F= zqTeXRo1}E$68{mc_~e%OhsE8MY;iZ`;tCL1CrW$U$`6R}bDcMJU2#oO&zE`zlK~I( z^cuU_>MQhZ31sC)779E8qcvnNEecgZoP&-6?ETmFH}-G7qG#Z?I~Q&ks|3AB?y(Qz zJFagks;^(rMDt5XKX6v`;yb1VS2owapc$%H(1Br$G0}lR)X}SfrXrK?VdK+A6}A^x zU7S(W*WI9_JBu}-zf*mkC;ED}6SR1r(^n>|4uEm?e2*qm2| z40f9yp^c(R-tM&SfGJhN#C#%rQS;Pc`MQ9 ztwf(US+SKU@kTB%6JSDt1auqF-~*BdPhB7qkTm&#q`3zqjXof0^pqz?(BuOJ(!}HO zxHGD}8;9KU?h|g-EvfQuNtJhtD!i-GZSyaw@Kl30EmPrrhu3m!#dqIV- zTlUn)3O$||^>{w5#~Xx!;j(8ks% zSBRl>Z{cGghk8_m`-Qxp>D^wL;PzD-WmuN)6nA^6 zvq5y~sWV%%u9CQdtJGIH?>ymTkW+AOcM?!8IPY~bPNSJKGiKogd0$A}>!U7^Chk$4 zp;Buj?*trt#8b6qFBv(-#uN92rS%rM(U4xwSVtR)4u?&+h`fr#Id})7uv)S$j6&hI z7vvY%3Rs0vZ}yO9UK}__ZFZnMWuXUW=?ot1U=0pz(d0T%fjrl<>?T5=mmH_SU|3O# zYj7KGGab;$6N+iwv?*absJLBsyXm0qS>_o|Gp$VM6UOPh+m#3P2aUJqsmLRSdj~)f z!O}y8bkpCQTP(iUBwks#nm+b}7p{4JPxP9TKR@&8@l|cP25oCF;PB|J?vi}=$De%V zGe7&(eYo_;&tcz&&X@mT_tp&?ZN=-h;i3np3$w-je$T>28KA;4K7=O)n>nN+n}{fj zY$KYo6qb+^)>kgFx&Nl1mG%#%6`5dn25!z(W|?92r6_T8T7}YJD#K-hJ>Og*ws3{C zpI&`nllQ#S*YK4eeA)!_*KRJ^gA%8<$rI9YV;uL^)`|}*O5}&)!?J4o+m3gq+0hTvE z;K8K@C7IoSpL9;P)+N+$sB{u*I&a!B?Vk3_Cau%9MB#PLglF1!i}iEPJFQ>MyUTG` z@jb5ZTEAEPpzEmhNtd}P8`F~j@;qrt`dQLUA1%rj@6}3gC%HX2>HAWkN8^Wc%UjO< zj%rT$(-o`QHt+o2mMi~mS7&3mdh?Fe&dM6M5RGhG_)cqOUP%d4l)Ih%69JTBLiCv%`evvg4E zb{0Ov<^8nS<<=?vH_Nnnxd!8e$&{ru8nZYK6`DZB_hy+hhdbtOGXvVHIlo*KhH^<5 z$}@*MeuZE zvE$J0W!NKVv~F#U)~Yj!!zoP0TJrvhovZXo8b7!PQ(P7G7COXWqlvnL$C^`V^5HwR zhkT6Irq8N079s~K;|fgXbgC-62T!`mJ^q&%TKO|C%3PY7C6X3XVsnOv{4SQM^estHum zXJu#Yy!gzl)tpl~UyKv!3lRU++qEgZ10gO{U`6@H8>TbjzD*su7laH8N;)jiLj&K^ zn*pTvXRls<^eVlYm7Oad)`@T6NGIUWZT(ziO=Bcj)uq(v3-imed92ih)+{L3`BWNr zIeY&vzPPQqzHwudOp#MuKR9)AO^wNJV?iOTxrUMVwtxob4Vvm!D52 zRX{nEkMrm7Zoy%@C+81lv)t`dnjLPlRvN(tb9N=ZlDr3Y`VqBNv55eJMr~y_iLZLm zV?C|0QuGy*ok^hH-z&0wLn2GPHaHXMFT65*rpu^MJ_( zSzwv$V39Yu1bvQloh7P&gJk4zIE?ja3y*7{nzneo;h<_c)S+x@`trxdRa8 z4#1LI(g{{8yGxGFmTw_SkWYvcRwGk}w4oz~oluyJWIhO>WXwcP9%!)2l71Yj> z04Si~`?;V7pdka;>0cwG-;7K}#-1H3)@r?NMF6 z9m{0MDCgvi+-u3nK47(41mM0!+`uZX3|ZzaCoHVRmQO|(@mLua3h&g3J6Cn|B5?4c z`g3Qtl4t1Y$#Na0k9LUHl4LtGPf5{%g&a>L+gs~#D8`U{Nw@4{-(b;8A{b#|Rs z*QS%z=}>@DS+DyEpckx@h}qa0Z{xyd3srNoO$OtzAoPI33dL5^^oa)n%D zi>kF6Eh;Vs1}KoiE9q_y1zFrFV6~@!1)hQ|@DyZiry$EZ1zFZ9$SO}k)^-YdR-?d1 z1?CmU6%10C6pVr_^fWHAW^}il7VIx2pgmooR?J=e82CLYEJ z6B#ebV>yh;o@=z5j0P+(fT>ZbR459N*8ZO9K)F#c_83{?R>NzU+@?w=As!#b3=yZ} zn8iJ$WV3bMm9&I*r>D{(=#7;odKPoqAu~Df4Ag@u1Z{$yE&37kIiJ`b?~pf9&e`7C z`c9sB@jiX;SK2v;DDl2lvL$@0TznY&C%y~aWteto^NBaXW;;k>9i*^~i99t-ERdel zDQgXNvWfGjl-5|EeyMOkj@{yw1mc5{7R#~?WsHBf@Y5PTH-LX1%F6TKeQi~s28aD? z)+{_*!2HWi&U|%ANmh=dWMtu6ICSG`&cl?HC|2Kmu9&oQ*5Vm?3fkGvT>gj|Wnn*g zE%$!2wGy#Nrp?jjnvjV#$&?{$C?}L#Z>`U%&+WE$=XB?8k#8|?cI=UlXoj_;=G{5F zbB7%x+&LZi?s3^J2E zOXd)QJ;CikHO7qDoMo{fjY-RCVClr=$voKOE9E@m*^o@dsdFtnl+2RD<+}M2&MnL> z?wieG8GddtDa1JB=Y4*E3&&eIj<+B+Qg95qnsb2HA!F4nX0I0S$b^vwF)dkUfXyZu z%gEGzhsBJMB1_BT-|_GB4Da)BKAv-s4_?Wz#_w_Gpia!gK^)A@&G$_4+#C)Z6}D$3vY4!6IDmMhPCt95o>nia*>bg@ z?oqR9TOc^cY^IW!dEaC&eP>|n@|Om-ibKYE?+#GW+zXKO8cOD+fxU(gLR4Z`zMA5@ zpy;MwR3WDt^hkp|lSCB=$Kq-7L|KJD zqRgIIMDJJrd5y=m3cpb9;%~cI;|PTCsWpzmn?I57uEyEH)xL$l6fi$H*UNnOo)B+< zHHkTE)54eVp1k%lavoyK&1na3Piwx%B?C#Xy6&7!T%&|wjdBWPy_Wfj(C#U`i(~Q& zOtp;peh04Af1>>HTGni^a&B%vbEo0%is$gDI+aOjQklrwH7{4CBs*!GvPXFqRt`#q zt+L8pVsep7jfq-otaq(;lEY8opv6{y_v$BBGr<536*@S5sL;UaYmF#?YmG`h42`zJ ze9q#aIi2Xl+2+%L4aV;ZvYYzZ}4QfrEjE0zVJP z0@$oCg-#^L*|-Ex;G41hHvNye_c*qnyNUY}_W&pRw*KGr@9Npl;=AxM%)SWv{MCBS zs@HS1g4tPb#74a_WUQ5OnA3A1u2xnX3UGx+Jyt0)kZpC9%c-#CDHWQ-b@O#h9XS*> zW>wZfcOX1E3Th`z-3oH7hp{6SI#l=+cAx;WAFV}oOv`N1+hizy=Z$yIfd(YLX|;9b z^)R_Ld-wWoHIVCJ$lqRZ#|DEaLMve+lDPrVwU&ym(LvpmPTKt(Am@27l+!zDfduu6 z_q&rTQ9t-TjcDVo9~NVTzw|pbg0(PDW2iI|%Rnp#v5>UoN>5U*4{gn>t9yy;I9wOn z>dONVG~T_4P7?W5zGfe@3&pfM9lL_}Tb-NmvbqoLWEnhAJE6N;8LEYD)&3X$6tI_3Zzjp$A?`VLIhRsTo(WDH0 zdiA(JyHH+I!fY53`(4&T3;PE2yAU3Fl%DSE$lBlsmhAQ9G3kwHqrNqNApZ*cmf)`Z zUG~x7ZT30)vvxzNrPR6xt;ugeE&82`oywiMuZ12!59FV;>4B;~q}PQE3Z0TuWZQDM zY!ms)sf>dqjD@p$vpuCQpCJ@#$+uba^KCl4J`dJ6`m4#+AbKKmMWK9~L9au~Y)=Te z2#DqKeAjEfLk^?sHAl7;78-IzKGJTlI9+kJf~C8TdTVKA1&FXQJCx02gUTS}%FD`l zPo<~H!+M@8@*(*N(ClsH6-(+w7rjM#>lsksMLC|xs1uzg@|ZRexGd=kcyrCIs-RC) zD-6;gjig7#KH{cil}Q|%$Ly?@O)Dwh<{&E8a}*dZN++A z6Rd4o_+zx9d9-imhRX0dj8!UQp1pLnn|bsbtuW#;#d+?;!X4QD)wLyl&?e;Tj+|>> z_-kGNw#M2Hq0z0?7JBa#+ddn{+%af-GvkHjF=BJrSK0SjnSO5Z6+!JRsbu;5LUOV0 zE3*!sxMziSo4vA@*~pBt)9jS)GtB4MJN56AXM)?=7G0D6N_MmE82b;bk}*N@Dc#!) z6H2A?I zp_A)a4cnqo=v%Nxy5yc-;JKB~r}oE@8Ct$3OH;2>XPL903Oc=cSU;)1S^s7Icl3|w zpV6Oz;Zm)?TKs|&gIPUN>#SPFfY}zUdX9AqdaVYTO=i$=uts4fA*K2j#2iIfVee?lkleGp3FlN`IMa0C()5}arNf1|n23SG9@g}*pbgQZEP5O4((hc~a)K1WmR1YI2 z=`v*Ggb@?mC&(mE{ibZuHPZ0YDT5{Rm5l3uLTHg!(GWdbA|o@N*egE7Lsyz7X*U>%MX3_vk!gw4qw3k#jg8v!mSG=XF0Odgxbd$AY(1KL+XS|9s))CF!gxZP0R1_x@^mqPWH<;Dv6BqbBgLCL_3!cPZ$Imj4unzX`WxHg*kUyfhO7Zu~ zqpHoSJD2~|W13-YQ2Va#-}Q5b9~z%Dg-u`2`mVXuQfxKD?~&}6a(r@!>H*X2|ARj}y#WoTdM_43y%POsWr zWnOKnZvDt#;v&D#WPWr1$-iGzpS|=u|F?!GvkhLyJdf(oNu;1(b_t=)2&wL|j3POi zK2RU~8vQmCnN9K$l34>dL4swdlFTx`KMOfs&2#fp|VZFgx_*)8VNZoz!OEA>kucojT z!p;6_36_B-*hXO;DVzUV35N3cZ=$e)NSgoq5-daI{$mt2Q98eqU_wXar-kq^5Rzcv zVW5h_R#Kk8l@bi)3B)Lz4dK?nS0z}6Dg$C(ITZht1QYx>C~PD6LAwM4eo)Md+}olF z4oNVyX>bpP3u&8fm0;4QV%u>P|Em&A@V`Z27irVrKT0sPY49Y4y@Wp@R)T>)AuWXi zgidIc1OuJWIs&Vf@n5x!|Egv6QZ1{OZW+FA8NO~=yXeyG@;$_(Fi1ccW+NW;qfrzE zw-d$DIG9Ov03~QhBlso&CiWnN$0$Y+Vj^e^emtx%VrVC%pF~OOi-H>k?0sMlQ%pVl zTEVviLZfIugmhEtGo)YG7;{?Xu5IA+qE=( zlww5D9>|k$dYIb0RH8I4Ps5WCLim@+wBS-bNc<#}A_ggwz=eK*_Rusu>XPcx3%GkI zCmR47gEZ$$O6^6`@tKr7DuvWBTB3M{4`nb9k-8@{<*SCWR6x5f(G{sK(dzHc=@_9@C#kd# zP>JLz2M$mP6eVUd(+kqrJk6b_^rN)yQChNLikFaji=Xm#oaU3Dbr91INmSA$9;CDr zw7vHL)+CK1sdmtEq^19SNuHEai2Z8f10f@sI`}jGrJnRb?j)#x7}5~#`lVh)MlLa5 zekNC;@N(wrZGAKjnT0tJtm&d`#6<=1GIO&Z z?ecLWEt?ax=S#DI znu@YFxI(JLaWXF1Vy#4&jMxcj+$N>nm+5UH9fC<_hmVp`aef<@T4srQx`)IhE>F;z zgvOdqOFl2T46^L4yy`m>|t# zHy!1pv{eTojBsctV5H+h63uPr%_(J4?_C-#k{OPrOYJ)a+Q$gJ28hiP!(t4@rT3u5E}%uyHlr;xk7l6OM=^UT?M?{o0JmAfBPkjo zWE1!ayn&8_Vt!qaN?cpDNpqrD(tZf%Gc{aUsy3Qqx@4W;>jnC)Qfvfhw^4ee{3QPt z3U_77*&>xRLU}|e6Pk@sq7LdKp_{<%0lYq%e}vXqENvI9Lkq-ABs{d5Hs0VqPtyOdYARF>Xl)K>EDavHycCDtz@*^QKQ-P9+xMkDq0)3ze9 zeyJ^cX+6%*^>QkS%@iv_YuuNSkQOSvV(HV;Ddy3=tR!N7q-~d%B`wwbNAwYqN;-a% z)Y2d13*mZ%@`RMDFO&0!Q4W5O50{5m^ZlbyzB4`^pFEI=@{RF{M0{d!G8P{X@{zGI zzBjgWbTY~JMw8KrebM0{uh+LmcT7b0^WBN)ct1(gF?b+8HOY^~cgBYJp?KoJ1WCga z^5v^|H*u={eDB~`Vw7(k93P4g?S{~e@zHUCif3cMER-l;phZEN$Szo&v(RzqT|WvT0R+#^3gpzqQk?{ zVSY>u<%grmp@~?6RFLK|9Gx7DjU|Kqu|3fw-vzn!#`g@4H^j$=(@d#7FODaXd}(KF zXd+I^P_{WbktFo0gB4+l3#b&cr!PPW^`B1xYBI=AP7Dr5_Y6+#=HnwD-U^vO%Il_y z!TquEoqYGm2vmp<@O_hm<73eSkai*ltn~AnV?&crua3cq;pq4zUs1CvoGB@voJu6d zV!)1(`1oXyABa!!dj=2iQ^1%>(gY-!pN#WE6VbuRsGlE>B@@sretvL#m`_Z^Aa)2) z2;spbpNLNEiA_!dxg7^6`_oLGga~M>i8L@ma_|$EHd3ZIiHZ2|)X=1#C&C43{Ul8~ zgV;E~e>65Ux~ydTA=B9S(Ad;4k;HWA( zO@cET9ZRg_DD=1S0}?uE5FiNr8IA3TL79VkJ&}-+_}EyS3V_6FKfhxz31y9sXXHQK z2&JQwlZo0;C^{b8AKM*EM2BO8!T7|^5b=cobDPvt%Ak3vSR_fo2$>6a?F)6u=Ov5| zg7I_0=3Q~96JbqsUvvz*D`oe}&QDmmqWkOhJ*07xv=>3Wfdx@WwR2(+I5X_$M<$>v zgY*oI4o>WZIujlPub@RCIUnBvU3i=@WsnX(X*v7&wIBr=OeW()u|Xmq!||c1JJ@Mh#2yvs7A&DudP;!)ZSRlP)igey236!J+Y8ZlwC!;W=0|nC7 z5|=JmRI$TDmSU%oI86(&e>A@5BkD-H!PLY!6edau498)dre)a`9hyuF*peKB@DImm z$Ey`Zd~ip6Uv$|t0;3=4GPFFTlO>iUMT$y}4nnPVL|63O!DSVlAlWBjpqz|B6G7({ zJNid4fb_T4X1=exrT_9sZ!_Q4$M^JhZ*FU9ZsI+WKJa_|{N-)^t=*gYdBEt6boCGL z-7S2iYk+TW>uU1z&0BhUoBR6s?q0sFv!|o28N%AS8ap;MwRLUa8z5a*H_TRT&=Y}Z ze>YDult{HT_Yq>9&ApAS;Ego2b+q*l`1zK${w_kZ1&BuYo=9(hTjQpVNH5>Bskf)Q zuNks$0-6(Yk|AW)e`I)a*#(_>(Zgnr9+`hheH1q4u!2T=$(frZ@(aHm&GE2aIy3sOtFFLM#+n&OyjknS7D6Wjot+suR_?xcU4y6r|Bf6 zU77gD&Uq=tW(r*_oru*+$JBjvFX-ZFR$}+ik#&NO(&AWr@fNyJn&qt){|~isT*k@P z%ht*oWvgXtWP)s+tX)=fF$y1&=Hu?NEn&73Zr}>4yMA<1>Hgh*BM4T)eepVT|x|@?(W)+1TKPS`8>I`Ax zrYyPPIhl60l;?~Qlgx|`f?<#m?0PWUz_8TDNRXLRpI9Z#fiodG3zOhkjV^qUxGFXAXQi%KB}CM+ERb7*mjz=5byGd7Xmlr`k_EkihR!xM zi>VsK;Pn!6?J6$f0zVH%0FwaoFqpGo6j1ss6asSy%pw>W^%1;jFt>v_4CXY!rPNfb zj1jxc1TiLBcN1{R1ZhlA_wDpem>FstWh&r`3U!0Im%LFU)1=TC_c#z?XPaqB*;!wZ zx~bB#FpWs%7lfaZvCLhdU2qV9Q#p1TgHjC*60mxW2+Vo|;ZqTf457EcFft^=uzI1X zW=n(NvrmH`vkS;YI>aqRzKuR&pO zA7DR;>=fHSYAq?>>nT%q z_$l^Pb~myD))~Oc<&00U<0u4%)MRc}tq&iH=-4@^<{Yqvqpy42OKpLDJ_UpzzwfaJ zQ4Yi%XKz5+;6BLSn9AnnkFoDjw08*=$nQRo7~;(84dMBSn!S%m2>Uj0{B4@sJG1UJ zVH9z*pF`zf7+~tl0KH6JNn+mw=uK#*H=$|Xgr<2DO7SKLEn?q*m^T0?#J+?Q?61%v zF!us11Cj?)z`@5U;3^G2&R)-62b?e+1Kwc>{p76LKuUI9%50%%*O3lh{}g)?b%SA` z@Gp=a89&B;fmY?vY@VGY_(e*s1J+$Dwgn`-hP1&`>_PTM%845&2WEZMaR z7~4g8(UszyVsOf0qd-eaEy`8ntR{<;q=_Q>QYr%t_DNlm_0C#z!yL$IEv@Y;@@5`e z4b4{#O;Zj1WEE|U@T|!U(m%|GX^p~YJD9^@X28gxjl+N*hBgkP(=^1$u7>KaMvGur zXxr83EEpJS*a}n+=5{bogE`AutS343SU4gDrsB4(1@3!(isY zoCTvq$JqenLtgJH2m2tH88D|<@{(7a^+P%Q&Qb|gCH}Cmi&#Nom4a2hU7b)L%v``_QuAtt+~=pPr60R7D{5E$Yv*g7f9Yh+ zjGa@ACqR_1yQgj2wr$%srl)QD-=4N@+qP}nw(Z{8O*Xs9y}7wbJ=9Y@)YGXt=l6X} zA*dmVlXs!;ru8a@+rI|#4^~0>QC?;Ht1j=JN|t+?viY_>${(uapI>E4^gS=gp51p< zcdLMCoY$=emNx8h6%ID)A_s_cV>;@rad6B^);6@TMuJy8W5L#3ZG^oPC*pZXy&5Z} zCals#)(6(Ht~#HC)cFfiH8K@5)ic#by-+vMpoWBoh=zXu4NwVAe3BL-;=!>n_5qXS zgMEg@1jhsYK>RDqYKnh}vgjN7-V&IV>jQj=56#s_Pl1R@G5fC3%LDoE4nbpHvkX&E z1TZNguNj0je_e_gVjhd-<+g5;wPGejxG|0XooT;?TCu=jIY@V7dWh3L2GbtL$W3IJ zRqh6&GRXDl0dfZZbr3Y4UFc2$d_y|K^DocPuDI%2i-L;Wdz}}Ha_RVsi9%)C@(*cB z8w8~-$cH{-NpCGBs4HJ8=aU0yU>k(Bf1B6xK?qb%8_!WN6LO}}oI|KQu#2h9+nx;) z2_@xA02f%W*x-nN8AbPy$8ohPN?#XElf1K~MppP@FRgUABZem?Y+!p|cZx7k?FH2% z;}DbSCyQZDvEr}Gfi&k0O3_fW%VXBjp zQ%o_1(sH|#;qu{}NH7Dxex4phv^+mSEO%tC7*swSEpfoARDR4#zDwl4zT^R-1JMXcslq z%LeL|Hfne`c zG}5{z58(z1&CXIE=;a=y{OXSrU(^aAee$mtju7K)Z}9NmTGM_aiFFNhs3V0hc#3`l zd@cS0w}~3sZ+v2-JFhcJCS7yvniL=D*p}Log7Y{0GKh69E^9OQMP~DvT6@2u>u2&w zZH~J!W){1tssyQuq)Qhj5s3I)3N+D>Zqx)b9=swN3E#hYp7Ud7v-q3>D>dv+h!I6t z@h$N_VH|JV#{^`O3*RKHUh+&)Tg@~{%0%%@6+20~NO4Rx61oiW4_Qms+vpI8I#^ek z1QAJdWIuWEYNUG!LZBKfZL=w@HP6EK3Zu%ERgMb%^K|81(@d#n^`;}}0mHw(aoQWv zVs~JUN6QRX2wRFC6Nwx9E|wFI<&E7a$RXD8f)nPGUD`kd=@8vBmJ>-E4&sO1TW3}) zU5mGmA<)rf#Y_c9%}lw4MY~^T7l3lBipJ+Muf_%n^N- zm|49+12Up34H$@B4oET6d`f^`#W_7=|^%)6*p)`)uR^w$-?|{BlUzoD0-!C(Og$PEaqxW zQ|`U{^8Jip|AY&>y=(^@=%g1+A74!$Q>I?AoqvlS{OE81haW*9J=U` z*RXNu`mMqRtzyS(tZc)G-jL1dk=Atm*P_phI9}S`@Z0ce##PD#zYl{tpJvvEdrZE1 z&i4<-RWahb;~ClyS1L|_CaCzlc_dX-{r zdOUduYo$E1+H@>zXy9U4Hl}#VL*Clph!y3}NzI!HAyg=3Q+swQt*=o#tb9+I-f{k} zOUNqG{)S>KDN7bW!2ZvT(1csw!H!O-TYa~>RWGE?-`H|U6P+M zn_pg#Ob?ZTBehfygs_#&1)UF!5i*eS1uITGt5G~N`1hcF`XWS-ciLe$86lOp{2Zx~ zxuaAtQ9x`?X1kwvM4lk7`_01_0jofD$^WUCW?^LdAI0?lzqC3A4i^XrLIs`X|8^qt z|D5>W(rQ*#W-g}xhqRiRjg5=ze@m+qJE06!m)1CZrn}spuckM7KDuvY;?qbIVAEiT ztcmJLfcuFnAb(LqQUCLq-CB-6Q+83a2tRGd`T;*T&EWH%bFR5;#&KH_52E z8~xdOArxNq{}k9{TyLf>rm9GXAM0l0_Y z=dtPRz7H=c=2aE=!hZm22{gN|)9G%y>DJ&r>5hgH3ftHKGCAXaTvA^^~zv=GZXK_)(osTBOJY6QRU&&PciZ0x`L)|J0N z=iKJ_D}^`aI20kuC1Uak3TS4*SwZl`!5*Q$>C!_nIWM$P#eQLnlXs%Z^~%+@Af(X< z1e3r}6DZygLvIDziuy`q%-YQ|KZ1~oz3hXd3QnDtn9G`=?UVM1M4hTT*WP=P{;5A@ zdh8e{pf+KJ0ziDhW8BhumK4J2g*WG2%-O6){%OTBh!LI*ru(O>4mUyzl#FVhB{OGF z4^hu6fDJa2o^^J{{7JVBp_mf!a)8e%=LO+I4x&jgr?oBIPf8g5YeX5Lt%S4{&>eLx z-ZMnS8(jTIo{;6Uxabsg*$Cx%FNNlXgu}aIR@nT^=2ZR>^&RRR%JpDPHC>}cN#_Fc#QKEP6~Zt4 zgYckV)OEi#{*pH%Ajo_eVh1?|T4oDTb_KD<7nm&)SQ_LL^c}!2WR^#LpYuqv}LID7O_4n1l?W*&l*!8U(;N1CqBKjnxi&o_=tKgW+ z@>mGq6}z$69$Oq^OzOnj#CIJjwsph{gK|gXNW4yve;OfH*anGbtukk~-hppgIfQ`Di@6ndh44t9PiMFjg4#<;KPNp1UQOIIpk6 zrJteR(e>$OuBmTxv^m-vM@cfH385(wl`8`7knc@_=>DDfYwAo?WscbV2hE(supR?| z0)XjO=(WQXl$f&+++>(#m?N0W+5MpRBq06Bd(Ge%JK5#XswG$f)=$3`_Qui=IA8(51sU=oMz4s1uO0rz@v>Q$h~Y{1D9?Hj*|#RpV4 zf?*Gu&X%Gjc?n{;?#p{aJDa05#l6EgMVkWW-OSqkvfT#Tn%U6BvZQ!IICeXgqgI$IL3zEA z#gi*IBP_{K!jf+&vQ561jNw#}cO!?)zU&d;C` zp``rETu$`WvyeC_lRg3}!2ZVcG$ZkBa7>r~N0*^8fc3d^8jnPny&!#{_GPe3*%WQc zONvJ@{xhpyjz>E<(}#g4&h*J-66oV5A_w!BnD%yzVW7wooA3_m8{WM8m5T@bO4iWl zh$~)k>$ay0^;%5q?(eIj5V&-i&*7iN6)X?3UIVc)tu)a)Q#s6n1g0N=^wrnp7u>^? zQc%^)UtECEm%$IGLqGP%1o#VMwW}>RqG!ZQ=z?6y!xTRqtospXRN^Q38>c}Clf$f8 z(Hcj^+-8h}l{SRi7fma(NA02!Ek$u;c)-O2+9gq!u2HoAW+DiPJ zvjG`iJOB!N&GnTgGrp~xXp!|xON}Bq%4w)FSO)d#Im-tJZr?FGt*zp5bTSEQyj89e zfc@t+n!m!A*FuN@?^3h9)9yXe1MlEU-_DJBE@UI+jp0J%+X2wt>JDv*L9jq!bCVDj zbEhl+4|;#W70D>RM`%rkme-u;0mcX5oQcX{V+*G%_((rVRNcD8 zrjuFm0-%35f6lkrWCZb>xA|F}Dq40-QRG#(#hc+3ZZ181>h?dG9AtR2tX-ygcd}9&M+LAHXHT?_{gWpj1`sUB zE6}D&-LzOT!E`mFHU2F$H-3_Kj6zCV9o^T{0Q_Hwo)QFUR|Q) zUNXPhVO`%{r&BeyUUDZcza%9`IzCFt4oA!4NQSu%N2lXRP8baKAzty(%3A6a@VS3V z{>bT$oG0^JzZ<~Ul;YoH9^GUz`DT|CxJgyn@t7GjYVd7)e{0%Q#8~A>Y?Q5|o0JR{ z_znI&Q6T4eSOmx-eistQr=%D=`sHf|@}a!1k|mU1*cPpP{J1NX-9xoW)6(mzTbUZj zeC~fOM?5oFX1AvVgR>BoJ3W7H>mP}Yko&EjU1jaQ$e!xWcQmT5d8F+Oyn87CAzfZ< z&DI%<<`<2Rbv<`OwYUt#Xh!J(RiR?L4aT_5a1!rsH5||I^!@tU;`7oM_*?c&cF-OJ zy1Uwmf*%B0mrUGL7=P(L3V%Kb^yni^pKT{VMA)dpJ06O*|6PwPZj|L+2wz}AR<1pw zPJoI`KqvR*1XZtJ1srwfEs$*5M;()1 zw?CWC84g1csd>$*wtT|OIi$n|&X*mxr|{3vtD920 zRcSB$l8HU;N+3*zOvpCU6Zpw2aNd>K%-SZ?q#eMBG>a zF(JIC7;VFB*q};Y6v^8?=Vrt1c+1(n;%KzspK$bc`NP}Nfe}+7*ok#_<8dCfcjNQ? zs~^qI1NsO(XU9hucxHu$^J|6IK=FLt1-T_Cel^$Qh9FH|`%Y^{BYn>J*Ut1fC9bWt zCF@~5=W$0fk!P){J{h}+Bi_r-Y~+2!(LKUMkJAhP8~763l%K1&X0;*uDsRku0QTMI zh#1{=-jMc}lsBAFY2QJqoC#a?N8|g205?m}JReTT>dHAYv%4}q4tyN^C_8(oa4Z(j z0x(rVo=H`l`CYTl_MHidP@sIa(y82Cv%}NY$a&rk&Kf1w~_{vYxYNjoIYOs_(otdpid= zl5c@b5fNi;5pKS!ok^O!YBpI^9eL5$qyS?iWAxWGPdg;LJYFwza-rLO?QaWrgsf0u zt9tS;v(vBm{8^rb1*o_EW12zLst`c$+d*;6iyIr!Hfmg}ycYqdt;Z~U=liDn*7O*ZMHDirtKVlRNufI)O7Vc{gC(m z^~U1=Q|ZL4lvrDWXF-92UP-qW+uLN^mb=pn@##~ra`He4M_n?1_LNN7!8ml{!j%P0 z>qd<$-m$R9f&HaVaP##33Enfe+aEfD2^QczJL3RNke>w~f?UdQweUenaPJl6?Z*_v zEN)G!CJ$GtT|bP>cis8}o@3Z#2590o2(!fzEd*b(RD_B_VbwI$sprlNwhslzG+@SD zzjz^pUzR;sy-A$B7;85ZCe;27s8l2jX53y_2=ts4??hTqCb45r!xpr`KF<*3 z$w=>HrczCxR9sqJ1+{r(zE*R@<7k#)`@~4{uwEQ1Pqcn}-)#g9OLZ?FT%u%wS~DW}~9P&hxpkq$ENF3kW(NVfcli#FzQ)f?D>! zKxLRjhULMA$uen9%1+RZR$H`I{}%afo)kI)i4#eaNSYDLnTBNy9LES?Fl%iKTYx>X zk|syVjB;~Cq~UQOPIF$n?3^;yIQ(^niXpRC{I9nVD^mpc5HjV5SIOL5Nt9eqCvnB8 zPz*|VBJ&&(REk=nxZ^}Ec7v4$>ms5dt2d%kGpijR!QVG_Tk+ z!pUPVo-ngp)9h8mu+dnX>NMPwc4Om+L80&Gmk)XE3p&XY;%v_6F~nDZ3!5rmjZQIKBT09HjP--1G-X}Ona3_|YhyEhS1LiVpHo5ZA z`Nl|V;qt4{ z!U6`f%O-NOqh{?I1v2yVNODI6Q*sT`u?zpv<$(q)Az2qQhN#B|XnsYKGM>IVBI+n3dG@Nr5x&arJ2GJaZV&f0ss&u#STk@s*IeOaDU|qOGn#Ot^ zjLQn|7`O9?0@s-U(PVMk@Ne{N4bxcss1r$pj{9-$Y*JHppc3*UfSbskttb zDMg}r-Uh7*d^UvkjWgu!xXj+jy-Mvl^m#5yZyE8K116Kq&Xm;c|o|%o*ahRGw?2)Aulx1$B?zJjM`L=Vf`|sO)}E; zrFm55rBItx_Y>Fc*fRv`xUOV>Q3N=c{i>^k(N!Zvw3a3-O;j&oA*Xa2r$S(r2mn@p zFO-~%iFNWA{{1eXcI zL;Z`_3+$L3&S3^Z*pg*z!0H9;lxz8{P0#FgSN;j2)__5&=73nb=a)Em2?hjSKxqHG z)o_EHj(x-JMUO9#a2=L|B{YCo=lQorIG=*;5y?nk2m@_D?!5T)!L{#Ala%`|{Q%?& z6)pZ5WisgVyBx*3R9zpI(l7d2?XCQlb znqhlI*C+<_vag5RQBR!h%b+2UIm6ESSPP2p^Sctxq?-jn{7d(l0*efWKrl~M5>gJq22x76nfoy~+OQw&TG3{fYiqhO zVf$=QKHzWUuk1{v{^K~Of?P$gfCgwFGdQ4WB#~WEP|lwHPj*-TTaIiDpFII6f~fdM z4U--i_Z>+kVyY1i$@Hhiw{MlWyvyslI^nrNo<;wD(xTgNu z>$>;tQT-m>9p+2e2cE`)|6{QD9d(~jwHH#iU(C;Y{4ylNlF6mCR75~Rx&`0PitgUC zZg_Xr+Dxf+CY>YzFQ^ryyb6KS88brw)2*SfRgQZYvv#UAG&Me@B>bB(%(<3nai4bn^-E1yUBG`)97GedqG2nuG;zEp)Bb&cCNo1I9hp85inw& zKJ;9ky!G_>#QAFkR zVu6?Zw`|QPm!bM_nIJ*#RMlxolLQ zsy8ggBIK09G%~qOch}FwQ9GWA-uaxLClxb;m~z)jrX^U7>E_q9H4E^dtQrkamc1>u z9@y0C)0YI~R0;Uq4J_%dTPJ>2z_ zRwQ#(u9ZoTmt5bPOzQ89{44pFZYi{DvB7oBH*U8tGS`mo_hMKVdLvhbb2zKo=-Euv zo4n@9HT>Q&6*?;8G$RO?vAWKtPJEh~k)R`*2X`TNf)J8Y=oPYRLboM3XlIt?PrAZv z{GL=G=MsP}=)FgjE*FmEKsSCF;+Fj=kDicam5ps7Fbx@-f4Z5M9?jGD0)eh)}7CQVDwyzWs zwme^Wcd3@y!q8+H9gSpG712Dt3m8E{8Yw>6D#^y^ z4CBQO8rrX3IP`XZj^tD97Vq!=o>KQ2uOZzJQU)+XZV_ny8=$hey@q8Y9D1+!9udoS3SSp7eqy2gC zEv0n)Zw)&QM#>3KJ@{{A?^a!199S`NtOBt&Nm*9C16z85@S0TA1}r#!DaKOxkHjuD zgHL2(S!_n^KIlB5J}u(J-_aJn=63FOhf2=4cnuT%NVFxHY6FEDi`MbFeG^B}Jrw^G zd3_gBzZn%Y@u5DDP!c3apt&NlMUmL|!)D_am@Xm=D^T+X5(DePs1Hp&RGqy_7*?^7 zsPCy&5AzY4VwEFh4tXjZ!cJ?;y&IDQfzL$DwGBgpAK!k&ZiWm4ja9*kwD&hEi^e~` z-aG4xbp|P4M6>{+F)uQ2sKksrp&-bC@s{e<{yy)xC0VvHceXzx)x~9=Md{(=Ui5WX z`2_1%@BMNgW-TUoC^m$MNquSS!Y3N0!c4fZ;Q7xRGhd#+dyVG7E~Bcg64bOhLu0ME zM)RW`VKu2D!-g?>*QbXb^b-3hX1FNUDL7BK=v}IXCAxZCz8A`1d3<&Y)w%6l@SWy~ zDCFNY0XXBm<6_Oxl4HGbi0b6n=U3C*Y_5jxoe_Q2q*)HM$FUP(^&BfE{W#6 zFqgL#w=d@vq!Ut@C8I1?{YNfRoC)fT^4gPkf06C$gv#8o18k88{F;cEV2d+%YZIF$ z2|giv2Bvv%pN)z4+&bJ_HcWOoB`7hSx$*9~MO9GqGvQ@7Hk;o=w~ief{30Y`;y*J| z6RdoRX^u~6rz=};ERkM5-ZJGPeVg7ZN16woW22h8B(KEaW@GdyfuALh&@}u^$3r+f0(IOjH|Eo;Zs8tBs~jINrhcX=!)9;;wJK~JEz1(Wk)#bLk~Bv>}V zz4Th$=?rfQ7uOGWwW;q5T(pEAFwK~zA*xY;nt`9NQMjfc3zEUB%ZXet@;Sarh?dWi5D(6)^fd!Yde&K7}iy)b7bfTz+1c$mSL$J>K*=raLP=o!c zy^mh}g&Dm+5hTYvZ5?_W6`VW^y7)WQTvyJf2*0V+)G32bg6>fcvjWz#L|V2?G*ECh zDY3uIIrUN=!XITU_;)x5GNJ=`_CP2LC)wn5X6ZUb|hldxSe!gZu;#XlI161W0NWu0BzDMkG#$pwukvQ1S+&GuY4~ z!=|I~VvAzD;;-TX^02eu)Bu)@$xJHtad)I?AAD-}Q`t`zd)Jj=|L9}@;uF+mESLtosrFv}=t0=1Zz;wgN)H!uJD)Sk5q zbm|GGzHl)QGa#$}tq4`ZcMgjUlPDph3eo+Jvxpl;ooP5)3(URt=|Q;1J>htG^^x7} zxK7YJmI&|DHlY}V(A>1!45`|9o?Y z?X5mLuNxSCa<5G%S@u&k=_F2Z#Fo|d_#~bDZS@<_v7)$(fEYyuuNVt?PXp+3SwXo+ ze!Pw2NXn#XNl_CFnc{j?xhj6wn_)6eix@V6W`A7|6 zPYK4%fm0xLqd3&@T+Aw)N(1sJ>`9^{*322@(Qm^_SR`{S8Rgk)st=RJ*kLSC=t?f& za2^Y9r}y65=A>ScW0F#AHlo9l_raelrtu80QE0~N>$RG=HkW-%Wx#|*w;uK@_t<&0 zoa;=?!$gY32HieRZ<~4%-A(L^t;$@VW=rW>X)PpgMFOjPaKg3)c<0mQED~T zPf0IZxDSJceY=Mv=Kl=bIq|Rp7n#1!XW>(x4%S+@C?D{nbV29#HMM%S%0V!7Qs$P{ z(%$^qfz=`_?JeXtiQ5_8)UN%Xj+aM?-wtO=SY$4#xL)zBc-0ku7Bh#-)S0A9#)oyX znqv`GJ@5uvIkQhVw=W*r5Rdz8JsnuH>cvzrNpR4VE7Yh-Up$zMkaYn;C##@w84=C^ zW|`4@zX3HmE|^5n3%J(2Yq;Rh#FAE_=paj7I_QHzLFk}iC~hkp4VZ@3bkMfCWL^q# z$a_TD@Qgz$-7BhnBKL85cqdSjC&OQD?+gho*>k{aqqo3w%`lLyyIfY3jE4;4w4XKV z_84Qh%a!;+Uwh>zAIM9|Y-$d~2Z9jd2!OeU?M!Y!!kR_9EYl~#5~@z(!)pj_7Ruu5 zA%Q}V>+A7kJdNtWL(sdKPa~j%LTJl>?SA}BjwwP2A9midiv>Wp#mJI|Y=7I~W$U@1 z)&1VfYZ3e2wSNS-;Fzd5&|e?tnbfWIuX2yJpP&oFSy&{VBEBNt!k+TH^4#)t?Jx~- z4Y}raHFGpO_n87&|8TJe9b#QOyga17xj%fmzi8AbdLFfl+Dh+K0MtC|KN}9X%{814 ztPixCt&S)w6f5keEHaoIm_jIz%$uput5^nGwtFU<3OTxJQy)!zqCSycp*|lcs-`R! zVrmU)E#UEm?E*OnEg(3N zppJ35!*G;hKw&}gL@;pzT-65dvCYr*wR&YQ(Id-wciO)m_748+#Vfdn0*;}Y(-uJ1k|Mfrs1wj zNgL38RWG&~{J$mMvO+K_-?y<4+3(?*Gqt%_)7bTwb)DjC}d8z z63tptjOtJiPAs^Ti5c>0-#b&pup0dz@#ru#c`86<^l`Y|D6h!8dwNO6KZwN><5@;+ zxggfdDp0gnpf+2tV66r#vr+lxUWeL_W6&>Q63ZHcoo!8 zmz)ctjNL>7Y^FCXJusE=IqYrN`;)tI^F|{6Iw3NnLjOgIz~346nGd8p<6QH^VNX9O zVG4ET{7DiT;KauoyZabY>Q_=l{|KXaJ^&@rBiN7c-l(C>u|YH~TpakK-XLQ#;|{K3 zVZX{bfs`&zzR6x@=Q`!&=wZMvhXJp8zqXs-VbFEq8a<-hE#UCiJ-@3&8P$V(Aq~o` z42%l=E;tvOdLTDVHZK0KoTBp)&yFv72wr9^upb;iO%~p@dg07;O{{byo(qyegVvxO z8!?iKnK|LO?d)|FbS4$xV zl0Svsjf?G#&!)7V{IE$W!{9u1isj89nNj)wnh*Z&2+xtU^l zKZi~MqChzm8_|AlMU+pM9#YajQMxNLWur*HOo^d3F;7cic-3;s>wa76QuWLA>uHn! z%jW>(^J^F*Y8~zR2>;yY>-QIoC-y#JPwLd8iPYN7WLO7#M=MXPC6Y`YfAWGCCkdNG zo(eY_d(4(a!k;u1+a;Y$b-ao2@2n+~N;9pVl>x7=Y-N)ML&Lb0KMmSw&|F7i;f?qg zGOBh0UV$&9Ti^nJHVKJaiH21T{gKaO(PRhZ2MH?_l=97RJ%*U~-TF3sT$3l=N{28V zLPZ$hnZNA<)M*!dMSfbl4Q6t)uie?8`3OS7wHFZh)RAFU-dL?U9ERgzxT?=*=TC7l z%KHBeWOV|R1*Ou|QlgI%%g+*hs-;q>%kQ?vxy=^Zrv@T3+Ptf2wEQ#&FxaZNUv$n> zGL&r_`1(NuBd42>_ZYtQpXz?fJ4rgS4kd0k0`${+vBirPPMb2LQ;G|*iP0E4h-sA1 z>WvL%2f&wiBNeJ9EWtFxpv={x4^x7O)S^*#L9;6l>Hq5N&4DFJNl7cGz>h~!{n=u@ zVcluGZG3G!B!0<1RKIfR)~`MFM zJX2*(%A1UCWIrl)>C7l`r#m^+;!3VSljpJ;6z>?bKxJuVrga&2&T|e$PH3@BnaGj8 zFH@brc5Iu+;=gh%VbP8nHb~jKIA^wu5(iBZhv8JRV%F{$ICG>>qr`>AA~H^%Fj3Xx z{)>uLHE}I3yM09e0k*0p^6J_DXnOjE7)2E<)N2w*sMR!# zD!&pEKwdnZYHlAa{V3!wvgbDwVvID%X!|FW16$-w`3M07(XB+rS$cNWx^jFK6ADX9 zuI62AGa55oT-;m$!24Jk7r7d{79X%oFiA{eHHmp<7mh;d_B=C=Wl#v84+8~>Ox{?=n# z5}zoiVvm<*k*QE|%t#;2aW#==k_!3w+q?1<7FSw=DOF0VM`(&2Mp z*|j^aFOFI1cORT5{V~M^sew*V$H&gmY}No9D`WX`Y#&I&1hf^ zgtf+se{MD%*%lAhaxy))UbHP{5s0OqZw3}F5ROw|#oD}7GpVMN+Q1r-%<|vBC8|J( zz?K*@C@KCRP8g+7q4OUXTh_6|AcrL7cVn*fAn+wFGi5Bct0l4zhPL}=NAo14z`rkmog@$R=@Jz!U2Uv8rnu z#3+9VUv=LMQ`PfUUg4H&!9o8Crq~u(BiJJ450(|NbtWZ@PvZOY@}1M2>zun1*QfxJ z>lA!s06pqB?Si{DwZI;v{70EpW~z|EHS#-7Nx{jFhMFhUw_fplCjHq|RP)J)UZ`ye z`h2P_Qce&oaI0}4Q{@0$OXzuVH8KaHBJmB4o;r`6yplS%oAxFmiAB7nqNGd~x3#i6 zmKv>XmzDgMW;;*w6+TW!qrTSWAcp;YUMYQ(#rrOv>n^vWCOsOUpWOUO>t0{%{40$h z2ow6rkIMFZXxI{D^rTtMQR*>ildb!1X*9#}Dj``wtU5~bNg>ixMLa_tZ1EYgX z@Z)}y?qusfw)Iwy7nzIIn^~{?-}(m!r1`x`}e2)^xDHc&CuI3Y5}aortmz zgyDc=Xbs9cmu|*S!j9CnXtmKaLW4Nb1B5*Zol{kij45&QvYrr3)w-mSlh}kOHV7uE zWm@$V=gsCJkVYI)HQ07Hr5Jak{D7ghCU4D1^FtfV7?`_<^5)K^a*YUwQ_L;oq=32ev&Y56ssuEl*#1(lx7}P^_`~q$$UlL4jjssa0=GXr=hm{yhA)9FU+FB))>#8nesCGPi8TW_z5fjVW5fX zNZR^Og}PjYs;w7Rvz{BXnm5$G{e;M&Dpa$R&o5}28PjEvn%J#`3fHsZ&cv#KIJgUk zw5=$=zv8rJ@2Y*X%DN3m$vehmvtJeEq$L#=+u4_c%25q~ga1xm5rT`?kPcKEQIQl0 zZ;3yD2F52yEI*NRk04oW5_}_n_};vrn#_ z*P!`%Tn`Ci>5oJl6#9wK$92aJ9)pw>PcrYnz2Ltj*X`|P3By(cpZ$a>rU@w$M%VV-{hjsS&0LADpZ*Tm zrdtw>yn;k#SR%xLTpz(d)b^SzT}W&#NncA}ALA21b*v31d+QD7D=IoMla+7URWBq` zY8$d-0$F}sy0@(H>1+Lbq@!nFVc}y(Bf#mUI?=F$tq*2n5ecNu;>BK6FO)QuxJj)p ztP8(*xKuDPfw#l0iy-w|guo4J*rQS9^G_* zScQYJhY~A#%G#Bjx|&{+EVZep?KG`9?T-$rQtb3vYZ09|K(B;IXjJU)hEzJ&nP&J( zve>Gr=GHln;-pkCiho_#%H`FeUu-x%OFa%d98KTn;D0V;)&W}$COoIfW~vv*j$+qn zB7MYqT4#D#za%?sZRtt*k{g;VI9ADGjoDa#MZEqnP}d|;FgnaGuwn-m8x_S0%zoGI zQC(XskX+5kU$S&wdT#U0Rr}&c#|zrtyyT>D899^QE`56rjpHAK^}h@ zmvI*H{pCNrMbx?=U=B%Yj0YSsoqIx|WFd|}&f4s;hW32A1xEdHo6%IREODi>=U8hL9&337HnMJs9Q_dhIS zSpqRxc>W^B@8as+hAaCwM_zskoor~f+S-`_59Mmq3IR(G z`T*v{DVNF3t)+Hej2j0B6p*{oPw|6pnU}7sdtOGs-jD8zi`K+AL z&ai}K@(wPGW)7+gyRUJ3=(H>-gXe|^7Q|6q4EwHlC5CjNuxXYJ@C(FqziP=yqquIxyb`mT4W?x{A%79L5W?$>a+gBr3e>?gy@# zd;X;O)L3XS2SLb;8tbt%_Lf6fhrZZ|gtg`^OY5gU30&)YSp;Fm`FfU(LfZK^7}l0r zqE#vqF19HtZf%{eNi^tp?V3(CP@1*w6>0eG99btx%DRp8KU*-TLKe8vJY_O`GSRw?P(fh~m=ibPbk%a=)LWJsRZS43S!8W@Zqs=xqfc^BwM`cjYThEDh19O+rKW6+&r zp4|CxB%%wn2Nhg@{WB}lw-m>9HErr_g3H2$o1(#<@d4pki@i@OPBUTu_zlz!1WnAi zz*6%#$>xZ~9zLH~SNd(Url)Z(G@37eyH^M!J!M|@gNUT^aV%FT)=emcLxyo>E0b@( zWlD(PXP9m~mA9hqdf2=Jnk_0(o8MD>FZ0~7%>5So(~`$RDWgDO$76SbYTL49T)(Y- z(=!)7l`&BXvg!_(W#NvzBZ`l#lm3{~kYBT5cm(yADP!s&76x?NA7~v*e(`KE5tNeGNX^6?&ZQEyV*5m1*SRUVm;_@mmtG&FH5J#+0=TRXOA_4zyYz+wMX>_SPqAz zb}`YcVj^mKkLM8o!wSU@R`cj7X=~G0a>`;L;$$b9yxnvN7LUd$tmu>_#NQLQM=m}5 z?8_cj^ob83?6cCE745BqVEX8_rjz{=@=W+s_*NWSpPIX+ zH*qeo%(!NpOq8wy2baZ+`zM(tUf&ZLPx-@}dpEZ^>W57%_GTS+-^U{HhXn|@lR@M~ zrD7yuqbuVkjlTXSUCS4-W&#n+6Mxa% ztgv@CHbTkrHIufIxZlTdmlgOG|S||z|`#qYPUFFPty7dkotGyYNi4f|+3Io|% zNj^#`P-zv{jW4zD_R+S4#=7cN?@qNqJBd4cP+R5HjZEvV*H@C>P%=d3#kq5{-#3n^ zI1!-zy(^K)Vp_#^r23e8n>PZ1Im$}P~xhA_kL_Tw;?wPfJ^3bW-|&GkjI^nhUs0H7br zAC>d0NqPlRS0lEVXH}q8sn!s<}_XzRu5p*hMRs zIy5@mCYxeAb6nFj?CS1}Ryxi$$!QwGwHGV$UXw?0GJJg+#mj0l)ka)aW9Vb8FtvMZ z!_+F19U>%0#%!K3{Z6#quRK}J>;5#~lGV0vP5oBeqmu2W>aQdWF2fo)lc0z^yK-nI3jUjD$)u^ z7t84@3}W4dQON|kUnoY5k%AX?h&SM_YrXA1a=P@5PUQ)%LCZi{Y1$ZTW zKLzZI2Gg8x9MIq_&MTJsP`u%s6n^m)?mZ`sat+9WL#QoE5@^JlIRI;n-dzn7yb=#L9aVmLz^wAnd@&+1-Z0r)jVdxY%U{4o6GpYeMR~eoEP)P^h1Zzca9+T;vCVVdxr=b zK|uRpwY}WVneVRzs(x<0wj%HoAbLO&{LbX>OhryS7ONIjrvV`*FGtqqv}mFcFPmx; z&r8BhnlvW2P~9heAb#!ZCz)lgoZFaS$mwts+YiX?YW`x3-J*?cZHArxI`3$5^ZtZz z{%CWny>K;WkJ?I1Oo5$%K^6;z_vb`sYStGPABDNOnK7lJ$)vdnj;OJ$qE=W{-=!Ua zCO$pY#@WUhw0EQa=KSUcd*bz{xrds0-DJj$-7@%>PB20h3Y z3-}?nzz@=xvMxza!)%Z9iD;PUc{77`!H+gpKZxB((GY0EY)_0|0!-pF+DT!$HwmsXR9N=^wFpnn$E zb3*tak^YEB$W3;Mh{PF(;6Drw9qf%8ol!)YbP8f(30^^r3{u2&1xX}W^AMiKEQL8wU9tNNJWVDwGnUa;cJra* z)Ml0(&oj)N|LK?#{?J2W2k9Rn-~7`@)DdAlLu6ub|Iq-iDW^#>`Rqb|@7{%@d2m%K zLMSnCWGz3-U@?lx_^HdmtfKomBx;|82)=<|VcIfP^2dV4H8aVD-Q8H$_PiR2D~rrM2ll%?x*f5-?g=E(e{vTh8q(-RoD^SK z-{PF}Mehl-1b7CmNkICNM-ILj*g&*BUM&nWLMAi|E){nZM=n+L-xY~towhu|@PvCt z2qn#l%Hh;H4kcy9+D@#7EG@e-Z<|pum!@|q7-rg`cP$y600U9EVSt47xUO8XDw`}B z?Y3ot*Y;W9E-s^gCPUK0n1B-+p+U*mgz;k?PI@~L{pIDK;NgG7e~2;z6J?E@gn_FH zekv*>4Fx*YqjsE#U8y{N2A2M7)m@#7fg9O-1o-_u%b}6N`X~KZm!pw0*W!i8A@yMb z_%R)OG8ZN66P^1BjK6on(@MFFa;Gil4}51$H}LX^wLGvZ^c&s2nMYJ}2-DF8*~&Cs z6{8KSEi;Vs`A1oC}?0)!=4!Or-B^1Rc$e!XLPR|lvNRh)k8 zy_jXDgny67i#QWz*Z!aQ>=x}&iYv1j7s|*9Uxwt7cB+A|9g(u}EDK zPYk44lJ(JfyZY!v>wI@ZfP#!NFhJx0Bypu?4Qwy59g_wO+KR4vG{UBV#DHPY$@hCO z8GQ_StOV|{FQXpPlo0Gpx)M_x6=h_fkM=sT;ekBV z8qyN0jDvH7!<~mH_D{~ow%_;tOyx>n3P6nu)YETo!f4)D2N44&L_ydnwpH2b!Z=1d z&-AjwWybV^OdpLJ1*2v$>c%mXHDmy7^C6~I@ng0kSW#db0Dfm3^cI91(J5^|8gea8 zFN)XtVxxQ>wEl+02ieJ4TBIo2gPZ5P@q;Qj)?Dh)k`S~oJvhdEbPIk(<0rq3&y_Q_ z*vq|j-FN^=|6BCFQ8)-7ZvY@jes+?xxI>QEBz^r&dIua$n?(vq?Na>=tpm5y86Xf# z%|xe+oEIDiPHs1|n{Frl$2DC8K~07=Zi>?&Xf&PTfenzU(R0WT1|OUf*9o z*W&SaVecn@K?lgtw-BQ*9X3Axt}5?>yKU*W5o$pGnCdMYBJhbRcj~f8zqg!r^J_#z zy{HI|+zpUI9W~_w%C6Fnq+>DNe!$f7WnF9cJL%(HHubo(&SzK4HuKe+PCQJX+ad?i zoh==GV+@O8x!TEPwgv_eRBgiYpH&6R$Y9B*>9uLm)<`O>to}TGTmUI59Uq+}pIKFfYPIK8=d}t@0r2x> zJLw~SqLeP3uRz_N$*b*}*X5AhVkjL1-F#&vHJ{Xv1jQH`Oa0Nd^(jTW{Z4sZd8oZu zJy0h6{2Qy)>fq#6-Rat;R^fy8^(U!g#*v(oFVJS|crrDTP?ryY?!ee?&8TKZE>hiqV1 zH;Xzc57D+?`x7_ye#=B6Pg1*3%ZzY50$Wn<;2cLK$ki+|L-lFBecx~O;Mz<1X1@AE8M}J~ znCXKGOyhyKiXT>Exg5#O3wBAW?tX%n7A>zW-p%dl5wLlK_{{C&>FJvsH4Oo2w%2SN z@ATxlxYcpg?e}+)?)T$rS=Y{Df#r%@#vJde{TQ(NebsFD{?Dqqq_%ycHG6&LO@)nfC@{Y{24(~R}wAp){ zzLS0<`SdpHc2HUsmsK?d8zWF{d1Y)bSI?=K&Zy1VvL!nLrNxsP^RL63Zq_zzYMT@` zEGT~_H+rgW$ICZZRaEJ>cjxEdN^`Au)wAr_wV<9ohMRG7J0FJ9bWC?uJ)M_UHc6Uv z-cuFLb&J<63RQ>yzIOan&ozo#A9+o3*T6{Sg6+COn%-#RJ3z!<+)R6T2K9*c3jea+ zXT4SJ>o`rkH#{|5Y<}2bJNIOiXV}LSIX1O6A1`TM!omqhM0QheZ|G;n#R}N#WFTDK@K+ z&R4jWB~^HD>-L~?hwRMM&je*FnM*OXyHvR0+*GyJbsg0NLcSP|9>(f(6giAShDqRF z!?g-K)}6apd3y5ph1~$QNCpDg{?fc5F}vOzgTXuUVV?3PlsjmCNv|KzoV!z6`LA>>KCRmN$eGjo}Bs-^5qN~cHT`pGJbxmb+cC%O~NVx!9 zIL2a^E?>@VuO6A!9$F1%A6hNyP4Oi@-YBw3lyBAV)JI1%FWyCtlZyL;zwD#>#ViSK z-E&A+R(8Ef>{7>^yz6*+nj)Ou(8$z${xCsJ-NaH`Axw=L4pRzcpeSAx=>5_!eDB4z zPusR{Wq`&2&YkRHFzwiiVD zqH}ZIbnGQ6^*$hAs8@-2A5L!4$pkp{rw&iz>KMdZd5G*WYB=?Nm^#F|QEjXzLwSsg z)}-@J=xfaY%C72OR+=iM~>tvgF+wPjiL=X-aH zbY3V60qze`c(G8TN_%qw$;Q|%JgeZ2qaF`1`mI_&lrWyf+G*+T^g0|1a8@V}C~Q_q z>$ykKy04zjM9F$i{=ND9*|wG>32jLr5c}L5%=F2$Wk#=f#y1q~CvN;7w*ZQ0Yf@n~ zL6px%Ne!M~oi}XN2n`7mBLELBNX8=wPt{v9KCfSHFCW&lmA3UVs`uI7N+w9ZL*j{B zhVn~g7#@wLZ*?qQU*>pkQ8}Nafp+Z>t^4FWQuaIY93nr094%I}36tmCeA_6Ae_@#6{CVxzN{7oE zD*T$?L`CdQFNsN-@6sQK!w*R?{U}(uxA^DHVJqHy7BCSH)yST9wMT7{6bno)l-`c z)Vu-{fOx<^WTD`e+eKsHeo!jaqxwaj7Zwy)r+j z-X9(smLf_r8)JImi_%x@+j%l$!B5KGK+|G>1>dvD#MI+RA;Bxuu9OTSu28{IG(@cr z^gw3_mk-cUI8vLUCZVdx#D`l^HGmm4%KAKx78iU$S5Pa8@Jq~b1^4(+KD%WBo)>GyeW3)m-Ket^>Qw zRW?xjg&MGDrDR+B$^>%ybV}RI9o+iCIe9r{Xyp%U|K^;!o;9@fgZtN|p{}8)A7Ib7 zIRB3f$SbTy-Ulk9Zw>jkMlS0p2rEsI^&h2wv)z7?4TjFwGwv+vqgt^3L>(B8{w?7G z1^daYf=D&|P6lfH5Qa!KU$5ht3`Gt9d6arF}_zShQmjIftaz=E+A&Utrhs*=YGp;eY`7 zO*k;ChO64~hF&shdfC5v8#LZFXgzF`^czk3J#rLRf&VrupheV+JWU>eW={Qk@ zp)7y$0YIY@z{Oy=VHg^GdRWi^9=Qx0pid%69ZDb%$eQ>*j))8{j<7;T=mr8O7_0FZ zFVJ_%Cnn%cRG$~%o5CJ8XpSKh@EuGaqeYbYM?U8H`t7r#(Reaf1gt3pKp4iJ(iuCz zHv=B?QC(mswA9rqq~;~iSlZax&=rCh?+L#`j%E`msgFWVD4H6!fOOSr!eazghSHTO zpq9CUzFG$8&Zs|IEGx7>s>q~bnf&J-hGs3J&0!55; zJs%+Jly7}B`0A6vwPZXIOfqEMzYIpxHMQKOipe=GVnLI81~by5w|Rvcv)qA8+P60si?F>+C88Y7m6Gf6Ws5v)w3Ta@=Og;xYA zG?A_}CP!Ij?YKUl{SaltW)*(wxo7*V~oW^9E) zw90zes<*9jFq49LhAYjK#L?46UHaN3xiMJ5j2W@{*=F`L?HSXtlo_E8Y#E~-~dIq{G_ngcXS?y{#W{qw#>4WJ_;>?9HkA`X1#cgWQ z56yH1?q)Gwp25MW)T0inhE_rv^^LgdJx@3T&S~P;D`x)BiZ;TtAP8_&4tGDz28R+B zBdiJM>#&{gY}WP0_+bts@cHV%3Zpd65DW`8Hc+!c*ej`MrcX7~Xc5uF3k%+9s9#{} zGFqJhqY@e5)srHR*$SiI$*~y-H!LS9DXz2~waw5H;>X~(AZe!~%*5mg&3F!ej}#D; zKDYxKu@t_o`7;itAtz4onV3KpemAGiIFD_Slva4Rgit!~kvQWbQUq4yO%8mYxNk(p z`2ZI)S7>S{A9+k_=Ki0ErqLiP*VF@TzN8FnsF?g~t!)?8o6rHR+6~qyL#k%J+dPlH zxV8Q8=DQ3F#r3s(o$G8cA~=u@rwHO(hYAm@l2C>D+)uWL7p3x<0--vQ#qm^aB&a8HoL?s_Eq zH=Ea<_1b_Gt+o;#46iUUK@|JcX?@g>fV-fWDe^a6g)9Ip!R^)hc-4h8v*(w->~pbz zxO>^h9P)hG8DVWn;Q(Q1WT%RRb^5IJgbqJHQk?oWZDIUvWB;gUiRdw^W*biRT{1SV{bWGu z4nG!*A!kBl3ZI`WmKP_#HKvh9+QEOcX`wkUD_O-L&XVr%i90xd-3-y(4q`KOlr{1E zA((loRW|Q*g3iu@p5LCAU}?vIp8v7nL5l%T+_xB#<9&Qw!sla2l~M4cK#atP1-(`& z#fFj{6&^j)pg~DDVId9}J`+lu5r+>kKa*i;!7yh@uD5ejgr4NGS;9|?o1V`XFd^e| z!uaDRdP?MM@vq{DS9T@@*_khM)|y4`b71jtKfRAf)e|I(!dVJ=KIBaXqGA20UVujg zov2?Si!2?lN0JLE2T~L%--ZPdYJM)^T!8@tYQaNKIw*fgh6l$O$_T$-fe9f;evN!k zTnLg2s{5@_90*aL2>`{i(b>+TxGSCQ7H)Q^P$u?ocfNbz{Z$ipRygcfI5%Itq#;{- z0`wVj-ncsf1{cylymo#a{zbF|iIxum9tT<+ZoYn9Qz6Q>0C`-%gs%yr>7D^&N$fS$ zJTY%uf&dRjG;yhZ`FLtf3K_b7%^M?{2|I@5+L@|DAPxlW94L)^9H+m+l1a+^AYXvV zq_E$f2yCW)UVucx_@1F@1^~(!M`BKc!j~jV2B`B~)LCd_Nzwu!Zg{be=CXgp(OFe2 zOM?eXCrxsL0-7?|B4Lv7)GVuz-87p>biXKFhr=&Pe>;&D?sV$_F2O5_{ zM_LPya4O?ofd~`4GoX8w%isu8Z*vZ4+VG4NlWQOg8D6-y|Ezw@n*~9~t{Z?IRfMbz zIizN;@s zypKr`JNuuhBJ?ah9eM~pU}kE>fclOie({V2<_LmW3V=M{IcvKOO(su(2r(NHT*Dir zkQrLMj~I|oJ@~YrX*&9l%jP_o3Hmz^loTq|-!ScSzry`VgM)LlqH$olBp5r1Z<_}{ zl;hZkSP+V9u3UbQVdMuB}I(~SCNYqkl3RIx-e6Aw_drXOCrbE6@BpoIw%HZxH zz?T-d?w;+a7}+=|>66Eo{#ka;;df1M*Wb;b&4Vm&%cStrJ4x8si;U9XjkhpK+1WbY zQ>^r?&d#|{tow8HdnW>t>!h@2`;eHAe(7E8Q~U+yP0Ve9FAp0xh;FHg}J4u<1>nsz;lm|SZJS^7hE2-y)ml%&9clQtTDMH_dBVlUa>^%ckQeQKay>3 zfj^ya`!w@zqipmx(*O+fDGt!fOfC;Ym`s5E;#eoG{G2Ne0E+rH{jO%5Y4152pcYar zE5>>h8|kaRU$IS~edqf3c`dBonZ4avxaqPU-rS*sQ7V@Ei}0+$zIe3ww1~VI^}NgZ z#nbuH{?`lt{n)tUeeKq7(wP6GIx{ZDmXGaU`^;~^nD}47ptti=@8dk;>(2D3I6FT6 zwzs$Qq{uGY}|z1S_O zgLTPcT#71>r!d-tK_yIuZ;JM@qDy(!YN1XT_gDT+M)e@t1~VU*H}8Z?+aU=Ri2W&E zJ0S0>vABHjtB~t*t}OC|J<2$AB^!uQ*TF^mq|U((Eu?cBN{T&FtPM z6u}Sx>s~<+iNsKVPxK=62-E~U9b0RcoYb6z8{M0~Q9P;(P?UfFLWZ!wQG%V*O0*Mf zL%kyw=?iFu6cH6KAWz!u()SYZlHs8B0O!In2ZTG~8pP|898v(($$Ec-q z?Q<;6cz|BwH84i*pgn%MnKMdrleU$snFhamc-(i_$n?~f+)H!)fxwG>rTd0wQqH`* z-H)G$mRmR4tbJK^LV??jLpm2Ylsnw&S=TMZBdl_x>s`&fetltoinX<)Y0mG@b7bdy z*Ld-@trO?(lJ~?{)w^mV)o2%}R<^F3kDIjHKYOH24N&N5#Iwbe;Nr$-Y^yhUsD71>#@H_WpH) zhL3cq(Nt}nG**T}9Q~TozH9s*MLQSH%YF=+g;;)OrW0o^YdZO#i`nACE9Q&J-q0+B&Dn<*TXV`o6E{P|0+e@c9V)e_>k9);3?$~l%8c)xnwFVm14}n9 zY?>Onv)|PlZ)oQn^KwQm`5pjW$OQ*i1ZWDgRPN)gmaQF~bH@AVw}Q9OGEW&U;%;Md;F^sGLV#NGs zm?oyOR8dCCz(yEJk*pwW`!xx~B2!DvE|5_qoW5C`GZcx=Jv0$P0*^ommZFMC1SPEk z2QR3hxJa@ELFWND9=C(`5u39)-lhCclQ7#FVfN+x%&R$AmosbJjuW`-QjM*t8`*Hy zE1Isb)83IsjvO0X;N|bc3%$G!{(=tCiq519AQiXx3$U`8LS)Ziy0y~VJ}2&+%Qek5 z?-~m?#BndhHkeK9Y-hA+9l!}S8f~tlWQ`u{^AMRvo!_jh`Kb0HJz@bXxT3{)6)8GI z&EX5s1B1tayWAm?tB|j9Q|Zbqq@P6dQcQXIkUNli2CDtaB0UD-pVK3jzr8XzX}{@- z{2kUA;0^Q*Q%U4JLNZmzXMG{rIJzxs`5wOOh^f4!1BPcwsKjiJl3l3{~53jV8itb`RIma&VE>2RQ;k)((2g+zB4<@`SKtHKCt&_Q}-jY8wr#=mc34DMf zJlAwdx4sR zVce#3n^gFX?rOdd+_D_#xgsO6s|G(7NJLw-Y#(>f+F5+>y8BlWPEM$~?fUHStb0-C zsm5F7TG_dzy_C5G`=_u&N4bJ>1?5juhIfouQl+A$2<&`vqdK0(eaL3}FwLZDeIwMq zQ9`!p&$o)=T(}9kCRI}C@P0&3vD~G-RQHAcMFSlDam;SVZxsO#2Pq7FH;Zs+>G?vh ze43Kb4=ujt1miQLbn&2xdqXW&eCp6_5eQQ|KWPb+{(tG}wNwBPr4LqEmJF3Qq!U{x!!u=Lkid9By{ z^gG19OWgK)Ul@}mFS+Po!(Ls!YVL576@iAw^x?y-1cgJ5yer7OA$|-s74&7!krkQ$xG98M6#kdhu3sb z3s~5IA`27pvurFtf*WIC*SsgS8Y9?u2QzQ`PsX$wqu6r~rc3kIKlGo_FFNr;*?H#4 zVd8H2D+zs+zgzFS8aP&h926d&Vv$*Ap_&(d2|-uNi@lY1l>*A+o?g_nqgtVDz#W^V z+Z9Sfhvr%_EBW;vt0Mi!F+0#IT%;DsX35~K0`1LYLlkt2SXBMIGZDEwge<8-FObea z4%YYp9X!@Lmps8uN&+aAu3_Q(dJ{?4b_WK8h!S)R`~(csG4wY2^#H8u-BX|3U}QAA zm-hpXSYh(M>~-jgl`6ZXZ3(1EswB*t>FfdAne7kt6IThT>d97o88Yu>8R*mittWiD z3VYDd_e!g4{zNUi_&%pDbel`-ez{melHtz*v(FF*cq0e5g9pF;MrzQx|8G(emj9ND z{Qos2{6GT00C!nOIRD#-tp7dYe`!jXIG9C(4pscRnaXOiq znVYAYy0r)O0ntf`2q2(#)e+=T00F8jVTigSqG$|=idrpe6^bPnVMUCnSt%#YsZ`g8 z4xz-Pl8hWRk}WhzR!yTPtt6*;mor8T9Qn{d0H!nRmda}f)zp%c>Ocey$|^VpuF21}6f_?bDV zD!=o?Ir{;<<`SCJR@jFkR^J2h!{l3&SG6uDt97F3eY-Pn{bJ-p^lose+gwnSyFk$H z1jW;V82%9XVn9MbN)FKFG0Ai%wkmR(gGRy@MxYfR7%YTGHq%?>@q(O!+6J)C|6 z#lRQXw%3c}8)fnUjSEo(zoOkIHfRC8HssbG(^n++KZ<7g=)kH;QKZg>{> zHFZX@5oDh;-eP4zAED1{6o?Cyp@Q3rumvh&vn5i8yPN@P+O}ZVi{nz{jjMy9-bLqX zM+A7Lu=k%MY7##~!7F_5w<^8Em#fJ~gG&gpfb1Y}j_fHDMGw&$a@-oCHyNdxz;Dgc58s?)^=}XN27N^oSjQV- z6cTS2B9tEk&Y3i{h39T9GoO#%A!rr2iL-~wnJ`acac_v66^+aPu5-eW03&3V1iP|r zl3J_4D}#+q7*K0K-eb1hBe5mg7)&{&6}Xm-FTtkqrP+f(tto_kqnL|vu2k%vi-@Q9 zlp}}Y*=LAsPKS4T!8tV??IvweKNX3N#&x!0zO)Wg>^H0>)Ba@NMM=IR9LO3Rh#wrH z!#%lHy!Bfhd=(#&qo=5EKJ>4Wfwf*4kV&JV3LxwbvP_$uFqx%T84SezIi}&Urmn2x zHSwjOdM0e7b|E?I5?UWuhmiLly;OLM3NM|B5xMe$ksk28TX|zn?GPh;EUuB(h2;AS z5yd-zq}X40JC26>+~_K4)~9w*en zm`}|Js9mroxPsH=u5fk*m|5TlamaS;v_PSifDYy69_2N6NJfuKq=pDOK?abpW-2KO zNU^O8sd4n>T@9!>uk&DWsj<*z`27LRkf8w*zh; z=COA{p@YjNK@s1I1z_u@ZiK%@;#ZkVUmAsFEQ>e2|A{f>1EAaFN{L+4RV#D$f$jSq zRQYBK!Q|fg!1u}-8`g$=#t^Tc_f53#K!H>~r1uK&M6Ag7X7;+iZOZWz*Z^0X|1hu? zQ5*lqmUnE@5$5{PJ=*=Tm|126l4F1#h?~=AHg)TR+~ArO;V#S_rHU0__>)rr&`L1p z9;JsAO8@d^q%av8AT&hdi~ci_N-E`RXuPN)~XIxKzv;m)}eAG%JHc{pl7fa^>Wa?rPq+UOMQj=Eq<>)fV`b z?6Amgz1?7X*+Q$`;`1?#p6ly*2=_teg_mw#Uj-^0~~`!`SMxQ9Z+E#*Wa7fDihC8+hX~lt<_)hyoN8C@B!G zixL9Ucr00~wwulK=Qv*Tqz(rS!IDf^czWCa@<=j@RaDsh@EHUGldJJAf|MXc4+!a0 zWCPIc0fWUANe&Me7nSlNk$k^M1ka>|*>GzN_sW(h7C0$;eRFljtJ(FQy7<;;5a+aQ zrlqB&k;8UjV&!XjlZmXCkLrHo7A?nG;um7-?}^L~tm9taClk*8T9iAXP!|&dG2vhAs0;_0o5|P9}2sC?d&t;*mJ8gb0(HXhgrA zxcAot^{FQtRQ|Rfxt%jPZ~j&P3^GdVC_2!*0?RyNF*N+2ltJz3hgx@t)6F-v-|Q3J zmoWyEYt(Y&FoRrsZkLFgO5F-^e|c|<9@`#UNy$E6hqMfc6mVDsMK%U>l!UW5Vo`qm z-=ZN#0!Bwto6YDXdh({_ulpqI)Rdc92b7oW7UA|T+tFATc-svU9G`wZnf8LO<#v_# z2mD-Wb_Zf#klG>bL9Yru_k##@-^a_Ku=Lng|EZC{DUswW2&5~V{qSt`H<)}>8zP{7 zo>-B6uDoX$Xq|iZ4xWi3KPMs|qAviKA+!gX*-<+OCHaOq&dU`pLy(w78Z$vtQUcxv zZf}xsO%{7zVr0A!Bi%9zVUggVk=n{_1k@%3F^fDy!zt*37_9Lz>IqRPJIIX*_WQ|z z9f&a1J;Gneqr5jO+><$bUkp-~gppNjT|i1m&lz}faBa z0S=No@cUX9BK9ot`YJMsn)zco5!%=P>{LZ-Er8dQ9+MYN|xITO$Tz3^1nlUD%ZGbpfZk8ZhSyrE1^OTLUaNf5aKMUp@f z2h{9%VZTREKDYXk)2NClAr*LexE-tjc8W?1TMmFP9)K^2u|Vr3;y{JUD!XRef$9gl z0ou?!d;AFGc*-e#2^=P=xPdB2L=}&10(%JLsg;g0Z5{Bqx-v0*Q669~5a`+thO5)b zQG>6((lEE5t8)3@pQPtYSBk|uXnfyh-|rXll+1}$DK@v7(}#*`{`IL8>ZCvF{Chli z4|eRoQ>(uNJ&)*R-$A>vK)tX+4zYWA=JSZZY6s6%_u=iTy-8P4FOn<;ibg^Vq}8*k zwYyz82JHJ3*h;+20#2G(r=!uw;?ryV@*et}F^l$RUEj)Mt5>L zQC4>~X=%{NxClGD3O~Z{-Nr=KR(UsK-uYyW`*8gAs=biSo>61kwZsu4iX9A2fv6DY zCCw331b1ScHqpa4xQM3rhD$>R(0q|S9@ks!7Wv4t1L+e{QkjnTeKtI(^1VJ@?FhA3 z3M)cT9?5?bFsO8fPW$Kljc|U5rg0Udnjd-->hti6i47^n$CeyVWNL*xzXN`qv#5LD^$%j~D>Ox|n-KS_Q(O)2Jms5N zeth$Qa`>Y?s{vMvwTYI+>veEEUX#YZzg<}}+gH6Ni<-uB zG7yb(3{-ZTwSb8ifX~@yQN)!saRk|}@#okVxVW4KsCR&Z7fu+mf~6BF-D-fKAAF&X zG@=AUdgeo{v_#-!MPNS!l9HMM1nh(kfTdrF9Lxm^!x$_U1sL^^k1nbIosknlIn#_ z4hc#wz=*6^IxMoGNMh%CC8}{ke@OSs$zt6nF{a&MP)RiL{edO@QOe>*7)i7u=i>rgy`x#=>>gJ7 z36UuXeTeeD04f1`XcZgtqz(yCz3|m-ZLS6iXyluZFClA-BRx5CY z39yaimLf2duL|>&st#$sD6&CG$8rD)7BUxVPxdKO0MjlQxcs4)hVAD&96HvslC%q~ zj?^xW1P~$68XaOeu<1uoiDV)95D~Iz?ISk=5q~b8*d-F=ptD<(-q>wp_IBH{K^&?P zzh3y{bNBA%TRoH1db4*rffNfIqSGv7;Y>vS)hB{nl_%r_Je;$WWwPJwG&>yDY-8_! zG?bp6q;AhO=?rpmXuL~!$XTlM4G40GYnE4qY`7!ugs)OrY3dX+)+7w8;ix{-lxoC5VWQll1D3+8%u3@N5^y4GHX-LgxaN>!62*N%+^$x< z+B|QV?14u0>X9(j=Mj<-fs;P`RqSz0VLiRy?Spd^)QfmT79sL5>)- z_m@YB7)(}!Cf2?(4f>?2ExG&3jh)g^eOd76x+O#N+j;z)jI*}#N%IgPTvK?h4R~hW!FjmG_n~0(w`Ed ziyJe56k`?O`A6b4EXkfvr$qM$BE81|gM9Y*1S%9jn8gjAh3^$&uo%&^lW-$#syNYv zPZfi{_(B|e1S3k3F=sL*e*KHaFo#24onm?=72^aOT^eYD5N`{zJ9{d;{11QRG=y{VTnay`wyJ@n!`` z5W0)MA29VhiW)$oN2L?HDUFR$Eeoq%7};Q+R|KB~ zD7O%7w)b3?V%mXnAMD6ZjXgnZWNO4njX~4wGwvTqjgE&M?@`>WWO$MfFP8kYDjg|q z^|+6(H#3v#e7~#oIDTgP#^;p8VtWp2=&=s3Lp{kkAE~?g?tWh+RH>>0VW<*Jm5zw< zcJ__qt(qIA7kzO_0C-gGlxUTPR4LH^xVrYafxqW+(|bQ_k3T@+L{6KVhpwEn`k!yC ztG2^li=nXEE&q<+2%RG`zwPE`3pPCX?FP`e>}rgkyBV)ku3eu|VR^{0VfeFgM-gFo z|6|&Z>VjWJ8aA)})W8fMt}fRQB-?P!Tl#`5LbXP*P0S1z6-C|R5sRLG>^iW)YlipN zfAIAU!J;JI@wI=x&4Qy=MdFs}nk*tiz|) zkZG13egb%rFV{;tf~5K)@m(6O!F0-MEL1!1Bg*knyx@d^VHei-L0^Ny|H;A->%Z%EDXqPF;PSO8>Yx#!eT(hd5$dRd0472 zQ#NC9oA;$KsrC7Ib@X|2C0vnf100huz8-eLZfUaCY^eKs*K>kLp;>2po0F-FQOS9G zJz!GdI@oASgtqJP+3U~QR-kpG+7c3s9vZslqps@y;mr(pQSUEnIOfeirl9OWAnj2X z%iR`60Q}PAjEoVIq0P6@^_+{nlJbdb+YhEqW>H#&_DfR7Ag*&W|Mnhzkiu1ODeCfB zRC?<1Oy^o=isD*sziQKavPSXo%2ro@=1tl_>`j4ueH?`z;s`7>8g&=-#mPcyGvXd& z(N`E1Sun|hL~(7Z@CtlqRPnM{+A!ZE?jbJ?+!d4TRX(9#qKV|&9o zs(`-5F>pApBvOHr|EK~$j5h?>D+KuCj4tR8@h|287@w-bW|iWxbvf*;j@&e#n#g`T z>GX`V8VqJ~{5IyLP#~GWnfV1ZJd^m%DL^ncaWV>RSbR;JV`Y>E8Glhi5#iM_7l9b; z0;p)uIF(+TEj#jL1d5`)Zk{>5AcJUnj)o-3yGXsvijXRpv`&J}Sl(@UDS+=af)SMJ zhAM*9?Qi#1#jS{mtsHAgovZ}#_6y)mJq8?7bSNzV;#=w+H3unwUVyMrb++%#{8xMW zk$OZtz@8!ZQ}C(rIq+t>htqcV^TZCNU%%SzG~TEEOp(&zMHrwhi_Z--E8aifJq$GS zr{xDu6fDB?&&Vm(c|=Fb(MlmSJB!d%v$VY|He!2Gd)36Z;m3jD{j)Hdp$ExqvA&&5 z9JUfKAgicVuM0@z>TP|xumBiML-u0gTS&pc)Lf}pq{rXh5Wy554L%J$4LJ=v4Y7^5 zrn%;-W__|ARVC`m`Ld+dlhsjEDB4f5e{yf~Z-tT^n@m8HM`NJi&MSrREzp{i_pDKg z=QYZMsKH@V@KJVn8F(jGBt0SFaXwG%D-P1I& zYL7$!_3QJK>zA(K%MWL8g}LwR-fjP=q{WRWhAZdAkzqwS{R{ln| zKBwVES_tQh-oKJJy&LjRIW8g|iQVp8G*}OjOHj&-O(?FtT%x(8aaiAU2l*<0!Xq;>=ZZ@fa6}j zW(0PN_lMpb4*1fh3Sfy3E-hLGJw-_hu z6g!PYTLuwWlda(%w2HkFu(I%CrQ0KYP9Q3MwMQZ1#5_l|hm6SX@P%9A<*k*hE z$#kxcBtnl`_iYzlad|tZ^I?4x*n51gwbd)4Snk*JZ!~;%-IbNa939s(n+n*KUY}X` z_)z-Xb>Qn$f^!14VjMxzLB=w0gwVVtIZ36!cpBgG*DSG8Z8~hF*$29#K@UniT=^^O z?2p`g9Dlx|(6@VLMHi}WnU0jDX1ejH*L`=nTWUe&<}Di$zP|;!o274skiV%ptc+o#`W3_5tFk!QgTHTjvD;?vdk!IrbSt;1R>jg^l)w z+8Z&44>M>tA`lIq<`=3PL9vO7BPuyd%!3#uCl<`GN;6HzOFlNhIz=97lTe&cg^+lr z7+|(2suO(i>zQGk(SSQNTEHOnAK80=unDFP${>-BDjjj$BULMw#;Q43i6i%f>QQ|1 z>k@$nZgTVB7xV1aEqwU4|2#4rE$^Ad;D7%PD#7TtT| zK3X253&?2fV+fY=i38$Pokiy<$-nUX%^ctmn~pIzllrRp@kKws!1XW~XC{giOEgIQ zJ0z4U6s=c`|7iNei;d%{X#15JZF}O0xsS*`_q8*_u4Ce)r4k#3E#(NycNBAsZOIX6 zya<}|%>(O06NueQ#r-otccFL3b^M^!p+E;M^c5suO8sizJ&MMx@Qilp6R^<#{(@4K za<1ydGYX)pN>K)n41y&_CMc?60$#vy&=ei&V}UOD!S6V5_p~6DK_;`_et1^%XKjk< zWU2LJ+WOkvedI_^3tRKt)z{U-YvR&I@5@Ht`Whh`r-sZjXPe$=Q1xb`RYuDZwB@yy2+7(ed~@e6XR`UhVc9K==;`ZX;sX) zlA!j%NGP-fH_}Sq+&>qV<>MOml3m z4d0igmBhsJM9x*Em4*4&<2~GxCT29*MgP_c}^mV_pnum;um+ZpJ;7-KGGgD3`=zbc1sv$ zGz>rM&pPxI)DxG*iV5aTW$+Q`ZOCn@&KIwrsm`f>Emcj;f zwZlv6|2zJS&P{huMD9hJgJ^~e4-zn~i}akKm>NMNA;9yL@UcGm_OtO(IfSwv zBgC9o838@;Ee~@?<}3^YG4B5?4ihpu=&q{^qD|*T!ICF#6i0PEZhX;N7$IZ*`6kWp zc~}|H0UrhjKSGi$7aR0&qg9UG0ZR6s5lN-}3C_n+Pf4J}|q0bUVK1Q0`tMC*gX9`|Q~Eyevl zkA+Ukw?u(%;3x%K9_b_hqta&}6w+0DzLo`DO}p9vGcBu5Q6P;$0|?O|PgF@B)Kmmu z!k}dl#1LW!OwM9o9l{a;U`tZj(C5pxOJg!)98B6_m2pmquEx9?nliMCgp3q#9g%L0 znFRX;>ry>`uC663qmfC|RX(mNuC}xRrSnwXZbEC8nR%wE$XPL`s;Z#bu&QE5Rpqos zX=U9M6;Vz(VJ++CVqpS{k0EY>SdcK!4t!dg_Y;B+E3IH5(`6Id0cOgmzYaSb#<+Q1 z^n(`cXEZ@gy5|`iks(2Yc$gV1IsmMu<5SczoQ#pe?1^s-zbPP3G0PRFFr8e+X*2tH zLr}P>16*$d@Qh z@U(uo)zi&LC#_;rr)3pY?I3Vu?Th?&_3wykk4?rSW)l~BgC4qiEH+J8)1u9w>#b4wXDrmb@Whl0Um7?-T8`NVKvU4SbUi<;xc z=$ms~Pg~Q^778wSf2zW^>UR3Xtm$&@sA<Ys^{|y#e_^?S`rkr z%M{YbI~&wDRG<*Hs2Ly6a{Z{!6M9>S0A)B~)7ci`)i3Un*13lLzdx)aPZVX8B0LY8 zN0yZ>O5-{oy&lg@IYx`my3=)Zez4bnmv3Nn9Z^HcuQ~t|Klyl-NvC_B)tGLpjd`yj z&yiojYA!07DNB|~XMH(u@0@eLMHng^EkVdjuJOW)$%;}esmbtJP>25NH$vG|SL?yh zm@F5pSA&n}zb*bKWxtQGp8!BpnQ*ovgYL+U@p}gyIg()+v2>}``6TTiFI_Z392!2V z!24gMmEAN+$LzpN6VlRbw}F}Ka~zD1J&SD<(1||Z^SFcS+>EvV{#Kc%tW5zAQ^W@^ zH$F{l7Qb6_Lrm_f&Y(eUbI=5*sN=aN`%;a{L=jcBo9OR%HH&ZGm@@si?cwSttSDMj zg&i9@N;kLgJ=tVL%hc_U395Uqi=czy!;T z5xP((L+Qhdo$3R|T&>@)J&1MP85JVwG0f&3b)9O8N(yKL2{HG((feaz9fr)<=VOA; z)ZoX~@-wLY2^#h(kPT_lbZ3{4KDc9@4y=(BgWk*ueToJs{b~K#z)UF3QCkZgXSKZW z`g2_xrNMinK;|OWCImq|z@|=n=|xoqT%-e&(yb*26qQ&icSn8IhR0macts*bjTpxt zwQz-$VFr)#tiab$fZxhj7M#7)2Djv2b<&E?nJZFe&7u~Z35X%m2C`t`j%$CivLIK0 z)YS$L)27{3%chLDjR%~PQm91(${~~T$LwhUHl2r1aw}351Q<}QsEjbf5_6=Ra}2Yl zO;yJ4S!mGfZF_-9WD|-c!IOR}btgq4f3(@HBYzB2DNNfXz+Z7&aW~TX@h4B43eqBb zoJqsHLw~=cK(X+C@=8ZzRgNklt+RC7P$Mj5nmuj4BC9XcJr{OyI;(OZ$N=hqE<%Db zrHU4a!?f=`a~pFB*9oI0fn}|nUZq3LhOi~anT!dy%=8AdQX^fah-nS>Q1A&s(hm>4 z9BjVn;n0`yV!=1Ncx$YyecDX**`{pLv^#Z3wTMXv{YjD_OSp@da__7E#2q% zMUhp$8<+3C@fy*m|mqq7^Q17jKrBIw{Sf)}#As7vJj>RiII{zWx-x`CwYw zhpA88cZHj9V6&MgK_1m8Xi1%@!JUU+fVrsrNQ2|*ey4q2q;^|1WtYcGq%J2oU~RT< ze^<(pDg&Kw)SL@w-Zbz+(L8Cnm;+ZtevrFaVyW#EDr7PWu3eho_~c0J{Cn<(Zi20G zYqO5fR=GZ6aA@}1yE4n9ezD0uDyM2Hi}l)R8z<^{A)5I4-q6^7EGo#K;oHFaS>L zk{1_SCP_v9@WkrN>R06!%lQav1KouzsSQ1+J_HQDk`r&nq4TT-BsJ1(R`xnY)K_dum~mXGvsRUIGwA z-#B&NINz#kejgT*(l&v07EN+MO(ixdozyv~Ec9M18FyshrqnsqJvPKCRUL#lWeLP` z11`<%ppE+Hsb-!tx1z4RF`B@!{hSJYg`N>j zjb%x7aY1HLP-+4|oM&qzp(wT^)K}0bP;3irp`%ai^%i4A@R_ahkit1HTKvb*!tL#w`m-7=RZLk z5FUBbkPLB-(PvIdIA!0FPKhN=a;M)S@SVITa>(TL0>q{;cL< ztP)ZC!`@b;GRIe+^eQ(sg&EWGf^fF`16Y1g z0cde&l_aJ7V$-$yhlg+*k+-#>h6U&bYYvg-!2VASjx>$5=FvyO)|kkqscDMrbiRgF zFe<2phwzit`v#jc4=3vdr+Y>t8x0cB5DgKL=1)Pb>Bzv%OzPB$v5ZVECMGhwa2nv} zqa*YUM<>%m6yVu??`9R?qy!b=fT>Z+Om0-$1tv#Fr|^@(^?Il92l7d4fOK0baXRYh zG;Sugu31(3hFbg{a%g>Hpw-UI&P&1Gcorh)Q~>^j2k2vzW9c+a9O#U21IA@l?bPfv z7NRbDPwFCiJayW}IuZwdlHOXAsr-zH;^LFzbwOw79G$w$mHrTXyq*jW=SE}#8e>|*016V&39;q`E+ zdeW0wz)^-0dMif;Ey#Lsi9<$5vXc{3lPxY}QvED&P;z5SG$BBk!hxQ#NXB7b+*+wU zloNEcmv~055^}2LWZhIHVTn=NNpQz9UIXwW2h!05N;%SEE{88Uu)8zE5N~RYo9&ibLUN!Ia{SqYL6~kC0h2G zmo~Z!yDFqD;O4FShimcmC`pRyfQkU8`fo*5Y1E1#%iLJu&&rQuZVby5nUtJb>t|V8L(tES=mvTTd#{ zrZp+s%Dvv^U$pL2p>F$Iw)`O7Lw+TF?!WZ{gJ108dO+f+ zxW;l&9W@AUx-Q5%OJd!=M!A09e4mniN)Y&MS|WU(if!x4e8)<1?iDj7X)BIu*^T#W zL3t>VqNCn>g=o8v5^7@zeh=hy=EbhK#Xo3W_IreM7RNeOj8#B+h!D_G9bVef?L`X8 zQXM7=>MD*(_`A)gWYWh+@BBgMM7i%kKY{MylJ#v#_PcA=)KS3r6)uSzwjUnNi7yAYE)+YFT1&j2|F}9tP7SbhfXl8n^ly<2w zdf`HN1$374Bs^u1+6@!cJN_nVITO}5gAhvSPh1(3xb)4`A&bLF* zH$PTv_dD+3(16PV(4es}!KU|$Rj+=DKiwdIO`_R2!-S9uwO*TG0%d+x9|fyR z!iY;W+U*sL$bx-rMN6V9s77h@cfGI5-;QE&`x|1GrGb!iLPefTWeQ^pLXG^`abZP= z2x?y0anyaqze)rq5&gl8A=HAV1_~GyDx-oS)bgWWPO$x7q>MWf*Ir4JK^Y$1#?=A- zA}O!&Yfx!Lv1tSX{gc9qm9c~&D3piWONIOdZ{5Ul1WdQ$2BCtEF$re_V~v^o2J7na zOly>fAn|1y0sYD$(g7V5vhlEPYa_+!EUChLqHLq$@pNfI_V!h~kb3ca8)(c0p$l0X_=b~5obHmc( zc;o+D_<(j885>o{Gbp6PT$@&CtTT;3xDYa=XybZAd|3@aglYp<-8Ld)&@M+Ph~0z2 zERHp|GklprxYRH%W&5WnUf9xtP!b(QWr(Mw;+L`52qwvDj4c-9Y#(J(ujm4 z9Egfk7|S050ubzPy??`|csqmd+ilusM|{VEjHiBbAXQnrQ;q;_Z##x>+N<0KkX~@q{~15S*5Z&$OKmm>Gp=T;ho0raNZ)9`zL%S^>i zIKm5kq+dymU+K!zUFc6Jf`#CyF^uGQ?~2m#Y*9{k*cX@KC+R(|pek2q1frk1?(S)G`#d7_7 zTwCuug5YNf#Dkp^9X=p|LG>*xzj`_M7*}b^1aM*~^`E(0oDsj^@|rKE_bW3TL44S} zXk9sgf8w34GDdMUulA}KeyyN;@Uh9!`)#dAd?E1pCkQ3FYWCRc!LIQy`o^4_BKB5u zq}zX~<}T>-8 zHtF|!2}X9mWFJvHasP@s?CZ#B0Gz;;&Vqv_uYW*898$u3ydL6VMdWuATdYeSD4dG2kqPx z{0xDPlHSX7B6XFX9l<%(+-j{hA)9LNu{vl7|wQCIgsocrsn2l7e&9yF#n!y8`6{ z=EZyyNDi#Wl(d!~_fo8!KkdV_CC)U?JNuqm(D5)qJCO!J4#+c zhQFj=S6R2N5VK5%@(T%g1j9qc2%?$f8K%VfAzJ7TYUX7e#2swDO*qA#eI7leT-;9` z9hW;gdBlnpKr)&co z!87LLwM%o-V5rVomA@+bpr)t8N{i8DK%bxBrwHT>Ar_L5>m%Sq&~eNNxMfXL9zmpt zK$MK&EIZ&-15ufz1*Y2qF!DbF22a-*uf`z*VVHa^$RhQ|Hh?E@L84uJI zIzz*HJ9Ok>qAFzTDpCe?k;zfhotxb@R+nlxQBk6%vyR$dLEoAOl(G+`En8lqHe*;v zuwIEKqY2Bnb?v%~^A@tO{;T1VapZOqQ_I;r8Fjv&Uq~p9 z5@i@=AuoT8Cb!>qW1Fm2KpUExs(B@v7Urp>kD>z4mUcKQY>ClZ5K-z+?G5Z%vy)cy z5ZBGR&wJq~*V|4$9!N{i4&L_MTt93Lhu7gqkMrXAPlLnTdUS@`Oqtd*-H6|F-=~Lr z^vp&>o&sfFJK>U>=wsysi8)A??#P9Uu-&XvDig+II<-x5FSI62A&i-@Xk?^{X8@6A ze!$}#7VNG~(O=B^*aMa&hlrV?#{%Ak@)r7U<@8vY50G>j=y7q(oe7C|gD&}A)HCZ) zEbXeZgTVEwc3q(y2ZWtIlHfn-KJI*ObZuchV(htVB~60EsRRPYg3+;#z_cTq&0Rg% zcLv`QZ!2VYaehSFua__{L3J6gNor<@3*?og=1i~4;7PhM<+EF~VX{Ht<4}%~Sit90 zvyW*LxyLeB72NvK=$kgeNlMTV6q8`=O(uh;Wo4oGKCt_Xkn0K}bY<7fI%VMSR6pn1 z4JS#yOz6}3r@*-%el(=Y&mRsEO{)sH0>K_mqXH0`f8-? zliIv};aa;qzdJ#XoGggd%Oe4F;XwEKUc4H}rdgC=NA2C*^ zuFzQk+A5#4%E6X8Ln1GE1X{mJiDo#Apf2Fzo$NcN!q6-a5fp_JX>UquprJ@{Yr*48 z381+&hZVLQYcw$dmzL73yxV8*p>D6YdwVQ;da8U@Xu82PtKk=B>ql~E+mD<7kV`JG zOMO^@qB8*ECFcR?}IVfAqi87704 z9>^GGYuK6eSa?51$)mFAX_GZ>PHq^lkEQ1_y|d{$X_@GW-RUdxdnKC2Ti6@eiJi9j zNR%2Z{1Y0&WVXNN4mCZ%HgPka1GD|q6k5cdh_mUz_4+_jO12pNW}aPvfhnzFjFA!Q z6wm1`PJeRPui96f%D1ds)w^B<*H}>F~>%?T*p$Xr8`p-%+A=m-Ll3~&^oG~Uy&{A z+!y~FQ}Ih3C2H?`ABEcBlNXhRDzURXurkz@fQLCtUgw>!=SfH!72&FKQ0_^m++lSC znLf4Ydoq=WJ6N}TKZ>i_tKZ$;*fM_SX}lg6YRxmAxi3dKUzbBPL=C?p4c3Qi3w~d> zXJ$uahkid(iDm2^%e=QqdC{!aBN(o&5v-nJYr{BwZ2@ld*vsuuPLrI0wWQ{}`qKT= zgP~~ip3HhW!xl{;k+~IZ8vpn~88)cqaGLJm-hAY=MnvCyv^7}kpW=)*xr|sg$MSaj zbc{M!lIz4eJpF*4f#*I2rgRI1)@qp=u%6ZpoW%!VFOazz^fUY)H8>V67Oj|X>A3pT z?G}%MaH!a!pP}u0W?1&V72v{-B3fb8#%}JkL|=3}NBg|vf91W96H(Yh4~3KYkyuA zbr7Qeg!OMgciseRm+|Yl$T2P}_-b80%e=e5lr?)AK@TUCkzu&M3ophSKN*Izx4XWt+Tvgh^Kv@T z+^MeP_)I>mUtTIp1>Aa2$byFAnr0{$a5{Y#aQX)ZyI`rfsLqsM{Ix8h;3Re$P!oN1 z+>)6qP;mHXv4nh-B^OBfY%l)~dCq>iWraAAGWCJmN6PTwN}WqiOXe=@eR%>5A z;>#qr0Q4q-(iY~7s!7&FX-DK$%a^+px*uZ)}^*=?|or+DlOvOibep=Z;fIaS&3zQO%-i1vLzd7*@Yp zsh4kX5d)SjOVU*oWfWBu6^Leuav8Q){beQ{kp)`XGA74pD}BxV(7hmsK}&KqH*lYB zK{uyDc)Ib^VP7@2*BkBUyXVMZelFk5KjU<5p~q7-dW(C+$>(HnUt2pWs)miV1`c2O zL#Q50BhPqTI$+KJ0{M<1#PIo!TcJX5Y-lk>O})h_c$`%jkB+3ZlV}HMpX-%m5Gpi- zPPZdfh_5j_wYE1pkN0oHa^n0#r9z1A`E+qQ>c@TVHh%i=(C?=3AILX0tkW_R9C&z* z3*TB1kP?m#OOYU_?=lO`%t>VCGs4dcTFcA2e1NMeOyEPJziGBdy10(9p|*ciuBT_B zac|Cf;2F;_YjKUwX9?990;aflmQ?2qWkW&P@9*6K=h+_@`;^&=PmU%JmO{fn9jS^% z{-p59xyF3)tZ-uOuMhhU+P%H4CcpSj{}CB)3(zVl$@A5^-rvb%e3pRhs(Z{TQJk5( zJ?-f4Sg+!*fT3i;G6^|C@;t_XoydW@p(KlqNFRBA9vb@W%E_?;%vKtq^h-Dp;vpjO=|0tbSbk5tb7G*niBe;X`;a=D#_*-kmY65 zv$2XxgRZavrret@zp~!aTdQ547I+x11~i+zIAv2I4QXaj##69ys%<+}-T;{z+_KCF zdoHll;tzQxYN`@g(r#W~&WEbju)&rGZqc$aJ5h7GDZj!&q4t7c3H&iKhZs_TcoH}y zjf3Et#Z?BDBP$QGqHSys5EP#9C;f+HKhoFiiz4cJY9or6TN9Fu{WL%#=w0MavYG)R z2YGBAwgVu4u7KRw3>4O64nXedzYMSaj!^_*Gp+|hi})G^D8qIO3z!A*P=LQOGmP(t zT~L?jUP_mWV)nTBce=g3&G03*l{!(H_#mFo8a;!ErzyXqNAFRwJoq#TNzuClrF4l+ zLhH*4d@wtgZ=Q@q*iRct2$6wxb_?$u5qPea4+RhqInI?a6UB&X_wQ_ZW&PQs7?PnC zGZ4>2ZU>%!zRBEoZ;BJb2$}RT$#)TZrOC6L|5E;BvFvTXHZwd}p*tZ;)Zgj#wg*xu z$$t`%X*?PbNdh91-MFK=tWuEvg;>-S_FZ!j?1Yfl0@UL1yZc~={#3d5t8mwNkleD6l{@uopejwez(rdTRCiIDCza41T-}PrE^UKl$@NOz}FONLfPVs3NS_ zW()|Xs#{<_3b&sr26^c&^u7keHr$h_+XAelWu8wA6o_a^fWsvzQIZxG;bBSU4NTe! zq4fR7Ba6z4#KHkqicj``MMCnWVl2;4W{8Ct80bFvmj(!liyh@0au=aoN#co<|4D+V z84F8*KHy|w>(77;ECD-xmitP=Jo77uVx|ydORSZkYkpbc%!nJ|r0_?;4&?-E%kO7O z;1o4dz%*b$G-SlflOY?r zrK1!-50LW}1-N>x&1Y`mY{Js`l)7zswj$V9eUMS~`B_xL0PDX~2@WTHy3Br%bIFH^>A8_1dlRdY`bK2g#q*{{_q zjK_s|q+R_9;L60Y)m`5gHGFq5Op**X!PA<|H-U0$K%8ME%hzI4`7_3oR$Z+4kGbQ{ zF4cIJvZ^=A)RijplpTLyKQT?LVoTq7C$r~&0$M1h5C%3T$^njaxcU^?(xq$|6Nm9k z*U$~yGRw_TycDZEC1U~;*O_DY9wtkrs`Qk@4Ql{*_st#@u|P2t&uhd(S>FAlEs>Q! z_Ayx&XY$4VZ6!vIJxh3($)>T;(i8N5PKvDv*&7ifAIUUNJkhVK^t?29 zdf-jXpTH+Sp8!quk|41VKT&_!k2tWlP}-OI^nfOH|FDNiq~r%h7uZSF35#&>WT7LH~> zo7>oJk$Xz5r=Jh`P0;gowNXF$J+?^oS@6P z4C6z1dD2N=kG7qj+w$*iXiD_d9du&YWwsb+V-9OrYHu$@Z`=#`QGT1ytHiFtzZ=$l zt_`;_d+ZjVMOO68q*E)e1vDEsDSFyGIGg2Gc7tlwRyl43tihYw?UXxQMBqH=+o23u zfraTGg>lvGG3Yndk^Hh% zj;(@0Bc_EWg{G>0rGH)|q?(MC8>7yJ**dU_JeJaJX;-9{dBzY!eAOZQfGzJEsRj)W zH!Wq`HqsyMSt4sERrS$F`C$reX*FC6s_N7CEh-}2q(uFSzS;%DW?oop!XL%=&S!Zt-XBJipS=n>^7sl1wi-&ykuLZOHQF zw@{+k*}`nw6^mvjQ&@Zt#@Bn*EsjO9zdqivvv@63wl%&+?(~AK|KV&xmnwcEnfOGM zzMTeBuRw9Ih-7A7kTC59Nvbwy&7Z}PmQvsI*sukZl-wH4V%I1r!%Hx{>RBU>X?#`K z&Xo5KTiV$86D?7)|5~WDl=6mOG?B8#H~slXX-1jA)Sx}5Qsr%U;iSPKLmrx3uctqu zlNZ+~QETAjIZvXQ30DkPo~PPdqJZ%Ug2oK*;B-Xp9gyW~PdPI#mbgyqJO*xgG2E}e zWL~q&*ZW?R;u;-w`V7ADeU0sN;o|30u5F)qjKH6q^x)ec<$0v#-`w_?_TxJo1uh)P zYKdGfoTLM!@zc;(Tp>zrM3;j+ZgD{W9q$+|X+b_8Bk^#dI}oXGM?$VW`8>FyCjfJi zG#JTKM{!RH8CEnP2Z=aX02hWtIB{<;>Lf8LOD{G4JMuqsxl#E0-asB;1B&=ZGK%bN zdA?P5u%l7ZzgctJhxn_V`Jn{=r0U$6>1T-;SOXBq(av$jC1D1FAzg13<$n162{B7Si9?5F5=#Yn9TX&9$Y)cfoVv0F_m~B=RZP z^|1>=Wy_0=0>OgjZcoVM*&g8riSXqOk%1K$5St?Y1zcAt%EdpEvtEbA7D7D<69phF z5zXbUeCUtv{Mn*qfK4Pf1eg~<_($3Y3t5!nNy3T?IG&mc@h(tiE7642>yQ5;H_L<- z(E2xG&s@8`dfm{Gob>5kK)wpda^HNFPxvjYAVA*kFIajHA7malto}JXNa}I;nYr)V zfxlJm4xU*ckRstCx&i(BdzfJ#NR}|s;tsGhlCvn3oMAmN$v#kc-{%)53@L-cNl|U2 z6Ug7VZvqBpf<=L%R^cCT08uGyNK5JS4CQcf1h@G7UVUa<@xQ2N+LgKWO2CGoGFwol zthcfe=}cQl#>hvU0KU1B)-j>;y@h`yMzQAbA_T(UIzC7^b5G$j$v8+)<-!I0fY>GD z{<#7=93bK%fD;0u+7Au3E9RNI6U~t3e=#?tU6dAl8uC@)$I?;sr}mg-^uVJ8X-5h# zJRQivS3>6Jnga@#^`r!9o*|~Rw7d;YKOc3w*w%l_W8XI##CaGZ;*>b}mc>lUGNd3npsx&XFX zw{~Ii$RJtEqn;nqXJc)5@mQ$~{D(gU2@p=>%z%&|knPjTcr^9hCYSc;!0P3FUVfRy z&GRyUV`Ec-fcm8wSo>TqRlr3X__=V}O6g7!Z?1br3|xM0tvpZ$*A1HfvXGuv40`Tp zZH{Otp1FDHP<5P$sz~yyv7uBY93c2M9D=xdek2`XCRW4xNP%+G-Eod&tvXpxlNZ0; zfJJfKPQL?0gu&bXxgw5QO8FR;JVnCYNRcp%YWb{dnO`ZI`GGT!k+@*owmElY z`Sj#Ug0=Y4Y~kuiDmee0d1sC4;?K^fngaL+s9n%TpKCPWGf#E04|bHm&ftwV+qYe5 zbl+@qED^|&y_gL(hEpjECV_M4#(`uvc|wEP*n`>FOLe?ot7Nv9Ysl@U#{DIf7{y8pKZWSj&vI*M>_J-}_%J_Vz&TeNwUR zBa~=sq8-P0yYWN2>i7Y*F*f6Sd)&7RN=8NTZ%NW05mNZ^!&vE1k_7tB2yXjXLT-H` z@EbNraGFD33jW9Wa@NIhMueIzvYu=cSPQG zKAUZfsXDEBqy($2REQy*0s-g2W4Zy(Kqb10gc;-fr9F-3X^?+t>qSU2fQ=Wb&-P41a8yBO9I^0Hb8D5G`0+oR5!%K{xwb% zRl9MtFry*4!D*Zmvt^9M z4{`J(rBQc};Zsi&uwjY|`2@_;3!bB62EPL-_Jrvf<40(J_JfA>_lFn*`fJIHAJ0&s z9M=#&9BT%9gcw(cu%DnnO#`F>4>&^4PBi<2s@AzWI33OTnZ zgu+#+7-goPY7|toAV5{35e!L4jCcsX&-e%Nwa=}{Iz*U=nxN>OI9>=ME}3au9wJRK zjb7XvbQ~H@N6QF3^j4_er(8IN8a`S0*HCi=T~oY|(h%6S8PQNjoEln!mlpNDCZ3y& zAtN*Jjgq0SbWFn0X&Jh$LmaO2sFG~0m$V}h1GX)&E)m1=AMSgThNwV>RAYFkMy^3} zoUsC|OQ+~8Bo@zHW?%I}XD(4cW~8$nZZF|1UIwk(G^w z`M*FD7#LVtIR5t)ze_URm6zI1HNCEQVt5iJnIH)u*AfiwV+n#lAcPYkiTUw~2_Pl- z?B~7Bt&WFhOK9L_g0dhEh z-b)|n*LKW^g0F5p^2!?8zFy!z-%tcM>GZwLoV4T?f;$_UAmWlBIM|v%d;r@j&JBX= z{a_E6G;@VAC)yCl83uk+-}7ncAfJWHEiY_dFpCXA58cs6u^D2zYixJR2di`V%mY^N zF_uC1;+_?J_QfqqA6KtEvrA}D7E{gTYGCXSVDPIH#6!v5N}PYJJU(}@=`Q4>M^R#D zR60AAyv6J(*Y}lWFnp$8MzkTB zYkvV=7hF!k?U`8DCYm$SP47tF4Lw$HcFSzV?N%?BJl;CI9X<52$1I0)aMjk|W_xS} zKD8*gJkm!nKP=B3{x18QfNX?z?5>DxQLeclb5QP>f*b&1OcKIqgDbI=Ho-@RUiR^= zNLEJ~e-pg*u$y1;-(azR4eI{Omo^E23ya|nQ#Ahc5scT##*Z)GDfKm45D7tu%LVIn~}rzODeM(}sm z`=j2Mf?CEfX>bkv*UEqyQG*o6pv9Q{v3}Zm^j#(je;8X)FJ{x~e;*hj;*gXeubBNL zjj(*MjrdolC<3F=*-H?=OD-Lyj*T)asO={^8U^0Z97l{_QvXk3_ZXu|*tQ9{ZB2XH zwr$(CZClf}ZQHi}w2f)o)3&zXMRqq|viq;@q>@T1smh(I^E@tfKy^xNL8UP?uhMr4 zwJN+%X8lKcykB&?%a}*n{pT#U&!0wbN7W#g%dG`uG^?{8Q@6^}pUgMN?v$Q30}diw z>#)Zs$^oidI%?EA=7U?}9$^JK1t*TDY(}U1SH`RkkF#Us^nQIi4!SsO90W0m?G31B z9oubEUofjD)B)WqeYdKyD6~Z&yW(PCCQ3^o8St;5bPGOa533cL3mSiB4@VgEh7mhi zM>FTe>G4r*`meLnbx3LqLpufIlpQQDjjyB6J9_-jUv!;_-tAu5V0iWFU$B%0^`v#s zEfy+kg}}dn{LTwq!8&buT4fHLU=nL2%|xDVXpHfJ$LOVbJ4?)Lx2KXg=l> znXEn0>E?{e;PG*$lDX|7#fU3pxZ4ao=yw%bc^3u@My)&6g`LI36oY1r|6JY98!l!$(FP#saMpYQp5X}BR)I& z7ROzqys`NH<O@KWg9|;ofKy6Re<8O3e1whg*hM5|BgVUBMG}JV+vi%gbykOT zh^lG`Gc}dtS(MXRPuIU!Owix6SASbR4`$t1>%Or3Ue59|g&Ezqx9TF5(8&;U0BOykq!!JyDc^-eK&3 zamfi&_mE{LmjnBhvJ^IvCb$T=%`;h}=YxpoMU4^^LsQH*&+N9nc^sZ#{+lc_fSF?w zy$LLW!Xh-)Irre>l%2Bxt9gwBqX-H6$p;LFNTk#fIVgaY3q-|i9xNDyfnppxRA>)T z&u(U{dj5U>2mxP?9n0hMdZ1|Ky4|R&(_*eWG-sFdebuh&+wmD9-U0brrvvg{4fNM} zp6HsyPEE&j;XRxq`|AOun8#OwC>90D{B`N|753n=(qV&>=sheS|-b-`eA-{ZvDao#$J3 zy&YEU8;7&wq5e2|p@Xeo>$|tgPm=K@?CwXR@6e%_#r8SO-sy#Ky@lG&%l_O>e7_ci z*aOYTj&{fodFdZij()oxCGaw!!M;AC)0l(aS9vL(m4Moa2gEJf|59mZ#j+~1Ri$y$#GMNOzs))O*=qsC=t3 z7D%mu6v2#b-W^(QbYu0e(fE`cmUnWC{-f5_b;$nxuN=)(6|dXI?c`2x-Ce`T;Cj)W zUDH|Hto>VgZRJG5tJuI&T<)6JA3Bw2g3pwGW!NZJ_WZ2w#O*xEkJiI_&VubVi>H$} zrl2GntYia`R+Si9Yvjpb&}2W-bKs*tzTlVUFlNI7mlWw%BY%AelCXszUBcO!$%GI! zf9raGQ@dAxzD=%iG@Ry+(EF-sI2mmz)2pVabbF0mT&pFs>|^if_~5Je{EHn(;^nSS znC1L8k+74-Z(-%z()X?uWB({_k3TB=-1q55cCawXq|;yA?6(PuPI~I91y3#c01+UTr5s5)4S{aVrC1~Js;qr`ECORA zw@)DVulobYZ+|`xvF{k?t@t~e!ShD>Zn!MzhRu`sFcmew1<_)e5Oz&5Z8Zw4N_8;M zBn57b0!9rGIPLXUJvs8DaNAxt@^c?ILj##mi)g^0p~MVEZ6Gr@J=10cd2JDVxk_0B zZMS1Q+iNY}0!OJ=ypdF~W(#EMrd2m|or)$k8nW2Yn9-6QBzI|iv-o~@gP4<(`#%8mk z?#GhrXK#D4DK$Re*E--=YylM2ZJly1I3XvgMm*tRNl8h%h4&cg1bzU6+!Ar3iOhU) zrjo-Q2bpOq3hHnDUQGI(^tw)?3>RcFjr}BoWh)OPayrkip2XiJVR|s%5bVaVY|C^O z3HnLj!hA6~VeHqDyPO-byf2z#Vh?()ffRgi)So`IC@>X`bUJwBzV^3c1ciX-6O*o}#rj$)b&)9h!bd8zx)nm+S#v z_T$q4w_A$ERP$+>E(icm7E>SGhE+y0T(*JW|fY_x-OF?jz z*XGcd6c%}Va6OLLy97;zdA{cr*2~zQ_P#ql7f0BL=1^**g2MBAcei;gS8A{gwEn3+Gu_Kry%OP?`?c-}_;rZirH9TVblc}vK>L30i~Ni1+w3$vkzRSgjVo?bJGk{CnvD?E+wI8#d77# zw9M6{vVr=mL=f=q@sA%~x^caeH>z6*w{}B#Tf+OG5E$d@Vz>hkSq$U@Gh6hv{igOA z4ztuu&rYS?7vOuB=JydSFZ?eUd^sYS5YO|Ori5$DIDW(`v9G5)J$zxwoP@&TQW!E3 z7Cu;?qa46^g#nA$AtK6!(-Z5obB5?LrNcx;cqLuPW7-cEV;;VByj|O_@@n?mZr%<& z(VeK-?2yqdq|jh{p;A zGwFPek=9aA57|Md1bpMTB#^H`qe0MdG2H214j%(7i-sYO%>z(TC&(g5+t~?Joxv{SJ z*qr}nYCF}1XIj(J@c%51qor3{VozFqnCH$?<9A-%*bZE8d!O&vt!&gx+R;*YaFL(P z*;RxbDY&521hKl68|a+!*>{Xg5hgLrQ({F!ck}(y(!2pAw?iWgaL!w{IZCRXIzXe4 zb4B5(6<^B=^`HbwZjk?*nsDl5Aq!jNQZ&Y7XB^6?5u&RQZ4Vin4afy1Wr@)mj8-r3LMD91y_z-foa3B;(D-o9K3U9W3`*a`sR7!=`$7G zvc+$;-Rf*C_=i{!vmxPXyOlNOK6%|D+Pbv-uh3j`x9VLG;i4abd7j0-vtqk@F!Y>R zz4#efyUx+OdX7;?^)&rxGHvRQDmAVeIy17klWz5oi+b5bz5TxRS6e-2r}e|3#QNWA zsw++ouk%c-x7v4pDFONQ=bulA8Jh=oxy%Qf`RJp`svWD>w}0Bl{(hYSwTSzV#zYi~ z5{*HD;e5bY6$kCNls7Wyi3WL4F%fh#mS~rfPlc#ec#m9I23>^Aa;$DddGwSPPHd*{M% zZ7C^9+$sLp+c*e>c zE08c`Uz7GouR|qCR%K7nO0tUK+VDu1$;%4$C|g!5!=NZMud})*nKhGg_t;n>ep1C9G2M;I!4iW=NqoqD?_6Ee!=jir>yjOi(W-OuejJJ<#jJ?X_I}w z&YoG$cHSf6U03!!UVY`PwU#<3*{`!#^sNZNw;+8O@pSHJ(=O2B+aSR!NE;7BV+O^g z%T~svPm$fgCEA40MH#SVMIu)}@F-o%{$F@i z$hy5Kw1fOxvga1=%Of8mcvL7UgT%OmAO?t+Sm$z%q~Z}hx*+2Hj@(cg_C0M4w4;K- zWrL*i*VqW&;fvT{hTvv$cyBw}+3o!Te14n@%Io82OisUpMio(8*uuJC&57A3%m`N5 zi|ahrpzee!EzXbY>MTv8+ z=7sSM=$ap~$Fg*nHz58SnVp~xJ$Alt12}8cgc^p4$XPQL5a}O1QjDZRSUJ?=Vl)3X zSx9%+cxT~uL9fEih-S-4#bouWS+@yR`bhRPFzBx==4z>L=kQ?UTZGSoh$3J&q`gO8 z0}k-$fT(eMt+6-lef_+ScxyXU{{6z_H^(`o)#~t_+O=492l)QrD!HA|7ifJaP?Hfd z?;ePLXuho&40aS!a#D(n&&~#`AY>G*#{%z>K;#qo6d6c4a)Qy+tR)(2Cn2UUyo~U2 z3~XVKv&n0xrq;|(XQdlSsb0l|XE+>}awa9s5;+EL+b`ty8yDXpABlE`$S<%a66R}gM+%V=yn6c_(K0fZTiZFemry*G8_!7&y1 z4ky0Hcm-0Es7iNiqo=fLBm39Mq-i--zrNjV;g~qf7JW7*DphXV=Wz2^7WbiUccKmz zrL{iiL2iri)}}6X*XVSH=jv+#?WS(8D$jl=Y@gTTC1;fJEttvs>+LWLjzTX* z?q#PKPlG;nu1>od&+i{eKZcx!=@eMqm>MEH_NE%;Zc&Rc|up>?6KcSrZChTb@^um*SEAQ})Zr z`AEtM!1J~I1EA}^$5q{RQTy5V_S$oo_jk4K&&i`+b~|0CAZK5~5mztxX}zHB;z^Bz ztP8R?dTKRZ=p{2mnF3`Kc%tgQN-J*YMSwuGWnfy#4$+tykBK6lf`{ z+t0u8{S4*QcIAwQQE>E$<0t* z<%c+3F!o!uW4be}X|ye-xa7C%gT4@HopkjUlsmACMsvp%@lCI@|qWL5nF5BuvJTB>HecWSS^MF-6Sdo3tv*7hDf%nTMDL3B*lo$iX=t5 zW+FeFL3yxjD;?RWS$53lDnk)td_y%PAGBa__|jltGRs?Jzj5EAwN+`V9m~na_f7v9 z+gPS`?WYhIw;*v&^;^B;^7Y!0HxHL*;dH~Y`q$$5CslN<@_U;%7^3!!PfHQ#a z^tJ|q8)*U65$r0EDI9_s&vM$_uk__~iILxGM9#`);uX*&e>H^P$JBg{jH*F;7&41M zWj-E=a`SsWuWy$JAUKzlkViMd5L~mM zuB1$=6Mf$Pln@)ttI(y*F06g|2I;l5Ufey{N8DY6$HJjLiF9KeurOgvX5;f9)_pAM z`C;62)P@)o-`UY2Ob&>hMQ|!8*s3n=azeP9v?id(?p);NpBFqDL2d^XF>_supWbKC zM)K95H7GWNc{FCo<$Gz@mlz4A@X7aj<9Ue<#D96|<4tHnh>RBczNeA>F8HgWF?CsKfA2W}pi zqTPuu^ytm?v(rzvuU3Dx?qc=v;(so`xOLUH4dSY;w^c2uyYR)!=EOC^@<#HU;5QwO z$lVj4YhCY|Ux+`(gg7^!E#tk^5qIJiwYl|s{`fxDcq`=9+Ry8wV(<3aSTMt3LPVd9 z#s)tGzoYo2w1fOJE=?&-n`WNEMTg(CO%<=(S-rk^etduP{p|JA@B3fNzCB;1*DL9J zmNMZag&#LCY-&8J87jd~2mG36N@6tPGL7}A2@6Z%C;xq`(=ts+`&4BcIJy_M%!YV{ zxZLU=t&{n8CEui0&h{ccWTU1Po+605t`+6MJ5kq)`3QxSzwK7$nDKIOO_1#NJy{U1IS zXhm%8q$<2{)PviBH*kZQk2kpf8AMb8D_H&tVVwq{_{VQRQp{PDf?0!UKvIxC?t|H4 z{u?m&BpUc2-F$3hL@Yn`5)?aIy9lX{FCNSDWJ+))<2aT!R;-B7pkB8&m6g5Ow8)LW z#a3L@M5>U)12=C51o|}4wYSTzl3(ch;?4|2uY-aWEyCxQRyNj;(g6xxbuFMs(WT9y z^OBZ2ATBO*e;x(Fl@Bh$C8ULL=aefFyAV>r_RxT8FJSyQDJ(B18uClNVH8|tSbwEs z8SUr7z)%S+8W3Q{HivQ*SG#b9@2Se$I`?1EGCO9{B34B8trR7 zn*9Cp40RyW*KL;3_n%)##q@g}swsuTqrOuRe=}58h4i6VzD=7IW-2ke-5_j-x6#&U zZD`8xmZ$1n7^>hHIAm>DIHG0e>y2#f#MHwT*9KPHEBQ(cpn#XkEBDmQ&|v8OR2LZ2 z6~#s@`fdhj_?zP8(7fP4a%$#kHI(8zij4*|9n}&?Sj1N$)|dxR?}o7QCi0Ae{OTv% zAV?>~jP5K0)v~O{I)+$c4f6NG7VyFK6)v-la1x-e&VsLz49<*PViiyfa6~d{SO+bV zV@4f(_#oQOrTy}&qXZRA7N%|TLq>wjsWRMFFlH6u{5+CXsg~Rre|H`<3vXP>7CyH!yw&;R{4sx?kjF2BNQJw3&&!rm*-0u+5-4K}`_@dQ8UKn|z*8;CT_{qJGQ|pC z^z2?9xx*MK9It}Se_89q6bJqfASj;Al4*!{R4RG}J2s+#--I{fX3Q}WPq?KKZ*;4ku#sSM z0H8zo@l>uoh342eft911NbehFTK|%fmS#cv^0%TT98=Vr&(DnJE;TsB`slfV2R!<^ zYWiyRMzOOS{Ks{usN9BZ-hEfbxVwfA^eVx@^T>H5?hMhokZUtlV<|nARw(0(xbMjD z$5$QJN74f9gVNMb zC>;HM)XPFSJjLR7P)UDzs6C7~=LW^Jd5RUdw>I28H4wV4b|e;NtdhUlkeM3unsj~} zPHxFLPp1*y15J?oU%mcHMR0xa>PpjI;Z;Q~R4MC%KVTOYl@pkwn5NRZHCVg!D&kSV zZoh-X&)k_M=iNpaa_&{7qB5c>OkkYx6jWxmEv}h7)CRh-$Yza3n}lq^4-EODsk@Vz zU{GZ#P^W{;(RNFj(SdYZqG2K{)P7?3I7)s}YhIDAj2EgDRVpny({7-Q6t9&uXk6tV z7om)+3}2IbshHm_bIOx0%5XQv4#urb{(>4zHsX_*e@0{wQs9Pk*u+XCjx_mrnz-bs z?|+o(?M<67^(hWbhU%P#?BV>Fm6?`m;!s22gSuqN%IxV{V9wORkH$T`5xhyvx_gy% zDh9MJb(=ySxz2mcIF%-8VCxDi-<2g<Oc$obf*iY2 z8H(6g%=$14J)p!h)CUq}walEU%7Dh`aT zEHn=9)E2r@r_Z;tIEQfu8YIxhgpy2%*N${yt%ZIoY8Fp$#Qwno$MMghnw9v7L<==w ze?B_Ry%8J;G!TjP*Z*<}F3b-NUyyED;57Qlh@)EG0xQP|s#*y^V0PG}<`p2+N7XOk z!9dmlT2Zgg;MiV)6nll1PUqe95kq$HV4B%ll!WhFLcB;@M{gj_&v^dK^7q(noP4>h%l4ru^~V3t{DmjXBQc;Ceb%1Z%?mlpp}3`{Q|zj9BF_2RvjY4W=Si#cQSg2N6k*%+-ucJ$qvMiyxoZ@OqT0*L%<_O_rp82CRl&4`6?H9f;oK8;uf@Yo(^K=xsg0$t`iCXVMihuD zsoX#R+vqtt5mi-EX}YYM!de1U1lF&XtU6T(K~o|v6#xyyQrBqZ>AD^m(qgBf0-Ix3 z(c0Nw>>}y-XvAJpkE~Ifx|Zydk8B`O;_Bi!J-C18WND{qD{Jd&d5g@ICS@)tdW1~% zGnJ5Zq{TD^ZDCW%pv1$@vqA{Fo~f?8-6letic(LhJHOcs3_7Q@k(mgg(?HNt)Y8?l zL%XtqDo0%mn_#T*e8IEDhHM;ejKcV!QYZ)}MQESre}F*n zA0Ti^O>Gq+Nl9N#`8+kUYSM}V`o4-fK&Mh(L(o$P;;wk2O5v=8tI$_n8*-|!N)e{0Grg#d`GJ0BEB{mfXl-u#9p)iW82 zeP4%#v}^f)`GBM!5G#;`Fk%)Iz~4~w1`AtQhPeoq^}NN$J>hlm@dK56nn?7%w)Hej zGRGESk)*>j4%9Sf2yJ47=@Pwkr|@mt1*QA-nU$kX0u9k6{5a7rLZw!^_%;`Sunxn_ zSxnLzT-gGLt_d!bJbo?Ir~<``3}8f{g8~QVUXrit52|xR)f=rB4~-*CgA>QsOPgkt zH?h2X-&_0g+y&mqR{5($j*Ma;=ko?-yc+d#=;{grii^0ZBo=h=3gh|(Rq;Zpn zd2;bZJJM*eep0<@Qn8n$J1vPrOrDnti8tvo2&4(um!xri+>#zDWIK9xNWD2C2zF$U zk>kWScM`umHOSukNMYVh?`RV)lK{d@p7k?CJn3@188S~3huGc#P^R^!w9P;Ef%V#C z`e~B-%7Js_N$)0&(q#Hc06ENc$|P@;@z_u!!?ChMJmRw&cjzAAM&Au+!!DUtU)PlS zE3oy}l<)H`y1lBZarK^$ExJ3jjLnubn-EcL6DM+>f5`x|3>%pE7+@!HqO)7Qbs4tt zVr{Yu(*@Eb3lha}Ino3X|d_x_&NMCs@flo`qHE$fCVTHexw+0SoNC76}?f0tc9tfq7{mjsiHN$ zgsCD?vP6c8#yKPst5JmP2zz{AG%I9;NwYa4nKUuP8vv4#JZ_RJb1X+XvfUwc>$9K3 zta&p->TGwb#|Z08mZUv(XqGXR3Xo-@%v2>ty&`QgJBDep8lTcpqDcD9l<`HG;TDKG zZc-^@mkdD7@F4pQCQk%Fj0fX(03-?NA;T((1Smx^a15*U zY2i%spr}1EE&!29Z*n>GW~N^T6$&CA8vXKQ!!qqIfe945j$jdB&j z-wzWn`qph&H~%%@&BXeD*mEkL4yN?-Mpnu$w)AoY?2JDdZzpFL0#=Uy9ND;-I?;>S z7`m8>m>S!gn9~1`I5+_lBjf)C(Jg0aD{n}kkL{c&KWqq;gunT%7nXzIkiiiagJjr@ z7C}P77Sb9qwr1e=etyZfnP6*@Ik6#jDJOI-r#Z{z-7lWmi80O;Lr;O1qM_(8S#qN2 zG2o^{oi;C_rZdWL#Z?+jaF~HBuk53NvUWzBhFW)Ho8fdSdYrdT6~?}5G6O$a3n{{ zw8~f*N+44uYR#E)WO8c75HzSjvtS!n2UvLsbAa1sQ(={QIYkElOyQvpL5D*Cc{3=4 zLaw^EI3iJnQOQ^FYQ6)~E!GgIc!($MmhMf);y=_7{gkoNAhyVOfi6}tj7hI8_V3~} zmogrK$VFrUvEBAA%|O?vG|mK}3=$MULZ56#3C9LGl$009!H&Q;OTK|ZVaB456fRcH zRD|Lk0l@_>Lc44MfkBd}+6&G{QkTX>l`Hp;iCyXF%j=;xTONAoOdo(Dc;xHy>ZWgW zFVcR?Ku_`%3FeBe0^nRX5fa5c^KfU&RKCJ}#%?1b_+eSevO?4v{W>|~=Uv`^w{oPV zEtoel3DYU^o&X<}KisdfJbXjwsOS=|MWgK~AXR5`vQ6tzdrr3Ac&gN*8>TgzW%vp( zYfJN0i#61W6i>{yPq#`{o_4B~N~n%%A08d%sjZz|zc7*S zs1>znWSUskb+Xm(C?$0l?7c7=vo{%QJ8WIotpC@wcH3E|vtu-Nt9Q9H84J|jE;4bY z-DGTiiOedueDea%(>rNtn6#*KF?2&))-eK!(HV$iBi~VgW>SXk)OCs0T{lo*TW<%p z__Rgpsho`xCJhK|1GP;nv@NsP(RR7OcCEz_e%vR9Y7SGrv^?3)B+8?Jkra{OSTPfe z3_hJe6S9#)uYF8_nx8_y#zPCD!nZL^Tlw?L)kwoJ^jkm58G zZMK;|Tvl=+mtA;9-zo%L__4gAWtzw)eIR6>{tUf@RZU}6a4p<2ftFvqux*h{fIp52 z@O0CQo}5>Fe2(9@2=s(r-7WuE2-AAFZN{9gI{T7!bRO#HJ>Db=!i-tSf5<+dh!ket z7Cw)<=2^B42pcu3RfSwv%Q=!L&!zH)1l>_d34=UdKYwiVfb!jC}kv~ z!Xh7`!txhxkh;c7rDTboo22+!v8$_C*}DdtL{$|zZ=1* z)5~Yv*4AN2VP<(vUS)HUjawBmTefu@UW7d^cOJCF$hB)5W0QZ0JqW7y zp)v4FC>$BtkZ9(R_&fC-aMmN`KyS=1)srmeUA$m*mNlF#52C#+}Na@B@$vCOvsCv7rN;L;= zTI$*j#diXnWq1@3oBhB5|^a_$ky3>n#YHUIm2a@aUT? zqu7A29}S&&ejLg{KFHxRabrzKu6f^`-#jNZVW^Y#?zWBe?WpUEC%LDcs5}14PuG>7 z^e&$BNQmv4Jlnl}rY*LR8SR(akr?XO$LtIpFF2VPJ4tj%g{;N{@~2gDI+`gKy9 zH~3Yj;?(z5QO|eM7|xH2Cu7dsKZco66zAb=(Y!%Px4DCk(oV8}j^=n~uH@&1OMfn$&t#Dy~Hd zw-X)@$${`l7o7Wi9Z1|Zny?dCbdvHA0H_%!R*q zH3}sh>!Qx5gNr^vi&B#BRsI9}qz9($Qclzc4f{&^U}j?h83n~1Jf-B=veVfuTy^5WjnH+-N4~BT?_A!!Akb=X6$T=PCl#a@7~Y^72<+pr`Y&zd?z60&xH9 z{)Cy4>3w!L&?;PUQ$Gxhn0iDh>elmjD?k%#gKvBn3KuS$c)j@kcpFlnaPOF zjPL({hAzF5y}b*}e>!eT^pbXF_5}aAni9RTrI#rIGb1y-x;7&LGXazC|6~8d&cO12 zcHL-~*VSVbG5v3!d8HDArG6C#NCit#ikjjvr4cHRPTi}7!kNkh%ZN%bp&~QQ(y-ID z*MET5(oVY0JYV*#X!fk<}aCmQ8 zi(<42BR&j2ord7fVRIKEx(VrDM*FRScNwuii~+$7|HBL(SOfJof_fU5*3{uf~o2U%)J#j7;JJ@fBO-af8~F^5lJq+Tn+lg*c)zZ z$}nH5&b)POVOj>FBDighFWv4Kr40Fg!|i@OLla&#qOQ>wb8CuLkJL5q3i`odY7ow= zP)aRwi#dB6Wo!@AD{-P&)J>jgYsxct;=#T(>pD8avvQ)lt~IXs*)*p#@q6~k#S830 zk?LZ?mi_*6mP^=FyW}e4fnr6ID&&tXzHpo&uUg4V&eicpL-kly@>ioT$iLy9cEslc z5gz{$52UzV5}FZXk6-M2CYym94&49xbveMx_U$%BKfUfY%PIdZ3#hSkd&ewxgfya_PijI}qEA;!KUyXat1a zFwBe~^F)r_g5?f-dces4yvv4OJ@DuaNc9G(+kx&K2v_#atB1HfP%duK*>-Ka@b7tl_~XCQ4i|L9^p#h&6!pAL zSK)dUk$V}sKM3kS3<+FDeqn|Ru7L{I<3Eimu()e+i0uR61ka!LV%M2*fAcL<#;*Et zte|qPjB>BA{=LuAwoaGw&0W06vcV6yt?c0ZSK9&KnuSd%_}CS<*hk;&o7@@7-W5d+ z7)q6KMJwhk$)8GXIOlp=q#P^4-P!*2int*YG4)>`KxY?2Cl?PVQ!|(!aGIHu1%{MV JR9+0`zX9MW$MXOH literal 0 HcmV?d00001 diff --git a/dependency-reduced-pom.xml b/dependency-reduced-pom.xml new file mode 100644 index 0000000..8e3e2bb --- /dev/null +++ b/dependency-reduced-pom.xml @@ -0,0 +1,88 @@ + + + 4.0.0 + de.team1 + fakturierung + Desktop-Fakturierungsanwendung (Team 1) + 1.0.0 + Einzelplatz-Fakturierungsanwendung gemäß Lastenheft v1.3 und den + Pflichtenheften der Gruppen A (Dokumentenzyklus), B (Produkte), + C (Kunden) und D (Programmoberfläche). + + + + maven-surefire-plugin + 3.2.5 + + + maven-jar-plugin + 3.4.1 + + + + de.team1.faktura.Main + + + + + + maven-shade-plugin + 3.5.2 + + + package + + shade + + + + + de.team1.faktura.Main + + + + + *:* + + META-INF/*.SF + META-INF/*.DSA + META-INF/*.RSA + + + + + + + + + + + + org.junit.jupiter + junit-jupiter + 5.10.2 + test + + + junit-jupiter-api + org.junit.jupiter + + + junit-jupiter-params + org.junit.jupiter + + + junit-jupiter-engine + org.junit.jupiter + + + + + + 21 + UTF-8 + 3.0.3 + 5.10.2 + 2.17.2 + + diff --git a/mvnw b/mvnw new file mode 100644 index 0000000..d167fb4 --- /dev/null +++ b/mvnw @@ -0,0 +1,21 @@ +#!/bin/sh +# --------------------------------------------------------------------------- +# Maven-Bootstrap-Skript (Unix/Git-Bash): laedt Apache Maven beim ersten +# Aufruf nach ~/.m2/wrapper und ruft es mit allen Argumenten auf. +# --------------------------------------------------------------------------- +set -e + +MAVEN_VERSION=3.9.9 +WRAPPER_DIR="$HOME/.m2/wrapper/dists" +MAVEN_HOME="$WRAPPER_DIR/apache-maven-$MAVEN_VERSION" + +if [ ! -x "$MAVEN_HOME/bin/mvn" ]; then + echo "Lade Apache Maven $MAVEN_VERSION herunter (einmalig)..." + mkdir -p "$WRAPPER_DIR" + ZIP="$WRAPPER_DIR/apache-maven-$MAVEN_VERSION-bin.zip" + curl -fsSL -o "$ZIP" "https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/$MAVEN_VERSION/apache-maven-$MAVEN_VERSION-bin.zip" + unzip -q -o "$ZIP" -d "$WRAPPER_DIR" + rm -f "$ZIP" +fi + +exec "$MAVEN_HOME/bin/mvn" "$@" diff --git a/mvnw.cmd b/mvnw.cmd new file mode 100644 index 0000000..e28548b --- /dev/null +++ b/mvnw.cmd @@ -0,0 +1,31 @@ +@echo off +rem --------------------------------------------------------------------------- +rem Maven-Bootstrap-Skript (Windows): laedt Apache Maven beim ersten Aufruf +rem nach %USERPROFILE%\.m2\wrapper und ruft es anschliessend mit allen +rem uebergebenen Argumenten auf. Es ist keine lokale Maven-Installation noetig. +rem --------------------------------------------------------------------------- +setlocal + +set "MAVEN_VERSION=3.9.9" +set "WRAPPER_DIR=%USERPROFILE%\.m2\wrapper\dists" +set "MAVEN_HOME=%WRAPPER_DIR%\apache-maven-%MAVEN_VERSION%" + +if exist "%MAVEN_HOME%\bin\mvn.cmd" goto run + +echo Lade Apache Maven %MAVEN_VERSION% herunter (einmalig)... +powershell -NoProfile -ExecutionPolicy Bypass -Command ^ + "$ErrorActionPreference = 'Stop';" ^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12;" ^ + "New-Item -ItemType Directory -Force '%WRAPPER_DIR%' | Out-Null;" ^ + "$zip = Join-Path '%WRAPPER_DIR%' 'apache-maven-%MAVEN_VERSION%-bin.zip';" ^ + "Invoke-WebRequest -Uri 'https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/%MAVEN_VERSION%/apache-maven-%MAVEN_VERSION%-bin.zip' -OutFile $zip;" ^ + "Expand-Archive -Path $zip -DestinationPath '%WRAPPER_DIR%' -Force;" ^ + "Remove-Item $zip" +if errorlevel 1 ( + echo FEHLER: Maven konnte nicht heruntergeladen werden. + exit /b 1 +) + +:run +"%MAVEN_HOME%\bin\mvn.cmd" %* +exit /b %ERRORLEVEL% diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..5b20cc5 --- /dev/null +++ b/pom.xml @@ -0,0 +1,108 @@ + + + 4.0.0 + + de.team1 + fakturierung + 1.0.0 + jar + + Desktop-Fakturierungsanwendung (Team 1) + + Einzelplatz-Fakturierungsanwendung gemäß Lastenheft v1.3 und den + Pflichtenheften der Gruppen A (Dokumentenzyklus), B (Produkte), + C (Kunden) und D (Programmoberfläche). + + + + UTF-8 + 21 + 2.17.2 + 5.10.2 + 3.0.3 + + + + + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + ${jackson.version} + + + + + org.apache.pdfbox + pdfbox + ${pdfbox.version} + + + + + org.junit.jupiter + junit-jupiter + ${junit.version} + test + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 3.2.5 + + + org.apache.maven.plugins + maven-jar-plugin + 3.4.1 + + + + de.team1.faktura.Main + + + + + + + org.apache.maven.plugins + maven-shade-plugin + 3.5.2 + + + package + + shade + + + + + de.team1.faktura.Main + + + + + *:* + + META-INF/*.SF + META-INF/*.DSA + META-INF/*.RSA + + + + + + + + + + diff --git a/src/main/java/de/team1/faktura/Main.java b/src/main/java/de/team1/faktura/Main.java new file mode 100644 index 0000000..8bd5b35 --- /dev/null +++ b/src/main/java/de/team1/faktura/Main.java @@ -0,0 +1,85 @@ +package de.team1.faktura; + +import de.team1.faktura.dokumente.DokumentReferenzPruefung; +import de.team1.faktura.dokumente.DokumentService; +import de.team1.faktura.dokumente.EinfacherBelegnummernGenerator; +import de.team1.faktura.dokumente.JsonDokumentRepository; +import de.team1.faktura.dokumente.PdfBoxPdfExporter; +import de.team1.faktura.dokumente.StandardDokumentService; +import de.team1.faktura.gui.DokumentListenPanel; +import de.team1.faktura.gui.HauptFenster; +import de.team1.faktura.gui.KundenPanel; +import de.team1.faktura.gui.ProduktPanel; +import de.team1.faktura.kunden.EinfacherKundennummernGenerator; +import de.team1.faktura.kunden.JsonKundenRepository; +import de.team1.faktura.kunden.KundenCsvExport; +import de.team1.faktura.kunden.KundenVerwaltungsService; +import de.team1.faktura.produkte.EinfacherProduktnummernGenerator; +import de.team1.faktura.produkte.JsonProduktRepository; +import de.team1.faktura.produkte.ProduktCsvExport; +import de.team1.faktura.produkte.ProduktVerwaltungsService; + +import javax.swing.SwingUtilities; +import javax.swing.UIManager; +import java.nio.file.Path; + +/** + * Einstiegspunkt der Desktop-Fakturierungsanwendung: verdrahtet die vier + * Komponenten (A: Dokumentenzyklus, B: Produkte, C: Kunden, D: Oberfläche) + * und startet die GUI. Alle Daten liegen ausschließlich lokal im + * Verzeichnis {@code daten/} (Q-06, IF-01). + */ +public final class Main { + + private Main() { + } + + public static void main(String[] args) { + Path datenVerzeichnis = Path.of("daten"); + + // Persistenz (IF-01) + JsonKundenRepository kundenRepository = + new JsonKundenRepository(datenVerzeichnis.resolve("kunden.json")); + JsonProduktRepository produktRepository = + new JsonProduktRepository(datenVerzeichnis.resolve("produkte.json")); + JsonDokumentRepository dokumentRepository = + new JsonDokumentRepository(datenVerzeichnis.resolve("dokumente.json")); + + // Gruppe A stellt die Referenzprüfungen für die Löschsperren bereit + DokumentReferenzPruefung referenzPruefung = new DokumentReferenzPruefung(dokumentRepository); + + // Gruppe C — Kundenverwaltung + KundenVerwaltungsService kundenService = new KundenVerwaltungsService( + kundenRepository, + EinfacherKundennummernGenerator.ausRepository(kundenRepository), + referenzPruefung); + + // Gruppe B — Produktverwaltung + ProduktVerwaltungsService produktService = new ProduktVerwaltungsService( + produktRepository, + EinfacherProduktnummernGenerator.ausRepository(produktRepository), + referenzPruefung); + + // Gruppe A — Dokumentenzyklus + DokumentService dokumentService = new StandardDokumentService( + dokumentRepository, + EinfacherBelegnummernGenerator.ausRepository(dokumentRepository), + kundenService, + produktService, + new PdfBoxPdfExporter()); + + // Gruppe D — Programmoberfläche + SwingUtilities.invokeLater(() -> { + try { + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + } catch (Exception e) { + // Standard-Look-and-Feel verwenden + } + HauptFenster fenster = new HauptFenster( + new KundenPanel(kundenService, new KundenCsvExport(kundenRepository)), + new ProduktPanel(produktService, new ProduktCsvExport(produktRepository)), + new DokumentListenPanel(dokumentService, kundenService, produktService)); + fenster.setVisible(true); + }); + } +} diff --git a/src/main/java/de/team1/faktura/dokumente/Angebot.java b/src/main/java/de/team1/faktura/dokumente/Angebot.java new file mode 100644 index 0000000..b6adedf --- /dev/null +++ b/src/main/java/de/team1/faktura/dokumente/Angebot.java @@ -0,0 +1,25 @@ +package de.team1.faktura.dokumente; + +import java.time.LocalDate; + +/** + * Angebot (BA-09, A-F-01 bis F-04): Beleg mit Gültigkeitsdatum. + */ +public class Angebot extends Dokument { + + private LocalDate gueltigBis; + + @Override + public Belegtyp belegtyp() { + return Belegtyp.ANGEBOT; + } + + public LocalDate getGueltigBis() { + return gueltigBis; + } + + public void setGueltigBis(LocalDate gueltigBis) { + pruefeAenderbar(); + this.gueltigBis = gueltigBis; + } +} diff --git a/src/main/java/de/team1/faktura/dokumente/Auftragsbestaetigung.java b/src/main/java/de/team1/faktura/dokumente/Auftragsbestaetigung.java new file mode 100644 index 0000000..942a3f6 --- /dev/null +++ b/src/main/java/de/team1/faktura/dokumente/Auftragsbestaetigung.java @@ -0,0 +1,13 @@ +package de.team1.faktura.dokumente; + +/** + * Auftragsbestätigung (BA-10, A-F-05 bis F-07): nutzt die Rückreferenz + * {@code vorgaengerNr} auf das zugrunde liegende Angebot (GR-05). + */ +public class Auftragsbestaetigung extends Dokument { + + @Override + public Belegtyp belegtyp() { + return Belegtyp.AUFTRAGSBESTAETIGUNG; + } +} diff --git a/src/main/java/de/team1/faktura/dokumente/BelegnummernGenerator.java b/src/main/java/de/team1/faktura/dokumente/BelegnummernGenerator.java new file mode 100644 index 0000000..94598be --- /dev/null +++ b/src/main/java/de/team1/faktura/dokumente/BelegnummernGenerator.java @@ -0,0 +1,13 @@ +package de.team1.faktura.dokumente; + +/** + * Vergabe eindeutiger Belegnummern je Belegtyp (GR-01, A Kapitel 6.2). + */ +public interface BelegnummernGenerator { + + /** + * Liefert die nächste fortlaufende, lückenlose Nummer für den Belegtyp, + * z. B. {@code "R-2026-000124"} (Präfix, Jahr, führende Nullen). + */ + String naechsteNummer(Belegtyp typ, int jahr); +} diff --git a/src/main/java/de/team1/faktura/dokumente/Belegtyp.java b/src/main/java/de/team1/faktura/dokumente/Belegtyp.java new file mode 100644 index 0000000..f174b4e --- /dev/null +++ b/src/main/java/de/team1/faktura/dokumente/Belegtyp.java @@ -0,0 +1,28 @@ +package de.team1.faktura.dokumente; + +/** + * Die vier kaufmännischen Belegtypen mit ihren Nummern-Präfixen + * (Gruppe A, Kapitel 4: AN-, AB-, LS-, R-). + */ +public enum Belegtyp { + ANGEBOT("AN", "Angebot"), + AUFTRAGSBESTAETIGUNG("AB", "Auftragsbestätigung"), + LIEFERSCHEIN("LS", "Lieferschein"), + RECHNUNG("R", "Rechnung"); + + private final String praefix; + private final String anzeigename; + + Belegtyp(String praefix, String anzeigename) { + this.praefix = praefix; + this.anzeigename = anzeigename; + } + + public String praefix() { + return praefix; + } + + public String anzeigename() { + return anzeigename; + } +} diff --git a/src/main/java/de/team1/faktura/dokumente/Dokument.java b/src/main/java/de/team1/faktura/dokumente/Dokument.java new file mode 100644 index 0000000..af17f34 --- /dev/null +++ b/src/main/java/de/team1/faktura/dokumente/Dokument.java @@ -0,0 +1,167 @@ +package de.team1.faktura.dokumente; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +/** + * Abstrakte Oberklasse aller Belege (Gruppe A, Kapitel 6.1). + * + *