import logging from fastapi import APIRouter, HTTPException, Query, Request from fastapi.responses import HTMLResponse from fastapi.templating import Jinja2Templates from pathlib import Path from app.core.database import execute_query logger = logging.getLogger(__name__) router = APIRouter() # Setup template directory - must be root "app" to allow extending shared/frontend/base.html templates = Jinja2Templates(directory="app") @router.get("/cases", response_class=HTMLResponse) async def case_list(request: Request, status: str = Query(None), tag: str = Query(None), customer_id: int = Query(None)): """Display list of all cases.""" query = "SELECT * FROM sag_sager WHERE deleted_at IS NULL" params = [] if status: query += " AND status = %s" params.append(status) if customer_id: query += " AND customer_id = %s" params.append(customer_id) query += " ORDER BY created_at DESC" cases = execute_query(query, tuple(params)) # Fetch available statuses for filter dropdown statuses_query = "SELECT DISTINCT status FROM sag_sager WHERE deleted_at IS NULL ORDER BY status" statuses_result = execute_query(statuses_query) statuses = [row["status"] for row in statuses_result] if statuses_result else [] # Fetch available tags for filter dropdown tags_query = "SELECT DISTINCT tag_navn FROM sag_tags WHERE deleted_at IS NULL ORDER BY tag_navn" tags_result = execute_query(tags_query) all_tags = [row["tag_navn"] for row in tags_result] if tags_result else [] # Filter by tag if provided if tag and cases: case_ids = [case['id'] for case in cases] tag_query = "SELECT sag_id FROM sag_tags WHERE tag_navn = %s AND deleted_at IS NULL" tagged = execute_query(tag_query, (tag,)) tagged_ids = set(t['sag_id'] for t in tagged) cases = [case for case in cases if case['id'] in tagged_ids] return templates.TemplateResponse("modules/sag/templates/index.html", { "request": request, "sager": cases, "statuses": statuses, "all_tags": all_tags, "current_status": status, "current_tag": tag }) @router.get("/cases/new", response_class=HTMLResponse) async def create_case_form_cases(request: Request): """Display create case form.""" return templates.TemplateResponse("modules/sag/templates/create.html", { "request": request }) @router.get("/cases/{case_id}", response_class=HTMLResponse) async def case_details(request: Request, case_id: int): """Display case details.""" case_query = "SELECT * FROM sag_sager WHERE id = %s AND deleted_at IS NULL" case_result = execute_query(case_query, (case_id,)) if not case_result: return HTMLResponse(content="