Add checks for shipping information

This commit is contained in:
Nathan Chapman 2022-04-24 14:48:16 -06:00
parent 4da1c860c0
commit 7e92e233fe

View File

@ -3,6 +3,8 @@ import logging
from decimal import Decimal
from django.conf import settings
from django.contrib import messages
from django.shortcuts import redirect, reverse
from django.urls import reverse_lazy
from core.models import Product, OrderLine, Coupon
from core.usps import USPSApiWithRate
@ -22,6 +24,7 @@ logger = logging.getLogger(__name__)
class Cart:
def __init__(self, request):
self.request = request
self.session = request.session
self.coupon_code = self.session.get('coupon_code')
cart = self.session.get(settings.CART_SESSION_ID)
@ -73,10 +76,12 @@ class Cart:
return sum(item['quantity'] for item in self.cart.values())
def get_total_weight(self):
return sum([item['product'].weight.value * item['quantity'] for item in self])
if len(self) > 0:
return sum([item['product'].weight.value * item['quantity'] for item in self])
else:
return 0
def get_shipping_box(self):
logger.info(len(self))
if len(self) > 6 and len(self) <= 10:
return ShippingContainer.LG_FLAT_RATE_BOX
elif len(self) > 2 and len(self) <= 6:
@ -87,10 +92,19 @@ class Cart:
return ShippingContainer.VARIABLE
def get_shipping_cost(self):
usps_rate_request = self.build_usps_rate_request()
usps = USPSApiWithRate(settings.USPS_USER_ID, test=True)
validation = usps.get_rate(usps_rate_request)
return Decimal(validation.result['RateV4Response']['Package']['Postage']['CommercialRate'])
if len(self) > 0:
usps_rate_request = self.build_usps_rate_request()
usps = USPSApiWithRate(settings.USPS_USER_ID, test=True)
validation = usps.get_rate(usps_rate_request)
logger.info(validation.result)
try:
rate = Decimal(validation.result['RateV4Response']['Package']['Postage']['CommercialRate'])
return rate
except KeyError as e:
raise e("USPS Result has no 'Postage'")
return Decimal('0.00')
else:
return Decimal('0.00')
def get_total_price(self):
return sum(Decimal(item['price']) * item['quantity'] for item in self.cart.values())