359 lines
16 KiB
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());
|
|
}
|
|
} |