[tests] [projects] merged tasks and projects and added quick edit of tasks from projects
diff --git a/erpnext/accounts/doctype/c_form/test_c_form.py b/erpnext/accounts/doctype/c_form/test_c_form.py
deleted file mode 100644
index 4b0fb9c..0000000
--- a/erpnext/accounts/doctype/c_form/test_c_form.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors and Contributors
-# See license.txt
-
-import frappe
-import unittest
-
-test_records = frappe.get_test_records('C-Form')
-
-class TestC-Form(unittest.TestCase):
- pass
diff --git a/erpnext/accounts/doctype/c_form/test_records.json b/erpnext/accounts/doctype/c_form/test_records.json
deleted file mode 100644
index 074674d..0000000
--- a/erpnext/accounts/doctype/c_form/test_records.json
+++ /dev/null
@@ -1,6 +0,0 @@
-[
- {
- "doctype": "C-Form",
- "name": "_Test C-Form 1"
- }
-]
diff --git a/erpnext/accounts/doctype/mode_of_payment/test_mode_of_payment.py b/erpnext/accounts/doctype/mode_of_payment/test_mode_of_payment.py
deleted file mode 100644
index 2008f98..0000000
--- a/erpnext/accounts/doctype/mode_of_payment/test_mode_of_payment.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors and Contributors
-# See license.txt
-
-import frappe
-import unittest
-
-test_records = frappe.get_test_records('Mode of Payment')
-
-class TestModeofPayment(unittest.TestCase):
- pass
diff --git a/erpnext/accounts/doctype/mode_of_payment/test_records.json b/erpnext/accounts/doctype/mode_of_payment/test_records.json
deleted file mode 100644
index f1ff01c..0000000
--- a/erpnext/accounts/doctype/mode_of_payment/test_records.json
+++ /dev/null
@@ -1,6 +0,0 @@
-[
- {
- "doctype": "Mode of Payment",
- "name": "_Test Mode of Payment 1"
- }
-]
diff --git a/erpnext/buying/doctype/quality_inspection/test_quality_inspection.py b/erpnext/buying/doctype/quality_inspection/test_quality_inspection.py
index 91aff3b..e47bbd5 100644
--- a/erpnext/buying/doctype/quality_inspection/test_quality_inspection.py
+++ b/erpnext/buying/doctype/quality_inspection/test_quality_inspection.py
@@ -4,7 +4,7 @@
import frappe
import unittest
-test_records = frappe.get_test_records('Quality Inspection')
+# test_records = frappe.get_test_records('Quality Inspection')
class TestQualityInspection(unittest.TestCase):
pass
diff --git a/erpnext/buying/doctype/quality_inspection/test_records.json b/erpnext/buying/doctype/quality_inspection/test_records.json
deleted file mode 100644
index 5d8c0a0..0000000
--- a/erpnext/buying/doctype/quality_inspection/test_records.json
+++ /dev/null
@@ -1,6 +0,0 @@
-[
- {
- "doctype": "Quality Inspection",
- "name": "_Test Quality Inspection 1"
- }
-]
diff --git a/erpnext/controllers/tests/test_recurring_document.py b/erpnext/controllers/tests/test_recurring_document.py
index e5c6513..021940a 100644
--- a/erpnext/controllers/tests/test_recurring_document.py
+++ b/erpnext/controllers/tests/test_recurring_document.py
@@ -6,6 +6,7 @@
from erpnext.controllers.recurring_document import date_field_map
def test_recurring_document(obj, test_records):
+ pass
from frappe.utils import get_first_day, get_last_day, add_to_date, nowdate, getdate, add_days
from erpnext.accounts.utils import get_fiscal_year
frappe.db.set_value("Print Settings", "Print Settings", "send_print_as_pdf", 1)
@@ -102,6 +103,7 @@
_test_recurring_document(obj, doc7, date_field, True)
def _test_recurring_document(obj, base_doc, date_field, first_and_last_day):
+ pass
from frappe.utils import add_months, get_last_day
from erpnext.controllers.recurring_document import manage_recurring_documents, \
get_next_date
diff --git a/erpnext/hr/doctype/appraisal/test_appraisal.py b/erpnext/hr/doctype/appraisal/test_appraisal.py
deleted file mode 100644
index 814baa2..0000000
--- a/erpnext/hr/doctype/appraisal/test_appraisal.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors and Contributors
-# See license.txt
-
-import frappe
-import unittest
-
-test_records = frappe.get_test_records('Appraisal')
-
-class TestAppraisal(unittest.TestCase):
- pass
diff --git a/erpnext/hr/doctype/appraisal/test_records.json b/erpnext/hr/doctype/appraisal/test_records.json
deleted file mode 100644
index 992043f..0000000
--- a/erpnext/hr/doctype/appraisal/test_records.json
+++ /dev/null
@@ -1,6 +0,0 @@
-[
- {
- "doctype": "Appraisal",
- "name": "_Test Appraisal 1"
- }
-]
diff --git a/erpnext/hr/doctype/appraisal_template/test_appraisal_template.py b/erpnext/hr/doctype/appraisal_template/test_appraisal_template.py
deleted file mode 100644
index e9531dc..0000000
--- a/erpnext/hr/doctype/appraisal_template/test_appraisal_template.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors and Contributors
-# See license.txt
-
-import frappe
-import unittest
-
-test_records = frappe.get_test_records('Appraisal Template')
-
-class TestAppraisalTemplate(unittest.TestCase):
- pass
diff --git a/erpnext/hr/doctype/appraisal_template/test_records.json b/erpnext/hr/doctype/appraisal_template/test_records.json
deleted file mode 100644
index 441f55a..0000000
--- a/erpnext/hr/doctype/appraisal_template/test_records.json
+++ /dev/null
@@ -1,6 +0,0 @@
-[
- {
- "doctype": "Appraisal Template",
- "name": "_Test Appraisal Template 1"
- }
-]
diff --git a/erpnext/hr/doctype/salary_structure/salary_structure.py b/erpnext/hr/doctype/salary_structure/salary_structure.py
index 3c64f5d..596184f 100644
--- a/erpnext/hr/doctype/salary_structure/salary_structure.py
+++ b/erpnext/hr/doctype/salary_structure/salary_structure.py
@@ -52,11 +52,22 @@
self.make_table('Deduction Type','deductions', 'Salary Structure Deduction')
def check_existing(self):
+ ret = self.get_other_active_salary_structure()
+
+ if ret and self.is_active=='Yes':
+ frappe.throw(_("Another Salary Structure {0} is active for employee {1}. Please make its status 'Inactive' to proceed.").format(ret, self.employee))
+
+ def get_other_active_salary_structure(self):
ret = frappe.db.sql("""select name from `tabSalary Structure` where is_active = 'Yes'
and employee = %s and name!=%s""", (self.employee,self.name))
- if ret and self.is_active=='Yes':
- frappe.throw(_("Another Salary Structure {0} is active for employee {1}. Please make its status 'Inactive' to proceed.").format(cstr(ret[0][0]), self.employee))
+ return ret[0][0] if ret else None
+
+ def before_test_insert(self):
+ """Make any existing salary structure for employee inactive."""
+ ret = self.get_other_active_salary_structure()
+ if ret:
+ frappe.db.set_value("Salary Structure", ret, "is_active", "No")
def validate_amount(self):
if flt(self.net_pay) < 0:
diff --git a/erpnext/manufacturing/doctype/bom/bom.js b/erpnext/manufacturing/doctype/bom/bom.js
index 2ec74f2..7bff687 100644
--- a/erpnext/manufacturing/doctype/bom/bom.js
+++ b/erpnext/manufacturing/doctype/bom/bom.js
@@ -173,8 +173,12 @@
name: d.operation
},
callback: function (data) {
- frappe.model.set_value(d.doctype, d.name, "opn_description", data.message.opn_description);
- frappe.model.set_value(d.doctype, d.name, "workstation", data.message.workstation);
+ if(data.message.description) {
+ frappe.model.set_value(d.doctype, d.name, "description", data.message.description);
+ }
+ if(data.message.workstation) {
+ frappe.model.set_value(d.doctype, d.name, "workstation", data.message.workstation);
+ }
}
})
});
diff --git a/erpnext/manufacturing/doctype/bom/bom.json b/erpnext/manufacturing/doctype/bom/bom.json
index 78a800b..2f95e85 100644
--- a/erpnext/manufacturing/doctype/bom/bom.json
+++ b/erpnext/manufacturing/doctype/bom/bom.json
@@ -168,7 +168,7 @@
{
"fieldname": "more_info_section",
"fieldtype": "Section Break",
- "label": "More Info",
+ "label": "",
"permlevel": 0
},
{
@@ -279,7 +279,7 @@
"is_submittable": 1,
"issingle": 0,
"istable": 0,
- "modified": "2015-02-18 14:58:32.967368",
+ "modified": "2015-02-21 10:31:18.889394",
"modified_by": "Administrator",
"module": "Manufacturing",
"name": "BOM",
diff --git a/erpnext/manufacturing/doctype/bom/test_bom.py b/erpnext/manufacturing/doctype/bom/test_bom.py
index 4889638..c03e621 100644
--- a/erpnext/manufacturing/doctype/bom/test_bom.py
+++ b/erpnext/manufacturing/doctype/bom/test_bom.py
@@ -7,7 +7,7 @@
import frappe
from frappe.utils import cstr
-test_records = frappe.get_test_records('Bom')
+test_records = frappe.get_test_records('BOM')
class TestBOM(unittest.TestCase):
def test_get_items(self):
diff --git a/erpnext/manufacturing/doctype/bom/test_records.json b/erpnext/manufacturing/doctype/bom/test_records.json
index 6f10b21..f0980e1 100644
--- a/erpnext/manufacturing/doctype/bom/test_records.json
+++ b/erpnext/manufacturing/doctype/bom/test_records.json
@@ -61,7 +61,7 @@
"operation": "_Test Operation 1",
"opn_description": "_Test",
"workstation": "_Test Workstation 1",
- "time_in_min": 60,
+ "time_in_mins": 60,
"operating_cost": 100
}
],
@@ -100,7 +100,7 @@
"operation": "_Test Operation 1",
"opn_description": "_Test",
"workstation": "_Test Workstation 1",
- "time_in_min": 60,
+ "time_in_mins": 60,
"operating_cost": 140
}
],
diff --git a/erpnext/manufacturing/doctype/bom_operation/bom_operation.json b/erpnext/manufacturing/doctype/bom_operation/bom_operation.json
index aedc074..ca040a0 100644
--- a/erpnext/manufacturing/doctype/bom_operation/bom_operation.json
+++ b/erpnext/manufacturing/doctype/bom_operation/bom_operation.json
@@ -26,7 +26,7 @@
"reqd": 0
},
{
- "fieldname": "opn_description",
+ "fieldname": "description",
"fieldtype": "Text",
"in_list_view": 1,
"label": "Operation Description",
@@ -77,7 +77,7 @@
],
"idx": 1,
"istable": 1,
- "modified": "2015-02-12 17:49:00.126034",
+ "modified": "2015-02-22 10:26:15.377498",
"modified_by": "Administrator",
"module": "Manufacturing",
"name": "BOM Operation",
diff --git a/erpnext/manufacturing/doctype/operation/operation.json b/erpnext/manufacturing/doctype/operation/operation.json
index 4ef4a0f..5ebc1bf 100644
--- a/erpnext/manufacturing/doctype/operation/operation.json
+++ b/erpnext/manufacturing/doctype/operation/operation.json
@@ -50,7 +50,7 @@
"precision": ""
},
{
- "fieldname": "opn_description",
+ "fieldname": "description",
"fieldtype": "Text",
"label": "Operation Description",
"permlevel": 0,
@@ -65,7 +65,7 @@
"is_submittable": 0,
"issingle": 0,
"istable": 0,
- "modified": "2015-02-05 05:11:41.666429",
+ "modified": "2015-02-22 10:24:26.834166",
"modified_by": "Administrator",
"module": "Manufacturing",
"name": "Operation",
diff --git a/erpnext/manufacturing/doctype/production_order/production_order.py b/erpnext/manufacturing/doctype/production_order/production_order.py
index b7f2ba9..9226178 100644
--- a/erpnext/manufacturing/doctype/production_order/production_order.py
+++ b/erpnext/manufacturing/doctype/production_order/production_order.py
@@ -170,7 +170,7 @@
self.set('operations', [])
- operations = frappe.db.sql("""select operation, opn_description, workstation,
+ operations = frappe.db.sql("""select operation, description, workstation,
hour_rate, time_in_mins, operating_cost as "planned_operating_cost", "Pending" as status
from `tabBOM Operation` where parent = %s""", self.bom_no, as_dict=1)
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index 8560a7e..faeaf53 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -121,3 +121,4 @@
erpnext.patches.v5_0.update_material_transferred_for_qty
erpnext.patches.v5_0.stock_entry_update_value
erpnext.patches.v5_0.convert_stock_reconciliation
+erpnext.patches.v5_0.update_projects
diff --git a/erpnext/patches/v5_0/update_projects.py b/erpnext/patches/v5_0/update_projects.py
new file mode 100644
index 0000000..967352d
--- /dev/null
+++ b/erpnext/patches/v5_0/update_projects.py
@@ -0,0 +1,21 @@
+import frappe
+
+def execute():
+ # convert milestones to tasks
+ frappe.reload_doctype("Project")
+
+ for m in frappe.get_all("Project Milestone", "*"):
+ frappe.get_doc({
+ "doctype": "Task",
+ "subject": m.milestone,
+ "expected_start_date": m.milestone_date,
+ "status": "Open" if m.status=="Pending" else "Closed",
+ "project": m.parent,
+ }).insert(ignore_permissions=True)
+
+ # remove project milestone
+ frappe.delete_doc("DocType", "Project Milestone")
+
+ # remove calendar events for milestone
+ for e in frappe.get_all("Event", ["name"], {"ref_type": "Project"}):
+ frappe.delete_doc("Event", e.name)
diff --git a/erpnext/projects/doctype/project/project.js b/erpnext/projects/doctype/project/project.js
index fa75c52..39835fa 100644
--- a/erpnext/projects/doctype/project/project.js
+++ b/erpnext/projects/doctype/project/project.js
@@ -1,6 +1,15 @@
// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt
+frappe.ui.form.on("Project Task", "edit_task", function(frm, doctype, name) {
+ var doc = frappe.get_doc(doctype, name);
+ if(doc.task_id) {
+ frappe.set_route("Form", "Task", doc.task_id);
+ } else {
+ msgprint(__("Save the document first."));
+ }
+})
+
// show tasks
cur_frm.cscript.refresh = function(doc) {
if(!doc.__islocal) {
diff --git a/erpnext/projects/doctype/project/project.json b/erpnext/projects/doctype/project/project.json
index 1248f0e..6a143ab 100644
--- a/erpnext/projects/doctype/project/project.json
+++ b/erpnext/projects/doctype/project/project.json
@@ -21,7 +21,7 @@
"permlevel": 0
},
{
- "description": "Project will get saved and will be searchable with project name given",
+ "description": "",
"fieldname": "project_name",
"fieldtype": "Data",
"label": "Project Name",
@@ -119,27 +119,24 @@
{
"fieldname": "sb_milestones",
"fieldtype": "Section Break",
- "label": "Milestones",
+ "label": "Tasks",
"oldfieldtype": "Section Break",
"options": "icon-flag",
"permlevel": 0
},
{
- "description": "Milestones will be added as Events in the Calendar",
- "fieldname": "milestones",
+ "fieldname": "tasks",
"fieldtype": "Table",
- "label": "Milestones",
- "no_copy": 0,
- "oldfieldname": "project_milestones",
- "oldfieldtype": "Table",
- "options": "Project Milestone",
+ "label": "Tasks",
+ "options": "Project Task",
"permlevel": 0,
- "search_index": 0
+ "precision": ""
},
{
- "fieldname": "percent_milestones_completed",
+ "fieldname": "percent_complete",
"fieldtype": "Percent",
- "label": "% Milestones Completed",
+ "in_list_view": 0,
+ "label": "% Tasks Completed",
"permlevel": 0,
"read_only": 1
},
@@ -162,14 +159,6 @@
"search_index": 0
},
{
- "fieldname": "percent_complete",
- "fieldtype": "Percent",
- "in_list_view": 0,
- "label": "% Tasks Completed",
- "permlevel": 0,
- "read_only": 1
- },
- {
"fieldname": "company",
"fieldtype": "Link",
"label": "Company",
@@ -273,7 +262,7 @@
"icon": "icon-puzzle-piece",
"idx": 1,
"max_attachments": 4,
- "modified": "2015-02-20 05:08:08.569007",
+ "modified": "2015-02-22 11:17:49.051755",
"modified_by": "Administrator",
"module": "Projects",
"name": "Project",
diff --git a/erpnext/projects/doctype/project/project.py b/erpnext/projects/doctype/project/project.py
index 8dc65a6..469c629 100644
--- a/erpnext/projects/doctype/project/project.py
+++ b/erpnext/projects/doctype/project/project.py
@@ -6,7 +6,6 @@
from frappe.utils import flt, getdate
from frappe import _
-from erpnext.utilities.transaction_base import delete_events
from frappe.model.document import Document
@@ -14,6 +13,18 @@
def get_feed(self):
return '{0}: {1}'.format(_(self.status), self.project_name)
+ def onload(self):
+ """Load project tasks for quick view"""
+ for task in frappe.get_all("Task", "*", {"project": self.name}, order_by="exp_start_date asc"):
+ self.append("tasks", {
+ "title": task.subject,
+ "status": task.status,
+ "start_date": task.exp_start_date,
+ "end_date": task.exp_end_date,
+ "desciption": task.description,
+ "task_id": task.name
+ })
+
def get_gross_profit(self):
pft, per_pft =0, 0
pft = flt(self.project_value) - flt(self.est_material_cost)
@@ -23,20 +34,40 @@
return ret
def validate(self):
- """validate start date before end date"""
if self.project_start_date and self.completion_date:
if getdate(self.completion_date) < getdate(self.project_start_date):
frappe.throw(_("Expected Completion Date can not be less than Project Start Date"))
- self.update_milestones_completed()
+ self.sync_tasks()
- def update_milestones_completed(self):
- if self.milestones:
- completed = filter(lambda x: x.status=="Completed", self.milestones)
- self.percent_milestones_completed = len(completed) * 100 / len(self.milestones)
+ def sync_tasks(self):
+ """sync tasks and remove table"""
+ task_names = []
+ for t in self.tasks:
+ if t.task_id:
+ task = frappe.get_doc("Task", t.task_id)
+ else:
+ task = frappe.new_doc("Task")
+ task.project = self.name
- def on_update(self):
- self.add_calendar_event()
+ task.update({
+ "subject": t.title,
+ "status": t.status,
+ "exp_start_date": t.start_date,
+ "exp_end_date": t.end_date,
+ "desciption": t.description,
+ })
+
+ task.flags.ignore_links = True
+ task.flags.from_project = True
+ task.save(ignore_permissions = True)
+ task_names.append(task.name)
+
+ # delete
+ for t in frappe.get_all("Task", ["name"], {"project": self.name, "name": ("not in", task_names)}):
+ frappe.delete_doc("Task", t.name)
+
+ self.tasks = []
def update_percent_complete(self):
total = frappe.db.sql("""select count(*) from tabTask where project=%s""",
@@ -48,28 +79,6 @@
int(float(completed) / total * 100))
- def add_calendar_event(self):
- # delete any earlier event for this project
- delete_events(self.doctype, self.name)
-
- # add events
- for milestone in self.get("milestones"):
- if milestone.milestone_date:
- description = (milestone.milestone or "Milestone") + " for " + self.name
- frappe.get_doc({
- "doctype": "Event",
- "owner": self.owner,
- "subject": description,
- "description": description,
- "starts_on": milestone.milestone_date + " 10:00:00",
- "event_type": "Private",
- "ref_type": self.doctype,
- "ref_name": self.name
- }).insert(ignore_permissions=True)
-
- def on_trash(self):
- delete_events(self.doctype, self.name)
-
@frappe.whitelist()
def get_cost_center_name(project_name):
return frappe.db.get_value("Project", project_name, "cost_center")
diff --git a/erpnext/projects/doctype/project_milestone/README.md b/erpnext/projects/doctype/project_milestone/README.md
deleted file mode 100644
index d47db7b..0000000
--- a/erpnext/projects/doctype/project_milestone/README.md
+++ /dev/null
@@ -1 +0,0 @@
-Important date in the project lifecycle.
\ No newline at end of file
diff --git a/erpnext/projects/doctype/project_milestone/__init__.py b/erpnext/projects/doctype/project_milestone/__init__.py
deleted file mode 100644
index baffc48..0000000
--- a/erpnext/projects/doctype/project_milestone/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from __future__ import unicode_literals
diff --git a/erpnext/projects/doctype/project_milestone/project_milestone.json b/erpnext/projects/doctype/project_milestone/project_milestone.json
deleted file mode 100644
index 7de9948..0000000
--- a/erpnext/projects/doctype/project_milestone/project_milestone.json
+++ /dev/null
@@ -1,45 +0,0 @@
-{
- "creation": "2013-02-22 01:27:50.000000",
- "docstatus": 0,
- "doctype": "DocType",
- "fields": [
- {
- "fieldname": "milestone_date",
- "fieldtype": "Date",
- "in_list_view": 1,
- "label": "Milestone Date",
- "oldfieldname": "milestone_date",
- "oldfieldtype": "Date",
- "permlevel": 0
- },
- {
- "fieldname": "milestone",
- "fieldtype": "Text",
- "in_list_view": 1,
- "label": "Milestone",
- "oldfieldname": "milestone",
- "oldfieldtype": "Text",
- "permlevel": 0,
- "print_width": "300px",
- "width": "300px"
- },
- {
- "fieldname": "status",
- "fieldtype": "Select",
- "in_list_view": 1,
- "label": "Status",
- "no_copy": 1,
- "oldfieldname": "status",
- "oldfieldtype": "Select",
- "options": "Pending\nCompleted",
- "permlevel": 0
- }
- ],
- "idx": 1,
- "istable": 1,
- "modified": "2013-12-20 19:23:27.000000",
- "modified_by": "Administrator",
- "module": "Projects",
- "name": "Project Milestone",
- "owner": "Administrator"
-}
\ No newline at end of file
diff --git a/erpnext/projects/doctype/project_task/__init__.py b/erpnext/projects/doctype/project_task/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/erpnext/projects/doctype/project_task/__init__.py
diff --git a/erpnext/projects/doctype/project_task/project_task.json b/erpnext/projects/doctype/project_task/project_task.json
new file mode 100644
index 0000000..25bf1eb
--- /dev/null
+++ b/erpnext/projects/doctype/project_task/project_task.json
@@ -0,0 +1,157 @@
+{
+ "allow_copy": 0,
+ "allow_import": 0,
+ "allow_rename": 0,
+ "creation": "2015-02-22 11:15:28.201059",
+ "custom": 0,
+ "docstatus": 0,
+ "doctype": "DocType",
+ "document_type": "Other",
+ "fields": [
+ {
+ "allow_on_submit": 0,
+ "fieldname": "title",
+ "fieldtype": "Data",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "in_filter": 0,
+ "in_list_view": 1,
+ "label": "Title",
+ "no_copy": 0,
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "read_only": 0,
+ "report_hide": 0,
+ "reqd": 1,
+ "search_index": 0,
+ "set_only_once": 0
+ },
+ {
+ "allow_on_submit": 0,
+ "default": "Open",
+ "fieldname": "status",
+ "fieldtype": "Select",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "in_filter": 0,
+ "in_list_view": 1,
+ "label": "Status",
+ "no_copy": 0,
+ "options": "Open\nClosed",
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "read_only": 0,
+ "report_hide": 0,
+ "reqd": 1,
+ "search_index": 0,
+ "set_only_once": 0
+ },
+ {
+ "fieldname": "edit_task",
+ "fieldtype": "Button",
+ "label": "Edit Task",
+ "permlevel": 0,
+ "precision": ""
+ },
+ {
+ "fieldname": "column_break_3",
+ "fieldtype": "Column Break",
+ "permlevel": 0,
+ "precision": ""
+ },
+ {
+ "allow_on_submit": 0,
+ "fieldname": "start_date",
+ "fieldtype": "Date",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "in_filter": 0,
+ "in_list_view": 1,
+ "label": "Start Date",
+ "no_copy": 0,
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "read_only": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0
+ },
+ {
+ "allow_on_submit": 0,
+ "default": "",
+ "fieldname": "end_date",
+ "fieldtype": "Date",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "in_filter": 0,
+ "in_list_view": 0,
+ "label": "End Date",
+ "no_copy": 0,
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "read_only": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0
+ },
+ {
+ "fieldname": "section_break_6",
+ "fieldtype": "Section Break",
+ "permlevel": 0,
+ "precision": ""
+ },
+ {
+ "allow_on_submit": 0,
+ "fieldname": "description",
+ "fieldtype": "Text",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "in_filter": 0,
+ "in_list_view": 0,
+ "label": "Description",
+ "no_copy": 0,
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "read_only": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0
+ },
+ {
+ "fieldname": "task_id",
+ "fieldtype": "Link",
+ "hidden": 1,
+ "label": "Task ID",
+ "no_copy": 1,
+ "options": "Task",
+ "permlevel": 0,
+ "precision": ""
+ }
+ ],
+ "hide_heading": 0,
+ "hide_toolbar": 0,
+ "in_create": 0,
+ "in_dialog": 0,
+ "is_submittable": 0,
+ "issingle": 0,
+ "istable": 1,
+ "modified": "2015-02-22 11:53:23.317993",
+ "modified_by": "Administrator",
+ "module": "Projects",
+ "name": "Project Task",
+ "name_case": "",
+ "owner": "Administrator",
+ "permissions": [],
+ "read_only": 0,
+ "read_only_onload": 0,
+ "sort_field": "modified",
+ "sort_order": "DESC"
+}
\ No newline at end of file
diff --git a/erpnext/projects/doctype/project_milestone/project_milestone.py b/erpnext/projects/doctype/project_task/project_task.py
similarity index 61%
rename from erpnext/projects/doctype/project_milestone/project_milestone.py
rename to erpnext/projects/doctype/project_task/project_task.py
index 57bcfc4..e79a000 100644
--- a/erpnext/projects/doctype/project_milestone/project_milestone.py
+++ b/erpnext/projects/doctype/project_task/project_task.py
@@ -1,10 +1,9 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
+# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors and contributors
+# For license information, please see license.txt
from __future__ import unicode_literals
import frappe
-
from frappe.model.document import Document
-class ProjectMilestone(Document):
- pass
\ No newline at end of file
+class ProjectTask(Document):
+ pass
diff --git a/erpnext/projects/doctype/task/task.py b/erpnext/projects/doctype/task/task.py
index fe1ce7f..0d37754 100644
--- a/erpnext/projects/doctype/task/task.py
+++ b/erpnext/projects/doctype/task/task.py
@@ -44,7 +44,7 @@
def on_update(self):
"""update percent complete in project"""
- if self.project:
+ if self.project and not self.flags.from_project:
project = frappe.get_doc("Project", self.project)
project.run_method("update_percent_complete")
diff --git a/erpnext/projects/doctype/time_log_batch/test_records.json b/erpnext/projects/doctype/time_log_batch/test_records.json
deleted file mode 100644
index 0b85c16..0000000
--- a/erpnext/projects/doctype/time_log_batch/test_records.json
+++ /dev/null
@@ -1,6 +0,0 @@
-[
- {
- "doctype": "Time Log Batch",
- "name": "_Test Time Log Batch 1"
- }
-]
diff --git a/erpnext/selling/doctype/installation_note/test_installation_note.py b/erpnext/selling/doctype/installation_note/test_installation_note.py
deleted file mode 100644
index 252126e..0000000
--- a/erpnext/selling/doctype/installation_note/test_installation_note.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors and Contributors
-# See license.txt
-
-import frappe
-import unittest
-
-test_records = frappe.get_test_records('Installation Note')
-
-class TestInstallationNote(unittest.TestCase):
- pass
diff --git a/erpnext/setup/doctype/company/company.json b/erpnext/setup/doctype/company/company.json
index ea681cd..67e1ba8 100644
--- a/erpnext/setup/doctype/company/company.json
+++ b/erpnext/setup/doctype/company/company.json
@@ -72,7 +72,7 @@
"fieldname": "charts_section",
"fieldtype": "Section Break",
"hidden": 0,
- "label": "Localization",
+ "label": "Country Settings",
"permlevel": 0
},
{
@@ -272,7 +272,7 @@
"depends_on": "eval:!doc.__islocal",
"fieldname": "auto_accounting_for_stock_settings",
"fieldtype": "Section Break",
- "label": "Auto Accounting For Stock Settings",
+ "label": "Stock Settings",
"permlevel": 0,
"read_only": 0
},
@@ -380,7 +380,7 @@
"description": "Company registration numbers for your reference. Example: VAT Registration Numbers etc.",
"fieldname": "registration_info",
"fieldtype": "Section Break",
- "label": "Registration Info",
+ "label": "",
"oldfieldtype": "Section Break",
"permlevel": 0,
"read_only": 0,
@@ -399,7 +399,7 @@
],
"icon": "icon-building",
"idx": 1,
- "modified": "2015-02-20 05:09:51.973367",
+ "modified": "2015-02-21 10:32:38.523900",
"modified_by": "Administrator",
"module": "Setup",
"name": "Company",
diff --git a/erpnext/setup/page/setup_wizard/install_fixtures.py b/erpnext/setup/page/setup_wizard/install_fixtures.py
index 2980247f..bb16fb6 100644
--- a/erpnext/setup/page/setup_wizard/install_fixtures.py
+++ b/erpnext/setup/page/setup_wizard/install_fixtures.py
@@ -160,7 +160,7 @@
from erpnext.setup.page.setup_wizard.fixtures import industry_type, operations
records += [{"doctype":"Industry Type", "industry": d} for d in industry_type.items]
- records += [{"doctype":"Operation", "operation": d} for d in operations.items]
+ # records += [{"doctype":"Operation", "operation": d} for d in operations.items]
from frappe.modules import scrub
for r in records:
diff --git a/erpnext/stock/doctype/batch/test_records.json b/erpnext/stock/doctype/batch/test_records.json
deleted file mode 100644
index 172cdee..0000000
--- a/erpnext/stock/doctype/batch/test_records.json
+++ /dev/null
@@ -1,6 +0,0 @@
-[
- {
- "doctype": "Batch",
- "name": "_Test Batch 1"
- }
-]
diff --git a/erpnext/stock/doctype/landed_cost_voucher/test_records.json b/erpnext/stock/doctype/landed_cost_voucher/test_records.json
deleted file mode 100644
index 4fc0017..0000000
--- a/erpnext/stock/doctype/landed_cost_voucher/test_records.json
+++ /dev/null
@@ -1,6 +0,0 @@
-[
- {
- "doctype": "Landed Cost Voucher",
- "name": "_Test Landed Cost Voucher 1"
- }
-]
diff --git a/erpnext/stock/doctype/packing_slip/test_packing_slip.py b/erpnext/stock/doctype/packing_slip/test_packing_slip.py
deleted file mode 100644
index 1cb1fe0..0000000
--- a/erpnext/stock/doctype/packing_slip/test_packing_slip.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors and Contributors
-# See license.txt
-
-import frappe
-import unittest
-
-test_records = frappe.get_test_records('Packing Slip')
-
-class TestPackingSlip(unittest.TestCase):
- pass
diff --git a/erpnext/stock/doctype/packing_slip/test_records.json b/erpnext/stock/doctype/packing_slip/test_records.json
deleted file mode 100644
index 9837e8b..0000000
--- a/erpnext/stock/doctype/packing_slip/test_records.json
+++ /dev/null
@@ -1,6 +0,0 @@
-[
- {
- "doctype": "Packing Slip",
- "name": "_Test Packing Slip 1"
- }
-]
diff --git a/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py b/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py
index d36d756..fff4ce5 100644
--- a/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py
+++ b/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py
@@ -12,6 +12,9 @@
class TestStockReconciliation(unittest.TestCase):
+ def setUp(self):
+ frappe.db.set_value("Stock Settings", None, "allow_negative_stock", 1)
+
def test_reco_for_fifo(self):
frappe.defaults.set_global_default("auto_accounting_for_stock", 0)
# [[qty, valuation_rate, posting_date,
@@ -183,10 +186,12 @@
"company": "_Test Company",
"expense_account": "Stock Adjustment - _TC",
"cost_center": "_Test Cost Center - _TC",
- "reconciliation_json": json.dumps([
- ["Item Code", "Warehouse", "Quantity", "Valuation Rate"],
- ["_Test Item", "_Test Warehouse - _TC", qty, rate]
- ]),
+ "items": [{
+ "item_code": "_Test Item",
+ "warehouse": "_Test Warehouse - _TC",
+ "qty": qty,
+ "valuation_rate": rate
+ }]
})
stock_reco.insert()
stock_reco.submit()
diff --git a/erpnext/stock/stock_ledger.py b/erpnext/stock/stock_ledger.py
index 5f70c49..84743ae 100644
--- a/erpnext/stock/stock_ledger.py
+++ b/erpnext/stock/stock_ledger.py
@@ -241,9 +241,9 @@
if new_stock_qty:
self.valuation_rate = new_stock_value / flt(new_stock_qty)
elif not self.valuation_rate and self.qty_after_transaction <= 0:
- valuation_rate = get_valuation_rate(sle.item_code, sle.warehouse, self.allow_zero_rate)
+ self.valuation_rate = get_valuation_rate(sle.item_code, sle.warehouse, self.allow_zero_rate)
- return abs(flt(valuation_rate))
+ return abs(flt(self.valuation_rate))
def get_fifo_values(self, sle):
incoming_rate = flt(sle.incoming_rate)
diff --git a/erpnext/support/doctype/maintenance_schedule/test_maintenance_schedule.py b/erpnext/support/doctype/maintenance_schedule/test_maintenance_schedule.py
deleted file mode 100644
index c2c6e01..0000000
--- a/erpnext/support/doctype/maintenance_schedule/test_maintenance_schedule.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors and Contributors
-# See license.txt
-
-import frappe
-import unittest
-
-test_records = frappe.get_test_records('Maintenance Schedule')
-
-class TestMaintenanceSchedule(unittest.TestCase):
- pass
diff --git a/erpnext/support/doctype/maintenance_schedule/test_records.json b/erpnext/support/doctype/maintenance_schedule/test_records.json
deleted file mode 100644
index 8c2a059..0000000
--- a/erpnext/support/doctype/maintenance_schedule/test_records.json
+++ /dev/null
@@ -1,6 +0,0 @@
-[
- {
- "doctype": "Maintenance Schedule",
- "name": "_Test Maintenance Schedule 1"
- }
-]
diff --git a/erpnext/support/doctype/maintenance_visit/test_maintenance_visit.py b/erpnext/support/doctype/maintenance_visit/test_maintenance_visit.py
deleted file mode 100644
index 71e5d64..0000000
--- a/erpnext/support/doctype/maintenance_visit/test_maintenance_visit.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors and Contributors
-# See license.txt
-
-import frappe
-import unittest
-
-test_records = frappe.get_test_records('Maintenance Visit')
-
-class TestMaintenanceVisit(unittest.TestCase):
- pass
diff --git a/erpnext/support/doctype/warranty_claim/test_records.json b/erpnext/support/doctype/warranty_claim/test_records.json
deleted file mode 100644
index b5b1904..0000000
--- a/erpnext/support/doctype/warranty_claim/test_records.json
+++ /dev/null
@@ -1,6 +0,0 @@
-[
- {
- "doctype": "Warranty Claim",
- "name": "_Test Warranty Claim 1"
- }
-]