diff --git a/app/timetracking/backend/order_service.py b/app/timetracking/backend/order_service.py index 1fbb6bf..20b750a 100644 --- a/app/timetracking/backend/order_service.py +++ b/app/timetracking/backend/order_service.py @@ -157,6 +157,13 @@ class OrderService: for entry in group['entries'] ) + # Check if any entries were rounded + original_hours = sum( + Decimal(str(entry['original_hours'])) + for entry in group['entries'] + ) + was_rounded = (case_hours != original_hours) + # Extract case number from vtiger_id (format: 39x42930 -> CC2930) case_number = "" if group['case_vtiger_id']: @@ -165,19 +172,30 @@ class OrderService: # Take last 4 digits case_number = f"CC{vtiger_parts[1][-4:]}" - # Brug tidsregistreringers beskrivelser som titel - # Tag første beskrivelse, eller alle hvis de er forskellige + # Brug tidsregistreringers beskrivelser som titel (filter bort dato-mønstre) + import re case_title = "Ingen beskrivelse" if group['descriptions']: - # Hvis alle beskrivelser er ens, brug kun én - unique_descriptions = list(set(group['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 += "..." + # 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 += "..." # Build description med case nummer prefix if case_number: @@ -185,6 +203,12 @@ class OrderService: else: description = case_title + # Tilføj oprundingsinfo hvis relevant (vis i minutter for klarhed) + if was_rounded: + orig_minutes = int(original_hours * 60) + approved_minutes = int(case_hours * 60) + description += f" (oprundet {orig_minutes} min → {approved_minutes} min)" + # Calculate line total line_total = case_hours * hourly_rate