From 94a1f3eb908510dd2e3ab7b529099576f0c94a5a Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 29 Feb 2016 13:15:27 +0530 Subject: [PATCH] [fix] Time Log overlap validation and test cases --- .../projects/doctype/time_log/test_time_log.py | 16 ++++++++++++++++ erpnext/projects/doctype/time_log/time_log.py | 4 ++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/erpnext/projects/doctype/time_log/test_time_log.py b/erpnext/projects/doctype/time_log/test_time_log.py index 8d5694fb79..81a352f2c8 100644 --- a/erpnext/projects/doctype/time_log/test_time_log.py +++ b/erpnext/projects/doctype/time_log/test_time_log.py @@ -20,6 +20,22 @@ class TestTimeLog(unittest.TestCase): from_time= tl1.from_time, to_time= tl1.to_time, do_not_save= 1) self.assertRaises(OverlapError, tl2.insert) + + tl3 = make_time_log_test_record(user= "test@example.com", employee= "_T-Employee-0002", + from_time= tl1.from_time - datetime.timedelta(hours=1), + to_time= tl1.to_time + datetime.timedelta(hours=1), do_not_save= 1) + + self.assertRaises(OverlapError, tl3.insert) + + tl4 = make_time_log_test_record(user= "test@example.com", employee= "_T-Employee-0002", + from_time= tl1.from_time + datetime.timedelta(minutes=20), + to_time= tl1.to_time + datetime.timedelta(minutes=30), do_not_save= 1) + + self.assertRaises(OverlapError, tl4.insert) + + make_time_log_test_record(user= "test@example.com", employee= "_T-Employee-0002", + from_time= tl1.to_time, + to_time= tl1.to_time + datetime.timedelta(hours=1)) def test_production_order_status(self): prod_order = make_prod_order_test_record(item= "_Test FG Item 2", qty= 1, do_not_submit= True) diff --git a/erpnext/projects/doctype/time_log/time_log.py b/erpnext/projects/doctype/time_log/time_log.py index 5242b2cd47..b2a855d00d 100644 --- a/erpnext/projects/doctype/time_log/time_log.py +++ b/erpnext/projects/doctype/time_log/time_log.py @@ -88,8 +88,8 @@ class TimeLog(Document): existing = frappe.db.sql("""select name, from_time, to_time from `tabTime Log` where `{0}`=%(val)s and ( - (%(from_time)s between from_time and to_time) or - (%(to_time)s between from_time and to_time) or + (%(from_time)s > from_time and %(from_time)s < to_time) or + (%(to_time)s > from_time and %(to_time)s < to_time) or (%(from_time)s <= from_time and %(to_time)s >= to_time)) and name!=%(name)s and docstatus < 2""".format(fieldname),