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:
parent
fb5129e154
commit
3ff4a4f8d7
3 changed files with 63 additions and 67 deletions
|
|
@ -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": {
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
@ -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})
|
||||
]
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue