Update counters and some views

This commit is contained in:
Skia
2016-07-21 20:03:31 +02:00
parent 724f3d8d6f
commit 1f3e186e27
10 changed files with 60 additions and 32 deletions

View File

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('counter', '0008_auto_20160718_1805'),
]
operations = [
migrations.AlterField(
model_name='counter',
name='type',
field=models.CharField(max_length=255, verbose_name='subscription type', choices=[('BAR', 'Bar'), ('OFFICE', 'Office'), ('EBOUTIC', 'Eboutic')]),
),
]

View File

@ -10,7 +10,6 @@ from random import randrange
from club.models import Club
from accounting.models import CurrencyField
from core.models import Group, User
from subscription.models import Subscriber
class Customer(models.Model):
"""
@ -82,7 +81,7 @@ class Counter(models.Model):
products = models.ManyToManyField(Product, related_name="counters", blank=True)
type = models.CharField(_('subscription type'),
max_length=255,
choices=[('BAR',_('Bar')), ('OFFICE',_('Office'))])
choices=[('BAR',_('Bar')), ('OFFICE',_('Office')), ('EBOUTIC',_('Eboutic'))])
edit_groups = models.ManyToManyField(Group, related_name="editable_counters", blank=True)
view_groups = models.ManyToManyField(Group, related_name="viewable_counters", blank=True)
barmen_session = {}
@ -132,7 +131,7 @@ class Counter(models.Model):
def get_barmen_list(counter_id):
"""
Returns the barman list as list of Subscriber
Returns the barman list as list of User
Also handle the timeout of the barmen
"""
@ -141,7 +140,7 @@ class Counter(models.Model):
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
bl.append(Subscriber.objects.filter(id=b[0]).first())
bl.append(User.objects.filter(id=b[0]).first())
if (timezone.now() - Counter.barmen_session[counter_id]['time']) < timedelta(minutes=settings.SITH_BARMAN_TIMEOUT):
Counter.barmen_session[counter_id]['time'] = timezone.now()
else:
@ -151,9 +150,9 @@ class Counter(models.Model):
Counter.barmen_session[counter_id]['users'] = set()
return bl
def get_random_barman(counter_id): # TODO: improve this function
def get_random_barman(counter_id):
bl = Counter.get_barmen_list(counter_id)
return bl[0]
return bl[randrange(0, len(bl))]
class Refilling(models.Model):
"""

View File

@ -25,6 +25,7 @@
<h5>{% trans %}Customer{% endtrans %}</h5>
<p>{{ customer.user.get_display_name() }}, {{ customer.amount }} €</p>
</div>
{% if counter.type == 'BAR' %}
<div>
<h5>{% trans %}Refilling{% endtrans %}</h5>
<form method="post" action="{{ url('counter:click', counter_id=counter.id, user_id=customer.user.id) }}">
@ -34,6 +35,7 @@
<input type="submit" value="{% trans %}Go{% endtrans %}" />
</form>
</div>
{% endif %}
<div>
<h5>{% trans %}Selling{% endtrans %}</h5>
{% if request.session['not_enough'] %}
@ -47,7 +49,7 @@
</form>
<p>{% trans %}Basket: {% endtrans %}</p>
<ul>
{% for id,infos in request.session['basket'].items() %}
{% for id,infos in request.session['basket']|dictsort %}
{% set product = counter.products.filter(id=id).first() %}
{% set s = infos['qty'] * infos['price'] / 100 %}
<li>{{ del_product(id, '-') }} {{ infos['qty'] }} {{ add_product(id, '+') }} {{ product.name }}: {{ "%0.2f"|format(s) }} €</li>

View File

@ -38,6 +38,7 @@
<p>{% trans %}Please, login{% endtrans %}</p>
{% endif %}
</div>
{% if counter.type == 'BAR' %}
<div>
<h3>{% trans %}Barman: {% endtrans %}</h3>
<ul>
@ -51,6 +52,7 @@
<p><input type="submit" value="{% trans %}login{% endtrans %}" /></p>
</form>
</div>
{% endif %}
{% endblock %}

View File

@ -72,7 +72,10 @@ class CounterMain(DetailView, ProcessFormView, FormMixin):
kwargs['login_form'] = AuthenticationForm()
kwargs['login_form'].fields['username'].widget.attrs['autofocus'] = True
kwargs['form'] = self.get_form()
kwargs['barmen'] = Counter.get_barmen_list(self.object.id)
if self.object.type == 'BAR':
kwargs['barmen'] = Counter.get_barmen_list(self.object.id)
elif self.request.user.is_authenticated():
kwargs['barmen'] = [self.request.user]
if 'last_basket' in self.request.session.keys():
kwargs['last_basket'] = self.request.session.pop('last_basket')
kwargs['last_customer'] = self.request.session.pop('last_customer')
@ -109,8 +112,10 @@ class CounterClick(DetailView):
request.session['not_enough'] = False
self.refill_form = None
ret = super(CounterClick, self).get(request, *args, **kwargs)
if len(Counter.get_barmen_list(self.object.id)) < 1: # Check that at least one barman is logged in
return self.cancel(request) # Otherwise, go to main view
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
ret = self.cancel(request) # Otherwise, go to main view
return ret
def post(self, request, *args, **kwargs):
@ -173,7 +178,7 @@ class CounterClick(DetailView):
request.session['basket'][pid]['qty'] += q
else:
request.session['basket'][pid] = {'qty': q, 'price': int(price*100)}
request.session['not_enough'] = False
request.session['not_enough'] = False # Reset not_enough to save the session
request.session.modified = True
return True
@ -283,7 +288,8 @@ class CounterLogin(RedirectView):
form = AuthenticationForm(request, data=request.POST)
if form.is_valid():
user = Subscriber.objects.filter(username=form.cleaned_data['username']).first()
Counter.add_barman(self.counter_id, user.id)
if user.is_subscribed():
Counter.add_barman(self.counter_id, user.id)
else:
print("Error logging the barman") # TODO handle that nicely
return super(CounterLogin, self).post(request, *args, **kwargs)