fix: multiselect recipients in Email Digest
This commit is contained in:
parent
f6b4eb27ab
commit
01b37ad704
@ -722,3 +722,4 @@ erpnext.patches.v13_0.stock_entry_enhancements
|
|||||||
erpnext.patches.v12_0.update_state_code_for_daman_and_diu
|
erpnext.patches.v12_0.update_state_code_for_daman_and_diu
|
||||||
erpnext.patches.v12_0.rename_lost_reason_detail
|
erpnext.patches.v12_0.rename_lost_reason_detail
|
||||||
erpnext.patches.v13_0.update_start_end_date_for_old_shift_assignment
|
erpnext.patches.v13_0.update_start_end_date_for_old_shift_assignment
|
||||||
|
erpnext.patches.v13_0.update_recipient_email_digest
|
||||||
|
20
erpnext/patches/v13_0/update_recipient_email_digest.py
Normal file
20
erpnext/patches/v13_0/update_recipient_email_digest.py
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
# Copyright (c) 2020, Frappe and Contributors
|
||||||
|
# License: GNU General Public License v3. See license.txt
|
||||||
|
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
import frappe
|
||||||
|
|
||||||
|
def execute():
|
||||||
|
frappe.reload_doc("setup", "doctype", "Email Digest")
|
||||||
|
email_digests = frappe.db.get_list('Email Digest', fields=['name', 'recipient_list'])
|
||||||
|
for email_digest in email_digests:
|
||||||
|
if email_digest.recipient_list:
|
||||||
|
for recipient in email_digest.recipient_list.split("\n"):
|
||||||
|
doc = frappe.get_doc({
|
||||||
|
'doctype': 'Email Digest Recipient',
|
||||||
|
'parenttype': 'Email Digest',
|
||||||
|
'parentfield': 'recipients',
|
||||||
|
'parent': email_digest.name,
|
||||||
|
'recipient': recipient
|
||||||
|
})
|
||||||
|
doc.insert()
|
@ -1,78 +1,31 @@
|
|||||||
// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
|
// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
|
||||||
// License: GNU General Public License v3. See license.txt
|
// License: GNU General Public License v3. See license.txt
|
||||||
|
|
||||||
cur_frm.cscript.refresh = function(doc, dt, dn) {
|
frappe.ui.form.on("Email Digest", {
|
||||||
doc = locals[dt][dn];
|
refresh: function(frm) {
|
||||||
cur_frm.add_custom_button(__('View Now'), function() {
|
frm.add_custom_button(__('View Now'), function() {
|
||||||
frappe.call({
|
frappe.call({
|
||||||
method: 'erpnext.setup.doctype.email_digest.email_digest.get_digest_msg',
|
method: 'erpnext.setup.doctype.email_digest.email_digest.get_digest_msg',
|
||||||
args: {
|
args: {
|
||||||
name: doc.name
|
name: frm.doc.name
|
||||||
},
|
},
|
||||||
callback: function(r) {
|
callback: function(r) {
|
||||||
var d = new frappe.ui.Dialog({
|
var d = new frappe.ui.Dialog({
|
||||||
title: __('Email Digest: ') + dn,
|
title: __('Email Digest: ') + frm.doc.name,
|
||||||
width: 800
|
width: 800
|
||||||
});
|
});
|
||||||
$(d.body).html(r.message);
|
$(d.body).html(r.message);
|
||||||
d.show();
|
d.show();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}, "fa fa-eye-open", "btn-default");
|
});
|
||||||
|
|
||||||
if (!cur_frm.is_new()) {
|
if (!frm.is_new()) {
|
||||||
cur_frm.add_custom_button(__('Send Now'), function() {
|
frm.add_custom_button(__('Send Now'), function() {
|
||||||
return cur_frm.call('send', null, (r) => {
|
return frm.call('send', null, (r) => {
|
||||||
frappe.show_alert(__('Message Sent'));
|
frappe.show_alert({message:__("Message Sent"), indicator:'green'});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
|
||||||
|
|
||||||
cur_frm.cscript.addremove_recipients = function(doc, dt, dn) {
|
|
||||||
// Get user list
|
|
||||||
|
|
||||||
return cur_frm.call('get_users', null, function(r) {
|
|
||||||
// Open a dialog and display checkboxes against email addresses
|
|
||||||
doc = locals[dt][dn];
|
|
||||||
var d = new frappe.ui.Dialog({
|
|
||||||
title: __('Add/Remove Recipients'),
|
|
||||||
width: 400
|
|
||||||
});
|
|
||||||
|
|
||||||
$.each(r.user_list, function(i, v) {
|
|
||||||
var fullname = frappe.user.full_name(v.name);
|
|
||||||
if(fullname !== v.name) fullname = fullname + " <" + v.name + ">";
|
|
||||||
|
|
||||||
if(v.enabled==0) {
|
|
||||||
fullname = repl("<span style='color: red'> %(name)s (" + __("disabled user") + ")</span>", {name: v.name});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$('<div class="checkbox"><label>\
|
|
||||||
<input type="checkbox" data-id="' + v.name + '"'+
|
|
||||||
(v.checked ? 'checked' : '') +
|
|
||||||
'> '+ fullname +'</label></div>').appendTo(d.body);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// Display add recipients button
|
|
||||||
d.set_primary_action("Update", function() {
|
|
||||||
cur_frm.cscript.add_to_rec_list(doc, d.body, r.user_list.length);
|
|
||||||
});
|
|
||||||
|
|
||||||
cur_frm.rec_dialog = d;
|
|
||||||
d.show();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
cur_frm.cscript.add_to_rec_list = function(doc, dialog, length) {
|
|
||||||
// add checked users to list of recipients
|
|
||||||
var rec_list = [];
|
|
||||||
$(dialog).find('input:checked').each(function(i, input) {
|
|
||||||
rec_list.push($(input).attr('data-id'));
|
|
||||||
});
|
|
||||||
|
|
||||||
doc.recipient_list = rec_list.join('\n');
|
|
||||||
cur_frm.rec_dialog.hide();
|
|
||||||
cur_frm.save();
|
|
||||||
cur_frm.refresh_fields();
|
|
||||||
}
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -24,40 +24,26 @@ class EmailDigest(Document):
|
|||||||
self._accounts = {}
|
self._accounts = {}
|
||||||
self.currency = frappe.db.get_value('Company', self.company, "default_currency")
|
self.currency = frappe.db.get_value('Company', self.company, "default_currency")
|
||||||
|
|
||||||
def get_users(self):
|
|
||||||
"""get list of users"""
|
|
||||||
user_list = frappe.db.sql("""
|
|
||||||
select name, enabled from tabUser
|
|
||||||
where name not in ({})
|
|
||||||
and user_type != "Website User"
|
|
||||||
order by enabled desc, name asc""".format(", ".join(["%s"]*len(STANDARD_USERS))), STANDARD_USERS, as_dict=1)
|
|
||||||
|
|
||||||
if self.recipient_list:
|
|
||||||
recipient_list = self.recipient_list.split("\n")
|
|
||||||
else:
|
|
||||||
recipient_list = []
|
|
||||||
for p in user_list:
|
|
||||||
p["checked"] = p["name"] in recipient_list and 1 or 0
|
|
||||||
|
|
||||||
frappe.response['user_list'] = user_list
|
|
||||||
|
|
||||||
def send(self):
|
def send(self):
|
||||||
# send email only to enabled users
|
# send email only to enabled users
|
||||||
valid_users = [p[0] for p in frappe.db.sql("""select name from `tabUser`
|
valid_users = [p[0] for p in frappe.db.sql("""select name from `tabUser`
|
||||||
where enabled=1""")]
|
where enabled=1""")]
|
||||||
recipients = list(filter(lambda r: r in valid_users,
|
recipients = frappe.db.get_list('Email Digest Recipient',
|
||||||
self.recipient_list.split("\n")))
|
filters={
|
||||||
|
'parent': self.name
|
||||||
|
},
|
||||||
|
fields=['recipient'])
|
||||||
|
|
||||||
original_user = frappe.session.user
|
original_user = frappe.session.user
|
||||||
|
|
||||||
if recipients:
|
if recipients:
|
||||||
for user_id in recipients:
|
for user in recipients:
|
||||||
frappe.set_user(user_id)
|
frappe.set_user(user.recipient)
|
||||||
frappe.set_user_lang(user_id)
|
frappe.set_user_lang(user.recipient)
|
||||||
msg_for_this_recipient = self.get_msg_html()
|
msg_for_this_recipient = self.get_msg_html()
|
||||||
if msg_for_this_recipient:
|
if msg_for_this_recipient:
|
||||||
frappe.sendmail(
|
frappe.sendmail(
|
||||||
recipients=user_id,
|
recipients=user.recipient,
|
||||||
subject=_("{0} Digest").format(self.frequency),
|
subject=_("{0} Digest").format(self.frequency),
|
||||||
message=msg_for_this_recipient,
|
message=msg_for_this_recipient,
|
||||||
reference_doctype = self.doctype,
|
reference_doctype = self.doctype,
|
||||||
|
@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
"actions": [],
|
||||||
|
"creation": "2020-06-08 12:19:40.428949",
|
||||||
|
"doctype": "DocType",
|
||||||
|
"editable_grid": 1,
|
||||||
|
"engine": "InnoDB",
|
||||||
|
"field_order": [
|
||||||
|
"recipient"
|
||||||
|
],
|
||||||
|
"fields": [
|
||||||
|
{
|
||||||
|
"fieldname": "recipient",
|
||||||
|
"fieldtype": "Link",
|
||||||
|
"in_list_view": 1,
|
||||||
|
"label": "Recipient",
|
||||||
|
"options": "User",
|
||||||
|
"reqd": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"index_web_pages_for_search": 1,
|
||||||
|
"istable": 1,
|
||||||
|
"links": [],
|
||||||
|
"modified": "2020-08-24 23:10:23.217572",
|
||||||
|
"modified_by": "Administrator",
|
||||||
|
"module": "Setup",
|
||||||
|
"name": "Email Digest Recipient",
|
||||||
|
"owner": "Administrator",
|
||||||
|
"permissions": [],
|
||||||
|
"quick_entry": 1,
|
||||||
|
"sort_field": "modified",
|
||||||
|
"sort_order": "DESC",
|
||||||
|
"track_changes": 1
|
||||||
|
}
|
@ -0,0 +1,10 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
|
||||||
|
# For license information, please see license.txt
|
||||||
|
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
# import frappe
|
||||||
|
from frappe.model.document import Document
|
||||||
|
|
||||||
|
class EmailDigestRecipient(Document):
|
||||||
|
pass
|
Loading…
x
Reference in New Issue
Block a user