bornhack-website/src/backoffice/views/pos.py

235 lines
7.2 KiB
Python

import logging
from django.contrib import messages
from django.core.exceptions import PermissionDenied
from django.shortcuts import redirect
from django.urls import reverse
from django.views.generic import DetailView, ListView
from django.views.generic.edit import CreateView, DeleteView, UpdateView
from camps.mixins import CampViewMixin
from economy.models import Pos, PosReport
from teams.models import Team
from ..mixins import OrgaTeamPermissionMixin, PosViewMixin, RaisePermissionRequiredMixin
logger = logging.getLogger("bornhack.%s" % __name__)
class PosListView(CampViewMixin, RaisePermissionRequiredMixin, ListView):
"""Show a list of Pos this user has access to (through team memberships)."""
permission_required = "camps.backoffice_permission"
model = Pos
template_name = "pos_list.html"
class PosDetailView(PosViewMixin, DetailView):
"""Show details for a Pos."""
model = Pos
template_name = "pos_detail.html"
slug_url_kwarg = "pos_slug"
class PosCreateView(CampViewMixin, OrgaTeamPermissionMixin, CreateView):
"""Create a new Pos (orga only)."""
model = Pos
template_name = "pos_form.html"
fields = ["name", "team"]
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["form"].fields["team"].queryset = Team.objects.filter(camp=self.camp)
return context
class PosUpdateView(CampViewMixin, OrgaTeamPermissionMixin, UpdateView):
"""Update a Pos."""
model = Pos
template_name = "pos_form.html"
slug_url_kwarg = "pos_slug"
fields = ["name", "team"]
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["form"].fields["team"].queryset = Team.objects.filter(camp=self.camp)
return context
class PosDeleteView(CampViewMixin, OrgaTeamPermissionMixin, DeleteView):
model = Pos
template_name = "pos_delete.html"
slug_url_kwarg = "pos_slug"
def delete(self, *args, **kwargs):
self.get_object().pos_reports.all().delete()
return super().delete(*args, **kwargs)
def get_success_url(self):
messages.success(
self.request, "The Pos and all related PosReports has been deleted"
)
return reverse("backoffice:pos_list", kwargs={"camp_slug": self.camp.slug})
class PosReportCreateView(PosViewMixin, CreateView):
"""Use this view to create new PosReports."""
model = PosReport
fields = ["date", "bank_responsible", "pos_responsible", "comments"]
template_name = "posreport_form.html"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["form"].fields["bank_responsible"].queryset = Team.objects.get(
camp=self.camp,
name="Orga",
).approved_members.all()
context["form"].fields[
"pos_responsible"
].queryset = self.pos.team.responsible_members.all()
return context
def form_valid(self, form):
"""
Set Pos before saving
"""
pr = form.save(commit=False)
pr.pos = self.pos
pr.save()
messages.success(self.request, "New PosReport created successfully!")
return redirect(
reverse(
"backoffice:posreport_detail",
kwargs={
"camp_slug": self.camp.slug,
"pos_slug": self.pos.slug,
"posreport_uuid": pr.uuid,
},
)
)
class PosReportUpdateView(PosViewMixin, UpdateView):
"""Use this view to update PosReports."""
model = PosReport
fields = [
"date",
"bank_responsible",
"pos_responsible",
"hax_sold_izettle",
"hax_sold_website",
"dkk_sales_izettle",
"comments",
]
template_name = "posreport_form.html"
pk_url_kwarg = "posreport_uuid"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["form"].fields["bank_responsible"].queryset = Team.objects.get(
camp=self.camp,
name="Orga",
).approved_members.all()
context["form"].fields[
"pos_responsible"
].queryset = self.pos.team.responsible_members.all()
return context
class PosReportDetailView(PosViewMixin, DetailView):
"""Show details for a PosReport."""
model = PosReport
template_name = "posreport_detail.html"
pk_url_kwarg = "posreport_uuid"
class PosReportBankCountStartView(PosViewMixin, UpdateView):
"""The bank responsible for a PosReport uses this view to add day-start HAX and DKK counts to a PosReport."""
model = PosReport
template_name = "posreport_form.html"
fields = [
"bank_count_dkk_start",
"bank_count_hax5_start",
"bank_count_hax10_start",
"bank_count_hax20_start",
"bank_count_hax50_start",
"bank_count_hax100_start",
]
pk_url_kwarg = "posreport_uuid"
def setup(self, *args, **kwargs):
super().setup(*args, **kwargs)
if self.request.user != self.get_object().bank_responsible:
raise PermissionDenied("Only the bank responsible can do this")
class PosReportBankCountEndView(PosViewMixin, UpdateView):
"""The bank responsible for a PosReport uses this view to add day-end HAX and DKK counts to a PosReport."""
model = PosReport
template_name = "posreport_form.html"
fields = [
"bank_count_dkk_end",
"bank_count_hax5_end",
"bank_count_hax10_end",
"bank_count_hax20_end",
"bank_count_hax50_end",
"bank_count_hax100_end",
]
pk_url_kwarg = "posreport_uuid"
def setup(self, *args, **kwargs):
super().setup(*args, **kwargs)
if self.request.user != self.get_object().bank_responsible:
raise PermissionDenied("Only the bank responsible can do this")
class PosReportPosCountStartView(PosViewMixin, UpdateView):
"""The Pos responsible for a PosReport uses this view to add day-start HAX and DKK counts to a PosReport."""
model = PosReport
template_name = "posreport_form.html"
fields = [
"pos_count_dkk_start",
"pos_count_hax5_start",
"pos_count_hax10_start",
"pos_count_hax20_start",
"pos_count_hax50_start",
"pos_count_hax100_start",
]
pk_url_kwarg = "posreport_uuid"
def setup(self, *args, **kwargs):
super().setup(*args, **kwargs)
if self.request.user != self.get_object().pos_responsible:
raise PermissionDenied("Only the Pos responsible can do this")
class PosReportPosCountEndView(PosViewMixin, UpdateView):
"""The Pos responsible for a PosReport uses this view to add day-end HAX and DKK counts to a PosReport."""
model = PosReport
template_name = "posreport_form.html"
fields = [
"pos_count_dkk_end",
"pos_count_hax5_end",
"pos_count_hax10_end",
"pos_count_hax20_end",
"pos_count_hax50_end",
"pos_count_hax100_end",
"pos_json",
]
pk_url_kwarg = "posreport_uuid"
def setup(self, *args, **kwargs):
super().setup(*args, **kwargs)
if self.request.user != self.get_object().pos_responsible:
raise PermissionDenied("Only the pos responsible can do this")