From 7f6c66bd5e662fdc58b0abe8056185178331ba40 Mon Sep 17 00:00:00 2001 From: amdi-odoo Date: Wed, 29 Mar 2023 12:19:34 +0000 Subject: [PATCH] [IMP] utm: allow archiving campaigns Allow archiving campaigns from the form and kanban views. Add the "Archived" filter. Task-3240966 Part-of: odoo/odoo#116230 --- addons/utm/models/utm_campaign.py | 1 + addons/utm/models/utm_mixin.py | 2 +- addons/utm/tests/test_utm.py | 8 ++++++++ addons/utm/views/utm_campaign_views.xml | 8 ++++++++ 4 files changed, 18 insertions(+), 1 deletion(-) diff --git a/addons/utm/models/utm_campaign.py b/addons/utm/models/utm_campaign.py index ecf5f77a73f..924a67a3214 100644 --- a/addons/utm/models/utm_campaign.py +++ b/addons/utm/models/utm_campaign.py @@ -9,6 +9,7 @@ class UtmCampaign(models.Model): _description = 'UTM Campaign' _rec_name = 'title' + active = fields.Boolean('Active', default=True) name = fields.Char(string='Campaign Identifier', required=True, compute='_compute_name', store=True, readonly=False, precompute=True, translate=False) title = fields.Char(string='Campaign Name', required=True, translate=True) diff --git a/addons/utm/models/utm_mixin.py b/addons/utm/models/utm_mixin.py index 515c244826c..afb4b78b975 100644 --- a/addons/utm/models/utm_mixin.py +++ b/addons/utm/models/utm_mixin.py @@ -62,7 +62,7 @@ class UtmMixin(models.AbstractModel): """Based on the model name and on the name of the record, retrieve the corresponding record or create it.""" Model = self.env[model_name] - record = Model.search([('name', '=', name)], limit=1) + record = Model.with_context(active_test=False).search([('name', '=', name)], limit=1) if not record: # No record found, create a new one diff --git a/addons/utm/tests/test_utm.py b/addons/utm/tests/test_utm.py index 5a05724061c..133490489d0 100644 --- a/addons/utm/tests/test_utm.py +++ b/addons/utm/tests/test_utm.py @@ -21,6 +21,14 @@ class TestUtm(TestUTMCommon): self.assertNotIn(source_4, source_1 | source_2) self.assertEqual(source_4.name, 'Source 3') + def test_find_or_create_with_archived_record(self): + archived_campaign = self.env['utm.campaign'].create([{ + 'active': False, + 'name': 'Archived Campaign', + }]) + campaign = self.env['utm.mixin']._find_or_create_record('utm.campaign', 'Archived Campaign') + self.assertEqual(archived_campaign, campaign, "An archived record must be found instead of re-created.") + def test_name_generation(self): """Test that the name is always unique. diff --git a/addons/utm/views/utm_campaign_views.xml b/addons/utm/views/utm_campaign_views.xml index b86561ed3f4..cb34c83235e 100644 --- a/addons/utm/views/utm_campaign_views.xml +++ b/addons/utm/views/utm_campaign_views.xml @@ -9,6 +9,7 @@ + @@ -30,7 +31,9 @@
+ + @@ -81,6 +84,7 @@ + @@ -89,6 +93,10 @@ Delete + + Archive + Restore +