Add Phase 11B client aware multi bank ownership and engagement archive
This commit is contained in:
@@ -16,6 +16,7 @@ from app.core.templating import templates
|
||||
from app.modules.core.rbac.deps import get_user_permissions, get_user_roles
|
||||
|
||||
from .parsers.registry import BANK_OPTIONS
|
||||
from .client_context import analyzer_client_context, validate_selected_client_and_engagement
|
||||
from .service import (
|
||||
can_use,
|
||||
create_job_folder,
|
||||
@@ -85,6 +86,10 @@ def _ctx(request, db, user, **extra):
|
||||
"selected_bank": "auto",
|
||||
"financial_year": "",
|
||||
"classification_enabled": True,
|
||||
"analyzer_clients": [],
|
||||
"analyzer_engagements": [],
|
||||
"selected_client_id": None,
|
||||
"selected_engagement_id": None,
|
||||
}
|
||||
data.update(extra)
|
||||
return data
|
||||
@@ -112,13 +117,27 @@ def index(request: Request, job: str | None = None):
|
||||
selected_job = get_owned_job(user.id, job) if job else None
|
||||
recent = [_localised_job_view(item, timezone_name) for item in list_user_jobs(user.id, limit=8)]
|
||||
active_job = _localised_job_view(selected_job, timezone_name) if selected_job else None
|
||||
return templates.TemplateResponse("modules/bank_statement_analyzer/templates/bank_statement_analyzer/index.html", _ctx(request, db, user, error="", active_job=active_job, recent_jobs=recent, display_timezone=timezone_name))
|
||||
client_context = analyzer_client_context(db, request=request, user=user, roles=roles)
|
||||
return templates.TemplateResponse(
|
||||
"modules/bank_statement_analyzer/templates/bank_statement_analyzer/index.html",
|
||||
_ctx(
|
||||
request,
|
||||
db,
|
||||
user,
|
||||
error="",
|
||||
active_job=active_job,
|
||||
recent_jobs=recent,
|
||||
display_timezone=timezone_name,
|
||||
analyzer_clients=client_context["clients"],
|
||||
analyzer_engagements=client_context["engagements"],
|
||||
),
|
||||
)
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
|
||||
@router.post("/analyze")
|
||||
async def analyze(request: Request, csrf_token: str = Form(...), bank_selection: str = Form("auto"), financial_year: str = Form(""), customer_name: str = Form(""), account_number: str = Form(""), enable_classification: str | None = Form(None), statements: list[UploadFile] = File(...)):
|
||||
async def analyze(request: Request, csrf_token: str = Form(...), bank_selection: str = Form("auto"), financial_year: str = Form(""), customer_name: str = Form(""), account_number: str = Form(""), client_id: str = Form(""), engagement_id: str = Form(""), confirm_same_client: str | None = Form(None), enable_classification: str | None = Form(None), statements: list[UploadFile] = File(...)):
|
||||
db = CommonSessionLocal()
|
||||
selected_bank = bank_selection if bank_selection in dict(BANK_OPTIONS) else "auto"
|
||||
classification_enabled = enable_classification == "1"
|
||||
@@ -128,10 +147,35 @@ async def analyze(request: Request, csrf_token: str = Form(...), bank_selection:
|
||||
if denied:
|
||||
return denied
|
||||
validate_csrf(request, csrf_token)
|
||||
resolved_client_id = int(client_id) if client_id.strip() else None
|
||||
resolved_engagement_id = int(engagement_id) if engagement_id.strip() else None
|
||||
validate_selected_client_and_engagement(
|
||||
db,
|
||||
request=request,
|
||||
user=user,
|
||||
roles=roles,
|
||||
client_id=resolved_client_id,
|
||||
engagement_id=resolved_engagement_id,
|
||||
)
|
||||
|
||||
job_id, input_dir, _output_dir = create_job_folder(user, roles)
|
||||
job_dir = input_dir.parent
|
||||
paths = await save_uploads(statements, input_dir)
|
||||
enqueue_job(user=user, roles=roles, job_id=job_id, paths=paths, job_dir=job_dir, bank_selection=selected_bank, financial_year=financial_year, customer_override=customer_name, account_override=account_number, classification_enabled=classification_enabled)
|
||||
enqueue_job(
|
||||
user=user,
|
||||
roles=roles,
|
||||
job_id=job_id,
|
||||
paths=paths,
|
||||
job_dir=job_dir,
|
||||
bank_selection=selected_bank,
|
||||
financial_year=financial_year,
|
||||
customer_override=customer_name,
|
||||
account_override=account_number,
|
||||
classification_enabled=classification_enabled,
|
||||
client_id=resolved_client_id,
|
||||
engagement_id=resolved_engagement_id,
|
||||
ownership_confirmation=(confirm_same_client == "1"),
|
||||
)
|
||||
return RedirectResponse(f"/tools/bank-statement-analyzer?job={job_id}#analysis-status", status_code=303)
|
||||
except Exception as exc:
|
||||
if job_dir:
|
||||
@@ -142,6 +186,7 @@ async def analyze(request: Request, csrf_token: str = Form(...), bank_selection:
|
||||
return RedirectResponse("/login", status_code=303)
|
||||
timezone_name = _display_timezone_name(request, db, user)
|
||||
recent = [_localised_job_view(item, timezone_name) for item in list_user_jobs(user.id, limit=8)]
|
||||
client_context = analyzer_client_context(db, request=request, user=user, roles=get_user_roles(db, user.id))
|
||||
return templates.TemplateResponse("modules/bank_statement_analyzer/templates/bank_statement_analyzer/index.html", _ctx(request, db, user, error=str(exc), active_job=None, recent_jobs=recent, selected_bank=selected_bank, financial_year=financial_year, classification_enabled=classification_enabled, display_timezone=timezone_name), status_code=400)
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
Reference in New Issue
Block a user