From dbb3dd178b68bfd48d9650e37fad0e4efe7437e0 Mon Sep 17 00:00:00 2001 From: Faris Ansari Date: Wed, 14 Nov 2018 14:06:25 +0530 Subject: [PATCH 1/8] fix(filters): via Awesome bar and dashboard --- frappe/public/js/frappe/list/base_list.js | 11 +++++- frappe/public/js/frappe/list/list_view.js | 47 +++++++++++++---------- 2 files changed, 37 insertions(+), 21 deletions(-) diff --git a/frappe/public/js/frappe/list/base_list.js b/frappe/public/js/frappe/list/base_list.js index c725b774de..18d4257876 100644 --- a/frappe/public/js/frappe/list/base_list.js +++ b/frappe/public/js/frappe/list/base_list.js @@ -6,7 +6,11 @@ frappe.views.BaseList = class BaseList { } show() { - this.init().then(() => this.refresh()); + frappe.run_serially([ + () => this.init(), + () => this.before_refresh(), + () => this.refresh() + ]); } init() { @@ -344,6 +348,11 @@ frappe.views.BaseList = class BaseList { }; } + before_refresh() { + // modify args here just before making the request + // see list_view.js + } + refresh() { this.freeze(true); // fetch data from server diff --git a/frappe/public/js/frappe/list/list_view.js b/frappe/public/js/frappe/list/list_view.js index 8a633ac7d3..433dd286a3 100644 --- a/frappe/public/js/frappe/list/list_view.js +++ b/frappe/public/js/frappe/list/list_view.js @@ -34,7 +34,7 @@ frappe.views.ListView = class ListView extends frappe.views.BaseList { return; } - this.init().then(() => this.refresh()); + super.show(); } get view_name() { @@ -48,25 +48,6 @@ frappe.views.ListView = class ListView extends frappe.views.BaseList { setup_defaults() { super.setup_defaults(); - if (frappe.route_options) { - // Priority 1: route filters - this.filters = this.parse_filters_from_route_options(); - } else if (this.view_user_settings.filters) { - // Priority 2: saved filters - const saved_filters = this.view_user_settings.filters; - this.filters = this.validate_filters(saved_filters); - } else { - // Priority 3: filters in listview_settings - const filters = (this.settings.filters || []).map(f => { - if (f.length === 3) { - f = [this.doctype, f[0], f[1], f[2]]; - } - return f; - }); - - this.filters = filters; - } - // initialize with saved order by this.sort_by = this.view_user_settings.sort_by || 'modified'; this.sort_order = this.view_user_settings.sort_order || 'desc'; @@ -283,6 +264,32 @@ frappe.views.ListView = class ListView extends frappe.views.BaseList { }); } + before_refresh() { + if (frappe.route_options) { + // Priority 1: route filters + this.filters = this.parse_filters_from_route_options(); + } else if (this.view_user_settings.filters) { + // Priority 2: saved filters + const saved_filters = this.view_user_settings.filters; + this.filters = this.validate_filters(saved_filters); + } else { + // Priority 3: filters in listview_settings + this.filters = (this.settings.filters || []).map(f => { + if (f.length === 3) { + f = [this.doctype, f[0], f[1], f[2]]; + } + return f; + }); + } + + if (this.filters.length) { + return this.filter_area.clear(false) + .then(() => this.filter_area.set(this.filters)); + } + + return Promise.resolve(); + } + toggle_result_area() { super.toggle_result_area(); this.toggle_actions_menu_button( From 81304a72fc264df67fa42d2ed891ec19bdaa442b Mon Sep 17 00:00:00 2001 From: deepeshgarg007 Date: Wed, 14 Nov 2018 17:44:50 +0530 Subject: [PATCH 2/8] Sales Invoice dashboard add button fix --- frappe/public/js/legacy/form.js | 42 +++++++++++++++------------------ 1 file changed, 19 insertions(+), 23 deletions(-) diff --git a/frappe/public/js/legacy/form.js b/frappe/public/js/legacy/form.js index 2193e25610..f2c26566dd 100644 --- a/frappe/public/js/legacy/form.js +++ b/frappe/public/js/legacy/form.js @@ -496,29 +496,25 @@ _f.Frm.prototype.render_form = function(is_a_different_doc) { // clear layout message this.layout.show_message(); - // header must be refreshed before client methods - // because add_custom_button - this.refresh_header(is_a_different_doc); - - // call trigger - this.script_manager.trigger("refresh"); - - // trigger global trigger - // to use this - $(document).trigger('form-refresh', [this]); - - // fields - this.refresh_fields(); - - - // call onload post render for callbacks to be fired - if(this.cscript.is_onload) { - this.script_manager.trigger("onload_post_render"); - } - - // update dashboard after refresh - frappe.timeout(0.1).then(() => this.dashboard.after_refresh()); - + frappe.run_serially([ + // header must be refreshed before client methods + // because add_custom_button + () => this.refresh_header(is_a_different_doc), + // call trigger + () => this.script_manager.trigger("refresh"), + // trigger global trigger + // to use this + () => $(document).trigger('form-refresh', [this]), + // fields + () => this.refresh_fields(), + // call onload post render for callbacks to be fired + () => { + if(this.cscript.is_onload) { + return this.script_manager.trigger("onload_post_render"); + } + }, + () => this.dashboard.after_refresh() + ]); // focus on first input if(this.is_new()) { From e900deb0467d4e487dd0b25cd874793733dc2662 Mon Sep 17 00:00:00 2001 From: Alchez Date: Thu, 15 Nov 2018 15:56:02 +0530 Subject: [PATCH 3/8] Allow email reports to be sent only on weekdays (#6457) * feat(auto_email_report): Allow email reports to be sent only on weekdays * feat(auto_email_report): Fix indent * fix: Remove boilerplate file --- .../auto_email_report/auto_email_report.json | 75 ++++++++++++------- .../auto_email_report/auto_email_report.py | 42 ++++++----- 2 files changed, 74 insertions(+), 43 deletions(-) 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 a376497e5d..f04f34cdba 100644 --- a/frappe/email/doctype/auto_email_report/auto_email_report.json +++ b/frappe/email/doctype/auto_email_report/auto_email_report.json @@ -1,5 +1,6 @@ { "allow_copy": 0, + "allow_events_in_timeline": 0, "allow_guest_to_view": 0, "allow_import": 0, "allow_rename": 1, @@ -15,6 +16,7 @@ "fields": [ { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -42,11 +44,12 @@ "reqd": 1, "search_index": 0, "set_only_once": 0, - "translatable": 0, + "translatable": 0, "unique": 0 }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -75,11 +78,12 @@ "reqd": 1, "search_index": 0, "set_only_once": 0, - "translatable": 0, + "translatable": 0, "unique": 0 }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -107,11 +111,12 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, - "translatable": 0, + "translatable": 0, "unique": 0 }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -137,16 +142,17 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, - "translatable": 0, + "translatable": 0, "unique": 0 }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, "columns": 0, - "fetch_from": "report.report_type", + "fetch_from": "report.report_type", "fieldname": "report_type", "fieldtype": "Read Only", "hidden": 0, @@ -170,11 +176,12 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, - "translatable": 0, + "translatable": 0, "unique": 0 }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -201,11 +208,12 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, - "translatable": 0, + "translatable": 0, "unique": 0 }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -233,11 +241,12 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, - "translatable": 0, + "translatable": 0, "unique": 0 }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -267,11 +276,12 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, - "translatable": 0, + "translatable": 0, "unique": 0 }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -300,14 +310,15 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, - "translatable": 0, + "translatable": 0, "unique": 0 }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, - "collapsible": 0, + "collapsible": 1, "columns": 0, "depends_on": "eval:doc.report_type !== 'Report Builder'", "fieldname": "report_filters", @@ -332,11 +343,12 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, - "translatable": 0, + "translatable": 0, "unique": 0 }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -363,11 +375,12 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, - "translatable": 0, + "translatable": 0, "unique": 0 }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -394,11 +407,12 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, - "translatable": 0, + "translatable": 0, "unique": 0 }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -425,11 +439,12 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, - "translatable": 0, + "translatable": 0, "unique": 0 }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -456,11 +471,12 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, - "translatable": 0, + "translatable": 0, "unique": 0 }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -487,11 +503,12 @@ "reqd": 1, "search_index": 0, "set_only_once": 0, - "translatable": 0, + "translatable": 0, "unique": 0 }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -521,11 +538,12 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, - "translatable": 0, + "translatable": 0, "unique": 0 }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -551,11 +569,12 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, - "translatable": 0, + "translatable": 0, "unique": 0 }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -572,7 +591,7 @@ "label": "Frequency", "length": 0, "no_copy": 0, - "options": "Daily\nWeekly\nMonthly", + "options": "Daily\nWeekdays\nWeekly\nMonthly", "permlevel": 0, "precision": "", "print_hide": 0, @@ -583,11 +602,12 @@ "reqd": 1, "search_index": 0, "set_only_once": 0, - "translatable": 0, + "translatable": 0, "unique": 0 }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -615,11 +635,12 @@ "reqd": 1, "search_index": 0, "set_only_once": 0, - "translatable": 0, + "translatable": 0, "unique": 0 }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 1, @@ -646,11 +667,12 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, - "translatable": 0, + "translatable": 0, "unique": 0 }, { "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, "allow_on_submit": 0, "bold": 0, "collapsible": 0, @@ -677,7 +699,7 @@ "reqd": 0, "search_index": 0, "set_only_once": 0, - "translatable": 0, + "translatable": 0, "unique": 0 } ], @@ -691,7 +713,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2018-05-16 22:42:57.093530", + "modified": "2018-11-13 01:59:17.816718", "modified_by": "Administrator", "module": "Email", "name": "Auto Email Report", @@ -744,5 +766,6 @@ "sort_field": "modified", "sort_order": "DESC", "track_changes": 1, - "track_seen": 0 + "track_seen": 0, + "track_views": 0 } \ 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 f896f441f5..840ae95322 100644 --- a/frappe/email/doctype/auto_email_report/auto_email_report.py +++ b/frappe/email/doctype/auto_email_report/auto_email_report.py @@ -3,17 +3,22 @@ # For license information, please see license.txt from __future__ import unicode_literals -import frappe, json + +import calendar +import json +from datetime import timedelta + +import frappe from frappe import _ from frappe.model.document import Document -from datetime import timedelta -import frappe.utils -from frappe.utils import now, global_date_format, format_time -from frappe.utils.xlsxutils import make_xlsx +from frappe.utils import (format_time, get_link_to_form, get_url_to_report, + global_date_format, now, now_datetime, validate_email_add) from frappe.utils.csvutils import to_csv +from frappe.utils.xlsxutils import make_xlsx max_reports_per_user = frappe.local.conf.max_reports_per_user or 3 + class AutoEmailReport(Document): def autoname(self): self.name = _(self.report) @@ -31,7 +36,7 @@ class AutoEmailReport(Document): valid = [] for email in self.email_to.split(): if email: - frappe.utils.validate_email_add(email, True) + validate_email_add(email, True) valid.append(email) self.email_to = '\n'.join(valid) @@ -55,7 +60,7 @@ class AutoEmailReport(Document): if self.report_type=='Report Builder' and self.data_modified_till: self.filters = json.loads(self.filters) if self.filters else {} - self.filters['modified'] = ('>', frappe.utils.now_datetime() - timedelta(hours=self.data_modified_till)) + self.filters['modified'] = ('>', now_datetime() - timedelta(hours=self.data_modified_till)) columns, data = report.get_data(limit=self.no_of_rows or 100, user = self.user, filters = self.filters, as_dict=True) @@ -94,11 +99,9 @@ class AutoEmailReport(Document): 'date_time': date_time, 'columns': columns, 'data': data, - 'report_url': frappe.utils.get_url_to_report(self.report, - self.report_type, report_doctype), + 'report_url': get_url_to_report(self.report, self.report_type, report_doctype), 'report_name': self.report, - 'edit_report_settings': frappe.utils.get_link_to_form('Auto Email Report', - self.name) + 'edit_report_settings': get_link_to_form('Auto Email Report', self.name) }) @staticmethod @@ -169,15 +172,20 @@ def send_now(name): def send_daily(): '''Check reports to be sent daily''' - now = frappe.utils.now_datetime() - for report in frappe.get_all('Auto Email Report', - {'enabled': 1, 'frequency': ('in', ('Daily', 'Weekly'))}): + + current_day = calendar.day_name[now_datetime().weekday()] + enabled_reports = frappe.get_all('Auto Email Report', + filters={'enabled': 1, 'frequency': ('in', ('Daily', 'Weekdays', 'Weekly'))}) + + for report in enabled_reports: auto_email_report = frappe.get_doc('Auto Email Report', report.name) # if not correct weekday, skip - if auto_email_report.frequency=='Weekly': - if now.weekday()!={'Monday':0,'Tuesday':1,'Wednesday':2, - 'Thursday':3,'Friday':4,'Saturday':5,'Sunday':6}[auto_email_report.day_of_week]: + if auto_email_report.frequency == "Weekdays": + if current_day in ("Saturday", "Sunday"): + continue + elif auto_email_report.frequency == 'Weekly': + if auto_email_report.day_of_week != current_day: continue auto_email_report.send() From ca59cdc3732f7f9529c28382debbff4baf26ba92 Mon Sep 17 00:00:00 2001 From: Chinmay Pai Date: Thu, 15 Nov 2018 16:39:42 +0530 Subject: [PATCH 4/8] redis: freeze requirement to 2.10.6 the new redis 3.0.0 update has breaking changes, so we freeze the version to 2.10.6 for now. --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index ea4de43fdc..6e7fe2eb16 100644 --- a/requirements.txt +++ b/requirements.txt @@ -18,7 +18,7 @@ werkzeug semantic_version rauth>=0.6.2 requests -redis +redis==2.10.6 selenium babel ipython From f3d01d787001af63f57ef23f3fa5939ff1c7674c Mon Sep 17 00:00:00 2001 From: Frappe Bot Date: Thu, 15 Nov 2018 11:17:59 +0000 Subject: [PATCH 5/8] bumped to version 10.1.62 --- frappe/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/__init__.py b/frappe/__init__.py index 2cbdfea0f2..ace5746720 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -14,7 +14,7 @@ import os, sys, importlib, inspect, json from .exceptions import * from .utils.jinja import get_jenv, get_template, render_template, get_email_from_template -__version__ = '10.1.61' +__version__ = '10.1.62' __title__ = "Frappe Framework" local = Local() From 564d459dbc946b87b3aeefc149b56a5dbeb3ae42 Mon Sep 17 00:00:00 2001 From: Ameya Shenoy Date: Fri, 16 Nov 2018 06:11:02 +0530 Subject: [PATCH 6/8] fix(requirements): lockdown python requirements (#6481) --- requirements.txt | 88 ++++++++++++++++++++++++------------------------ 1 file changed, 44 insertions(+), 44 deletions(-) diff --git a/requirements.txt b/requirements.txt index f5b80fb1a1..91e57e2f19 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,53 +1,53 @@ -boto3 -chardet -cssmin +boto3==1.9.45 +chardet==3.0.4 +cssmin==0.2.0 dropbox==7.3.1 -gunicorn -httplib2 -jinja2 -markdown2 -markupsafe -PyMySQL -python-geoip -python-geoip-geolite2 -python-dateutil -pytz -six -termcolor -werkzeug -semantic_version +gunicorn==19.9.0 +httplib2==0.12.0 +jinja2==2.10 +markdown2==2.3.6 +markupsafe==1.1.0 +PyMySQL==0.9.2 +python-geoip==1.2 +python-geoip-geolite2==2015.303 +python-dateutil==2.7.5 +pytz==2018.7 +six==1.11.0 +termcolor==1.1.0 +werkzeug==0.14.1 +semantic_version==2.6.0 rauth>=0.6.2 -requests +requests==2.20.1 redis==2.10.6 -selenium -babel -ipython +selenium==3.141.0 +babel==2.6.0 +ipython==5.8.0 html2text==2016.9.19 -email_reply_parser -click +email_reply_parser==0.5.9 +click==7.0 num2words==0.5.5 watchdog==0.8.0 bleach==2.1.4 -bleach-whitelist -Pillow -beautifulsoup4 -rq -schedule -cryptography -pyopenssl -ndg-httpsclient -pyasn1 -zxcvbn-python -unittest-xml-reporting -oauthlib -PyJWT -PyPDF2 -openpyxl -pyotp -pyqrcode -pypng -premailer -croniter -googlemaps +bleach-whitelist==0.0.9 +Pillow==5.3.0 +beautifulsoup4==4.6.3 +rq==0.12.0 +schedule==0.5.0 +cryptography==2.4.1 +pyopenssl==18.0.0 +ndg-httpsclient==0.5.1 +pyasn1==0.4.4 +zxcvbn-python==4.4.24 +unittest-xml-reporting==2.2.0 +oauthlib==2.1.0 +PyJWT==1.6.4 +PyPDF2==1.26.0 +openpyxl==2.5.10 +pyotp==2.2.7 +pyqrcode==1.2.1 +pypng==0.0.18 +premailer==3.2.0 +croniter==0.3.26 +googlemaps==3.0.2 urllib3==1.23 GitPython==2.1.11 From 74c8015b00d1ee5aa626e146967b1371caf2098f Mon Sep 17 00:00:00 2001 From: Frappe Bot Date: Fri, 16 Nov 2018 08:22:03 +0000 Subject: [PATCH 7/8] bumped to version 10.1.63 --- frappe/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/__init__.py b/frappe/__init__.py index ace5746720..df81841011 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -14,7 +14,7 @@ import os, sys, importlib, inspect, json from .exceptions import * from .utils.jinja import get_jenv, get_template, render_template, get_email_from_template -__version__ = '10.1.62' +__version__ = '10.1.63' __title__ = "Frappe Framework" local = Local() From 543ccc3df7fb35b15114ed46ec2d060bccc39786 Mon Sep 17 00:00:00 2001 From: Frappe Bot Date: Fri, 16 Nov 2018 08:32:18 +0000 Subject: [PATCH 8/8] bumped to version 11.0.3-beta.28 --- frappe/hooks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/hooks.py b/frappe/hooks.py index edd2a4f410..d8610c8b87 100644 --- a/frappe/hooks.py +++ b/frappe/hooks.py @@ -12,7 +12,7 @@ source_link = "https://github.com/frappe/frappe" app_license = "MIT" develop_version = '12.x.x-develop' -staging_version = '11.0.3-beta.27' +staging_version = '11.0.3-beta.28' app_email = "info@frappe.io"