From 6432e99c58ffd59822c0807c951201afda8c5e74 Mon Sep 17 00:00:00 2001 From: Laetitia Getti Date: Wed, 24 May 2023 12:02:20 +0200 Subject: [PATCH] grouped order sheet generation - part 1 --- dev-requirements.txt | 2 + .../order/grouped_order_overview.html | 6 +- .../templates/order/grouped_order_sheet.html | 174 ++++++++++++++++++ la_chariotte/order/urls.py | 5 + la_chariotte/order/views.py | 38 +++- pyproject.toml | 1 + 6 files changed, 222 insertions(+), 4 deletions(-) create mode 100644 la_chariotte/order/templates/order/grouped_order_sheet.html diff --git a/dev-requirements.txt b/dev-requirements.txt index f9cc9c8..3bb39f2 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -130,6 +130,8 @@ wheel==0.40.0 # via pip-tools zipp==3.15.0 # via importlib-metadata +xhtml2pdf==0.2.11 + # à la main : il faudrait l'ajouter dans le pyproject # The following packages are considered to be unsafe in a requirements file: # pip diff --git a/la_chariotte/order/templates/order/grouped_order_overview.html b/la_chariotte/order/templates/order/grouped_order_overview.html index 1b5e4f4..85f2fb6 100644 --- a/la_chariotte/order/templates/order/grouped_order_overview.html +++ b/la_chariotte/order/templates/order/grouped_order_overview.html @@ -3,9 +3,9 @@ {% block title %}{{ grouped_order }} - Gestion{% endblock %} {% block content %} -

- {% block content_title %}{{ grouped_order }} : gestion de la commande{% endblock %} -

+

+ {% block content_title %}{{ grouped_order }} : gestion de la commande{% endblock %} +

Retour à la page de commande Mes commandes diff --git a/la_chariotte/order/templates/order/grouped_order_sheet.html b/la_chariotte/order/templates/order/grouped_order_sheet.html new file mode 100644 index 0000000..670f16f --- /dev/null +++ b/la_chariotte/order/templates/order/grouped_order_sheet.html @@ -0,0 +1,174 @@ + + + + + + Commande groupée - date + + + + +

+ {{ name }} - {{ delivery_date }} +

+

+ Produits : {% for item in items.all %} + {{ item }} + {% endfor %} +

+ {% if items %} + + + + + + {% for item in items %} + + {% endfor %} + + + + + + + {% for item in items %} + + {% endfor %} + + {% for order in orders_dict %} + + poeut + + + {% endfor %} + + + {% for total in totals %} + + + + {% endif %} + + + {% for user in user_info %} + {% if include_prices %} + + {% endif %} + + {% endfor %} + +
Nom + {{ item.name }} + Prix
Total{{ item.ordered_nb }}
TOTAL + {{ total }} + {% endfor %} {% if include_prices %} + {{ total_to_pay|floatformat:2 }} €
+ +
+ {% else %} + + + + + + + + {% if include_prices %} + + {% endif %} + + + + {% for user in user_info %} + + + {% if include_prices %} + + {% endif %} + + {% endfor %} + + + + {% for total in totals %} + + {% endfor %} + + + {% if include_prices %} + + {% endif %} + + +
Nom{{Quantité}}Récupéré ?À payer
+ +
TOTAL{{ total }}{{ total_to_pay|floatformat:2 }} €
+ {% endif %} + + + + diff --git a/la_chariotte/order/urls.py b/la_chariotte/order/urls.py index d317634..fadbcee 100644 --- a/la_chariotte/order/urls.py +++ b/la_chariotte/order/urls.py @@ -30,4 +30,9 @@ urlpatterns = [ views.ItemCreateView.as_view(), name="item_create", ), + path( + "/gerer/imprimer", + views.GroupedOrderSheetView.as_view(), + name="grouped_order_sheet", + ), ] diff --git a/la_chariotte/order/views.py b/la_chariotte/order/views.py index 5f68aad..b84cd8a 100644 --- a/la_chariotte/order/views.py +++ b/la_chariotte/order/views.py @@ -1,9 +1,13 @@ +from io import BytesIO + from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin -from django.http import HttpResponseRedirect +from django.http import FileResponse, HttpResponse, HttpResponseRedirect from django.shortcuts import get_object_or_404, render +from django.template.loader import get_template from django.urls import reverse, reverse_lazy from django.utils import timezone from django.views import generic +from xhtml2pdf import pisa from .forms import GroupedOrderForm, ItemCreateForm from .models import GroupedOrder, Item, Order, OrderAuthor, OrderedItem @@ -184,3 +188,35 @@ class OrderDetailView(generic.DetailView): """Confirmation page after a user orders""" model = Order + +class GroupedOrderSheetMixin(): + def get_grouped_order_infos(self,grouped_order_id): + grouped_order = get_object_or_404(GroupedOrder,id=grouped_order_id) + + # Get ordered items + items = grouped_order.item_set.filter(ordered_nb__gt=0) + + # Get content of orders + orders_values = [] + for order in grouped_order.order_set.all(): + for ordered_item in order.ordered_items.all(): + orders_values[order.id][ordered_item.id] = ordered_item.nb + + return {"name": grouped_order.name,"delivery_date":grouped_order.delivery_date,"items":items,"orders":orders_dict} + +class GroupedOrderSheetView(GroupedOrderOverview, GroupedOrderSheetMixin): + template_name = "order/grouped_order_sheet.html" + + def get(self, request, pk): + # ferme = Ferme.get_or_404(ferme_id) + # ferme.check_access(request.user) + + grouped_order_sheet_info = self.get_grouped_order_infos(pk) + # should_include_prices = True if request.GET.get("with_prices", False) else False + # delivery_sheet_info["include_prices"] = should_include_prices + template = get_template(self.template_name) + html = template.render(grouped_order_sheet_info) + + result = BytesIO() + pdf = pisa.pisaDocument(BytesIO(html.encode("UTF-8")), result) + return HttpResponse(result.getvalue(), content_type="application/pdf") \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index 63fdb87..7b20b4b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -26,6 +26,7 @@ dev = [ "pytest-cov>=4,<5", "diff-cover>=4,<5", "pytest-black<1", + # il faudrait ajouter xhtml2pdf, mais la génération des requirements ne marche pas ] [tool.pytest.ini_options]