mirror of
https://framagit.org/la-chariotte/la-chariotte.git
synced 2025-05-01 11:22:24 +02:00
afficher et calculer le prix de la commande
This commit is contained in:
parent
4e4c0440f7
commit
d03102fe57
4 changed files with 33 additions and 3 deletions
17
la_chariotte/order/migrations/0019_order_price.py
Normal file
17
la_chariotte/order/migrations/0019_order_price.py
Normal 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),
|
||||||
|
),
|
||||||
|
]
|
|
@ -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}"
|
||||||
|
|
|
@ -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>
|
||||||
|
|
||||||
|
|
|
@ -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"""
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue