From 1a6373e9ce6f91e7ad26c877d8363098edbc4857 Mon Sep 17 00:00:00 2001 From: Skia Date: Sat, 6 Aug 2016 12:37:36 +0200 Subject: [PATCH] Add barman list in API --- api/views/api.py | 6 +++--- api/views/serializers.py | 6 +++++- counter/models.py | 13 ++++++++----- counter/views.py | 10 +++++----- 4 files changed, 21 insertions(+), 14 deletions(-) diff --git a/api/views/api.py b/api/views/api.py index ee0088e6..45e22d90 100644 --- a/api/views/api.py +++ b/api/views/api.py @@ -1,13 +1,13 @@ -from . import serializers +from django.shortcuts import get_object_or_404 from rest_framework.response import Response from rest_framework.decorators import api_view from rest_framework import viewsets from rest_framework.decorators import detail_route from rest_framework.decorators import list_route -from django.shortcuts import get_object_or_404 from core.templatetags.renderer import markdown from counter.models import Counter +from api.views import serializers @api_view(['GET']) @@ -30,7 +30,7 @@ class CounterViewSet(viewsets.ModelViewSet): @list_route() def bar(self, request): """ - Return all counters (api/v1/counter/bar) + Return all bars (api/v1/counter/bar) """ self.queryset = Counter.objects.filter(type="BAR") serializer = self.get_serializer(self.queryset, many=True) diff --git a/api/views/serializers.py b/api/views/serializers.py index 599dd3e4..09391b60 100644 --- a/api/views/serializers.py +++ b/api/views/serializers.py @@ -5,7 +5,11 @@ from counter.models import Counter class Counter(serializers.ModelSerializer): is_open = serializers.BooleanField(read_only=True) + barman_list = serializers.ListField( + child = serializers.IntegerField() + ) class Meta: model = Counter - fields = ('id', 'name', 'is_open') + fields = ('id', 'name', 'type', 'is_open', 'barman_list') + diff --git a/counter/models.py b/counter/models.py index 600d05ee..dcc950b6 100644 --- a/counter/models.py +++ b/counter/models.py @@ -164,14 +164,14 @@ class Counter(models.Model): c = Counter.objects.filter(id=counter_id).first() Permanency(user=u, counter=c, start=user_tuple[1], end=Counter.barmen_session[counter_id]['time']).save() - def get_barmen_list(counter_id): + def get_barmen_list(self): """ Returns the barman list as list of User Also handle the timeout of the barmen """ bl = [] - counter_id = int(counter_id) + counter_id = self.id if counter_id in list(Counter.barmen_session.keys()): for b in Counter.barmen_session[counter_id]['users']: # Reminder: user is stored as a tuple with its login time @@ -185,16 +185,19 @@ class Counter(models.Model): Counter.barmen_session[counter_id]['users'] = set() return bl - def get_random_barman(counter_id): - bl = Counter.get_barmen_list(counter_id) + def get_random_barman(self): + bl = self.get_barmen_list() return bl[randrange(0, len(bl))] def is_open(self): response = False - if len(Counter.get_barmen_list(self.id)) > 0: + if len(self.get_barmen_list()) > 0: response = True return response + def barman_list(self): + return [b.id for b in self.get_barmen_list()] + class Refilling(models.Model): """ Handle the refilling diff --git a/counter/views.py b/counter/views.py index 27884458..0a8a0fa6 100644 --- a/counter/views.py +++ b/counter/views.py @@ -77,7 +77,7 @@ class CounterMain(DetailView, ProcessFormView, FormMixin): kwargs['login_form'].fields['username'].widget.attrs['autofocus'] = True kwargs['form'] = self.get_form() if self.object.type == 'BAR': - kwargs['barmen'] = Counter.get_barmen_list(self.object.id) + kwargs['barmen'] = self.object.get_barmen_list() elif self.request.user.is_authenticated(): kwargs['barmen'] = [self.request.user] if 'last_basket' in self.request.session.keys(): @@ -118,7 +118,7 @@ class CounterClick(DetailView): ret = super(CounterClick, self).get(request, *args, **kwargs) if ((self.object.type != "BAR" and not request.user.is_authenticated()) or (self.object.type == "BAR" and - len(Counter.get_barmen_list(self.object.id)) < 1)): # Check that at least one barman is logged in + len(self.object.get_barmen_list()) < 1)): # Check that at least one barman is logged in ret = self.cancel(request) # Otherwise, go to main view return ret @@ -129,7 +129,7 @@ class CounterClick(DetailView): self.refill_form = None if ((self.object.type != "BAR" and not request.user.is_authenticated()) or (self.object.type == "BAR" and - len(Counter.get_barmen_list(self.object.id)) < 1)): # Check that at least one barman is logged in + len(self.object.get_barmen_list()) < 1)): # Check that at least one barman is logged in return self.cancel(request) if 'basket' not in request.session.keys(): request.session['basket'] = {} @@ -140,7 +140,7 @@ class CounterClick(DetailView): elif self.is_barman_price(): self.operator = self.customer.user else: - self.operator = Counter.get_random_barman(self.object.id) + self.operator = self.object.get_random_barman() if 'add_product' in request.POST['action']: self.add_product(request) @@ -158,7 +158,7 @@ class CounterClick(DetailView): return self.render_to_response(context) def is_barman_price(self): - if self.object.type == "BAR" and self.customer.user.id in [s.id for s in Counter.get_barmen_list(self.object.id)]: + if self.object.type == "BAR" and self.customer.user.id in [s.id for s in self.object.get_barmen_list()]: return True else: return False