Files
fet2020/fet2020/rental/admin.py

122 lines
3.9 KiB
Python

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)
class RentalAdmin(admin.ModelAdmin):
form = RentalAdminForm
model = Rental
list_display = [
"id",
"firstname",
"surname",
"status",
"total_disposit",
"date_start",
"date_end",
]
ordering = ["-id"]
readonly_fields = ["total_disposit"]
fieldsets = (
(
"Persönliche Daten",
{
"fields": (
("firstname", "surname"),
("organization", "matriculation_number"),
("email", "phone"),
),
},
),
(
"Verleih",
{
"fields": (
("date_start", "date_end"),
"reason",
"rentalitems",
("total_disposit", "intern"),
),
},
),
(
"Sonstiges",
{
"fields": (
"comment",
"file_field",
"status",
),
},
),
)
def add_view(self, request, form_url="", extra_context=None):
extra_context = extra_context or {}
extra_context["help_text"] = "Fette Schriften sind Pflichtfelder."
return super().add_view(request, form_url, extra_context=extra_context)
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)
@admin.display(description="Kaution insgesamt")
def total_disposit(self, obj):
total_disposit = obj.calc_total_deposit()
return f"{total_disposit}"
@admin.register(RentalItem)
class RentalItemAdmin(admin.ModelAdmin):
form = RentalItemAdminForm
model = RentalItem
ordering = ["name"]
def add_view(self, request, form_url="", extra_context=None):
extra_context = extra_context or {}
extra_context["help_text"] = "Fette Schriften sind Pflichtfelder."
return super().add_view(request, form_url, extra_context=extra_context)
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."
return super().change_view(request, object_id, form_url, extra_context=extra_context)
def save_model(self, request, obj, form, change):
obj.author = request.user
super().save_model(request, obj, form, change)