diff --git a/erpnext/projects/doctype/time_log/test_time_log.py b/erpnext/projects/doctype/time_log/test_time_log.py index 4a312adb41b..d0cf6a0328e 100644 --- a/erpnext/projects/doctype/time_log/test_time_log.py +++ b/erpnext/projects/doctype/time_log/test_time_log.py @@ -16,6 +16,15 @@ class TestTimeLog(unittest.TestCase): self.assertRaises(OverlapError, ts.insert) frappe.db.sql("delete from `tabTime Log`") + + def test_negative_hours(self): + frappe.db.sql("delete from `tabTime Log`") + test_time_log = frappe.new_doc("Time Log") + test_time_log.activity_type = "Communication" + test_time_log.from_time = "2013-01-01 11:00:00.000000" + test_time_log.to_time = "2013-01-01 10:00:00.000000" + self.assertRaises(frappe.ValidationError, test_time_log.save) + frappe.db.sql("delete from `tabTime Log`") test_records = frappe.get_test_records('Time Log') test_ignore = ["Time Log Batch", "Sales Invoice"] diff --git a/erpnext/projects/doctype/time_log/time_log.py b/erpnext/projects/doctype/time_log/time_log.py index eb8afc7729b..7912ff65f9e 100644 --- a/erpnext/projects/doctype/time_log/time_log.py +++ b/erpnext/projects/doctype/time_log/time_log.py @@ -19,10 +19,12 @@ class TimeLog(Document): self.set_status() self.validate_overlap() self.calculate_total_hours() - + def calculate_total_hours(self): from frappe.utils import time_diff_in_hours self.hours = time_diff_in_hours(self.to_time, self.from_time) + if self.hours < 0: + frappe.throw(_("'From Time' cannot be later than 'To Time'")) def set_status(self): self.status = { diff --git a/erpnext/selling/doctype/lead/lead.json b/erpnext/selling/doctype/lead/lead.json index 2d3d49c8f89..7a1d6d69403 100644 --- a/erpnext/selling/doctype/lead/lead.json +++ b/erpnext/selling/doctype/lead/lead.json @@ -160,7 +160,7 @@ "allow_on_submit": 0, "description": "Add to calendar on this date", "fieldname": "contact_date", - "fieldtype": "Date", + "fieldtype": "Datetime", "in_filter": 1, "label": "Next Contact Date", "no_copy": 1, @@ -368,7 +368,7 @@ ], "icon": "icon-user", "idx": 1, - "modified": "2014-08-12 05:22:18.801092", + "modified": "2014-12-01 08:22:23.286314", "modified_by": "Administrator", "module": "Selling", "name": "Lead", diff --git a/erpnext/selling/doctype/lead/lead.py b/erpnext/selling/doctype/lead/lead.py index 98bed4dfc26..0fcfc1c3066 100644 --- a/erpnext/selling/doctype/lead/lead.py +++ b/erpnext/selling/doctype/lead/lead.py @@ -45,6 +45,7 @@ class Lead(SellingController): def add_calendar_event(self, opts=None, force=False): super(Lead, self).add_calendar_event({ "owner": self.lead_owner, + "starts_on": self.contact_date, "subject": ('Contact ' + cstr(self.lead_name)), "description": ('Contact ' + cstr(self.lead_name)) + \ (self.contact_by and ('. By : ' + cstr(self.contact_by)) or '') diff --git a/erpnext/selling/doctype/opportunity/opportunity.json b/erpnext/selling/doctype/opportunity/opportunity.json index 513fbc8bdb5..17291ad13f5 100644 --- a/erpnext/selling/doctype/opportunity/opportunity.json +++ b/erpnext/selling/doctype/opportunity/opportunity.json @@ -372,7 +372,7 @@ { "description": "Your sales person will get a reminder on this date to contact the customer", "fieldname": "contact_date", - "fieldtype": "Date", + "fieldtype": "Datetime", "label": "Next Contact Date", "oldfieldname": "contact_date", "oldfieldtype": "Date", @@ -416,7 +416,7 @@ "icon": "icon-info-sign", "idx": 1, "is_submittable": 1, - "modified": "2014-08-12 05:21:51.282397", + "modified": "2014-12-01 08:46:35.331148", "modified_by": "Administrator", "module": "Selling", "name": "Opportunity", diff --git a/erpnext/selling/doctype/opportunity/opportunity.py b/erpnext/selling/doctype/opportunity/opportunity.py index ba331f9052f..4420ad9e476 100644 --- a/erpnext/selling/doctype/opportunity/opportunity.py +++ b/erpnext/selling/doctype/opportunity/opportunity.py @@ -57,6 +57,7 @@ class Opportunity(TransactionBase): opts = frappe._dict() opts.description = "" + opts.contact_date = self.contact_date if self.customer: if self.contact_person: