fix calculation

feature/reliability_stat
Cizz22 7 months ago
parent 50d8455b96
commit 91b24e553a

@ -192,6 +192,21 @@ class SparePartsService:
return projected_stock return projected_stock
async def reduce_stock(self, db_session, assetnum: str):
requirements_query = select(ScopeEquipmentPart).where(
ScopeEquipmentPart.assetnum == assetnum
)
requirements = await db_session.execute(requirements_query)
requirements = requirements.scalars().all()
for requirement in requirements:
sparepart_id = requirement.sparepart_id
quantity_needed = requirement.required_stock
if sparepart_id in self.spare_parts_db:
self.spare_parts_db[sparepart_id]["stock"] -= quantity_needed
async def check_spare_parts_availability( async def check_spare_parts_availability(
self, self,
db_session: DbSession, db_session: DbSession,
@ -221,7 +236,8 @@ class SparePartsService:
if sparepart_id not in self.spare_parts_db: if sparepart_id not in self.spare_parts_db:
raise Exception(f"Spare part {sparepart_id} not found in database") raise Exception(f"Spare part {sparepart_id} not found in database")
spare_part = self.spare_parts_db[sparepart_id]["data"] spare_part = self.spare_parts_db[sparepart_id]
spare_part_data = spare_part["data"]
available_stock = self.calculate_stock_at_date(sparepart_id, overhaul_date) available_stock = self.calculate_stock_at_date(sparepart_id, overhaul_date)
if available_stock < quantity_needed: if available_stock < quantity_needed:
@ -229,18 +245,14 @@ class SparePartsService:
shortage = quantity_needed - available_stock shortage = quantity_needed - available_stock
procurement_cost = { procurement_cost = {
"sparepart_id": str(sparepart_id), "sparepart_id": str(sparepart_id),
"sparepart_name": spare_part.name, "sparepart_name": spare_part_data.name,
"quantity": shortage, "quantity": shortage,
"cost_per_unit": spare_part.cost_per_stock, "cost_per_unit": spare_part_data.cost_per_stock,
"total_cost": shortage * spare_part.cost_per_stock, "total_cost": shortage * spare_part_data.cost_per_stock,
"description": f"Insufficient projected stock for {spare_part.name} on {overhaul_date} (need: {quantity_needed}, projected: {available_stock})" "description": f"Insufficient projected stock for {spare_part_data.name} on {overhaul_date} (need: {quantity_needed}, projected: {available_stock})"
} }
procurement_costs.append(procurement_cost) procurement_costs.append(procurement_cost)
all_available = False all_available = False
else:
spare_part.stock -= quantity_needed
return all_available, procurement_costs return all_available, procurement_costs
class OverhaulCalculator: class OverhaulCalculator:
@ -418,6 +430,8 @@ class OverhaulCalculator:
max_interval=max_interval max_interval=max_interval
) )
#reduce sparepart stock
await self.spare_parts_service.reduce_stock(db_session, equipment.assetnum)
# Aggregate costs # Aggregate costs
corrective_costs = [r["corrective_cost"] for r in all_results] corrective_costs = [r["corrective_cost"] for r in all_results]

Loading…
Cancel
Save