From 0974f41bd12589ac28e66a7dbcd06386baf28425 Mon Sep 17 00:00:00 2001 From: Christian Date: Mon, 5 Jan 2026 17:06:44 +0100 Subject: [PATCH] feat: Add endpoint to fix empty case titles from vtiger_data (v1.3.113) --- VERSION | 2 +- app/timetracking/backend/router.py | 55 ++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 598fc8a..53dfaa4 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.3.112 \ No newline at end of file +1.3.113 \ No newline at end of file diff --git a/app/timetracking/backend/router.py b/app/timetracking/backend/router.py index 5cab40a..abbb11e 100644 --- a/app/timetracking/backend/router.py +++ b/app/timetracking/backend/router.py @@ -128,6 +128,61 @@ async def test_vtiger_connection(): raise HTTPException(status_code=500, detail=str(e)) +@router.post("/sync/fix-empty-case-titles", tags=["Sync"]) +async def fix_empty_case_titles(): + """ + 🔧 Opdater tomme case titles fra vtiger_data. + + Henter titles fra vtiger_data JSON for cases der har tom eller generisk title. + """ + try: + logger.info("🔧 Fixing empty case titles...") + + # Find cases med tomme eller generiske titles + cases_query = """ + SELECT id, vtiger_id, title, + vtiger_data->>'title' as vtiger_title, + vtiger_data->>'ticket_title' as vtiger_ticket_title + FROM tmodule_cases + WHERE title IS NULL + OR TRIM(title) = '' + OR LOWER(title) IN ('ingen titel', 'no title', 'none') + """ + + cases = execute_query(cases_query) + + if not cases: + return { + "success": True, + "message": "No cases with empty titles found", + "updated": 0 + } + + updated_count = 0 + for case in cases: + # Prioriter title fra vtiger_data + new_title = case.get('vtiger_title') or case.get('vtiger_ticket_title') + + if new_title and new_title.strip(): + execute_query( + "UPDATE tmodule_cases SET title = %s WHERE id = %s", + (new_title, case['id']) + ) + updated_count += 1 + logger.info(f"✅ Updated case {case['vtiger_id']}: '{new_title}'") + + return { + "success": True, + "message": f"Updated {updated_count} cases", + "total_checked": len(cases), + "updated": updated_count + } + + except Exception as e: + logger.error(f"❌ Fix empty titles failed: {e}") + raise HTTPException(status_code=500, detail=str(e)) + + @router.post("/sync/manual-link-customer", tags=["Sync"]) async def manual_link_customer(tmodule_customer_id: int, hub_customer_id: int): """