diff --git a/Reskreen/settings.py b/Reskreen/settings.py index ce94dc6..ea2d174 100644 --- a/Reskreen/settings.py +++ b/Reskreen/settings.py @@ -40,6 +40,7 @@ INSTALLED_APPS = [ 'polls.apps.PollsConfig', 'vehicles.apps.VehiclesConfig', 'collabs.apps.CollabsConfig', + 'rangefilter', ] diff --git a/Reskreen/urls.py b/Reskreen/urls.py index ad226bf..557322a 100644 --- a/Reskreen/urls.py +++ b/Reskreen/urls.py @@ -18,5 +18,6 @@ from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), - path('polls/', include('polls.urls')), + path('collabs/', include('collabs.urls')), + #path('collabs_hour/', include('collabs.urls')), ] diff --git a/collabs/admin.py b/collabs/admin.py index 4f91d3b..cc46971 100644 --- a/collabs/admin.py +++ b/collabs/admin.py @@ -1,4 +1,5 @@ from django.contrib import admin +from rangefilter.filters import DateRangeFilter from collabs.models import Collabs_hour @@ -6,8 +7,9 @@ from collabs.models import Collabs_hour from django import forms + class Collabs_hour_Form_admin(forms.ModelForm): - class Meta: + model = Collabs_hour fields = ["user", "sRemarques", "bNoticed"] readonly_fields = ["user", "nHour", "nMinutes"] @@ -15,18 +17,23 @@ class Collabs_hour_Form_admin(forms.ModelForm): class Collabs_hour_Admin(admin.ModelAdmin): - list_display = ('user','dtCreated','bNoticed') + class Meta: + verbose_name = 'Heure suplémentaire' + verbose_name_plural = 'Heures suplémentaires' + list_display = ('dtDate','nHour', 'nMinutes', 'user', 'sBases', 'get_total_hour_by_user', 'bNoticed') list_editable = ['bNoticed'] - list_filter = ['dtCreated'] - search_fields = ['userName'] - readonly_fields = ['userName'] + list_filter = [('dtDate', DateRangeFilter), ('user', admin.RelatedOnlyFieldListFilter),'sBases'] - fields = ["user","nHour", "nMinutes", "sRemarques"] + + search_fields = ['userName'] + + readonly_fields = ["userName"] + fields = ["sBases", "dtDate", "user","nHour", "nMinutes", "sRemarques"] def get_form(self, request, obj=None, **kwargs): #if request.user.has_perm("collabs.can_notice"): if request.user.is_superuser: - kwargs['form'] = Collabs_hour_Form_admin # ModelForm + #kwargs['form'] = Collabs_hour_Form_admin # ModelForm print("PASS SUPERUSER") return super().get_form(request, obj, **kwargs) @@ -34,8 +41,7 @@ class Collabs_hour_Admin(admin.ModelAdmin): def save_model(self, request, obj, form, change): - - + obj.userName = obj.user.username super().save_model(request, obj, form, change) diff --git a/collabs/models.py b/collabs/models.py index ce79abd..92ba18d 100644 --- a/collabs/models.py +++ b/collabs/models.py @@ -1,4 +1,5 @@ import datetime +import math from django.core.validators import MinValueValidator, MaxValueValidator from django.db import models @@ -7,18 +8,47 @@ from django.utils import timezone from django.contrib import admin class Collabs_hour(models.Model): + + BASES_CHOICES = [ + ('1', 'Monthey'), + ('2', 'Uvrier'), + ] + userName = models.CharField("Auteur", max_length=100) user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name="Collaborateur", on_delete=models.DO_NOTHING, default=0) nHour = models.PositiveIntegerField("Heures", default=0, validators=[MinValueValidator(0), MaxValueValidator(23)]) nMinutes = models.PositiveIntegerField("Minutes", default=0, validators=[MinValueValidator(0), MaxValueValidator(60)]) - sRemarques = models.TextField("Remarques") - bNoticed = models.BooleanField("Pris en compte", blank=True) + sRemarques = models.TextField("Remarques", blank=True) + bNoticed = models.BooleanField("Vérifiée", blank=True, default=False) + dtDate = models.DateField('Date', blank=False) + sBases = models.CharField('Employé de la base de', max_length=1, choices=BASES_CHOICES,default=1) dtUpdate = models.DateTimeField('Date de modification', auto_now=True) dtCreated = models.DateTimeField('Date de création', auto_now_add=True) + + + @admin.display( description='Total du mois') + def get_total_hour_by_user(self): + objs = Collabs_hour.objects.filter(user=self.user,dtCreated__year=self.dtCreated.year, dtCreated__month=self.dtCreated.month) + + total = 0.0 + + for object in objs: + total += object.nHour + object.nMinutes/60 + print(f"hour = {object.nHour} minutes = {object.nMinutes} = {object.nMinutes/60}") + + + print(total) + + return str(int(math.floor(total))) + ':' + str(int((total%(math.floor(total)))*60)) + f" ({total})" + class Meta: + verbose_name = "heure suplémentaire" + verbose_name_plural = "heures suplémentaires" permissions = ( ("can_notice", "Peut noter comme traitée"), ) + + diff --git a/collabs/views.py b/collabs/views.py index 91ea44a..fa7dbfe 100644 --- a/collabs/views.py +++ b/collabs/views.py @@ -1,3 +1,34 @@ +from django.db.models import Sum from django.shortcuts import render +from django.shortcuts import get_object_or_404, render +from django.http import Http404 +from django.http import HttpResponse, HttpResponseRedirect +from django.urls import reverse +from django.views import generic + +from collabs.models import * # Create your views here. + + +class ExportView(generic.ListView): + model = Collabs_hour + template_name = 'collabs_hour/detail.html' + context_object_name = 'latest_hour_list' + + + + def get_queryset(self): + collabs = Collabs_hour.objects.filter(dtCreated__year=self.kwargs.get("year"), dtCreated__month= self.kwargs.get("month")) + ret = [] + last_user = 0 + for collab in collabs: + print(f"last_id = {last_user} id={collab.user}") + if last_user != collab.user: + last_user = collab.user + + #collab.total = collab.get_total_hour_by_user(self.kwargs.get("year"), self.kwargs.get("month")) + ret.append(collab) + + + return ret diff --git a/db.sqlite3 b/db.sqlite3 index abb3f4d..cee4180 100644 Binary files a/db.sqlite3 and b/db.sqlite3 differ diff --git a/polls/migrations/0001_initial.py b/polls/migrations/0001_initial.py deleted file mode 100644 index 1607676..0000000 --- a/polls/migrations/0001_initial.py +++ /dev/null @@ -1,40 +0,0 @@ -# Generated by Django 4.0 on 2021-12-18 16:39 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='Question', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('question_txt', models.CharField(max_length=250)), - ('pub_date', models.DateTimeField(verbose_name='date published')), - ], - ), - migrations.CreateModel( - name='Vehicles', - fields=[ - ('nID', models.PositiveIntegerField(primary_key=True, serialize=False)), - ('sName', models.CharField(max_length=250)), - ('bReady', models.BooleanField(default=0)), - ], - ), - migrations.CreateModel( - name='Choice', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('choice_txt', models.CharField(max_length=200)), - ('votes', models.IntegerField(default=0)), - ('questionID', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='polls.question')), - ], - ), - ] diff --git a/polls/migrations/0002_rename_questionid_choice_question.py b/polls/migrations/0002_rename_questionid_choice_question.py deleted file mode 100644 index 4bb4946..0000000 --- a/polls/migrations/0002_rename_questionid_choice_question.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 4.0 on 2021-12-18 17:00 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('polls', '0001_initial'), - ] - - operations = [ - migrations.RenameField( - model_name='choice', - old_name='questionID', - new_name='question', - ), - ] diff --git a/polls/migrations/0003_delete_vehicles.py b/polls/migrations/0003_delete_vehicles.py deleted file mode 100644 index 4d26d05..0000000 --- a/polls/migrations/0003_delete_vehicles.py +++ /dev/null @@ -1,16 +0,0 @@ -# Generated by Django 4.0 on 2021-12-18 17:54 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('polls', '0002_rename_questionid_choice_question'), - ] - - operations = [ - migrations.DeleteModel( - name='Vehicles', - ), - ] diff --git a/polls/migrations/0004_alter_choice_choice_txt_alter_question_pub_date_and_more.py b/polls/migrations/0004_alter_choice_choice_txt_alter_question_pub_date_and_more.py deleted file mode 100644 index 8438d11..0000000 --- a/polls/migrations/0004_alter_choice_choice_txt_alter_question_pub_date_and_more.py +++ /dev/null @@ -1,28 +0,0 @@ -# Generated by Django 4.0 on 2022-01-31 14:55 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('polls', '0003_delete_vehicles'), - ] - - operations = [ - migrations.AlterField( - model_name='choice', - name='choice_txt', - field=models.CharField(max_length=200, verbose_name='Nom'), - ), - migrations.AlterField( - model_name='question', - name='pub_date', - field=models.DateTimeField(verbose_name='Date de publication'), - ), - migrations.AlterField( - model_name='question', - name='question_txt', - field=models.CharField(max_length=250, verbose_name='Description'), - ), - ] diff --git a/polls/urls.py b/polls/urls.py index 56ddf84..72629ba 100644 --- a/polls/urls.py +++ b/polls/urls.py @@ -3,7 +3,7 @@ from django.urls import path from . import views -app_name = "polls" +app_name = "collabs" urlpatterns = [ path('', views.IndexView.as_view(), name='index'), path('/', views.DetailView.as_view(), name='detail'),