from django.views.generic import CreateView, UpdateView, TemplateView, ListView from django.urls import reverse_lazy from django.shortcuts import redirect from django.contrib import messages from .models import ClientProfile from .mixins import ClientProfileRequiredMixin from localauth.mixins import LoginRequiredMixin from public.mixins import InConstructionMixin from auction.models import Inquiry class ClientRegistrationView(InConstructionMixin, LoginRequiredMixin, CreateView): model = ClientProfile exclude = ["user"] template_name = "clients/signup.html" fields = ["company", "vat_id", "first_name", "last_name", "street", "city", "zip", "state", "country", "phone"] def dispatch(self, request, *args, **kwargs): try: ClientProfile.objects.get(user=request.user) return HttpResponseRedirect(reverse_lazy("clients:profile")) except (ClientProfile.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("clients:profile") def get_initial(self): try: partner = self.request.user.partnerprofile return { "company": partner.company, "vat_id": partner.vat_id, "first_name": partner.first_name, "last_name": partner.last_name, "street": partner.street, "city": partner.city, "zip": partner.zip, "state": partner.state, "country": partner.country, "phone": partner.phone, } except: return { "country": "AT", "phone": "+43" } class ClientProfileView(InConstructionMixin, LoginRequiredMixin, UpdateView): model = ClientProfile exclude = ["user"] template_name = "clients/profile.html" fields = ["company", "vat_id", "first_name", "last_name", "street", "city", "zip", "state", "country"] def get_success_url(self): return reverse_lazy("clients:profile") def get_object(self, queryset=None): return self.request.user.clientprofile def get(self, request, *args, **kwargs): try: return super().get(request, *args, **kwargs) except ClientProfile.DoesNotExist: return redirect("clients:register") class ClientDashboardView(InConstructionMixin, LoginRequiredMixin, TemplateView): template_name = "clients/dashboard.html" class ClientBookingsView(InConstructionMixin, ClientProfileRequiredMixin, ListView): model = Inquiry template_name = "clients/bookings.html" def get_queryset(self): return Inquiry.objects.filter(client=self.request.user.clientprofile)