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 contains(self, d: date) -> bool: return self.start_date <= d <= self.end_date
[docs] def overlaps(self, other: "Period") -> bool: return self.start_date <= other.end_date and other.start_date <= self.end_date
[docs] def duration_days(self) -> int: return (self.end_date - self.start_date).days
def __str__(self) -> str: return f"{self.start_date}{self.end_date}"