Add live progress for historical Purchase and Sales sync
This commit is contained in:
@@ -4,7 +4,7 @@ import json
|
||||
from datetime import date, datetime, timezone
|
||||
|
||||
from fastapi import APIRouter, Form, Request
|
||||
from fastapi.responses import RedirectResponse
|
||||
from fastapi.responses import JSONResponse, RedirectResponse
|
||||
from sqlalchemy import select
|
||||
|
||||
from app.core.db.common import CommonSessionLocal
|
||||
@@ -14,6 +14,7 @@ from app.modules.accounting.historical_learning_models import AccountingHistoric
|
||||
from app.modules.accounting.historical_learning_service import active_natures, classifiable_ledgers, evidence_rows, ingest_completed_run, ledger_mappings, party_suggestions, remove_ledger_mapping, save_ledger_mapping
|
||||
from app.modules.accounting.ui import _accounting_storage_payload, _find_visible_client, _require_partner, _visible_clients
|
||||
from app.modules.accounting.historical_sync_support import eligible_tally_workstations, resolve_workstation_company, workstation_companies
|
||||
from app.modules.accounting.historical_progress import historical_run_status
|
||||
from app.modules.core.rbac.deps import get_user_permissions, get_user_roles
|
||||
from app.modules.core.rbac.permission_guard import require_permission
|
||||
from app.modules.documents.agent_jobs import enqueue_agent_job
|
||||
@@ -60,7 +61,7 @@ def historical_learning(request: Request, client_id: int | None=None, collected:
|
||||
return templates.TemplateResponse("modules/accounting/templates/accounting/historical_learning.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":"Historical Tally Learning","clients":clients,"selected_client":selected,"workstations":workstations,"workstation_companies":{w.id:workstation_companies(w) for w in workstations},
|
||||
"runs":runs,"evidence":evid,"classifiable_ledgers":ledgers,"suggestions":suggestions,"mappings":mappings,"natures":active_natures(db,scope.tenant_id),
|
||||
"runs":runs,"latest_run":runs[0] if runs else None,"evidence":evid,"classifiable_ledgers":ledgers,"suggestions":suggestions,"mappings":mappings,"natures":active_natures(db,scope.tenant_id),
|
||||
"date_from":df,"date_to":dt,"collected":bool(collected),"mapped":bool(mapped),"error":error,
|
||||
})
|
||||
finally: db.close()
|
||||
@@ -128,3 +129,30 @@ def unmap_ledger(request: Request, client_id: int=Form(...), mapping_id: int=For
|
||||
remove_ledger_mapping(db,tenant_id=scope.tenant_id,client_id=client.id,mapping_id=mapping_id)
|
||||
return RedirectResponse(url=f"/tools/accounting/historical-learning?client_id={client_id}",status_code=303)
|
||||
finally: db.close()
|
||||
|
||||
|
||||
@router.get("/run/{run_id}/status")
|
||||
def run_status(request: Request, run_id: int):
|
||||
db = CommonSessionLocal()
|
||||
try:
|
||||
user, response = _require_partner(request, db, "accounting.learning.view")
|
||||
if response:
|
||||
return JSONResponse({"ok": False, "error": "Access denied."}, status_code=403)
|
||||
|
||||
clients, scope = _visible_clients(db, request, user)
|
||||
visible_client_ids = {int(c.id) for c in clients}
|
||||
|
||||
run = db.get(AccountingHistoricalLearningRun, int(run_id))
|
||||
if (
|
||||
not run
|
||||
or int(run.tenant_id) != int(scope.tenant_id)
|
||||
or int(run.client_id) not in visible_client_ids
|
||||
):
|
||||
return JSONResponse({"ok": False, "error": "Historical Purchase run not found."}, status_code=404)
|
||||
|
||||
if run.status not in {"completed", "failed"}:
|
||||
ingest_completed_run(db, run)
|
||||
|
||||
return JSONResponse({"ok": True, **historical_run_status(db, run)})
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
Reference in New Issue
Block a user