Skip to content

Commit

Permalink
refactor: calculate_final_score function
Browse files Browse the repository at this point in the history
- remove unnecessary conditions

- rearrange related code blocks together
  • Loading branch information
ruchamahabal committed May 29, 2024
1 parent 969c2e8 commit 6dbdc61
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 32 deletions.
51 changes: 23 additions & 28 deletions hrms/hr/doctype/appraisal/appraisal.py
Original file line number Diff line number Diff line change
Expand Up @@ -180,34 +180,29 @@ def calculate_avg_feedback_score(self, update=False):
self.db_update()

def calculate_final_score(self):
if self.appraisal_cycle:
final_score = 0
appraisal_cycle_doc = frappe.get_doc("Appraisal Cycle", self.appraisal_cycle)

formula = appraisal_cycle_doc.final_score_formula
based_on_formula = appraisal_cycle_doc.calculate_final_score_based_on_formula

if not based_on_formula:
final_score = (
flt(self.total_score) + flt(self.avg_feedback_score) + flt(self.self_score)
) / 3
else:
employee_doc = frappe.get_doc("Employee", self.employee)
sanitized_formula = sanitize_expression(formula)

data = {
"goal_score": flt(self.total_score),
"average_feedback_score": flt(self.avg_feedback_score),
"self_appraisal_score": flt(self.self_score),
}

data.update(appraisal_cycle_doc.as_dict())
data.update(employee_doc.as_dict())
data.update(self.as_dict())

final_score = frappe.safe_eval(sanitized_formula, data)

self.final_score = flt(final_score, self.precision("final_score"))
final_score = 0
appraisal_cycle_doc = frappe.get_cached_doc("Appraisal Cycle", self.appraisal_cycle)

formula = appraisal_cycle_doc.final_score_formula
based_on_formula = appraisal_cycle_doc.calculate_final_score_based_on_formula

if based_on_formula:
employee_doc = frappe.get_cached_doc("Employee", self.employee)
data = {
"goal_score": flt(self.total_score),
"average_feedback_score": flt(self.avg_feedback_score),
"self_appraisal_score": flt(self.self_score),
}
data.update(appraisal_cycle_doc.as_dict())
data.update(employee_doc.as_dict())
data.update(self.as_dict())

sanitized_formula = sanitize_expression(formula)
final_score = frappe.safe_eval(sanitized_formula, data)
else:
final_score = (flt(self.total_score) + flt(self.avg_feedback_score) + flt(self.self_score)) / 3

self.final_score = flt(final_score, self.precision("final_score"))

@frappe.whitelist()
def add_feedback(self, feedback, feedback_ratings):
Expand Down
8 changes: 4 additions & 4 deletions hrms/hr/doctype/appraisal/test_appraisal.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ def test_manual_kra_rating(self):
def test_final_score(self):
cycle = create_appraisal_cycle(designation="Engineer", kra_evaluation_method="Manual Rating")
cycle.create_appraisals()
appraisal = self.setup_appraisal_cycle(cycle)
appraisal = self.setup_appraisal(cycle)

self.assertEqual(appraisal.final_score, 3.767)

Expand All @@ -81,14 +81,14 @@ def test_final_score_using_formula(self):
"final_score_formula": "(goal_score + self_appraisal_score + average_feedback_score)/3 if self_appraisal_score else (goal_score + self_appraisal_score)/2",
}
)

cycle.save()
cycle.create_appraisals()
appraisal = self.setup_appraisal_cycle(cycle)

appraisal = self.setup_appraisal(cycle)

self.assertEqual(appraisal.final_score, 3.767)

def setup_appraisal_cycle(self, cycle):
def setup_appraisal(self, cycle):
appraisal = frappe.db.exists("Appraisal", {"appraisal_cycle": cycle.name, "employee": self.employee1})
appraisal = frappe.get_doc("Appraisal", appraisal)

Expand Down

0 comments on commit 6dbdc61

Please sign in to comment.