From 1ebb1fa2cdfab6d23bf6f875a0ebc5b59b1f61f6 Mon Sep 17 00:00:00 2001 From: Christian Date: Mon, 5 Jan 2026 16:52:58 +0100 Subject: [PATCH] fix: Never use time descriptions as case title, only contact+date fallback (v1.3.111) --- VERSION | 2 +- app/timetracking/backend/order_service.py | 38 ++++++----------------- 2 files changed, 10 insertions(+), 30 deletions(-) diff --git a/VERSION b/VERSION index e6bd7ba..0a15813 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.3.110 \ No newline at end of file +1.3.111 \ No newline at end of file diff --git a/app/timetracking/backend/order_service.py b/app/timetracking/backend/order_service.py index 882408d..3665a41 100644 --- a/app/timetracking/backend/order_service.py +++ b/app/timetracking/backend/order_service.py @@ -92,7 +92,11 @@ class OrderService: # Hent godkendte tider for kunden med case og contact detaljer query = """ SELECT t.*, - COALESCE(c.title, c.vtiger_data->>'ticket_title', 'Ingen titel') as case_title, + COALESCE( + NULLIF(TRIM(c.title), ''), + NULLIF(TRIM(c.vtiger_data->>'ticket_title'), ''), + 'Ingen titel' + ) as case_title, c.vtiger_id as case_vtiger_id, COALESCE(c.vtiger_data->>'case_no', c.vtiger_data->>'ticket_no') as case_number, c.vtiger_data->>'ticket_title' as vtiger_title, @@ -182,36 +186,12 @@ class OrderService: # Use full case ID number case_number = f"CC{vtiger_parts[1]}" - # Brug case titel fra vTiger (fallback til time entry beskrivelser) + # Brug case titel fra vTiger case_title = group.get('case_title') or "" - # Hvis case titel er tom eller generisk, brug time entry beskrivelser - if not case_title or case_title.strip() == "" or case_title.lower() in ['none', 'ingen beskrivelse', 'ingen titel', 'no title', '']: - import re - if group['descriptions']: - # Fjern "X m" og "X t" mønstre (måneder/timer fra dato format) - clean_descriptions = [] - for desc in group['descriptions']: - # Fjern mønstre som "12 m", "2 t", "/ 12 m /", etc. - cleaned = re.sub(r'[/\s]*\d+\s*[mt]\s*[/\s]*', ' ', desc, flags=re.IGNORECASE).strip() - # Fjern ekstra whitespace - cleaned = re.sub(r'\s+', ' ', cleaned).strip() - # Fjern tomme strenge eller bare punktum/komma/bindestreg - if cleaned and cleaned not in [',', '.', '-', '/', '']: - clean_descriptions.append(cleaned) - - if clean_descriptions: - unique_descriptions = list(set(clean_descriptions)) - if len(unique_descriptions) == 1: - case_title = unique_descriptions[0] - else: - # Hvis forskellige, join dem - case_title = ", ".join(unique_descriptions[:3]) # Max 3 for ikke at blive for lang - if len(unique_descriptions) > 3: - case_title += "..." - - # Hvis stadig ingen titel, byg en fra contact_name + dato - if not case_title or case_title.strip() == "": + # Hvis case titel er generisk placeholder, brug contact + dato (IKKE descriptions) + # Descriptions bruges kun i ordre notes, ikke som titel + if not case_title or case_title.strip() == "" or case_title.lower() in ['none', 'ingen beskrivelse', 'ingen titel', 'no title']: if group.get('contact_name'): # Brug contact navn og dato date_str = group.get('worked_date', '').strftime('%d.%m.%Y') if group.get('worked_date') else ''