mirror of
https://framagit.org/la-chariotte/la-chariotte.git
synced 2025-05-04 12:51:50 +02:00
Merge branch 'feature/146/add-date-and-notes-informations-on-csv' into 'develop'
[146] add date and notes informations on csv Closes #146 See merge request la-chariotte/la_chariotte!95
This commit is contained in:
commit
bbc2ac9d9f
6 changed files with 68 additions and 25 deletions
|
@ -119,7 +119,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)
|
price = models.DecimalField(max_digits=10, decimal_places=2, default=0)
|
||||||
created_date = models.DateTimeField("Date de la commande", auto_now_add=True)
|
created_date = models.DateTimeField("Date et heure de commande", auto_now_add=True)
|
||||||
note = models.TextField(max_length=200, null=True, blank=True)
|
note = models.TextField(max_length=200, null=True, blank=True)
|
||||||
|
|
||||||
def compute_order_articles_nb(self):
|
def compute_order_articles_nb(self):
|
||||||
|
|
|
@ -33,7 +33,7 @@
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<p><i class="fa fa-calendar-check-o mr-3" aria-label="Date limite de commande"
|
<p><i class="fa fa-calendar-check-o mr-3" aria-label="Date limite de commande"
|
||||||
title="Date limite de commande" aria-hidden="true"></i>
|
title="Date limite de commande" aria-hidden="true"></i>
|
||||||
Commandes avant le {{ grouped_order.deadline }}
|
Commandes avant le {{ grouped_order.deadline|date:'d M Y' }} à {{ grouped_order.deadline|date:'H:i' }}
|
||||||
</p>
|
</p>
|
||||||
<p><i class="fa fa-truck mr-3" aria-label="Date de livraison" title="Date de livraison"
|
<p><i class="fa fa-truck mr-3" aria-label="Date de livraison" title="Date de livraison"
|
||||||
aria-hidden="true"></i>
|
aria-hidden="true"></i>
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
<p><i class="fa fa-map-pin mr-3" aria-label="Lieu" title="Lieu" aria-hidden="true"></i>{{ grouped_order.place }}</p>
|
<p><i class="fa fa-map-pin mr-3" aria-label="Lieu" title="Lieu" aria-hidden="true"></i>{{ grouped_order.place }}</p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<p><i class="fa fa-calendar-check-o mr-3" aria-label="Date limite de commande" title="Date limite de commande" aria-hidden="true"></i>
|
<p><i class="fa fa-calendar-check-o mr-3" aria-label="Date limite de commande" title="Date limite de commande" aria-hidden="true"></i>
|
||||||
Commandes avant le {{ grouped_order.deadline }}
|
Commandes avant le {{ grouped_order.deadline|date:'d M Y' }} à {{ grouped_order.deadline|date:'H:i' }}
|
||||||
</p>
|
</p>
|
||||||
<p><i class="fa fa-truck mr-3" aria-label="Date de livraison" title="Date de livraison" aria-hidden="true"></i>
|
<p><i class="fa fa-truck mr-3" aria-label="Date de livraison" title="Date de livraison" aria-hidden="true"></i>
|
||||||
Livraison le {{ grouped_order.delivery_date }}{% if grouped_order.delivery_slot %}, {{ grouped_order.delivery_slot }}{% endif %}
|
Livraison le {{ grouped_order.delivery_date }}{% if grouped_order.delivery_slot %}, {{ grouped_order.delivery_slot }}{% endif %}
|
||||||
|
@ -180,43 +180,36 @@
|
||||||
<!-- Order detail modal -->
|
<!-- Order detail modal -->
|
||||||
<div id="order-detail-{{ order.id }}" class="modal">
|
<div id="order-detail-{{ order.id }}" class="modal">
|
||||||
<div class="modal-background"></div>
|
<div class="modal-background"></div>
|
||||||
<div class="modal-card">
|
<div class="modal-card ">
|
||||||
<header class="modal-card-head has-background-info">
|
<header class="modal-card-head has-background-info">
|
||||||
<div class="modal-card-title-container">
|
<div class="modal-card-title-container">
|
||||||
<p class="modal-card-title">Commande de {{ order.author }}</p>
|
<p class="modal-card-title mb-2">Commande de {{ order.author }}</p>
|
||||||
|
<p class="has-text-grey-dark">Le {{ order.created_date|date:'d M Y' }} à {{ order.created_date|date:'H:i' }}</p>
|
||||||
</div>
|
</div>
|
||||||
<button class="delete" aria-label="close"></button>
|
<button class="delete" aria-label="close"></button>
|
||||||
</header>
|
</header>
|
||||||
<section class="modal-card-body">
|
<section class="modal-card-body">
|
||||||
<div class="columns is-multiline">
|
<div class="columns">
|
||||||
<div class="column is-full">
|
<div class="column">
|
||||||
{% for item in order.ordered_items.all %}
|
{% for item in order.ordered_items.all %}
|
||||||
{{ item.nb }} × {{ item.item.name }}
|
{{ item.nb }} × {{ item.item.name }}
|
||||||
<hr class="mb-1 mt-1">
|
<hr class="mb-0 mt-1">
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
{% if order.note %}
|
{% if order.note %}
|
||||||
<div class="column is-full">
|
<div class="column is-4">
|
||||||
<p class="mini-title">Note à l'organisateur·ice</p>
|
<p class="mini-title">Note à l'organisateur·ice</p>
|
||||||
<p>{{ order.note }}</p>
|
<p>{{ order.note }}</p>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
|
||||||
<div class="column is-full">
|
|
||||||
<p class="mini-title">Numéro de téléphone</p>
|
|
||||||
<p>{{ order.author.phone }}</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
{% endif %}
|
||||||
</section>
|
</section>
|
||||||
<footer class="modal-card-foot">
|
<footer class="modal-card-foot">
|
||||||
<div class="columns">
|
<p class="mini-title">Total à payer</p>
|
||||||
<div class="column is-half">
|
<p>{{ order.price }} €</p>
|
||||||
<p class="mini-title">Total à payer</p>
|
|
||||||
<p>{{ order.price }} €</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</footer>
|
</footer>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Confirm delete order modal -->
|
<!-- Confirm delete order modal -->
|
||||||
<div id="confirm-delete-{{ order.id }}" class="modal">
|
<div id="confirm-delete-{{ order.id }}" class="modal">
|
||||||
|
|
|
@ -374,6 +374,9 @@ class ExportGroupedOrderToCSVView(GroupedOrderExportView):
|
||||||
row.append("Prix de la commande")
|
row.append("Prix de la commande")
|
||||||
row.append("Mail")
|
row.append("Mail")
|
||||||
row.append("Téléphone")
|
row.append("Téléphone")
|
||||||
|
row.append("Note")
|
||||||
|
row.append("Date")
|
||||||
|
row.append("Heure")
|
||||||
writer.writerow(row)
|
writer.writerow(row)
|
||||||
|
|
||||||
row = ["", "Prix unitaire TTC (€)"]
|
row = ["", "Prix unitaire TTC (€)"]
|
||||||
|
@ -393,6 +396,9 @@ class ExportGroupedOrderToCSVView(GroupedOrderExportView):
|
||||||
row.append(str(order.price).replace(".", ","))
|
row.append(str(order.price).replace(".", ","))
|
||||||
row.append(order.author.email)
|
row.append(order.author.email)
|
||||||
row.append(f"'{order.author.phone}")
|
row.append(f"'{order.author.phone}")
|
||||||
|
row.append(order.note)
|
||||||
|
row.append(order.created_date.strftime("%d/%m/%Y"))
|
||||||
|
row.append(order.created_date.strftime("%H:%M"))
|
||||||
writer.writerow(row)
|
writer.writerow(row)
|
||||||
|
|
||||||
# write total row
|
# write total row
|
||||||
|
|
|
@ -2,6 +2,7 @@ from django import http
|
||||||
from django.contrib.auth.mixins import UserPassesTestMixin
|
from django.contrib.auth.mixins import UserPassesTestMixin
|
||||||
from django.shortcuts import get_object_or_404, render
|
from django.shortcuts import get_object_or_404, render
|
||||||
from django.urls import reverse, reverse_lazy
|
from django.urls import reverse, reverse_lazy
|
||||||
|
from django.utils import timezone
|
||||||
from django.views import generic
|
from django.views import generic
|
||||||
|
|
||||||
from la_chariotte.mail.utils import send_order_confirmation_mail
|
from la_chariotte.mail.utils import send_order_confirmation_mail
|
||||||
|
@ -48,7 +49,12 @@ def place_order(request, code):
|
||||||
author = OrderAuthor.objects.create(
|
author = OrderAuthor.objects.create(
|
||||||
first_name=first_name, last_name=last_name, email=email, phone=phone
|
first_name=first_name, last_name=last_name, email=email, phone=phone
|
||||||
)
|
)
|
||||||
order = Order.objects.create(author=author, grouped_order=grouped_order, note=note)
|
order = Order.objects.create(
|
||||||
|
author=author,
|
||||||
|
grouped_order=grouped_order,
|
||||||
|
note=note,
|
||||||
|
created_date=timezone.now(),
|
||||||
|
)
|
||||||
|
|
||||||
# add items to the order
|
# add items to the order
|
||||||
error_message = None
|
error_message = None
|
||||||
|
|
|
@ -1631,6 +1631,8 @@ class TestExportGroupedOrderToCSVView:
|
||||||
content = response.content.decode("utf-8")
|
content = response.content.decode("utf-8")
|
||||||
csv_reader = csv.reader(StringIO(content))
|
csv_reader = csv.reader(StringIO(content))
|
||||||
body = list(csv_reader)
|
body = list(csv_reader)
|
||||||
|
created_date = f"{timezone.now().strftime('%d/%m/%Y')}"
|
||||||
|
created_time = f"{timezone.now().strftime('%H:%M')}"
|
||||||
assert body == [
|
assert body == [
|
||||||
[
|
[
|
||||||
"",
|
"",
|
||||||
|
@ -1640,11 +1642,47 @@ class TestExportGroupedOrderToCSVView:
|
||||||
"Prix de la commande",
|
"Prix de la commande",
|
||||||
"Mail",
|
"Mail",
|
||||||
"Téléphone",
|
"Téléphone",
|
||||||
|
"Note",
|
||||||
|
"Date",
|
||||||
|
"Heure",
|
||||||
],
|
],
|
||||||
["", "Prix unitaire TTC (€)", "2,00", "9,00"],
|
["", "Prix unitaire TTC (€)", "2,00", "9,00"],
|
||||||
["Nom", "Prénom"],
|
["Nom", "Prénom"],
|
||||||
["alescargot", "bob", "1", "0", "2,00", "bob2@escargot.fr", "'000"],
|
[
|
||||||
["alescargot", "bobby", "0", "1", "9,00", "bob3@escargot.fr", "'000"],
|
"alescargot",
|
||||||
["lescargot", "bob", "3", "2", "24,00", "bob@escargot.fr", "'000"],
|
"bob",
|
||||||
|
"1",
|
||||||
|
"0",
|
||||||
|
"2,00",
|
||||||
|
"bob2@escargot.fr",
|
||||||
|
"'000",
|
||||||
|
"",
|
||||||
|
created_date,
|
||||||
|
created_time,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"alescargot",
|
||||||
|
"bobby",
|
||||||
|
"0",
|
||||||
|
"1",
|
||||||
|
"9,00",
|
||||||
|
"bob3@escargot.fr",
|
||||||
|
"'000",
|
||||||
|
"",
|
||||||
|
created_date,
|
||||||
|
created_time,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"lescargot",
|
||||||
|
"bob",
|
||||||
|
"3",
|
||||||
|
"2",
|
||||||
|
"24,00",
|
||||||
|
"bob@escargot.fr",
|
||||||
|
"'000",
|
||||||
|
"",
|
||||||
|
created_date,
|
||||||
|
created_time,
|
||||||
|
],
|
||||||
["", "TOTAL", "4", "3", "35,00"],
|
["", "TOTAL", "4", "3", "35,00"],
|
||||||
]
|
]
|
||||||
|
|
Loading…
Reference in a new issue