From 7e92e233fe9e6040c14878f0a8db4706f0b3174a Mon Sep 17 00:00:00 2001 From: Nathan Chapman Date: Sun, 24 Apr 2022 14:48:16 -0600 Subject: [PATCH] Add checks for shipping information --- src/storefront/cart.py | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/src/storefront/cart.py b/src/storefront/cart.py index 25979f5..2ffea70 100644 --- a/src/storefront/cart.py +++ b/src/storefront/cart.py @@ -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())