JourneyJoker/partners/views.py
Klaus-Uwe Mitterer 88dbecec35 A few more views
Fixing inquiry processing view
2021-04-13 14:44:22 +02:00

120 lines
No EOL
4.5 KiB
Python

from django.views.generic import CreateView, UpdateView, ListView, DetailView
from django.urls import reverse_lazy
from django.http import HttpResponseRedirect
from django.db.models import F
from django.shortcuts import get_list_or_404, redirect, get_object_or_404
from django.contrib import messages
from .models import PartnerProfile, Establishment
from .mixins import PartnerProfileRequiredMixin
from auction.models import Inquiry, Offer
from public.mixins import InConstructionMixin
from localauth.mixins import LoginRequiredMixin
class PartnerRegistrationView(InConstructionMixin, LoginRequiredMixin, CreateView):
model = PartnerProfile
exclude = ["user"]
template_name = "partners/signup.html"
fields = ["company", "vat_id", "first_name", "last_name", "street", "city", "zip", "state", "country"]
def dispatch(self, request, *args, **kwargs):
try:
PartnerProfile.objects.get(user=request.user)
return HttpResponseRedirect(reverse_lazy("partners:profile"))
except (PartnerProfile.DoesNotExist, TypeError):
return super().dispatch(request, *args, **kwargs)
def form_valid(self, form):
form.instance.user = self.request.user
return super().form_valid(form)
def get_success_url(self):
messages.success(self.request, "Profil erfolgreich angelegt!")
return reverse_lazy("partners:profile")
def get_initial(self):
try:
client = self.request.user.clientprofile
return {
"company": client.company,
"vat_id": client.vat_id,
"first_name": client.first_name,
"last_name": client.last_name,
"street": client.street,
"city": client.city,
"zip": client.zip,
"state": client.state,
"country": client.country
}
except:
return {}
class PartnerProfileView(InConstructionMixin, PartnerProfileRequiredMixin, UpdateView):
model = PartnerProfile
exclude = ["user"]
template_name = "partners/profile.html"
fields = ["company", "vat_id", "first_name", "last_name", "street", "city", "zip", "state", "country"]
def get_success_url(self):
return reverse_lazy("partners:profile")
def get_object(self, queryset=None):
return self.request.user.partnerprofile
class BiddingListView(InConstructionMixin, PartnerProfileRequiredMixin, ListView):
model = Inquiry
template_name = "partners/bidding_list.html"
def dispatch(self, request, *args, **kwargs):
self.establishment = self.get_establishment()
if not self.establishment:
messages.warning(request, "Um bieten zu können, muss zuerst eine Unterkunft im System hinterlegt werden!")
return redirect("partners:establishment_register")
return super().dispatch(request, *args, **kwargs)
def get_establishment(self):
establishment = self.kwargs.get("id", None)
kwargs = {"owner": self.request.user.partnerprofile}
if establishment:
kwargs["id"] = establishment
if establishment:
return get_object_or_404(Establishment, **kwargs)
else:
return Establishment.objects.filter(**kwargs).first()
def get_queryset(self):
establishment = self.get_establishment()
return Inquiry.objects.filter(active=True).distance(establishment.coords).filter(distance__lte=F("destination_radius"))
class OffersListView(InConstructionMixin, PartnerProfileRequiredMixin, ListView):
model = Offer
template_name = "partners/offer_list.html"
def get_queryset(self):
return Offer.objects.filter(establishment__in=self.request.user.partnerprofile.establishment_set.all())
class EstablishmentsListView(InConstructionMixin, PartnerProfileRequiredMixin, ListView):
model = Establishment
template_name = "partners/establishment_list.html"
def get_queryset(self):
return self.request.user.partnerprofile.establishment_set
class EstablishmentRequestView(InConstructionMixin, PartnerProfileRequiredMixin, CreateView):
model = Establishment
template_name = "partners/establishment_register.html"
fields = ["name", "stars", "superior", "street", "city", "zip", "state", "country"]
class PartnerDashboardView(InConstructionMixin, PartnerProfileRequiredMixin, DetailView):
model = PartnerProfile
template_name = "partners/dashboard.html"
def get_object(self):
return self.request.user.partnerprofile