import datetime from dataclasses import dataclass, field from typing import Optional from typing_extensions import Self from core.domain.optimization.OptimizationState import OptimizationState from core.domain.map.PostOffice import PostOffice from core.domain.optimization.OptimizationType import OptimizationType from core.types.Id import Id from core.types.IntId import IntId @dataclass class Optimization: posta: IntId[PostOffice] title: str description: str dates: list[datetime.date] weight: int optimizationTime: datetime.timedelta createdAt: datetime.datetime authorizedByUserId: str state: OptimizationState type: OptimizationType parent: Optional[Id[Self]] useFrequency: bool = False useUnvisitedCrn: bool = True useDistrictCentrality: bool = True staticServiceTimes: Optional[int] = None stateChangedAt: datetime.datetime = field(default_factory=datetime.datetime.now) id: Id[Self] = Id.field()