Add Phase 12 server AI semantic accounting layer
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from fastapi import APIRouter, Request
|
||||
|
||||
from app.core.db.common import CommonSessionLocal
|
||||
from app.core.security.csrf import get_or_create_csrf_token
|
||||
from app.core.templating import templates
|
||||
from app.modules.accounting.ai_service import provider_status, recent_decisions, usage_summary
|
||||
from app.modules.accounting.ui import _require_partner, _visible_clients
|
||||
from app.modules.core.rbac.deps import get_user_permissions, get_user_roles
|
||||
|
||||
router = APIRouter(prefix="/tools/accounting/ai", tags=["accounting-ai-ui"])
|
||||
|
||||
|
||||
@router.get("")
|
||||
def page(request: Request, client_id: int | None = None):
|
||||
db = CommonSessionLocal()
|
||||
try:
|
||||
user, denied = _require_partner(request, db, "accounting.learning.view")
|
||||
if denied:
|
||||
return denied
|
||||
clients, scope = _visible_clients(db, request, user)
|
||||
selected = next(
|
||||
(client for client in clients if client_id and int(client.id) == int(client_id)),
|
||||
None,
|
||||
)
|
||||
summary = usage_summary(
|
||||
db,
|
||||
tenant_id=scope.tenant_id,
|
||||
client_id=selected.id if selected else None,
|
||||
)
|
||||
rows = recent_decisions(
|
||||
db,
|
||||
tenant_id=scope.tenant_id,
|
||||
client_id=selected.id if selected else None,
|
||||
limit=100,
|
||||
)
|
||||
return templates.TemplateResponse(
|
||||
"modules/accounting/templates/accounting/ai_dashboard.html",
|
||||
{
|
||||
"request": request,
|
||||
"current_user": user,
|
||||
"current_user_roles": get_user_roles(db, user.id),
|
||||
"current_user_permissions": get_user_permissions(db, user.id),
|
||||
"csrf_token": get_or_create_csrf_token(request),
|
||||
"title": "Accounting AI",
|
||||
"clients": clients,
|
||||
"selected_client": selected,
|
||||
"provider_status": provider_status(),
|
||||
"summary": summary,
|
||||
"decisions": rows,
|
||||
},
|
||||
)
|
||||
finally:
|
||||
db.close()
|
||||
Reference in New Issue
Block a user