122 lines
4.1 KiB
Python
122 lines
4.1 KiB
Python
import jingrow
|
|
from jingrow import _
|
|
|
|
from crm.fcrm.pagetype.crm_notification.crm_notification import notify_user
|
|
|
|
|
|
def after_insert(pg, method):
|
|
if pg.reference_type in ["CRM Lead", "CRM Deal"] and pg.reference_name and pg.allocated_to:
|
|
fieldname = "lead_owner" if pg.reference_type == "CRM Lead" else "deal_owner"
|
|
owner = jingrow.db.get_value(pg.reference_type, pg.reference_name, fieldname)
|
|
if not owner:
|
|
jingrow.db.set_value(
|
|
pg.reference_type, pg.reference_name, fieldname, pg.allocated_to, update_modified=False
|
|
)
|
|
|
|
if pg.reference_type in ["CRM Lead", "CRM Deal", "CRM Task"] and pg.reference_name and pg.allocated_to:
|
|
notify_assigned_user(pg)
|
|
|
|
|
|
def on_update(pg, method):
|
|
if (
|
|
pg.has_value_changed("status")
|
|
and pg.status == "Cancelled"
|
|
and pg.reference_type in ["CRM Lead", "CRM Deal", "CRM Task"]
|
|
and pg.reference_name
|
|
and pg.allocated_to
|
|
):
|
|
notify_assigned_user(pg, is_cancelled=True)
|
|
|
|
|
|
def notify_assigned_user(pg, is_cancelled=False):
|
|
_pg = jingrow.get_pg(pg.reference_type, pg.reference_name)
|
|
owner = jingrow.get_cached_value("User", jingrow.session.user, "full_name")
|
|
notification_text = get_notification_text(owner, pg, _pg, is_cancelled)
|
|
|
|
message = (
|
|
_("Your assignment on {0} {1} has been removed by {2}").format(
|
|
pg.reference_type, pg.reference_name, owner
|
|
)
|
|
if is_cancelled
|
|
else _("{0} assigned a {1} {2} to you").format(owner, pg.reference_type, pg.reference_name)
|
|
)
|
|
|
|
redirect_to_pagetype, redirect_to_name = get_redirect_to_pg(pg)
|
|
|
|
notify_user(
|
|
{
|
|
"owner": jingrow.session.user,
|
|
"assigned_to": pg.allocated_to,
|
|
"notification_type": "Assignment",
|
|
"message": message,
|
|
"notification_text": notification_text,
|
|
"reference_pagetype": pg.reference_type,
|
|
"reference_docname": pg.reference_name,
|
|
"redirect_to_pagetype": redirect_to_pagetype,
|
|
"redirect_to_docname": redirect_to_name,
|
|
}
|
|
)
|
|
|
|
|
|
def get_notification_text(owner, pg, reference_pg, is_cancelled=False):
|
|
name = pg.reference_name
|
|
pagetype = pg.reference_type
|
|
|
|
if pagetype.startswith("CRM "):
|
|
pagetype = pagetype[4:].lower()
|
|
|
|
if pagetype in ["lead", "deal"]:
|
|
name = (
|
|
reference_pg.lead_name or name
|
|
if pagetype == "lead"
|
|
else reference_pg.organization or reference_pg.lead_name or name
|
|
)
|
|
|
|
if is_cancelled:
|
|
return f"""
|
|
<div class="mb-2 leading-5 text-ink-gray-5">
|
|
<span>{ _('Your assignment on {0} {1} has been removed by {2}').format(
|
|
pagetype,
|
|
f'<span class="font-medium text-ink-gray-9">{ name }</span>',
|
|
f'<span class="font-medium text-ink-gray-9">{ owner }</span>'
|
|
) }</span>
|
|
</div>
|
|
"""
|
|
|
|
return f"""
|
|
<div class="mb-2 leading-5 text-ink-gray-5">
|
|
<span class="font-medium text-ink-gray-9">{ owner }</span>
|
|
<span>{ _('assigned a {0} {1} to you').format(
|
|
pagetype,
|
|
f'<span class="font-medium text-ink-gray-9">{ name }</span>'
|
|
) }</span>
|
|
</div>
|
|
"""
|
|
|
|
if pagetype == "task":
|
|
if is_cancelled:
|
|
return f"""
|
|
<div class="mb-2 leading-5 text-ink-gray-5">
|
|
<span>{ _('Your assignment on task {0} has been removed by {1}').format(
|
|
f'<span class="font-medium text-ink-gray-9">{ reference_pg.title }</span>',
|
|
f'<span class="font-medium text-ink-gray-9">{ owner }</span>'
|
|
) }</span>
|
|
</div>
|
|
"""
|
|
return f"""
|
|
<div class="mb-2 leading-5 text-ink-gray-5">
|
|
<span class="font-medium text-ink-gray-9">{ owner }</span>
|
|
<span>{ _('assigned a new task {0} to you').format(
|
|
f'<span class="font-medium text-ink-gray-9">{ reference_pg.title }</span>'
|
|
) }</span>
|
|
</div>
|
|
"""
|
|
|
|
|
|
def get_redirect_to_pg(pg):
|
|
if pg.reference_type == "CRM Task":
|
|
reference_pg = jingrow.get_pg(pg.reference_type, pg.reference_name)
|
|
return reference_pg.reference_pagetype, reference_pg.reference_docname
|
|
|
|
return pg.reference_type, pg.reference_name
|