SE1_Team_3/src/main/java/kundenverwaltung/Main.java

359 lines
16 KiB
Java

package kundenverwaltung;
import bestandsmanagement.Produkt;
import bestandsmanagement.ProduktServiceImpl;
import belegworkflow.*;
import java.io.IOException;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
private static KundenServiceImpl kundenService;
private static ProduktServiceImpl produktService;
private static BelegworkflowService belegService;
private static Scanner scanner = new Scanner(System.in);
public static void main(String[] args) {
try {
kundenService = new KundenServiceImpl();
produktService = new ProduktServiceImpl();
belegService = new BelegworkflowService();
System.out.println("===========================================");
System.out.println(" Fakturierungsanwendung - Team 3");
System.out.println("===========================================");
hauptmenue();
} catch (IOException e) {
System.err.println("Fehler beim Starten: " + e.getMessage());
}
}
private static void hauptmenue() {
while (true) {
System.out.println("\n=== HAUPTMENUE ===");
System.out.println("1. Kundenverwaltung");
System.out.println("2. Bestandsmanagement");
System.out.println("3. Belegworkflow");
System.out.println("0. Beenden");
System.out.print("Auswahl: ");
switch (scanner.nextLine().trim()) {
case "1" -> kundenmenue();
case "2" -> produktmenue();
case "3" -> belegmenue();
case "0" -> { System.out.println("Programm beendet."); return; }
default -> System.out.println("Ungueltige Eingabe.");
}
}
}
// ─── KUNDENVERWALTUNG ───────────────────────────────────────────
private static void kundenmenue() {
while (true) {
System.out.println("\n--- KUNDENVERWALTUNG ---");
System.out.println("1. Kunde anlegen");
System.out.println("2. Alle Kunden anzeigen");
System.out.println("3. Kunde suchen");
System.out.println("4. Kunde bearbeiten");
System.out.println("5. Kunde loeschen");
System.out.println("6. Transaktionshistorie");
System.out.println("0. Zurueck");
System.out.print("Auswahl: ");
switch (scanner.nextLine().trim()) {
case "1" -> kundeAnlegen();
case "2" -> alleKundenAnzeigen();
case "3" -> kundenSuchen();
case "4" -> kundeBearbeiten();
case "5" -> kundeLoschen();
case "6" -> transaktionshistorie();
case "0" -> { return; }
default -> System.out.println("Ungueltige Eingabe.");
}
}
}
private static void kundeAnlegen() {
System.out.println("\n--- KUNDE ANLEGEN ---");
System.out.print("Name / Firmenname: ");
String name = scanner.nextLine();
System.out.print("Strasse und Hausnummer: ");
String strasse = scanner.nextLine();
System.out.print("PLZ: ");
String plz = scanner.nextLine();
System.out.print("Ort: ");
String ort = scanner.nextLine();
System.out.print("Steuernummer / USt-IdNr.: ");
String steuerNummer = scanner.nextLine();
System.out.print("E-Mail: ");
String email = scanner.nextLine();
System.out.print("Telefon: ");
String telefon = scanner.nextLine();
kundenService.kundeAnlegen(name, strasse, plz, ort, steuerNummer, email, telefon);
}
private static void alleKundenAnzeigen() {
System.out.println("\n--- ALLE KUNDEN ---");
List<Kunde> kunden = kundenService.alleKunden();
if (kunden.isEmpty()) { System.out.println("Keine Kunden vorhanden."); return; }
kunden.forEach(System.out::println);
System.out.println("Gesamt: " + kunden.size() + " Kunde(n).");
}
private static void kundenSuchen() {
System.out.println("\n--- KUNDE SUCHEN ---");
System.out.print("Suchbegriff (Name): ");
List<Kunde> ergebnis = kundenService.sucheNachName(scanner.nextLine());
if (ergebnis.isEmpty()) { System.out.println("Keine Kunden gefunden."); return; }
ergebnis.forEach(System.out::println);
}
private static void kundeBearbeiten() {
System.out.println("\n--- KUNDE BEARBEITEN ---");
System.out.print("Kunden-ID: ");
String id = scanner.nextLine();
Kunde kunde = kundenService.findeKunde(id);
if (kunde == null) { System.out.println("Kunde nicht gefunden."); return; }
System.out.println("Aktuell: " + kunde);
System.out.print("Name [" + kunde.getName() + "]: ");
String name = scanner.nextLine();
if (name.isBlank()) name = kunde.getName();
System.out.print("Strasse [" + kunde.getStrasse() + "]: ");
String strasse = scanner.nextLine();
if (strasse.isBlank()) strasse = kunde.getStrasse();
System.out.print("PLZ [" + kunde.getPlz() + "]: ");
String plz = scanner.nextLine();
if (plz.isBlank()) plz = kunde.getPlz();
System.out.print("Ort [" + kunde.getOrt() + "]: ");
String ort = scanner.nextLine();
if (ort.isBlank()) ort = kunde.getOrt();
System.out.print("Steuernummer [" + kunde.getSteuerNummer() + "]: ");
String steuerNummer = scanner.nextLine();
if (steuerNummer.isBlank()) steuerNummer = kunde.getSteuerNummer();
System.out.print("E-Mail [" + kunde.getEmail() + "]: ");
String email = scanner.nextLine();
if (email.isBlank()) email = kunde.getEmail();
System.out.print("Telefon [" + kunde.getTelefon() + "]: ");
String telefon = scanner.nextLine();
if (telefon.isBlank()) telefon = kunde.getTelefon();
kundenService.kundeBearbeiten(id, name, strasse, plz, ort, steuerNummer, email, telefon);
}
private static void kundeLoschen() {
System.out.println("\n--- KUNDE LOESCHEN ---");
System.out.print("Kunden-ID: ");
kundenService.kundeLoschen(scanner.nextLine());
}
private static void transaktionshistorie() {
System.out.println("\n--- TRANSAKTIONSHISTORIE ---");
System.out.print("Kunden-ID: ");
kundenService.zeigeTransaktionshistorie(scanner.nextLine());
}
// ─── BESTANDSMANAGEMENT ─────────────────────────────────────────
private static void produktmenue() {
while (true) {
System.out.println("\n--- BESTANDSMANAGEMENT ---");
System.out.println("1. Artikel anlegen");
System.out.println("2. Alle Artikel anzeigen");
System.out.println("3. Artikel suchen");
System.out.println("4. Artikel bearbeiten");
System.out.println("5. Artikel loeschen");
System.out.println("0. Zurueck");
System.out.print("Auswahl: ");
switch (scanner.nextLine().trim()) {
case "1" -> artikelAnlegen();
case "2" -> alleArtikelAnzeigen();
case "3" -> artikelSuchen();
case "4" -> artikelBearbeiten();
case "5" -> artikelLoeschen();
case "0" -> { return; }
default -> System.out.println("Ungueltige Eingabe.");
}
}
}
private static void artikelAnlegen() {
System.out.println("\n--- ARTIKEL ANLEGEN ---");
System.out.print("Bezeichnung: ");
String bezeichnung = scanner.nextLine();
System.out.print("Netto-Einzelpreis (z.B. 19.99): ");
BigDecimal preis = new BigDecimal(scanner.nextLine().replace(",", "."));
System.out.print("Mehrwertsteuersatz (z.B. 0.19 fuer 19%): ");
BigDecimal mwst = new BigDecimal(scanner.nextLine().replace(",", "."));
System.out.print("Lagerbestand: ");
int bestand = Integer.parseInt(scanner.nextLine().trim());
System.out.print("Beschreibung (optional, Enter ueberspringen): ");
String beschreibung = scanner.nextLine();
if (beschreibung.isBlank()) beschreibung = null;
produktService.produktAnlegen(bezeichnung, preis, mwst, bestand, beschreibung);
}
private static void alleArtikelAnzeigen() {
System.out.println("\n--- ALLE ARTIKEL ---");
List<Produkt> produkte = produktService.alleProdukte();
if (produkte.isEmpty()) { System.out.println("Keine Artikel vorhanden."); return; }
produkte.forEach(System.out::println);
System.out.println("Gesamt: " + produkte.size() + " Artikel.");
}
private static void artikelSuchen() {
System.out.println("\n--- ARTIKEL SUCHEN ---");
System.out.print("Suchbegriff (Bezeichnung): ");
List<Produkt> ergebnis = produktService.sucheNachBezeichnung(scanner.nextLine());
if (ergebnis.isEmpty()) { System.out.println("Keine Artikel gefunden."); return; }
ergebnis.forEach(System.out::println);
}
private static void artikelBearbeiten() {
System.out.println("\n--- ARTIKEL BEARBEITEN ---");
System.out.print("Artikel-ID: ");
String id = scanner.nextLine();
Produkt produkt = produktService.findeProdukt(id);
if (produkt == null) { System.out.println("Artikel nicht gefunden."); return; }
System.out.println("Aktuell: " + produkt);
System.out.print("Bezeichnung [" + produkt.getBezeichnung() + "]: ");
String bezeichnung = scanner.nextLine();
if (bezeichnung.isBlank()) bezeichnung = produkt.getBezeichnung();
System.out.print("Netto-Einzelpreis [" + produkt.getNettoEinzelpreis() + "]: ");
String preisStr = scanner.nextLine();
BigDecimal preis = preisStr.isBlank() ? produkt.getNettoEinzelpreis() : new BigDecimal(preisStr.replace(",", "."));
System.out.print("Mehrwertsteuersatz [" + produkt.getMehrwertsteuersatz() + "]: ");
String mwstStr = scanner.nextLine();
BigDecimal mwst = mwstStr.isBlank() ? produkt.getMehrwertsteuersatz() : new BigDecimal(mwstStr.replace(",", "."));
System.out.print("Lagerbestand [" + produkt.getBestand() + "]: ");
String bestandStr = scanner.nextLine();
int bestand = bestandStr.isBlank() ? produkt.getBestand() : Integer.parseInt(bestandStr.trim());
System.out.print("Beschreibung [" + produkt.getBeschreibung() + "]: ");
String beschreibung = scanner.nextLine();
if (beschreibung.isBlank()) beschreibung = produkt.getBeschreibung();
produktService.produktBearbeiten(id, bezeichnung, preis, mwst, bestand, beschreibung);
}
private static void artikelLoeschen() {
System.out.println("\n--- ARTIKEL LOESCHEN ---");
System.out.print("Artikel-ID: ");
produktService.produktLoeschen(scanner.nextLine());
}
// ─── BELEGWORKFLOW ──────────────────────────────────────────────
private static void belegmenue() {
while (true) {
System.out.println("\n--- BELEGWORKFLOW ---");
System.out.println("1. Angebot erstellen");
System.out.println("2. Alle Angebote anzeigen");
System.out.println("3. Rechnung aus Angebot erstellen");
System.out.println("4. Alle Rechnungen anzeigen");
System.out.println("5. Rechnung festschreiben");
System.out.println("0. Zurueck");
System.out.print("Auswahl: ");
switch (scanner.nextLine().trim()) {
case "1" -> angebotErstellen();
case "2" -> alleAngeboteAnzeigen();
case "3" -> rechnungAusAngebot();
case "4" -> alleRechnungenAnzeigen();
case "5" -> rechnungFestschreiben();
case "0" -> { return; }
default -> System.out.println("Ungueltige Eingabe.");
}
}
}
private static void angebotErstellen() {
System.out.println("\n--- ANGEBOT ERSTELLEN ---");
System.out.print("Kunden-ID: ");
String kundenId = scanner.nextLine();
List<Dokumentposition> positionen = new ArrayList<>();
while (true) {
System.out.println("Position hinzufuegen (Enter zum Beenden):");
System.out.print("Produkt-ID (oder Enter zum Beenden): ");
String produktId = scanner.nextLine();
if (produktId.isBlank()) break;
Produkt produkt = produktService.findeProdukt(produktId);
if (produkt == null) {
System.out.println("Produkt nicht gefunden.");
continue;
}
System.out.print("Menge: ");
int menge = Integer.parseInt(scanner.nextLine().trim());
positionen.add(new Dokumentposition(
produkt.getProduktId(),
produkt.getBezeichnung(),
menge,
produkt.getNettoEinzelpreis(),
produkt.getMehrwertsteuersatz()
));
System.out.println("Position hinzugefuegt: " + produkt.getBezeichnung());
}
if (positionen.isEmpty()) {
System.out.println("Fehler: Mindestens eine Position erforderlich.");
return;
}
System.out.print("Gueltig bis (YYYY-MM-DD): ");
LocalDate gueltigBis = LocalDate.parse(scanner.nextLine());
belegService.erstelleAngebot(kundenId, positionen, gueltigBis);
}
private static void alleAngeboteAnzeigen() {
System.out.println("\n--- ALLE ANGEBOTE ---");
List<Angebot> angebote = belegService.alleAngebote();
if (angebote.isEmpty()) { System.out.println("Keine Angebote vorhanden."); return; }
angebote.forEach(a -> System.out.println(a.getBelegnummer() + " | Kunde: " +
a.getKundenReferenz() + " | Status: " + a.getStatus()));
}
private static void rechnungAusAngebot() {
System.out.println("\n--- RECHNUNG AUS ANGEBOT ---");
System.out.print("Angebotsnummer: ");
String angebotsNr = scanner.nextLine();
System.out.print("Rechnungsdatum (YYYY-MM-DD): ");
LocalDate rechnungsdatum = LocalDate.parse(scanner.nextLine());
System.out.print("Leistungsdatum (YYYY-MM-DD): ");
LocalDate leistungsdatum = LocalDate.parse(scanner.nextLine());
System.out.print("Zahlungsziel (YYYY-MM-DD): ");
LocalDate zahlungsziel = LocalDate.parse(scanner.nextLine());
belegService.erstelleRechnungAusAngebot(angebotsNr, rechnungsdatum, leistungsdatum, zahlungsziel);
}
private static void alleRechnungenAnzeigen() {
System.out.println("\n--- ALLE RECHNUNGEN ---");
List<Rechnung> rechnungen = belegService.alleRechnungen();
if (rechnungen.isEmpty()) { System.out.println("Keine Rechnungen vorhanden."); return; }
rechnungen.forEach(r -> System.out.println(r.getBelegnummer() + " | Kunde: " +
r.getKundenReferenz() + " | Status: " + r.getStatus() +
" | Festgeschrieben: " + r.isFestgeschrieben()));
}
private static void rechnungFestschreiben() {
System.out.println("\n--- RECHNUNG FESTSCHREIBEN ---");
System.out.print("Rechnungsnummer: ");
belegService.finalisiereRechnung(scanner.nextLine());
}
}