Fix duplicate firm task creation when syncing system defaults
This commit is contained in:
@@ -2523,3 +2523,46 @@ def upload_firm_task_templates(request: Request, file: UploadFile = File(...), u
|
||||
return _render(request, "modules/services/templates/services/bulk_imports/result.html", db, user, title="Firm Task Templates Import Result", result=result, back_url="/services/bulk-imports")
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
# BEGIN Firm Default Task Idempotent Sync Fix v1
|
||||
@router.post("/catalogue/{catalogue_id}/firm-tasks/sync-system-defaults")
|
||||
def sync_system_default_tasks_for_firm(request: Request, catalogue_id: int):
|
||||
"""Idempotent replacement for the old insert-only 'Copy System Default Tasks' action."""
|
||||
from app.modules.services.default_task_sync import sync_firm_tasks_from_system_defaults
|
||||
|
||||
db = CommonSessionLocal()
|
||||
try:
|
||||
current_user = get_current_user(request, db=db)
|
||||
if not current_user:
|
||||
return RedirectResponse(url="/login", status_code=303)
|
||||
|
||||
roles = set(get_user_roles(db, current_user.id))
|
||||
if not roles.intersection({"System Admin", "Firm Admin"}):
|
||||
return RedirectResponse(url="/services", status_code=303)
|
||||
|
||||
tenant_id = _tenant_id(request, current_user)
|
||||
result = sync_firm_tasks_from_system_defaults(
|
||||
db,
|
||||
tenant_id=tenant_id,
|
||||
service_catalogue_id=catalogue_id,
|
||||
updated_by_user_id=current_user.id,
|
||||
)
|
||||
db.commit()
|
||||
|
||||
return RedirectResponse(
|
||||
url=(
|
||||
f"/services/catalogue/{catalogue_id}/firm-tasks"
|
||||
f"?sync_success=1"
|
||||
f"&created={result.created}"
|
||||
f"&updated={result.updated}"
|
||||
f"&unchanged={result.unchanged}"
|
||||
f"&duplicates_disabled={result.duplicates_disabled}"
|
||||
),
|
||||
status_code=303,
|
||||
)
|
||||
except Exception:
|
||||
db.rollback()
|
||||
raise
|
||||
finally:
|
||||
db.close()
|
||||
# END Firm Default Task Idempotent Sync Fix v1
|
||||
|
||||
Reference in New Issue
Block a user