From 97a65ceca4c2a401696c899147655d8a4d1d80e7 Mon Sep 17 00:00:00 2001 From: Suraj Shetty Date: Tue, 24 Sep 2019 14:59:41 +0530 Subject: [PATCH] Merge branch 'develop' of https://github.com/frappe/frappe into feat-value-change-detection --- frappe/model/base_document.py | 12 ++++++++--- frappe/model/document.py | 12 +++++++++++ frappe/modules/utils.py | 2 +- .../energy_point_log/test_energy_point_log.py | 12 ++++++++++- .../energy_point_rule/energy_point_rule.json | 9 ++++---- .../energy_point_rule/energy_point_rule.py | 21 +++++++++++-------- 6 files changed, 50 insertions(+), 18 deletions(-) diff --git a/frappe/model/base_document.py b/frappe/model/base_document.py index 5676f7deaa..3d5b002c75 100644 --- a/frappe/model/base_document.py +++ b/frappe/model/base_document.py @@ -457,9 +457,15 @@ class BaseDocument(object): meta = frappe.get_meta(doctype) if meta.has_field('disabled'): - disabled = frappe.get_value(doctype, self.get(df.fieldname), 'disabled') - if disabled: - frappe.throw(_("{0} is disabled").format(frappe.bold(self.get(df.fieldname)))) + if not ( + frappe.flags.in_import + or frappe.flags.in_migrate + or frappe.flags.in_install + or frappe.flags.in_patch + ): + disabled = frappe.get_value(doctype, self.get(df.fieldname), 'disabled') + if disabled: + frappe.throw(_("{0} is disabled").format(frappe.bold(self.get(df.fieldname)))) else: doctype = self.get(df.options) if not doctype: diff --git a/frappe/model/document.py b/frappe/model/document.py index fd1ffec483..f93c366ffb 100644 --- a/frappe/model/document.py +++ b/frappe/model/document.py @@ -1232,6 +1232,18 @@ class Document(BaseDocument): frappe.bold(self.meta.get_label(from_date_field)), ), frappe.exceptions.InvalidDates) + def get_assigned_users(self): + assignments = frappe.get_all('ToDo', + fields=['owner'], + filters={ + 'reference_type': self.doctype, + 'reference_name': self.name, + 'status': ('!=', 'Cancelled'), + }) + + users = set([assignment.owner for assignment in assignments]) + return users + def execute_action(doctype, name, action, **kwargs): '''Execute an action on a document (called by background worker)''' doc = frappe.get_doc(doctype, name) diff --git a/frappe/modules/utils.py b/frappe/modules/utils.py index b06297023e..528ca6e88b 100644 --- a/frappe/modules/utils.py +++ b/frappe/modules/utils.py @@ -119,7 +119,7 @@ def sync_customizations_for_doctype(data, folder): custom_doctype, doctype_fieldname), doc_type) for d in data[key]: - _insert(data) + _insert(d) else: for d in data[key]: diff --git a/frappe/social/doctype/energy_point_log/test_energy_point_log.py b/frappe/social/doctype/energy_point_log/test_energy_point_log.py index 5e229c1d53..14c5a8e3d8 100644 --- a/frappe/social/doctype/energy_point_log/test_energy_point_log.py +++ b/frappe/social/doctype/energy_point_log/test_energy_point_log.py @@ -7,6 +7,7 @@ import frappe import unittest from .energy_point_log import get_energy_points as _get_energy_points, create_review_points_log, review from frappe.utils.testutils import add_custom_field, clear_custom_fields +from frappe.desk.form.assign_to import add as assign_to class TestEnergyPointLog(unittest.TestCase): def tearDown(self): @@ -241,6 +242,7 @@ def create_energy_point_rule_for_todo(multiplier_field=None, for_doc_event='Cust 'condition': 'doc.status == "Closed"', 'for_doc_event': for_doc_event, 'user_field': 'owner', + 'for_assigned_users': for_assigned_users, 'multiplier_field': multiplier_field, 'max_points': max_points, 'field_to_check': field_to_check @@ -254,4 +256,12 @@ def create_a_todo(): def get_points(user, point_type='energy_points'): - return _get_energy_points(user).get(point_type) or 0 \ No newline at end of file + return _get_energy_points(user).get(point_type) or 0 + +def assign_users_to_todo(todo_name, users): + for user in users: + assign_to({ + 'assign_to': user, + 'doctype': 'ToDo', + 'name': todo_name + }) \ No newline at end of file diff --git a/frappe/social/doctype/energy_point_rule/energy_point_rule.json b/frappe/social/doctype/energy_point_rule/energy_point_rule.json index bc4c63c7a4..eec43127fe 100644 --- a/frappe/social/doctype/energy_point_rule/energy_point_rule.json +++ b/frappe/social/doctype/energy_point_rule/energy_point_rule.json @@ -13,6 +13,7 @@ "field_to_check", "condition", "points", + "for_assigned_users", "user_field", "multiplier_field", "max_points" @@ -57,11 +58,11 @@ "reqd": 1 }, { + "depends_on": "eval:!doc.for_assigned_users || doc.for_doc_event==='New'", "description": "The user from this field will be rewarded points", "fieldname": "user_field", "fieldtype": "Select", - "label": "User Field", - "reqd": 1 + "label": "User Field" }, { "fieldname": "multiplier_field", @@ -70,7 +71,7 @@ }, { "depends_on": "eval:doc.multiplier_field", - "description": "Maximum points allowed after multiplying points with the multiplier value\n(Note: For no limit set value as 0)", + "description": "Maximum points allowed after multiplying points with the multiplier value\n(Note: For no limit leave this field empty or set 0)", "fieldname": "max_points", "fieldtype": "Int", "label": "Maximum Points" @@ -101,7 +102,7 @@ "label": "Field To Check" } ], - "modified": "2019-09-24 14:45:06.060757", + "modified": "2019-09-20 11:26:26.101557", "modified_by": "Administrator", "module": "Social", "name": "Energy Point Rule", diff --git a/frappe/social/doctype/energy_point_rule/energy_point_rule.py b/frappe/social/doctype/energy_point_rule/energy_point_rule.py index c7480100e5..2ca2ffa44e 100644 --- a/frappe/social/doctype/energy_point_rule/energy_point_rule.py +++ b/frappe/social/doctype/energy_point_rule/energy_point_rule.py @@ -31,21 +31,24 @@ class EnergyPointRule(Document): reference_doctype = doc.doctype reference_name = doc.name - user = doc.get(self.user_field) + users = [] + if self.for_assigned_users: + users = doc.get_assigned_users() + else: + users = [doc.get(self.user_field)] rule = self.name # incase of zero as result after roundoff if not points: return - # if user_field has no value - if not user or user == 'Administrator': return - try: - create_energy_points_log(reference_doctype, reference_name, { - 'points': points, - 'user': user, - 'rule': rule - }) + for user in users: + if not user or user == 'Administrator': continue + create_energy_points_log(reference_doctype, reference_name, { + 'points': points, + 'user': user, + 'rule': rule + }) except Exception as e: frappe.log_error(frappe.get_traceback(), 'apply_energy_point')