Add fixes to procurement logic and fix rel-time connections

This commit is contained in:
Urtzi Alfaro
2025-10-02 13:20:30 +02:00
parent c9d8d1d071
commit 1243c2ca6d
24 changed files with 4984 additions and 348 deletions

View File

@@ -117,7 +117,7 @@ class ProcurementPlanRepository(BaseRepository):
async def generate_plan_number(self, tenant_id: uuid.UUID, plan_date: date) -> str:
"""Generate unique plan number"""
date_str = plan_date.strftime("%Y%m%d")
# Count existing plans for the same date
stmt = select(func.count(ProcurementPlan.id)).where(
and_(
@@ -127,9 +127,28 @@ class ProcurementPlanRepository(BaseRepository):
)
result = await self.db.execute(stmt)
count = result.scalar() or 0
return f"PP-{date_str}-{count + 1:03d}"
async def archive_plan(self, plan_id: uuid.UUID, tenant_id: uuid.UUID) -> bool:
"""Archive a completed plan"""
plan = await self.get_plan_by_id(plan_id, tenant_id)
if not plan:
return False
# Add archived flag to metadata if you have a JSONB field
# or just mark as archived in status
if hasattr(plan, 'metadata'):
metadata = plan.metadata or {}
metadata['archived'] = True
metadata['archived_at'] = datetime.utcnow().isoformat()
plan.metadata = metadata
plan.status = 'archived'
plan.updated_at = datetime.utcnow()
await self.db.flush()
return True
class ProcurementRequirementRepository(BaseRepository):
"""Repository for procurement requirement operations"""
@@ -198,20 +217,34 @@ class ProcurementRequirementRepository(BaseRepository):
async def update_requirement(
self,
requirement_id: uuid.UUID,
tenant_id: uuid.UUID,
updates: Dict[str, Any]
) -> Optional[ProcurementRequirement]:
"""Update procurement requirement"""
requirement = await self.get_requirement_by_id(requirement_id, tenant_id)
"""Update procurement requirement (without tenant_id check for internal use)"""
stmt = select(ProcurementRequirement).where(
ProcurementRequirement.id == requirement_id
)
result = await self.db.execute(stmt)
requirement = result.scalar_one_or_none()
if not requirement:
return None
for key, value in updates.items():
if hasattr(requirement, key):
setattr(requirement, key, value)
requirement.updated_at = datetime.utcnow()
await self.db.flush()
return requirement
async def get_by_id(self, requirement_id: uuid.UUID) -> Optional[ProcurementRequirement]:
"""Get requirement by ID with plan preloaded"""
stmt = select(ProcurementRequirement).where(
ProcurementRequirement.id == requirement_id
).options(selectinload(ProcurementRequirement.plan))
result = await self.db.execute(stmt)
return result.scalar_one_or_none()
async def get_pending_requirements(self, tenant_id: uuid.UUID) -> List[ProcurementRequirement]:
"""Get all pending requirements across plans"""