fix!: allow system managers to toggle email queue
This commit is contained in:
parent
04f4fd8cfc
commit
9a7f92ca1d
7 changed files with 68 additions and 45 deletions
|
|
@ -274,13 +274,6 @@ def delete(doctype, name):
|
|||
frappe.delete_doc(doctype, name, ignore_missing=False)
|
||||
|
||||
|
||||
@frappe.whitelist(methods=["POST", "PUT"])
|
||||
def set_default(key, value, parent=None):
|
||||
"""set a user default value"""
|
||||
frappe.db.set_default(key, value, parent or frappe.session.user)
|
||||
frappe.clear_cache(user=frappe.session.user)
|
||||
|
||||
|
||||
@frappe.whitelist(methods=["POST", "PUT"])
|
||||
def bulk_update(docs):
|
||||
"""Bulk update documents
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ from frappe.utils import (
|
|||
get_hook_method,
|
||||
get_string_between,
|
||||
nowdate,
|
||||
sbool,
|
||||
split_emails,
|
||||
)
|
||||
|
||||
|
|
@ -110,8 +111,11 @@ class EmailQueue(Document):
|
|||
return self.status in ["Not Sent", "Partially Sent"]
|
||||
|
||||
def can_send_now(self):
|
||||
hold_queue = cint(frappe.defaults.get_defaults().get("hold_queue")) == 1
|
||||
if frappe.are_emails_muted() or not self.is_to_be_sent() or hold_queue:
|
||||
if (
|
||||
frappe.are_emails_muted()
|
||||
or not self.is_to_be_sent()
|
||||
or cint(frappe.db.get_default("hold_queue")) == 1
|
||||
):
|
||||
return False
|
||||
|
||||
return True
|
||||
|
|
@ -359,6 +363,8 @@ class SendMailContext:
|
|||
@frappe.whitelist()
|
||||
def retry_sending(name):
|
||||
doc = frappe.get_doc("Email Queue", name)
|
||||
doc.check_permission()
|
||||
|
||||
if doc and (doc.status == "Error" or doc.status == "Partially Errored"):
|
||||
doc.status = "Not Sent"
|
||||
for d in doc.recipients:
|
||||
|
|
@ -371,9 +377,16 @@ def retry_sending(name):
|
|||
def send_now(name):
|
||||
record = EmailQueue.find(name)
|
||||
if record:
|
||||
record.check_permission()
|
||||
record.send()
|
||||
|
||||
|
||||
@frappe.whitelist()
|
||||
def toggle_sending(enable):
|
||||
frappe.only_for("System Manager")
|
||||
frappe.db.set_default("hold_queue", 0 if sbool(enable) else 1)
|
||||
|
||||
|
||||
def on_doctype_update():
|
||||
"""Add index in `tabCommunication` for `(reference_doctype, reference_name)`"""
|
||||
frappe.db.add_index(
|
||||
|
|
|
|||
|
|
@ -3,27 +3,37 @@ frappe.listview_settings['Email Queue'] = {
|
|||
var colour = {'Sent': 'green', 'Sending': 'blue', 'Not Sent': 'grey', 'Error': 'red', 'Expired': 'orange'};
|
||||
return [__(doc.status), colour[doc.status], "status,=," + doc.status];
|
||||
},
|
||||
refresh: function(doclist){
|
||||
if (has_common(frappe.user_roles, ["Administrator", "System Manager"])){
|
||||
if (cint(frappe.defaults.get_default("hold_queue"))){
|
||||
doclist.page.clear_inner_toolbar()
|
||||
doclist.page.add_inner_button(__("Resume Sending"), function() {
|
||||
frappe.defaults.set_default("hold_queue", 0);
|
||||
cur_list.refresh();
|
||||
})
|
||||
} else {
|
||||
doclist.page.clear_inner_toolbar()
|
||||
doclist.page.add_inner_button(__("Suspend Sending"), function() {
|
||||
frappe.defaults.set_default("hold_queue", 1)
|
||||
cur_list.refresh();
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
onload: function(listview) {
|
||||
refresh: show_toggle_sending_button,
|
||||
onload: function(list_view) {
|
||||
frappe.require("logtypes.bundle.js", () => {
|
||||
frappe.utils.logtypes.show_log_retention_message(cur_list.doctype);
|
||||
frappe.utils.logtypes.show_log_retention_message(list_view.doctype);
|
||||
})
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
function show_toggle_sending_button(list_view) {
|
||||
if (!has_common(frappe.user_roles, ["Administrator", "System Manager"]))
|
||||
return;
|
||||
|
||||
const sending_disabled = cint(frappe.sys_defaults.hold_queue);
|
||||
const label = sending_disabled ? __("Resume Sending") : __("Suspend Sending");
|
||||
|
||||
list_view.page.add_inner_button(
|
||||
label,
|
||||
async () => {
|
||||
await frappe.xcall(
|
||||
"frappe.email.doctype.email_queue.email_queue.toggle_sending",
|
||||
|
||||
// enable if disabled
|
||||
{enable: sending_disabled}
|
||||
);
|
||||
|
||||
// set new value for hold_queue in sys_defaults
|
||||
frappe.sys_defaults.hold_queue = sending_disabled ? 0 : 1;
|
||||
|
||||
// clear the button and show one with the opposite label
|
||||
list_view.page.remove_inner_button(label);
|
||||
show_toggle_sending_button(list_view);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
|
@ -148,7 +148,7 @@ def flush(from_test=False):
|
|||
msgprint(_("Emails are muted"))
|
||||
from_test = True
|
||||
|
||||
if cint(frappe.defaults.get_defaults().get("hold_queue")) == 1:
|
||||
if cint(frappe.db.get_default("hold_queue")) == 1:
|
||||
return
|
||||
|
||||
for row in get_queue():
|
||||
|
|
|
|||
|
|
@ -205,3 +205,4 @@ frappe.patches.v14_0.update_auto_account_deletion_duration
|
|||
frappe.patches.v14_0.update_integration_request
|
||||
frappe.patches.v14_0.set_document_expiry_default
|
||||
frappe.patches.v14_0.delete_data_migration_tool
|
||||
frappe.patches.v14_0.set_hold_queue_default
|
||||
20
frappe/patches/v14_0/set_hold_queue_default.py
Normal file
20
frappe/patches/v14_0/set_hold_queue_default.py
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
import frappe
|
||||
from frappe.cache_manager import clear_defaults_cache
|
||||
|
||||
|
||||
def execute():
|
||||
frappe.db.set_default(
|
||||
"hold_queue",
|
||||
frappe.db.get_default("hold_queue", "Administrator") or 0,
|
||||
parent="__default",
|
||||
)
|
||||
|
||||
frappe.db.delete(
|
||||
"DefaultValue",
|
||||
{
|
||||
"defkey": "hold_queue",
|
||||
"parent": ("!=", "__default"),
|
||||
},
|
||||
)
|
||||
|
||||
clear_defaults_cache()
|
||||
|
|
@ -47,20 +47,6 @@ frappe.defaults = {
|
|||
if(!$.isArray(d)) d = [d];
|
||||
return d;
|
||||
},
|
||||
set_default: function(key, value, callback) {
|
||||
if(typeof value!=="string")
|
||||
value = JSON.stringify(value);
|
||||
|
||||
frappe.boot.user.defaults[key] = value;
|
||||
return frappe.call({
|
||||
method: "frappe.client.set_default",
|
||||
args: {
|
||||
key: key,
|
||||
value: value
|
||||
},
|
||||
callback: callback || function(r) {}
|
||||
});
|
||||
},
|
||||
set_user_default_local: function(key, value) {
|
||||
frappe.boot.user.defaults[key] = value;
|
||||
},
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue