1
0
forked from test/crm
jcrm/crm/api/contact.py

146 lines
3.5 KiB
Python

import jingrow
from jingrow import _
def validate(pg, method):
update_deals_email_mobile_no(pg)
def update_deals_email_mobile_no(pg):
linked_deals = jingrow.get_all(
"CRM Contacts",
filters={"contact": pg.name, "is_primary": 1},
fields=["parent"],
)
for linked_deal in linked_deals:
deal = jingrow.db.get_values("CRM Deal", linked_deal.parent, ["email", "mobile_no"], as_dict=True)[0]
if deal.email != pg.email_id or deal.mobile_no != pg.mobile_no:
jingrow.db.set_value(
"CRM Deal",
linked_deal.parent,
{
"email": pg.email_id,
"mobile_no": pg.mobile_no,
},
)
@jingrow.whitelist()
def get_linked_deals(contact):
"""Get linked deals for a contact"""
if not jingrow.has_permission("Contact", "read", contact):
jingrow.throw("Not permitted", jingrow.PermissionError)
deal_names = jingrow.get_all(
"CRM Contacts",
filters={"contact": contact, "parenttype": "CRM Deal"},
fields=["parent"],
distinct=True,
)
# get deals data
deals = []
for d in deal_names:
deal = jingrow.get_cached_pg(
"CRM Deal",
d.parent,
fields=[
"name",
"organization",
"currency",
"annual_revenue",
"status",
"email",
"mobile_no",
"deal_owner",
"modified",
],
)
deals.append(deal.as_dict())
return deals
@jingrow.whitelist()
def create_new(contact, field, value):
"""Create new email or phone for a contact"""
if not jingrow.has_permission("Contact", "write", contact):
jingrow.throw("Not permitted", jingrow.PermissionError)
contact = jingrow.get_cached_pg("Contact", contact)
if field == "email":
email = {"email_id": value, "is_primary": 1 if len(contact.email_ids) == 0 else 0}
contact.append("email_ids", email)
elif field in ("mobile_no", "phone"):
mobile_no = {"phone": value, "is_primary_mobile_no": 1 if len(contact.phone_nos) == 0 else 0}
contact.append("phone_nos", mobile_no)
else:
jingrow.throw("Invalid field")
contact.save()
return True
@jingrow.whitelist()
def set_as_primary(contact, field, value):
"""Set email or phone as primary for a contact"""
if not jingrow.has_permission("Contact", "write", contact):
jingrow.throw("Not permitted", jingrow.PermissionError)
contact = jingrow.get_pg("Contact", contact)
if field == "email":
for email in contact.email_ids:
if email.email_id == value:
email.is_primary = 1
else:
email.is_primary = 0
elif field in ("mobile_no", "phone"):
name = "is_primary_mobile_no" if field == "mobile_no" else "is_primary_phone"
for phone in contact.phone_nos:
if phone.phone == value:
phone.set(name, 1)
else:
phone.set(name, 0)
else:
jingrow.throw("Invalid field")
contact.save()
return True
@jingrow.whitelist()
def search_emails(txt: str):
pagetype = "Contact"
meta = jingrow.get_meta(pagetype)
filters = [["Contact", "email_id", "is", "set"]]
if meta.get("fields", {"fieldname": "enabled", "fieldtype": "Check"}):
filters.append([pagetype, "enabled", "=", 1])
if meta.get("fields", {"fieldname": "disabled", "fieldtype": "Check"}):
filters.append([pagetype, "disabled", "!=", 1])
or_filters = []
search_fields = ["full_name", "email_id", "name"]
if txt:
for f in search_fields:
or_filters.append([pagetype, f.strip(), "like", f"%{txt}%"])
results = jingrow.get_list(
pagetype,
filters=filters,
fields=search_fields,
or_filters=or_filters,
limit_start=0,
limit_page_length=20,
order_by="email_id, full_name, name",
ignore_permissions=False,
as_list=True,
strict=False,
)
return results