GR-04: Loeschsperre fuer referenzierte Kunden und Produkte vollstaendig implementiert
parent
9815a352bf
commit
03155e9dd5
|
|
@ -1,23 +1,34 @@
|
||||||
package belegworkflow;
|
package belegworkflow;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
|
import java.math.BigDecimal;
|
||||||
import java.nio.file.*;
|
import java.nio.file.*;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import kundenverwaltung.Kunde;
|
||||||
|
import kundenverwaltung.KundenServiceImpl;
|
||||||
|
import bestandsmanagement.Produkt;
|
||||||
|
import bestandsmanagement.ProduktServiceImpl;
|
||||||
|
|
||||||
public class BelegworkflowService {
|
public class BelegworkflowService {
|
||||||
|
|
||||||
private static final String ANGEBOTE_FILE = "data/angebote.csv";
|
private static final String ANGEBOTE_FILE = "data/angebote.csv";
|
||||||
private static final String RECHNUNGEN_FILE = "data/rechnungen.csv";
|
private static final String ANGEBOTE_POSITIONEN_FILE = "data/angebote_positionen.csv";
|
||||||
|
private static final String RECHNUNGEN_FILE = "data/rechnungen.csv";
|
||||||
|
private static final String RECHNUNGEN_POSITIONEN_FILE = "data/rechnungen_positionen.csv";
|
||||||
|
|
||||||
private List<Angebot> angebote;
|
private List<Angebot> angebote;
|
||||||
private List<Rechnung> rechnungen;
|
private List<Rechnung> rechnungen;
|
||||||
private BelegnummernGenerator generator;
|
private BelegnummernGenerator generator;
|
||||||
|
private KundenServiceImpl kundenService;
|
||||||
|
private ProduktServiceImpl produktService;
|
||||||
|
|
||||||
public BelegworkflowService() throws IOException {
|
public BelegworkflowService() throws IOException {
|
||||||
this.angebote = new ArrayList<>();
|
this.angebote = new ArrayList<>();
|
||||||
this.rechnungen = new ArrayList<>();
|
this.rechnungen = new ArrayList<>();
|
||||||
this.generator = new BelegnummernGenerator();
|
this.generator = new BelegnummernGenerator();
|
||||||
|
this.kundenService = new KundenServiceImpl();
|
||||||
|
this.produktService = new ProduktServiceImpl();
|
||||||
Files.createDirectories(Path.of("data"));
|
Files.createDirectories(Path.of("data"));
|
||||||
ladeAngebote();
|
ladeAngebote();
|
||||||
ladeRechnungen();
|
ladeRechnungen();
|
||||||
|
|
@ -38,6 +49,21 @@ public class BelegworkflowService {
|
||||||
String nr = generator.naechsteAngebotsnummer(LocalDate.now().getYear());
|
String nr = generator.naechsteAngebotsnummer(LocalDate.now().getYear());
|
||||||
Angebot angebot = new Angebot(nr, LocalDate.now(), kundenId, positionen, gueltigBis);
|
Angebot angebot = new Angebot(nr, LocalDate.now(), kundenId, positionen, gueltigBis);
|
||||||
angebote.add(angebot);
|
angebote.add(angebot);
|
||||||
|
|
||||||
|
// Belegreferenz beim Kunden setzen (GR-04)
|
||||||
|
Kunde kunde = kundenService.findeKunde(kundenId);
|
||||||
|
if (kunde != null) {
|
||||||
|
kunde.belegHinzufuegen(nr);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Belegreferenz bei allen Produkten setzen (GR-04)
|
||||||
|
for (Dokumentposition pos : positionen) {
|
||||||
|
Produkt produkt = produktService.findeProdukt(pos.getProduktReferenz());
|
||||||
|
if (produkt != null) {
|
||||||
|
produkt.belegHinzufuegen(nr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
speichereAngebote();
|
speichereAngebote();
|
||||||
System.out.println("Angebot erfolgreich erstellt: " + nr);
|
System.out.println("Angebot erfolgreich erstellt: " + nr);
|
||||||
return angebot;
|
return angebot;
|
||||||
|
|
@ -98,7 +124,7 @@ public class BelegworkflowService {
|
||||||
public List<Angebot> alleAngebote() { return new ArrayList<>(angebote); }
|
public List<Angebot> alleAngebote() { return new ArrayList<>(angebote); }
|
||||||
public List<Rechnung> alleRechnungen() { return new ArrayList<>(rechnungen); }
|
public List<Rechnung> alleRechnungen() { return new ArrayList<>(rechnungen); }
|
||||||
|
|
||||||
public Angebot findeAngebot(String nr) {
|
public Angebot findeAngebot(String nr) {
|
||||||
return angebote.stream().filter(a -> a.getBelegnummer().equals(nr)).findFirst().orElse(null);
|
return angebote.stream().filter(a -> a.getBelegnummer().equals(nr)).findFirst().orElse(null);
|
||||||
}
|
}
|
||||||
public Rechnung findeRechnung(String nr) {
|
public Rechnung findeRechnung(String nr) {
|
||||||
|
|
@ -109,6 +135,7 @@ public class BelegworkflowService {
|
||||||
private void speichereAngebote() {
|
private void speichereAngebote() {
|
||||||
try {
|
try {
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
|
StringBuilder posSb = new StringBuilder();
|
||||||
for (Angebot a : angebote) {
|
for (Angebot a : angebote) {
|
||||||
sb.append(a.getBelegnummer()).append(";")
|
sb.append(a.getBelegnummer()).append(";")
|
||||||
.append(a.getDatum()).append(";")
|
.append(a.getDatum()).append(";")
|
||||||
|
|
@ -118,8 +145,17 @@ public class BelegworkflowService {
|
||||||
.append(a.getSummeNetto()).append(";")
|
.append(a.getSummeNetto()).append(";")
|
||||||
.append(a.getSummeSteuer()).append(";")
|
.append(a.getSummeSteuer()).append(";")
|
||||||
.append(a.getSummeBrutto()).append("\n");
|
.append(a.getSummeBrutto()).append("\n");
|
||||||
|
for (Dokumentposition pos : a.getPositionen()) {
|
||||||
|
posSb.append(a.getBelegnummer()).append(";")
|
||||||
|
.append(pos.getProduktReferenz()).append(";")
|
||||||
|
.append(pos.getBezeichnung()).append(";")
|
||||||
|
.append(pos.getMenge()).append(";")
|
||||||
|
.append(pos.getEinzelpreisNetto()).append(";")
|
||||||
|
.append(pos.getSteuersatz()).append("\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Files.writeString(Path.of(ANGEBOTE_FILE), sb.toString());
|
Files.writeString(Path.of(ANGEBOTE_FILE), sb.toString());
|
||||||
|
Files.writeString(Path.of(ANGEBOTE_POSITIONEN_FILE), posSb.toString());
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
System.err.println("Fehler beim Speichern der Angebote: " + e.getMessage());
|
System.err.println("Fehler beim Speichern der Angebote: " + e.getMessage());
|
||||||
}
|
}
|
||||||
|
|
@ -129,9 +165,7 @@ public class BelegworkflowService {
|
||||||
try {
|
try {
|
||||||
Path path = Path.of(ANGEBOTE_FILE);
|
Path path = Path.of(ANGEBOTE_FILE);
|
||||||
if (!Files.exists(path)) return;
|
if (!Files.exists(path)) return;
|
||||||
// Vereinfachtes Laden - nur Metadaten ohne Positionen
|
for (String zeile : Files.readAllLines(path)) {
|
||||||
List<String> zeilen = Files.readAllLines(path);
|
|
||||||
for (String zeile : zeilen) {
|
|
||||||
if (zeile.isBlank()) continue;
|
if (zeile.isBlank()) continue;
|
||||||
String[] t = zeile.split(";", -1);
|
String[] t = zeile.split(";", -1);
|
||||||
if (t.length < 8) continue;
|
if (t.length < 8) continue;
|
||||||
|
|
@ -140,6 +174,18 @@ public class BelegworkflowService {
|
||||||
a.setStatus(AngebotStatus.valueOf(t[4]));
|
a.setStatus(AngebotStatus.valueOf(t[4]));
|
||||||
angebote.add(a);
|
angebote.add(a);
|
||||||
}
|
}
|
||||||
|
Path posPath = Path.of(ANGEBOTE_POSITIONEN_FILE);
|
||||||
|
if (Files.exists(posPath)) {
|
||||||
|
for (String zeile : Files.readAllLines(posPath)) {
|
||||||
|
if (zeile.isBlank()) continue;
|
||||||
|
String[] t = zeile.split(";", -1);
|
||||||
|
if (t.length < 6) continue;
|
||||||
|
Dokumentposition pos = new Dokumentposition(t[1], t[2],
|
||||||
|
Integer.parseInt(t[3]), new BigDecimal(t[4]), new BigDecimal(t[5]));
|
||||||
|
angebote.stream().filter(a -> a.getBelegnummer().equals(t[0]))
|
||||||
|
.findFirst().ifPresent(a -> a.getPositionen().add(pos));
|
||||||
|
}
|
||||||
|
}
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
System.err.println("Fehler beim Laden der Angebote: " + e.getMessage());
|
System.err.println("Fehler beim Laden der Angebote: " + e.getMessage());
|
||||||
}
|
}
|
||||||
|
|
@ -148,6 +194,7 @@ public class BelegworkflowService {
|
||||||
private void speichereRechnungen() {
|
private void speichereRechnungen() {
|
||||||
try {
|
try {
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
|
StringBuilder posSb = new StringBuilder();
|
||||||
for (Rechnung r : rechnungen) {
|
for (Rechnung r : rechnungen) {
|
||||||
sb.append(r.getBelegnummer()).append(";")
|
sb.append(r.getBelegnummer()).append(";")
|
||||||
.append(r.getDatum()).append(";")
|
.append(r.getDatum()).append(";")
|
||||||
|
|
@ -161,8 +208,17 @@ public class BelegworkflowService {
|
||||||
.append(r.getSummeNetto()).append(";")
|
.append(r.getSummeNetto()).append(";")
|
||||||
.append(r.getSummeSteuer()).append(";")
|
.append(r.getSummeSteuer()).append(";")
|
||||||
.append(r.getSummeBrutto()).append("\n");
|
.append(r.getSummeBrutto()).append("\n");
|
||||||
|
for (Dokumentposition pos : r.getPositionen()) {
|
||||||
|
posSb.append(r.getBelegnummer()).append(";")
|
||||||
|
.append(pos.getProduktReferenz()).append(";")
|
||||||
|
.append(pos.getBezeichnung()).append(";")
|
||||||
|
.append(pos.getMenge()).append(";")
|
||||||
|
.append(pos.getEinzelpreisNetto()).append(";")
|
||||||
|
.append(pos.getSteuersatz()).append("\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Files.writeString(Path.of(RECHNUNGEN_FILE), sb.toString());
|
Files.writeString(Path.of(RECHNUNGEN_FILE), sb.toString());
|
||||||
|
Files.writeString(Path.of(RECHNUNGEN_POSITIONEN_FILE), posSb.toString());
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
System.err.println("Fehler beim Speichern der Rechnungen: " + e.getMessage());
|
System.err.println("Fehler beim Speichern der Rechnungen: " + e.getMessage());
|
||||||
}
|
}
|
||||||
|
|
@ -172,8 +228,7 @@ public class BelegworkflowService {
|
||||||
try {
|
try {
|
||||||
Path path = Path.of(RECHNUNGEN_FILE);
|
Path path = Path.of(RECHNUNGEN_FILE);
|
||||||
if (!Files.exists(path)) return;
|
if (!Files.exists(path)) return;
|
||||||
List<String> zeilen = Files.readAllLines(path);
|
for (String zeile : Files.readAllLines(path)) {
|
||||||
for (String zeile : zeilen) {
|
|
||||||
if (zeile.isBlank()) continue;
|
if (zeile.isBlank()) continue;
|
||||||
String[] t = zeile.split(";", -1);
|
String[] t = zeile.split(";", -1);
|
||||||
if (t.length < 12) continue;
|
if (t.length < 12) continue;
|
||||||
|
|
@ -184,6 +239,18 @@ public class BelegworkflowService {
|
||||||
if (Boolean.parseBoolean(t[8])) r.festschreiben();
|
if (Boolean.parseBoolean(t[8])) r.festschreiben();
|
||||||
rechnungen.add(r);
|
rechnungen.add(r);
|
||||||
}
|
}
|
||||||
|
Path posPath = Path.of(RECHNUNGEN_POSITIONEN_FILE);
|
||||||
|
if (Files.exists(posPath)) {
|
||||||
|
for (String zeile : Files.readAllLines(posPath)) {
|
||||||
|
if (zeile.isBlank()) continue;
|
||||||
|
String[] t = zeile.split(";", -1);
|
||||||
|
if (t.length < 6) continue;
|
||||||
|
Dokumentposition pos = new Dokumentposition(t[1], t[2],
|
||||||
|
Integer.parseInt(t[3]), new BigDecimal(t[4]), new BigDecimal(t[5]));
|
||||||
|
rechnungen.stream().filter(r -> r.getBelegnummer().equals(t[0]))
|
||||||
|
.findFirst().ifPresent(r -> r.getPositionen().add(pos));
|
||||||
|
}
|
||||||
|
}
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
System.err.println("Fehler beim Laden der Rechnungen: " + e.getMessage());
|
System.err.println("Fehler beim Laden der Rechnungen: " + e.getMessage());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ package bestandsmanagement;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
import java.nio.file.*;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class ProduktServiceImpl {
|
public class ProduktServiceImpl {
|
||||||
|
|
@ -14,23 +15,18 @@ public class ProduktServiceImpl {
|
||||||
this.idGenerator = new ProduktIdGenerator();
|
this.idGenerator = new ProduktIdGenerator();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Legt einen neuen Artikel an (F-01, F-02, F-05)
|
|
||||||
public Produkt produktAnlegen(String bezeichnung, BigDecimal nettoEinzelpreis,
|
public Produkt produktAnlegen(String bezeichnung, BigDecimal nettoEinzelpreis,
|
||||||
BigDecimal mehrwertsteuersatz, int bestand, String beschreibung) {
|
BigDecimal mehrwertsteuersatz, int bestand, String beschreibung) {
|
||||||
// Negativer Bestand wird abgelehnt (F-09)
|
|
||||||
if (bestand < 0) {
|
if (bestand < 0) {
|
||||||
System.out.println("Fehler: Negativer Lagerbestand ist nicht erlaubt.");
|
System.out.println("Fehler: Negativer Lagerbestand ist nicht erlaubt.");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
Produkt produkt = new Produkt("TEMP", bezeichnung, nettoEinzelpreis,
|
Produkt produkt = new Produkt("TEMP", bezeichnung, nettoEinzelpreis,
|
||||||
mehrwertsteuersatz, bestand, beschreibung);
|
mehrwertsteuersatz, bestand, beschreibung);
|
||||||
|
|
||||||
if (!produkt.validiereFelder()) {
|
if (!produkt.validiereFelder()) {
|
||||||
System.out.println("Fehler: Alle Pflichtfelder muessen ausgefuellt sein.");
|
System.out.println("Fehler: Alle Pflichtfelder muessen ausgefuellt sein.");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
String id = idGenerator.naechsteProduktId();
|
String id = idGenerator.naechsteProduktId();
|
||||||
Produkt neuesProdukt = new Produkt(id, bezeichnung, nettoEinzelpreis,
|
Produkt neuesProdukt = new Produkt(id, bezeichnung, nettoEinzelpreis,
|
||||||
mehrwertsteuersatz, bestand, beschreibung);
|
mehrwertsteuersatz, bestand, beschreibung);
|
||||||
|
|
@ -39,7 +35,6 @@ public class ProduktServiceImpl {
|
||||||
return neuesProdukt;
|
return neuesProdukt;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Bearbeitet einen bestehenden Artikel (F-03, F-04)
|
|
||||||
public boolean produktBearbeiten(String produktId, String bezeichnung,
|
public boolean produktBearbeiten(String produktId, String bezeichnung,
|
||||||
BigDecimal nettoEinzelpreis, BigDecimal mehrwertsteuersatz,
|
BigDecimal nettoEinzelpreis, BigDecimal mehrwertsteuersatz,
|
||||||
int bestand, String beschreibung) {
|
int bestand, String beschreibung) {
|
||||||
|
|
@ -48,30 +43,24 @@ public class ProduktServiceImpl {
|
||||||
System.out.println("Fehler: Artikel mit ID " + produktId + " nicht gefunden.");
|
System.out.println("Fehler: Artikel mit ID " + produktId + " nicht gefunden.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Negativer Bestand wird abgelehnt (F-09)
|
|
||||||
if (bestand < 0) {
|
if (bestand < 0) {
|
||||||
System.out.println("Fehler: Negativer Lagerbestand ist nicht erlaubt.");
|
System.out.println("Fehler: Negativer Lagerbestand ist nicht erlaubt.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
produkt.setBezeichnung(bezeichnung);
|
produkt.setBezeichnung(bezeichnung);
|
||||||
produkt.setNettoEinzelpreis(nettoEinzelpreis);
|
produkt.setNettoEinzelpreis(nettoEinzelpreis);
|
||||||
produkt.setMehrwertsteuersatz(mehrwertsteuersatz);
|
produkt.setMehrwertsteuersatz(mehrwertsteuersatz);
|
||||||
produkt.setBestand(bestand);
|
produkt.setBestand(bestand);
|
||||||
produkt.setBeschreibung(beschreibung);
|
produkt.setBeschreibung(beschreibung);
|
||||||
|
|
||||||
if (!produkt.validiereFelder()) {
|
if (!produkt.validiereFelder()) {
|
||||||
System.out.println("Fehler: Alle Pflichtfelder muessen ausgefuellt sein.");
|
System.out.println("Fehler: Alle Pflichtfelder muessen ausgefuellt sein.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
repository.aktualisieren(produkt);
|
repository.aktualisieren(produkt);
|
||||||
System.out.println("Artikel erfolgreich aktualisiert: " + produkt);
|
System.out.println("Artikel erfolgreich aktualisiert: " + produkt);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Löscht einen Artikel mit Integritätsprüfung (F-10, F-11)
|
|
||||||
public boolean produktLoeschen(String produktId) {
|
public boolean produktLoeschen(String produktId) {
|
||||||
Produkt produkt = repository.findeNachId(produktId);
|
Produkt produkt = repository.findeNachId(produktId);
|
||||||
if (produkt == null) {
|
if (produkt == null) {
|
||||||
|
|
@ -79,9 +68,9 @@ public class ProduktServiceImpl {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!produkt.getBelegReferenzen().isEmpty()) {
|
// Direkt in CSV-Dateien prüfen (GR-04)
|
||||||
System.out.println("Fehler: Artikel kann nicht geloescht werden, da er in " +
|
if (istProduktInBelegReferenziert(produktId)) {
|
||||||
produkt.getBelegReferenzen().size() + " Beleg(en) referenziert wird.");
|
System.out.println("Fehler: Artikel ist in einem Beleg referenziert und kann nicht geloescht werden.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -90,17 +79,35 @@ public class ProduktServiceImpl {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Gibt alle Artikel zurück (F-06)
|
private boolean istProduktInBelegReferenziert(String produktId) {
|
||||||
|
try {
|
||||||
|
String[] positionenDateien = {
|
||||||
|
"data/angebote_positionen.csv",
|
||||||
|
"data/rechnungen_positionen.csv"
|
||||||
|
};
|
||||||
|
for (String datei : positionenDateien) {
|
||||||
|
Path path = Path.of(datei);
|
||||||
|
if (Files.exists(path)) {
|
||||||
|
for (String zeile : Files.readAllLines(path)) {
|
||||||
|
String[] t = zeile.split(";", -1);
|
||||||
|
if (t.length >= 2 && t[1].equals(produktId)) return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
System.err.println("Warnung: Belegpruefung konnte nicht durchgefuehrt werden.");
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public List<Produkt> alleProdukte() {
|
public List<Produkt> alleProdukte() {
|
||||||
return repository.alleProdukte();
|
return repository.alleProdukte();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sucht Artikel nach Bezeichnung oder ID (F-07)
|
|
||||||
public List<Produkt> sucheNachBezeichnung(String suchbegriff) {
|
public List<Produkt> sucheNachBezeichnung(String suchbegriff) {
|
||||||
return repository.sucheNachBezeichnung(suchbegriff);
|
return repository.sucheNachBezeichnung(suchbegriff);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Gibt einen Artikel anhand der ID zurück
|
|
||||||
public Produkt findeProdukt(String produktId) {
|
public Produkt findeProdukt(String produktId) {
|
||||||
return repository.findeNachId(produktId);
|
return repository.findeNachId(produktId);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
package kundenverwaltung;
|
package kundenverwaltung;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.nio.file.*;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class KundenServiceImpl {
|
public class KundenServiceImpl {
|
||||||
|
|
@ -13,18 +14,13 @@ public class KundenServiceImpl {
|
||||||
this.idGenerator = new KundenIdGenerator();
|
this.idGenerator = new KundenIdGenerator();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Legt einen neuen Kunden an (F-01, F-02, F-03, F-04)
|
|
||||||
public Kunde kundeAnlegen(String name, String strasse, String plz, String ort,
|
public Kunde kundeAnlegen(String name, String strasse, String plz, String ort,
|
||||||
String steuerNummer, String email, String telefon) {
|
String steuerNummer, String email, String telefon) {
|
||||||
Kunde kunde = new Kunde("TEMP", name, strasse, plz, ort, steuerNummer, email, telefon);
|
Kunde kunde = new Kunde("TEMP", name, strasse, plz, ort, steuerNummer, email, telefon);
|
||||||
|
|
||||||
// Pflichtfeldprüfung (F-03)
|
|
||||||
if (!kunde.validiereFelder()) {
|
if (!kunde.validiereFelder()) {
|
||||||
System.out.println("Fehler: Alle Pflichtfelder müssen ausgefüllt sein.");
|
System.out.println("Fehler: Alle Pflichtfelder müssen ausgefüllt sein.");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ID vergeben (F-02)
|
|
||||||
String id = idGenerator.naechsteKundenId();
|
String id = idGenerator.naechsteKundenId();
|
||||||
Kunde neuerKunde = new Kunde(id, name, strasse, plz, ort, steuerNummer, email, telefon);
|
Kunde neuerKunde = new Kunde(id, name, strasse, plz, ort, steuerNummer, email, telefon);
|
||||||
repository.speichern(neuerKunde);
|
repository.speichern(neuerKunde);
|
||||||
|
|
@ -32,7 +28,6 @@ public class KundenServiceImpl {
|
||||||
return neuerKunde;
|
return neuerKunde;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Bearbeitet einen bestehenden Kunden (F-05, F-06, F-07)
|
|
||||||
public boolean kundeBearbeiten(String kundenId, String name, String strasse, String plz,
|
public boolean kundeBearbeiten(String kundenId, String name, String strasse, String plz,
|
||||||
String ort, String steuerNummer, String email, String telefon) {
|
String ort, String steuerNummer, String email, String telefon) {
|
||||||
Kunde kunde = repository.findeNachId(kundenId);
|
Kunde kunde = repository.findeNachId(kundenId);
|
||||||
|
|
@ -40,7 +35,6 @@ public class KundenServiceImpl {
|
||||||
System.out.println("Fehler: Kunde mit ID " + kundenId + " nicht gefunden.");
|
System.out.println("Fehler: Kunde mit ID " + kundenId + " nicht gefunden.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
kunde.setName(name);
|
kunde.setName(name);
|
||||||
kunde.setStrasse(strasse);
|
kunde.setStrasse(strasse);
|
||||||
kunde.setPlz(plz);
|
kunde.setPlz(plz);
|
||||||
|
|
@ -48,19 +42,15 @@ public class KundenServiceImpl {
|
||||||
kunde.setSteuerNummer(steuerNummer);
|
kunde.setSteuerNummer(steuerNummer);
|
||||||
kunde.setEmail(email);
|
kunde.setEmail(email);
|
||||||
kunde.setTelefon(telefon);
|
kunde.setTelefon(telefon);
|
||||||
|
|
||||||
// Pflichtfeldprüfung nach Änderung (F-06)
|
|
||||||
if (!kunde.validiereFelder()) {
|
if (!kunde.validiereFelder()) {
|
||||||
System.out.println("Fehler: Alle Pflichtfelder müssen ausgefüllt sein.");
|
System.out.println("Fehler: Alle Pflichtfelder müssen ausgefüllt sein.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
repository.aktualisieren(kunde);
|
repository.aktualisieren(kunde);
|
||||||
System.out.println("Kunde erfolgreich aktualisiert: " + kunde);
|
System.out.println("Kunde erfolgreich aktualisiert: " + kunde);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Löscht einen Kunden mit Integritätsprüfung (F-11, F-12, GR-04)
|
|
||||||
public boolean kundeLoschen(String kundenId) {
|
public boolean kundeLoschen(String kundenId) {
|
||||||
Kunde kunde = repository.findeNachId(kundenId);
|
Kunde kunde = repository.findeNachId(kundenId);
|
||||||
if (kunde == null) {
|
if (kunde == null) {
|
||||||
|
|
@ -68,10 +58,9 @@ public class KundenServiceImpl {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Referenzielle Integrität prüfen (GR-04)
|
// Direkt in CSV-Dateien prüfen (GR-04)
|
||||||
if (!kunde.getBelegReferenzen().isEmpty()) {
|
if (istKundeInBelegReferenziert(kundenId)) {
|
||||||
System.out.println("Fehler: Kunde kann nicht gelöscht werden, da er in " +
|
System.out.println("Fehler: Kunde ist in einem Beleg referenziert und kann nicht geloescht werden.");
|
||||||
kunde.getBelegReferenzen().size() + " Beleg(en) referenziert wird.");
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -80,22 +69,41 @@ public class KundenServiceImpl {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Gibt alle Kunden zurück (F-08)
|
private boolean istKundeInBelegReferenziert(String kundenId) {
|
||||||
|
try {
|
||||||
|
Path angebotePath = Path.of("data/angebote.csv");
|
||||||
|
Path rechnungenPath = Path.of("data/rechnungen.csv");
|
||||||
|
|
||||||
|
if (Files.exists(angebotePath)) {
|
||||||
|
for (String zeile : Files.readAllLines(angebotePath)) {
|
||||||
|
String[] teile = zeile.split(";", -1);
|
||||||
|
if (teile.length >= 3 && teile[2].equals(kundenId)) return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (Files.exists(rechnungenPath)) {
|
||||||
|
for (String zeile : Files.readAllLines(rechnungenPath)) {
|
||||||
|
String[] teile = zeile.split(";", -1);
|
||||||
|
if (teile.length >= 3 && teile[2].equals(kundenId)) return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
System.err.println("Warnung: Belegpruefung konnte nicht durchgefuehrt werden.");
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public List<Kunde> alleKunden() {
|
public List<Kunde> alleKunden() {
|
||||||
return repository.alleKunden();
|
return repository.alleKunden();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sucht Kunden nach Name (F-09)
|
|
||||||
public List<Kunde> sucheNachName(String suchbegriff) {
|
public List<Kunde> sucheNachName(String suchbegriff) {
|
||||||
return repository.sucheNachName(suchbegriff);
|
return repository.sucheNachName(suchbegriff);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Gibt einen Kunden anhand der ID zurück (F-10)
|
|
||||||
public Kunde findeKunde(String kundenId) {
|
public Kunde findeKunde(String kundenId) {
|
||||||
return repository.findeNachId(kundenId);
|
return repository.findeNachId(kundenId);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Zeigt die Transaktionshistorie eines Kunden (F-13)
|
|
||||||
public void zeigeTransaktionshistorie(String kundenId) {
|
public void zeigeTransaktionshistorie(String kundenId) {
|
||||||
Kunde kunde = repository.findeNachId(kundenId);
|
Kunde kunde = repository.findeNachId(kundenId);
|
||||||
if (kunde == null) {
|
if (kunde == null) {
|
||||||
|
|
@ -111,4 +119,4 @@ public class KundenServiceImpl {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -153,6 +153,10 @@ public class KundenPanel extends JPanel {
|
||||||
JOptionPane.showMessageDialog(this,
|
JOptionPane.showMessageDialog(this,
|
||||||
"Kunde wurde erfolgreich geloescht.",
|
"Kunde wurde erfolgreich geloescht.",
|
||||||
"Erfolg", JOptionPane.INFORMATION_MESSAGE);
|
"Erfolg", JOptionPane.INFORMATION_MESSAGE);
|
||||||
|
} else {
|
||||||
|
JOptionPane.showMessageDialog(this,
|
||||||
|
"Kunde kann nicht geloescht werden, da er in einem Beleg referenziert wird.",
|
||||||
|
"Loeschen nicht moeglich", JOptionPane.ERROR_MESSAGE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -158,6 +158,10 @@ public class ProduktPanel extends JPanel {
|
||||||
JOptionPane.showMessageDialog(this,
|
JOptionPane.showMessageDialog(this,
|
||||||
"Artikel wurde erfolgreich geloescht.",
|
"Artikel wurde erfolgreich geloescht.",
|
||||||
"Erfolg", JOptionPane.INFORMATION_MESSAGE);
|
"Erfolg", JOptionPane.INFORMATION_MESSAGE);
|
||||||
|
} else {
|
||||||
|
JOptionPane.showMessageDialog(this,
|
||||||
|
"Artikel kann nicht geloescht werden, da er in einem Beleg referenziert wird.",
|
||||||
|
"Loeschen nicht moeglich", JOptionPane.ERROR_MESSAGE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue