compute grouped order total price when displayed

This commit is contained in:
Laetitia Getti 2023-05-15 15:25:44 +02:00
parent 539410ba66
commit f03258bee2
3 changed files with 50 additions and 2 deletions

View file

@ -267,7 +267,6 @@ class TestGroupedOrderDetailView:
order = Order.objects.first()
assert order.ordered_items.count() == 2
assert order.articles_nb == 5
assert order.grouped_order.total_price == 9
def test_order_item__no_articles_ordered(self, client, other_user):
"""
@ -320,6 +319,51 @@ class TestGroupedOrderDetailView:
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):
"""
A user that is not logged cannot see the GroupedOrderOverview. They get redirected to the login view

View file

@ -70,6 +70,10 @@ class GroupedOrderOverview(UserPassesTestMixin, generic.DetailView):
"""Accessible only if the requesting user is the grouped order organizer"""
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):
"""View for creating a new grouped order"""
@ -157,7 +161,6 @@ def order(request, grouped_order_id):
)
else:
compute_order_price(order)
order.grouped_order.compute_total_price()
# Always return an HttpResponseRedirect after successfully dealing
# with POST data. This prevents data from being posted twice if a
# user hits the Back button.

View file

@ -31,6 +31,7 @@
<div class="navbar-item">
<div class="buttons">
{% if user.is_authenticated %}
<p class="mr-4">{{ user.get_full_name }}</p>
<a class="button is-light" href="{% url 'accounts:logout' %}">
Se déconnecter
</a>