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()) { |  | ||||||
| 		cur_frm.add_custom_button(__('Send Now'), function() { |  | ||||||
| 			return cur_frm.call('send', null, (r) => { |  | ||||||
| 				frappe.show_alert(__('Message Sent')); |  | ||||||
| 			}); | 			}); | ||||||
| 		}); | 		}); | ||||||
|  | 
 | ||||||
|  | 		if (!frm.is_new()) { | ||||||
|  | 			frm.add_custom_button(__('Send Now'), function() { | ||||||
|  | 				return frm.call('send', null, (r) => { | ||||||
|  | 					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