feat: add customer creation and invitation functionality in Helpdesk CRM
This commit is contained in:
parent
f8aa6cab78
commit
5f32e46759
@ -33,6 +33,17 @@ class HelpdeskCRMSettings(Document):
|
|||||||
).insert()
|
).insert()
|
||||||
|
|
||||||
|
|
||||||
|
@frappe.whitelist()
|
||||||
|
def create_customer_in_helpdesk(name, email):
|
||||||
|
helpdesk_crm_settings = frappe.get_single("Helpdesk CRM Settings")
|
||||||
|
if not helpdesk_crm_settings.enabled:
|
||||||
|
frappe.throw(_("Helpdesk is not integrated with the CRM"))
|
||||||
|
|
||||||
|
if not helpdesk_crm_settings.is_helpdesk_in_different_site:
|
||||||
|
# from helpdesk.integrations.crm.api import create_customer
|
||||||
|
return create_customer(name, email)
|
||||||
|
|
||||||
|
|
||||||
def get_helpdesk_script():
|
def get_helpdesk_script():
|
||||||
return """class CRMDeal {
|
return """class CRMDeal {
|
||||||
onLoad() {
|
onLoad() {
|
||||||
@ -44,7 +55,12 @@ def get_helpdesk_script():
|
|||||||
{
|
{
|
||||||
label: "Create customer in Helpdesk",
|
label: "Create customer in Helpdesk",
|
||||||
onClick: () => {
|
onClick: () => {
|
||||||
toast.success("Success Message")
|
call('crm.fcrm.doctype.helpdesk_crm_settings.helpdesk_crm_settings.create_customer_in_helpdesk', {
|
||||||
|
name: this.doc.organization,
|
||||||
|
email: this.doc.email
|
||||||
|
}).then((a) => {
|
||||||
|
toast.success("Customer created successfully, " + a.customer)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@ -52,3 +68,111 @@ def get_helpdesk_script():
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}"""
|
}"""
|
||||||
|
|
||||||
|
# Helpdesk methods TODO: move to helpdesk.integrations.crm.api
|
||||||
|
def create_customer(name, email):
|
||||||
|
customer = frappe.db.exists("HD Customer", name)
|
||||||
|
if not customer:
|
||||||
|
customer = frappe.get_doc(
|
||||||
|
{
|
||||||
|
"doctype": "HD Customer",
|
||||||
|
"customer_name": name,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
customer.insert(ignore_permissions=True, ignore_if_duplicate=True)
|
||||||
|
else:
|
||||||
|
customer = frappe.get_doc("HD Customer", customer)
|
||||||
|
|
||||||
|
contact = frappe.db.exists("Contact", {"email_id": email})
|
||||||
|
if contact:
|
||||||
|
contact = frappe.get_doc("Contact", contact)
|
||||||
|
contact.append(
|
||||||
|
"links", {"link_doctype": "HD Customer", "link_name": customer.name}
|
||||||
|
)
|
||||||
|
contact.save(ignore_permissions=True)
|
||||||
|
else:
|
||||||
|
contact = frappe.get_doc(
|
||||||
|
{
|
||||||
|
"doctype": "Contact",
|
||||||
|
"first_name": email.split("@")[0],
|
||||||
|
"email_ids": [{"email_id": email, "is_primary": 1}],
|
||||||
|
"links": [{"link_doctype": "HD Customer", "link_name": customer.name}],
|
||||||
|
}
|
||||||
|
)
|
||||||
|
contact.insert(ignore_permissions=True)
|
||||||
|
|
||||||
|
if not frappe.db.exists("User", contact.email_id):
|
||||||
|
invite_user(contact.name)
|
||||||
|
else:
|
||||||
|
base_url = frappe.utils.get_url() + "/helpdesk"
|
||||||
|
frappe.sendmail(
|
||||||
|
recipients=[contact.email_id],
|
||||||
|
subject="Welcome existing user to Helpdesk",
|
||||||
|
message=f"""
|
||||||
|
<h1>Hello,</h1>
|
||||||
|
<button>{base_url}</button>
|
||||||
|
""",
|
||||||
|
now=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
return {"customer": customer.name, "contact": contact.name}
|
||||||
|
|
||||||
|
|
||||||
|
def invite_user(contact: str):
|
||||||
|
contact = frappe.get_doc("Contact", contact)
|
||||||
|
contact.check_permission()
|
||||||
|
|
||||||
|
if not contact.email_id:
|
||||||
|
frappe.throw(_("Please set Email Address"))
|
||||||
|
|
||||||
|
user = frappe.get_doc(
|
||||||
|
{
|
||||||
|
"doctype": "User",
|
||||||
|
"first_name": contact.first_name,
|
||||||
|
"last_name": contact.last_name,
|
||||||
|
"email": contact.email_id,
|
||||||
|
"user_type": "Website User",
|
||||||
|
"send_welcome_email": 0
|
||||||
|
}
|
||||||
|
).insert()
|
||||||
|
|
||||||
|
contact.user = user.name
|
||||||
|
contact.save(ignore_permissions=True)
|
||||||
|
|
||||||
|
send_welcome_mail_to_user(user)
|
||||||
|
return user.name
|
||||||
|
|
||||||
|
|
||||||
|
def send_welcome_mail_to_user(user):
|
||||||
|
from frappe.utils import get_url
|
||||||
|
from frappe.utils.user import get_user_fullname
|
||||||
|
|
||||||
|
link = user.reset_password()
|
||||||
|
|
||||||
|
frappe.cache.hset("redirect_after_login", user.name, "/helpdesk")
|
||||||
|
|
||||||
|
site_url = get_url()
|
||||||
|
subject = _("Welcome to Helpdesk")
|
||||||
|
|
||||||
|
created_by = get_user_fullname(frappe.session["user"])
|
||||||
|
if created_by == "Guest":
|
||||||
|
created_by = "Administrator"
|
||||||
|
|
||||||
|
args = {
|
||||||
|
"first_name": user.first_name or user.last_name or "user",
|
||||||
|
"last_name": user.last_name,
|
||||||
|
"user": user.name,
|
||||||
|
"title": subject,
|
||||||
|
"login_url": get_url(),
|
||||||
|
"created_by": created_by,
|
||||||
|
"site_url": site_url,
|
||||||
|
"link": link
|
||||||
|
}
|
||||||
|
|
||||||
|
frappe.sendmail(
|
||||||
|
recipients=[user.email],
|
||||||
|
subject=subject,
|
||||||
|
template="helpdesk_invitation",
|
||||||
|
args=args,
|
||||||
|
now=True,
|
||||||
|
)
|
||||||
|
|||||||
24
crm/templates/emails/helpdesk_invitation.html
Normal file
24
crm/templates/emails/helpdesk_invitation.html
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
<p>
|
||||||
|
{{_("Hello")}} {{ first_name }}{% if last_name %} {{ last_name}}{% endif %},
|
||||||
|
</p>
|
||||||
|
{% set site_link = "<a href='" + site_url + "'>" + site_url + "</a>" %}
|
||||||
|
<p>{{_("A new account has been created for you at {0}").format(site_link)}}.</p>
|
||||||
|
<p>{{_("Your login id is")}}: <b>{{ user }}</b>
|
||||||
|
<p>{{_("Click on the link below to complete your registration and set a new password")}}.</p>
|
||||||
|
|
||||||
|
<p style="margin: 15px 0px;">
|
||||||
|
<a href="{{ link }}" rel="nofollow" class="btn btn-primary">{{ _("Complete Registration") }}</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
{% if created_by != "Administrator" %}
|
||||||
|
<br>
|
||||||
|
<p style="margin-top: 15px">
|
||||||
|
{{_("Thanks")}},<br>
|
||||||
|
{{ created_by }}
|
||||||
|
</p>
|
||||||
|
{% endif %}
|
||||||
|
<br>
|
||||||
|
<p>
|
||||||
|
{{_("You can also copy-paste following link in your browser")}}<br>
|
||||||
|
<a href="{{ link }}">{{ link }}</a>
|
||||||
|
</p>
|
||||||
Loading…
x
Reference in New Issue
Block a user