Les heures supple sont maintenant supprimable en cascade avec user, utilisation d'un string mémoire
116 lines
4.2 KiB
Python
116 lines
4.2 KiB
Python
import datetime
|
|
import math
|
|
import time
|
|
from django.core.validators import MinValueValidator, MaxValueValidator
|
|
from django.db import models
|
|
from django.conf import settings
|
|
from django.utils import timezone
|
|
from django.contrib import admin
|
|
|
|
from django.dispatch import receiver
|
|
from django.db.models.signals import pre_save
|
|
|
|
#test
|
|
|
|
BASES_CHOICES = [
|
|
('1', 'Monthey'),
|
|
('2', 'Uvrier'),
|
|
]
|
|
|
|
class Collabs_hour_types(models.Model):
|
|
|
|
name = models.CharField("Dénomination", max_length=100)
|
|
dtUpdate = models.DateTimeField('Date de modification', auto_now=True)
|
|
dtCreated = models.DateTimeField('Date de création', auto_now_add=True)
|
|
|
|
|
|
def __str__(self):
|
|
return self.name
|
|
|
|
class Meta:
|
|
verbose_name = "type"
|
|
verbose_name_plural = "types"
|
|
|
|
|
|
class Collabs_hour(models.Model):
|
|
|
|
|
|
userName = models.CharField("Auteur", max_length=100)
|
|
user = models.ForeignKey(settings.AUTH_USER_MODEL, limit_choices_to={'groups__name': "Intervenants"}, verbose_name="Collaborateur", on_delete=models.SET_NULL, null=True)
|
|
sTargetUser = models.CharField("Collaborateur", blank=True, max_length=150, null=True, default="")
|
|
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", 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)
|
|
type = models.ForeignKey(Collabs_hour_types, verbose_name="Types", on_delete=models.DO_NOTHING)
|
|
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_id=self.user_id,dtCreated__year=self.dtCreated.year, dtCreated__month=self.dtCreated.month)
|
|
objs = Collabs_hour.objects.filter(user_id=self.user_id, dtDate__year=self.dtDate.year , dtDate__month=self.dtDate.month)
|
|
# print(f"user {self.user} dtCreated__year {self.dtDate.year} dtCreated__month {self.dtDate.month}")
|
|
#print( Collabs_hour.objects.all())
|
|
|
|
total = 0.0
|
|
|
|
for object in objs:
|
|
total += object.nHour + object.nMinutes/60
|
|
# print(f"hour = {object.nHour} minutes = {object.nMinutes} = {object.nMinutes/60}")
|
|
|
|
|
|
|
|
if total > 0.0:
|
|
hours = int(total)
|
|
minutes = (total*60) % 60
|
|
cent_min = float(minutes/60) + hours
|
|
print(f"{minutes}/60= {float(minutes/60)} {hours}+{float(minutes/60)}={cent_min}")
|
|
|
|
ret_string = ("%d:%02d (%.2f)" % (hours, minutes, cent_min))
|
|
#ret_string = str(int(math.floor(total))) + ':' + str(int((total%(math.floor(total)))*60)) + f" ({total})"
|
|
#ret_string = time.strftime("%H:%M", time.gmtime(total))
|
|
else:
|
|
ret_string = "0"
|
|
|
|
return ret_string
|
|
|
|
def get_bases_name(self):
|
|
return BASES_CHOICES[int(self.sBases)-1][1]
|
|
|
|
@admin.display(description='Présence de remarques', boolean=True)
|
|
def has_remarques(self):
|
|
ret = False
|
|
if self.sRemarques != None and self.sRemarques != '':
|
|
ret = True
|
|
return ret
|
|
def __str__(self):
|
|
return f"Heure supplémentaire: {self.sTargetUser} : {self.dtCreated.strftime('%d.%m.%Y')} "
|
|
|
|
class Meta:
|
|
verbose_name = "heure supplémentaire"
|
|
verbose_name_plural = "heures supplémentaires"
|
|
permissions = (
|
|
("can_notice", "Peut noter comme traitée"),
|
|
|
|
)
|
|
|
|
'''
|
|
all = Collabs_hour.objects.all()
|
|
for item in all:
|
|
print(item)
|
|
item.sTargetUser = "testDEV"
|
|
if item.user is not None:
|
|
item.sTargetUser = f"{item.user.first_name} {item.user.last_name}"
|
|
item.save()
|
|
'''
|
|
|
|
@receiver(pre_save, sender=Collabs_hour)
|
|
def on_update(instance,**kwargs):
|
|
if instance.user is not None:
|
|
instance.sTargetUser = f"{instance.user.first_name} {instance.user.last_name}" |