From 9ad09c32b083c1b40cde77ef418b5c1ffcdd7779 Mon Sep 17 00:00:00 2001 From: gsinghpal Date: Wed, 27 May 2026 17:02:43 -0400 Subject: [PATCH] fix(billing): robust shadow prune (charges before products + archive fallback) --- fusion_centralize_billing/wizards/invoice_ledger.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/fusion_centralize_billing/wizards/invoice_ledger.py b/fusion_centralize_billing/wizards/invoice_ledger.py index 8249e778..4b5aab45 100644 --- a/fusion_centralize_billing/wizards/invoice_ledger.py +++ b/fusion_centralize_billing/wizards/invoice_ledger.py @@ -280,13 +280,17 @@ class FusionBillingInvoiceLedgerWizard(models.TransientModel): subs = self.env["sale.order"].search([("x_fc_shadow", "=", True)]) counts["subscriptions"] = len(subs) subs.unlink() - prods = self.env["product.product"].search([("default_code", "=like", "NC-%")]) - counts["products"] = len(prods) - prods.unlink() - ch = self.env["fusion.billing.charge"].search([]) + ch = self.env["fusion.billing.charge"].search([]) # before products (charge -> product) counts["charges"] = len(ch) ch.unlink() rec = self.env["fusion.billing.reconciliation"].search([]) counts["reconciliations"] = len(rec) rec.unlink() + prods = self.env["product.product"].search([("default_code", "=like", "NC-%")]) + counts["products"] = len(prods) + try: + prods.unlink() + except Exception: # noqa: BLE001 - undeletable (referenced) products: archive instead + prods.write({"active": False}) + counts["products_archived"] = len(prods) return counts