fix: link UTM Campaign to the Campaign's document name, not campaign_name

This commit is contained in:
Nabin Hait
2026-07-04 17:40:16 +05:30
parent 5eaafd3025
commit 9fdcfd5f58
2 changed files with 21 additions and 10 deletions

View File

@@ -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):

View File

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