From 13ec91e7e5aee61205179bf97e2b7287433c490c Mon Sep 17 00:00:00 2001 From: Krophil Date: Mon, 12 Jun 2017 09:59:44 +0200 Subject: [PATCH] Format launderette --- launderette/models.py | 10 +++++--- launderette/urls.py | 2 +- launderette/views.py | 59 ++++++++++++++++++++++++------------------- 3 files changed, 40 insertions(+), 31 deletions(-) diff --git a/launderette/models.py b/launderette/models.py index 9ad0f35e..9528db70 100644 --- a/launderette/models.py +++ b/launderette/models.py @@ -27,12 +27,13 @@ from django.utils.translation import ugettext_lazy as _ from django.conf import settings from django.core.urlresolvers import reverse -from counter.models import Counter, Product +from counter.models import Counter from core.models import User from club.models import Club # Create your models here. + class Launderette(models.Model): name = models.CharField(_('name'), max_length=30) counter = models.OneToOneField(Counter, verbose_name=_('counter'), related_name='launderette') @@ -78,6 +79,7 @@ class Launderette(models.Model): def token_list(self): return [t.id for t in self.get_token_list()] + class Machine(models.Model): name = models.CharField(_('name'), max_length=30) launderette = models.ForeignKey(Launderette, related_name='machines', verbose_name=_('launderette')) @@ -103,6 +105,7 @@ class Machine(models.Model): def get_absolute_url(self): return reverse('launderette:launderette_admin', kwargs={"launderette_id": self.launderette.id}) + class Token(models.Model): name = models.CharField(_('name'), max_length=5) launderette = models.ForeignKey(Launderette, related_name='tokens', verbose_name=_('launderette')) @@ -140,6 +143,7 @@ class Token(models.Model): else: return False + class Slot(models.Model): start_date = models.DateTimeField(_('start date')) type = models.CharField(_('type'), max_length=10, choices=settings.SITH_LAUNDERETTE_MACHINE_TYPES) @@ -156,6 +160,4 @@ class Slot(models.Model): def __str__(self): return "User: %s - Date: %s - Type: %s - Machine: %s - Token: %s" % (self.user, self.start_date, self.get_type_display(), - self.machine.name, self.token) - - + self.machine.name, self.token) diff --git a/launderette/urls.py b/launderette/urls.py index ccd09415..844f1385 100644 --- a/launderette/urls.py +++ b/launderette/urls.py @@ -22,7 +22,7 @@ # # -from django.conf.urls import url, include +from django.conf.urls import url from launderette.views import * diff --git a/launderette/views.py b/launderette/views.py index 340f6607..da7e6219 100644 --- a/launderette/views.py +++ b/launderette/views.py @@ -26,11 +26,8 @@ from datetime import datetime, timedelta from collections import OrderedDict import pytz -from django.shortcuts import render -from django.views.generic import ListView, DetailView, RedirectView, TemplateView +from django.views.generic import ListView, DetailView, TemplateView from django.views.generic.edit import UpdateView, CreateView, DeleteView, BaseFormView -from django.forms.models import modelform_factory -from django.forms import CheckboxSelectMultiple from django.utils.translation import ugettext as _ from django.utils import dateparse, timezone from django.core.urlresolvers import reverse_lazy @@ -38,7 +35,6 @@ from django.conf import settings from django.db import transaction, DataError from django import forms from django.template import defaultfilters -from django.utils import formats from core.models import Page, User from club.models import Club @@ -49,6 +45,7 @@ from counter.views import GetUserForm # For users + class LaunderetteMainView(TemplateView): """Main presentation view""" template_name = 'launderette/launderette_main.jinja' @@ -59,11 +56,13 @@ class LaunderetteMainView(TemplateView): kwargs['page'] = Page.objects.filter(name='launderette').first() return kwargs + class LaunderetteBookMainView(CanViewMixin, ListView): """Choose which launderette to book""" model = Launderette template_name = 'launderette/launderette_book_choose.jinja' + class LaunderetteBookView(CanViewMixin, DetailView): """Display the launderette schedule""" model = Launderette @@ -96,11 +95,12 @@ class LaunderetteBookView(CanViewMixin, DetailView): if self.check_slot("WASHING") and self.check_slot("DRYING", self.date + timedelta(hours=1)): Slot(user=self.subscriber, start_date=self.date, machine=self.machines["WASHING"], type="WASHING").save() Slot(user=self.subscriber, start_date=self.date + timedelta(hours=1), - machine=self.machines["DRYING"], type="DRYING").save() + machine=self.machines["DRYING"], type="DRYING").save() return super(LaunderetteBookView, self).get(request, *args, **kwargs) def check_slot(self, type, date=None): - if date is None: date = self.date + if date is None: + date = self.date for m in self.object.machines.filter(is_working=True, type=type).all(): slot = Slot.objects.filter(start_date=date, machine=m).first() if slot is None: @@ -121,9 +121,9 @@ class LaunderetteBookView(CanViewMixin, DetailView): kwargs['planning'] = OrderedDict() kwargs['slot_type'] = self.slot_type start_date = datetime.now().replace(hour=0, minute=0, second=0, microsecond=0, tzinfo=pytz.UTC) - for date in LaunderetteBookView.date_iterator(start_date, start_date+timedelta(days=6), timedelta(days=1)): + for date in LaunderetteBookView.date_iterator(start_date, start_date + timedelta(days=6), timedelta(days=1)): kwargs['planning'][date] = [] - for h in LaunderetteBookView.date_iterator(date, date+timedelta(days=1), timedelta(hours=1)): + for h in LaunderetteBookView.date_iterator(date, date + timedelta(days=1), timedelta(hours=1)): free = False if self.slot_type == "BOTH" and self.check_slot("WASHING", h) and self.check_slot("DRYING", h + timedelta(hours=1)): free = True @@ -137,6 +137,7 @@ class LaunderetteBookView(CanViewMixin, DetailView): kwargs['planning'][date].append(None) return kwargs + class SlotDeleteView(CanEditPropMixin, DeleteView): """Delete a slot""" model = Slot @@ -154,6 +155,7 @@ class LaunderetteListView(CanEditPropMixin, ListView): model = Launderette template_name = 'launderette/launderette_list.jinja' + class LaunderetteEditView(CanEditPropMixin, UpdateView): """Edit a launderette""" model = Launderette @@ -161,6 +163,7 @@ class LaunderetteEditView(CanEditPropMixin, UpdateView): fields = ['name'] template_name = 'core/edit.jinja' + class LaunderetteCreateView(CanCreateMixin, CreateView): """Create a new launderette""" model = Launderette @@ -174,11 +177,12 @@ class LaunderetteCreateView(CanCreateMixin, CreateView): form.instance.counter = c return super(LaunderetteCreateView, self).form_valid(form) + class ManageTokenForm(forms.Form): action = forms.ChoiceField(choices=[("BACK", _("Back")), ("ADD", _("Add")), ("DEL", _("Delete"))], initial="BACK", - label=_("Action"), widget=forms.RadioSelect) + label=_("Action"), widget=forms.RadioSelect) token_type = forms.ChoiceField(choices=settings.SITH_LAUNDERETTE_MACHINE_TYPES, label=_("Type"), initial="WASHING", - widget=forms.RadioSelect) + widget=forms.RadioSelect) tokens = forms.CharField(max_length=512, widget=forms.widgets.Textarea, label=_("Tokens, separated by spaces")) def process(self, launderette): @@ -210,6 +214,7 @@ class ManageTokenForm(forms.Form): except: self.add_error(None, _("Token %(token_name)s does not exists") % {'token_name': t}) + class LaunderetteAdminView(CanEditPropMixin, BaseFormView, DetailView): """The admin page of the launderette""" model = Launderette @@ -253,6 +258,7 @@ class LaunderetteAdminView(CanEditPropMixin, BaseFormView, DetailView): def get_success_url(self): return reverse_lazy('launderette:launderette_admin', args=self.args, kwargs=self.kwargs) + class GetLaunderetteUserForm(GetUserForm): def clean(self): cleaned_data = super(GetLaunderetteUserForm, self).clean() @@ -261,12 +267,13 @@ class GetLaunderetteUserForm(GetUserForm): raise forms.ValidationError(_("User has booked no slot")) return cleaned_data + class LaunderetteMainClickView(CanEditMixin, BaseFormView, DetailView): """The click page of the launderette""" model = Launderette pk_url_kwarg = "launderette_id" template_name = 'counter/counter_main.jinja' - form_class = GetLaunderetteUserForm # Form to enter a client code and get the corresponding user id + form_class = GetLaunderetteUserForm # Form to enter a client code and get the corresponding user id def get(self, request, *args, **kwargs): self.object = self.get_object() @@ -301,6 +308,7 @@ class LaunderetteMainClickView(CanEditMixin, BaseFormView, DetailView): def get_success_url(self): return reverse_lazy('launderette:click', args=self.args, kwargs=self.kwargs) + class ClickTokenForm(forms.BaseForm): def clean(self): with transaction.atomic(): @@ -309,11 +317,11 @@ class ClickTokenForm(forms.BaseForm): counter = Counter.objects.filter(id=self.counter_id).first() subscriber = customer.user self.last_basket = { - 'last_basket': [], - 'last_customer': customer.user.get_display_name(), - } + 'last_basket': [], + 'last_customer': customer.user.get_display_name(), + } total = 0 - for k,t in self.cleaned_data.items(): + for k, t in self.cleaned_data.items(): if t is not None: slot_id = int(k[5:]) slot = Slot.objects.filter(id=slot_id).first() @@ -323,15 +331,16 @@ class ClickTokenForm(forms.BaseForm): t.borrow_date = datetime.now().replace(tzinfo=pytz.UTC) t.save() price = settings.SITH_LAUNDERETTE_PRICES[t.type] - s = Selling(label="Jeton "+t.get_type_display()+" N°"+t.name, club=counter.club, product=None, counter=counter, unit_price=price, - quantity=1, seller=operator, customer=customer) + s = Selling(label="Jeton " + t.get_type_display() + " N°" + t.name, club=counter.club, product=None, counter=counter, unit_price=price, + quantity=1, seller=operator, customer=customer) s.save() total += price - self.last_basket['last_basket'].append("Jeton "+t.get_type_display()+" N°"+t.name) + self.last_basket['last_basket'].append("Jeton " + t.get_type_display() + " N°" + t.name) self.last_basket['new_customer_amount'] = str(customer.amount) self.last_basket['last_total'] = str(total) return self.cleaned_data + class LaunderetteClickView(CanEditMixin, DetailView, BaseFormView): """The click page of the launderette""" model = Launderette @@ -346,7 +355,7 @@ class LaunderetteClickView(CanEditMixin, DetailView, BaseFormView): 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, - user=None).first() + user=None).first() if t is None: raise forms.ValidationError(_("Token not found")) return t @@ -354,9 +363,9 @@ class LaunderetteClickView(CanEditMixin, DetailView, BaseFormView): for s in self.subscriber.slots.filter(token=None, start_date__gte=timezone.now().replace(tzinfo=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"))) + label="%s - %s" % (s.get_type_display(), defaultfilters.date(s.start_date, "j N Y H:i"))) # XXX l10n settings.DATETIME_FORMAT didn't work here :/ - kwargs["clean_"+field_name] = clean_field_factory(field_name, s) + kwargs["clean_" + field_name] = clean_field_factory(field_name, s) kwargs['subscriber_id'] = self.subscriber.id kwargs['counter_id'] = self.object.counter.id kwargs['operator_id'] = self.operator.id @@ -401,7 +410,6 @@ class LaunderetteClickView(CanEditMixin, DetailView, BaseFormView): return reverse_lazy('launderette:main_click', args=self.args, kwargs=self.kwargs) - class MachineEditView(CanEditPropMixin, UpdateView): """Edit a machine""" model = Machine @@ -409,6 +417,7 @@ class MachineEditView(CanEditPropMixin, UpdateView): fields = ['name', 'launderette', 'type', 'is_working'] template_name = 'core/edit.jinja' + class MachineDeleteView(CanEditPropMixin, DeleteView): """Edit a machine""" model = Machine @@ -416,6 +425,7 @@ class MachineDeleteView(CanEditPropMixin, DeleteView): template_name = 'core/delete_confirm.jinja' success_url = reverse_lazy('launderette:launderette_list') + class MachineCreateView(CanCreateMixin, CreateView): """Create a new machine""" model = Machine @@ -429,6 +439,3 @@ class MachineCreateView(CanCreateMixin, CreateView): if obj is not None: ret['launderette'] = obj.id return ret - - -