Source code for src.share_kernel.domain.value_objects.period
from dataclasses import dataclass
from datetime import date
from src.share_kernel.domain.base_value_object import ValueObject
from src.share_kernel.domain.exceptions import InvalidValueObjectException
[docs]
@dataclass(frozen=True)
class Period(ValueObject):
"""
Plage de dates utilisée dans tous les contextes ERP :
exercices comptables, contrats, congés, campagnes, etc.
"""
start_date: date
end_date: date
def _validate(self):
if self.end_date < self.start_date:
raise InvalidValueObjectException(
f"end_date ({self.end_date}) ne peut pas être antérieure à "
f"start_date ({self.start_date})."
)
[docs]
def overlaps(self, other: "Period") -> bool:
return self.start_date <= other.end_date and other.start_date <= self.end_date
def __str__(self) -> str:
return f"{self.start_date} → {self.end_date}"