afficher et calculer le prix de la commande

This commit is contained in:
Laetitia Getti 2023-05-15 11:47:30 +02:00
parent 4e4c0440f7
commit d03102fe57
4 changed files with 33 additions and 3 deletions

View file

@ -0,0 +1,17 @@
# Generated by Django 4.2 on 2023-05-15 09:33
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("order", "0018_order_articles_nb"),
]
operations = [
migrations.AddField(
model_name="order",
name="price",
field=models.DecimalField(decimal_places=2, default=0, max_digits=10),
),
]

View file

@ -79,6 +79,7 @@ class Order(models.Model):
) )
author = models.ForeignKey(OrderAuthor, on_delete=models.CASCADE) author = models.ForeignKey(OrderAuthor, on_delete=models.CASCADE)
articles_nb = models.PositiveIntegerField(default=0) articles_nb = models.PositiveIntegerField(default=0)
price = models.DecimalField(max_digits=10, decimal_places=2, default=0)
def __str__(self): # pragma: no cover def __str__(self): # pragma: no cover
return f"Commande de {self.author} pour la commande groupée {self.grouped_order.pk}" return f"Commande de {self.author} pour la commande groupée {self.grouped_order.pk}"
@ -110,5 +111,8 @@ class OrderedItem(models.Model):
) )
item = models.ForeignKey(Item, on_delete=models.CASCADE, related_name="orders") item = models.ForeignKey(Item, on_delete=models.CASCADE, related_name="orders")
def get_price(self):
return self.nb * self.item.price
def __str__(self): # pragma: no cover def __str__(self): # pragma: no cover
return f"{self.nb} {self.item}, dans la commande {self.order.pk}" return f"{self.nb} {self.item}, dans la commande {self.order.pk}"

View file

@ -14,11 +14,10 @@
<p><strong>Votre commande</strong></p> <p><strong>Votre commande</strong></p>
<ul> <ul>
{% for item in order.ordered_items.all %} {% for item in order.ordered_items.all %}
{% if item.nb > 0 %} <li>{{ item.nb }} {{ item.item }} : {{ item.get_price }} €</li>
<li>{{ item.nb }} {{ item.item }}</li>
{% endif %}
{% endfor %} {% endfor %}
</ul> </ul>
<p>Prix total de la commande : <strong>{{ order.price }} €</strong>
<p>Rendez-vous le <strong>{{ order.grouped_order.delivery_date }}</strong> à <strong>{{ order.grouped_order.place }}</strong> pour récupérer vos produits !</p> <p>Rendez-vous le <strong>{{ order.grouped_order.delivery_date }}</strong> à <strong>{{ order.grouped_order.place }}</strong> pour récupérer vos produits !</p>

View file

@ -141,6 +141,7 @@ def order(request, grouped_order_id):
OrderedItem.objects.create(nb=v, order=order, item=item) OrderedItem.objects.create(nb=v, order=order, item=item)
compute_ordered_nb(item) compute_ordered_nb(item)
compute_order_articles_nb(order) compute_order_articles_nb(order)
compute_order_price(order)
if order.articles_nb == 0: if order.articles_nb == 0:
# Redisplay the order form for this grouped order. # Redisplay the order form for this grouped order.
return render( return render(
@ -178,6 +179,15 @@ def compute_order_articles_nb(order):
order.save() order.save()
def compute_order_price(order):
"""Computes the total price of the order"""
price = 0
for ord_item in order.ordered_items.all():
price += ord_item.get_price()
order.price = price
order.save()
class OrderDetailView(generic.DetailView): class OrderDetailView(generic.DetailView):
"""Confirmation page after a user orders""" """Confirmation page after a user orders"""