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 4b0fb9c59e..0000000000 --- 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 074674d95d..0000000000 --- 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 2008f9826e..0000000000 --- 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 f1ff01c811..0000000000 --- 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 91aff3b907..e47bbd5b76 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 5d8c0a0f60..0000000000 --- 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 e5c6513147..021940ac8b 100644 --- a/erpnext/controllers/tests/test_recurring_document.py +++ b/erpnext/controllers/tests/test_recurring_document.py @@ -6,6 +6,7 @@ import frappe.permissions 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 @@ def test_recurring_document(obj, test_records): _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 814baa2965..0000000000 --- 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 992043ff55..0000000000 --- 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 e9531dcb51..0000000000 --- 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 441f55a8ce..0000000000 --- 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 3c64f5d3e3..596184fec8 100644 --- a/erpnext/hr/doctype/salary_structure/salary_structure.py +++ b/erpnext/hr/doctype/salary_structure/salary_structure.py @@ -52,11 +52,22 @@ class SalaryStructure(Document): 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 2ec74f2437..7bff687f62 100644 --- a/erpnext/manufacturing/doctype/bom/bom.js +++ b/erpnext/manufacturing/doctype/bom/bom.js @@ -173,8 +173,12 @@ frappe.ui.form.on("BOM Operation", "operation", function(frm, cdt, cdn) { 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 78a800bd3a..2f95e85f36 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 4889638612..c03e621a3b 100644 --- a/erpnext/manufacturing/doctype/bom/test_bom.py +++ b/erpnext/manufacturing/doctype/bom/test_bom.py @@ -7,7 +7,7 @@ import unittest 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 6f10b21e1c..f0980e14c0 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 aedc07461c..ca040a0862 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 4ef4a0f88b..5ebc1bf96d 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 b7f2ba9724..9226178d6f 100644 --- a/erpnext/manufacturing/doctype/production_order/production_order.py +++ b/erpnext/manufacturing/doctype/production_order/production_order.py @@ -170,7 +170,7 @@ class ProductionOrder(Document): 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 8560a7e8f8..faeaf53136 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -121,3 +121,4 @@ erpnext.patches.v5_0.update_item_description_and_image 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 0000000000..967352d883 --- /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 fa75c5205f..39835fadba 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 1248f0e1d9..6a143ab083 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 }, @@ -161,14 +158,6 @@ "permlevel": 0, "search_index": 0 }, - { - "fieldname": "percent_complete", - "fieldtype": "Percent", - "in_list_view": 0, - "label": "% Tasks Completed", - "permlevel": 0, - "read_only": 1 - }, { "fieldname": "company", "fieldtype": "Link", @@ -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 8dc65a6da1..469c629145 100644 --- a/erpnext/projects/doctype/project/project.py +++ b/erpnext/projects/doctype/project/project.py @@ -6,7 +6,6 @@ import frappe 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 @@ class Project(Document): 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 @@ class Project(Document): 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 @@ class Project(Document): 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 d47db7bb4d..0000000000 --- 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 baffc48825..0000000000 --- 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 7de9948753..0000000000 --- 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 0000000000..e69de29bb2 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 0000000000..25bf1eb5d4 --- /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 59% rename from erpnext/projects/doctype/project_milestone/project_milestone.py rename to erpnext/projects/doctype/project_task/project_task.py index 57bcfc4034..e79a000ed4 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 fe1ce7fd9c..0d37754f24 100644 --- a/erpnext/projects/doctype/task/task.py +++ b/erpnext/projects/doctype/task/task.py @@ -44,7 +44,7 @@ class Task(Document): 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 0b85c16f63..0000000000 --- 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 252126ee5b..0000000000 --- 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 ea681cd364..67e1ba8465 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 2980247f28..bb16fb6d2e 100644 --- a/erpnext/setup/page/setup_wizard/install_fixtures.py +++ b/erpnext/setup/page/setup_wizard/install_fixtures.py @@ -160,7 +160,7 @@ def install(country=None): 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 172cdee83c..0000000000 --- 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 4fc0017939..0000000000 --- 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 1cb1fe0b00..0000000000 --- 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 9837e8b096..0000000000 --- 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 d36d756ae2..fff4ce567e 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 @@ from erpnext.accounts.utils import get_fiscal_year, get_stock_and_account_differ 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 @@ class TestStockReconciliation(unittest.TestCase): "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 5f70c49ffb..84743ae79b 100644 --- a/erpnext/stock/stock_ledger.py +++ b/erpnext/stock/stock_ledger.py @@ -241,9 +241,9 @@ class update_entries_after(object): 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 c2c6e013ec..0000000000 --- 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 8c2a0595b8..0000000000 --- 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 71e5d64cc0..0000000000 --- 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 b5b1904c45..0000000000 --- a/erpnext/support/doctype/warranty_claim/test_records.json +++ /dev/null @@ -1,6 +0,0 @@ -[ - { - "doctype": "Warranty Claim", - "name": "_Test Warranty Claim 1" - } -]