mirror of
https://github.com/ae-utbm/sith.git
synced 2025-07-10 03:49:24 +00:00
Make sellings for clubs
This commit is contained in:
@ -1,65 +0,0 @@
|
||||
{% extends "core/base.jinja" %}
|
||||
|
||||
{% block content %}
|
||||
<div class="tool-bar">
|
||||
<div>{{ club.name }}</div>
|
||||
<div class="tools">
|
||||
<a href="{{ url('club:club_view', club_id=club.id) }}"
|
||||
{%- if tab == "infos" -%}
|
||||
class="selected_tab"
|
||||
{%- endif -%}
|
||||
>{% trans %}Infos{% endtrans %}</a>
|
||||
|
||||
{% if can_view(club, user) %}
|
||||
<a href="{{ url('club:club_members', club_id=club.pk) }}"
|
||||
{%- if tab == "members" -%}
|
||||
class="selected_tab"
|
||||
{%- endif -%}
|
||||
>{% trans %}Members{% endtrans %}</a>
|
||||
{% endif %}
|
||||
|
||||
{% if can_view(club, user) %}
|
||||
<a href="{{ url('club:club_old_members', club_id=club.pk) }}"
|
||||
{%- if tab == "elderlies" -%}
|
||||
class="selected_tab"
|
||||
{%- endif -%}
|
||||
>{% trans %}Old members{% endtrans %}</a>
|
||||
{% endif %}
|
||||
|
||||
{% if can_view(club, user) %}
|
||||
<a href="{{ url('club:tools', club_id=club.id) }}"
|
||||
{%- if tab == "tools" -%}
|
||||
class="selected_tab"
|
||||
{%- endif -%}
|
||||
>{% trans %}Tools{% endtrans %}</a>
|
||||
{% endif %}
|
||||
|
||||
{% if can_edit(club, request.user) %}
|
||||
<a href="{{ url('club:club_edit', club_id=club.id) }}"
|
||||
{%- if tab == "edit" -%}
|
||||
class="selected_tab"
|
||||
{%- endif -%}
|
||||
>{% trans %}Edit{% endtrans %}</a>
|
||||
{% endif %}
|
||||
|
||||
{% if can_edit_prop(club, request.user) %}
|
||||
<a href="{{ url('club:club_prop', club_id=club.id) }}"
|
||||
{%- if tab == "props" -%}
|
||||
class="selected_tab"
|
||||
{%- endif -%}
|
||||
>{% trans %}Props{% endtrans %}</a>
|
||||
{% endif %}
|
||||
|
||||
</div>
|
||||
<hr>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
{% block club %}
|
||||
{% endblock %}
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
|
||||
|
||||
|
@ -12,7 +12,7 @@
|
||||
<td>{% trans %}To{% endtrans %}</td>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for m in club.members.exclude(end_date=None).order_by('-role', '-end_date').all() %}
|
||||
{% for m in club.members.exclude(end_date=None).order_by('-role', 'description', '-end_date').all() %}
|
||||
<tr>
|
||||
<td>{{ user_profile_link(m.user) }}</td>
|
||||
<td>{{ settings.SITH_CLUB_ROLES[m.role] }}</td>
|
||||
|
46
club/templates/club/club_sellings.jinja
Normal file
46
club/templates/club/club_sellings.jinja
Normal file
@ -0,0 +1,46 @@
|
||||
{% extends "core/base.jinja" %}
|
||||
{% from 'core/macros.jinja' import user_profile_link %}
|
||||
|
||||
{% block content %}
|
||||
<h3>{% trans %}Sellings{% endtrans %}</h3>
|
||||
<form action="" method="get">
|
||||
{% csrf_token %}
|
||||
{{ form }}
|
||||
<p><input type="submit" value="{% trans %}Show{% endtrans %}" /></p>
|
||||
</form>
|
||||
<p>
|
||||
{% trans %}Quantity: {% endtrans %}{{ result.count() }} {% trans %}units{% endtrans %}<br/>
|
||||
{% trans %}Total: {% endtrans %}{{ total }} €
|
||||
</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<td>{% trans %}Date{% endtrans %}</td>
|
||||
<td>{% trans %}Counter{% endtrans %}</td>
|
||||
<td>{% trans %}Barman{% endtrans %}</td>
|
||||
<td>{% trans %}Customer{% endtrans %}</td>
|
||||
<td>{% trans %}Label{% endtrans %}</td>
|
||||
<td>{% trans %}Quantity{% endtrans %}</td>
|
||||
<td>{% trans %}Total{% endtrans %}</td>
|
||||
<td>{% trans %}Payment method{% endtrans %}</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for s in result %}
|
||||
<tr>
|
||||
<td>{{ s.date|localtime|date(DATETIME_FORMAT) }} {{ s.date|localtime|time(DATETIME_FORMAT) }}</td>
|
||||
<td>{{ s.counter }}</td>
|
||||
<td><a href="{{ s.seller.get_absolute_url() }}">{{ s.seller.get_display_name() }}</a></td>
|
||||
<td><a href="{{ s.customer.user.get_absolute_url() }}">{{ s.customer.user.get_display_name() }}</a></td>
|
||||
<td>{{ s.label }}</td>
|
||||
<td>{{ s.quantity }}</td>
|
||||
<td>{{ s.quantity * s.unit_price }} €</td>
|
||||
<td>{{ s.get_payment_method_display() }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
{% endblock %}
|
||||
|
||||
|
||||
|
@ -9,6 +9,7 @@ urlpatterns = [
|
||||
url(r'^(?P<club_id>[0-9]+)/edit$', ClubEditView.as_view(), name='club_edit'),
|
||||
url(r'^(?P<club_id>[0-9]+)/members$', ClubMembersView.as_view(), name='club_members'),
|
||||
url(r'^(?P<club_id>[0-9]+)/elderlies$', ClubOldMembersView.as_view(), name='club_old_members'),
|
||||
url(r'^(?P<club_id>[0-9]+)/sellings$', ClubSellingView.as_view(), name='club_sellings'),
|
||||
url(r'^(?P<club_id>[0-9]+)/prop$', ClubEditPropView.as_view(), name='club_prop'),
|
||||
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'),
|
||||
|
@ -8,10 +8,15 @@ from django.http import HttpResponseRedirect
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.utils import timezone
|
||||
from django.utils.translation import ugettext as _
|
||||
from django.conf import settings
|
||||
|
||||
from datetime import timedelta
|
||||
|
||||
from core.views import CanViewMixin, CanEditMixin, CanEditPropMixin, TabedViewMixin
|
||||
from core.views.forms import SelectDate, SelectSingle, SelectDateTime
|
||||
from club.models import Club, Membership
|
||||
from sith.settings import SITH_MAXIMUM_FREE_ROLE, SITH_MAIN_BOARD_GROUP
|
||||
from counter.models import Product, Selling, Counter
|
||||
|
||||
class ClubTabsMixin(TabedViewMixin):
|
||||
def get_tabs_title(self):
|
||||
@ -46,6 +51,11 @@ class ClubTabsMixin(TabedViewMixin):
|
||||
'slug': 'edit',
|
||||
'name': _("Edit"),
|
||||
})
|
||||
tab_list.append({
|
||||
'url': reverse('club:club_sellings', kwargs={'club_id': self.object.id}),
|
||||
'slug': 'sellings',
|
||||
'name': _("Sellings"),
|
||||
})
|
||||
if self.request.user.is_owner(self.object):
|
||||
tab_list.append({
|
||||
'url': reverse('club:club_prop', kwargs={'club_id': self.object.id}),
|
||||
@ -143,6 +153,47 @@ class ClubOldMembersView(ClubTabsMixin, CanViewMixin, DetailView):
|
||||
template_name = 'club/club_old_members.jinja'
|
||||
current_tab = "elderlies"
|
||||
|
||||
class SellingsFormBase(forms.Form):
|
||||
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)
|
||||
counter = forms.ModelChoiceField(Counter.objects.order_by('name').all(), label=_("Counter"), required=False)
|
||||
|
||||
class ClubSellingView(ClubTabsMixin, CanEditMixin, DetailView):
|
||||
"""
|
||||
Sellings of a club
|
||||
"""
|
||||
model = Club
|
||||
pk_url_kwarg = "club_id"
|
||||
template_name = 'club/club_sellings.jinja'
|
||||
current_tab = "sellings"
|
||||
|
||||
def get_form_class(self):
|
||||
kwargs = {
|
||||
'product': forms.ModelChoiceField(self.object.products.order_by('name').all(), label=_("Product"), required=False)
|
||||
}
|
||||
return type('SellingsForm', (SellingsFormBase,), kwargs)
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
kwargs = super(ClubSellingView, self).get_context_data(**kwargs)
|
||||
form = self.get_form_class()(self.request.GET, initial={'begin_date': timezone.now()-timedelta(days=7)})
|
||||
# form = self.get_form_class()(initial={'begin_date': timezone.now()-timedelta(days=7)})
|
||||
qs = Selling.objects.filter(club=self.object)
|
||||
if form.is_valid():
|
||||
if form.cleaned_data['begin_date']:
|
||||
qs = qs.filter(date__gte=form.cleaned_data['begin_date'])
|
||||
if form.cleaned_data['end_date']:
|
||||
qs = qs.filter(date__lte=form.cleaned_data['end_date'])
|
||||
if form.cleaned_data['counter']:
|
||||
qs = qs.filter(counter=form.cleaned_data['counter'])
|
||||
if form.cleaned_data['product']:
|
||||
qs = qs.filter(product__id=form.cleaned_data['product'].id)
|
||||
kwargs['result'] = qs.all().order_by('-id')
|
||||
kwargs['total'] = sum([s.quantity * s.unit_price for s in qs.all()])
|
||||
else:
|
||||
kwargs['result'] = qs[:0]
|
||||
kwargs['form'] = form
|
||||
return kwargs
|
||||
|
||||
class ClubEditView(ClubTabsMixin, CanEditMixin, UpdateView):
|
||||
"""
|
||||
Edit a Club's main informations (for the club's members)
|
||||
|
Reference in New Issue
Block a user