mirror of
https://github.com/ae-utbm/sith.git
synced 2024-11-25 02:24:26 +00:00
Make some more validation on the token click form
This commit is contained in:
parent
4d8e7b0875
commit
2cf39671e2
@ -71,7 +71,7 @@ Welcome to the wiki page!
|
|||||||
p.set_lock(root)
|
p.set_lock(root)
|
||||||
p.save()
|
p.save()
|
||||||
p.set_lock(root)
|
p.set_lock(root)
|
||||||
PageRev(page=p, title="", author=root, content="").save()
|
PageRev(page=p, title="Laverie", author=root, content="Fonctionnement de la laverie").save()
|
||||||
|
|
||||||
# Here we add a lot of test datas, that are not necessary for the Sith, but that provide a basic development environment
|
# Here we add a lot of test datas, that are not necessary for the Sith, but that provide a basic development environment
|
||||||
if not options['prod']:
|
if not options['prod']:
|
||||||
|
@ -16,7 +16,6 @@ header {
|
|||||||
right : 8%;
|
right : 8%;
|
||||||
left: 40%;
|
left: 40%;
|
||||||
background-color:#DDD;
|
background-color:#DDD;
|
||||||
height: 3em;
|
|
||||||
}
|
}
|
||||||
header a {
|
header a {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
<li><a href="{{ url('subscription:subscription') }}">{% trans %}Subscriptions{% endtrans %}</a></li>
|
<li><a href="{{ url('subscription:subscription') }}">{% trans %}Subscriptions{% endtrans %}</a></li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<h5>{% trans %}Launderette{% endtrans %}</h5>
|
<h5>{% trans %}Launderette{% endtrans %}</h5>
|
||||||
{% if user.is_in_group(settings.SITH_GROUPS['launderette-admin']['name']) %}
|
{% if user.is_in_group(settings.SITH_GROUPS['launderette-admin']['name']) or user.is_in_group(settings.SITH_GROUPS['root']['name']) %}
|
||||||
<li><a href="{{ url('launderette:launderette_list') }}">{% trans %}Launderette{% endtrans %}</a></li>
|
<li><a href="{{ url('launderette:launderette_list') }}">{% trans %}Launderette{% endtrans %}</a></li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</ul>
|
</ul>
|
||||||
|
@ -60,7 +60,7 @@ class CanEditPropMixin(View):
|
|||||||
|
|
||||||
class CanEditMixin(View):
|
class CanEditMixin(View):
|
||||||
"""
|
"""
|
||||||
This view makes exactly the same this as its direct parent, but checks the group on the edit_groups field of the
|
This view makes exactly the same thing as its direct parent, but checks the group on the edit_groups field of the
|
||||||
object
|
object
|
||||||
"""
|
"""
|
||||||
def dispatch(self, request, *arg, **kwargs):
|
def dispatch(self, request, *arg, **kwargs):
|
||||||
@ -78,7 +78,7 @@ class CanEditMixin(View):
|
|||||||
|
|
||||||
class CanViewMixin(View):
|
class CanViewMixin(View):
|
||||||
"""
|
"""
|
||||||
This view still makes exactly the same this as its direct parent, but checks the group on the view_groups field of
|
This view still makes exactly the same thing as its direct parent, but checks the group on the view_groups field of
|
||||||
the object
|
the object
|
||||||
"""
|
"""
|
||||||
def dispatch(self, request, *arg, **kwargs):
|
def dispatch(self, request, *arg, **kwargs):
|
||||||
|
@ -327,8 +327,10 @@ class CounterEditView(CanEditPropMixin, UpdateView):
|
|||||||
Edit a counter's main informations (for the counter's admin)
|
Edit a counter's main informations (for the counter's admin)
|
||||||
"""
|
"""
|
||||||
model = Counter
|
model = Counter
|
||||||
form_class = modelform_factory(Counter, fields=['name', 'club', 'type', 'products'],
|
form_class = modelform_factory(Counter, fields=['name', 'club', 'type', 'sellers', 'products'],
|
||||||
widgets={'products':CheckboxSelectMultiple})
|
widgets={
|
||||||
|
'products':CheckboxSelectMultiple,
|
||||||
|
'sellers':CheckboxSelectMultiple})
|
||||||
pk_url_kwarg = "counter_id"
|
pk_url_kwarg = "counter_id"
|
||||||
template_name = 'counter/counter_edit.jinja'
|
template_name = 'counter/counter_edit.jinja'
|
||||||
|
|
||||||
|
24
launderette/migrations/0006_auto_20160801_1928.py
Normal file
24
launderette/migrations/0006_auto_20160801_1928.py
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('launderette', '0005_auto_20160801_1634'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='token',
|
||||||
|
name='borrow_date',
|
||||||
|
field=models.DateTimeField(blank=True, verbose_name='borrow date', null=True),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='token',
|
||||||
|
name='user',
|
||||||
|
field=models.ForeignKey(blank=True, to='subscription.Subscriber', related_name='tokens', verbose_name='user'),
|
||||||
|
),
|
||||||
|
]
|
19
launderette/migrations/0007_auto_20160801_1929.py
Normal file
19
launderette/migrations/0007_auto_20160801_1929.py
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('launderette', '0006_auto_20160801_1928'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='token',
|
||||||
|
name='user',
|
||||||
|
field=models.ForeignKey(verbose_name='user', related_name='tokens', blank=True, null=True, to='subscription.Subscriber'),
|
||||||
|
),
|
||||||
|
]
|
@ -4,7 +4,7 @@ from django.conf import settings
|
|||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
|
|
||||||
from core.models import User
|
from core.models import User
|
||||||
from counter.models import Counter
|
from counter.models import Counter, Product
|
||||||
from subscription.models import Subscriber
|
from subscription.models import Subscriber
|
||||||
from subscription.views import get_subscriber
|
from subscription.views import get_subscriber
|
||||||
|
|
||||||
@ -26,8 +26,8 @@ class Launderette(models.Model):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
def can_be_edited_by(self, user):
|
def can_be_edited_by(self, user):
|
||||||
sub = get_subscriber(request.user)
|
sub = get_subscriber(user)
|
||||||
return sub in self.sellers.all()
|
return sub in self.counter.sellers.all()
|
||||||
|
|
||||||
def can_be_viewed_by(self, user):
|
def can_be_viewed_by(self, user):
|
||||||
return user.is_in_group(settings.SITH_MAIN_MEMBERS_GROUP)
|
return user.is_in_group(settings.SITH_MAIN_MEMBERS_GROUP)
|
||||||
@ -65,8 +65,8 @@ class Token(models.Model):
|
|||||||
name = models.CharField(_('name'), max_length=5)
|
name = models.CharField(_('name'), max_length=5)
|
||||||
launderette = models.ForeignKey(Launderette, related_name='tokens', verbose_name=_('launderette'))
|
launderette = models.ForeignKey(Launderette, related_name='tokens', verbose_name=_('launderette'))
|
||||||
type = models.CharField(_('type'), max_length=10, choices=[('WASHING', _('Washing')), ('DRYING', _('Drying'))])
|
type = models.CharField(_('type'), max_length=10, choices=[('WASHING', _('Washing')), ('DRYING', _('Drying'))])
|
||||||
borrow_date = models.DateTimeField(_('borrow date'), null=True)
|
borrow_date = models.DateTimeField(_('borrow date'), null=True, blank=True)
|
||||||
user = models.ForeignKey(Subscriber, related_name='tokens', verbose_name=_('user'))
|
user = models.ForeignKey(Subscriber, related_name='tokens', verbose_name=_('user'), null=True, blank=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = _('Token')
|
verbose_name = _('Token')
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
<h3>{% trans counter_name=counter %}{{ counter_name }} counter{% endtrans %}</h3>
|
<h3>{% trans counter_name=counter %}{{ counter_name }} counter{% endtrans %}</h3>
|
||||||
<div>
|
<div>
|
||||||
Counter: {{ counter }}
|
Counter: {{ counter }}
|
||||||
<form method="post" action="{{ url('launderette:click', launderette_id=launderette.id, user_id=customer.user.id) }}" class="inline" style="display:inline">
|
<form method="post" action="" class="inline" style="display:inline">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{{ form.as_p() }}
|
{{ form.as_p() }}
|
||||||
<p><input type="submit" value="{% trans %}Go{% endtrans %}" /></p>
|
<p><input type="submit" value="{% trans %}Go{% endtrans %}" /></p>
|
||||||
|
@ -4,7 +4,7 @@ import pytz
|
|||||||
|
|
||||||
from django.shortcuts import render
|
from django.shortcuts import render
|
||||||
from django.views.generic import ListView, DetailView, RedirectView, TemplateView
|
from django.views.generic import ListView, DetailView, RedirectView, TemplateView
|
||||||
from django.views.generic.edit import UpdateView, CreateView, DeleteView, ProcessFormView, FormMixin
|
from django.views.generic.edit import UpdateView, CreateView, DeleteView, BaseFormView
|
||||||
from django.forms.models import modelform_factory
|
from django.forms.models import modelform_factory
|
||||||
from django.forms import CheckboxSelectMultiple
|
from django.forms import CheckboxSelectMultiple
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import ugettext as _
|
||||||
@ -13,6 +13,8 @@ from django.core.urlresolvers import reverse_lazy
|
|||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
from django import forms
|
from django import forms
|
||||||
|
from django.template import defaultfilters
|
||||||
|
from django.utils import formats
|
||||||
|
|
||||||
from core.models import Page
|
from core.models import Page
|
||||||
from club.models import Club
|
from club.models import Club
|
||||||
@ -145,7 +147,7 @@ class LaunderetteDetailView(CanEditPropMixin, DetailView):
|
|||||||
pk_url_kwarg = "launderette_id"
|
pk_url_kwarg = "launderette_id"
|
||||||
template_name = 'launderette/launderette_detail.jinja'
|
template_name = 'launderette/launderette_detail.jinja'
|
||||||
|
|
||||||
class LaunderetteMainClickView(DetailView, ProcessFormView, FormMixin):
|
class LaunderetteMainClickView(CanEditMixin, BaseFormView, DetailView):
|
||||||
"""The click page of the launderette"""
|
"""The click page of the launderette"""
|
||||||
model = Launderette
|
model = Launderette
|
||||||
pk_url_kwarg = "launderette_id"
|
pk_url_kwarg = "launderette_id"
|
||||||
@ -156,47 +158,68 @@ class LaunderetteMainClickView(DetailView, ProcessFormView, FormMixin):
|
|||||||
"""
|
"""
|
||||||
We handle here the login form for the barman
|
We handle here the login form for the barman
|
||||||
"""
|
"""
|
||||||
if self.request.method == 'POST':
|
|
||||||
self.object = self.get_object()
|
|
||||||
kwargs = super(LaunderetteMainClickView, self).get_context_data(**kwargs)
|
kwargs = super(LaunderetteMainClickView, self).get_context_data(**kwargs)
|
||||||
kwargs['counter'] = self.object.counter
|
kwargs['counter'] = self.object.counter
|
||||||
kwargs['form'] = self.get_form()
|
kwargs['form'] = self.get_form()
|
||||||
kwargs['barmen'] = [self.request.user]
|
kwargs['barmen'] = [self.request.user]
|
||||||
if 'last_basket' in self.request.session.keys():
|
if 'last_basket' in self.request.session.keys():
|
||||||
kwargs['last_basket'] = self.request.session.pop('last_basket')
|
kwargs['last_basket'] = self.request.session.pop('last_basket', None)
|
||||||
kwargs['last_customer'] = self.request.session.pop('last_customer')
|
kwargs['last_customer'] = self.request.session.pop('last_customer', None)
|
||||||
kwargs['last_total'] = self.request.session.pop('last_total')
|
kwargs['last_total'] = self.request.session.pop('last_total', None)
|
||||||
kwargs['new_customer_amount'] = self.request.session.pop('new_customer_amount')
|
kwargs['new_customer_amount'] = self.request.session.pop('new_customer_amount', None)
|
||||||
return kwargs
|
return kwargs
|
||||||
|
|
||||||
def form_valid(self, form):
|
def form_valid(self, form):
|
||||||
"""
|
"""
|
||||||
We handle here the redirection, passing the user id of the asked customer
|
We handle here the redirection, passing the user id of the asked customer
|
||||||
"""
|
"""
|
||||||
|
self.object = self.get_object()
|
||||||
self.kwargs['user_id'] = form.cleaned_data['user_id']
|
self.kwargs['user_id'] = form.cleaned_data['user_id']
|
||||||
return super(LaunderetteMainClickView, self).form_valid(form)
|
return super(LaunderetteMainClickView, self).form_valid(form)
|
||||||
|
|
||||||
def get_success_url(self):
|
def get_success_url(self):
|
||||||
return reverse_lazy('launderette:click', args=self.args, kwargs=self.kwargs)
|
return reverse_lazy('launderette:click', args=self.args, kwargs=self.kwargs)
|
||||||
|
|
||||||
class LaunderetteClickView(CanEditMixin, DetailView):
|
class ClickTokenForm(forms.BaseForm):
|
||||||
|
pass
|
||||||
|
|
||||||
|
class LaunderetteClickView(CanEditMixin, DetailView, BaseFormView):
|
||||||
"""The click page of the launderette"""
|
"""The click page of the launderette"""
|
||||||
model = Launderette
|
model = Launderette
|
||||||
pk_url_kwarg = "launderette_id"
|
pk_url_kwarg = "launderette_id"
|
||||||
template_name = 'launderette/launderette_click.jinja'
|
template_name = 'launderette/launderette_click.jinja'
|
||||||
|
|
||||||
def generate_form(self):
|
def get_form_class(self):
|
||||||
fields = OrderedDict()
|
fields = OrderedDict()
|
||||||
for s in self.subscriber.slots.all():
|
kwargs = {}
|
||||||
fields["%s-%s-%s-%s" % (s.user, s.start_date, s.type, s.machine)] = forms.CharField(max_length=5,
|
def clean_field_factory(field_name, slot):
|
||||||
label="%s - %s" % (s.get_type_display(), s.start_date))
|
def clean_field(self2):
|
||||||
return type('ClickForm', (forms.BaseForm,), { 'base_fields': fields })()
|
t_name = str(self2.data[field_name])
|
||||||
|
if t_name != "":
|
||||||
|
t = Token.objects.filter(name=str(self2.data[field_name]), type=slot.type, launderette=self.object).first()
|
||||||
|
if t is None:
|
||||||
|
raise forms.ValidationError(_("Token not found"))
|
||||||
|
return clean_field
|
||||||
|
for s in self.subscriber.slots.filter(token=None).all():
|
||||||
|
field_name = "slot-%s" % (str(s.id))
|
||||||
|
fields[field_name] = forms.CharField(max_length=5, required=False,
|
||||||
|
label="%s - %s" % (s.get_type_display(), defaultfilters.date(s.start_date, "j N Y H:i")))
|
||||||
|
# XXX l10n settings.DATETIME_FORMAT did'nt work here :/
|
||||||
|
|
||||||
|
kwargs["clean_"+field_name] = clean_field_factory(field_name, s)
|
||||||
|
|
||||||
|
def clean_form(self2):
|
||||||
|
raise forms.ValidationError(_("Not enough money"))
|
||||||
|
return self2.cleaned_data
|
||||||
|
|
||||||
|
kwargs['base_fields'] = fields
|
||||||
|
kwargs['clean'] = clean_form
|
||||||
|
return type('ClickForm', (ClickTokenForm,), kwargs)
|
||||||
|
|
||||||
def get(self, request, *args, **kwargs):
|
def get(self, request, *args, **kwargs):
|
||||||
"""Simple get view"""
|
"""Simple get view"""
|
||||||
self.customer = Customer.objects.filter(user__id=self.kwargs['user_id']).first()
|
self.customer = Customer.objects.filter(user__id=self.kwargs['user_id']).first()
|
||||||
self.subscriber = get_subscriber(self.customer.user)
|
self.subscriber = get_subscriber(self.customer.user)
|
||||||
request.session['not_enough'] = False
|
|
||||||
return super(LaunderetteClickView, self).get(request, *args, **kwargs)
|
return super(LaunderetteClickView, self).get(request, *args, **kwargs)
|
||||||
|
|
||||||
def post(self, request, *args, **kwargs):
|
def post(self, request, *args, **kwargs):
|
||||||
@ -204,21 +227,30 @@ class LaunderetteClickView(CanEditMixin, DetailView):
|
|||||||
self.object = self.get_object()
|
self.object = self.get_object()
|
||||||
self.customer = Customer.objects.filter(user__id=self.kwargs['user_id']).first()
|
self.customer = Customer.objects.filter(user__id=self.kwargs['user_id']).first()
|
||||||
self.subscriber = get_subscriber(self.customer.user)
|
self.subscriber = get_subscriber(self.customer.user)
|
||||||
request.session['not_enough'] = False
|
return super(LaunderetteClickView, self).post(request, *args, **kwargs)
|
||||||
context = self.get_context_data(object=self.object)
|
|
||||||
return self.render_to_response(context)
|
|
||||||
|
|
||||||
|
def form_valid(self, form):
|
||||||
|
"""
|
||||||
|
We handle here the redirection, passing the user id of the asked customer
|
||||||
|
"""
|
||||||
|
self.request.session['last_basket'] = ["GUY"]
|
||||||
|
return super(LaunderetteClickView, self).form_valid(form)
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
"""
|
"""
|
||||||
We handle here the login form for the barman
|
We handle here the login form for the barman
|
||||||
"""
|
"""
|
||||||
kwargs = super(LaunderetteClickView, self).get_context_data(**kwargs)
|
kwargs = super(LaunderetteClickView, self).get_context_data(**kwargs)
|
||||||
|
if 'form' not in kwargs.keys():
|
||||||
|
kwargs['form'] = self.get_form()
|
||||||
kwargs['counter'] = self.object.counter
|
kwargs['counter'] = self.object.counter
|
||||||
kwargs['customer'] = self.customer
|
kwargs['customer'] = self.customer
|
||||||
kwargs['form'] = self.generate_form()
|
|
||||||
return kwargs
|
return kwargs
|
||||||
|
|
||||||
|
def get_success_url(self):
|
||||||
|
self.kwargs.pop('user_id', None)
|
||||||
|
return reverse_lazy('launderette:main_click', args=self.args, kwargs=self.kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class MachineEditView(CanEditPropMixin, UpdateView):
|
class MachineEditView(CanEditPropMixin, UpdateView):
|
||||||
|
Loading…
Reference in New Issue
Block a user