From 975dcc2bf3209eda7e2d8d7c1346da3e4b605922 Mon Sep 17 00:00:00 2001 From: Neil Trini Lasrado Date: Thu, 14 Jan 2016 16:09:35 +0530 Subject: [PATCH] Added additional cost to time log. Fixed issues in Time log billing amount calculation and billing amount calculation while making time log batch --- erpnext/projects/doctype/time_log/time_log.js | 9 ++- .../projects/doctype/time_log/time_log.json | 64 ++++++++++++++++++- erpnext/projects/doctype/time_log/time_log.py | 3 + .../doctype/time_log_batch/time_log_batch.js | 25 ++++++-- 4 files changed, 94 insertions(+), 7 deletions(-) diff --git a/erpnext/projects/doctype/time_log/time_log.js b/erpnext/projects/doctype/time_log/time_log.js index 3a01ca5de0..7648a536db 100644 --- a/erpnext/projects/doctype/time_log/time_log.js +++ b/erpnext/projects/doctype/time_log/time_log.js @@ -53,12 +53,12 @@ frappe.ui.form.on("Time Log", "to_time", function(frm) { var calculate_cost = function(frm) { frm.set_value("costing_amount", frm.doc.costing_rate * frm.doc.hours); if (frm.doc.billable==1){ - frm.set_value("billing_amount", frm.doc.billing_rate * frm.doc.hours); + frm.set_value("billing_amount", (frm.doc.billing_rate * frm.doc.hours) + frm.doc.additional_cost); } } var get_activity_cost = function(frm) { - if (frm.doc.employee && frm.doc.activity_type){ + if (frm.doc.activity_type){ return frappe.call({ method: "erpnext.projects.doctype.time_log.time_log.get_activity_cost", args: { @@ -80,6 +80,10 @@ frappe.ui.form.on("Time Log", "hours", function(frm) { calculate_cost(frm); }); +frappe.ui.form.on("Time Log", "additional_cost", function(frm) { + calculate_cost(frm); +}); + frappe.ui.form.on("Time Log", "activity_type", function(frm) { get_activity_cost(frm); }); @@ -94,6 +98,7 @@ frappe.ui.form.on("Time Log", "billable", function(frm) { } else { frm.set_value("billing_amount", 0); + frm.set_value("additional_cost", 0); } }); diff --git a/erpnext/projects/doctype/time_log/time_log.json b/erpnext/projects/doctype/time_log/time_log.json index 4490f97624..7052c5ea56 100644 --- a/erpnext/projects/doctype/time_log/time_log.json +++ b/erpnext/projects/doctype/time_log/time_log.json @@ -26,6 +26,7 @@ "options": "TL-", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 1, @@ -48,6 +49,7 @@ "permlevel": 0, "precision": "", "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -71,6 +73,7 @@ "options": "Draft\nSubmitted\nBatched for Billing\nBilled\nCancelled", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 1, "report_hide": 0, "reqd": 0, @@ -93,6 +96,7 @@ "permlevel": 0, "precision": "", "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -115,6 +119,7 @@ "no_copy": 0, "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 1, @@ -138,6 +143,7 @@ "no_copy": 0, "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -160,6 +166,7 @@ "no_copy": 0, "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 1, @@ -182,6 +189,7 @@ "permlevel": 0, "precision": "", "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -206,6 +214,7 @@ "options": "Activity Type", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -230,6 +239,7 @@ "options": "Project", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -254,6 +264,7 @@ "options": "Task", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -276,6 +287,7 @@ "permlevel": 0, "precision": "", "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -300,6 +312,7 @@ "permlevel": 0, "precision": "", "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -324,6 +337,7 @@ "permlevel": 0, "precision": "", "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -345,6 +359,7 @@ "no_copy": 0, "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -368,6 +383,7 @@ "permlevel": 0, "precision": "", "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 1, "report_hide": 0, "reqd": 0, @@ -390,6 +406,7 @@ "no_copy": 0, "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -413,6 +430,7 @@ "permlevel": 0, "precision": "", "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -438,6 +456,7 @@ "permlevel": 0, "precision": "", "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 1, "report_hide": 0, "reqd": 0, @@ -463,6 +482,7 @@ "permlevel": 0, "precision": "", "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 1, "report_hide": 0, "reqd": 0, @@ -488,6 +508,7 @@ "permlevel": 0, "precision": "", "print_hide": 1, + "print_hide_if_no_value": 0, "read_only": 1, "report_hide": 0, "reqd": 0, @@ -510,6 +531,7 @@ "permlevel": 0, "precision": "", "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -535,6 +557,7 @@ "permlevel": 0, "precision": "", "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 1, "report_hide": 0, "reqd": 0, @@ -560,6 +583,7 @@ "permlevel": 0, "precision": "", "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -581,6 +605,7 @@ "no_copy": 0, "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -603,6 +628,7 @@ "no_copy": 0, "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -626,6 +652,7 @@ "permlevel": 0, "precision": "", "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -651,6 +678,7 @@ "permlevel": 0, "precision": "", "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 1, "report_hide": 0, "reqd": 0, @@ -675,6 +703,7 @@ "permlevel": 0, "precision": "", "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 1, "report_hide": 0, "reqd": 0, @@ -697,6 +726,7 @@ "permlevel": 0, "precision": "", "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -722,6 +752,7 @@ "permlevel": 0, "precision": "", "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 1, "report_hide": 0, "reqd": 0, @@ -729,6 +760,31 @@ "set_only_once": 0, "unique": 0 }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "depends_on": "eval:doc.billable", + "fieldname": "additional_cost", + "fieldtype": "Currency", + "hidden": 0, + "ignore_user_permissions": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Additional Cost", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 + }, { "allow_on_submit": 0, "bold": 0, @@ -747,6 +803,7 @@ "permlevel": 0, "precision": "", "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 1, "report_hide": 0, "reqd": 0, @@ -769,6 +826,7 @@ "permlevel": 0, "precision": "", "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -793,6 +851,7 @@ "options": "Time Log Batch", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 1, "report_hide": 0, "reqd": 0, @@ -817,6 +876,7 @@ "options": "Sales Invoice", "permlevel": 0, "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 1, "report_hide": 0, "reqd": 0, @@ -840,6 +900,7 @@ "options": "Time Log", "permlevel": 1, "print_hide": 1, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -863,6 +924,7 @@ "permlevel": 0, "precision": "", "print_hide": 0, + "print_hide_if_no_value": 0, "read_only": 0, "report_hide": 0, "reqd": 0, @@ -881,7 +943,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2015-11-16 06:29:59.410559", + "modified": "2016-01-14 04:36:02.286924", "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 cd20036e91..c2239df24c 100644 --- a/erpnext/projects/doctype/time_log/time_log.py +++ b/erpnext/projects/doctype/time_log/time_log.py @@ -236,6 +236,9 @@ class TimeLog(Document): self.billing_amount = self.billing_rate * self.hours else: self.billing_amount = 0 + + if self.additional_cost and self.billable: + self.billing_amount += self.additional_cost def update_task_and_project(self): """Update costing rate in Task or Project if either is set""" diff --git a/erpnext/projects/doctype/time_log_batch/time_log_batch.js b/erpnext/projects/doctype/time_log_batch/time_log_batch.js index 6b5f08094d..b1c431c1a5 100644 --- a/erpnext/projects/doctype/time_log_batch/time_log_batch.js +++ b/erpnext/projects/doctype/time_log_batch/time_log_batch.js @@ -37,14 +37,31 @@ $.extend(cur_frm.cscript, { } }); -frappe.ui.form.on("Time Log Batch Detail", "time_log", function(frm, cdt, cdn) { +frappe.ui.form.on("Time Log Batch Detail", "time_log", function(frm) { + calculate_time_and_amount(frm); +}); + +frappe.ui.form.on("Time Log Batch Detail", "time_logs_remove", function(frm) { + calculate_time_and_amount(frm); +}); + +frappe.ui.form.on("Time Log Batch", "onload", function(frm) { + if (frm.doc.__islocal && frm.doc.time_logs) { + calculate_time_and_amount(frm); + } +}); + +var calculate_time_and_amount = function(frm) { var tl = frm.doc.time_logs || []; total_hr = 0; total_amt = 0; for(var i=0; i