Add fixes to procurement logic and fix rel-time connections
This commit is contained in:
@@ -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"""
|
||||
|
||||
Reference in New Issue
Block a user