From 32974e3b85f72f547a783d79d77549db6c3cfbcf Mon Sep 17 00:00:00 2001 From: Claude Agent Date: Thu, 7 May 2026 13:06:13 +0000 Subject: [PATCH] fix(orders): preserve order_items on mark_order_deleted_in_roa Detail view for DELETED_IN_ROA orders showed "Niciun articol" because the soft-delete helper hard-deleted order_items. Now items stay in SQLite so the detail page displays the original GoMag order alongside "Comanda stearsa din ROA". On 'Reimporta', add_order_items already replaces them via DELETE+INSERT inside _safe_upsert_order_items. Co-Authored-By: Claude Opus 4.7 (1M context) --- api/app/services/sqlite_service.py | 7 +++++-- api/tests/test_order_items_overwrite.py | 15 ++++++++++----- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/api/app/services/sqlite_service.py b/api/app/services/sqlite_service.py index 3057ede..ce5e02d 100644 --- a/api/app/services/sqlite_service.py +++ b/api/app/services/sqlite_service.py @@ -1288,10 +1288,13 @@ async def clear_order_invoice(order_number: str): async def mark_order_deleted_in_roa(order_number: str): - """Mark an order as deleted in ROA — clears id_comanda, invoice cache, and stale items.""" + """Mark an order as deleted in ROA — clears id_comanda + invoice cache. + + order_items are preserved so the detail view can still show what was + originally ordered. On 'Reimporta', add_order_items replaces them. + """ db = await get_sqlite() try: - await db.execute("DELETE FROM order_items WHERE order_number = ?", (order_number,)) await db.execute(f""" UPDATE orders SET status = '{OrderStatus.DELETED_IN_ROA.value}', diff --git a/api/tests/test_order_items_overwrite.py b/api/tests/test_order_items_overwrite.py index fb47692..f43ef32 100644 --- a/api/tests/test_order_items_overwrite.py +++ b/api/tests/test_order_items_overwrite.py @@ -168,12 +168,15 @@ async def test_save_orders_batch_overwrite(): # =========================================================================== -# mark_order_deleted_in_roa — must purge items +# mark_order_deleted_in_roa — preserves items so detail view stays useful # =========================================================================== @pytest.mark.asyncio -async def test_mark_order_deleted_removes_items(): - """Soft-delete must remove order_items (no ghost rows).""" +async def test_mark_order_deleted_preserves_items(): + """Soft-delete keeps order_items so the detail view shows what was ordered. + + On 'Reimporta', add_order_items replaces them (DELETE+INSERT inside _safe_upsert_order_items). + """ await _seed_order("ORD-DEL") await sqlite_service.add_order_items("ORD-DEL", [ _item("SKU1", qty=5), _item("SKU2", qty=3), @@ -182,8 +185,10 @@ async def test_mark_order_deleted_removes_items(): await sqlite_service.mark_order_deleted_in_roa("ORD-DEL") - # Items purged - assert await _items_for("ORD-DEL") == [] + # Items preserved — detail view can still display them alongside "Comanda stearsa din ROA" + items = await _items_for("ORD-DEL") + assert len(items) == 2 + assert {i["sku"] for i in items} == {"SKU1", "SKU2"} # Orders row still present with DELETED_IN_ROA status (not hard-deleted) db = await sqlite_service.get_sqlite()