mirror of
https://framagit.org/la-chariotte/la-chariotte.git
synced 2025-05-01 19:32:26 +02:00
compute grouped order total price when displayed
This commit is contained in:
parent
539410ba66
commit
f03258bee2
3 changed files with 50 additions and 2 deletions
|
@ -267,7 +267,6 @@ class TestGroupedOrderDetailView:
|
||||||
order = Order.objects.first()
|
order = Order.objects.first()
|
||||||
assert order.ordered_items.count() == 2
|
assert order.ordered_items.count() == 2
|
||||||
assert order.articles_nb == 5
|
assert order.articles_nb == 5
|
||||||
assert order.grouped_order.total_price == 9
|
|
||||||
|
|
||||||
def test_order_item__no_articles_ordered(self, client, other_user):
|
def test_order_item__no_articles_ordered(self, client, other_user):
|
||||||
"""
|
"""
|
||||||
|
@ -320,6 +319,51 @@ class TestGroupedOrderDetailView:
|
||||||
|
|
||||||
|
|
||||||
class TestGroupedOrderOverview:
|
class TestGroupedOrderOverview:
|
||||||
|
def test_get_overview(self, client_log):
|
||||||
|
"""
|
||||||
|
From the OrderDetailView, we order an item using the order form, and it creates an Order with an Ordered_item inside
|
||||||
|
"""
|
||||||
|
grouped_order = create_grouped_order(
|
||||||
|
days_before_delivery_date=5,
|
||||||
|
days_before_deadline=2,
|
||||||
|
name="gr order test",
|
||||||
|
orga_user=auth.get_user(client_log),
|
||||||
|
)
|
||||||
|
item = Item.objects.create(
|
||||||
|
name="test item 1", grouped_order=grouped_order, price=2
|
||||||
|
)
|
||||||
|
|
||||||
|
overview_url = reverse(
|
||||||
|
"order:grouped_order_overview",
|
||||||
|
kwargs={
|
||||||
|
"pk": grouped_order.pk,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
# some items are ordered
|
||||||
|
order_url = reverse(
|
||||||
|
"order:order",
|
||||||
|
kwargs={
|
||||||
|
"grouped_order_id": grouped_order.pk,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
client_log.post(
|
||||||
|
order_url,
|
||||||
|
{
|
||||||
|
f"quantity_{item.pk}": 4,
|
||||||
|
"first_name": "Prénom",
|
||||||
|
"last_name": "Nom",
|
||||||
|
"phone": "0645632569",
|
||||||
|
"email": "test@mail.fr",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
response = client_log.get(overview_url)
|
||||||
|
assert response.status_code == 200
|
||||||
|
assert "test item" in response.content.decode()
|
||||||
|
assert "gr order test" in response.content.decode()
|
||||||
|
item.refresh_from_db()
|
||||||
|
assert item.get_total_price() == 8
|
||||||
|
assert "8" in response.content.decode()
|
||||||
|
|
||||||
def test_user_not_logged_redirect(self, client, other_user):
|
def test_user_not_logged_redirect(self, client, other_user):
|
||||||
"""
|
"""
|
||||||
A user that is not logged cannot see the GroupedOrderOverview. They get redirected to the login view
|
A user that is not logged cannot see the GroupedOrderOverview. They get redirected to the login view
|
||||||
|
|
|
@ -70,6 +70,10 @@ class GroupedOrderOverview(UserPassesTestMixin, generic.DetailView):
|
||||||
"""Accessible only if the requesting user is the grouped order organizer"""
|
"""Accessible only if the requesting user is the grouped order organizer"""
|
||||||
return self.get_object().orga == self.request.user
|
return self.get_object().orga == self.request.user
|
||||||
|
|
||||||
|
def get(self, request, *args, **kwargs):
|
||||||
|
self.get_object().compute_total_price()
|
||||||
|
return super().get(self, request, *args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class GroupedOrderCreateView(LoginRequiredMixin, generic.CreateView):
|
class GroupedOrderCreateView(LoginRequiredMixin, generic.CreateView):
|
||||||
"""View for creating a new grouped order"""
|
"""View for creating a new grouped order"""
|
||||||
|
@ -157,7 +161,6 @@ def order(request, grouped_order_id):
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
compute_order_price(order)
|
compute_order_price(order)
|
||||||
order.grouped_order.compute_total_price()
|
|
||||||
# Always return an HttpResponseRedirect after successfully dealing
|
# Always return an HttpResponseRedirect after successfully dealing
|
||||||
# with POST data. This prevents data from being posted twice if a
|
# with POST data. This prevents data from being posted twice if a
|
||||||
# user hits the Back button.
|
# user hits the Back button.
|
||||||
|
|
|
@ -31,6 +31,7 @@
|
||||||
<div class="navbar-item">
|
<div class="navbar-item">
|
||||||
<div class="buttons">
|
<div class="buttons">
|
||||||
{% if user.is_authenticated %}
|
{% if user.is_authenticated %}
|
||||||
|
<p class="mr-4">{{ user.get_full_name }}</p>
|
||||||
<a class="button is-light" href="{% url 'accounts:logout' %}">
|
<a class="button is-light" href="{% url 'accounts:logout' %}">
|
||||||
Se déconnecter
|
Se déconnecter
|
||||||
</a>
|
</a>
|
||||||
|
|
Loading…
Reference in a new issue