sdajdska
This commit is contained in:
parent
39a9bfd64c
commit
4c49d28d0d
2 changed files with 208 additions and 107 deletions
21
pom.xml
21
pom.xml
|
|
@ -91,6 +91,27 @@
|
|||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-javadoc-plugin</artifactId>
|
||||
<version>3.6.3</version>
|
||||
<configuration>
|
||||
<javadocExecutable>/usr/lib/jvm/java-21-openjdk-amd64/bin/javadoc</javadocExecutable>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>attach-javadocs</id>
|
||||
<goals>
|
||||
<goal>javadoc</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-site-plugin</artifactId>
|
||||
<version>3.12.1</version>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
||||
|
|
|
|||
|
|
@ -7,25 +7,16 @@ import de.antco.projekt.model.WorkOrderDetails;
|
|||
import de.antco.projekt.model.WorkOrderItem;
|
||||
import de.antco.projekt.service.WorkshopService;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.io.PrintStream;
|
||||
import java.sql.SQLException;
|
||||
import java.util.*;
|
||||
|
||||
public class ConsoleUi {
|
||||
|
||||
private final WorkshopService service;
|
||||
private final Scanner scanner;
|
||||
private final PrintStream out;
|
||||
private final Scanner scanner = new Scanner(System.in);
|
||||
|
||||
public ConsoleUi(WorkshopService service) {
|
||||
this(service, System.in, System.out);
|
||||
}
|
||||
|
||||
public ConsoleUi(WorkshopService service, InputStream in, PrintStream out) {
|
||||
this.service = service;
|
||||
this.scanner = new Scanner(in);
|
||||
this.out = out;
|
||||
}
|
||||
|
||||
public void start() {
|
||||
|
|
@ -33,7 +24,6 @@ public class ConsoleUi {
|
|||
|
||||
while (running) {
|
||||
showMenu();
|
||||
if (!scanner.hasNextLine()) break;
|
||||
String choice = scanner.nextLine().trim();
|
||||
|
||||
try {
|
||||
|
|
@ -45,176 +35,276 @@ public class ConsoleUi {
|
|||
case "5" -> createWorkOrder();
|
||||
case "6" -> showWorkOrders();
|
||||
case "0" -> running = false;
|
||||
default -> out.println("Ungültige Eingabe.");
|
||||
default -> System.out.println("Ungültige Eingabe.");
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
out.println("Ein Fehler ist aufgetreten: " + e.getMessage());
|
||||
System.out.println("Ein Fehler ist aufgetreten: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
out.println("Programm beendet.");
|
||||
System.out.println("Programm beendet.");
|
||||
}
|
||||
|
||||
private void showMenu() {
|
||||
out.println("\n=== Werkstatt Menü ===");
|
||||
out.println("1) Kunde anlegen");
|
||||
out.println("2) Kunden anzeigen");
|
||||
out.println("3) Fahrzeug anlegen");
|
||||
out.println("4) Fahrzeuge einer Person anzeigen");
|
||||
out.println("5) Werkstattvorgang anlegen");
|
||||
out.println("6) Vorgänge anzeigen");
|
||||
out.println("0) Beenden");
|
||||
out.print("Auswahl: ");
|
||||
System.out.println("\n=== Werkstatt Menü ===");
|
||||
System.out.println("1) Kunde anlegen");
|
||||
System.out.println("2) Kunden anzeigen");
|
||||
System.out.println("3) Fahrzeug anlegen");
|
||||
System.out.println("4) Fahrzeuge einer Person anzeigen");
|
||||
System.out.println("5) Werkstattvorgang anlegen");
|
||||
System.out.println("6) Vorgänge anzeigen");
|
||||
System.out.println("0) Beenden");
|
||||
System.out.print("Auswahl: ");
|
||||
}
|
||||
|
||||
// ---------------- Eingabe-Hilfen ----------------
|
||||
// ---------------- INPUT HELPERS ----------------
|
||||
|
||||
private int readInt(String text) {
|
||||
private int readPositiveInt(String text) {
|
||||
while (true) {
|
||||
out.print(text);
|
||||
if (!scanner.hasNextLine()) return 0;
|
||||
String input = scanner.nextLine();
|
||||
System.out.print(text);
|
||||
String input = scanner.nextLine().trim();
|
||||
|
||||
try {
|
||||
return Integer.parseInt(input.trim());
|
||||
int value = Integer.parseInt(input);
|
||||
if (value > 0) {
|
||||
return value;
|
||||
}
|
||||
System.out.println("Bitte eine Zahl größer 0 eingeben.");
|
||||
} catch (NumberFormatException e) {
|
||||
out.println("Bitte eine gültige Zahl eingeben.");
|
||||
System.out.println("Bitte eine gültige Zahl eingeben.");
|
||||
}
|
||||
}
|
||||
}
|
||||
private String readEmail(String text) {
|
||||
while (true) {
|
||||
System.out.print(text);
|
||||
String input = scanner.nextLine().trim();
|
||||
|
||||
// einfache Validierung: enthält '@' und mindestens einen Punkt nach dem '@'
|
||||
if (input.matches("^[\\w._%+-]+@[\\w.-]+\\.[a-zA-Z]{2,}$")) {
|
||||
return input;
|
||||
} else {
|
||||
System.out.println("Bitte eine gültige Email-Adresse eingeben.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private String readAddress(String text) {
|
||||
while (true) {
|
||||
System.out.print(text);
|
||||
String input = scanner.nextLine().trim();
|
||||
|
||||
// einfache Validierung: mindestens 5 Zeichen, darf Buchstaben, Zahlen, Leerzeichen und Komma enthalten
|
||||
if (input.length() >= 5 && input.matches("[\\w\\d\\s,.-]+")) {
|
||||
return input;
|
||||
} else {
|
||||
System.out.println("Bitte eine gültige Adresse eingeben (mindestens 5 Zeichen).");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private String readNonEmpty(String text) {
|
||||
while (true) {
|
||||
out.print(text);
|
||||
if (!scanner.hasNextLine()) return "";
|
||||
System.out.print(text);
|
||||
String value = scanner.nextLine().trim();
|
||||
|
||||
if (!value.isEmpty()) {
|
||||
return value;
|
||||
}
|
||||
|
||||
out.println("Eingabe darf nicht leer sein.");
|
||||
System.out.println("Eingabe darf nicht leer sein.");
|
||||
}
|
||||
}
|
||||
|
||||
private String readValidName(String text) {
|
||||
private String readValidName(String label) {
|
||||
while (true) {
|
||||
String name = readNonEmpty(text);
|
||||
if (name.isEmpty()) return "";
|
||||
String name = readNonEmpty(label);
|
||||
|
||||
if (name.matches("[a-zA-ZäöüÄÖÜß ]+")) {
|
||||
return name;
|
||||
if (name.length() < 2) {
|
||||
System.out.println("Der Name muss mindestens 2 Zeichen haben.");
|
||||
continue;
|
||||
}
|
||||
|
||||
out.println("Der Name darf nur Buchstaben enthalten.");
|
||||
if (!name.matches("[a-zA-ZäöüÄÖÜß ]+")) {
|
||||
System.out.println("Der Name darf nur Buchstaben enthalten.");
|
||||
continue;
|
||||
}
|
||||
|
||||
return name.trim();
|
||||
}
|
||||
}
|
||||
|
||||
private String readPhoneNumber(String text) {
|
||||
while (true) {
|
||||
out.print(text);
|
||||
if (!scanner.hasNextLine()) return "";
|
||||
System.out.print(text);
|
||||
String phone = scanner.nextLine().trim();
|
||||
|
||||
if (phone.matches("\\d+")) {
|
||||
return phone;
|
||||
if (!phone.matches("\\d+")) {
|
||||
System.out.println("Telefonnummer darf nur Zahlen enthalten.");
|
||||
continue;
|
||||
}
|
||||
|
||||
out.println("Telefonnummer darf nur Zahlen enthalten.");
|
||||
if (phone.length() < 8) {
|
||||
System.out.println("Telefonnummer muss mindestens 8 Stellen haben.");
|
||||
continue;
|
||||
}
|
||||
|
||||
if (phone.length() > 15) {
|
||||
System.out.println("Telefonnummer darf maximal 15 Stellen haben.");
|
||||
continue;
|
||||
}
|
||||
|
||||
return phone;
|
||||
}
|
||||
}
|
||||
|
||||
private String readValidCarText(String label) {
|
||||
while (true) {
|
||||
System.out.print(label);
|
||||
String value = scanner.nextLine().trim();
|
||||
|
||||
if (value.length() < 2) {
|
||||
System.out.println("Eingabe muss mindestens 2 Zeichen haben.");
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!value.matches("[a-zA-Z0-9äöüÄÖÜß ]+")) {
|
||||
System.out.println("Nur Buchstaben, Zahlen und Leerzeichen erlaubt.");
|
||||
continue;
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
private String readLicensePlate(String text) {
|
||||
while (true) {
|
||||
System.out.print(text);
|
||||
String plate = scanner.nextLine().trim().toUpperCase();
|
||||
|
||||
if (plate.length() < 5) {
|
||||
System.out.println("Kennzeichen muss mindestens 5 Zeichen haben.");
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!plate.matches("[A-Z0-9\\-]+")) {
|
||||
System.out.println("Nur Großbuchstaben, Zahlen und Bindestriche erlaubt.");
|
||||
continue;
|
||||
}
|
||||
|
||||
return plate;
|
||||
}
|
||||
}
|
||||
|
||||
private String readNote() {
|
||||
while (true) {
|
||||
System.out.print("Notiz: ");
|
||||
String note = scanner.nextLine().trim();
|
||||
|
||||
if (note.length() > 200) {
|
||||
System.out.println("Notiz darf maximal 200 Zeichen haben.");
|
||||
continue;
|
||||
}
|
||||
|
||||
return note;
|
||||
}
|
||||
}
|
||||
|
||||
private int readQuantity(String text) {
|
||||
while (true) {
|
||||
System.out.print(text);
|
||||
String input = scanner.nextLine().trim();
|
||||
|
||||
try {
|
||||
int qty = Integer.parseInt(input);
|
||||
if (qty > 0 && qty <= 99) {
|
||||
return qty;
|
||||
}
|
||||
System.out.println("Menge muss zwischen 1 und 99 liegen.");
|
||||
} catch (NumberFormatException e) {
|
||||
System.out.println("Bitte eine gültige Zahl eingeben.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ---------------- Personen ----------------
|
||||
|
||||
private void addPerson() throws SQLException {
|
||||
String name = readValidName("Name: ");
|
||||
String phone = readPhoneNumber("Telefonnummer: ");
|
||||
String email = readNonEmpty("Email: ");
|
||||
String address = readNonEmpty("Adresse: ");
|
||||
String email = readEmail("Email: ");
|
||||
String address = readAddress("Adresse: ");
|
||||
|
||||
if (name.isEmpty() || phone.isEmpty() || email.isEmpty() || address.isEmpty()) return;
|
||||
|
||||
Person person = service.createPerson(name, phone, email, address);
|
||||
out.println("Kunde gespeichert (ID: " + person.getId() + ")");
|
||||
Person person = service.createPerson(name, phone,email,address);
|
||||
System.out.println("Kunde gespeichert (ID: " + person.getId() + ")");
|
||||
}
|
||||
|
||||
private void showPersons() throws SQLException {
|
||||
List<Person> persons = service.listPersons();
|
||||
|
||||
if (persons.isEmpty()) {
|
||||
out.println("Keine Kunden vorhanden.");
|
||||
System.out.println("Keine Kunden vorhanden.");
|
||||
return;
|
||||
}
|
||||
|
||||
out.println("\n--- Kundenliste ---");
|
||||
persons.forEach(p -> out.println(p));
|
||||
System.out.println("\n--- Kundenliste ---");
|
||||
persons.forEach(System.out::println);
|
||||
}
|
||||
|
||||
// ---------------- Fahrzeuge ----------------
|
||||
|
||||
private void addVehicle() throws SQLException {
|
||||
int personId = readInt("Personen-ID: ");
|
||||
if (personId == 0) return;
|
||||
int personId = readPositiveInt("Personen-ID: ");
|
||||
Person person = service.findPerson(personId);
|
||||
|
||||
if (person == null) {
|
||||
out.println("Person wurde nicht gefunden.");
|
||||
System.out.println("Person wurde nicht gefunden.");
|
||||
return;
|
||||
}
|
||||
|
||||
String brand = readNonEmpty("Hersteller: ");
|
||||
String model = readNonEmpty("Modell: ");
|
||||
String plate = readNonEmpty("Kennzeichen: ");
|
||||
|
||||
if (brand.isEmpty() || model.isEmpty() || plate.isEmpty()) return;
|
||||
String brand = readValidCarText("Hersteller: ");
|
||||
String model = readValidCarText("Modell: ");
|
||||
String plate = readLicensePlate("Kennzeichen: ");
|
||||
|
||||
Vehicle vehicle = service.createVehicle(personId, brand, model, plate);
|
||||
out.println("Fahrzeug angelegt (ID: " + vehicle.getId() + ")");
|
||||
System.out.println("Fahrzeug gespeichert (ID: " + vehicle.getId() + ")");
|
||||
}
|
||||
|
||||
private void showVehiclesOfPerson() throws SQLException {
|
||||
int personId = readInt("Personen-ID: ");
|
||||
if (personId == 0) return;
|
||||
int personId = readPositiveInt("Personen-ID: ");
|
||||
Person person = service.findPerson(personId);
|
||||
|
||||
if (person == null) {
|
||||
out.println("Person nicht gefunden.");
|
||||
System.out.println("Person nicht gefunden.");
|
||||
return;
|
||||
}
|
||||
|
||||
List<Vehicle> vehicles = service.listVehicles(personId);
|
||||
|
||||
out.println("Fahrzeuge von " + person.getName() + ":");
|
||||
System.out.println("Fahrzeuge von " + person.getName() + ":");
|
||||
if (vehicles.isEmpty()) {
|
||||
out.println("Keine Fahrzeuge vorhanden.");
|
||||
System.out.println("Keine Fahrzeuge vorhanden.");
|
||||
} else {
|
||||
vehicles.forEach(v -> out.println(v));
|
||||
vehicles.forEach(System.out::println);
|
||||
}
|
||||
}
|
||||
|
||||
// ---------------- Werkstattvorgänge ----------------
|
||||
|
||||
private void createWorkOrder() throws SQLException {
|
||||
int vehicleId = readInt("Fahrzeug-ID: ");
|
||||
if (vehicleId == 0) return;
|
||||
int vehicleId = readPositiveInt("Fahrzeug-ID: ");
|
||||
Vehicle vehicle = service.findVehicle(vehicleId);
|
||||
|
||||
if (vehicle == null) {
|
||||
out.println("Fahrzeug nicht gefunden.");
|
||||
System.out.println("Fahrzeug nicht gefunden.");
|
||||
return;
|
||||
}
|
||||
|
||||
String note = readNonEmpty("Notiz: ");
|
||||
String note = readNote();
|
||||
|
||||
List<ServiceItem> catalog = service.listServiceItems();
|
||||
Map<Integer, Integer> selectedItems = new LinkedHashMap<>();
|
||||
|
||||
while (true) {
|
||||
out.println("\n--- Service-Katalog ---");
|
||||
catalog.forEach(item -> out.println(item));
|
||||
System.out.println("\n--- Service-Katalog ---");
|
||||
catalog.forEach(System.out::println);
|
||||
|
||||
out.print("Service-ID (leer = fertig): ");
|
||||
if (!scanner.hasNextLine()) break;
|
||||
System.out.print("Service-ID (leer = fertig): ");
|
||||
String input = scanner.nextLine().trim();
|
||||
|
||||
if (input.isEmpty()) {
|
||||
|
|
@ -225,64 +315,54 @@ public class ConsoleUi {
|
|||
try {
|
||||
serviceId = Integer.parseInt(input);
|
||||
} catch (NumberFormatException e) {
|
||||
out.println("Bitte eine gültige ID eingeben.");
|
||||
System.out.println("Bitte eine gültige ID eingeben.");
|
||||
continue;
|
||||
}
|
||||
|
||||
int finalServiceId = serviceId;
|
||||
ServiceItem item = catalog.stream()
|
||||
.filter(s -> s.getId() == finalServiceId)
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
|
||||
if (item == null) {
|
||||
out.println("Service nicht gefunden.");
|
||||
continue;
|
||||
}
|
||||
|
||||
int qty = readInt("Menge: ");
|
||||
if (qty <= 0) {
|
||||
out.println("Menge muss größer als 0 sein.");
|
||||
boolean exists = catalog.stream().anyMatch(s -> s.getId() == serviceId);
|
||||
if (!exists) {
|
||||
System.out.println("Service nicht gefunden.");
|
||||
continue;
|
||||
}
|
||||
|
||||
int qty = readQuantity("Menge: ");
|
||||
selectedItems.merge(serviceId, qty, Integer::sum);
|
||||
}
|
||||
|
||||
if (selectedItems.isEmpty()) {
|
||||
out.println("Keine Positionen ausgewählt.");
|
||||
System.out.println("Keine Positionen ausgewählt.");
|
||||
return;
|
||||
}
|
||||
|
||||
int orderId = service.createWorkOrder(vehicleId, note, selectedItems);
|
||||
out.println("Vorgang wurde angelegt (ID: " + orderId + ")");
|
||||
System.out.println("Vorgang wurde angelegt (ID: " + orderId + ")");
|
||||
}
|
||||
|
||||
private void showWorkOrders() throws SQLException {
|
||||
List<WorkOrderDetails> orders = service.listWorkOrders();
|
||||
|
||||
if (orders.isEmpty()) {
|
||||
out.println("Keine Vorgänge vorhanden.");
|
||||
System.out.println("Keine Vorgänge vorhanden.");
|
||||
return;
|
||||
}
|
||||
|
||||
for (WorkOrderDetails order : orders) {
|
||||
out.println("\n--- Vorgang " + order.getOrderId() + " ---");
|
||||
out.println("Kunde: " + order.getPersonName());
|
||||
out.println("Fahrzeug: " + order.getVehicleText());
|
||||
out.println("Datum: " + order.getCreatedAt());
|
||||
System.out.println("\n--- Vorgang " + order.getOrderId() + " ---");
|
||||
System.out.println("Kunde: " + order.getPersonName());
|
||||
System.out.println("Fahrzeug: " + order.getVehicleText());
|
||||
System.out.println("Datum: " + order.getCreatedAt());
|
||||
|
||||
if (order.getNote() != null && !order.getNote().isBlank()) {
|
||||
out.println("Notiz: " + order.getNote());
|
||||
System.out.println("Notiz: " + order.getNote());
|
||||
}
|
||||
|
||||
for (WorkOrderItem item : order.getItems()) {
|
||||
out.println(" - " + item.getServiceItem().getTitle() +
|
||||
System.out.println(" - " + item.getServiceItem().getTitle() +
|
||||
" x" + item.getQuantity() +
|
||||
" = " + item.getTotalPrice() + " €");
|
||||
}
|
||||
|
||||
out.println("Gesamtsumme: " + order.getTotal() + " €");
|
||||
System.out.println("Gesamtsumme: " + order.getTotal() + " €");
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue