Format club

This commit is contained in:
Pierre Brunet 2017-06-12 08:54:48 +02:00
parent 544ff630a5
commit 73b2c9d4c5
5 changed files with 95 additions and 83 deletions

View File

@ -29,4 +29,3 @@ from club.models import Club, Membership
admin.site.register(Club) admin.site.register(Club)
admin.site.register(Membership) admin.site.register(Membership)

View File

@ -27,12 +27,13 @@ from django.core import validators
from django.conf import settings from django.conf import settings
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.db import IntegrityError, transaction from django.db import transaction
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.utils import timezone from django.utils import timezone
from core.models import User, MetaGroup, Group, SithFile from core.models import User, MetaGroup, Group, SithFile
# Create your models here. # Create your models here.
class Club(models.Model): class Club(models.Model):
@ -153,6 +154,7 @@ class Club(models.Model):
return sub.is_subscribed return sub.is_subscribed
_memberships = {} _memberships = {}
def get_membership_for(self, user): def get_membership_for(self, user):
""" """
Returns the current membership the given user Returns the current membership the given user
@ -168,6 +170,7 @@ class Club(models.Model):
Club._memberships[self.id][user.id] = m Club._memberships[self.id][user.id] = m
return m return m
class Membership(models.Model): class Membership(models.Model):
""" """
The Membership class makes the connection between User and Clubs The Membership class makes the connection between User and Clubs
@ -216,4 +219,3 @@ class Membership(models.Model):
def get_absolute_url(self): def get_absolute_url(self):
return reverse('club:club_members', kwargs={'club_id': self.club.id}) return reverse('club:club_members', kwargs={'club_id': self.club.id})

View File

@ -31,6 +31,7 @@ from club.models import Club
# Create your tests here. # Create your tests here.
class ClubTest(TestCase): class ClubTest(TestCase):
def setUp(self): def setUp(self):
call_command("populate") call_command("populate")
@ -103,4 +104,3 @@ class ClubTest(TestCase):
"role": 10}) "role": 10})
self.assertTrue(response.status_code == 200) self.assertTrue(response.status_code == 200)
self.assertTrue("<li>Vous n&#39;avez pas la permission de faire cela</li>" in str(response.content)) self.assertTrue("<li>Vous n&#39;avez pas la permission de faire cela</li>" in str(response.content))

View File

@ -22,7 +22,7 @@
# #
# #
from django.conf.urls import url, include from django.conf.urls import url
from club.views import * from club.views import *
@ -40,4 +40,3 @@ urlpatterns = [
url(r'^(?P<club_id>[0-9]+)/tools$', ClubToolsView.as_view(), name='tools'), url(r'^(?P<club_id>[0-9]+)/tools$', ClubToolsView.as_view(), name='tools'),
url(r'^membership/(?P<membership_id>[0-9]+)/set_old$', MembershipSetOldView.as_view(), name='membership_set_old'), url(r'^membership/(?P<membership_id>[0-9]+)/set_old$', MembershipSetOldView.as_view(), name='membership_set_old'),
] ]

View File

