コード例 #1
0
def checkout(request):
    currentuser = request.user
    carts = Cart.objects.filter(user_id=currentuser.id)
    customer = Customer.objects.get(user_id=currentuser.id)
    myuser = User.objects.get(id=currentuser.id)

    total = 0
    qty = 0
    shipping = 14.99
    for cart in carts:
        total = total + cart.amount
        qty = qty + cart.qty

    grand_total = total + shipping

    if request.method == "POST":
        firstname = request.POST['firstname']
        lastname = request.POST['lastname']
        phone = request.POST['phone']
        house_no = request.POST['house_no']
        street = request.POST['street']
        city = request.POST['city']
        pin = request.POST['pin']
        code = "OD-" + get_random_string(10).upper()

        order = Order(user_id=currentuser.id,
                      first_name=firstname,
                      last_name=lastname,
                      phone=phone,
                      house_no=house_no,
                      street=street,
                      city=city,
                      pin=pin,
                      total=grand_total,
                      code=code)
        order.save()

        for cart in carts:
            orderpr = OrderProduct(order_id=order.id,
                                   user_id=currentuser.id,
                                   product_id=cart.product_id,
                                   qty=cart.qty,
                                   price=cart.product.price,
                                   amount=cart.amount)
            orderpr.save()

        Cart.objects.filter(user_id=currentuser.id).delete()
        messages.success(request, "Zamówienie zostało złożone.")
        return redirect('ShopHome')

    details = {
        'myuser': myuser,
        'customer': customer,
        'carts': carts,
        'qty': qty,
        'total': total,
        'grand_total': grand_total,
    }

    return render(request, 'checkout.html', details)
コード例 #2
0
 def test_generate_symvar(self):
     """Order generates symvar from nonempty database"""
     mommy.make('eshop.Order')
     mommy.make('eshop.Order')
     order = Order()
     order.generate_symvar()
     self.assertEqual(order.symvar, '20173')
コード例 #3
0
 def test_notify(
     self,
     mock_send_mail,
 ):
     """Order notify sends e-mail"""
     order = Order()
     order.notify('*****@*****.**', 'test-subject', 'test-body')
     mock_send_mail.assert_called_with(
         'test-subject',
         'test-body',
         'objednavky@localhost',
         ['*****@*****.**'],
     ),
コード例 #4
0
 def test_notify_current_status_canceled(
     self,
     mock_notify_accepted,
     mock_notify_on_route,
     mock_notify_canceled,
 ):
     """Order notifies buyer when order gets canceled"""
     order = Order()
     order.status = 5
     order.notify_current_status()
     mock_notify_accepted.assert_not_called()
     mock_notify_on_route.assert_not_called()
     mock_notify_canceled.assert_called_once()
コード例 #5
0
 def test_notify_current_status_empty(
     self,
     mock_notify_accepted,
     mock_notify_on_route,
     mock_notify_canceled,
 ):
     """Order sends no notification by default"""
     order = Order()
     order.status = None
     order.notify_current_status()
     mock_notify_accepted.assert_not_called()
     mock_notify_on_route.assert_not_called()
     mock_notify_canceled.assert_not_called()
コード例 #6
0
 def test_save_generates_symvar(
     self,
     mock_generate_symvar,
     mock_mark_drawings_as_sold,
     mock_notify_current_status,
 ):
     """Order generates symvar when missing"""
     order = Order(
         price=500,
         delivery_id=10,
         payment_id=10,
     )
     order.save()
     mock_generate_symvar.assert_called_once()
コード例 #7
0
 def test_save_skips_generating_symvar(
     self,
     mock_generate_symvar,
     mock_mark_drawings_as_sold,
     mock_notify_current_status,
 ):
     """Order skips generating symvar when already present"""
     order = Order(
         price=500,
         delivery_id=10,
         payment_id=10,
         symvar='ax22123',
     )
     order.save()
     mock_generate_symvar.assert_not_called()
コード例 #8
0
 def test_update_paid_status_paid(
     self,
     mock_get_total_amount_received,
     mock_notify_underpaid,
     mock_notify_paid,
     mock_save,
 ):
     """
         Order update_paid_status saves order as paid when buyer paid
         exactly total price and notifies buyer.
     """
     order = Order(
         price=500,
         paid=False,
         over_paid=False,
     )
     order.update_paid_status()
     self.assertEqual(order.paid, True)
     self.assertEqual(order.over_paid, False)
     mock_get_total_amount_received.assert_called_once()
     mock_save.assert_called_once()
     mock_notify_paid.assert_called()
     mock_notify_underpaid.assert_not_called()
コード例 #9
0
 def test_save_not_paid_not_sold(
     self,
     mock_generate_symvar,
     mock_mark_drawings_as_sold,
     mock_notify_current_status,
 ):
     """Order does not mark drawings as sold when not paid"""
     order = Order(
         price=500,
         delivery_id=10,
         payment_id=10,
         symvar='ax22123',
     )
     order.initial_paid = True
     order.paid = False
     order.save()
     mock_mark_drawings_as_sold.assert_not_called()
コード例 #10
0
 def test_save_status_change_notify(
     self,
     mock_generate_symvar,
     mock_mark_drawings_as_sold,
     mock_notify_current_status,
 ):
     """Order does not notfiy buyer when there was no status change"""
     order = Order(
         price=500,
         delivery_id=10,
         payment_id=10,
         symvar='ax22123',
     )
     order.initial_status = 1
     order.status = 2
     order.save()
     mock_notify_current_status.assert_called_once()
コード例 #11
0
 def test_generate_symvar_empty_db(self):
     """Order generates symvar when database is empty"""
     order = Order()
     order.generate_symvar()
     self.assertEqual(order.symvar, '20171')
コード例 #12
0
 def test_string_representation(self):
     """Test that Order turns to string properly"""
     entry = Order(symvar="29341")
     self.assertEqual(str(entry), 'Objednávka 29341')