85 lines
2.3 KiB
Python
85 lines
2.3 KiB
Python
import numpy as np
|
|
from django.urls import reverse, reverse_lazy
|
|
from django.views.generic import CreateView, DeleteView, DetailView, ListView, UpdateView
|
|
|
|
from web.forms import ActivityLogCreateForm
|
|
from web.models import ActivityLog, User, Activity
|
|
|
|
|
|
class UserListView(ListView):
|
|
model = User
|
|
|
|
|
|
class UserCreateView(CreateView):
|
|
model = User
|
|
fields = ['name', 'email']
|
|
success_url = reverse_lazy('users')
|
|
|
|
|
|
class UserDetailView(DetailView):
|
|
model = User
|
|
context_object_name = 'user'
|
|
pk_url_kwarg = 'user_id'
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super().get_context_data(**kwargs)
|
|
context['activity_logs'] = ActivityLog.objects.filter(user=self.object).order_by('start_time')
|
|
context['activities'] = set(i.activity for i in ActivityLog.objects.filter(user=self.object))
|
|
|
|
total_times = {i: 0 for i in context['activities']}
|
|
total = 0
|
|
for i in context['activity_logs']:
|
|
total_times[i.activity] += (i.end_time - i.start_time).total_seconds()
|
|
total += (i.end_time - i.start_time).total_seconds()
|
|
|
|
keys = list(total_times.keys())
|
|
context['activities_and_pcts'] = [
|
|
(keys[i], total_times[keys[i]] / total * 100)
|
|
for i in reversed(np.argsort(list(total_times.values())))
|
|
]
|
|
|
|
return context
|
|
|
|
|
|
class ActivityLogCreateView(CreateView):
|
|
model = ActivityLog
|
|
# fields = ['activity', 'user', 'start_time', 'end_time']
|
|
form_class = ActivityLogCreateForm
|
|
|
|
def get_success_url(self):
|
|
return reverse('user', kwargs={
|
|
'user_id': self.object.user.id,
|
|
})
|
|
|
|
|
|
class ActivityLogUpdateView(UpdateView):
|
|
model = ActivityLog
|
|
fields = ['activity', 'user', 'start_time', 'end_time']
|
|
pk_url_kwarg = 'activity_log_id'
|
|
|
|
def get_success_url(self):
|
|
return reverse('user', kwargs={
|
|
'user_id': self.object.user.id,
|
|
})
|
|
|
|
|
|
class ActivityLogDeleteView(DeleteView):
|
|
model = ActivityLog
|
|
pk_url_kwarg = 'activity_log_id'
|
|
|
|
def get_success_url(self):
|
|
return reverse('user', kwargs={
|
|
'user_id': self.object.user.id,
|
|
})
|
|
|
|
|
|
class UserChartsActivity(DetailView):
|
|
model = User
|
|
pk_url_kwarg = 'user_id'
|
|
template_name_suffix = '_activity_charts'
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super().get_context_data(**kwargs)
|
|
context['activity'] = Activity.objects.filter(id=self.kwargs['activity_id']).first()
|
|
return context
|