import uuid from fastapi import APIRouter, Depends, File, UploadFile, HTTPException from sqlalchemy.ext.asyncio import AsyncSession from app.database import get_db from app.middleware.auth import get_current_user, require_director from app.services.excel_import import import_from_excel router = APIRouter(prefix="/import", tags=["Import"]) @router.post("/weekly-report") async def import_weekly_report( file: UploadFile = File(...), current_user: dict = Depends(require_director), db: AsyncSession = Depends(get_db), ): """Upload old weekly report Excel and import data. Only director can do this.""" if not file.filename or not file.filename.endswith(('.xlsx', '.xls')): raise HTTPException(status_code=400, detail="Only .xlsx and .xls files are supported") content = await file.read() # Preview first: parse headers try: import openpyxl wb = openpyxl.load_workbook(io.BytesIO(content), data_only=True) preview = {} for sheet_name in wb.sheetnames: ws = wb[sheet_name] headers = [str(cell.value) for cell in ws[1]] row_count = ws.max_row - 1 # minus header preview[sheet_name] = {"headers": headers, "row_count": row_count} except Exception as e: raise HTTPException(status_code=400, detail=f"Failed to parse Excel: {str(e)}") # Import data stats = await import_from_excel(db, content, uuid.UUID(current_user["user_id"])) stats["preview"] = preview return stats import io