filters added, ui change, update project moved to project.py
diff --git a/erpnext/hr/doctype/expense_claim/expense_claim.js b/erpnext/hr/doctype/expense_claim/expense_claim.js
index 2ba4d22..d279074 100644
--- a/erpnext/hr/doctype/expense_claim/expense_claim.js
+++ b/erpnext/hr/doctype/expense_claim/expense_claim.js
@@ -169,3 +169,11 @@
frappe.ui.form.on("Expense Claim", "task", function(frm) {
erpnext.expense_claim.set_title(frm);
});
+
+cur_frm.fields_dict['task'].get_query = function(doc) {
+ return {
+ filters:{
+ 'project': doc.project
+ }
+ }
+}
\ No newline at end of file
diff --git a/erpnext/projects/doctype/project/project.json b/erpnext/projects/doctype/project/project.json
index ef6140a..5c4f7d1 100644
--- a/erpnext/projects/doctype/project/project.json
+++ b/erpnext/projects/doctype/project/project.json
@@ -8,13 +8,6 @@
"document_type": "Master",
"fields": [
{
- "fieldname": "overview",
- "fieldtype": "Section Break",
- "label": "Overview",
- "options": "icon-file",
- "permlevel": 0
- },
- {
"description": "",
"fieldname": "project_name",
"fieldtype": "Data",
@@ -113,6 +106,49 @@
"search_index": 0
},
{
+ "fieldname": "customer_details",
+ "fieldtype": "Section Break",
+ "label": "",
+ "oldfieldtype": "Section Break",
+ "options": "icon-user",
+ "permlevel": 0
+ },
+ {
+ "fieldname": "customer",
+ "fieldtype": "Link",
+ "in_filter": 1,
+ "label": "Customer",
+ "no_copy": 0,
+ "oldfieldname": "customer",
+ "oldfieldtype": "Link",
+ "options": "Customer",
+ "permlevel": 0,
+ "print_hide": 1,
+ "reqd": 0,
+ "search_index": 1
+ },
+ {
+ "fieldname": "company",
+ "fieldtype": "Link",
+ "label": "Company",
+ "options": "Company",
+ "permlevel": 0
+ },
+ {
+ "fieldname": "column_break_14",
+ "fieldtype": "Column Break",
+ "permlevel": 0,
+ "precision": ""
+ },
+ {
+ "fieldname": "sales_order",
+ "fieldtype": "Link",
+ "label": "Sales Order",
+ "options": "Sales Order",
+ "permlevel": 0,
+ "precision": ""
+ },
+ {
"fieldname": "sb_milestones",
"fieldtype": "Section Break",
"label": "Tasks",
@@ -156,13 +192,6 @@
"search_index": 0
},
{
- "fieldname": "company",
- "fieldtype": "Link",
- "label": "Company",
- "options": "Company",
- "permlevel": 0
- },
- {
"fieldname": "section_break_18",
"fieldtype": "Section Break",
"permlevel": 0,
@@ -179,7 +208,7 @@
{
"fieldname": "actual_time",
"fieldtype": "Float",
- "label": "Actual Time",
+ "label": "Actual Time (in Hours)",
"permlevel": 0,
"precision": "",
"read_only": 1
@@ -202,18 +231,16 @@
"search_index": 0
},
{
- "fieldname": "project_details",
+ "fieldname": "section_break_26",
"fieldtype": "Section Break",
- "label": "Project Costing",
- "oldfieldtype": "Section Break",
- "options": "icon-money",
- "permlevel": 0
+ "permlevel": 0,
+ "precision": ""
},
{
- "fieldname": "project_value",
+ "fieldname": "estimated_costing",
"fieldtype": "Currency",
"in_list_view": 1,
- "label": "Project Value",
+ "label": "Estimated Costing",
"no_copy": 0,
"oldfieldname": "project_value",
"oldfieldtype": "Currency",
@@ -223,47 +250,12 @@
"search_index": 0
},
{
- "fieldname": "total_costing_amount",
- "fieldtype": "Currency",
- "label": "Total Costing Amount",
- "permlevel": 0,
- "precision": "",
- "read_only": 1
- },
- {
- "fieldname": "total_expense_claim",
- "fieldtype": "Currency",
- "label": "Total Expense Claim",
- "permlevel": 0,
- "precision": "",
- "read_only": 1
- },
- {
"fieldname": "column_break_22",
"fieldtype": "Column Break",
"permlevel": 0,
"precision": ""
},
{
- "fieldname": "est_material_cost",
- "fieldtype": "Currency",
- "label": "Estimated Material Cost",
- "no_copy": 0,
- "oldfieldname": "est_material_cost",
- "oldfieldtype": "Currency",
- "options": "Company:company:default_currency",
- "permlevel": 0,
- "search_index": 0
- },
- {
- "fieldname": "total_billing_amount",
- "fieldtype": "Currency",
- "label": "Total Billing Amount",
- "permlevel": 0,
- "precision": "",
- "read_only": 1
- },
- {
"fieldname": "cost_center",
"fieldtype": "Link",
"label": "Default Cost Center",
@@ -271,24 +263,30 @@
"permlevel": 0
},
{
- "fieldname": "margin",
+ "fieldname": "project_details",
"fieldtype": "Section Break",
- "label": "Margin",
- "oldfieldtype": "Column Break",
- "permlevel": 0,
- "width": "50%"
+ "label": "",
+ "oldfieldtype": "Section Break",
+ "options": "icon-money",
+ "permlevel": 0
},
{
- "fieldname": "gross_margin_value",
+ "description": "",
+ "fieldname": "total_costing_amount",
"fieldtype": "Currency",
- "label": "Gross Margin Value",
- "no_copy": 0,
- "oldfieldname": "gross_margin_value",
- "oldfieldtype": "Currency",
- "options": "Company:company:default_currency",
+ "label": "Total Costing Amount (via Time Logs)",
"permlevel": 0,
- "reqd": 0,
- "search_index": 0
+ "precision": "",
+ "read_only": 1
+ },
+ {
+ "description": "",
+ "fieldname": "total_expense_claim",
+ "fieldtype": "Currency",
+ "label": "Total Expense Claim (via Expense Claims)",
+ "permlevel": 0,
+ "precision": "",
+ "read_only": 1
},
{
"fieldname": "column_break_28",
@@ -297,44 +295,59 @@
"precision": ""
},
{
- "fieldname": "per_gross_margin",
+ "description": "",
+ "fieldname": "total_billing_amount",
"fieldtype": "Currency",
- "label": "Gross Margin %",
+ "label": "Total Billing Amount (via Time Logs)",
+ "permlevel": 0,
+ "precision": "",
+ "read_only": 1
+ },
+ {
+ "fieldname": "margin",
+ "fieldtype": "Section Break",
+ "label": "",
+ "oldfieldtype": "Column Break",
+ "permlevel": 0,
+ "width": "50%"
+ },
+ {
+ "fieldname": "gross_margin",
+ "fieldtype": "Currency",
+ "label": "Gross Margin",
"no_copy": 0,
- "oldfieldname": "per_gross_margin",
+ "oldfieldname": "gross_margin_value",
"oldfieldtype": "Currency",
"options": "Company:company:default_currency",
"permlevel": 0,
+ "read_only": 1,
"reqd": 0,
"search_index": 0
},
{
- "fieldname": "customer_details",
- "fieldtype": "Section Break",
- "label": "Customer Details",
- "oldfieldtype": "Section Break",
- "options": "icon-user",
- "permlevel": 0
+ "fieldname": "column_break_37",
+ "fieldtype": "Column Break",
+ "permlevel": 0,
+ "precision": ""
},
{
- "fieldname": "customer",
- "fieldtype": "Link",
- "in_filter": 1,
- "label": "Customer",
+ "fieldname": "per_gross_margin",
+ "fieldtype": "Percent",
+ "label": "Gross Margin %",
"no_copy": 0,
- "oldfieldname": "customer",
- "oldfieldtype": "Link",
- "options": "Customer",
+ "oldfieldname": "per_gross_margin",
+ "oldfieldtype": "Currency",
+ "options": "",
"permlevel": 0,
- "print_hide": 1,
+ "read_only": 1,
"reqd": 0,
- "search_index": 1
+ "search_index": 0
}
],
"icon": "icon-puzzle-piece",
"idx": 1,
"max_attachments": 4,
- "modified": "2015-04-13 07:13:06.962942",
+ "modified": "2015-04-14 07:37:56.810833",
"modified_by": "Administrator",
"module": "Projects",
"name": "Project",
diff --git a/erpnext/projects/doctype/project/project.py b/erpnext/projects/doctype/project/project.py
index 0b45e4d..d2741e2 100644
--- a/erpnext/projects/doctype/project/project.py
+++ b/erpnext/projects/doctype/project/project.py
@@ -44,6 +44,8 @@
def sync_tasks(self):
"""sync tasks and remove table"""
+ if self.flags.dont_sync_tasks: return
+
task_names = []
for t in self.tasks:
if t.task_id:
@@ -79,6 +81,22 @@
project=%s and status in ('Closed', 'Cancelled')""", self.name)[0][0]
frappe.db.set_value("Project", self.name, "percent_complete",
int(float(completed) / total * 100))
+
+ def update_costing(self):
+ total_cost = frappe.db.sql("""select sum(total_costing_amount) as costing_amount,
+ sum(total_billing_amount) as billing_amount, sum(total_expense_claim) as expense_claim,
+ min(act_start_date) as start_date, max(act_end_date) as end_date, sum(actual_time) as time
+ from `tabTask` where project = %s""", self.name, as_dict=1)[0]
+
+ self.total_costing_amount = total_cost.costing_amount
+ self.total_billing_amount = total_cost.billing_amount
+ self.total_expense_claim = total_cost.expense_claim
+ self.actual_start_date = total_cost.start_date
+ self.actual_end_date = total_cost.end_date
+ self.actual_time = total_cost.time
+ self.gross_margin = flt(total_cost.billing_amount) - flt(total_cost.costing_amount)
+ if self.total_billing_amount:
+ self.per_gross_margin = (self.gross_margin / flt(self.total_billing_amount)) *100
@frappe.whitelist()
def get_cost_center_name(project_name):
diff --git a/erpnext/projects/doctype/task/task.json b/erpnext/projects/doctype/task/task.json
index 6642100..fc604c2 100644
--- a/erpnext/projects/doctype/task/task.json
+++ b/erpnext/projects/doctype/task/task.json
@@ -18,24 +18,14 @@
"reqd": 1
},
{
- "fieldname": "exp_start_date",
- "fieldtype": "Date",
- "label": "Expected Start Date",
- "oldfieldname": "exp_start_date",
- "oldfieldtype": "Date",
- "permlevel": 0,
- "reqd": 0
- },
- {
- "fieldname": "exp_end_date",
- "fieldtype": "Date",
- "in_filter": 1,
- "label": "Expected End Date",
- "oldfieldname": "exp_end_date",
- "oldfieldtype": "Date",
- "permlevel": 0,
- "reqd": 0,
- "search_index": 1
+ "fieldname": "project",
+ "fieldtype": "Link",
+ "in_list_view": 1,
+ "label": "Project",
+ "oldfieldname": "project",
+ "oldfieldtype": "Link",
+ "options": "Project",
+ "permlevel": 0
},
{
"fieldname": "column_break0",
@@ -57,16 +47,6 @@
"permlevel": 0
},
{
- "fieldname": "project",
- "fieldtype": "Link",
- "in_list_view": 1,
- "label": "Project",
- "oldfieldname": "project",
- "oldfieldtype": "Link",
- "options": "Project",
- "permlevel": 0
- },
- {
"fieldname": "priority",
"fieldtype": "Select",
"in_filter": 1,
@@ -105,32 +85,44 @@
"permlevel": 0
},
{
+ "fieldname": "exp_start_date",
+ "fieldtype": "Date",
+ "label": "Expected Start Date",
+ "oldfieldname": "exp_start_date",
+ "oldfieldtype": "Date",
+ "permlevel": 0,
+ "reqd": 0
+ },
+ {
"default": "0",
- "description": "in Hours",
+ "description": "",
"fieldname": "expected_time",
"fieldtype": "Float",
- "label": "Expected Time",
+ "label": "Expected Time (in hours)",
"oldfieldname": "exp_total_hrs",
"oldfieldtype": "Data",
"permlevel": 0,
"reqd": 0
},
{
- "fieldname": "column_break_12",
+ "fieldname": "column_break_11",
"fieldtype": "Column Break",
"permlevel": 0,
"precision": ""
},
{
- "fieldname": "allocated_budget",
- "fieldtype": "Currency",
- "label": "Allocated Budget",
- "oldfieldname": "allocated_budget",
- "oldfieldtype": "Currency",
- "options": "Company:company:default_currency",
- "permlevel": 0
+ "fieldname": "exp_end_date",
+ "fieldtype": "Date",
+ "in_filter": 1,
+ "label": "Expected End Date",
+ "oldfieldname": "exp_end_date",
+ "oldfieldtype": "Date",
+ "permlevel": 0,
+ "reqd": 0,
+ "search_index": 1
},
{
+ "description": "",
"fieldname": "actual",
"fieldtype": "Section Break",
"label": "",
@@ -142,7 +134,7 @@
{
"fieldname": "act_start_date",
"fieldtype": "Date",
- "label": "Actual Start Date",
+ "label": "Actual Start Date (via Time Logs)",
"oldfieldname": "act_start_date",
"oldfieldtype": "Date",
"permlevel": 0,
@@ -150,10 +142,10 @@
},
{
"default": "",
- "description": "in Hours",
+ "description": "",
"fieldname": "actual_time",
"fieldtype": "Float",
- "label": "Actual Time",
+ "label": "Actual Time (in hours)",
"options": "",
"permlevel": 0,
"precision": "",
@@ -168,7 +160,7 @@
{
"fieldname": "act_end_date",
"fieldtype": "Date",
- "label": "Actual End Date",
+ "label": "Actual End Date (via Time Logs)",
"oldfieldname": "act_end_date",
"oldfieldtype": "Date",
"permlevel": 0,
@@ -183,7 +175,7 @@
{
"fieldname": "total_costing_amount",
"fieldtype": "Currency",
- "label": "Total Costing Amount",
+ "label": "Total Costing Amount (via Time Logs)",
"oldfieldname": "actual_budget",
"oldfieldtype": "Currency",
"options": "Company:company:default_currency",
@@ -193,7 +185,7 @@
{
"fieldname": "total_expense_claim",
"fieldtype": "Currency",
- "label": "Total Expense Claim",
+ "label": "Total Expense Claim (via Expense Claim)",
"options": "Company:company:default_currency",
"permlevel": 0,
"precision": "",
@@ -209,7 +201,7 @@
"fieldname": "total_billing_amount",
"fieldtype": "Currency",
"hidden": 0,
- "label": "Total Billing Amount",
+ "label": "Total Billing Amount (via Time Logs)",
"permlevel": 0,
"precision": "",
"read_only": 1
@@ -257,7 +249,7 @@
"idx": 1,
"istable": 0,
"max_attachments": 5,
- "modified": "2015-04-13 05:36:33.544083",
+ "modified": "2015-04-14 07:56:24.481667",
"modified_by": "Administrator",
"module": "Projects",
"name": "Task",
diff --git a/erpnext/projects/doctype/task/task.py b/erpnext/projects/doctype/task/task.py
index 8c74edb..a03340f 100644
--- a/erpnext/projects/doctype/task/task.py
+++ b/erpnext/projects/doctype/task/task.py
@@ -64,18 +64,10 @@
def update_project(self):
if self.project and frappe.db.exists("Project", self.project):
- total_cost = frappe.db.sql("""select sum(total_costing_amount) as costing_amount,
- sum(total_billing_amount) as billing_amount, sum(total_expense_claim) as expense_claim,
- min(act_start_date) as start_date, max(act_end_date) as end_date, sum(actual_time) as time
- from `tabTask` where project = %s""", self.project, as_dict=1)[0]
- frappe.db.set_values("Project", self.project, {
- "total_costing_amount": total_cost.costing_amount,
- "total_billing_amount": total_cost.billing_amount,
- "total_expense_claim": total_cost.expense_claim,
- "actual_start_date": total_cost.start_date,
- "actual_end_date": total_cost.end_date,
- "actual_time": total_cost.time
- })
+ project = frappe.get_doc("Project", self.project)
+ project.flags.dont_sync_tasks = True
+ project.update_costing()
+ project.save()
@frappe.whitelist()
def get_events(start, end, filters=None):
diff --git a/erpnext/projects/doctype/time_log/time_log.js b/erpnext/projects/doctype/time_log/time_log.js
index 5625ff3..2f960ab 100644
--- a/erpnext/projects/doctype/time_log/time_log.js
+++ b/erpnext/projects/doctype/time_log/time_log.js
@@ -4,7 +4,6 @@
frappe.provide("erpnext.projects");
frappe.ui.form.on("Time Log", "onload", function(frm) {
- frm.set_query("task", erpnext.queries.task);
if (frm.doc.for_manufacturing) {
frappe.ui.form.trigger("Time Log", "production_order");
}
@@ -88,3 +87,11 @@
frm.doc("billing_amount", 0);
}
});
+
+cur_frm.fields_dict['task'].get_query = function(doc) {
+ return {
+ filters:{
+ 'project': doc.project
+ }
+ }
+}
diff --git a/erpnext/projects/doctype/time_log/time_log.json b/erpnext/projects/doctype/time_log/time_log.json
index 09c4e87..e9e2077 100644
--- a/erpnext/projects/doctype/time_log/time_log.json
+++ b/erpnext/projects/doctype/time_log/time_log.json
@@ -232,10 +232,10 @@
},
{
"default": "0",
- "description": "per hour",
+ "description": "",
"fieldname": "costing_rate",
"fieldtype": "Currency",
- "label": "Costing Rate",
+ "label": "Costing Rate (per hour)",
"permlevel": 0,
"precision": "",
"read_only": 1
@@ -257,10 +257,10 @@
},
{
"default": "0",
- "description": "per hour",
+ "description": "",
"fieldname": "billing_rate",
"fieldtype": "Currency",
- "label": "Billing Rate",
+ "label": "Billing Rate (per hour)",
"permlevel": 0,
"precision": "",
"read_only": 1
@@ -322,15 +322,7 @@
"icon": "icon-time",
"idx": 1,
"is_submittable": 1,
-<<<<<<< HEAD
-<<<<<<< HEAD
- "modified": "2015-04-06 02:47:16.187046",
-=======
- "modified": "2015-04-09 08:29:34.464429",
->>>>>>> Fixes in time_log
-=======
- "modified": "2015-04-13 04:31:20.855439",
->>>>>>> task and project- billing amount and actual amount added
+ "modified": "2015-04-14 09:07:28.468792",
"modified_by": "Administrator",
"module": "Projects",
"name": "Time Log",