la-chariotte/la_chariotte/order/views.py
2023-04-18 15:53:57 +02:00

56 lines
2.4 KiB
Python

from django.shortcuts import render, get_object_or_404, get_list_or_404
from django.http import HttpResponse, Http404, HttpResponseRedirect
from django.urls import reverse
from django.views import generic
from .models import Grouped_order, Item, Order, OrderedItem
class IndexView(generic.ListView):
"""Vue de toutes les commandes groupées existantes - plus tard, de toutes les commandes groupées de l'utilisateur connecté"""
template_name = 'order/index.html'
context_object_name = 'grouped_order_list'
def get_queryset(self):
"""Return some 10 grouped orders.""" # changer envoyer les plus proches d'aujourd'hui dans le futur
return Grouped_order.objects.order_by('-date')[:10]
class GroupedOrderDetailView(generic.DetailView):
"""Vue de détail d'une commande groupée - possibilité de commander si elle est en cours"""
model = Grouped_order
template_name = 'order/grouped_order_detail.html'
class GroupedOrderOrgaView(generic.DetailView):
"""Vue de supervision d'une commande groupée"""
model = Grouped_order
template_name = 'order/grouped_order_orga.html'
def order(request, grouped_order_id): # crée une commande (order) pour cette commande groupée, avec l'item selectionné dedans
grouped_order = get_object_or_404(Grouped_order, pk=grouped_order_id)
try:
selected_item = grouped_order.item_set.get(pk=request.POST['item'])
except (KeyError, Item.DoesNotExist):
# Redisplay the order form for this grouped order.
return render(request, 'order/grouped_order_detail.html', {
'grouped_order': grouped_order,
'error_message': "You didn't select an item.",
})
else:
order = Order.objects.create(author="Auteur teur",grouped_order=grouped_order)
OrderedItem.objects.create(nb=1,order=order,item=selected_item)
compute_ordered_nb(selected_item)
# Always return an HttpResponseRedirect after successfully dealing
# with POST data. This prevents data from being posted twice if a
# user hits the Back button.
return HttpResponseRedirect(reverse('order:grouped_order_orga', args=(grouped_order.pk,)))
def compute_ordered_nb(item):
"""Calcule le nombre de produits de ce produit commandés (pour cette commande groupée)"""
ordered_nb = 0
for order in item.orders.all():
ordered_nb += order.nb
item.ordered_nb = ordered_nb
item.save()