diff --git a/erpnext/projects/doctype/task/task.py b/erpnext/projects/doctype/task/task.py index 4e29d17ad9..fdd225d77a 100644 --- a/erpnext/projects/doctype/task/task.py +++ b/erpnext/projects/doctype/task/task.py @@ -49,6 +49,17 @@ class Task(Document): self.total_expense_claim = frappe.db.sql("""select sum(total_sanctioned_amount) from `tabExpense Claim` where project = %s and task = %s and approval_status = "Approved" and docstatus=1""",(self.project, self.name)) + def update_actual_time_and_costing(self): + tl = frappe.db.sql("""select min(from_time) as start_date, max(to_time) as + end_date, sum(billing_amount) as cost, sum(hours) as time from `tabTime Log` where + project = %s and task = %s and docstatus=1""",(self.project, self.name),as_dict=1)[0] + if self.status == "Open": + self.status = "Working" + self.actual_cost= tl.cost + self.actual_time= tl.time + self.act_start_date= tl.start_date + self.act_end_date= tl.end_date + def update_project(self): if self.project: total_activity_cost = frappe.db.sql("""select sum(actual_cost) from `tabTask` diff --git a/erpnext/projects/doctype/time_log/test_time_log.py b/erpnext/projects/doctype/time_log/test_time_log.py index 630962d670..fad24335e8 100644 --- a/erpnext/projects/doctype/time_log/test_time_log.py +++ b/erpnext/projects/doctype/time_log/test_time_log.py @@ -85,7 +85,7 @@ class TestTimeLog(unittest.TestCase): self.assertRaises(frappe.ValidationError, test_time_log.save) frappe.db.sql("delete from `tabTime Log`") - def test_time_log_costing(self): + def test_total_activity_cost_for_project(self): frappe.db.sql("delete from `tabTask`") frappe.db.sql("delete from `tabProject`") diff --git a/erpnext/projects/doctype/time_log/time_log.js b/erpnext/projects/doctype/time_log/time_log.js index e1fa91b4ac..5625ff3975 100644 --- a/erpnext/projects/doctype/time_log/time_log.js +++ b/erpnext/projects/doctype/time_log/time_log.js @@ -80,11 +80,11 @@ frappe.ui.form.on("Time Log", "employee", function(frm) { get_activity_cost(frm); }); -cur_frm.cscript.billable = function(doc) { - if (doc.billable==1) { - calculate_cost(doc); +frappe.ui.form.on("Time Log", "billable", function(frm) { + if (frm.doc.billable==1) { + calculate_cost(frm.doc); } else { - cur_frm.set_value("billing_amount", 0); + frm.doc("billing_amount", 0); } -} +}); diff --git a/erpnext/projects/doctype/time_log/time_log.json b/erpnext/projects/doctype/time_log/time_log.json index 92ae856a62..a2852aedba 100644 --- a/erpnext/projects/doctype/time_log/time_log.json +++ b/erpnext/projects/doctype/time_log/time_log.json @@ -242,7 +242,7 @@ }, { "default": "0", - "description": "will be updated only if Time Log is 'Billable'", + "description": "Will be updated only if Time Log is 'Billable'", "fieldname": "billing_amount", "fieldtype": "Currency", "label": "Billing Amount", @@ -297,7 +297,11 @@ "icon": "icon-time", "idx": 1, "is_submittable": 1, +<<<<<<< HEAD "modified": "2015-04-06 02:47:16.187046", +======= + "modified": "2015-04-09 08:29:34.464429", +>>>>>>> Fixes in time_log "modified_by": "Administrator", "module": "Projects", "name": "Time Log", diff --git a/erpnext/projects/doctype/time_log/time_log.py b/erpnext/projects/doctype/time_log/time_log.py index fc6ae5331b..34b244faf9 100644 --- a/erpnext/projects/doctype/time_log/time_log.py +++ b/erpnext/projects/doctype/time_log/time_log.py @@ -217,29 +217,22 @@ class TimeLog(Document): def validate_cost(self): rate = get_activity_cost(self.employee, self.activity_type) - self.costing_rate = rate.get('costing_rate') or 0 - self.billing_rate = rate.get('billing_rate') or 0 - self.costing_amount = self.costing_rate * self.hours - if self.billable: - self.billing_amount = self.billing_rate * self.hours - else: - self.billing_amount = 0 + if rate: + self.costing_rate = rate.get('costing_rate') + self.billing_rate = rate.get('billing_rate') + self.costing_amount = self.costing_rate * self.hours + if self.billable: + self.billing_amount = self.billing_rate * self.hours + else: + self.billing_amount = 0 def validate_task(self): if self.project and not self.task: frappe.throw(_("Task is Mandatory if Time Log is against a project")) def update_task(self): - tl = frappe.db.sql("""select min(from_time) as start_date, max(to_time) as end_date, sum(billing_amount) as cost, sum(hours) as time - from `tabTime Log` where project = %s and task = %s and docstatus=1""",(self.project, self.task),as_dict=1)[0] - task = frappe.get_doc("Task", self.task) - if task.status == "Open": - task.status = "Working" - task.actual_cost= tl.cost - task.actual_time= tl.time - task.act_start_date= tl.start_date - task.act_end_date= tl.end_date + task.update_actual_time_and_costing() task.save() @frappe.whitelist() @@ -281,7 +274,7 @@ def get_events(start, end, filters=None): @frappe.whitelist() def get_activity_cost(employee=None, activity_type=None): - costing_rate = frappe.db.get_value("Activity Cost", {"employee":employee,"activity_type":activity_type}, "costing_rate") - billing_rate = frappe.db.get_value("Activity Cost", {"employee":employee,"activity_type":activity_type}, "billing_rate") - return {"costing_rate": costing_rate, "billing_rate": billing_rate } - + rate = frappe.db.sql("""select costing_rate, billing_rate from `tabActivity Cost` where employee= %s + and activity_type= %s""", (employee, activity_type), as_dict=1) + if rate: + return {"costing_rate": rate[0].costing_rate, "billing_rate": rate[0].billing_rate }