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