fix: reuse the existing UTM Campaign mirror when campaign_name is edited

This commit is contained in:
Nabin Hait
2026-07-04 18:45:58 +05:30
parent 9fdcfd5f58
commit ca9dcbf2d7
2 changed files with 13 additions and 3 deletions

View File

@@ -32,14 +32,16 @@ class Campaign(Document):
self.sync_utm_campaign()
def sync_utm_campaign(self):
# look up the existing mirror by the stable Campaign link first, so editing
# campaign_name updates that mirror instead of creating a duplicate
existing = frappe.db.get_value("UTM Campaign", {"crm_campaign": self.name}) or self.campaign_name
try:
mc = frappe.get_doc("UTM Campaign", self.campaign_name)
mc = frappe.get_doc("UTM Campaign", existing)
except frappe.DoesNotExistError:
mc = frappe.new_doc("UTM Campaign")
mc.name = self.campaign_name
mc.campaign_description = self.description
# link to this Campaign by its document name, which differs from campaign_name
# when a naming series is used
# link by the document name, which differs from campaign_name when a naming series is used
mc.crm_campaign = self.name
mc.save(ignore_permissions=True)

View File

@@ -42,3 +42,11 @@ class TestCampaign(ERPNextTestSuite):
utm = frappe.get_doc("UTM Campaign", campaign.campaign_name)
self.assertEqual(utm.campaign_description, "Spring push")
self.assertEqual(utm.crm_campaign, campaign.name)
def test_editing_campaign_name_reuses_the_same_utm_campaign(self):
campaign = self.make_campaign(campaign_name="_Test Campaign Rename A")
campaign.campaign_name = "_Test Campaign Rename B"
campaign.save()
# the edit updates the existing mirror rather than creating a second one
mirrors = frappe.get_all("UTM Campaign", filters={"crm_campaign": campaign.name})
self.assertEqual(len(mirrors), 1)