mirror of
https://framagit.org/la-chariotte/la-chariotte.git
synced 2025-05-01 19:32:26 +02:00
56 lines
2.4 KiB
Python
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()
|