def post(self, *args, **kwargs): form = CheckoutForm(self.request.POST or None) try: order = Order.objects.get(user=self.request.user, ordered=False) if form.is_valid(): use_default_shipping = form.cleaned_data.get( 'use_default_shipping') if use_default_shipping: print("Using the defualt shipping address") address_qs = Address.objects.filter(user=self.request.user, address_type='S', default=True) if address_qs.exists(): shipping_address = address_qs[0] order.shipping_address = shipping_address order.save() else: messages.info(self.request, "No default shipping address available") return redirect('payments:checkout') else: shipping_address1 = form.cleaned_data.get( 'shipping_address') shipping_address2 = form.cleaned_data.get( 'shipping_address2') shipping_number = form.cleaned_data.get('shipping_number') shipping_city = form.cleaned_data.get('shipping_city') shipping_zip = form.cleaned_data.get('shipping_zip') if is_valid_form([ shipping_address1, shipping_number, shipping_city, shipping_zip ]): print('shipping-valid') shipping_address = Address( user=self.request.user, street_address=shipping_address1, apartment_address=shipping_address2, number=shipping_number, city=shipping_city, zip=shipping_zip, address_type='S') shipping_address.save() order.shipping_address = shipping_address order.save() set_default_shipping = form.cleaned_data.get( 'set_default_shipping') if set_default_shipping: shipping_address.default = True shipping_address.save() else: messages.info( self.request, "Please fill in the required shipping address fields" ) use_default_billing = form.cleaned_data.get( 'use_default_billing') same_billing_address = form.cleaned_data.get( 'same_billing_address') if same_billing_address: billing_address = shipping_address billing_address.pk = None billing_address.save() billing_address.address_type = 'B' billing_address.save() order.billing_address = billing_address order.save() elif use_default_billing: print("Using the defualt billing address") address_qs = Address.objects.filter(user=self.request.user, address_type='B', default=True) if address_qs.exists(): billing_address = address_qs[0] order.billing_address = billing_address order.save() else: messages.info(self.request, "No default billing address available") return redirect('payments:checkout') else: print("User is entering a new billing address") billing_address1 = form.cleaned_data.get('billing_address') billing_address2 = form.cleaned_data.get( 'billing_address2') billing_number = form.cleaned_data.get('billing_number') billing_city = form.cleaned_data.get('billing_city') billing_zip = form.cleaned_data.get('billing_zip') if is_valid_form([ billing_address1, billing_number, billing_city, billing_zip ]): print('billing-valid') billing_address = Address( user=self.request.user, street_address=billing_address1, apartment_address=billing_address2, city=billing_city, number=billing_number, zip=billing_zip, address_type='B') billing_address.save() order.billing_address = billing_address order.save() set_default_billing = form.cleaned_data.get( 'set_default_billing') if set_default_billing: billing_address.default = True billing_address.save() else: messages.info( self.request, "Please fill in the required billing address fields" ) payment_option = form.cleaned_data.get('payment_option') if payment_option == 'O': return redirect('payments:payment', payment_option='online') elif payment_option == 'C': return redirect('payments:payment', payment_option='cod') else: messages.warning(self.request, "Invalid payment option selected") return redirect('payments:checkout') except ObjectDoesNotExist: messages.warning(self.request, "You do not have an active order") return redirect("orders:order-summary")