From 144f39dbf9a44e79675ddac0ea7edd715c4bba1d Mon Sep 17 00:00:00 2001 From: Awoyalejohn Date: Tue, 30 Aug 2022 01:16:50 +0100 Subject: [PATCH] Update quotes app to be pep8 compliant --- quotes/admin.py | 26 ++- quotes/choices.py | 20 +-- quotes/forms.py | 20 ++- quotes/models.py | 20 ++- quotes/urls.py | 51 ++++-- quotes/views.py | 450 ++++++++++++++++++++++++++-------------------- 6 files changed, 352 insertions(+), 235 deletions(-) diff --git a/quotes/admin.py b/quotes/admin.py index b5784f3..5b61205 100644 --- a/quotes/admin.py +++ b/quotes/admin.py @@ -1,20 +1,32 @@ from django.contrib import admin from quotes.models import QuoteRequest, QuoteOrder, QuoteFufillment -# Register your models here. + @admin.register(QuoteRequest) class QuoteRequestAdmin(admin.ModelAdmin): - list_display = ('name', 'user', 'submitted', 'quote_request_number') - readonly_fields = ('quote_request_number',) + list_display = ("name", "user", "submitted", "quote_request_number") + readonly_fields = ("quote_request_number",) @admin.register(QuoteOrder) class QuoteOrderAdmin(admin.ModelAdmin): - list_display = ('quote_request_name', 'user', 'submitted', 'quote_order_number') - readonly_fields = ('quote_request_name', 'type', 'size', 'description', - 'subtotal', 'discount', 'total', 'quote_order_number') + list_display = ( + "quote_request_name", + "user", "submitted", + "quote_order_number" + ) + readonly_fields = ( + "quote_request_name", + "type", + "size", + "description", + "subtotal", + "discount", + "total", + "quote_order_number", + ) @admin.register(QuoteFufillment) class QuoteFufillmentAdmin(admin.ModelAdmin): - list_display = ('quote_order', 'image', 'status') \ No newline at end of file + list_display = ("quote_order", "image", "status") diff --git a/quotes/choices.py b/quotes/choices.py index 9b1e7a3..8ccea8d 100644 --- a/quotes/choices.py +++ b/quotes/choices.py @@ -1,14 +1,14 @@ TYPE_CHOICES = [ - ('IC', 'Icon --- £9.99'), - ('LG', 'Logo --- £19.99'), - ('PS', 'Poster --- £39.99'), - ('ST', 'Sticker --- £9.99'), - ('WP', 'Wallpaper --- £39.99'), - ('BN', 'Banner --- £19.99'), + ("IC", "Icon --- £9.99"), + ("LG", "Logo --- £19.99"), + ("PS", "Poster --- £39.99"), + ("ST", "Sticker --- £9.99"), + ("WP", "Wallpaper --- £39.99"), + ("BN", "Banner --- £19.99"), ] SIZE_CHOICES = [ - ('S', 'Small --- £9.99'), - ('M', 'Medium --- £19.99'), - ('L', 'Large --- £29.99'), -] \ No newline at end of file + ("S", "Small --- £9.99"), + ("M", "Medium --- £19.99"), + ("L", "Large --- £29.99"), +] diff --git a/quotes/forms.py b/quotes/forms.py index e1c509a..809b67b 100644 --- a/quotes/forms.py +++ b/quotes/forms.py @@ -6,28 +6,30 @@ class QuoteRequestForm(forms.ModelForm): class Meta: model = QuoteRequest - exclude = ('user', 'quote_request_number') + exclude = ("user", "quote_request_number") labels = { - 'type': 'What type of design do you need?', - 'size': 'What size?', + "type": "What type of design do you need?", + "size": "What size?", } def __init__(self, *args, **kwargs): super(QuoteRequestForm, self).__init__(*args, **kwargs) - self.fields['name'].widget.attrs['placeholder'] = 'Give the design a name' - self.fields['description'].widget.attrs['placeholder'] = 'Write a description here' - - + self.fields["name"].widget.attrs["placeholder"] = ( + "Give the design a name" + ) + self.fields["description"].widget.attrs[ + "placeholder" + ] = "Write a description here" class QuoteOrderForm(forms.ModelForm): class Meta: model = QuoteOrder - fields = ('name', 'email') + fields = ("name", "email") class QuoteFufillmentForm(forms.ModelForm): class Meta: model = QuoteFufillment - exclude = ('quote_order',) + exclude = ("quote_order",) diff --git a/quotes/models.py b/quotes/models.py index b185b61..08678a3 100644 --- a/quotes/models.py +++ b/quotes/models.py @@ -2,12 +2,12 @@ from profiles.models import UserProfile from quotes.choices import TYPE_CHOICES, SIZE_CHOICES -import uuid -# Create your models here. class QuoteRequest(models.Model): name = models.CharField(max_length=250) - user = models.ForeignKey(UserProfile, on_delete=models.SET_NULL, null=True, blank=True) + user = models.ForeignKey( + UserProfile, on_delete=models.SET_NULL, null=True, blank=True + ) type = models.CharField(max_length=2, choices=TYPE_CHOICES) size = models.CharField(max_length=1, choices=SIZE_CHOICES) description = models.TextField() @@ -19,7 +19,9 @@ def __str__(self): class QuoteOrder(models.Model): - user = models.ForeignKey(UserProfile, on_delete=models.SET_NULL, null=True, blank=True) + user = models.ForeignKey( + UserProfile, on_delete=models.SET_NULL, null=True, blank=True + ) name = models.CharField(max_length=250) email = models.CharField(max_length=250) quote_request_name = models.CharField(max_length=250) @@ -33,14 +35,20 @@ class QuoteOrder(models.Model): quote_order_number = models.CharField(max_length=250, unique=True) class Meta: - ordering = ['-submitted'] + ordering = ["-submitted"] def __str__(self): return self.quote_request_name class QuoteFufillment(models.Model): - quote_order = models.OneToOneField(QuoteOrder, null=True, blank=True, related_name='quote_order_set', on_delete=models.SET_NULL) + quote_order = models.OneToOneField( + QuoteOrder, + null=True, + blank=True, + related_name="quote_order_set", + on_delete=models.SET_NULL, + ) image = models.ImageField(null=True, blank=True) status = models.BooleanField(default=False) diff --git a/quotes/urls.py b/quotes/urls.py index ed1d40e..a3d6c40 100644 --- a/quotes/urls.py +++ b/quotes/urls.py @@ -1,17 +1,42 @@ from django.urls import path from quotes.views import ( - QuoteRequestView, QuoteCheckoutView, QuoteCheckoutSuccess, - QuoteHistoryView, QuoteHistoryDetail, QuoteOrderList, - QuoteOrderFufillCreate, QuoteOrderFufillUpdate - ) + QuoteRequestView, + QuoteCheckoutView, + QuoteCheckoutSuccess, + QuoteHistoryView, + QuoteHistoryDetail, + QuoteOrderList, + QuoteOrderFufillCreate, + QuoteOrderFufillUpdate, +) urlpatterns = [ - path('', QuoteRequestView.as_view(), name='quote_request'), - path('quote_orders', QuoteOrderList.as_view(), name='quote_orders'), - path('quote_orders/fufill/', QuoteOrderFufillCreate.as_view(), name='quote_orders_fufill'), - path('quote_orders/fufill/update/', QuoteOrderFufillUpdate.as_view(), name='quote_fufill_update'), - path('quote_history/', QuoteHistoryView.as_view(), name='quote_history'), - path('quote_history/', QuoteHistoryDetail.as_view(), name='quote_history_detail'), - path('quote_checkout/', QuoteCheckoutView.as_view(), name='quote_checkout'), - path('quote_checkout_success/', QuoteCheckoutSuccess.as_view(), name='quote_checkout_success'), -] \ No newline at end of file + path("", QuoteRequestView.as_view(), name="quote_request"), + path("quote_orders", QuoteOrderList.as_view(), name="quote_orders"), + path( + "quote_orders/fufill/", + QuoteOrderFufillCreate.as_view(), + name="quote_orders_fufill", + ), + path( + "quote_orders/fufill/update/", + QuoteOrderFufillUpdate.as_view(), + name="quote_fufill_update", + ), + path("quote_history/", QuoteHistoryView.as_view(), name="quote_history"), + path( + "quote_history/", + QuoteHistoryDetail.as_view(), + name="quote_history_detail", + ), + path( + "quote_checkout/", + QuoteCheckoutView.as_view(), + name="quote_checkout" + ), + path( + "quote_checkout_success/", + QuoteCheckoutSuccess.as_view(), + name="quote_checkout_success", + ), +] diff --git a/quotes/views.py b/quotes/views.py index 7e612af..04a0ef9 100644 --- a/quotes/views.py +++ b/quotes/views.py @@ -2,7 +2,13 @@ from django.urls import reverse_lazy from django.shortcuts import render, redirect, reverse, get_object_or_404 from django.http import HttpResponseRedirect -from django.views.generic import View, TemplateView, ListView, CreateView, UpdateView +from django.views.generic import ( + View, + TemplateView, + ListView, + CreateView, + UpdateView +) from django.contrib import messages from django.contrib.auth.mixins import LoginRequiredMixin from django.contrib.auth.mixins import UserPassesTestMixin @@ -14,135 +20,141 @@ from .forms import QuoteRequestForm, QuoteOrderForm, QuoteFufillmentForm from math import ceil import uuid +import stripe -from django.http import JsonResponse - -import stripe -# Create your views here. class QuoteRequestView(LoginRequiredMixin, View): - """ A view to request and purchase a specific graphic design """ + """A view to request and purchase a specific graphic design""" + def get(self, request): stripe_public_key = settings.STRIPE_PUBLIC_KEY stripe_secret_key = settings.STRIPE_SECRET_KEY stripe.api_key = stripe_secret_key form = QuoteRequestForm() - template = 'quotes/quote_request.html' + template = "quotes/quote_request.html" context = { - 'form': form, - 'stripe_public_key': stripe_public_key, - 'stripe_secret_key': stripe_secret_key, - + "form": form, + "stripe_public_key": stripe_public_key, + "stripe_secret_key": stripe_secret_key, } - return render(request, template, context) - + def post(self, request): type_cost = None selected_type = None - type = request.POST['type'] - if type == 'IC' or type == 'ST': + type = request.POST["type"] + if type == "IC" or type == "ST": type_cost = 9.99 - if type == 'IC': - selected_type = 'Icon' + if type == "IC": + selected_type = "Icon" else: - selected_type = 'Sticker' - elif type == 'LG' or type == 'BN': + selected_type = "Sticker" + elif type == "LG" or type == "BN": type_cost = 19.99 - if type == 'LG': - selected_type = 'Logo' + if type == "LG": + selected_type = "Logo" else: - selected_type = 'Banner' - elif type == 'PS' or type == 'WP': + selected_type = "Banner" + elif type == "PS" or type == "WP": type_cost = 39.99 - if type == 'PS': - selected_type = 'Poster' + if type == "PS": + selected_type = "Poster" else: - selected_type = 'Wallpaper' + selected_type = "Wallpaper" else: - messages.error(request, 'Something went wrong wth your request') - return redirect(reverse('quote_request')) + messages.error(request, "Something went wrong wth your request") + return redirect(reverse("quote_request")) size_cost = None selected_size = None - size = request.POST['size'] - if size == 'S': + size = request.POST["size"] + if size == "S": size_cost = 9.99 - selected_size = 'Small' - elif size == 'M': + selected_size = "Small" + elif size == "M": size_cost = 19.99 - selected_size = 'Medium' - elif size == 'L': + selected_size = "Medium" + elif size == "L": size_cost = 29.99 - selected_size = 'Large' + selected_size = "Large" else: - messages.error(request, 'Something went wrong wth your request') - return redirect(reverse('quote_request')) - + messages.error(request, "Something went wrong wth your request") + return redirect(reverse("quote_request")) subtotal = round(type_cost + size_cost, 2) if subtotal > settings.DISCOUNT_THRESHOLD: discount = ceil(subtotal * settings.DISCOUNT_PERCENTAGE / 100) - + else: discount = 0 - - total = (round(subtotal - discount, 2)) - quote_item_name = request.POST['name'] - quote_description = request.POST['description'] + total = round(subtotal - discount, 2) + + quote_item_name = request.POST["name"] + quote_description = request.POST["description"] form = QuoteRequestForm(request.POST) form.instance.user = UserProfile.objects.get(user=self.request.user) uuid_number = str(uuid.uuid4()) - form.instance.quote_request_number = uuid_number + form.instance.quote_request_number = uuid_number if form.is_valid(): form.save() - request.session['quote_item_name'] = quote_item_name - request.session['quote_description'] = quote_description - request.session['quote_subtotal'] = subtotal - request.session['quote_discount'] = discount - request.session['quote_total'] = total - request.session['selected_type'] = selected_type - request.session['selected_size'] = selected_size - request.session['quote_request_number'] = uuid_number - request.session['from_quote_request'] = True - messages.info(request, 'Just need some more information to complete your order.') - return HttpResponseRedirect(reverse('quote_checkout')) + request.session["quote_item_name"] = quote_item_name + request.session["quote_description"] = quote_description + request.session["quote_subtotal"] = subtotal + request.session["quote_discount"] = discount + request.session["quote_total"] = total + request.session["selected_type"] = selected_type + request.session["selected_size"] = selected_size + request.session["quote_request_number"] = uuid_number + request.session["from_quote_request"] = True + messages.info( + request, + "Just need some more information to complete your order." + ) + return HttpResponseRedirect(reverse("quote_checkout")) class QuoteCheckoutView(LoginRequiredMixin, View): - """ A view to checkout quote after getting the data from the QuoteRequestView """ - def get(self, request): + """ + A view to checkout quote after + getting the data from the QuoteRequestView + """ + def get(self, request): # Checks if the user was sent here from quote request view - if not 'from_quote_request' in request.session: - messages.info(request, "You need to submit a request before checkout!") - return HttpResponseRedirect(reverse('quote_request')) + if "from_quote_request" not in request.session: + messages.info( + request, + "You need to submit a request before checkout!" + ) + return HttpResponseRedirect(reverse("quote_request")) # Removes from_quote_request key from the session to prevent # access to the checkout view if it was not from the quote request view - request.session.pop('from_quote_request') + request.session.pop("from_quote_request") stripe_public_key = settings.STRIPE_PUBLIC_KEY stripe_secret_key = settings.STRIPE_SECRET_KEY data_dict = { - 'name': self.request.user, - 'email': UserProfile.objects.get(user=self.request.user).user.email + "name": self.request.user, + "email": UserProfile.objects.get( + user=self.request.user + ).user.email, } form = QuoteOrderForm(data_dict) - quote_item_name = request.session['quote_item_name'] - quote_description = request.session['quote_description'] - quote_subtotal = request.session['quote_subtotal'] - quote_discount = request.session['quote_discount'] - quote_total = request.session['quote_total'] - selected_type = request.session['selected_type'] - selected_size = request.session['selected_size'] - quote_order_number = request.session['quote_request_number'] + quote_item_name = request.session["quote_item_name"] + quote_description = request.session["quote_description"] + quote_subtotal = request.session["quote_subtotal"] + quote_discount = request.session["quote_discount"] + quote_total = request.session["quote_total"] + selected_type = request.session["selected_type"] + selected_size = request.session["selected_size"] + quote_order_number = request.session["quote_request_number"] stripe_total = round(quote_total * 100) stripe.api_key = stripe_secret_key @@ -151,140 +163,180 @@ def get(self, request): currency=settings.STRIPE_CURRENCY, ) - if not stripe_public_key: - messages.warning(request, 'Stripe public key is missing. \ - Did you forget to set in your environment?') + messages.warning( + request, + "Stripe public key is missing. \ + Did you forget to set in your environment?", + ) - template = 'quotes/quote_checkout.html' + template = "quotes/quote_checkout.html" context = { - 'form': form, - 'quote_item_name': quote_item_name, - 'quote_description': quote_description, - 'quote_subtotal': quote_subtotal, - 'quote_discount': quote_discount, - 'quote_total': quote_total, - 'selected_type': selected_type, - 'selected_size': selected_size, - 'quote_order_number': quote_order_number, - 'stripe_public_key': stripe_public_key, - 'client_secret': payment_intent.client_secret, + "form": form, + "quote_item_name": quote_item_name, + "quote_description": quote_description, + "quote_subtotal": quote_subtotal, + "quote_discount": quote_discount, + "quote_total": quote_total, + "selected_type": selected_type, + "selected_size": selected_size, + "quote_order_number": quote_order_number, + "stripe_public_key": stripe_public_key, + "client_secret": payment_intent.client_secret, } return render(request, template, context) - def post(self, request): + def post(self, request): stripe_public_key = settings.STRIPE_PUBLIC_KEY stripe_secret_key = settings.STRIPE_SECRET_KEY - quote_order_number = request.session['quote_request_number'] + quote_order_number = request.session["quote_request_number"] form = QuoteOrderForm(request.POST) form.instance.user = UserProfile.objects.get(user=self.request.user) - form.instance.name = request.POST['name'] - form.instance.email = request.POST['email'] - form.instance.quote_request_name = request.session['quote_item_name'] - form.instance.type = request.session['selected_type'] - form.instance.size = request.session['selected_size'] - form.instance.description = request.session['quote_description'] - form.instance.subtotal = request.session['quote_subtotal'] - form.instance.discount = request.session['quote_discount'] - form.instance.total = request.session['quote_total'] - form.instance.quote_order_number = request.session['quote_request_number'] - + form.instance.name = request.POST["name"] + form.instance.email = request.POST["email"] + form.instance.quote_request_name = request.session["quote_item_name"] + form.instance.type = request.session["selected_type"] + form.instance.size = request.session["selected_size"] + form.instance.description = request.session["quote_description"] + form.instance.subtotal = request.session["quote_subtotal"] + form.instance.discount = request.session["quote_discount"] + form.instance.total = request.session["quote_total"] + form.instance.quote_order_number = ( + request.session["quote_request_number"] + ) if form.is_valid(): form.save() - #send email - quote_order = get_object_or_404(QuoteOrder, quote_order_number=form.instance.quote_order_number) + # send email + quote_order = get_object_or_404( + QuoteOrder, quote_order_number=form.instance.quote_order_number + ) cust_email = quote_order.email subject = render_to_string( - 'quotes/confirmation_emails/confirmation_email_subject.txt', - {'quote_order': quote_order}) + "quotes/confirmation_emails/confirmation_email_subject.txt", + {"quote_order": quote_order}, + ) body = render_to_string( - 'quotes/confirmation_emails/confirmation_email_body.txt', - {'quote_order': quote_order, 'contact_email': settings.DEFAULT_FROM_EMAIL}) - - send_mail( - subject, - body, - settings.DEFAULT_FROM_EMAIL, - [cust_email] + "quotes/confirmation_emails/confirmation_email_body.txt", + { + "quote_order": quote_order, + "contact_email": settings.DEFAULT_FROM_EMAIL, + }, + ) + + send_mail(subject, body, settings.DEFAULT_FROM_EMAIL, [cust_email]) + return redirect( + reverse("quote_checkout_success", args=[quote_order_number]) ) - return redirect(reverse('quote_checkout_success', args=[quote_order_number])) else: - messages.error(request, 'There was an error with your form. \ - Please double check your information.') + messages.error( + request, + "There was an error with your form. \ + Please double check your information.", + ) class QuoteCheckoutSuccess(View): - """ A view to handle successful quote request checkouts """ + """A view to handle successful quote request checkouts""" + def get(self, request, quote_order_number): - quote_order = get_object_or_404(QuoteOrder, quote_order_number=quote_order_number) - if not (self.request.user.is_superuser or self.request.user == quote_order.user.user): - messages.error(request, "You are not authorised to view this page!") - return HttpResponseRedirect(reverse('home')) - messages.success(request, f"Order successfuly processed! \ + quote_order = get_object_or_404( + QuoteOrder, quote_order_number=quote_order_number + ) + if not ( + self.request.user.is_superuser or + self.request.user == quote_order.user.user + ): + messages.error( + request, + "You are not authorised to view this page!" + ) + return HttpResponseRedirect(reverse("home")) + messages.success( + request, + f"Order successfuly processed! \ Your order number is {quote_order_number}. A confirmation \ - email will be sent to {quote_order.email}.") - - - template = 'quotes/quote_checkout_success.html' - context = {'quote_order': quote_order} + email will be sent to {quote_order.email}.", + ) + + template = "quotes/quote_checkout_success.html" + context = {"quote_order": quote_order} return render(request, template, context) class QuoteHistoryView(LoginRequiredMixin, TemplateView): - """ A view to list a users quote request history """ - template_name = 'quotes/quote_history.html' + """A view to list a users quote request history""" + + template_name = "quotes/quote_history.html" def get_context_data(self, **kwargs): context = super(QuoteHistoryView, self).get_context_data(**kwargs) profile = get_object_or_404(UserProfile, user=self.request.user) quote_orders = profile.quoteorder_set.all() - context['quote_orders'] = quote_orders + context["quote_orders"] = quote_orders return context class QuoteHistoryDetail(UserPassesTestMixin, TemplateView): - """ A view to display a specific user quote request in more detail """ + """A view to display a specific user quote request in more detail""" + template_name = "quotes/quote_checkout_success.html" - + def get_context_data(self, quote_order_number, **kwargs): context = super(QuoteHistoryDetail, self).get_context_data(**kwargs) - quote_order = get_object_or_404(QuoteOrder, quote_order_number=quote_order_number) - - messages.info(self.request, ( - f'This is a past confirmation for quote order number {quote_order_number}. ' - 'A confirmation email was sent on the order date.' - )) - context['quote_order'] = quote_order - context['from_quote_history'] = True + quote_order = get_object_or_404( + QuoteOrder, quote_order_number=quote_order_number + ) + + messages.info( + self.request, + ( + f"This is a past confirmation for quote\ + order number {quote_order_number}. " + "A confirmation email was sent on the order date." + ), + ) + context["quote_order"] = quote_order + context["from_quote_history"] = True return context - # restric access mixin from https://stackoverflow.com/questions/58217055/how-can-i-restrict-access-to-a-view-to-only-super-users-in-django + # restrict access mixin from + # https://stackoverflow.com/questions/58217055/ + # how-can-i-restrict-access-to-a-view-to-only-super-users-in-django def test_func(self): quote_order_number = self.kwargs.get("quote_order_number") - quote_order = get_object_or_404(QuoteOrder, quote_order_number=quote_order_number) - return self.request.user.is_superuser or self.request.user == quote_order.user.user + quote_order = get_object_or_404( + QuoteOrder, quote_order_number=quote_order_number + ) + return ( + self.request.user.is_superuser or + self.request.user == quote_order.user.user + ) + class SuperUserCheck(UserPassesTestMixin, View): - """ - A CBV mixin to prevent access from users that are not superusers - From https://stackoverflow.com/questions/67351312/django-check-if-superuser-in-class-based-view + """ + A CBV mixin to prevent access from users + that are not superusers + From https://stackoverflow.com/questions/67351312/ + django-check-if-superuser-in-class-based-view """ + def test_func(self): return self.request.user.is_superuser -class QuoteOrderList(SuperUserCheck, ListView): - """ A view to list all the customer quote orders for the admin """ - model = QuoteOrder - template_name = 'quotes/quote_order_list.html' - context_object_name = 'quote_orders' +class QuoteOrderList(SuperUserCheck, ListView): + """A view to list all the customer quote orders for the admin""" + model = QuoteOrder + template_name = "quotes/quote_order_list.html" + context_object_name = "quote_orders" class QuoteOrderFufillCreate(SuperUserCheck, CreateView): @@ -292,37 +344,46 @@ class QuoteOrderFufillCreate(SuperUserCheck, CreateView): A view to display an individual customer quote order and upload a graphic design for the customer to download """ + model = QuoteFufillment - template_name = 'quotes/quote_fufillment.html' - success_url = reverse_lazy('quote_orders') + template_name = "quotes/quote_fufillment.html" + success_url = reverse_lazy("quote_orders") form_class = QuoteFufillmentForm - def get_context_data(self, **kwargs): - context = super(QuoteOrderFufillCreate, self).get_context_data(**kwargs) - quote_order = QuoteOrder.objects.get(quote_order_number=self.kwargs['quote_order_number']) - context['quote_order'] = quote_order + context = super( + QuoteOrderFufillCreate, + self + ).get_context_data(**kwargs) + quote_order = QuoteOrder.objects.get( + quote_order_number=self.kwargs["quote_order_number"] + ) + context["quote_order"] = quote_order return context def form_valid(self, form): - form.instance.quote_order = QuoteOrder.objects.get(quote_order_number=self.kwargs['quote_order_number']) - status = form.cleaned_data['status'] + form.instance.quote_order = QuoteOrder.objects.get( + quote_order_number=self.kwargs["quote_order_number"] + ) + status = form.cleaned_data["status"] if status: - quote_order = QuoteOrder.objects.get(quote_order_number=self.kwargs['quote_order_number']) + quote_order = QuoteOrder.objects.get( + quote_order_number=self.kwargs["quote_order_number"] + ) cust_email = quote_order.email subject = render_to_string( - 'quotes/confirmation_emails/confirmation_email_subject_quote_fufillment.txt', - {'quote_order': quote_order}) + "quotes/confirmation_emails/confirmation_email_subject_quote_fufillment.txt", + {"quote_order": quote_order}, + ) body = render_to_string( - 'quotes/confirmation_emails/confirmation_email_body_quote_fufillment.txt', - {'quote_order': quote_order, 'contact_email': settings.DEFAULT_FROM_EMAIL}) - - send_mail( - subject, - body, - settings.DEFAULT_FROM_EMAIL, - [cust_email] - ) + "quotes/confirmation_emails/confirmation_email_body_quote_fufillment.txt", + { + "quote_order": quote_order, + "contact_email": settings.DEFAULT_FROM_EMAIL, + }, + ) + + send_mail(subject, body, settings.DEFAULT_FROM_EMAIL, [cust_email]) return super().form_valid(form) @@ -331,38 +392,47 @@ class QuoteOrderFufillUpdate(SuperUserCheck, UpdateView): A view to display an individual customer quote order and change the uploaded graphic design for the customer to download """ + model = QuoteFufillment - template_name = 'quotes/quote_fufillment.html' - success_url = reverse_lazy('quote_orders') + template_name = "quotes/quote_fufillment.html" + success_url = reverse_lazy("quote_orders") form_class = QuoteFufillmentForm def get_object(self): - quote_order = QuoteOrder.objects.get(quote_order_number=self.kwargs['quote_order_number']) + quote_order = QuoteOrder.objects.get( + quote_order_number=self.kwargs["quote_order_number"] + ) return quote_order.quote_order_set - + def get_context_data(self, **kwargs): - context = super(QuoteOrderFufillUpdate, self).get_context_data(**kwargs) - quote_order = QuoteOrder.objects.get(quote_order_number=self.kwargs['quote_order_number']) - context['quote_order'] = quote_order + context = super( + QuoteOrderFufillUpdate, + self + ).get_context_data(**kwargs) + quote_order = QuoteOrder.objects.get( + quote_order_number=self.kwargs["quote_order_number"] + ) + context["quote_order"] = quote_order return context def form_valid(self, form): - status = form.cleaned_data['status'] + status = form.cleaned_data["status"] if status: - quote_order = QuoteOrder.objects.get(quote_order_number=self.kwargs['quote_order_number']) + quote_order = QuoteOrder.objects.get( + quote_order_number=self.kwargs["quote_order_number"] + ) cust_email = quote_order.email subject = render_to_string( - 'quotes/confirmation_emails/confirmation_email_subject_quote_fufillment.txt', - {'quote_order': quote_order}) + "quotes/confirmation_emails/confirmation_email_subject_quote_fufillment.txt", + {"quote_order": quote_order}, + ) body = render_to_string( - 'quotes/confirmation_emails/confirmation_email_body_quote_fufillment.txt', - {'quote_order': quote_order, 'contact_email': settings.DEFAULT_FROM_EMAIL}) - - send_mail( - subject, - body, - settings.DEFAULT_FROM_EMAIL, - [cust_email] - ) + "quotes/confirmation_emails/confirmation_email_body_quote_fufillment.txt", + { + "quote_order": quote_order, + "contact_email": settings.DEFAULT_FROM_EMAIL, + }, + ) + + send_mail(subject, body, settings.DEFAULT_FROM_EMAIL, [cust_email]) return super().form_valid(form) -