Fix: Brug fuldt case ID (ikke kun sidste 4 cifre) + auto-link kunder efter vTiger sync

This commit is contained in:
Christian 2026-01-05 10:56:32 +01:00
parent 68eb1d31d1
commit 24a517a10c
2 changed files with 58 additions and 3 deletions

View File

@ -167,13 +167,13 @@ class OrderService:
)
was_rounded = (case_hours != original_hours)
# Extract case number from vtiger_id (format: 39x42930 -> CC2930)
# Extract case number from vtiger_id (format: 39x3942 -> CC3942)
case_number = ""
if group['case_vtiger_id']:
vtiger_parts = group['case_vtiger_id'].split('x')
if len(vtiger_parts) > 1:
# Take last 4 digits
case_number = f"CC{vtiger_parts[1][-4:]}"
# Use full case ID number
case_number = f"CC{vtiger_parts[1]}"
# Brug case titel fra vTiger (fallback til time entry beskrivelser)
case_title = group.get('case_title') or "Ingen beskrivelse"

View File

@ -66,6 +66,16 @@ async def sync_from_vtiger(
try:
logger.info("🚀 Starting vTiger sync...")
result = await vtiger_service.full_sync(user_id=user_id, fetch_comments=fetch_comments)
# Auto-link customers after sync to update links based on fresh vTiger data
logger.info("🔗 Auto-linking customers after sync...")
try:
link_query = "SELECT * FROM link_tmodule_customers_to_hub()"
link_results = execute_query(link_query)
logger.info(f"✅ Linked {len(link_results)} customers automatically")
except Exception as link_error:
logger.warning(f"⚠️ Customer linking failed (non-critical): {link_error}")
return result
except Exception as e:
logger.error(f"❌ Sync failed: {e}")
@ -118,6 +128,51 @@ async def test_vtiger_connection():
raise HTTPException(status_code=500, detail=str(e))
@router.post("/sync/relink-customers", tags=["Sync"])
async def relink_customers():
"""
🔗 Re-link alle tmodule_customers til Hub customers.
Bruger linking funktion der prioriterer:
1. economic_customer_number match (mest præcis)
2. Navn match (fallback)
Kør efter vTiger sync for at opdatere kunde-links baseret
nyeste data fra vTiger (cf_854 economic numbers).
"""
try:
logger.info("🔗 Starting customer re-linking...")
# Call database function
query = "SELECT * FROM link_tmodule_customers_to_hub()"
results = execute_query(query)
# Count by action type
stats = {
"economic_matches": 0,
"name_matches": 0,
"total_linked": len(results)
}
for result in results:
if result['action'] == 'economic_number_match':
stats["economic_matches"] += 1
elif result['action'] == 'name_match':
stats["name_matches"] += 1
logger.info(f"✅ Customer linking complete: {stats}")
return {
"success": True,
"stats": stats,
"linked_customers": results
}
except Exception as e:
logger.error(f"❌ Customer linking failed: {e}")
raise HTTPException(status_code=500, detail=str(e))
@router.get("/debug/raw-stats", tags=["Debug"])
async def get_debug_raw_stats():
"""