mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-31 10:49:09 +00:00
added leave applications and block lists to calendar
This commit is contained in:
@@ -1,5 +1,4 @@
|
||||
test_records = [
|
||||
[{"doctype":"Department", "department_name":"_Test Department"}],
|
||||
[{"doctype":"Department", "department_name":"_Test Department with Block List",
|
||||
"leave_block_list": "_Test Leave Block List"}],
|
||||
[{"doctype":"Department", "department_name":"_Test Department 1"}]
|
||||
]
|
||||
|
||||
@@ -7,7 +7,8 @@ test_records = [[{
|
||||
"gender": "Female",
|
||||
"status": "Active",
|
||||
"company": "_Test Company",
|
||||
"user_id": "test@example.com"
|
||||
"user_id": "test@example.com",
|
||||
"department": "_Test Department"
|
||||
}],
|
||||
[{
|
||||
"doctype":"Employee",
|
||||
@@ -18,7 +19,8 @@ test_records = [[{
|
||||
"gender": "Male",
|
||||
"status": "Active",
|
||||
"company": "_Test Company",
|
||||
"user_id": "test1@example.com"
|
||||
"user_id": "test1@example.com",
|
||||
"department": "_Test Department 1"
|
||||
}],
|
||||
[{
|
||||
"doctype":"Employee",
|
||||
@@ -29,6 +31,7 @@ test_records = [[{
|
||||
"gender": "Male",
|
||||
"status": "Active",
|
||||
"company": "_Test Company",
|
||||
"user_id": "test2@example.com"
|
||||
"user_id": "test2@example.com",
|
||||
"department": "_Test Department 1"
|
||||
}]
|
||||
]
|
||||
@@ -46,46 +46,19 @@ class DocType:
|
||||
raise_exception=True)
|
||||
|
||||
def validate_block_days(self):
|
||||
for block_list in self.get_applicable_block_lists():
|
||||
self.check_block_dates(block_list)
|
||||
from hr.doctype.leave_block_list.leave_block_list import get_applicable_block_dates
|
||||
|
||||
def get_applicable_block_lists(self):
|
||||
block_lists = []
|
||||
def add_block_list(block_list):
|
||||
if block_list:
|
||||
if not self.is_user_in_allow_list(block_list):
|
||||
block_lists.append(block_list)
|
||||
|
||||
# per department
|
||||
department = webnotes.conn.get_value("Employee", self.doc.employee, "department")
|
||||
if department:
|
||||
block_list = webnotes.conn.get_value("Department", department, "leave_block_list")
|
||||
add_block_list(block_list)
|
||||
|
||||
# global
|
||||
for block_list in webnotes.conn.sql_list("""select name from `tabLeave Block List`
|
||||
where ifnull(applies_to_all_departments,0)=1 and company=%s""", self.doc.company):
|
||||
add_block_list(block_list)
|
||||
block_dates = get_applicable_block_dates(self.doc.from_date, self.doc.to_date,
|
||||
self.doc.employee, self.doc.company)
|
||||
|
||||
if block_dates:
|
||||
webnotes.msgprint(_("Following dates are blocked for Leave") + ":")
|
||||
for d in block_dates:
|
||||
webnotes.msgprint(formatdate(d.block_date) + ": " + d.reason)
|
||||
|
||||
return block_lists
|
||||
|
||||
def check_block_dates(self, block_list):
|
||||
from_date = getdate(self.doc.from_date)
|
||||
to_date = getdate(self.doc.to_date)
|
||||
for d in webnotes.conn.sql("""select block_date, reason from
|
||||
`tabLeave Block List Date` where parent=%s""", block_list, as_dict=1):
|
||||
block_date = getdate(d.block_date)
|
||||
if block_date > from_date and block_date < to_date:
|
||||
webnotes.msgprint(_("You cannot apply for a leave on the following date because it is blocked")
|
||||
+ ": " + formatdate(d.block_date) + _(" Reason: ") + d.reason)
|
||||
if self.doc.docstatus == 1:
|
||||
# throw exception only when submitting
|
||||
raise LeaveDayBlockedError
|
||||
|
||||
def is_user_in_allow_list(self, block_list):
|
||||
return webnotes.session.user in webnotes.conn.sql_list("""select allow_user
|
||||
from `tabLeave Block List Allow` where parent=%s""", block_list)
|
||||
|
||||
if self.doc.docstatus == 1:
|
||||
raise LeaveDayBlockedError
|
||||
|
||||
def get_holidays(self):
|
||||
tot_hol = webnotes.conn.sql("""select count(*) from `tabHoliday` h1, `tabHoliday List` h2, `tabEmployee` e1
|
||||
where e1.name = %s and h1.parent = h2.name and e1.holiday_list = h2.name
|
||||
|
||||
@@ -46,6 +46,7 @@ class TestLeaveApplication(unittest.TestCase):
|
||||
add_role("test@example.com", "Leave Approver")
|
||||
|
||||
self.assertRaises(LeaveDayBlockedError, application.submit)
|
||||
|
||||
|
||||
test_records = [
|
||||
[{
|
||||
|
||||
@@ -19,3 +19,48 @@ class DocType:
|
||||
if d.block_date in dates:
|
||||
webnotes.msgprint(_("Date is repeated") + ":" + d.block_date, raise_exception=1)
|
||||
dates.append(d.block_date)
|
||||
|
||||
@webnotes.whitelist()
|
||||
def get_applicable_block_dates(from_date, to_date, employee=None,
|
||||
company=None, all_lists=False):
|
||||
block_dates = []
|
||||
for block_list in get_applicable_block_lists(employee, company, all_lists):
|
||||
block_dates.extend(webnotes.conn.sql("""select block_date, reason
|
||||
from `tabLeave Block List Date` where parent=%s
|
||||
and block_date between %s and %s""", (block_list, from_date, to_date),
|
||||
as_dict=1))
|
||||
|
||||
return block_dates
|
||||
|
||||
def get_applicable_block_lists(employee=None, company=None, all_lists=False):
|
||||
block_lists = []
|
||||
|
||||
if not employee:
|
||||
employee = webnotes.conn.get_value("Employee", {"user_id":webnotes.session.user})
|
||||
if not employee:
|
||||
return []
|
||||
|
||||
if not company:
|
||||
company = webnotes.conn.get_value("Employee", employee, "company")
|
||||
|
||||
def add_block_list(block_list):
|
||||
if block_list:
|
||||
if all_lists or not is_user_in_allow_list(block_list):
|
||||
block_lists.append(block_list)
|
||||
|
||||
# per department
|
||||
department = webnotes.conn.get_value("Employee",employee, "department")
|
||||
if department:
|
||||
block_list = webnotes.conn.get_value("Department", department, "leave_block_list")
|
||||
add_block_list(block_list)
|
||||
|
||||
# global
|
||||
for block_list in webnotes.conn.sql_list("""select name from `tabLeave Block List`
|
||||
where ifnull(applies_to_all_departments,0)=1 and company=%s""", company):
|
||||
add_block_list(block_list)
|
||||
|
||||
return list(set(block_lists))
|
||||
|
||||
def is_user_in_allow_list(block_list):
|
||||
return webnotes.session.user in webnotes.conn.sql_list("""select allow_user
|
||||
from `tabLeave Block List Allow` where parent=%s""", block_list)
|
||||
@@ -1,3 +1,31 @@
|
||||
import webnotes
|
||||
import unittest
|
||||
|
||||
from hr.doctype.leave_block_list.leave_block_list import get_applicable_block_dates
|
||||
|
||||
class TestLeaveBlockList(unittest.TestCase):
|
||||
def test_get_applicable_block_dates(self):
|
||||
webnotes.session.user = "test@example.com"
|
||||
webnotes.conn.set_value("Department", "_Test Department", "leave_block_list",
|
||||
"_Test Leave Block List")
|
||||
self.assertTrue("2013-01-02" in
|
||||
[d.block_date for d in get_applicable_block_dates("2013-01-01", "2013-01-03")])
|
||||
|
||||
def test_get_applicable_block_dates_for_allowed_user(self):
|
||||
webnotes.session.user = "test1@example.com"
|
||||
webnotes.conn.set_value("Department", "_Test Department 1", "leave_block_list",
|
||||
"_Test Leave Block List")
|
||||
self.assertEquals([], [d.block_date for d in get_applicable_block_dates("2013-01-01", "2013-01-03")])
|
||||
|
||||
def test_get_applicable_block_dates_all_lists(self):
|
||||
webnotes.session.user = "test1@example.com"
|
||||
webnotes.conn.set_value("Department", "_Test Department 1", "leave_block_list",
|
||||
"_Test Leave Block List")
|
||||
self.assertTrue("2013-01-02" in
|
||||
[d.block_date for d in get_applicable_block_dates("2013-01-01", "2013-01-03", all_lists=True)])
|
||||
|
||||
test_dependencies = ["Employee"]
|
||||
|
||||
test_records = [[{
|
||||
"doctype":"Leave Block List",
|
||||
"leave_block_list_name": "_Test Leave Block List",
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
[
|
||||
{
|
||||
"creation": "2013-02-06 17:43:44",
|
||||
"creation": "2013-02-14 17:37:38",
|
||||
"docstatus": 0,
|
||||
"modified": "2013-02-14 17:15:45",
|
||||
"modified": "2013-02-14 17:41:53",
|
||||
"modified_by": "Administrator",
|
||||
"owner": "Administrator"
|
||||
},
|
||||
@@ -23,6 +23,7 @@
|
||||
"parentfield": "fields",
|
||||
"parenttype": "DocType",
|
||||
"permlevel": 0,
|
||||
"reqd": 1,
|
||||
"width": "200px"
|
||||
},
|
||||
{
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
[
|
||||
{
|
||||
"creation": "2013-02-05 11:48:25",
|
||||
"creation": "2013-02-14 17:37:38",
|
||||
"docstatus": 0,
|
||||
"modified": "2013-02-14 17:15:52",
|
||||
"modified": "2013-02-14 17:41:44",
|
||||
"modified_by": "Administrator",
|
||||
"owner": "Administrator"
|
||||
},
|
||||
@@ -19,6 +19,7 @@
|
||||
"parentfield": "fields",
|
||||
"parenttype": "DocType",
|
||||
"permlevel": 0,
|
||||
"reqd": 1,
|
||||
"width": "200px"
|
||||
},
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user