mirror of
https://github.com/ae-utbm/sith.git
synced 2024-11-22 06:03:20 +00:00
Migrate permanencies and add user stats view
This commit is contained in:
parent
b69c3a6792
commit
0689f864d2
@ -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 %}
|
||||||
|
18
core/templates/core/user_stats.jinja
Normal file
18
core/templates/core/user_stats.jinja
Normal 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 %}
|
||||||
|
|
||||||
|
|
@ -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'),
|
||||||
|
@ -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
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
33
migrate.py
33
migrate.py
@ -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__":
|
||||||
|
Loading…
Reference in New Issue
Block a user