SuiteConsultance/modules/projects/project.py
2025-09-20 13:18:04 +02:00

67 lines
2.1 KiB
Python

import re
import uuid
from datetime import datetime
from typing import Optional, Dict, Any
def _slugify(value: str) -> str:
value = value.strip().lower()
value = re.sub(r'[^a-z0-9\-_\s]+', '', value)
value = re.sub(r'[\s]+', '-', value)
return value
class Project:
def __init__(
self,
client_id: str,
name: str,
status: str = 'Nouveau',
start_date: Optional[str] = None,
end_date: Optional[str] = None,
description: str = '',
budget: Optional[float] = None,
id: Optional[str] = None,
created_at: Optional[str] = None,
updated_at: Optional[str] = None
):
self.client_id = client_id
self.name = name
self.status = status
self.start_date = start_date
self.end_date = end_date
self.description = description
self.budget = budget
self.id = id or f"{_slugify(name)}-{uuid.uuid4().hex[:8]}"
now_iso = datetime.utcnow().isoformat()
self.created_at = created_at or now_iso
self.updated_at = updated_at or now_iso
def to_dict(self) -> Dict[str, Any]:
return {
"id": self.id,
"client_id": self.client_id,
"name": self.name,
"status": self.status,
"start_date": self.start_date,
"end_date": self.end_date,
"description": self.description,
"budget": self.budget,
"created_at": self.created_at,
"updated_at": self.updated_at,
}
@staticmethod
def from_dict(data: Dict[str, Any]) -> 'Project':
return Project(
client_id=data.get("client_id"),
name=data.get("name", ""),
status=data.get("status", "Nouveau"),
start_date=data.get("start_date"),
end_date=data.get("end_date"),
description=data.get("description", ""),
budget=data.get("budget"),
id=data.get("id"),
created_at=data.get("created_at"),
updated_at=data.get("updated_at"),
)