From 42b80bd143441bb25e78e3073254f80f7ec58988 Mon Sep 17 00:00:00 2001 From: Patrick Mayr Date: Wed, 16 Jul 2025 19:21:47 +0200 Subject: [PATCH] add Verleihformular --- fet2020/rental/admin.py | 26 ++++++- fet2020/rental/models.py | 9 +++ .../rental/static/rental/Verleihformular.pdf | Bin 0 -> 72886 bytes fet2020/rental/utils.py | 66 ++++++++++++++++++ fet2020/static/css/styles.css | 10 +++ fet2020/templates/admin/submit_line.html | 1 + fet2020/templates/rental/create.html | 2 +- .../templates/rental/rentalitem_detail.html | 2 +- 8 files changed, 113 insertions(+), 3 deletions(-) create mode 100644 fet2020/rental/static/rental/Verleihformular.pdf create mode 100644 fet2020/rental/utils.py diff --git a/fet2020/rental/admin.py b/fet2020/rental/admin.py index f209feb9..42227a1d 100644 --- a/fet2020/rental/admin.py +++ b/fet2020/rental/admin.py @@ -1,7 +1,9 @@ -from django.contrib import admin +from django.contrib import admin, messages +from django.http import HttpResponseRedirect from .forms import RentalAdminForm, RentalItemAdminForm from .models import Rental, RentalItem +from .utils import generate_rental_pdf @admin.register(Rental) @@ -49,6 +51,7 @@ class RentalAdmin(admin.ModelAdmin): { "fields": ( "comment", + "file_field", "status", ), }, @@ -63,8 +66,29 @@ class RentalAdmin(admin.ModelAdmin): def change_view(self, request, object_id, form_url="", extra_context=None): extra_context = extra_context or {} extra_context["help_text"] = "Fette Schriften sind Pflichtfelder." + extra_context["generate_rental_pdf"] = True return super().change_view(request, object_id, form_url, extra_context=extra_context) + def response_change(self, request, obj): + if "_generate_rental_pdf" in request.POST: + if generate_rental_pdf(obj): + self.message_user( + request, + "Neues Verleihformular wurde generiert.", + messages.SUCCESS, + ) + else: + self.message_user( + request, + ( + "Das PDF-Dokument konnte nicht generiert werden, da der Status nicht auf " + "'Verleih genehmigt' gesetzt ist." + ), + messages.WARNING, + ) + return HttpResponseRedirect(".") + return super().response_change(request, obj) + def save_model(self, request, obj, form, change): obj.author = request.user super().save_model(request, obj, form, change) diff --git a/fet2020/rental/models.py b/fet2020/rental/models.py index 34e04622..60a68c76 100644 --- a/fet2020/rental/models.py +++ b/fet2020/rental/models.py @@ -1,3 +1,4 @@ +from django.core.validators import FileExtensionValidator from django.db import models from django.forms import ValidationError @@ -48,6 +49,14 @@ class Rental(models.Model): comment = models.TextField(verbose_name="Kommentar", max_length=500, blank=True, default="") + file_field = models.FileField( + upload_to="uploads/rental/rental/", + validators=[FileExtensionValidator(["pdf"])], + blank=True, + null=True, + verbose_name="Verleihformular", + ) + class Status(models.TextChoices): SUBMITTED = "S", "Eingereicht" APPROVED = "A", "Verleih genehmigt" diff --git a/fet2020/rental/static/rental/Verleihformular.pdf b/fet2020/rental/static/rental/Verleihformular.pdf new file mode 100644 index 0000000000000000000000000000000000000000..db8dce118a0362e588238a29c6bab35ad16f8d9c GIT binary patch literal 72886 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 literal 0 HcmV?d00001 diff --git a/fet2020/rental/utils.py b/fet2020/rental/utils.py new file mode 100644 index 00000000..4c4ff0b2 --- /dev/null +++ b/fet2020/rental/utils.py @@ -0,0 +1,66 @@ +import io +from pathlib import Path + +from django.core.files import File +from pypdf import PdfReader, PdfWriter + +from .models import Rental + + +def generate_rental_pdf(rental: Rental) -> bool: + if not rental or rental.status != Rental.Status.APPROVED: + return False + + # Get data for pdf + data = {} + data.update( + { + "Vorname": rental.firstname, + "Nachname": rental.surname, + "Orga": rental.organization, + "Matrikelnummer": rental.matriculation_number, + "E-Mail": rental.email, + "Telefonnummer": rental.phone, + # Change to the correct date format + "Abholdatum": str(rental.date_start.strftime("%d.%m.%Y")), + "Rückgabedatum": str(rental.date_end.strftime("%d.%m.%Y")), + }, + ) + + total_deposit = 0 + + for i, item in enumerate(rental.rentalitems.all(), start=1): + total_deposit += item.deposit + data.update( + { + f"Produkt Row{i}": item.name, + f"Menge Row{i}": "1", + f"Kaution Row{i}": item.deposit, + }, + ) + + data.update( + { + "Gesamtkaution": total_deposit, + }, + ) + + # Write data in pdf + pdf_path = Path(Path(__file__).parent) / "static/rental/Verleihformular.pdf" + reader = PdfReader(pdf_path) + writer = PdfWriter() + writer.append(reader) + + writer.update_page_form_field_values( + writer.pages[0], + data, + ) + + with io.BytesIO() as bytes_stream: + writer.write(bytes_stream) + + # Save pdf in rental + rental_name = f"Verleihformular-{str(rental.pk).zfill(4)}.pdf" + rental.file_field.save(rental_name, File(bytes_stream, rental_name)) + + return True diff --git a/fet2020/static/css/styles.css b/fet2020/static/css/styles.css index 89091b4b..aaa52478 100644 --- a/fet2020/static/css/styles.css +++ b/fet2020/static/css/styles.css @@ -5914,6 +5914,11 @@ footer .copyright { color: rgb(37 99 235 / var(--tw-text-opacity, 1)); } +.hover\:text-blue-700:hover { + --tw-text-opacity: 1; + color: rgb(29 78 216 / var(--tw-text-opacity, 1)); +} + .hover\:text-gray-600:hover { --tw-text-opacity: 1; color: rgb(75 85 99 / var(--tw-text-opacity, 1)); @@ -6337,6 +6342,11 @@ footer .copyright { background-color: rgb(8 47 73 / var(--tw-bg-opacity, 1)); } +.dark\:hover\:text-blue-300:hover:is(.dark *) { + --tw-text-opacity: 1; + color: rgb(147 197 253 / var(--tw-text-opacity, 1)); +} + .dark\:hover\:text-blue-500:hover:is(.dark *) { --tw-text-opacity: 1; color: rgb(59 130 246 / var(--tw-text-opacity, 1)); diff --git a/fet2020/templates/admin/submit_line.html b/fet2020/templates/admin/submit_line.html index ec1e5bda..6c1c2c50 100644 --- a/fet2020/templates/admin/submit_line.html +++ b/fet2020/templates/admin/submit_line.html @@ -7,5 +7,6 @@ {% translate 'Close' %} {% endif %} {% if generate_pdf %}{% endif %} + {% if generate_rental_pdf %}{% endif %} {{ block.super }} {% endblock submit-row %} diff --git a/fet2020/templates/rental/create.html b/fet2020/templates/rental/create.html index 92f94592..1c95a97a 100644 --- a/fet2020/templates/rental/create.html +++ b/fet2020/templates/rental/create.html @@ -64,7 +64,7 @@ > {{ elem.choice_label }} diff --git a/fet2020/templates/rental/rentalitem_detail.html b/fet2020/templates/rental/rentalitem_detail.html index 9f306f61..d49a0761 100644 --- a/fet2020/templates/rental/rentalitem_detail.html +++ b/fet2020/templates/rental/rentalitem_detail.html @@ -12,7 +12,7 @@ {% if object.description %}