mirror of
https://github.com/frappe/erpnext.git
synced 2026-09-03 08:32:24 +00:00
fix(crm): validate contact email before saving an email campaign (#58667)
This commit is contained in:
@@ -29,12 +29,19 @@ class EmailCampaign(Document):
|
||||
|
||||
def validate(self):
|
||||
self.set_date()
|
||||
# checking if email is set for lead. Not checking for contact as email is a mandatory field for contact.
|
||||
if self.email_campaign_for == "Lead":
|
||||
self.validate_lead()
|
||||
self.validate_recipient_email()
|
||||
self.validate_email_campaign_already_exists()
|
||||
self.update_status()
|
||||
|
||||
def validate_recipient_email(self):
|
||||
if not self.recipient:
|
||||
return
|
||||
|
||||
if self.email_campaign_for == "Lead":
|
||||
self.validate_lead()
|
||||
elif self.email_campaign_for == "Contact":
|
||||
self.validate_contact()
|
||||
|
||||
def set_date(self):
|
||||
if getdate(self.start_date) < getdate(today()):
|
||||
frappe.throw(_("Start Date cannot be before the current date"))
|
||||
@@ -56,6 +63,13 @@ class EmailCampaign(Document):
|
||||
lead_name = frappe.db.get_value("Lead", self.recipient, "lead_name")
|
||||
frappe.throw(_("Please set an email id for the Lead {0}").format(lead_name))
|
||||
|
||||
def validate_contact(self):
|
||||
contact = frappe.db.get_value("Contact", self.recipient, ["email_id", "full_name"], as_dict=True)
|
||||
if contact and not contact.email_id:
|
||||
frappe.throw(
|
||||
_("Please set a primary email ID for the Contact {0}").format(frappe.bold(contact.full_name))
|
||||
)
|
||||
|
||||
def validate_email_campaign_already_exists(self):
|
||||
email_campaign_exists = frappe.db.exists(
|
||||
"Email Campaign",
|
||||
|
||||
@@ -59,3 +59,26 @@ class TestEmailCampaign(ERPNextTestSuite):
|
||||
doc.email_campaign_for = "Lead"
|
||||
doc.recipient = lead.name
|
||||
self.assertRaises(frappe.ValidationError, doc.validate_lead)
|
||||
|
||||
def test_contact_without_an_email_is_rejected(self):
|
||||
contact = frappe.get_doc({"doctype": "Contact", "first_name": "_Test Contact No Email"}).insert()
|
||||
campaign = self.make_campaign(schedules=[0])
|
||||
doc = self.make_email_campaign(campaign.name)
|
||||
doc.email_campaign_for = "Contact"
|
||||
doc.recipient = contact.name
|
||||
self.assertRaisesRegex(frappe.ValidationError, "primary email ID", doc.insert)
|
||||
|
||||
def test_contact_with_an_email_is_accepted(self):
|
||||
contact = frappe.get_doc(
|
||||
{
|
||||
"doctype": "Contact",
|
||||
"first_name": "_Test Contact With Email",
|
||||
"email_ids": [{"email_id": "_test_email_campaign@example.com", "is_primary": 1}],
|
||||
}
|
||||
).insert()
|
||||
campaign = self.make_campaign(schedules=[0])
|
||||
doc = self.make_email_campaign(campaign.name)
|
||||
doc.email_campaign_for = "Contact"
|
||||
doc.recipient = contact.name
|
||||
doc.insert()
|
||||
self.assertEqual(doc.status, "In Progress")
|
||||
|
||||
Reference in New Issue
Block a user