summaryrefslogtreecommitdiffstats
path: root/restaurant_orders/dashboard/views.py
blob: cfbc7571ff43e6bc68527e156f77f6a8cba95989 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
from django.shortcuts import render, redirect, reverse
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic.list import ListView, View
from django.views.generic.edit import UpdateView
from django.contrib.messages.views import SuccessMessageMixin
from django.core import serializers
from django.contrib import messages


from dashboard.forms import OrderStatusForm, AddToBillForm
from core.tasks import create_order_and_send_notification
from core.models import Restaurant, Order

class Home(LoginRequiredMixin, View):
    def get(self, request):
        redirect_url = 'dashboard:restaurant_dashboard'
        restaurants = Restaurant.get_user_restaurants(request.user)

        if len(restaurants) == 1:
            return redirect(redirect_url, restaurant_pk=restaurants[0].pk)

        return render(request, template_name='restaurants_choice.html', context={
            'title': 'Dashboard',
            'restaurants': restaurants,
            'redirect_url': redirect_url
        })

class DashboardView(LoginRequiredMixin, ListView):
    template_name = 'dashboard/dashboard.html'
    model = Order
    paginate_by = 4

    def get_queryset(self, *args, **kwargs):
        restaurant = Restaurant.get_user_restaurant_or_404(pk=self.kwargs.get('restaurant_pk'),
                                                           user=self.request.user)

        status = self.request.GET.get('status')
        queryset = {}
        if status:
            queryset['wp_status'] = status

        obj = super().get_queryset(*args, **kwargs).filter(
            restaurant=restaurant,
            can_display=True,
            **queryset
        ).order_by('-wp_id')

        return obj


class DashboardOrderView(LoginRequiredMixin, View):
    def get(self, request, pk):
        order = Order.get_order(pk, request.user)
        orderStatusForm = OrderStatusForm(instance=order)
        addToBillForm = AddToBillForm(pk, request.user)

        return render(request, 'dashboard/dashboard_order.html', context={
            'order': order,
            'orderStatusForm': orderStatusForm,
            'addToBillForm': addToBillForm
        })


class ChangeOrderStatusView(LoginRequiredMixin, SuccessMessageMixin, UpdateView):
    form_class = OrderStatusForm
    model = Order
    success_message = 'Zapisano!'
    slug_field='order_pk'

    def get_queryset(self, *args, **kwargs):
        return super().get_queryset(*args, **kwargs).filter(
            pk=self.kwargs['pk'],
            can_display=True,
            restaurant__users=self.request.user.pk
        )

    def get_success_url(self):
        return reverse('dashboard:order_dashboard', args=(self.kwargs['pk'], ))

class AddToBillView(LoginRequiredMixin, View):
    def post(self, request, pk, *args, **kwargs):
        addToBillForm = AddToBillForm(pk, request.user, request.POST)

        if addToBillForm.is_valid():
            order = Order.get_order(pk, request.user)
            order = serializers.serialize('json', (order, ))
            email = True if addToBillForm.data.get('send_mail') else False
            phone = True if addToBillForm.data.get('send_sms') else False
            items = [(wp_pk, price) for wp_pk, price in request.POST.items() if price.isdigit()]

            # TODO: Za duzo tych jebanych argumentow !
            create_order_and_send_notification.delay(order, items, email, phone, request.user.pk)


        return redirect('dashboard:order_dashboard', pk)