From 4b5e154dc16d22975a236b41eb7c66150a07f3c6 Mon Sep 17 00:00:00 2001 From: Christian Date: Tue, 5 May 2026 07:24:45 +0200 Subject: [PATCH] fix: enforce local-order-only flow in economy time queue --- VERSION | 2 +- app/economy/backend/router.py | 31 +++++++++++----------------- app/economy/frontend/time_queue.html | 14 +++++++------ 3 files changed, 21 insertions(+), 26 deletions(-) diff --git a/VERSION b/VERSION index b1a306a..c3c2c0e 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.2.93 +2.2.94 diff --git a/app/economy/backend/router.py b/app/economy/backend/router.py index 5fe4ea4..be3dd01 100644 --- a/app/economy/backend/router.py +++ b/app/economy/backend/router.py @@ -8,8 +8,6 @@ from pydantic import BaseModel, Field from app.core.config import settings from app.core.database import execute_insert, execute_query, execute_query_single, execute_update -from app.timetracking.backend.economic_export import economic_service -from app.timetracking.backend.models import TModuleEconomicExportRequest logger = logging.getLogger(__name__) @@ -498,30 +496,25 @@ async def send_selected_to_invoices(payload: BulkSendRequest, request: Request): if int(row["id"]) in selected_invoice_ids: rows_by_customer[int(row["customer_id"])].append(row) - export_results = [] + created_orders = [] for cust_id, cust_rows in rows_by_customer.items(): order_id = _create_order_from_selected(cust_id, cust_rows, user_id) - export_result = await economic_service.export_order( - TModuleEconomicExportRequest(order_id=order_id, force=False), - user_id=user_id, - ) - export_results.append( - { - "customer_id": cust_id, - "order_id": order_id, - "success": bool(export_result.success), - "dry_run": bool(export_result.dry_run), - "message": export_result.message, - "economic_draft_id": export_result.economic_draft_id, - "economic_order_number": export_result.economic_order_number, - } - ) + created_orders.append({"customer_id": cust_id, "order_id": order_id}) + + # Time queue must never push directly to e-conomic. + # Orders are created locally and can be transferred manually from Orders page. + order_ids = [o["order_id"] for o in created_orders] + orders_url = "/ordrer" + if len(order_ids) == 1: + orders_url = f"/ordrer/{order_ids[0]}" return { "success": True, "selected": len(ids), "invoice_candidates": len(selected_invoice_ids), - "exports": export_results, + "created_orders": created_orders, + "orders_url": orders_url, + "message": "Lokale ordrer oprettet. Overfoer til e-conomic fra Ordre-siden.", } except HTTPException: raise diff --git a/app/economy/frontend/time_queue.html b/app/economy/frontend/time_queue.html index 7ecaf98..3043ff2 100644 --- a/app/economy/frontend/time_queue.html +++ b/app/economy/frontend/time_queue.html @@ -7,13 +7,13 @@

Economy Time Queue

-

Hub-created, non-billed time entries.

+

Hub-created, non-billed time entries. Opretter kun lokale ordrer.

0 selected - +
@@ -447,7 +447,7 @@ const ids = selectedIds(); if (!ids.length) return alert('Select at least one entry'); - const ok = confirm('Send selected entries to invoices now?'); + const ok = confirm('Opret lokale ordrer for de valgte linjer? (Ingen direkte overfoersel til e-conomic)'); if (!ok) return; try { @@ -455,10 +455,12 @@ method: 'POST', body: JSON.stringify({ ids }), }); - const exports = (result.exports || []).map((x) => { - return `customer ${x.customer_id}, order ${x.order_id}, success=${x.success}, dry_run=${x.dry_run}`; + const orders = (result.created_orders || []).map((x) => { + return `customer ${x.customer_id}, order ${x.order_id}`; }).join('\n'); - alert(exports || 'No export result'); + const orderMessage = orders || 'Ingen ordrer oprettet'; + const nextStep = result.orders_url ? `\n\nAabn ordre: ${result.orders_url}` : ''; + alert(`Lokale ordrer oprettet:\n${orderMessage}${nextStep}`); await loadCustomers(); await loadEntries(); } catch (err) {