diff --git a/frappe/core/doctype/auto_email_report_party/__init__.py b/frappe/core/doctype/auto_email_report_party/__init__.py
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/frappe/core/doctype/auto_email_report_party/auto_email_report_party.json b/frappe/core/doctype/auto_email_report_party/auto_email_report_party.json
new file mode 100644
index 000000000000..ed6134e2b9f8
--- /dev/null
+++ b/frappe/core/doctype/auto_email_report_party/auto_email_report_party.json
@@ -0,0 +1,41 @@
+{
+ "actions": [],
+ "creation": "2024-09-13 07:54:03.379269",
+ "doctype": "DocType",
+ "editable_grid": 1,
+ "engine": "InnoDB",
+ "field_order": [
+ "link_doctype",
+ "link_name"
+ ],
+ "fields": [
+ {
+ "fieldname": "link_doctype",
+ "fieldtype": "Link",
+ "in_list_view": 1,
+ "label": "Link Document Type",
+ "options": "DocType",
+ "reqd": 1
+ },
+ {
+ "fieldname": "link_name",
+ "fieldtype": "Dynamic Link",
+ "in_list_view": 1,
+ "label": "Link Name",
+ "options": "link_doctype",
+ "reqd": 1
+ }
+ ],
+ "istable": 1,
+ "links": [],
+ "modified": "2024-09-13 08:03:56.175310",
+ "modified_by": "Administrator",
+ "module": "Core",
+ "name": "Auto Email Report Party",
+ "owner": "Administrator",
+ "permissions": [],
+ "quick_entry": 1,
+ "sort_field": "modified",
+ "sort_order": "DESC",
+ "track_changes": 1
+}
\ No newline at end of file
diff --git a/frappe/core/doctype/auto_email_report_party/auto_email_report_party.py b/frappe/core/doctype/auto_email_report_party/auto_email_report_party.py
new file mode 100644
index 000000000000..dfbbf3a68678
--- /dev/null
+++ b/frappe/core/doctype/auto_email_report_party/auto_email_report_party.py
@@ -0,0 +1,8 @@
+# Copyright (c) 2024, Frappe Technologies and contributors
+# For license information, please see license.txt
+
+# import frappe
+from frappe.model.document import Document
+
+class AutoEmailReportParty(Document):
+ pass
diff --git a/frappe/email/doctype/auto_email_report/auto_email_report.js b/frappe/email/doctype/auto_email_report/auto_email_report.js
index 3423c3ccba44..7108a735f7e4 100644
--- a/frappe/email/doctype/auto_email_report/auto_email_report.js
+++ b/frappe/email/doctype/auto_email_report/auto_email_report.js
@@ -31,6 +31,16 @@ frappe.ui.form.on('Auto Email Report', {
frm.set_value('email_to', frappe.session.user);
}
}
+ frm.trigger('setup_queries');
+ manage_filters(frm);
+
+ },
+ onload: function(frm) {
+ frm.trigger('setup_queries');
+ },
+ party: function(frm) {
+ frm.trigger('clear_recipients_table');
+ manage_filters(frm);
},
report: function(frm) {
frm.set_value('filters', '');
@@ -50,10 +60,12 @@ frappe.ui.form.on('Auto Email Report', {
frappe.dom.eval(r.message.script || "");
frm.script_setup_for = frm.doc.report;
frm.trigger('show_filters');
+ frm.trigger('populate_filter_to_override_options');
}
});
} else {
frm.trigger('show_filters');
+ frm.trigger('populate_filter_to_override_options');
}
},
show_filters: function(frm) {
@@ -91,7 +103,7 @@ frappe.ui.form.on('Auto Email Report', {
var report_filters_list = []
$.each(report_filters, function(key, val){
// Remove break fieldtype from the filters
- if(val.fieldtype != 'Break') {
+ if(val.fieldtype != 'Break' && val.hidden != 1) {
report_filters_list.push(val)
}
})
@@ -135,5 +147,114 @@ frappe.ui.form.on('Auto Email Report', {
frm.set_df_property('to_date_field', 'options', date_fields);
frm.toggle_display('dynamic_report_filters_section', date_fields.length > 0);
}
+ },
+ setup_queries: function(frm) {
+ frm.set_query("party", function() {
+ return {
+ query: "frappe.contacts.address_and_contact.filter_dynamic_link_doctypes",
+ filters: {
+ fieldtype: ["in", ["HTML", "Text Editor"]],
+ fieldname: ["in", ["contact_html", "company_description"]],
+ }
+ };
+ });
+ frm.fields_dict['recipients'].grid.get_field('link_doctype').get_query = function() {
+ return {
+ filters: {
+ name: frm.doc.party
+ }
+ };
+ };
+ },
+ clear_recipients_table: function(frm) {
+ let party_value = frm.doc.party;
+ if (party_value) {
+ frm.clear_table('recipients');
+ frm.refresh_field('recipients');
+ }
+ },
+ populate_filter_to_override_options: function(frm) {
+ if (!frm.doc.report_type) {
+ return
+ }
+ let report_filters;
+ if (frm.doc.report_type === 'Custom Report'
+ && frappe.query_reports[frm.doc.reference_report]
+ && frappe.query_reports[frm.doc.reference_report].filters) {
+ report_filters = frappe.query_reports[frm.doc.reference_report].filters;
+ } else {
+ report_filters = frappe.query_reports[frm.doc.report].filters;
+ }
+ if (!report_filters) {
+ return
+ }
+ const keys = report_filters.filter(item => item.fieldname).map(item => item.fieldname);
+ keys.unshift('');
+ frm.fields_dict['filter_to_override'].df.options = keys.join('\n');
+ frm.fields_dict['filter_to_override'].refresh();
}
});
+
+
+frappe.ui.form.on('Auto Email Report Party', {
+ recipients_add: function(frm, cdt, cdn) {
+ let party_value = frm.doc.party;
+ if (party_value) {
+ frappe.model.set_value(cdt, cdn, 'link_doctype', party_value);
+ }
+ }
+});
+
+const manage_filters = (frm) => {
+ if (frm.doc.party) {
+ frappe.model.with_doctype(frm.doc.party, () => set_field_options(frm));
+ } else {
+ reset_filter_and_field(frm);
+ }
+}
+
+const reset_filter_and_field = (frm) => {
+ const filter_wrapper = frm.fields_dict.filter_list.$wrapper;
+ filter_wrapper.empty();
+ frm.filter_list = [];
+};
+
+const set_field_options = (frm) => {
+ const filter_wrapper = frm.fields_dict.filter_list.$wrapper;
+ filter_wrapper.empty();
+ frm.filter_list = new frappe.ui.FilterGroup({
+ parent: filter_wrapper,
+ doctype: frm.doc.party,
+ on_change: () => {
+ frm.call({
+ method: 'frappe.email.doctype.auto_email_report.auto_email_report.get_recipients_by_filter',
+ args: {
+ doctype: frm.doc.party,
+ filters: get_filters(frm),
+ },
+ callback: function(response) {
+ if (response.message) {
+ frm.clear_table('recipients');
+ let names = response.message;
+ names.forEach(name => {
+ frm.add_child('recipients', {
+ link_doctype: frm.doc.party,
+ link_name: name,
+ });
+ });
+ frm.refresh_field('recipients');
+ } else {
+ frm.clear_table('recipients');
+ frm.refresh_field('recipients');
+ }
+ }
+ });
+ },
+ });
+};
+
+const get_filters = (frm) => {
+ return frm.filter_list.get_filters().map(filter => {
+ return filter.slice(0, 4);
+ });
+}
\ No newline at end of file
diff --git a/frappe/email/doctype/auto_email_report/auto_email_report.json b/frappe/email/doctype/auto_email_report/auto_email_report.json
index 211e2e9662ef..5c311a04285a 100644
--- a/frappe/email/doctype/auto_email_report/auto_email_report.json
+++ b/frappe/email/doctype/auto_email_report/auto_email_report.json
@@ -1,238 +1,271 @@
{
- "allow_rename": 1,
- "creation": "2016-09-01 01:34:34.985457",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
- "report",
- "user",
- "enabled",
- "column_break_4",
- "report_type",
- "reference_report",
- "filter_data",
- "send_if_data",
- "data_modified_till",
- "no_of_rows",
- "report_filters",
- "filters_display",
- "filters",
- "filter_meta",
- "dynamic_report_filters_section",
- "from_date_field",
- "to_date_field",
- "column_break_17",
- "dynamic_date_period",
- "email_settings",
- "email_to",
- "day_of_week",
- "column_break_13",
- "frequency",
- "format",
- "section_break_15",
- "description"
- ],
- "fields": [
- {
- "fieldname": "report",
- "fieldtype": "Link",
- "label": "Report",
- "options": "Report",
- "reqd": 1
- },
- {
- "default": "User",
- "fieldname": "user",
- "fieldtype": "Link",
- "label": "Based on Permissions For User",
- "options": "User",
- "reqd": 1
- },
- {
- "default": "1",
- "fieldname": "enabled",
- "fieldtype": "Check",
- "label": "Enabled"
- },
- {
- "fieldname": "column_break_4",
- "fieldtype": "Column Break"
- },
- {
- "fetch_from": "report.report_type",
- "fieldname": "report_type",
- "fieldtype": "Read Only",
- "label": "Report Type"
- },
- {
- "fieldname": "filter_data",
- "fieldtype": "Section Break",
- "label": "Filter Data"
- },
- {
- "default": "1",
- "fieldname": "send_if_data",
- "fieldtype": "Check",
- "label": "Send only if there is any data"
- },
- {
- "depends_on": "eval:doc.report_type=='Report Builder'",
- "description": "Zero means send records updated at anytime",
- "fieldname": "data_modified_till",
- "fieldtype": "Int",
- "label": "Only Send Records Updated in Last X Hours"
- },
- {
- "default": "100",
- "fieldname": "no_of_rows",
- "fieldtype": "Int",
- "label": "No of Rows (Max 500)"
- },
- {
- "collapsible": 1,
- "depends_on": "eval:doc.report_type !== 'Report Builder'",
- "fieldname": "report_filters",
- "fieldtype": "Section Break",
- "label": "Report Filters"
- },
- {
- "fieldname": "filters_display",
- "fieldtype": "HTML",
- "label": "Filters Display"
- },
- {
- "fieldname": "filters",
- "fieldtype": "Text",
- "hidden": 1,
- "label": "Filters"
- },
- {
- "fieldname": "filter_meta",
- "fieldtype": "Text",
- "hidden": 1,
- "label": "Filter Meta",
- "read_only": 1
- },
- {
- "collapsible": 1,
- "depends_on": "eval:doc.report_type !== 'Report Builder'",
- "fieldname": "dynamic_report_filters_section",
- "fieldtype": "Section Break",
- "label": "Dynamic Report Filters"
- },
- {
- "fieldname": "from_date_field",
- "fieldtype": "Select",
- "label": "From Date Field"
- },
- {
- "fieldname": "to_date_field",
- "fieldtype": "Select",
- "label": "To Date Field"
- },
- {
- "fieldname": "column_break_17",
- "fieldtype": "Column Break"
- },
- {
- "fieldname": "dynamic_date_period",
- "fieldtype": "Select",
- "label": "Period",
- "options": "\nDaily\nWeekly\nMonthly\nQuarterly\nHalf Yearly\nYearly"
- },
- {
- "fieldname": "email_settings",
- "fieldtype": "Section Break",
- "label": "Email Settings"
- },
- {
- "description": "For multiple addresses, enter the address on different line. e.g. test@test.com \u23ce test1@test.com",
- "fieldname": "email_to",
- "fieldtype": "Small Text",
- "label": "Email To",
- "reqd": 1
- },
- {
- "default": "Monday",
- "depends_on": "eval:doc.frequency=='Weekly'",
- "fieldname": "day_of_week",
- "fieldtype": "Select",
- "label": "Day of Week",
- "options": "Monday\nTuesday\nWednesday\nThursday\nFriday\nSaturday\nSunday"
- },
- {
- "fieldname": "column_break_13",
- "fieldtype": "Column Break"
- },
- {
- "fieldname": "frequency",
- "fieldtype": "Select",
- "in_list_view": 1,
- "in_standard_filter": 1,
- "label": "Frequency",
- "options": "Daily\nWeekdays\nWeekly\nMonthly",
- "reqd": 1
- },
- {
- "fieldname": "format",
- "fieldtype": "Select",
- "label": "Format",
- "options": "HTML\nXLSX\nCSV",
- "reqd": 1
- },
- {
- "collapsible": 1,
- "fieldname": "section_break_15",
- "fieldtype": "Section Break",
- "label": "Message"
- },
- {
- "fieldname": "description",
- "fieldtype": "Text Editor",
- "label": "Message"
- },
- {
- "fetch_from": "report.reference_report",
- "fieldname": "reference_report",
- "fieldtype": "Data",
- "hidden": 1,
- "label": "Reference Report",
- "read_only": 1
- }
- ],
- "modified": "2021-01-28 15:59:43.151995",
- "modified_by": "Administrator",
- "module": "Email",
- "name": "Auto Email Report",
- "owner": "Administrator",
- "permissions": [
- {
- "create": 1,
- "delete": 1,
- "email": 1,
- "export": 1,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "System Manager",
- "share": 1,
- "write": 1
- },
- {
- "create": 1,
- "delete": 1,
- "email": 1,
- "export": 1,
- "print": 1,
- "read": 1,
- "report": 1,
- "role": "Report Manager",
- "share": 1,
- "write": 1
- }
- ],
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 1
- }
\ No newline at end of file
+ "actions": [],
+ "allow_rename": 1,
+ "creation": "2016-09-01 01:34:34.985457",
+ "doctype": "DocType",
+ "editable_grid": 1,
+ "engine": "InnoDB",
+ "field_order": [
+ "report",
+ "user",
+ "enabled",
+ "column_break_4",
+ "report_type",
+ "reference_report",
+ "filter_data",
+ "send_if_data",
+ "data_modified_till",
+ "no_of_rows",
+ "report_filters",
+ "filters_display",
+ "filters",
+ "filter_meta",
+ "dynamic_report_filters_section",
+ "from_date_field",
+ "to_date_field",
+ "column_break_17",
+ "dynamic_date_period",
+ "email_settings",
+ "email_to",
+ "day_of_week",
+ "column_break_13",
+ "frequency",
+ "format",
+ "recipients_section",
+ "party",
+ "filter_to_override",
+ "filter_list",
+ "recipients",
+ "section_break_15",
+ "description"
+ ],
+ "fields": [
+ {
+ "fieldname": "report",
+ "fieldtype": "Link",
+ "label": "Report",
+ "options": "Report",
+ "reqd": 1
+ },
+ {
+ "default": "User",
+ "fieldname": "user",
+ "fieldtype": "Link",
+ "label": "Based on Permissions For User",
+ "options": "User",
+ "reqd": 1
+ },
+ {
+ "default": "1",
+ "fieldname": "enabled",
+ "fieldtype": "Check",
+ "label": "Enabled"
+ },
+ {
+ "fieldname": "column_break_4",
+ "fieldtype": "Column Break"
+ },
+ {
+ "fetch_from": "report.report_type",
+ "fieldname": "report_type",
+ "fieldtype": "Read Only",
+ "label": "Report Type"
+ },
+ {
+ "fieldname": "filter_data",
+ "fieldtype": "Section Break",
+ "label": "Filter Data"
+ },
+ {
+ "default": "1",
+ "fieldname": "send_if_data",
+ "fieldtype": "Check",
+ "label": "Send only if there is any data"
+ },
+ {
+ "depends_on": "eval:doc.report_type=='Report Builder'",
+ "description": "Zero means send records updated at anytime",
+ "fieldname": "data_modified_till",
+ "fieldtype": "Int",
+ "label": "Only Send Records Updated in Last X Hours"
+ },
+ {
+ "default": "100",
+ "fieldname": "no_of_rows",
+ "fieldtype": "Int",
+ "label": "No of Rows (Max 500)"
+ },
+ {
+ "collapsible": 1,
+ "depends_on": "eval:doc.report_type !== 'Report Builder'",
+ "fieldname": "report_filters",
+ "fieldtype": "Section Break",
+ "label": "Report Filters"
+ },
+ {
+ "fieldname": "filters_display",
+ "fieldtype": "HTML",
+ "label": "Filters Display"
+ },
+ {
+ "fieldname": "filters",
+ "fieldtype": "Text",
+ "hidden": 1,
+ "label": "Filters"
+ },
+ {
+ "fieldname": "filter_meta",
+ "fieldtype": "Text",
+ "hidden": 1,
+ "label": "Filter Meta",
+ "read_only": 1
+ },
+ {
+ "collapsible": 1,
+ "depends_on": "eval:doc.report_type !== 'Report Builder'",
+ "fieldname": "dynamic_report_filters_section",
+ "fieldtype": "Section Break",
+ "label": "Dynamic Report Filters"
+ },
+ {
+ "fieldname": "from_date_field",
+ "fieldtype": "Select",
+ "label": "From Date Field"
+ },
+ {
+ "fieldname": "to_date_field",
+ "fieldtype": "Select",
+ "label": "To Date Field"
+ },
+ {
+ "fieldname": "column_break_17",
+ "fieldtype": "Column Break"
+ },
+ {
+ "fieldname": "dynamic_date_period",
+ "fieldtype": "Select",
+ "label": "Period",
+ "options": "\nDaily\nWeekly\nMonthly\nQuarterly\nHalf Yearly\nYearly"
+ },
+ {
+ "fieldname": "email_settings",
+ "fieldtype": "Section Break",
+ "label": "Email Settings"
+ },
+ {
+ "description": "For multiple addresses, enter the address on different line. e.g. test@test.com \u23ce test1@test.com",
+ "fieldname": "email_to",
+ "fieldtype": "Small Text",
+ "label": "Email To"
+ },
+ {
+ "default": "Monday",
+ "depends_on": "eval:doc.frequency=='Weekly'",
+ "fieldname": "day_of_week",
+ "fieldtype": "Select",
+ "label": "Day of Week",
+ "options": "Monday\nTuesday\nWednesday\nThursday\nFriday\nSaturday\nSunday"
+ },
+ {
+ "fieldname": "column_break_13",
+ "fieldtype": "Column Break"
+ },
+ {
+ "fieldname": "frequency",
+ "fieldtype": "Select",
+ "in_list_view": 1,
+ "in_standard_filter": 1,
+ "label": "Frequency",
+ "options": "Daily\nWeekdays\nWeekly\nMonthly",
+ "reqd": 1
+ },
+ {
+ "fieldname": "format",
+ "fieldtype": "Select",
+ "label": "Format",
+ "options": "HTML\nXLSX\nCSV",
+ "reqd": 1
+ },
+ {
+ "collapsible": 1,
+ "fieldname": "section_break_15",
+ "fieldtype": "Section Break",
+ "label": "Message"
+ },
+ {
+ "fieldname": "description",
+ "fieldtype": "Text Editor",
+ "label": "Message"
+ },
+ {
+ "fetch_from": "report.reference_report",
+ "fieldname": "reference_report",
+ "fieldtype": "Data",
+ "hidden": 1,
+ "label": "Reference Report",
+ "read_only": 1
+ },
+ {
+ "fieldname": "recipients_section",
+ "fieldtype": "Section Break",
+ "label": "Recipients"
+ },
+ {
+ "fieldname": "party",
+ "fieldtype": "Link",
+ "label": "Party",
+ "options": "DocType"
+ },
+ {
+ "fieldname": "recipients",
+ "fieldtype": "Table",
+ "options": "Auto Email Report Party"
+ },
+ {
+ "fieldname": "filter_to_override",
+ "fieldtype": "Select",
+ "label": "Env\u00edo Personalizado"
+ },
+ {
+ "fieldname": "filter_list",
+ "fieldtype": "HTML",
+ "label": "Filter List"
+ }
+ ],
+ "links": [],
+ "modified": "2024-09-20 10:02:13.286565",
+ "modified_by": "Administrator",
+ "module": "Email",
+ "name": "Auto Email Report",
+ "owner": "Administrator",
+ "permissions": [
+ {
+ "create": 1,
+ "delete": 1,
+ "email": 1,
+ "export": 1,
+ "print": 1,
+ "read": 1,
+ "report": 1,
+ "role": "System Manager",
+ "share": 1,
+ "write": 1
+ },
+ {
+ "create": 1,
+ "delete": 1,
+ "email": 1,
+ "export": 1,
+ "print": 1,
+ "read": 1,
+ "report": 1,
+ "role": "Report Manager",
+ "share": 1,
+ "write": 1
+ }
+ ],
+ "route": "app/doctype/Auto%20Email%20Report",
+ "sort_field": "modified",
+ "sort_order": "DESC",
+ "track_changes": 1
+}
\ No newline at end of file
diff --git a/frappe/email/doctype/auto_email_report/auto_email_report.py b/frappe/email/doctype/auto_email_report/auto_email_report.py
index 5d1da23ff6ea..4e0b7b13bef5 100644
--- a/frappe/email/doctype/auto_email_report/auto_email_report.py
+++ b/frappe/email/doctype/auto_email_report/auto_email_report.py
@@ -6,6 +6,7 @@
import calendar
from datetime import timedelta
+from json import JSONDecodeError
import frappe
from frappe import _
@@ -72,8 +73,14 @@ def validate_mandatory_fields(self):
msg= _('Following Report Filters have missing values:') +
'