Ausleih Methoden und Anforderungen
parent
ee38827437
commit
f5c637dd9d
|
|
@ -0,0 +1,118 @@
|
|||
package ServiceLayer;
|
||||
|
||||
import java.time.LocalDate;
|
||||
|
||||
import DomainLayer.Medium;
|
||||
import DomainLayer.User;
|
||||
|
||||
public class BorrowService {
|
||||
private LocalDate currentDate = LocalDate.now();
|
||||
private LibraryService libraryService;
|
||||
|
||||
public LocalDate getCurrentDate() {
|
||||
return currentDate;
|
||||
}
|
||||
|
||||
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.");
|
||||
}
|
||||
}
|
||||
|
||||
System.out.println("Datum erfolgreich geändert: " + this.currentDate);
|
||||
}
|
||||
|
||||
public void renewMedium(User user, Medium medium, LocalDate newBorrowDate) {
|
||||
if (!medium.isBorrowed()) {
|
||||
System.out.println("Das Medium wurde nicht ausgeliehen und kann daher nicht verlängert werden.");
|
||||
return;
|
||||
}
|
||||
|
||||
// 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
|
||||
}
|
||||
|
||||
// Wenn das Medium keine Verlängerung erlaubt, breche ab
|
||||
if (!medium.isRenewable()) {
|
||||
System.out.println("Das Medium kann nicht verlängert werden.");
|
||||
return;
|
||||
}
|
||||
|
||||
// Wenn die maximale Anzahl an Verlängerungen erreicht wurde
|
||||
if (medium.getRenewals() >= medium.getMaxRenewals()) {
|
||||
System.out.println("Maximale Anzahl an Verlängerungen erreicht.");
|
||||
return;
|
||||
}
|
||||
|
||||
// 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());
|
||||
}
|
||||
|
||||
|
||||
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);
|
||||
|
||||
System.out.println("Ausleihe erfolgreich. "
|
||||
+ 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);
|
||||
|
||||
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() + ")");
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue