borrowMedium korrigiert

pull/2/head
elarturo 2024-11-19 10:06:59 +01:00
parent 92903b93eb
commit b63eb3805d
1 changed files with 99 additions and 68 deletions

View File

@ -9,79 +9,105 @@ public class BorrowService {
private LocalDate currentDate = LocalDate.now(); private LocalDate currentDate = LocalDate.now();
private LibraryService libraryService; private LibraryService libraryService;
// Getter für das aktuelle Datum
public LocalDate getCurrentDate() { public LocalDate getCurrentDate() {
return currentDate; 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) { public void setCurrentDate(LocalDate newDate) {
this.currentDate = newDate; this.currentDate = newDate;
// Überprüfen, ob ausgeliehene Medien ein korrektes Ausleihdatum haben // Stelle sicher, dass libraryService nicht null ist, bevor du darauf zugreifst
if (libraryService != null) {
for (Medium medium : libraryService.getAllMedia()) { for (Medium medium : libraryService.getAllMedia()) {
if (medium.isBorrowed() && medium.getBorrowDate() == null) { if (medium.isBorrowed() && medium.getBorrowDate() == null) {
medium.setBorrowDate(newDate); // Setze das aktuelle Datum als Ausleihdatum medium.setBorrowDate(newDate); // Setze das Ausleihdatum
System.out.println("Warnung: Ausleihdatum für Medium '" + medium.getTitle() }
+ "' war null und wurde auf " + newDate + " gesetzt.");
} }
} }
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()) { if (!medium.isBorrowed()) {
System.out.println("Das Medium wurde nicht ausgeliehen und kann daher nicht verlängert werden."); return "Das Medium wurde nicht ausgeliehen.";
return;
} }
// Wenn das neue Ausleihdatum gesetzt ist, verwenden wir dieses Datum, ansonsten das aktuelle Datum // Überprüfen, ob der Benutzer das Medium ausgeliehen hat
if (newBorrowDate != null) { if (!user.getBorrowedMedia().contains(medium)) {
medium.setBorrowDate(newBorrowDate); // Ausleihdatum auf das neue Datum setzen 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()) { if (!medium.isRenewable()) {
System.out.println("Das Medium kann nicht verlängert werden."); return "Das Medium kann nicht verlängert werden.";
return;
} }
// 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()) { if (medium.getRenewals() >= medium.getMaxRenewals()) {
System.out.println("Maximale Anzahl an Verlängerungen erreicht."); return "Die maximale Anzahl an Verlängerungen wurde bereits erreicht.";
return; }
// Optional: Ausleihdatum aktualisieren
if (newBorrowDate != null) {
medium.setBorrowDate(newBorrowDate); // Setze das neue Ausleihdatum
} }
// Verlängerung durchführen // Verlängerung durchführen
medium.increaseRenewals(); medium.increaseRenewals();
medium.setDueDate(medium.getDueDate().plusDays(medium.getBorrowPeriod())); // Rückgabedatum basierend auf der Leihfrist anpassen medium.setDueDate(medium.getDueDate().plusDays(medium.getBorrowPeriod())); // Rückgabedatum basierend auf der Leihfrist verlängern
System.out.println("Verlängerung erfolgreich. Neue Rückgabefrist: " + medium.getDueDate());
return "Verlängerung erfolgreich. Neue Rückgabefrist: " + medium.getDueDate();
} }
public void borrowMedium(User user, Medium medium) {
// Ausleihen eines Mediums
public String borrowMedium(User user, Medium medium) {
if (medium.isBorrowed()) { if (medium.isBorrowed()) {
System.out.println("Das Medium ist bereits ausgeliehen."); return "Das Medium ist bereits ausgeliehen.";
return;
} }
// Verwende das aktuelle Datum als Ausleihdatum LocalDate borrowDate = LocalDate.now(); // Setze das aktuelle Datum als Ausleihdatum
LocalDate borrowDate = currentDate; medium.setBorrowDate(borrowDate); // Setze das Ausleihdatum und berechne das Fälligkeitsdatum
medium.setBorrowed(true); user.borrowMedium(medium); // Füge das Medium zur Liste der ausgeliehenen Medien des Benutzers hinzu
medium.setBorrowDate(borrowDate); // Setze das aktuelle Datum als Ausleihdatum medium.setBorrowed(true); // Markiere das Medium als ausgeliehen
medium.setDueDate(borrowDate.plusDays(medium.getBorrowPeriod())); // Berechne Rückgabedatum
user.borrowMedium(medium);
System.out.println("Ausleihe erfolgreich. " return "Ausleihe erfolgreich. Fällig am: " + medium.getDueDate();
+ medium.getDueDate());
} }
public void returnMedium(User user, Medium medium) {
// Rückgabe eines Mediums
public String returnMedium(User user, Medium medium) {
// Überprüfen, ob das Medium ausgeliehen ist
if (!medium.isBorrowed()) { if (!medium.isBorrowed()) {
System.out.println("Das Medium wurde nicht ausgeliehen."); return "Das Medium wurde nicht ausgeliehen.";
return;
} }
// Ü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 // Berechnung der Gebühren
LocalDate dueDate = medium.getDueDate(); LocalDate dueDate = medium.getDueDate();
if (dueDate != null && currentDate.isAfter(dueDate)) { if (dueDate != null && currentDate.isAfter(dueDate)) {
@ -93,26 +119,31 @@ public class BorrowService {
fee = overdueDays * 1; fee = overdueDays * 1;
} }
user.addFee(fee); user.addFee(fee);
System.out.println("Überfällige Gebühr: " + fee + "€."); result.append("Überfällige Gebühr: ").append(fee).append("€.\n");
} else {
result.append("Keine Gebühren angefallen.\n");
} }
medium.setBorrowed(false); // Aktualisierung des Mediums und des Benutzers
medium.resetRenewals(); medium.setBorrowed(false); // Medium ist nicht mehr ausgeliehen
medium.setDueDate(null); // Rückgabedatum zurücksetzen, Ausleihdatum bleibt unverändert medium.resetRenewals(); // Anzahl der Verlängerungen zurücksetzen
user.returnMedium(medium); medium.setDueDate(null); // Fälligkeitsdatum entfernen
user.returnMedium(medium); // Entferne das Medium aus der Liste des Benutzers
System.out.println("Rückgabe erfolgreich."); // Anzeigen der verbleibenden ausgeliehenen Medien
System.out.println("Noch ausgeliehene Medien:"); if (user.getBorrowedMedia().isEmpty()) {
result.append("Keine weiteren Medien ausgeliehen.");
} else {
result.append("Noch ausgeliehene Medien:\n");
for (Medium m : user.getBorrowedMedia()) { for (Medium m : user.getBorrowedMedia()) {
System.out.println("- " + m.getTitle() + " (Fällig am: " + m.getDueDate() + ")"); result.append("- ").append(m.getTitle()).append(" (Fällig am: ").append(m.getDueDate()).append(")\n");
} }
} }
public void showOutstandingFees(User user) { return result.toString();
System.out.println("Ausstehende Gebühren für " + user.getName() + ": " + user.getOutstandingFees() + "€.");
} }
public void handleAdminPayment(User user, double amount) {
user.payFees(amount);
}
} }