summaryrefslogtreecommitdiffstats
path: root/restaurant_orders/dashboard/views.py
diff options
context:
space:
mode:
authorjdlugosz963 <jdlugosz963@gmail.com>2023-07-17 01:47:57 +0200
committerjdlugosz963 <jdlugosz963@gmail.com>2023-07-17 01:52:26 +0200
commitc21f4b3dacd597a15a5ec39d525df1dfe1b70376 (patch)
tree0dfc51d2ffeb7b5022d9ad852f2fd3620c72196a /restaurant_orders/dashboard/views.py
parent2c6f98aeef4fa1aba5678fe17c8e762a11db7b40 (diff)
downloadrestaurant-orders-c21f4b3dacd597a15a5ec39d525df1dfe1b70376.tar.gz
restaurant-orders-c21f4b3dacd597a15a5ec39d525df1dfe1b70376.zip
Add project.main
Diffstat (limited to 'restaurant_orders/dashboard/views.py')
-rw-r--r--restaurant_orders/dashboard/views.py95
1 files changed, 95 insertions, 0 deletions
diff --git a/restaurant_orders/dashboard/views.py b/restaurant_orders/dashboard/views.py
new file mode 100644
index 0000000..cfbc757
--- /dev/null
+++ b/restaurant_orders/dashboard/views.py
@@ -0,0 +1,95 @@
1from django.shortcuts import render, redirect, reverse
2from django.contrib.auth.mixins import LoginRequiredMixin
3from django.views.generic.list import ListView, View
4from django.views.generic.edit import UpdateView
5from django.contrib.messages.views import SuccessMessageMixin
6from django.core import serializers
7from django.contrib import messages
8
9
10from dashboard.forms import OrderStatusForm, AddToBillForm
11from core.tasks import create_order_and_send_notification
12from core.models import Restaurant, Order
13
14class Home(LoginRequiredMixin, View):
15 def get(self, request):
16 redirect_url = 'dashboard:restaurant_dashboard'
17 restaurants = Restaurant.get_user_restaurants(request.user)
18
19 if len(restaurants) == 1:
20 return redirect(redirect_url, restaurant_pk=restaurants[0].pk)
21
22 return render(request, template_name='restaurants_choice.html', context={
23 'title': 'Dashboard',
24 'restaurants': restaurants,
25 'redirect_url': redirect_url
26 })
27
28class DashboardView(LoginRequiredMixin, ListView):
29 template_name = 'dashboard/dashboard.html'
30 model = Order
31 paginate_by = 4
32
33 def get_queryset(self, *args, **kwargs):
34 restaurant = Restaurant.get_user_restaurant_or_404(pk=self.kwargs.get('restaurant_pk'),
35 user=self.request.user)
36
37 status = self.request.GET.get('status')
38 queryset = {}
39 if status:
40 queryset['wp_status'] = status
41
42 obj = super().get_queryset(*args, **kwargs).filter(
43 restaurant=restaurant,
44 can_display=True,
45 **queryset
46 ).order_by('-wp_id')
47
48 return obj
49
50
51class DashboardOrderView(LoginRequiredMixin, View):
52 def get(self, request, pk):
53 order = Order.get_order(pk, request.user)
54 orderStatusForm = OrderStatusForm(instance=order)
55 addToBillForm = AddToBillForm(pk, request.user)
56
57 return render(request, 'dashboard/dashboard_order.html', context={
58 'order': order,
59 'orderStatusForm': orderStatusForm,
60 'addToBillForm': addToBillForm
61 })
62
63
64class ChangeOrderStatusView(LoginRequiredMixin, SuccessMessageMixin, UpdateView):
65 form_class = OrderStatusForm
66 model = Order
67 success_message = 'Zapisano!'
68 slug_field='order_pk'
69
70 def get_queryset(self, *args, **kwargs):
71 return super().get_queryset(*args, **kwargs).filter(
72 pk=self.kwargs['pk'],
73 can_display=True,
74 restaurant__users=self.request.user.pk
75 )
76
77 def get_success_url(self):
78 return reverse('dashboard:order_dashboard', args=(self.kwargs['pk'], ))
79
80class AddToBillView(LoginRequiredMixin, View):
81 def post(self, request, pk, *args, **kwargs):
82 addToBillForm = AddToBillForm(pk, request.user, request.POST)
83
84 if addToBillForm.is_valid():
85 order = Order.get_order(pk, request.user)
86 order = serializers.serialize('json', (order, ))
87 email = True if addToBillForm.data.get('send_mail') else False
88 phone = True if addToBillForm.data.get('send_sms') else False
89 items = [(wp_pk, price) for wp_pk, price in request.POST.items() if price.isdigit()]
90
91 # TODO: Za duzo tych jebanych argumentow !
92 create_order_and_send_notification.delay(order, items, email, phone, request.user.pk)
93
94
95 return redirect('dashboard:order_dashboard', pk)