Leave allocation fix
diff --git a/erpnext/hr/doctype/leave_control_panel/leave_control_panel.py b/erpnext/hr/doctype/leave_control_panel/leave_control_panel.py
index 53436cc..001d0d5 100644
--- a/erpnext/hr/doctype/leave_control_panel/leave_control_panel.py
+++ b/erpnext/hr/doctype/leave_control_panel/leave_control_panel.py
@@ -7,62 +7,64 @@
from frappe.utils import cint, cstr, flt, nowdate
from frappe.model.doc import Document
from frappe.model.code import get_obj
-from frappe import msgprint
+from frappe import msgprint, _
class DocType:
- def __init__(self, doc, doclist):
- self.doc = doc
- self.doclist = doclist
-
- # Get Employees
- # **********************************************************************
- def get_employees(self):
- lst1 = [[self.doc.employee_type,"employment_type"],[self.doc.branch,"branch"],[self.doc.designation,"designation"],[self.doc.department, "department"],[self.doc.grade,"grade"]]
- condition = "where "
- flag = 0
- for l in lst1:
- if(l[0]):
- if flag == 0:
- condition += l[1] + "= '" + l[0] +"'"
- else:
- condition += " and " + l[1]+ "= '" +l[0] +"'"
- flag = 1
- emp_query = "select name from `tabEmployee` "
- if flag == 1:
- emp_query += condition
- e = frappe.db.sql(emp_query)
- return e
+ def __init__(self, doc, doclist):
+ self.doc = doc
+ self.doclist = doclist
+
- # ----------------
- # validate values
- # ----------------
- def validate_values(self):
- val_dict = {self.doc.fiscal_year:'Fiscal Year', self.doc.leave_type:'Leave Type', self.doc.no_of_days:'New Leaves Allocated'}
- for d in val_dict:
- if not d:
- msgprint("Please enter : "+val_dict[d])
- raise Exception
+ def get_employees(self):
+ lst1 = [[self.doc.employee_type,"employment_type"],[self.doc.branch,"branch"],[self.doc.designation,"designation"],[self.doc.department, "department"],[self.doc.grade,"grade"]]
+ condition = "where "
+ flag = 0
+ for l in lst1:
+ if(l[0]):
+ if flag == 0:
+ condition += l[1] + "= '" + l[0] +"'"
+ else:
+ condition += " and " + l[1]+ "= '" +l[0] +"'"
+ flag = 1
+ emp_query = "select name from `tabEmployee` "
+ if flag == 1:
+ emp_query += condition
+ e = frappe.db.sql(emp_query)
+ return e
+ def validate_values(self):
+ meta = frappe.get_doctype(self.doc.doctype)
+ for f in ["fiscal_year", "leave_type", "no_of_days"]:
+ if not self.doc.fields[f]:
+ frappe.throw(_(meta.get_label(f)) + _(" is mandatory"))
- # Allocation
- # **********************************************************************
- def allocate_leave(self):
- self.validate_values()
- for d in self.get_employees():
- la = Document('Leave Allocation')
- la.employee = cstr(d[0])
- la.employee_name = frappe.db.get_value('Employee',cstr(d[0]),'employee_name')
- la.leave_type = self.doc.leave_type
- la.fiscal_year = self.doc.fiscal_year
- la.posting_date = nowdate()
- la.carry_forward = cint(self.doc.carry_forward)
- la.new_leaves_allocated = flt(self.doc.no_of_days)
- la_obj = get_obj(doc=la)
- la_obj.doc.docstatus = 1
- la_obj.validate()
- la_obj.on_update()
- la_obj.doc.save(1)
- msgprint("Leaves Allocated Successfully")
+ def allocate_leave(self):
+ self.validate_values()
+ leave_allocated_for = []
+ employees = self.get_employees()
+ if not employees:
+ frappe.throw(_("No employee found"))
+
+ for d in self.get_employees():
+ try:
+ la = Document('Leave Allocation')
+ la.employee = cstr(d[0])
+ la.employee_name = frappe.db.get_value('Employee',cstr(d[0]),'employee_name')
+ la.leave_type = self.doc.leave_type
+ la.fiscal_year = self.doc.fiscal_year
+ la.posting_date = nowdate()
+ la.carry_forward = cint(self.doc.carry_forward)
+ la.new_leaves_allocated = flt(self.doc.no_of_days)
+ la_obj = get_obj(doc=la)
+ la_obj.doc.docstatus = 1
+ la_obj.validate()
+ la_obj.on_update()
+ la_obj.doc.save(1)
+ leave_allocated_for.append(d[0])
+ except:
+ pass
+ if leave_allocated_for:
+ msgprint("Leaves Allocated Successfully for " + ", ".join(leave_allocated_for))