bmc_hub/app/modules/invoice_error_finder/frontend/views.py

68 lines
1.7 KiB
Python
Raw Permalink Normal View History

"""
Invoice Error Finder frontend views.
"""
import logging
from typing import Any, Dict
2026-07-10 16:22:57 +02:00
from fastapi import APIRouter, Depends, Request
from fastapi.responses import HTMLResponse
from fastapi.templating import Jinja2Templates
2026-07-10 16:22:57 +02:00
from app.core.auth_dependencies import require_permission
from app.core.database import execute_query
logger = logging.getLogger(__name__)
router = APIRouter()
templates = Jinja2Templates(directory="app")
def _fetch_assignment_users() -> list:
return execute_query(
"""
SELECT user_id, COALESCE(full_name, username) AS display_name
FROM users
ORDER BY display_name
""",
(),
) or []
def _fetch_customers() -> list:
return execute_query(
"""
SELECT id, name
FROM customers
WHERE deleted_at IS NULL
ORDER BY name
""",
(),
) or []
@router.get("/invoice-error-finder", response_class=HTMLResponse)
2026-07-10 16:22:57 +02:00
async def dashboard(
request: Request,
current_user: dict = Depends(require_permission("invoice_error_finder.view")),
):
return templates.TemplateResponse(
"modules/invoice_error_finder/templates/dashboard.html",
{
"request": request,
},
)
@router.get("/invoice-error-finder/issues", response_class=HTMLResponse)
2026-07-10 16:22:57 +02:00
async def issues_list(
request: Request,
current_user: dict = Depends(require_permission("invoice_error_finder.view")),
):
return templates.TemplateResponse(
"modules/invoice_error_finder/templates/issues.html",
{
"request": request,
"users": _fetch_assignment_users(),
"customers": _fetch_customers(),
},
)