Update USPS shipping handling

This commit is contained in:
Nathan Chapman 2022-05-01 10:29:59 -06:00
parent b13511e59e
commit f2003a711f
3 changed files with 26 additions and 9 deletions

View File

@ -115,17 +115,21 @@ class Cart:
return ShippingContainer.VARIABLE return ShippingContainer.VARIABLE
def get_shipping_cost(self): def get_shipping_cost(self):
if len(self) > 0: if len(self) > 0 and self.session.get("shipping_address"):
usps_rate_request = self.build_usps_rate_request() try:
usps_rate_request = self.build_usps_rate_request()
except TypeError as e:
return Decimal('0.00')
usps = USPSApiWithRate(settings.USPS_USER_ID, test=True) usps = USPSApiWithRate(settings.USPS_USER_ID, test=True)
validation = usps.get_rate(usps_rate_request) validation = usps.get_rate(usps_rate_request)
logger.info(validation.result) logger.info(validation.result)
try: try:
rate = Decimal(validation.result['RateV4Response']['Package']['Postage']['CommercialRate']) rate = validation.result['RateV4Response']['Package']['Postage']['CommercialRate']
return rate rate = '0.00'
except KeyError as e: except KeyError as e:
raise e("USPS Result has no 'Postage'") raise e("USPS Result has no 'Postage'")
return Decimal('0.00') rate = '0.00'
return Decimal(rate)
else: else:
return Decimal('0.00') return Decimal('0.00')

View File

@ -16,7 +16,7 @@
</figure> </figure>
<div class="item__info"> <div class="item__info">
<h4>{{product.name}}</h4> <h4>{{product.name}}</h4>
<p><strong>Grind</strong>: {{item.grind}}</p> <p><strong>Grind</strong>:</p>
{% for key, value in item.variations.items %} {% for key, value in item.variations.items %}
<p><strong>{{key}}</strong><br> <p><strong>{{key}}</strong><br>
<form class="item__form" action="{% url 'storefront:cart-update' product.pk key %}" method="POST"> <form class="item__form" action="{% url 'storefront:cart-update' product.pk key %}" method="POST">

View File

@ -7,7 +7,7 @@ from django.shortcuts import render, reverse, redirect, get_object_or_404
from django.urls import reverse_lazy from django.urls import reverse_lazy
from django.core.mail import EmailMessage from django.core.mail import EmailMessage
from django.core.exceptions import ObjectDoesNotExist from django.core.exceptions import ObjectDoesNotExist
from django.http import JsonResponse from django.http import JsonResponse, HttpResponseRedirect
from django.views.generic.base import RedirectView, TemplateView from django.views.generic.base import RedirectView, TemplateView
from django.views.generic.edit import FormView, CreateView, UpdateView, DeleteView, FormMixin from django.views.generic.edit import FormView, CreateView, UpdateView, DeleteView, FormMixin
from django.views.generic.detail import DetailView, SingleObjectMixin from django.views.generic.detail import DetailView, SingleObjectMixin
@ -15,6 +15,7 @@ from django.views.generic.list import ListView
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
from django.contrib.messages.views import SuccessMessageMixin from django.contrib.messages.views import SuccessMessageMixin
from django.contrib import messages
from django.views.decorators.csrf import csrf_exempt from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_POST from django.views.decorators.http import require_POST
from django.forms.models import model_to_dict from django.forms.models import model_to_dict
@ -193,13 +194,25 @@ class OrderCreateView(CreateView):
form_class = OrderCreateForm form_class = OrderCreateForm
success_url = reverse_lazy('storefront:payment-done') success_url = reverse_lazy('storefront:payment-done')
def get(self, request, *args, **kwargs):
if not self.request.session.get("shipping_address"):
messages.warning(request, 'Please add a shipping address.')
return HttpResponseRedirect(reverse('storefront:checkout-address'))
else:
return super().get(request, *args, **kwargs)
def get_initial(self): def get_initial(self):
cart = Cart(self.request) cart = Cart(self.request)
try:
shipping_cost = cart.get_shipping_cost()
except Exception as e:
raise e('Could not get shipping information')
shipping_cost = Decimal('0.00')
initial = { initial = {
'total_net_amount': cart.get_total_price(), 'total_net_amount': cart.get_total_price(),
'shipping_total': cart.get_shipping_cost() 'shipping_total': shipping_cost
} }
if self.request.session.get('shipping_address'): if self.request.session.get('shipping_address'):
a = self.request.session.get('shipping_address') a = self.request.session.get('shipping_address')
user_info = { user_info = {