Louis Mazin 923f371e8b temp
2026-09-20 04:02:02 +02:00

103 lines
2.0 KiB
Python

import uuid
from datetime import datetime
from django.conf import settings
from django.db import models
class TimeEntry(models.Model):
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
related_name='time_entries',
)
# Même group_id = même pointage logique réparti sur plusieurs jours.
# NULL pour les pointages classiques sur une seule journée.
group_id = models.UUIDField(
null=True,
blank=True,
db_index=True,
)
date = models.DateField()
start_time = models.TimeField(
null=True,
blank=True,
)
end_time = models.TimeField(
null=True,
blank=True,
)
end_time = models.TimeField(
null=True,
blank=True,
)
created_at = models.DateTimeField(
auto_now_add=True,
)
updated_at = models.DateTimeField(
auto_now=True,
)
class Meta:
ordering = ['-date', '-start_time']
unique_together = [
'user',
'date',
'start_time',
]
def __str__(self):
return (
f"{self.user.username} - "
f"{self.date} "
f"({self.start_time} to {self.end_time})"
)
@property
def duration(self):
if not self.start_time or not self.end_time:
return None
end_date = self.end_date or self.date
start = datetime.combine(
self.date,
self.start_time,
)
end = datetime.combine(
end_date,
self.end_time,
)
seconds = (
end - start
).total_seconds()
if seconds < 0:
return None
return seconds / 3600
@property
def day_of_week(self):
return self.date.strftime('%A')
@property
def is_complete(self):
return bool(
self.start_time
and self.end_time
)
@property
def is_incomplete(self):
return not self.is_complete