From efdf44864f56e712dc18ae361ae4c1d135e4211f Mon Sep 17 00:00:00 2001 From: Ambulance Clerc Date: Tue, 1 Mar 2022 07:09:12 +0100 Subject: [PATCH] =?UTF-8?q?avanc=C3=A9=20dev?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Reskreen/settings.py | 1 + Reskreen/urls.py | 3 +- collabs/admin.py | 24 +++++++---- collabs/models.py | 34 ++++++++++++++- collabs/views.py | 31 ++++++++++++++ db.sqlite3 | Bin 176128 -> 184320 bytes polls/migrations/0001_initial.py | 40 ------------------ .../0002_rename_questionid_choice_question.py | 18 -------- polls/migrations/0003_delete_vehicles.py | 16 ------- ...ce_txt_alter_question_pub_date_and_more.py | 28 ------------ polls/urls.py | 2 +- 11 files changed, 82 insertions(+), 115 deletions(-) delete mode 100644 polls/migrations/0001_initial.py delete mode 100644 polls/migrations/0002_rename_questionid_choice_question.py delete mode 100644 polls/migrations/0003_delete_vehicles.py delete mode 100644 polls/migrations/0004_alter_choice_choice_txt_alter_question_pub_date_and_more.py 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 abb3f4d57d8d1b24a6a97b9ff03759a7261e77c0..cee418031133f322311291ba633e9ced9926ceed 100644 GIT binary patch delta 5675 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 delta 1074 zcmb7CO-K|`9Di?S_G3n8{z}@a>9W{|WxCGH?yS2bA`2BBGE^)m2%FknGu>VDgXmBy z`B8XD2buDaix{2CYQnvQB@#iWz-|_Z(4{V2(o0a!-Ob8CYT&(L{{Q)X{ofl%WDTrx zxA)|ZA%qTR7AEg2;}sq}_T=0w(52QH-IjCIlw7B*=FILei;-z}EeckupqN&$ae0)= zvr^7obPyZT5nM#uU`)4GoyAT)R8?MB%xZnT7hBu9<9%K54)N*FzMioDpek5E=VQ7G zhc0Qcws>o_y{%j8ZI8!#N}r01$kBWW5^nM({AVH#yj~KGy1+`vvcmw7upF8hAn~j8Wjm#Waf6UU^L9(B&l~y+HftYl!4I!cyeNu;hYu? z!2+BSHVok<_7Rm5OH!Mprn&jIm~jafh#**lC76X_h!AWGBqQJPy)HWi>j=KVdNNnU zpWuLn#+asPnq_$sh_x;t2nud~I(v!rjJ4YX^KM*7AwIZwrinid(7D#?hZvlT14v!Z7o@pCcWFQ00J|lods!n{bM{EEr@n)R9n6ir2MCoI=)YkrF7mK8hUh z2fW)zMOBvFvMBni{bYtepMxa8SD`/', views.DetailView.as_view(), name='detail'),