@ -23,27 +23,21 @@
# #
from django import forms from django import forms
from django.shortcuts import render
from django.views.generic import ListView, DetailView, TemplateView from django.views.generic import ListView, DetailView, TemplateView
from django.views.generic.edit import UpdateView, CreateView from django.views.generic.edit import UpdateView, CreateView
from django.forms import CheckboxSelectMultiple
from django.core.exceptions import ValidationError
from django.http import HttpResponseRedirect, HttpResponse from django.http import HttpResponseRedirect, HttpResponse
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.utils import timezone from django.utils import timezone
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.utils.translation import ugettext as _t from django.utils.translation import ugettext as _t
from django.conf import settings
from ajax_select.fields import AutoCompleteSelectField from ajax_select.fields import AutoCompleteSelectField
from datetime import timedelta
from core.views import CanViewMixin, CanEditMixin, CanEditPropMixin, TabedViewMixin from core.views import CanViewMixin, CanEditMixin, CanEditPropMixin, TabedViewMixin
from core.views.forms import SelectDate, SelectSingle, SelectDateTime from core.views.forms import SelectDate, SelectDateTime
from club.models import Club, Membership from club.models import Club, Membership
from core.models import User from sith.settings import SITH_MAXIMUM_FREE_ROLE
from sith.settings import SITH_MAXIMUM_FREE_ROLE, SITH_MAIN_BOARD_GROUP from counter.models import Selling, Counter
from counter.models import Product, Selling, Counter
class ClubTabsMixin(TabedViewMixin): class ClubTabsMixin(TabedViewMixin):
def get_tabs_title(self): def get_tabs_title(self):
@ -91,6 +85,7 @@ class ClubTabsMixin(TabedViewMixin):
}) })
return tab_list return tab_list
class ClubListView(ListView): class ClubListView(ListView):
""" """
List the Clubs List the Clubs
@ -98,6 +93,7 @@ class ClubListView(ListView):
model = Club model = Club
template_name = 'club/club_list.jinja' template_name = 'club/club_list.jinja'
class ClubView(ClubTabsMixin, DetailView): class ClubView(ClubTabsMixin, DetailView):
""" """
Front page of a Club Front page of a Club
@ -107,6 +103,7 @@ class ClubView(ClubTabsMixin, DetailView):
template_name = 'club/club_detail.jinja' template_name = 'club/club_detail.jinja'
current_tab = "infos" current_tab = "infos"
class ClubToolsView(ClubTabsMixin, CanEditMixin, DetailView): class ClubToolsView(ClubTabsMixin, CanEditMixin, DetailView):
""" """
Tools page of a Club Tools page of a Club
@ -116,12 +113,14 @@ class ClubToolsView(ClubTabsMixin, CanEditMixin, DetailView):
template_name = 'club/club_tools.jinja' template_name = 'club/club_tools.jinja'
current_tab = "tools" current_tab = "tools"
class ClubMemberForm(forms.ModelForm): class ClubMemberForm(forms.ModelForm):
""" """
Form handling the members of a club Form handling the members of a club
""" """
error_css_class = 'error' error_css_class = 'error'
required_css_class = 'required' required_css_class = 'required'
class Meta: class Meta:
model = Membership model = Membership
fields = ['user', 'role', 'start_date', 'description'] fields = ['user', 'role', 'start_date', 'description']
@ -134,9 +133,10 @@ class ClubMemberForm(forms.ModelForm):
""" """
Overloaded to return the club, and not to a Membership object that has no view Overloaded to return the club, and not to a Membership object that has no view
""" """
ret = super(ClubMemberForm, self).save(*args, **kwargs) super(ClubMemberForm, self).save(*args, **kwargs)
return self.instance.club return self.instance.club
class ClubMembersView(ClubTabsMixin, CanViewMixin, UpdateView): class ClubMembersView(ClubTabsMixin, CanViewMixin, UpdateView):
""" """
View of a club's members View of a club's members
@ -182,6 +182,7 @@ class ClubMembersView(ClubTabsMixin, CanViewMixin, UpdateView):
else: else:
return self.form_invalid(form) return self.form_invalid(form)
class ClubOldMembersView(ClubTabsMixin, CanViewMixin, DetailView): class ClubOldMembersView(ClubTabsMixin, CanViewMixin, DetailView):
""" """
Old members of a club Old members of a club
@ -191,11 +192,13 @@ class ClubOldMembersView(ClubTabsMixin, CanViewMixin, DetailView):
template_name = 'club/club_old_members.jinja' template_name = 'club/club_old_members.jinja'
current_tab = "elderlies" current_tab = "elderlies"
class SellingsFormBase(forms.Form): class SellingsFormBase(forms.Form):
begin_date = forms.DateTimeField(['%Y-%m-%d %H:%M:%S'], label=_("Begin date"), required=False, widget=SelectDateTime) begin_date = forms.DateTimeField(['%Y-%m-%d %H:%M:%S'], label=_("Begin date"), required=False, widget=SelectDateTime)
end_date = forms.DateTimeField(['%Y-%m-%d %H:%M:%S'], label=_("End date"), required=False, widget=SelectDateTime) end_date = forms.DateTimeField(['%Y-%m-%d %H:%M:%S'], label=_("End date"), required=False, widget=SelectDateTime)
counter = forms.ModelChoiceField(Counter.objects.order_by('name').all(), label=_("Counter"), required=False) counter = forms.ModelChoiceField(Counter.objects.order_by('name').all(), label=_("Counter"), required=False)
class ClubSellingView(ClubTabsMixin, CanEditMixin, DetailView): class ClubSellingView(ClubTabsMixin, CanEditMixin, DetailView):
""" """
Sellings of a club Sellings of a club
@ -235,6 +238,7 @@ class ClubSellingView(ClubTabsMixin, CanEditMixin, DetailView):
kwargs['form'] = form kwargs['form'] = form
return kwargs return kwargs
class ClubSellingCSVView(ClubSellingView): class ClubSellingCSVView(ClubSellingView):
""" """
Generate sellings in csv for a given period Generate sellings in csv for a given period
@ -258,21 +262,25 @@ class ClubSellingCSVView(ClubSellingView):
row = [o.date, o.counter] row = [o.date, o.counter]
if o.seller: if o.seller:
row.append(o.seller.get_display_name()) row.append(o.seller.get_display_name())
else: row.append('') else:
row.append('')
if o.customer: if o.customer:
row.append(o.customer.user.get_display_name()) row.append(o.customer.user.get_display_name())
else: row.append('') else:
row.append('')
row = row + [o.label, o.quantity, o.quantity * o.unit_price, row = row + [o.label, o.quantity, o.quantity * o.unit_price,
o.get_payment_method_display()] o.get_payment_method_display()]
if o.product: if o.product:
row.append(o.product.selling_price) row.append(o.product.selling_price)
row.append(o.product.purchase_price) row.append(o.product.purchase_price)
row.append(o.product.selling_price - o.product.purchase_price) row.append(o.product.selling_price - o.product.purchase_price)
else: row = row + ['', '', ''] else:
row = row + ['', '', '']
writer.writerow(row) writer.writerow(row)
return response return response
class ClubEditView(ClubTabsMixin, CanEditMixin, UpdateView): class ClubEditView(ClubTabsMixin, CanEditMixin, UpdateView):
""" """
Edit a Club's main informations (for the club's members) Edit a Club's main informations (for the club's members)
@ -283,6 +291,7 @@ class ClubEditView(ClubTabsMixin, CanEditMixin, UpdateView):
template_name = 'core/edit.jinja' template_name = 'core/edit.jinja'
current_tab = "edit" current_tab = "edit"
class ClubEditPropView(ClubTabsMixin, CanEditPropMixin, UpdateView): class ClubEditPropView(ClubTabsMixin, CanEditPropMixin, UpdateView):
""" """
Edit the properties of a Club object (for the Sith admins) Edit the properties of a Club object (for the Sith admins)
@ -293,6 +302,7 @@ class ClubEditPropView(ClubTabsMixin, CanEditPropMixin, UpdateView):
template_name = 'core/edit.jinja' template_name = 'core/edit.jinja'
current_tab = "props" current_tab = "props"
class ClubCreateView(CanEditPropMixin, CreateView): class ClubCreateView(CanEditPropMixin, CreateView):
""" """
Create a club (for the Sith admin) Create a club (for the Sith admin)
@ -302,6 +312,7 @@ class ClubCreateView(CanEditPropMixin, CreateView):
fields = ['name', 'unix_name', 'parent'] fields = ['name', 'unix_name', 'parent']
template_name = 'core/edit.jinja' template_name = 'core/edit.jinja'
class MembershipSetOldView(CanEditMixin, DetailView): class MembershipSetOldView(CanEditMixin, DetailView):
""" """
Set a membership as beeing old Set a membership as beeing old
@ -319,6 +330,7 @@ class MembershipSetOldView(CanEditMixin, DetailView):
self.object = self.get_object() self.object = self.get_object()
return HttpResponseRedirect(reverse('club:club_members', args=self.args, kwargs={'club_id': self.object.club.id})) return HttpResponseRedirect(reverse('club:club_members', args=self.args, kwargs={'club_id': self.object.club.id}))
class ClubStatView(TemplateView): class ClubStatView(TemplateView):
template_name = "club/stats.jinja" template_name = "club/stats.jinja"