Migrate permanencies and add user stats view

This commit is contained in:
Skia 2016-08-18 21:32:18 +02:00
parent b69c3a6792
commit 0689f864d2
6 changed files with 65 additions and 5 deletions

View File

@ -5,6 +5,7 @@
<div>{{ profile.get_display_name() }}</div> <div>{{ profile.get_display_name() }}</div>
<div class="tools"> <div class="tools">
<a href="{{ url('core:user_profile', user_id=profile.id) }}">{% trans %}Infos{% endtrans %}</a> <a href="{{ url('core:user_profile', user_id=profile.id) }}">{% trans %}Infos{% endtrans %}</a>
<a href="{{ url('core:user_stats', user_id=profile.id) }}">{% trans %}Stats{% endtrans %}</a>
{% if can_edit(profile, request.user) or user.id == profile.id %} {% if can_edit(profile, request.user) or user.id == profile.id %}
<a href="{{ url('core:user_edit', user_id=profile.id) }}">{% trans %}Edit{% endtrans %}</a> <a href="{{ url('core:user_edit', user_id=profile.id) }}">{% trans %}Edit{% endtrans %}</a>
{% endif %} {% endif %}

View File

@ -0,0 +1,18 @@
{% extends "core/user_base.jinja" %}
{% block title %}
{% trans user_name=profile.get_display_name() %}{{ user_name }}'s stats{% endtrans %}
{% endblock %}
{% block infos %}
{% if profile.permanencies %}
<div>
<h3>Permanencies</h3>
<p>
{{ total_time }}
</p>
</div>
{% endif %}
{% endblock %}

View File

@ -31,6 +31,7 @@ urlpatterns = [
url(r'^user/(?P<user_id>[0-9]+)/groups$', UserUpdateGroupView.as_view(), name='user_groups'), url(r'^user/(?P<user_id>[0-9]+)/groups$', UserUpdateGroupView.as_view(), name='user_groups'),
url(r'^user/tools/$', UserToolsView.as_view(), name='user_tools'), url(r'^user/tools/$', UserToolsView.as_view(), name='user_tools'),
url(r'^user/(?P<user_id>[0-9]+)/account$', UserAccountView.as_view(), name='user_account'), url(r'^user/(?P<user_id>[0-9]+)/account$', UserAccountView.as_view(), name='user_account'),
url(r'^user/(?P<user_id>[0-9]+)/stats$', UserStatsView.as_view(), name='user_stats'),
# File views # File views
# url(r'^file/add/(?P<popup>popup)?$', FileCreateView.as_view(), name='file_new'), # url(r'^file/add/(?P<popup>popup)?$', FileCreateView.as_view(), name='file_new'),

View File

@ -10,6 +10,8 @@ from django.forms.models import modelform_factory
from django.forms import CheckboxSelectMultiple from django.forms import CheckboxSelectMultiple
from django.template.response import TemplateResponse from django.template.response import TemplateResponse
from django.conf import settings from django.conf import settings
from datetime import timedelta
import logging import logging
from core.views import CanViewMixin, CanEditMixin, CanEditPropMixin from core.views import CanViewMixin, CanEditMixin, CanEditPropMixin
@ -121,6 +123,20 @@ class UserView(CanViewMixin, DetailView):
context_object_name = "profile" context_object_name = "profile"
template_name = "core/user_detail.jinja" template_name = "core/user_detail.jinja"
class UserStatsView(CanViewMixin, DetailView):
"""
Display a user's stats
"""
model = User
pk_url_kwarg = "user_id"
context_object_name = "profile"
template_name = "core/user_stats.jinja"
def get_context_data(self, **kwargs):
kwargs = super(UserStatsView, self).get_context_data(**kwargs)
kwargs['total_time'] = sum([p.end-p.start for p in self.object.permanencies.all()], timedelta())
return kwargs
class UserMiniView(CanViewMixin, DetailView): class UserMiniView(CanViewMixin, DetailView):
""" """
Display a user's profile Display a user's profile

View File

@ -9,4 +9,5 @@ admin.site.register(Product)
admin.site.register(Counter) admin.site.register(Counter)
admin.site.register(Refilling) admin.site.register(Refilling)
admin.site.register(Selling) admin.site.register(Selling)
admin.site.register(Permanency)

View File

@ -18,7 +18,7 @@ from django.forms import ValidationError
from core.models import User, SithFile from core.models import User, SithFile
from club.models import Club, Membership from club.models import Club, Membership
from counter.models import Customer, Counter, Selling, Refilling, Product, ProductType from counter.models import Customer, Counter, Selling, Refilling, Product, ProductType, Permanency
from subscription.models import Subscription, Subscriber from subscription.models import Subscription, Subscriber
from eboutic.models import Invoice, InvoiceItem from eboutic.models import Invoice, InvoiceItem
@ -539,6 +539,28 @@ def migrate_sellings():
print("FAIL to migrate selling %s: %s" % (r['id_facture'], repr(e))) print("FAIL to migrate selling %s: %s" % (r['id_facture'], repr(e)))
cur.close() cur.close()
def migrate_permanencies():
cur = db.cursor(MySQLdb.cursors.SSDictCursor)
cur.execute("""
SELECT *
FROM cpt_tracking
""")
Permanency.objects.all().delete()
print("Permanencies deleted")
for r in cur:
try:
counter = Counter.objects.filter(id=r['id_comptoir']).first()
user = User.objects.filter(id=r['id_utilisateur']).first()
new = Permanency(
user=user,
counter=counter,
start=r['logged_time'].replace(tzinfo=timezone('Europe/Paris')),
end=r['closed_time'].replace(tzinfo=timezone('Europe/Paris')),
)
new.save()
except Exception as e:
print("FAIL to migrate permanency: %s" % (repr(e)))
cur.close()
def main(): def main():
# migrate_users() # migrate_users()
@ -551,10 +573,11 @@ def main():
# migrate_typeproducts() # migrate_typeproducts()
# migrate_products() # migrate_products()
# migrate_products_to_counter() # migrate_products_to_counter()
reset_customer_amount() # reset_customer_amount()
migrate_invoices() # migrate_invoices()
migrate_refillings() # migrate_refillings()
migrate_sellings() # migrate_sellings()
# migrate_permanencies()
reset_index('core', 'counter') reset_index('core', 'counter')
if __name__ == "__main__": if __name__ == "__main__":