diff --git a/src/equipment/service.py b/src/equipment/service.py index 0a33702..37d9fdf 100644 --- a/src/equipment/service.py +++ b/src/equipment/service.py @@ -116,12 +116,8 @@ async def get_top_10_economic_life(*, db_session: DbSession) -> list[Equipment]: .options(selectinload(Equipment.equipment_master)) ) - # Get current year current_year = datetime.datetime.now().year - # Order by difference between current year and minimum_year - # Add absolute difference between current year and minimum_eac_year as a new column - # Filter out rows where minimum_eac_year is null and limit to 10 results query = ( query.add_columns( func.abs(current_year - Equipment.minimum_eac_year).label("economic_life") @@ -133,7 +129,6 @@ async def get_top_10_economic_life(*, db_session: DbSession) -> list[Equipment]: result = await db_session.execute(query) - # Set economic_life value inside equipment objects equipment_list = [] for row in result.all(): equipment = row[0] @@ -142,6 +137,35 @@ async def get_top_10_economic_life(*, db_session: DbSession) -> list[Equipment]: return equipment_list +async def get_top_10_replacement_priorities(*, db_session: DbSession) -> list[Equipment]: + """Returns top 10 replacement priorities.""" + query = ( + Select(Equipment) + .join(EquipmentMaster, Equipment.assetnum == EquipmentMaster.assetnum) + .options(selectinload(Equipment.equipment_master)) + ) + + current_year = datetime.datetime.now().year + + query = ( + query.add_columns( + func.abs(current_year - Equipment.minimum_eac_year).label("economic_life") + ) + .filter(Equipment.minimum_eac_year != None) + .order_by(func.abs(current_year - Equipment.minimum_eac_year).asc()) + .order_by(func.abs(Equipment.minimum_eac).desc()) + .limit(10) + ) + + result = await db_session.execute(query) + + equipment_list = [] + for row in result.all(): + equipment = row[0] + equipment.economic_life = row[1] + equipment_list.append(equipment) + + return equipment_list async def generate_all_transaction(*, db_session: DbSession, token): """Generate transaction for all equipments in the database based on equipments assetnum."""