from django.views.generic import CreateView, UpdateView, ListView from django.urls import reverse_lazy from django.http import HttpResponseRedirect from django.db.models import F from .models import PartnerProfile, Establishment 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): 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(LoginRequiredMixin, 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(LoginRequiredMixin, ListView): model = Inquiry template_name = "partners/bidding_list.html" def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.establishment = Establishment.objects.get(id=self.kwargs["id"], owner=self.request.user.partnerprofile) def get_queryset(self): return Inquiry.objects.filter(active=True).distance(self.establishment.coords).filter(distance__lte=F("destination_radius")) class OffersListView(LoginRequiredMixin, 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())