From ac41e46ed6feeb21e6533a878a16c8860cfb1dc0 Mon Sep 17 00:00:00 2001 From: Rucha Mahabal Date: Sun, 13 Oct 2019 20:48:54 +0530 Subject: [PATCH 01/11] fix(Email): poplib.error_proto exception --- frappe/email/receive.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/email/receive.py b/frappe/email/receive.py index ee7075b570..b8fde57a43 100644 --- a/frappe/email/receive.py +++ b/frappe/email/receive.py @@ -298,7 +298,7 @@ class EmailServer: "Connection timed out", ) for message in messages: - if message in strip(cstr(e.message)) or message in strip(cstr(getattr(e, 'strerror', ''))): + if message in strip(cstr(e)) or message in strip(cstr(getattr(e, 'strerror', ''))): return True return False From 6d85f1215fb175231258f63156fef0482fb1a3f6 Mon Sep 17 00:00:00 2001 From: Shivam Mishra Date: Tue, 12 Nov 2019 17:36:59 +0530 Subject: [PATCH 02/11] fix: formatting for chart tooltip --- .../doctype/razorpay_settings/razorpay_settings.py | 1 - frappe/public/js/frappe/views/reports/report_view.js | 9 +++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/frappe/integrations/doctype/razorpay_settings/razorpay_settings.py b/frappe/integrations/doctype/razorpay_settings/razorpay_settings.py index 26e0de35b5..c6ef12ff08 100644 --- a/frappe/integrations/doctype/razorpay_settings/razorpay_settings.py +++ b/frappe/integrations/doctype/razorpay_settings/razorpay_settings.py @@ -242,7 +242,6 @@ class RazorpaySettings(Document): redirect_to = data.get('redirect_to') or None redirect_message = data.get('redirect_message') or None - if self.flags.status_changed_to in ("Authorized", "Verified", "Completed"): if self.data.reference_doctype and self.data.reference_docname: custom_redirect_to = None diff --git a/frappe/public/js/frappe/views/reports/report_view.js b/frappe/public/js/frappe/views/reports/report_view.js index 6503f1c7ac..b65402e6fe 100644 --- a/frappe/public/js/frappe/views/reports/report_view.js +++ b/frappe/public/js/frappe/views/reports/report_view.js @@ -500,10 +500,11 @@ frappe.views.ReportView = class ReportView extends frappe.views.ListView { axisOptions: { shortenYAxisNumbers: 1 }, - - format_tooltip_x: value => value.doc.name, - format_tooltip_y: - value => frappe.format(value, get_df(value.field), { always_show_decimals: true, inline: true }, get_doc(value.doc)) + tooltipOptions: { + formatTooltipY: value => { + return frappe.format(value, get_df(this.chart_args.y_axes[0]), { always_show_decimals: true, inline: true }, get_doc(value.doc)) + } + } }); } From 4835c87c3fe9a28647fcc011c978dc2d02430684 Mon Sep 17 00:00:00 2001 From: Shivam Mishra Date: Tue, 12 Nov 2019 17:53:26 +0530 Subject: [PATCH 03/11] refactor: code styling --- frappe/public/js/frappe/views/reports/report_view.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/frappe/public/js/frappe/views/reports/report_view.js b/frappe/public/js/frappe/views/reports/report_view.js index b65402e6fe..7f6e24595a 100644 --- a/frappe/public/js/frappe/views/reports/report_view.js +++ b/frappe/public/js/frappe/views/reports/report_view.js @@ -501,9 +501,7 @@ frappe.views.ReportView = class ReportView extends frappe.views.ListView { shortenYAxisNumbers: 1 }, tooltipOptions: { - formatTooltipY: value => { - return frappe.format(value, get_df(this.chart_args.y_axes[0]), { always_show_decimals: true, inline: true }, get_doc(value.doc)) - } + formatTooltipY: value => frappe.format(value, get_df(this.chart_args.y_axes[0]), { always_show_decimals: true, inline: true }, get_doc(value.doc)) } }); } From a7fb0dba577fbd5b7c11fc6c75ffef327ea32930 Mon Sep 17 00:00:00 2001 From: prssanna Date: Wed, 13 Nov 2019 11:48:20 +0530 Subject: [PATCH 04/11] fix(List): save checked rows on auto refresh --- frappe/public/js/frappe/list/list_view.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/frappe/public/js/frappe/list/list_view.js b/frappe/public/js/frappe/list/list_view.js index 6912065e1c..a1fe886484 100644 --- a/frappe/public/js/frappe/list/list_view.js +++ b/frappe/public/js/frappe/list/list_view.js @@ -1077,10 +1077,20 @@ frappe.views.ListView = class ListView extends frappe.views.BaseList { }); this.toggle_result_area(); this.render_list(); + if (this.$checks.length) { + this.set_rows_as_checked(); + } }); }); } + set_rows_as_checked() { + $.each(this.$checks, (i, el) => { + let docname = $(el).attr('data-name'); + this.$result.find(`.list-row-checkbox[data-name='${docname}']`).click(); + }); + } + on_row_checked() { this.$list_head_subject = this.$list_head_subject || this.$result.find('header .list-header-subject'); this.$checkbox_actions = this.$checkbox_actions || this.$result.find('header .checkbox-actions'); From e35af962571bd27b5270d1b664d188f36a44bf6f Mon Sep 17 00:00:00 2001 From: Aditya Hase Date: Wed, 13 Nov 2019 12:01:31 +0530 Subject: [PATCH 05/11] fix(scheduler): Activate scheduler if found inactive --- frappe/public/js/frappe/desk.js | 6 +----- frappe/utils/scheduler.py | 7 +++++++ 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/frappe/public/js/frappe/desk.js b/frappe/public/js/frappe/desk.js index 3deeb02ae4..4fbea6684f 100644 --- a/frappe/public/js/frappe/desk.js +++ b/frappe/public/js/frappe/desk.js @@ -136,11 +136,7 @@ frappe.Application = Class.extend({ method: 'frappe.core.page.background_jobs.background_jobs.get_scheduler_status', callback: function(r) { if (r.message[0] == __("Inactive")) { - frappe.msgprint({ - title: __("Scheduler Inactive"), - indicator: "red", - message: __("Background jobs are not running. Please contact Administrator") - }); + frappe.call('frappe.utils.scheduler.activate_scheduler'); } } }); diff --git a/frappe/utils/scheduler.py b/frappe/utils/scheduler.py index 68c3bc58a8..b46036d996 100755 --- a/frappe/utils/scheduler.py +++ b/frappe/utils/scheduler.py @@ -337,3 +337,10 @@ def get_last_active(): WHERE `user_type` = 'System User' AND `name` NOT IN ({standard_users})""" .format(standard_users=", ".join(["%s"]*len(STANDARD_USERS))), STANDARD_USERS)[0][0] + +@frappe.whitelist() +def activate_scheduler(): + if is_scheduler_disabled(): + enable_scheduler() + if frappe.conf.pause_scheduler: + update_site_config('pause_scheduler', 0) From ac9fe0215c223036dfcc535e64d89784c1e4ed12 Mon Sep 17 00:00:00 2001 From: Faris Ansari Date: Thu, 14 Nov 2019 12:29:52 +0530 Subject: [PATCH 06/11] fix(fileuploader): Handle 403 status code --- frappe/public/js/frappe/file_uploader/FileUploader.vue | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/frappe/public/js/frappe/file_uploader/FileUploader.vue b/frappe/public/js/frappe/file_uploader/FileUploader.vue index dbbde40f2a..845fbf92b4 100644 --- a/frappe/public/js/frappe/file_uploader/FileUploader.vue +++ b/frappe/public/js/frappe/file_uploader/FileUploader.vue @@ -367,6 +367,13 @@ export default { if (this.on_success) { this.on_success(file_doc, r); } + } else if (xhr.status === 403) { + let response = JSON.parse(xhr.responseText); + frappe.msgprint({ + title: __('Not permitted'), + indicator: 'red', + message: response._error_message + }); } else { file.failed = true; let error = null; From 9dad73c3004939f52077c391ae952889472e080e Mon Sep 17 00:00:00 2001 From: Faris Ansari Date: Thu, 14 Nov 2019 12:44:05 +0530 Subject: [PATCH 07/11] test: More robust control link test --- cypress/integration/control_link.js | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/cypress/integration/control_link.js b/cypress/integration/control_link.js index a934132c89..63c99c4d1b 100644 --- a/cypress/integration/control_link.js +++ b/cypress/integration/control_link.js @@ -61,12 +61,18 @@ context('Control Link', () => { cy.server(); cy.route('GET', '/api/method/frappe.desk.form.utils.validate_link*').as('validate_link'); + cy.route('POST', '/api/method/frappe.desk.search.search_link').as('search_link'); cy.get('@todos').then(todos => { - cy.get('.frappe-control[data-fieldname=link] input').type(todos[0]).blur(); + cy.get('.frappe-control[data-fieldname=link] input').as('input'); + cy.get('@input').focus(); + cy.wait('@search_link'); + cy.get('@input').type(todos[0]).blur(); cy.wait('@validate_link'); - cy.get('.frappe-control[data-fieldname=link] input').focus(); - cy.get('.frappe-control[data-fieldname=link] .link-btn').click(); + cy.get('@input').focus(); + cy.get('.frappe-control[data-fieldname=link] .link-btn') + .should('be.visible') + .click(); cy.location('hash').should('eq', `#Form/ToDo/${todos[0]}`); }); }); From a685b10f8e8dce03b75cf2f74524d1d7b3c683de Mon Sep 17 00:00:00 2001 From: deepeshgarg007 Date: Thu, 14 Nov 2019 20:11:21 +0530 Subject: [PATCH 08/11] fix: Show total row in print only if add total row is checked --- .../public/js/frappe/views/reports/query_report.js | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/frappe/public/js/frappe/views/reports/query_report.js b/frappe/public/js/frappe/views/reports/query_report.js index 4b72a6b7b5..560cb3d17b 100644 --- a/frappe/public/js/frappe/views/reports/query_report.js +++ b/frappe/public/js/frappe/views/reports/query_report.js @@ -975,12 +975,15 @@ frappe.views.QueryReport = class QueryReport extends frappe.views.BaseList { return this.data[index]; } }).filter(Boolean); - let totalRow = this.datatable.bodyRenderer.getTotalRow().reduce((row, cell) => { - row[cell.column.id] = cell.content; - return row; - }, {}); - rows.push(totalRow); + if (this.raw_data.add_total_row) { + let totalRow = this.datatable.bodyRenderer.getTotalRow().reduce((row, cell) => { + row[cell.column.id] = cell.content; + return row; + }, {}); + + rows.push(totalRow); + } return rows; } From 1c6881ba3c18f3f2e75070e32165cfa5deb5ecdc Mon Sep 17 00:00:00 2001 From: Suraj Shetty <13928957+surajshetty3416@users.noreply.github.com> Date: Fri, 15 Nov 2019 13:47:32 +0530 Subject: [PATCH 09/11] fix: Make code explicit .click() could have unchecked already checked row (this case may never occur but it's better to explicitly set it as checked) --- frappe/public/js/frappe/list/list_view.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/public/js/frappe/list/list_view.js b/frappe/public/js/frappe/list/list_view.js index a1fe886484..b52b1db542 100644 --- a/frappe/public/js/frappe/list/list_view.js +++ b/frappe/public/js/frappe/list/list_view.js @@ -1087,7 +1087,7 @@ frappe.views.ListView = class ListView extends frappe.views.BaseList { set_rows_as_checked() { $.each(this.$checks, (i, el) => { let docname = $(el).attr('data-name'); - this.$result.find(`.list-row-checkbox[data-name='${docname}']`).click(); + this.$result.find(`.list-row-checkbox[data-name='${docname}']`).prop('checked', true); }); } From 5ae026295d41b788d888ffbe16576185ec11ba32 Mon Sep 17 00:00:00 2001 From: Suraj Shetty <13928957+surajshetty3416@users.noreply.github.com> Date: Fri, 15 Nov 2019 13:53:47 +0530 Subject: [PATCH 10/11] fix: Trigger on_row_checked after checking rows --- frappe/public/js/frappe/list/list_view.js | 1 + 1 file changed, 1 insertion(+) diff --git a/frappe/public/js/frappe/list/list_view.js b/frappe/public/js/frappe/list/list_view.js index b52b1db542..b980ae7684 100644 --- a/frappe/public/js/frappe/list/list_view.js +++ b/frappe/public/js/frappe/list/list_view.js @@ -1089,6 +1089,7 @@ frappe.views.ListView = class ListView extends frappe.views.BaseList { let docname = $(el).attr('data-name'); this.$result.find(`.list-row-checkbox[data-name='${docname}']`).prop('checked', true); }); + this.on_row_checked(); } on_row_checked() { From ab455b46cd454043b0bc37d3f57d942eed97eaf5 Mon Sep 17 00:00:00 2001 From: Aditya Hase Date: Fri, 15 Nov 2019 15:44:39 +0530 Subject: [PATCH 11/11] fix(pdf): Remove unnecessary argument https://docs.python.org/3/library/urllib.parse.html#urllib.parse.quote https://docs.python.org/2/library/urllib.html#urllib.quote --- frappe/utils/response.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/utils/response.py b/frappe/utils/response.py index 886baf2c37..8169986e44 100644 --- a/frappe/utils/response.py +++ b/frappe/utils/response.py @@ -90,7 +90,7 @@ def as_json(): def as_pdf(): response = Response() response.mimetype = "application/pdf" - encoded_filename = quote(frappe.response['filename'].replace(' ', '_'), encoding='utf-8') + encoded_filename = quote(frappe.response['filename'].replace(' ', '_')) response.headers["Content-Disposition"] = ("filename=\"%s\"" % frappe.response['filename'].replace(' ', '_') + ";filename*=utf-8''%s" % encoded_filename).encode("utf-8") response.data = frappe.response['filecontent'] return response