from typing import Optional from fastapi import HTTPException, status from sqlalchemy import Delete, Select, func from sqlalchemy.orm import selectinload # from .model import OverhaulSchedule # from .schema import OverhaulScheduleCreate, OverhaulScheduleUpdate from .utils import fetch_all_sections, get_google_creds, get_spreatsheed_service, process_spreadsheet_data # async def get_all(*, common): # """Returns all documents.""" # query = Select(OverhaulSchedule).order_by(OverhaulSchedule.start.desc()) # results = await search_filter_sort_paginate(model=query, **common) # return results # async def create( # *, db_session: DbSession, overhaul_job_in: OverhaulScheduleCreate # ): # schedule = OverhaulSchedule(**overhaul_job_in.model_dump()) # db_session.add(schedule) # await db_session.commit() # return schedule # async def update(*, db_session: DbSession, overhaul_schedule_id: str, overhaul_job_in: OverhaulScheduleUpdate): # """Updates a document.""" # data = overhaul_job_in.model_dump() # overhaul_schedule = await db_session.get(OverhaulSchedule, overhaul_schedule_id) # update_data = overhaul_job_in.model_dump(exclude_defaults=True) # for field in data: # if field in update_data: # setattr(overhaul_schedule, field, update_data[field]) # await db_session.commit() # return overhaul_schedule # async def delete(*, db_session: DbSession, overhaul_schedule_id: str): # """Deletes a document.""" # query = Delete(OverhaulSchedule).where(OverhaulSchedule.id == overhaul_schedule_id) # await db_session.execute(query) # await db_session.commit() async def get_gantt_performance_chart(*, spreadsheet_id = "1gZXuwA97zU1v4QBv56wKeiqadc6skHUucGKYG8qVFRk"): creds = get_google_creds() RANGE_NAME = "'2024 kurva s'!N79:BJ83" # Or just "2024 schedule" GANTT_DATA_NAME = "2024 schedule" try: service = get_spreatsheed_service(creds) sheet = service.spreadsheets() response = sheet.values().get(spreadsheetId=spreadsheet_id, range=RANGE_NAME).execute() values = response.get("values", []) keys = ['day', 'time', 'plan', 'actual', 'gap'] transposed = list(zip(*values)) results = [dict(zip(keys, result)) for result in transposed] except Exception as e: raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail=e) processed_data = process_spreadsheet_data(results) gantt_data = fetch_all_sections(service=service, spreadsheet_id=spreadsheet_id, sheet_name=GANTT_DATA_NAME) return processed_data, gantt_data