diff --git a/core/migrations/0004_preferences.py b/core/migrations/0004_preferences.py
new file mode 100644
index 00000000..14e3d2a3
--- /dev/null
+++ b/core/migrations/0004_preferences.py
@@ -0,0 +1,23 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+from django.conf import settings
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('core', '0003_auto_20160705_2304'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='Preferences',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', primary_key=True, serialize=False, auto_created=True)),
+ ('show_my_stats', models.BooleanField(verbose_name='define if we show a users stats', default=False, help_text='Show your account statistics to others')),
+ ('user', models.OneToOneField(related_name='preferences', to=settings.AUTH_USER_MODEL)),
+ ],
+ ),
+ ]
diff --git a/core/models.py b/core/models.py
index 88240a66..fba38ea1 100644
--- a/core/models.py
+++ b/core/models.py
@@ -280,6 +280,14 @@ class AnonymousUser(AuthAnonymousUser):
def get_display_name(self):
return _("Visitor")
+class Preferences(models.Model):
+ user = models.OneToOneField(User, related_name="preferences")
+ show_my_stats = models.BooleanField(
+ _('define if we show a users stats'),
+ default=False,
+ help_text=_('Show your account statistics to others'),
+ )
+
class LockError(Exception):
"""There was a lock error on the object"""
pass
diff --git a/core/templates/core/user_base.jinja b/core/templates/core/user_base.jinja
new file mode 100644
index 00000000..1c4dad76
--- /dev/null
+++ b/core/templates/core/user_base.jinja
@@ -0,0 +1,29 @@
+{% extends "core/base.jinja" %}
+
+{% block content %}
+
{{ profile.get_display_name() }}
+
+
+
+{% block infos %}
+{% endblock %}
+
+
+{% endblock %}
+
+
+
diff --git a/core/templates/core/user_detail.jinja b/core/templates/core/user_detail.jinja
index 4e5febd0..f70b995c 100644
--- a/core/templates/core/user_detail.jinja
+++ b/core/templates/core/user_detail.jinja
@@ -1,22 +1,12 @@
-{% extends "core/base.jinja" %}
+{% extends "core/user_base.jinja" %}
{% block title %}
{{ profile.get_display_name() }}'s profile
{% endblock %}
-{% block content %}
-
-{% if can_edit(profile, request.user) or user.id == profile.id %}
-
Edit
-{% endif %}
-{% if can_edit_prop(profile, request.user) %}
-
Props
-{% endif %}
-
-
+{% block infos %}
User Profile
-
{{ profile.get_full_name() }}
{{ profile.nick_name }}
@@ -24,6 +14,7 @@
{% if user.membership.filter(end_date=None).exists() %}
+{# if the user is member of a club, he can view the subscription state #}
{% if get_subscriber(profile).is_subscribed() %}
User is subscriber until {{ get_subscriber(profile).subscriptions.last().subscription_end }}
diff --git a/core/urls.py b/core/urls.py
index 5d1c8b89..647613a2 100644
--- a/core/urls.py
+++ b/core/urls.py
@@ -1,6 +1,7 @@
from django.conf.urls import url, include
from core.views import *
+from counter.views import UserAccountView
urlpatterns = [
url(r'^$', index, name='index'),
@@ -28,6 +29,7 @@ urlpatterns = [
url(r'^user/(?P[0-9]+)/edit$', UserUpdateProfileView.as_view(), name='user_edit'),
url(r'^user/(?P[0-9]+)/prop$', UserUpdatePropView.as_view(), name='user_prop'),
url(r'^user/tools/$', UserToolsView.as_view(), name='user_tools'),
+ url(r'^user/(?P[0-9]+)/account$', UserAccountView.as_view(), name='user_account'),
# Page views
url(r'^page/$', PageListView.as_view(), name='page_list'),
diff --git a/core/views/user.py b/core/views/user.py
index 5f65092b..5df7d101 100644
--- a/core/views/user.py
+++ b/core/views/user.py
@@ -2,6 +2,7 @@
from django.shortcuts import render, redirect, get_object_or_404
from django.contrib.auth import logout as auth_logout, views
from django.core.urlresolvers import reverse
+from django.core.exceptions import PermissionDenied, ObjectDoesNotExist
from django.views.generic.edit import UpdateView
from django.views.generic import ListView, DetailView, TemplateView
import logging
diff --git a/counter/migrations/0005_auto_20160717_1029.py b/counter/migrations/0005_auto_20160717_1029.py
new file mode 100644
index 00000000..346b1ea4
--- /dev/null
+++ b/counter/migrations/0005_auto_20160717_1029.py
@@ -0,0 +1,35 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+from django.conf import settings
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('counter', '0004_auto_20160717_0933'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='refilling',
+ name='customer',
+ field=models.ForeignKey(to='counter.Customer', related_name='refillings'),
+ ),
+ migrations.AlterField(
+ model_name='refilling',
+ name='operator',
+ field=models.ForeignKey(to=settings.AUTH_USER_MODEL, related_name='refillings_as_operator'),
+ ),
+ migrations.AlterField(
+ model_name='selling',
+ name='customer',
+ field=models.ForeignKey(to='counter.Customer', related_name='sellings'),
+ ),
+ migrations.AlterField(
+ model_name='selling',
+ name='seller',
+ field=models.ForeignKey(to=settings.AUTH_USER_MODEL, related_name='sellings_as_operator'),
+ ),
+ ]
diff --git a/counter/migrations/0006_auto_20160717_1033.py b/counter/migrations/0006_auto_20160717_1033.py
new file mode 100644
index 00000000..b5abf237
--- /dev/null
+++ b/counter/migrations/0006_auto_20160717_1033.py
@@ -0,0 +1,19 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('counter', '0005_auto_20160717_1029'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='selling',
+ name='customer',
+ field=models.ForeignKey(to='counter.Customer', related_name='buyings'),
+ ),
+ ]
diff --git a/counter/models.py b/counter/models.py
index 69337754..c18732d5 100644
--- a/counter/models.py
+++ b/counter/models.py
@@ -119,8 +119,8 @@ class Refilling(models.Model):
"""
counter = models.ForeignKey(Counter, related_name="refillings", blank=False)
amount = CurrencyField(_('amount'))
- operator = models.ForeignKey(User, related_name="refill_operators", blank=False)
- customer = models.ForeignKey(Customer, related_name="refill_customers", blank=False)
+ operator = models.ForeignKey(User, related_name="refillings_as_operator", blank=False)
+ customer = models.ForeignKey(Customer, related_name="refillings", blank=False)
date = models.DateTimeField(_('date'), auto_now=True)
payment_method = models.CharField(_('payment method'), max_length=255,
choices=settings.SITH_COUNTER_PAYMENT_METHOD, default='cash')
@@ -147,8 +147,8 @@ class Selling(models.Model):
counter = models.ForeignKey(Counter, related_name="sellings", blank=False)
unit_price = CurrencyField(_('unit price'))
quantity = models.IntegerField(_('quantity'))
- seller = models.ForeignKey(User, related_name="sellers", blank=False)
- customer = models.ForeignKey(Customer, related_name="customers", blank=False)
+ seller = models.ForeignKey(User, related_name="sellings_as_operator", blank=False)
+ customer = models.ForeignKey(Customer, related_name="buyings", blank=False)
date = models.DateTimeField(_('date'), auto_now=True)
def __str__(self):
diff --git a/counter/templates/counter/user_account.jinja b/counter/templates/counter/user_account.jinja
new file mode 100644
index 00000000..edfaef2e
--- /dev/null
+++ b/counter/templates/counter/user_account.jinja
@@ -0,0 +1,16 @@
+{% extends "core/user_base.jinja" %}
+
+{% block title %}
+ {{ profile.get_display_name() }}'s account
+{% endblock %}
+
+{% block infos %}
+User account
+{{ customer.refillings.all() }}
+{{ customer.buyings.all() }}
+
+
+{% endblock %}
+
+
+
diff --git a/counter/views.py b/counter/views.py
index e778cfcf..aaebffe8 100644
--- a/counter/views.py
+++ b/counter/views.py
@@ -9,6 +9,7 @@ from django.http import HttpResponseRedirect
from django.utils import timezone
from django import forms
from django.utils.translation import ugettext_lazy as _
+from django.conf import settings
import re
@@ -345,4 +346,28 @@ class CounterDeleteView(CanEditMixin, DeleteView):
template_name = 'core/delete_confirm.jinja'
success_url = reverse_lazy('counter:admin_list')
+# User accounting infos
+
+class UserAccountView(DetailView):
+ """
+ Display a user's account
+ """
+ model = Customer
+ pk_url_kwarg = "user_id"
+ template_name = "counter/user_account.jinja"
+
+ def dispatch(self, request, *arg, **kwargs):
+ res = super(UserAccountView, self).dispatch(request, *arg, **kwargs)
+ if (self.object.user == request.user
+ or request.user.is_in_group(settings.SITH_GROUPS['accounting-admin']['name'])
+ or request.user.is_in_group(settings.SITH_GROUPS['root']['name'])):
+ return res
+ raise PermissionDenied
+
+ def get_context_data(self, **kwargs):
+ kwargs = super(UserAccountView, self).get_context_data(**kwargs)
+ kwargs['profile'] = self.object.user
+ # TODO: add list of month where account has activity
+ return kwargs
+