From b63eb3805deb5f8f1622762937d593d86cf9f659 Mon Sep 17 00:00:00 2001 From: elarturo Date: Tue, 19 Nov 2024 10:06:59 +0100 Subject: [PATCH] borrowMedium korrigiert --- .../src/ServiceLayer/BorrowService.java | 167 +++++++++++------- 1 file changed, 99 insertions(+), 68 deletions(-) diff --git a/Bibliotheksverwaltung/src/ServiceLayer/BorrowService.java b/Bibliotheksverwaltung/src/ServiceLayer/BorrowService.java index c7a10dd..88067a4 100644 --- a/Bibliotheksverwaltung/src/ServiceLayer/BorrowService.java +++ b/Bibliotheksverwaltung/src/ServiceLayer/BorrowService.java @@ -8,111 +8,142 @@ import DomainLayer.User; public class BorrowService { private LocalDate currentDate = LocalDate.now(); private LibraryService libraryService; - + + // Getter für das aktuelle Datum public LocalDate getCurrentDate() { return currentDate; } + public String showOutstandingFees(User user) { + // Stelle sicher, dass der Benutzer ausstehende Gebühren hat + if (user != null) { + return "Ausstehende Gebühren für " + user.getName() + ": " + user.getOutstandingFees() + "€."; + } else { + return "Benutzer nicht gefunden."; + } + } + + // Beispielmethode, die jetzt mit einer initialisierten LibraryService-Instanz + // arbeitet public void setCurrentDate(LocalDate newDate) { this.currentDate = newDate; - // Überprüfen, ob ausgeliehene Medien ein korrektes Ausleihdatum haben - for (Medium medium : libraryService.getAllMedia()) { - if (medium.isBorrowed() && medium.getBorrowDate() == null) { - medium.setBorrowDate(newDate); // Setze das aktuelle Datum als Ausleihdatum - System.out.println("Warnung: Ausleihdatum für Medium '" + medium.getTitle() - + "' war null und wurde auf " + newDate + " gesetzt."); + // Stelle sicher, dass libraryService nicht null ist, bevor du darauf zugreifst + if (libraryService != null) { + for (Medium medium : libraryService.getAllMedia()) { + if (medium.isBorrowed() && medium.getBorrowDate() == null) { + medium.setBorrowDate(newDate); // Setze das Ausleihdatum + } } } - System.out.println("Datum erfolgreich geändert: " + this.currentDate); } - public void renewMedium(User user, Medium medium, LocalDate newBorrowDate) { + // Verlängern eines Mediums + public String renewMedium(User user, Medium medium, LocalDate newBorrowDate) { + // Überprüfen, ob das Medium ausgeliehen ist if (!medium.isBorrowed()) { - System.out.println("Das Medium wurde nicht ausgeliehen und kann daher nicht verlängert werden."); - return; + return "Das Medium wurde nicht ausgeliehen."; } - // Wenn das neue Ausleihdatum gesetzt ist, verwenden wir dieses Datum, ansonsten das aktuelle Datum - if (newBorrowDate != null) { - medium.setBorrowDate(newBorrowDate); // Ausleihdatum auf das neue Datum setzen + // Überprüfen, ob der Benutzer das Medium ausgeliehen hat + if (!user.getBorrowedMedia().contains(medium)) { + return "Dieses Medium wurde nicht von Ihnen ausgeliehen und kann daher nicht verlängert werden."; } - // Wenn das Medium keine Verlängerung erlaubt, breche ab + // Überprüfen, ob das Medium verlängerbar ist if (!medium.isRenewable()) { - System.out.println("Das Medium kann nicht verlängert werden."); - return; + return "Das Medium kann nicht verlängert werden."; } - // Wenn die maximale Anzahl an Verlängerungen erreicht wurde + // Überprüfen, ob die maximale Anzahl an Verlängerungen erreicht wurde if (medium.getRenewals() >= medium.getMaxRenewals()) { - System.out.println("Maximale Anzahl an Verlängerungen erreicht."); - return; + return "Die maximale Anzahl an Verlängerungen wurde bereits erreicht."; + } + + // Optional: Ausleihdatum aktualisieren + if (newBorrowDate != null) { + medium.setBorrowDate(newBorrowDate); // Setze das neue Ausleihdatum } // Verlängerung durchführen medium.increaseRenewals(); - medium.setDueDate(medium.getDueDate().plusDays(medium.getBorrowPeriod())); // Rückgabedatum basierend auf der Leihfrist anpassen - System.out.println("Verlängerung erfolgreich. Neue Rückgabefrist: " + medium.getDueDate()); + medium.setDueDate(medium.getDueDate().plusDays(medium.getBorrowPeriod())); // Rückgabedatum basierend auf der Leihfrist verlängern + + return "Verlängerung erfolgreich. Neue Rückgabefrist: " + medium.getDueDate(); } - public void borrowMedium(User user, Medium medium) { - if (medium.isBorrowed()) { - System.out.println("Das Medium ist bereits ausgeliehen."); - return; - } - // Verwende das aktuelle Datum als Ausleihdatum - LocalDate borrowDate = currentDate; - medium.setBorrowed(true); - medium.setBorrowDate(borrowDate); // Setze das aktuelle Datum als Ausleihdatum - medium.setDueDate(borrowDate.plusDays(medium.getBorrowPeriod())); // Berechne Rückgabedatum - user.borrowMedium(medium); + // Ausleihen eines Mediums + public String borrowMedium(User user, Medium medium) { + if (medium.isBorrowed()) { + return "Das Medium ist bereits ausgeliehen."; + } - System.out.println("Ausleihe erfolgreich. " - + medium.getDueDate()); + LocalDate borrowDate = LocalDate.now(); // Setze das aktuelle Datum als Ausleihdatum + medium.setBorrowDate(borrowDate); // Setze das Ausleihdatum und berechne das Fälligkeitsdatum + + user.borrowMedium(medium); // Füge das Medium zur Liste der ausgeliehenen Medien des Benutzers hinzu + medium.setBorrowed(true); // Markiere das Medium als ausgeliehen + + return "Ausleihe erfolgreich. Fällig am: " + medium.getDueDate(); } - public void returnMedium(User user, Medium medium) { - if (!medium.isBorrowed()) { - System.out.println("Das Medium wurde nicht ausgeliehen."); - return; - } - // Berechnung der Gebühren - LocalDate dueDate = medium.getDueDate(); - if (dueDate != null && currentDate.isAfter(dueDate)) { - long overdueDays = java.time.temporal.ChronoUnit.DAYS.between(dueDate, currentDate); - double fee; - if (overdueDays > 7) { - fee = 7 * 1 + (overdueDays - 7) * 2; - } else { - fee = overdueDays * 1; - } - user.addFee(fee); - System.out.println("Überfällige Gebühr: " + fee + "€."); - } - medium.setBorrowed(false); - medium.resetRenewals(); - medium.setDueDate(null); // Rückgabedatum zurücksetzen, Ausleihdatum bleibt unverändert - user.returnMedium(medium); + // Rückgabe eines Mediums + public String returnMedium(User user, Medium medium) { + // Überprüfen, ob das Medium ausgeliehen ist + if (!medium.isBorrowed()) { + return "Das Medium wurde nicht ausgeliehen."; + } - System.out.println("Rückgabe erfolgreich."); - System.out.println("Noch ausgeliehene Medien:"); - for (Medium m : user.getBorrowedMedia()) { - System.out.println("- " + m.getTitle() + " (Fällig am: " + m.getDueDate() + ")"); - } + // Überprüfen, ob der Benutzer das Medium ausgeliehen hat + if (!user.getBorrowedMedia().contains(medium)) { + return "Dieses Medium wurde nicht von Ihnen ausgeliehen und kann daher nicht zurückgegeben werden."; + } + + StringBuilder result = new StringBuilder(); // StringBuilder für die Rückgabewerte + result.append("Zurückgegebenes Medium: ").append(medium.getTitle()).append("\n"); + + // Berechnung der Gebühren + LocalDate dueDate = medium.getDueDate(); + if (dueDate != null && currentDate.isAfter(dueDate)) { + long overdueDays = java.time.temporal.ChronoUnit.DAYS.between(dueDate, currentDate); + double fee; + if (overdueDays > 7) { + fee = 7 * 1 + (overdueDays - 7) * 2; + } else { + fee = overdueDays * 1; + } + user.addFee(fee); + result.append("Überfällige Gebühr: ").append(fee).append("€.\n"); + } else { + result.append("Keine Gebühren angefallen.\n"); + } + + // Aktualisierung des Mediums und des Benutzers + medium.setBorrowed(false); // Medium ist nicht mehr ausgeliehen + medium.resetRenewals(); // Anzahl der Verlängerungen zurücksetzen + medium.setDueDate(null); // Fälligkeitsdatum entfernen + user.returnMedium(medium); // Entferne das Medium aus der Liste des Benutzers + + // Anzeigen der verbleibenden ausgeliehenen Medien + if (user.getBorrowedMedia().isEmpty()) { + result.append("Keine weiteren Medien ausgeliehen."); + } else { + result.append("Noch ausgeliehene Medien:\n"); + for (Medium m : user.getBorrowedMedia()) { + result.append("- ").append(m.getTitle()).append(" (Fällig am: ").append(m.getDueDate()).append(")\n"); + } + } + + return result.toString(); } - public void showOutstandingFees(User user) { - System.out.println("Ausstehende Gebühren für " + user.getName() + ": " + user.getOutstandingFees() + "€."); - } - public void handleAdminPayment(User user, double amount) { - user.payFees(amount); - } + + }