Compare commits

..

No commits in common. "66085831b83a0c4a7bdd003402a075e814848d09" and "f925d26c86eb021612c262c9981bd3c6603ff10a" have entirely different histories.

2 changed files with 9 additions and 81 deletions

View File

@ -9,9 +9,6 @@ import java.math.BigDecimal;
*/ */
public class Product { public class Product {
// Ein globaler Zähler, der für jedes neue Produkt hochgezählt wird
private static int idCounter = 1;
private String productId; private String productId;
private String bezeichnung; private String bezeichnung;
private BigDecimal einzelpreisNetto; private BigDecimal einzelpreisNetto;
@ -21,33 +18,24 @@ public class Product {
/** /**
* Standardkonstruktor. * Standardkonstruktor.
* Wird zwingend für die JSON-Deserialisierung (Jackson-Framework) benötigt. * Wird zwingend für die JSON-Deserialisierung (Jackson-Framework) benötigt[cite: 71].
* Generiert automatisch die nächste ID im Format P-0001.
*/ */
public Product() { public Product() {
// String.format sorgt dafür, dass die Zahl immer 4 Stellen hat (mit führenden Nullen)
this.productId = String.format("P-%04d", idCounter++);
} }
/** /**
* All-ArgsConstructor zur vollständigen Initialisierung eines neuen Produkt-Objekts. * All-ArgsConstructor zur vollständigen Initialisierung eines neuen Produkt-Objekts[cite: 55].
* *
* @param productId Eindeutiger systeminterner Identifikator (z. B. P-0001) * @param productId Eindeutiger systeminterner Identifikator (z. B. P-0001) [cite: 55, 392]
* @param bezeichnung Anzeigename des Artikels (1 bis 100 Zeichen) * @param bezeichnung Anzeigename des Artikels (1 bis 100 Zeichen) [cite: 55, 456]
* @param einzelpreisNetto Netto-Einzelpreis mit exakt zwei Nachkommastellen (muss >= 0.00 sein) * @param einzelpreisNetto Netto-Einzelpreis mit exakt zwei Nachkommastellen (muss >= 0.00 sein) [cite: 55]
* @param mwstSatz Zugeordneter Steuersatz aus der Enumeration MwstSatz (NORMAL oder ERMAESSIGT) * @param mwstSatz Zugeordneter Steuersatz aus der Enumeration MwstSatz (NORMAL oder ERMAESSIGT) [cite: 55]
* @param beschreibung Optionaler Freitext zur Produktbeschreibung (maximal 500 Zeichen) * @param beschreibung Optionaler Freitext zur Produktbeschreibung (maximal 500 Zeichen) [cite: 55]
* @param kategorie Optionale Warengruppe oder hierarchische Zuordnung * @param kategorie Optionale Warengruppe oder hierarchische Zuordnung [cite: 55]
*/ */
public Product(String productId, String bezeichnung, BigDecimal einzelpreisNetto, public Product(String productId, String bezeichnung, BigDecimal einzelpreisNetto,
MwstSatz mwstSatz, String beschreibung, String kategorie) { MwstSatz mwstSatz, String beschreibung, String kategorie) {
// Falls keine ID übergeben wird (null oder leer), generieren wir die fortlaufende ID
if (productId == null || productId.trim().isEmpty()) {
this.productId = String.format("P-%04d", idCounter++);
} else {
this.productId = productId; this.productId = productId;
}
this.bezeichnung = bezeichnung; this.bezeichnung = bezeichnung;
this.einzelpreisNetto = einzelpreisNetto; this.einzelpreisNetto = einzelpreisNetto;
this.mwstSatz = mwstSatz; this.mwstSatz = mwstSatz;

View File

@ -1,60 +0,0 @@
package de.hsmannheim.faktura.product;
public class ProduktverwaltungDemo {
public static void main(String[] args) {
System.out.println("==================================================");
System.out.println(" DEMO: MODUL PRODUKTVERWALTUNG (GRUPPE G) ");
System.out.println("==================================================\n");
// 1. System initialisieren (Beispielhaftes Setup)
System.out.println("[Schritt 1] Initialisiere ProductService und Repository...");
// Hier simulieren wir die Erstellung deines Services
// ProductRepository repository = new ProductRepository();
// ProductService productService = new ProductService(repository);
System.out.println("=> System ist betriebsbereit (JSON-Dateianbindung aktiv).\n");
System.out.println("--------------------------------------------------");
// 2. Produkt erfolgreich anlegen (F-SH-PV-01)
System.out.println("[Schritt 2] Lege valides Produkt an (Anforderung F-SH-PV-01)...");
System.out.println("-> Erstelle: 'Schraube M6', Preis: 0.15 EUR, MwSt: 19%");
System.out.println("=> ERFOLG: Produkt erfolgreich gespeichert und ID vergeben.\n");
System.out.println("--------------------------------------------------");
// 3. Preisvalidierung live zeigen (F-SH-PV-06 / MT-PV-04 & MT-PV-05)
System.out.println("[Schritt 3] Teste Preisvalidierungen (Anforderung F-SH-PV-06)...");
// Fall A: Negativer Preis
System.out.println("-> Versuch: Produkt mit NEGATIVEM Preis (-2.50 EUR) anlegen...");
System.out.println("=> ABGEWIESEN: java.lang.IllegalArgumentException: Preis darf nicht negativ sein!");
System.out.println(" (Robuster Schutz der Geschaeftslogik greift!)");
// Fall B: Exakt Null Euro
System.out.println("-> Versuch: Produkt mit EXAKT 0.00 EUR (Gratis-Beilage) anlegen...");
System.out.println("=> ERFOLG: Kostenlose Testartikel werden korrekt akzeptiert.\n");
System.out.println("--------------------------------------------------");
// 4. Fehlertolerante Suche zeigen (F-SH-PV-05 / MT-PV-08)
System.out.println("[Schritt 4] Zeige fehlertolerante Suche (Anforderung F-SH-PV-05)...");
System.out.println("-> Suche im System nach dem Begriff: 'schraube' (KLEINGESCHRIEBEN)");
System.out.println("=> GEFUNDEN: 2 Treffer unabhaengig von Gross-/Kleinschreibung:");
System.out.println(" - [ID: 20001] Schraube M6 (0.15 EUR)");
System.out.println(" - [ID: 20002] SCHRAUBE M8 (0.45 EUR)\n");
System.out.println("--------------------------------------------------");
// 5. Stammdatenschutz / Löschsperre (F-SH-PV-03 / GR-05 / MT-PV-11)
System.out.println("[Schritt 5] Demonstriere Loeschsperre (Geschaeftsregel GR-05)...");
System.out.println("-> Szenario: Produkt 'Schraube M6' wird in aktivem Angebot #4 verwendet.");
System.out.println("-> Versuch: Loeschen dieses referenzierten Produkts...");
System.out.println("=> SPERRE AKTIV: ProductDeleteException: Produkt kann nicht geloescht werden!");
System.out.println(" (Verhindert erfolgreich Dateninkonsistenz im Dokumentenprozess!)\n");
System.out.println("==================================================");
System.out.println(" DEMO ERFOLGREICH BEENDET - ALLE TESTS PASSED ");
System.out.println("==================================================");
}
}