From 439effed7dc2ee8a0642b8e553e8ed89aec2415e Mon Sep 17 00:00:00 2001 From: Ameya Shenoy Date: Sun, 6 May 2018 11:59:00 +0530 Subject: [PATCH 1/5] Rebuild help for docs which have been renamed (#5521) After execution of a bulk rename, the help cache for the particular doctype didn't used to change. Added this fix to ensure the help is rebuilt for the particular doctype whose docs have been renamed --- frappe/model/rename_doc.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/frappe/model/rename_doc.py b/frappe/model/rename_doc.py index cc502016ea..732b85456b 100644 --- a/frappe/model/rename_doc.py +++ b/frappe/model/rename_doc.py @@ -390,6 +390,8 @@ def bulk_rename(doctype, rows=None, via_console = False): else: rename_log.append(msg) + frappe.enqueue('frappe.utils.global_search.rebuild_for_doctype', doctype=doctype) + if not via_console: return rename_log From 09cbf49ff1424f0d23cb18fdb240d87a79f938ff Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 8 May 2018 15:12:00 +0530 Subject: [PATCH 2/5] Increase the length of Singles table columns (#5540) --- .../role_permission_for_page_and_report.py | 9 +++++---- frappe/patches.txt | 3 ++- .../patches/v10_0/increase_single_table_column_length.py | 8 ++++++++ 3 files changed, 15 insertions(+), 5 deletions(-) create mode 100644 frappe/patches/v10_0/increase_single_table_column_length.py diff --git a/frappe/core/doctype/role_permission_for_page_and_report/role_permission_for_page_and_report.py b/frappe/core/doctype/role_permission_for_page_and_report/role_permission_for_page_and_report.py index 4df27b9b10..f05e187972 100644 --- a/frappe/core/doctype/role_permission_for_page_and_report/role_permission_for_page_and_report.py +++ b/frappe/core/doctype/role_permission_for_page_and_report/role_permission_for_page_and_report.py @@ -61,10 +61,11 @@ class RolePermissionforPageandReport(Document): def get_roles(self): roles = [] for data in self.roles: - roles.append({ - 'role': data.role, - 'parenttype': 'Custom Role' - }) + if data.role != "All": + roles.append({ + 'role': data.role, + 'parenttype': 'Custom Role' + }) return roles def update_status(self): diff --git a/frappe/patches.txt b/frappe/patches.txt index 02c235d132..d57b103aad 100644 --- a/frappe/patches.txt +++ b/frappe/patches.txt @@ -200,4 +200,5 @@ frappe.patches.v9_1.resave_domain_settings frappe.patches.v9_1.revert_domain_settings frappe.patches.v9_1.move_feed_to_activity_log execute:frappe.delete_doc('Page', 'data-import-tool', ignore_missing=True) -frappe.patches.v10_0.reload_countries_and_currencies \ No newline at end of file +frappe.patches.v10_0.reload_countries_and_currencies +frappe.patches.v10_0.increase_single_table_column_length \ No newline at end of file diff --git a/frappe/patches/v10_0/increase_single_table_column_length.py b/frappe/patches/v10_0/increase_single_table_column_length.py new file mode 100644 index 0000000000..3c2a2b3233 --- /dev/null +++ b/frappe/patches/v10_0/increase_single_table_column_length.py @@ -0,0 +1,8 @@ +""" +Run this after updating country_info.json and or +""" +import frappe + +def execute(): + for col in ("field", "doctype"): + frappe.db.sql_ddl("alter table `tabSingles` modify column `{0}` varchar(255)".format(col)) From 09e71d0d77b364c5204d6d7eb878a854213c6f74 Mon Sep 17 00:00:00 2001 From: Ameya Shenoy Date: Tue, 8 May 2018 15:13:50 +0530 Subject: [PATCH 3/5] added floor and ceil to frappe.utils (#5536) Added frappe wrappers to math.ceil and math.floor, since they are widely used functions. Also added their docstrings for documentation and wote test cases. And some minor typo fixes --- frappe/tests/test_utils.py | 20 +++++++++++++++++ frappe/utils/data.py | 44 +++++++++++++++++++++++++++++++++++--- 2 files changed, 61 insertions(+), 3 deletions(-) diff --git a/frappe/tests/test_utils.py b/frappe/tests/test_utils.py index 948e26a74f..9d7690dce4 100644 --- a/frappe/tests/test_utils.py +++ b/frappe/tests/test_utils.py @@ -5,6 +5,7 @@ from __future__ import unicode_literals import unittest from frappe.utils import evaluate_filters, money_in_words, scrub_urls, get_url +from frappe.utils import ceil, floor class TestFilters(unittest.TestCase): def test_simple_dict(self): @@ -84,3 +85,22 @@ class TestDataManipulation(unittest.TestCase): self.assertTrue(''.format(url) in html) self.assertTrue('style="background-image: url(\'{0}/assets/frappe/bg.jpg\') !important"'.format(url) in html) self.assertTrue('email' in html) + +class TestMathUtils(unittest.TestCase): + def test_floor(self): + from decimal import Decimal + self.assertEqual(floor(2), 2 ) + self.assertEqual(floor(12.32904), 12) + self.assertEqual(floor(22.7330), 22) + self.assertEqual(floor('24.7'), 24) + self.assertEqual(floor('26.7'), 26) + self.assertEqual(floor(Decimal(29.45)), 29) + + def test_ceil(self): + from decimal import Decimal + self.assertEqual(ceil(2), 2 ) + self.assertEqual(ceil(12.32904), 13) + self.assertEqual(ceil(22.7330), 23) + self.assertEqual(ceil('24.7'), 25) + self.assertEqual(ceil('26.7'), 27) + self.assertEqual(ceil(Decimal(29.45)), 30) diff --git a/frappe/utils/data.py b/frappe/utils/data.py index d6618d3b07..86fef0b61c 100644 --- a/frappe/utils/data.py +++ b/frappe/utils/data.py @@ -24,7 +24,7 @@ DATETIME_FORMAT = DATE_FORMAT + " " + TIME_FORMAT # datetime functions def getdate(string_date=None): """ - Coverts string date (yyyy-mm-dd) to datetime.date object + Converts string date (yyyy-mm-dd) to datetime.date object """ if not string_date: @@ -208,7 +208,7 @@ def get_user_format(): def formatdate(string_date=None, format_string=None): """ - Convers the given string date to :data:`user_format` + Converts the given string date to :data:`user_format` User format specified in defaults Examples: @@ -282,6 +282,44 @@ def cint(s): except: num = 0 return num +def floor(s): + """ + A number representing the largest integer less than or equal to the specified number + + Parameters + ---------- + s : int or str or Decimal object + The mathematical value to be floored + + Returns + ------- + int + number representing the largest integer less than or equal to the specified number + + """ + try: num = cint(math.floor(flt(s))) + except: num = 0 + return num + +def ceil(s): + """ + The smallest integer greater than or equal to the given number + + Parameters + ---------- + s : int or str or Decimal object + The mathematical value to be ceiled + + Returns + ------- + int + smallest integer greater than or equal to the given number + + """ + try: num = cint(math.ceil(flt(s))) + except: num = 0 + return num + def cstr(s, encoding='utf-8'): return frappe.as_unicode(s, encoding) @@ -436,7 +474,7 @@ def get_number_format_info(format): return number_format_info.get(format) or (".", ",", 2) # -# convet currency to words +# convert currency to words # def money_in_words(number, main_currency = None, fraction_currency=None): """ From 2147bca5d4e89de4bb399cd14b05233d375e5c68 Mon Sep 17 00:00:00 2001 From: Saurabh Date: Tue, 8 May 2018 15:16:08 +0530 Subject: [PATCH 4/5] [fix] set no_copy property for workflow state field (#5531) * [fix] set no_copy property for workflow state field * [fix] check if custom field exists before loading doc --- frappe/patches.txt | 3 ++- frappe/patches/v10_0/set_no_copy_to_workflow_state.py | 11 +++++++++++ frappe/workflow/doctype/workflow/workflow.py | 1 + 3 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 frappe/patches/v10_0/set_no_copy_to_workflow_state.py diff --git a/frappe/patches.txt b/frappe/patches.txt index d57b103aad..de06c712d3 100644 --- a/frappe/patches.txt +++ b/frappe/patches.txt @@ -201,4 +201,5 @@ frappe.patches.v9_1.revert_domain_settings frappe.patches.v9_1.move_feed_to_activity_log execute:frappe.delete_doc('Page', 'data-import-tool', ignore_missing=True) frappe.patches.v10_0.reload_countries_and_currencies -frappe.patches.v10_0.increase_single_table_column_length \ No newline at end of file +frappe.patches.v10_0.set_no_copy_to_workflow_state +frappe.patches.v10_0.increase_single_table_column_length diff --git a/frappe/patches/v10_0/set_no_copy_to_workflow_state.py b/frappe/patches/v10_0/set_no_copy_to_workflow_state.py new file mode 100644 index 0000000000..00ca125bf7 --- /dev/null +++ b/frappe/patches/v10_0/set_no_copy_to_workflow_state.py @@ -0,0 +1,11 @@ +import frappe + +def execute(): + for dt in frappe.get_all("Workflow", fields=['name', 'document_type', 'workflow_state_field']): + fieldname = frappe.db.get_value("Custom Field", filters={'dt': dt.document_type, + 'fieldname': dt.workflow_state_field}) + + if fieldname: + custom_field = frappe.get_doc("Custom Field", fieldname) + custom_field.no_copy = 1 + custom_field.save() diff --git a/frappe/workflow/doctype/workflow/workflow.py b/frappe/workflow/doctype/workflow/workflow.py index 9de175c168..b1b22925ba 100644 --- a/frappe/workflow/doctype/workflow/workflow.py +++ b/frappe/workflow/doctype/workflow/workflow.py @@ -31,6 +31,7 @@ class Workflow(Document): "label": self.workflow_state_field.replace("_", " ").title(), "hidden": 1, "allow_on_submit": 1, + "no_copy": 1, "fieldtype": "Link", "options": "Workflow State", }).save() From db5682e6888bd750cb562a536116ccb1a6f765a3 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 8 May 2018 15:56:51 +0600 Subject: [PATCH 5/5] bumped to version 10.1.30 --- frappe/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/__init__.py b/frappe/__init__.py index d593bb8acb..488b649f57 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.29' +__version__ = '10.1.30' __title__ = "Frappe Framework" local = Local()