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()