seitime-frappe/frappe/email/__init__.py
Gavin D'souza 3446026555 chore: Update header: license.txt => LICENSE
The license.txt file has been replaced with LICENSE for quite a while
now. INAL but it didn't seem accurate to say "hey, checkout license.txt
although there's no such file". Apart from this, there were
inconsistencies in the headers altogether...this change brings
consistency.
2021-09-03 12:02:59 +05:30

104 lines
3.1 KiB
Python

# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
# License: MIT. See LICENSE
import frappe
from frappe.desk.reportview import build_match_conditions
def sendmail_to_system_managers(subject, content):
frappe.sendmail(recipients=get_system_managers(), subject=subject, content=content)
@frappe.whitelist()
def get_contact_list(txt, page_length=20):
"""Returns contacts (from autosuggest)"""
cached_contacts = get_cached_contacts(txt)
if cached_contacts:
return cached_contacts[:page_length]
try:
match_conditions = build_match_conditions('Contact')
match_conditions = "and {0}".format(match_conditions) if match_conditions else ""
out = frappe.db.sql("""select email_id as value,
concat(first_name, ifnull(concat(' ',last_name), '' )) as description
from tabContact
where name like %(txt)s or email_id like %(txt)s
%(condition)s
limit %(page_length)s""", {
'txt': '%' + txt + '%',
'condition': match_conditions,
'page_length': page_length
}, as_dict=True)
out = filter(None, out)
except:
raise
update_contact_cache(out)
return out
def get_system_managers():
return frappe.db.sql_list("""select parent FROM `tabHas Role`
WHERE role='System Manager'
AND parent!='Administrator'
AND parent IN (SELECT email FROM tabUser WHERE enabled=1)""")
@frappe.whitelist()
def relink(name, reference_doctype=None, reference_name=None):
frappe.db.sql("""update
`tabCommunication`
set
reference_doctype = %s,
reference_name = %s,
status = "Linked"
where
communication_type = "Communication" and
name = %s""", (reference_doctype, reference_name, name))
@frappe.whitelist()
@frappe.validate_and_sanitize_search_inputs
def get_communication_doctype(doctype, txt, searchfield, start, page_len, filters):
user_perms = frappe.utils.user.UserPermissions(frappe.session.user)
user_perms.build_permissions()
can_read = user_perms.can_read
from frappe.modules import load_doctype_module
com_doctypes = []
if len(txt)<2:
for name in frappe.get_hooks("communication_doctypes"):
try:
module = load_doctype_module(name, suffix='_dashboard')
if hasattr(module, 'get_data'):
for i in module.get_data()['transactions']:
com_doctypes += i["items"]
except ImportError:
pass
else:
com_doctypes = [d[0] for d in frappe.db.get_values("DocType", {"issingle": 0, "istable": 0, "hide_toolbar": 0})]
out = []
for dt in com_doctypes:
if txt.lower().replace("%", "") in dt.lower() and dt in can_read:
out.append([dt])
return out
def get_cached_contacts(txt):
contacts = frappe.cache().hget("contacts", frappe.session.user) or []
if not contacts:
return
if not txt:
return contacts
match = [d for d in contacts if (d.value and ((d.value and txt in d.value) or (d.description and txt in d.description)))]
return match
def update_contact_cache(contacts):
cached_contacts = frappe.cache().hget("contacts", frappe.session.user) or []
uncached_contacts = [d for d in contacts if d not in cached_contacts]
cached_contacts.extend(uncached_contacts)
frappe.cache().hset("contacts", frappe.session.user, cached_contacts)