fix endpoint for overhaul overviwe

feature/reliability_stat
Cizz22 1 year ago
parent 93158c0055
commit d8350530f9

@ -5,7 +5,7 @@ from fastapi import APIRouter, HTTPException, status
from src.overhaul.service import get_overhaul_critical_parts, get_overhaul_overview, get_overhaul_schedules, get_overhaul_system_components
from src.overhaul_scope.schema import ScopeRead
from .schema import OverhaulRead, OverhaulSchedules, OverhaulCriticalParts, OverhaulSystemComponents
from .schema import OverhaulRead, OverhaulCriticalParts, OverhaulSystemComponents
from src.models import StandardResponse
from src.database.core import DbSession
@ -15,7 +15,7 @@ router = APIRouter()
@router.get("", response_model=StandardResponse[OverhaulRead])
async def get_overhaul(db_session: DbSession):
"""Get all scope pagination."""
overview = get_overhaul_overview()
overview = await get_overhaul_overview(db_session=db_session)
schedules = await get_overhaul_schedules(db_session=db_session)
criticalParts = get_overhaul_critical_parts()
systemComponents = get_overhaul_system_components()

@ -5,7 +5,7 @@ from uuid import UUID
from pydantic import Field, BaseModel
from src.models import DefultBase, Pagination
from src.overhaul_schedule.schema import OverhaulScheduleRead
from src.overhaul_scope.schema import ScopeRead
class OverhaulBase(BaseModel):
@ -29,7 +29,7 @@ class OverhaulSystemComponents(OverhaulBase):
class OverhaulRead(OverhaulBase):
overview: Dict[str, Any]
criticalParts: List[str]
schedules: List[OverhaulScheduleRead]
schedules: List[ScopeRead]
systemComponents: Dict[str, Any]

@ -5,21 +5,15 @@ from typing import Optional
from src.database.core import DbSession
from src.auth.service import CurrentUser
from src.overhaul_scope.service import get_all as get_all_session
from src.overhaul_scope.model import OverhaulScope
from src.overhaul_scope.service import get_all as get_all_session, get_overview_overhaul
def get_overhaul_overview():
async def get_overhaul_overview(db_session: DbSession):
"""Get all overhaul overview."""
return {
"totalEquipment": 30,
"nextSchedule": {
"start_date": "2025-01-12",
"end_date": "2025-01-15",
"duration": 3,
"Overhaul": "B",
"equipmentCount": 30
}
}
results = await get_overview_overhaul(db_session=db_session)
return results
def get_overhaul_critical_parts():
@ -35,8 +29,11 @@ def get_overhaul_critical_parts():
async def get_overhaul_schedules(*, db_session: DbSession):
"""Get all overhaul schedules."""
schedules = await get_all_session(db_session=db_session)
return schedules
query = Select(OverhaulScope)
results = await db_session.execute(query)
return results.scalars().all()
def get_overhaul_system_components():

@ -3,8 +3,7 @@ from datetime import datetime
from typing import Any, Dict, List, Optional
from uuid import UUID
from pydantic import Field, BaseModel
from src.master_activity.schema import ActivityMaster
from pydantic import Field
from src.models import DefultBase, Pagination
from src.scope_equipment.schema import MasterEquipmentRead

@ -2,6 +2,7 @@
from sqlalchemy import Column, DateTime, Float, Integer, String
from src.database.core import Base
from src.models import DefaultMixin, IdentityMixin, TimeStampMixin
from sqlalchemy.orm import relationship
class OverhaulScope(Base, DefaultMixin):
@ -14,4 +15,7 @@ class OverhaulScope(Base, DefaultMixin):
crew_number = Column(Integer, nullable=True, default=1)
status = Column(String, nullable=False, default="upcoming")
activity_equipments = relationship(
"OverhaulActivity",
lazy="selectin"
)

@ -1,10 +1,11 @@
from sqlalchemy import Select, Delete
from sqlalchemy import Select, Delete, func
from src.database.service import search_filter_sort_paginate
from src.overhaul_activity.model import OverhaulActivity
from src.scope_equipment.service import get_by_scope_name
from src.utils import time_now
from .model import OverhaulScope
from .schema import ScopeCreate, ScopeUpdate
from typing import Optional
@ -86,8 +87,84 @@ async def delete(*, db_session: DbSession, scope_id: str):
await db_session.commit()
# async def get_by_scope_name(*, db_session: DbSession, scope_name: str) -> Optional[OverhaulScope]:
# """Returns a document based on the given document id."""
# query = Select(OverhaulScope).filter(OverhaulScope.tyoe == scope_name)
# result = await db_session.execute(query)
# return result.scalars().one_or_none()
async def get_overview_overhaul(*, db_session: DbSession):
current_date = time_now().date()
# For ongoing overhaul with count
ongoing_query = Select(
OverhaulScope,
func.count(OverhaulActivity.id).label('equipment_count')
).outerjoin(
OverhaulScope.activity_equipments
).where(
OverhaulScope.start_date <= current_date,
OverhaulScope.end_date >= current_date,
OverhaulScope.status != 'Completed'
).group_by(
OverhaulScope.id
)
ongoing_result = await db_session.execute(ongoing_query)
# Use first() instead of scalar_one_or_none()
ongoing_result = ongoing_result.first()
if ongoing_result:
ongoing_overhaul, equipment_count = ongoing_result # Unpack the result tuple
return {
"status": "Ongoing",
"overhaul": {
"type": ongoing_overhaul.type,
"start_date": ongoing_overhaul.start_date,
"end_date": ongoing_overhaul.end_date,
"duration_oh": ongoing_overhaul.duration_oh,
"crew_number": ongoing_overhaul.crew_number,
"remaining_days": (ongoing_overhaul.end_date - current_date).days,
"equipment_count": equipment_count
}
}
# For upcoming overhaul with count
upcoming_query = Select(
OverhaulScope,
func.count(OverhaulActivity.id).label('equipment_count')
).outerjoin(
OverhaulScope.activity_equipments
).where(
OverhaulScope.start_date > current_date,
OverhaulScope.status == 'Upcoming'
).group_by(
OverhaulScope.id
).order_by(
OverhaulScope.start_date
)
upcoming_result = await db_session.execute(upcoming_query)
upcoming_result = upcoming_result.first()
if upcoming_result:
upcoming_overhaul, equipment_count = upcoming_result # Unpack the result tuple
days_until = (upcoming_overhaul.start_date - current_date).days
return {
"status": "Upcoming",
"overhaul": {
"type": upcoming_overhaul.type,
"start_date": upcoming_overhaul.start_date,
"end_date": upcoming_overhaul.end_date,
"duration_oh": upcoming_overhaul.duration_oh,
"crew_number": upcoming_overhaul.crew_number,
"remaining_days": days_until,
"equipment_count": equipment_count
}
}
return {
"status": "no_overhaul",
"overhaul": None
}

@ -4,6 +4,9 @@ from datetime import datetime, timedelta, timezone
import re
from typing import Optional
from dateutil.relativedelta import relativedelta
import pytz
from src.config import TIMEZONE
def parse_relative_expression(date_str: str) -> Optional[datetime]:
@ -78,3 +81,7 @@ def parse_date_string(date_str: str) -> Optional[datetime]:
"- YYYY.MM.DD\n"
"- DD.MM.YYYY"
)
def time_now():
return datetime.now(pytz.timezone(TIMEZONE))

Loading…
Cancel
Save