refactor: Move code to Energy Point Rule

- Remove unwanted code
- Cache energy point rules

Co-authored-by: Faris Ansari <netchamp.faris@gmail.com>
This commit is contained in:
Suraj Shetty 2019-03-21 15:36:59 +05:30
parent fb5129e154
commit 3ff4a4f8d7
3 changed files with 63 additions and 67 deletions

View file

@ -117,7 +117,8 @@ doc_events = {
"frappe.desk.notifications.clear_doctype_notifications",
"frappe.core.doctype.activity_log.feed.update_feed",
"frappe.workflow.doctype.workflow_action.workflow_action.process_workflow_actions",
"frappe.automation.doctype.assignment_rule.assignment_rule.apply"
"frappe.automation.doctype.assignment_rule.assignment_rule.apply",
"frappe.social.doctype.energy_point_rule.energy_point_rule.process_energy_points"
],
"after_rename": "frappe.desk.notifications.clear_doctype_notifications",
"on_cancel": [
@ -129,8 +130,7 @@ doc_events = {
"frappe.workflow.doctype.workflow_action.workflow_action.process_workflow_actions"
],
"on_change": [
"frappe.core.doctype.feedback_trigger.feedback_trigger.trigger_feedback_request",
"frappe.social.doctype.energy_point_log.energy_point_log.process_for_energy_points"
"frappe.core.doctype.feedback_trigger.feedback_trigger.trigger_feedback_request"
]
},
"Email Group Member": {

View file

@ -6,79 +6,34 @@ from __future__ import unicode_literals
import frappe
from frappe.model.document import Document
from frappe.utils import cint
from ..energy_point_settings.energy_point_settings import is_energy_point_enabled
ENERGY_POINT_VALUES = {
'issue_closed': 2,
'instant_reply_on_issue': 2,
'feedback_point_multiplier': 2,
'github_pull_request_merge': 2,
'github_pull_request_review_submit': 2,
'github_issue_open': 1,
'github_issue_close': 2,
}
class EnergyPointLog(Document):
def after_insert(self):
update_user_energy_points(self.points, self.user)
def process_for_energy_points(doc, state):
if (not is_energy_point_enabled()
or frappe.flags.in_patch): return
doc_action = doc.get('_action')
if not doc_action: return
point_rules = frappe.get_all('Energy Point Rule', filters={
'reference_doctype': doc.get('doctype'),
}, fields=['name', 'points', 'rule_name', '`condition`', 'user_field'], debug=1)
print(point_rules)
for point_rule in point_rules:
print(point_rule.condition)
if frappe.safe_eval(point_rule.condition, None, {'doc': doc}):
create_energy_point_log(
points=point_rule.points,
reason=None,
reference_doctype=doc.doctype,
reference_name=doc.name,
user=doc.get(point_rule.user_field),
rule=point_rule.name
)
def create_energy_point_log(points, reason, reference_doctype, reference_name, user=None, rule=None):
print('===================in=========', user, points)
if not user:
user = frappe.session.user
if user in ['admin@example.com', 'Administrator', 'Guest']: return
def create_energy_point_log(ref_doctype, ref_name, doc):
doc = frappe._dict(doc)
log_exists = frappe.db.exists('Energy Point Log', {
'user': user,
'rule': rule,
'reference_doctype': reference_doctype,
'reference_name': reference_name
'user': doc.user,
'rule': doc.rule,
'reference_doctype': ref_doctype,
'reference_name': ref_name
})
if log_exists:
return
frappe.get_doc({
'doctype': 'Energy Point Log',
'points': points,
'user': user,
'rule': rule,
'reason': reason,
'reference_doctype': reference_doctype,
'reference_name': reference_name
}).insert(ignore_permissions=True)
_doc = frappe.new_doc('Energy Point Log')
_doc.reference_doctype = ref_doctype
_doc.reference_name = ref_name
_doc.update(doc)
_doc.insert(ignore_permissions=True)
return _doc
def update_user_energy_points(point, user=None):
point = cint(point)
if not point: return
if not user: user = frappe.session.user
def update_user_energy_points(points, user):
points = cint(points)
previous_point = frappe.db.get_value('User', user, 'energy_points')
new_point = cint(previous_point) + point
frappe.db.set_value('User', user, 'energy_points', new_point)
message='=== You gained </b>{}</b> points ==='.format(point)
previous_points = frappe.db.get_value('User', user, 'energy_points')
new_points = cint(previous_points) + points
frappe.db.set_value('User', user, 'energy_points', new_points)
message='=== You gained <b>{}</b> points ==='.format(points)
frappe.publish_realtime('points_gained', message=message , user=user)

View file

@ -5,6 +5,47 @@
from __future__ import unicode_literals
import frappe
from frappe.model.document import Document
from frappe.utils import cint
from frappe.social.doctype.energy_point_settings.energy_point_settings import is_energy_point_enabled
from frappe.social.doctype.energy_point_log.energy_point_log import create_energy_point_log
class EnergyPointRule(Document):
pass
def apply(self, doc):
if frappe.safe_eval(self.condition, None, {'doc': doc.as_dict()}):
multiplier = 1
if self.multiplier_field:
multiplier = doc.get(self.multiplier_field, 1)
points = self.points * multiplier
reference_doctype = doc.doctype
reference_name = doc.name
user = doc.get(self.user_field)
rule = self.name
create_energy_point_log(reference_doctype, reference_name, {
'points': points,
'user': user,
'rule': rule
})
def process_energy_points(doc, state):
if not is_energy_point_enabled() or frappe.flags.in_patch or frappe.flags.in_install:
return
energy_point_doctypes = frappe.cache().get_value('energy_point_doctypes', get_energy_point_doctypes)
if doc.doctype in energy_point_doctypes:
rules = frappe.get_all('Energy Point Rule', filters={
'reference_doctype': doc.doctype,
'enabled': 1
})
for d in rules:
frappe.get_doc('Energy Point Rule', d.name).apply(doc)
def get_energy_point_doctypes():
return [
d.reference_doctype for d in frappe.get_all('Energy Point Rule',
['reference_doctype'], {'enabled': 1})
]