lololol
This commit is contained in:
parent
3255c9b195
commit
f4e1012d69
4 changed files with 194 additions and 159 deletions
|
|
@ -6,18 +6,12 @@ import de.antco.projekt.model.Vehicle;
|
||||||
import de.antco.projekt.model.WorkOrderDetails;
|
import de.antco.projekt.model.WorkOrderDetails;
|
||||||
import de.antco.projekt.model.WorkOrderItem;
|
import de.antco.projekt.model.WorkOrderItem;
|
||||||
import de.antco.projekt.service.WorkshopService;
|
import de.antco.projekt.service.WorkshopService;
|
||||||
import de.antco.projekt.importers.IImporter;
|
|
||||||
import de.antco.projekt.importers.CsvPersonImporter;
|
|
||||||
import de.antco.projekt.exporters.IExporter;
|
|
||||||
import de.antco.projekt.exporters.CsvPersonExporter;
|
|
||||||
|
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.*;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Scanner;
|
|
||||||
|
|
||||||
public class ConsoleUi {
|
public class ConsoleUi {
|
||||||
|
|
||||||
private final WorkshopService service;
|
private final WorkshopService service;
|
||||||
private final Scanner scanner = new Scanner(System.in);
|
private final Scanner scanner = new Scanner(System.in);
|
||||||
|
|
||||||
|
|
@ -27,202 +21,243 @@ public class ConsoleUi {
|
||||||
|
|
||||||
public void start() {
|
public void start() {
|
||||||
boolean running = true;
|
boolean running = true;
|
||||||
|
|
||||||
while (running) {
|
while (running) {
|
||||||
printMenu();
|
showMenu();
|
||||||
String input = scanner.nextLine();
|
String choice = scanner.nextLine().trim();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
switch (input) {
|
switch (choice) {
|
||||||
case "1" -> addPerson();
|
case "1" -> addPerson();
|
||||||
case "2" -> listPersons();
|
case "2" -> showPersons();
|
||||||
case "3" -> addVehicle();
|
case "3" -> addVehicle();
|
||||||
case "4" -> listVehiclesOfPerson();
|
case "4" -> showVehiclesOfPerson();
|
||||||
case "5" -> createWorkOrder();
|
case "5" -> createWorkOrder();
|
||||||
case "6" -> listWorkOrders();
|
case "6" -> showWorkOrders();
|
||||||
case "7" -> importPersons();
|
|
||||||
case "8" -> exportPersons();
|
|
||||||
case "0" -> running = false;
|
case "0" -> running = false;
|
||||||
default -> System.out.println("Unbekannte Auswahl");
|
default -> System.out.println("Ungültige Eingabe.");
|
||||||
}
|
}
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
System.out.println("Fehler: " + e.getMessage());
|
System.out.println("Ein Fehler ist aufgetreten: " + e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
System.out.println("Bis dann");
|
|
||||||
|
System.out.println("Programm beendet.");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void printMenu() {
|
private void showMenu() {
|
||||||
System.out.println();
|
System.out.println("\n=== Werkstatt Menü ===");
|
||||||
System.out.println("==== Werkstatt Menü ====");
|
|
||||||
System.out.println("1) Kunde anlegen");
|
System.out.println("1) Kunde anlegen");
|
||||||
System.out.println("2) Kunden anzeigen");
|
System.out.println("2) Kunden anzeigen");
|
||||||
System.out.println("3) Fahrzeug anlegen");
|
System.out.println("3) Fahrzeug anlegen");
|
||||||
System.out.println("4) Fahrzeuge einer Person");
|
System.out.println("4) Fahrzeuge einer Person anzeigen");
|
||||||
System.out.println("5) Werkstattvorgang anlegen");
|
System.out.println("5) Werkstattvorgang anlegen");
|
||||||
System.out.println("6) Vorgänge anzeigen");
|
System.out.println("6) Vorgänge anzeigen");
|
||||||
System.out.println("7) Personen importieren (CSV)");
|
System.out.println("0) Beenden");
|
||||||
System.out.println("8) Personen exportieren (CSV)");
|
|
||||||
System.out.println("0) Ende");
|
|
||||||
System.out.print("Auswahl: ");
|
System.out.print("Auswahl: ");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addPerson() throws SQLException {
|
// ---------------- Eingabe-Hilfen ----------------
|
||||||
System.out.print("Name: ");
|
|
||||||
String name = scanner.nextLine();
|
|
||||||
System.out.print("Telefon: ");
|
|
||||||
String phone = scanner.nextLine();
|
|
||||||
Person person = service.createPerson(name, phone);
|
|
||||||
System.out.println("Kunde gespeichert mit ID " + person.getId());
|
|
||||||
}
|
|
||||||
|
|
||||||
private void listPersons() throws SQLException {
|
private int readInt(String text) {
|
||||||
List<Person> persons = service.listPersons();
|
while (true) {
|
||||||
if (persons.isEmpty()) {
|
System.out.print(text);
|
||||||
System.out.println("Keine Personen da");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
persons.forEach(p -> System.out.println(p.toString()));
|
|
||||||
}
|
|
||||||
|
|
||||||
private void addVehicle() throws SQLException {
|
|
||||||
System.out.print("Personen ID: ");
|
|
||||||
int personId = parseInt(scanner.nextLine());
|
|
||||||
Person owner = service.findPerson(personId);
|
|
||||||
if (owner == null) {
|
|
||||||
System.out.println("Person nicht gefunden");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
System.out.print("Hersteller: ");
|
|
||||||
String brand = scanner.nextLine();
|
|
||||||
System.out.print("Modell: ");
|
|
||||||
String model = scanner.nextLine();
|
|
||||||
System.out.print("Kennzeichen: ");
|
|
||||||
String plate = scanner.nextLine();
|
|
||||||
Vehicle vehicle = service.createVehicle(personId, brand, model, plate);
|
|
||||||
System.out.println("Fahrzeug gespeichert mit ID " + vehicle.getId());
|
|
||||||
}
|
|
||||||
|
|
||||||
private void listVehiclesOfPerson() throws SQLException {
|
|
||||||
System.out.print("Personen ID: ");
|
|
||||||
int personId = parseInt(scanner.nextLine());
|
|
||||||
Person owner = service.findPerson(personId);
|
|
||||||
if (owner == null) {
|
|
||||||
System.out.println("Person nicht gefunden");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
List<Vehicle> vehicles = service.listVehicles(personId);
|
|
||||||
System.out.println("Fahrzeuge von " + owner.getName() + ":");
|
|
||||||
if (vehicles.isEmpty()) {
|
|
||||||
System.out.println("Keine Einträge");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
vehicles.forEach(v -> System.out.println(v.toString()));
|
|
||||||
}
|
|
||||||
|
|
||||||
private void createWorkOrder() throws SQLException {
|
|
||||||
System.out.print("Fahrzeug ID: ");
|
|
||||||
int vehicleId = parseInt(scanner.nextLine());
|
|
||||||
Vehicle vehicle = service.findVehicle(vehicleId);
|
|
||||||
if (vehicle == null) {
|
|
||||||
System.out.println("Fahrzeug nicht gefunden");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
System.out.print("Notiz: ");
|
|
||||||
String note = scanner.nextLine();
|
|
||||||
List<ServiceItem> catalog = service.listServiceItems();
|
|
||||||
Map<Integer, Integer> selected = new LinkedHashMap<>();
|
|
||||||
boolean adding = true;
|
|
||||||
while (adding) {
|
|
||||||
showCatalog(catalog);
|
|
||||||
System.out.print("Service ID (leer = fertig): ");
|
|
||||||
String input = scanner.nextLine();
|
String input = scanner.nextLine();
|
||||||
if (input.isBlank()) {
|
|
||||||
adding = false;
|
try {
|
||||||
} else {
|
return Integer.parseInt(input.trim());
|
||||||
int serviceId = parseInt(input);
|
} catch (NumberFormatException e) {
|
||||||
ServiceItem item = catalog.stream().filter(s -> s.getId() == serviceId).findFirst().orElse(null);
|
System.out.println("Bitte eine gültige Zahl eingeben.");
|
||||||
if (item == null) {
|
|
||||||
System.out.println("Service gibt es nicht");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
System.out.print("Menge: ");
|
|
||||||
int qty = parseInt(scanner.nextLine());
|
|
||||||
if (qty <= 0) {
|
|
||||||
System.out.println("Menge muss > 0 sein");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
selected.put(serviceId, selected.getOrDefault(serviceId, 0) + qty);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (selected.isEmpty()) {
|
}
|
||||||
System.out.println("Keine Positionen gespeichert");
|
|
||||||
|
private String readNonEmpty(String text) {
|
||||||
|
while (true) {
|
||||||
|
System.out.print(text);
|
||||||
|
String value = scanner.nextLine().trim();
|
||||||
|
|
||||||
|
if (!value.isEmpty()) {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.println("Eingabe darf nicht leer sein.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private String readValidName(String text) {
|
||||||
|
while (true) {
|
||||||
|
String name = readNonEmpty(text);
|
||||||
|
|
||||||
|
if (name.matches("[a-zA-ZäöüÄÖÜß ]+")) {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.println("Der Name darf nur Buchstaben enthalten.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private String readPhoneNumber(String text) {
|
||||||
|
while (true) {
|
||||||
|
System.out.print(text);
|
||||||
|
String phone = scanner.nextLine().trim();
|
||||||
|
|
||||||
|
if (phone.matches("\\d+")) {
|
||||||
|
return phone;
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.println("Telefonnummer darf nur Zahlen enthalten.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ---------------- Personen ----------------
|
||||||
|
|
||||||
|
private void addPerson() throws SQLException {
|
||||||
|
String name = readValidName("Name: ");
|
||||||
|
String phone = readPhoneNumber("Telefonnummer: ");
|
||||||
|
|
||||||
|
Person person = service.createPerson(name, phone);
|
||||||
|
System.out.println("Kunde gespeichert (ID: " + person.getId() + ")");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void showPersons() throws SQLException {
|
||||||
|
List<Person> persons = service.listPersons();
|
||||||
|
|
||||||
|
if (persons.isEmpty()) {
|
||||||
|
System.out.println("Keine Kunden vorhanden.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
int orderId = service.createWorkOrder(vehicleId, note, selected);
|
|
||||||
System.out.println("Vorgang angelegt mit ID " + orderId);
|
System.out.println("\n--- Kundenliste ---");
|
||||||
|
persons.forEach(System.out::println);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void showCatalog(List<ServiceItem> items) {
|
// ---------------- Fahrzeuge ----------------
|
||||||
System.out.println("Katalog:");
|
|
||||||
items.forEach(item -> System.out.println(item.toString()));
|
private void addVehicle() throws SQLException {
|
||||||
|
int personId = readInt("Personen-ID: ");
|
||||||
|
Person person = service.findPerson(personId);
|
||||||
|
|
||||||
|
if (person == null) {
|
||||||
|
System.out.println("Person wurde nicht gefunden.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
String brand = readNonEmpty("Hersteller: ");
|
||||||
|
String model = readNonEmpty("Modell: ");
|
||||||
|
String plate = readNonEmpty("Kennzeichen: ");
|
||||||
|
|
||||||
|
Vehicle vehicle = service.createVehicle(personId, brand, model, plate);
|
||||||
|
System.out.println("Fahrzeug angelegt (ID: " + vehicle.getId() + ")");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void listWorkOrders() throws SQLException {
|
private void showVehiclesOfPerson() throws SQLException {
|
||||||
|
int personId = readInt("Personen-ID: ");
|
||||||
|
Person person = service.findPerson(personId);
|
||||||
|
|
||||||
|
if (person == null) {
|
||||||
|
System.out.println("Person nicht gefunden.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<Vehicle> vehicles = service.listVehicles(personId);
|
||||||
|
|
||||||
|
System.out.println("Fahrzeuge von " + person.getName() + ":");
|
||||||
|
if (vehicles.isEmpty()) {
|
||||||
|
System.out.println("Keine Fahrzeuge vorhanden.");
|
||||||
|
} else {
|
||||||
|
vehicles.forEach(System.out::println);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ---------------- Werkstattvorgänge ----------------
|
||||||
|
|
||||||
|
private void createWorkOrder() throws SQLException {
|
||||||
|
int vehicleId = readInt("Fahrzeug-ID: ");
|
||||||
|
Vehicle vehicle = service.findVehicle(vehicleId);
|
||||||
|
|
||||||
|
if (vehicle == null) {
|
||||||
|
System.out.println("Fahrzeug nicht gefunden.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
String note = readNonEmpty("Notiz: ");
|
||||||
|
|
||||||
|
List<ServiceItem> catalog = service.listServiceItems();
|
||||||
|
Map<Integer, Integer> selectedItems = new LinkedHashMap<>();
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
System.out.println("\n--- Service-Katalog ---");
|
||||||
|
catalog.forEach(System.out::println);
|
||||||
|
|
||||||
|
System.out.print("Service-ID (leer = fertig): ");
|
||||||
|
String input = scanner.nextLine().trim();
|
||||||
|
|
||||||
|
if (input.isEmpty()) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
int serviceId;
|
||||||
|
try {
|
||||||
|
serviceId = Integer.parseInt(input);
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
System.out.println("Bitte eine gültige ID eingeben.");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
ServiceItem item = catalog.stream()
|
||||||
|
.filter(s -> s.getId() == serviceId)
|
||||||
|
.findFirst()
|
||||||
|
.orElse(null);
|
||||||
|
|
||||||
|
if (item == null) {
|
||||||
|
System.out.println("Service nicht gefunden.");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
int qty = readInt("Menge: ");
|
||||||
|
if (qty <= 0) {
|
||||||
|
System.out.println("Menge muss größer als 0 sein.");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
selectedItems.merge(serviceId, qty, Integer::sum);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (selectedItems.isEmpty()) {
|
||||||
|
System.out.println("Keine Positionen ausgewählt.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int orderId = service.createWorkOrder(vehicleId, note, selectedItems);
|
||||||
|
System.out.println("Vorgang wurde angelegt (ID: " + orderId + ")");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void showWorkOrders() throws SQLException {
|
||||||
List<WorkOrderDetails> orders = service.listWorkOrders();
|
List<WorkOrderDetails> orders = service.listWorkOrders();
|
||||||
|
|
||||||
if (orders.isEmpty()) {
|
if (orders.isEmpty()) {
|
||||||
System.out.println("Keine Vorgänge gespeichert");
|
System.out.println("Keine Vorgänge vorhanden.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (WorkOrderDetails order : orders) {
|
for (WorkOrderDetails order : orders) {
|
||||||
System.out.println("--- Vorgang " + order.getOrderId() + " ---");
|
System.out.println("\n--- Vorgang " + order.getOrderId() + " ---");
|
||||||
System.out.println("Kunde: " + order.getPersonName());
|
System.out.println("Kunde: " + order.getPersonName());
|
||||||
System.out.println("Fahrzeug: " + order.getVehicleText());
|
System.out.println("Fahrzeug: " + order.getVehicleText());
|
||||||
System.out.println("Datum: " + order.getCreatedAt());
|
System.out.println("Datum: " + order.getCreatedAt());
|
||||||
|
|
||||||
if (order.getNote() != null && !order.getNote().isBlank()) {
|
if (order.getNote() != null && !order.getNote().isBlank()) {
|
||||||
System.out.println("Notiz: " + order.getNote());
|
System.out.println("Notiz: " + order.getNote());
|
||||||
}
|
}
|
||||||
|
|
||||||
for (WorkOrderItem item : order.getItems()) {
|
for (WorkOrderItem item : order.getItems()) {
|
||||||
System.out.println(" * " + item.getServiceItem().getTitle() + " x" + item.getQuantity() +
|
System.out.println(" - " + item.getServiceItem().getTitle() +
|
||||||
|
" x" + item.getQuantity() +
|
||||||
" = " + item.getTotalPrice() + " €");
|
" = " + item.getTotalPrice() + " €");
|
||||||
}
|
}
|
||||||
System.out.println("Summe: " + order.getTotal() + " €");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void importPersons() {
|
System.out.println("Gesamtsumme: " + order.getTotal() + " €");
|
||||||
System.out.print("Pfad zur CSV-Datei: ");
|
|
||||||
String path = scanner.nextLine();
|
|
||||||
IImporter<Person> importer = new CsvPersonImporter();
|
|
||||||
try {
|
|
||||||
List<Person> imported = importer.importData(path);
|
|
||||||
int count = 0;
|
|
||||||
for (Person p : imported) {
|
|
||||||
service.createPerson(p.getName(), p.getPhone());
|
|
||||||
count++;
|
|
||||||
}
|
|
||||||
System.out.println(count + " Personen erfolgreich importiert.");
|
|
||||||
} catch (Exception e) {
|
|
||||||
System.out.println("Fehler beim Import: " + e.getMessage());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void exportPersons() {
|
|
||||||
System.out.print("Pfad zur Ziel-Datei: ");
|
|
||||||
String path = scanner.nextLine();
|
|
||||||
try {
|
|
||||||
List<Person> persons = service.listPersons();
|
|
||||||
IExporter<Person> exporter = new CsvPersonExporter();
|
|
||||||
exporter.exportData(persons, path);
|
|
||||||
System.out.println(persons.size() + " Personen exportiert.");
|
|
||||||
} catch (Exception e) {
|
|
||||||
System.out.println("Fehler beim Export: " + e.getMessage());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private int parseInt(String input) {
|
|
||||||
try {
|
|
||||||
return Integer.parseInt(input.trim());
|
|
||||||
} catch (NumberFormatException e) {
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Add table
Reference in a new issue