Пример #1
0
    def form_valid(self, form):
        try:
            context = self.get_context_data()
            cart_items = self.request.session.get('cart')
            email_context = {
                'carts':
                cart_items,
                'user':
                self.request.user,
                'extra':
                context['cart_extra'],
                'shipping':
                ShippingLocation.objects.get(id=self.request.POST['shipping']),
                'payment':
                self.request.POST['payment']
            }
            if self.request.POST['payment'] == 'bank':
                email_context['banks'] = Banks.objects.all()

            with transaction.atomic():
                shipping = ShippingInfo(
                    address=form.cleaned_data['home_address'],
                    first_name=form.cleaned_data['first_name'],
                    last_name=form.cleaned_data['last_name'],
                    phone_number=form.cleaned_data['phone'],
                    email_address=form.cleaned_data['email'],
                    primary=True)
                shipping.save()
                order = Order(cart=cart_items,
                              total=context['cart_extra']['total_amount'],
                              shipping_id=self.request.POST['shipping'],
                              user_shipping_id=shipping.id,
                              payment_method=self.request.POST['payment'],
                              status='pending')
                order.save()

            email_context['user_shipping'] = ShippingInfo.objects.get(
                id=shipping.id)

            email_context['order'] = order
            self.request.session.modified = True
            del self.request.session['cart']
            self.request.session['cart'] = {}
            send_order_mail(email_context)
            order_notification_mail()
            messages.success(
                self.request,
                "Order placed successfully. Check your email to know more about your order"
            )

        except KeyError as err:
            messages.error(
                self.request,
                "An error occurred while trying to process your order. %s is missing"
                % err)
            return super().form_invalid(form)

        return super().form_valid(form)
Пример #2
0
 def test_total_cost_in_order(self):
     """total_price method should return sum of price * count for every product. """
     self.cart.add(self.product1, 10)
     self.cart.add(self.product2, 3)
     order = Order(email=self.mail)
     order.save()
     order = order.set_positions(self.cart)
     self.assertEqual(order.total_price,
                      self.product1.price * 10 + self.product2.price * 3)
Пример #3
0
 def test_total_cost_in_order(self):
     """total_price method should return sum of price * count for every product. """
     self.cart.add(self.product1, 10)
     self.cart.add(self.product2, 3)
     order = Order(email=self.mail)
     order.save()
     order = order.set_positions(self.cart)
     self.assertEqual(order.total_price,
                      self.product1.price * 10 + self.product2.price * 3)
Пример #4
0
    def test_set_positions_in_order(self):
        """
        We can set all the positions in cart in Order.

        It will automatically instantiate Position instance for every one.
        """
        self.cart.add(self.product1)
        self.cart.add(self.product2)
        order = Order(email=self.mail)
        order.save()
        order = order.set_positions(self.cart)
        saved_order = Order.objects.get(pk=order.id)
        self.assertEqual(saved_order.positions.count(), 2)
Пример #5
0
    def test_set_positions_in_order(self):
        """
        We can set all the positions in cart in Order.

        It will automatically instantiate Position instance for every one.
        """
        self.cart.add(self.product1)
        self.cart.add(self.product2)
        order = Order(email=self.mail)
        order.save()
        order = order.set_positions(self.cart)
        saved_order = Order.objects.get(pk=order.id)
        self.assertEqual(saved_order.positions.count(), 2)
Пример #6
0
 def test_fake_number_order(self):
     """Order number should be increased by a FAKE_ORDER_NUMBER const"""
     order = Order()
     order.save()
     self.assertGreater(order.fake_order_number, settings.FAKE_ORDER_NUMBER)
Пример #7
0
 def test_create_order(self):
     """We should be able to create Order with every required filed specified."""
     order = Order(email=self.mail)
     order.save()
     self.assertEqual(Order.objects.get(pk=order.id), order)
Пример #8
0
 def test_fake_number_order(self):
     """Order number should be increased by a FAKE_ORDER_NUMBER const"""
     order = Order()
     order.save()
     self.assertGreater(order.fake_order_number, settings.FAKE_ORDER_NUMBER)
Пример #9
0
 def test_create_order(self):
     """We should be able to create Order with every required filed specified."""
     order = Order(email=self.mail)
     order.save()
     self.assertEqual(Order.objects.get(pk=order.id), order)