diff --git a/erpnext/crm/doctype/campaign/campaign.py b/erpnext/crm/doctype/campaign/campaign.py index f9834d2ccef..d4fd77a70f0 100644 --- a/erpnext/crm/doctype/campaign/campaign.py +++ b/erpnext/crm/doctype/campaign/campaign.py @@ -26,23 +26,21 @@ class Campaign(Document): # end: auto-generated types def after_insert(self): - try: - mc = frappe.get_doc("UTM Campaign", self.campaign_name) - except frappe.DoesNotExistError: - mc = frappe.new_doc("UTM Campaign") - mc.name = self.campaign_name - mc.campaign_description = self.description - mc.crm_campaign = self.campaign_name - mc.save(ignore_permissions=True) + self.sync_utm_campaign() def on_change(self): + self.sync_utm_campaign() + + def sync_utm_campaign(self): try: mc = frappe.get_doc("UTM Campaign", self.campaign_name) except frappe.DoesNotExistError: mc = frappe.new_doc("UTM Campaign") mc.name = self.campaign_name mc.campaign_description = self.description - mc.crm_campaign = self.campaign_name + # link to this Campaign by its document name, which differs from campaign_name + # when a naming series is used + mc.crm_campaign = self.name mc.save(ignore_permissions=True) def autoname(self): diff --git a/erpnext/crm/doctype/campaign/test_campaign.py b/erpnext/crm/doctype/campaign/test_campaign.py index 3e98474eed8..ed906c04aef 100644 --- a/erpnext/crm/doctype/campaign/test_campaign.py +++ b/erpnext/crm/doctype/campaign/test_campaign.py @@ -23,9 +23,22 @@ class TestCampaign(ERPNextTestSuite): campaign = self.make_campaign(campaign_name="_Test Campaign Named") self.assertEqual(campaign.name, "_Test Campaign Named") + def test_autoname_uses_naming_series_when_configured(self): + # regression: with a naming series the document name differs from campaign_name, + # and the UTM sync must still link back to a valid Campaign (self.name) + original = frappe.defaults.get_global_default("campaign_naming_by") + frappe.defaults.set_global_default("campaign_naming_by", "Naming Series") + try: + campaign = self.make_campaign(naming_series="SAL-CAM-.YYYY.-") + self.assertTrue(campaign.name.startswith("SAL-CAM-")) + utm = frappe.get_doc("UTM Campaign", campaign.campaign_name) + self.assertEqual(utm.crm_campaign, campaign.name) + finally: + frappe.defaults.set_global_default("campaign_naming_by", original or "") + def test_inserting_mirrors_into_a_utm_campaign(self): campaign = self.make_campaign(campaign_name="_Test Campaign UTM", description="Spring push") self.assertTrue(frappe.db.exists("UTM Campaign", campaign.campaign_name)) utm = frappe.get_doc("UTM Campaign", campaign.campaign_name) self.assertEqual(utm.campaign_description, "Spring push") - self.assertEqual(utm.crm_campaign, campaign.campaign_name) + self.assertEqual(utm.crm_campaign, campaign.name)