From 7dae3e1ed4dbb5da3aa23e68edfcee694be05c95 Mon Sep 17 00:00:00 2001 From: Neil Trini Lasrado Date: Mon, 25 Jul 2016 15:54:32 +0530 Subject: [PATCH 1/6] [Fix] fixed test cases for schools --- erpnext/schools/doctype/course/test_records.json | 9 ++++++--- .../doctype/course_schedule/test_course_schedule.py | 8 ++++---- .../schools/doctype/examination/examination.json | 4 ++-- erpnext/schools/doctype/program/test_records.json | 6 ++++-- erpnext/schools/doctype/student/student.json | 2 +- .../schools/doctype/student_batch/student_batch.py | 9 ++++++--- .../doctype/student_group/student_group.json | 6 +++--- .../schools/doctype/student_group/student_group.py | 13 ++++++------- .../schools/doctype/student_group/test_records.json | 2 -- 9 files changed, 32 insertions(+), 27 deletions(-) diff --git a/erpnext/schools/doctype/course/test_records.json b/erpnext/schools/doctype/course/test_records.json index 5dc981a6398..ec57dc73a16 100644 --- a/erpnext/schools/doctype/course/test_records.json +++ b/erpnext/schools/doctype/course/test_records.json @@ -1,14 +1,17 @@ [ { "course_name": "_Test Course", - "course_code": "TC100" + "course_code": "TC100", + "course_abbreviation": "TC" }, { "course_name": "_Test Course 1", - "course_code": "TC101" + "course_code": "TC101", + "course_abbreviation": "TC1" }, { "course_name": "_Test Course 2", - "course_code": "TC102" + "course_code": "TC102", + "course_abbreviation": "TC2" } ] \ No newline at end of file diff --git a/erpnext/schools/doctype/course_schedule/test_course_schedule.py b/erpnext/schools/doctype/course_schedule/test_course_schedule.py index f5e17f22350..b527303c823 100644 --- a/erpnext/schools/doctype/course_schedule/test_course_schedule.py +++ b/erpnext/schools/doctype/course_schedule/test_course_schedule.py @@ -24,27 +24,27 @@ class TestCourseSchedule(unittest.TestCase): cs1 = make_course_schedule_test_record(simulate= True) cs2 = make_course_schedule_test_record(from_time= cs1.from_time, to_time= cs1.to_time, - student_group="_Test Student Group 1", room="RM0002", do_not_save= 1) + student_group="TC2-TP-2014-2015-_Test Academic Term", room="RM0002", do_not_save= 1) self.assertRaises(OverlapError, cs2.save) def test_room_conflict(self): cs1 = make_course_schedule_test_record(simulate= True) cs2 = make_course_schedule_test_record(from_time= cs1.from_time, to_time= cs1.to_time, - student_group="_Test Student Group 1", instructor="_T-Instructor-00002", do_not_save= 1) + student_group="TC2-TP-2014-2015-_Test Academic Term", instructor="_T-Instructor-00002", do_not_save= 1) self.assertRaises(OverlapError, cs2.save) def test_no_conflict(self): cs1 = make_course_schedule_test_record(simulate= True) make_course_schedule_test_record(from_time= cs1.from_time, to_time= cs1.to_time, - student_group="_Test Student Group 1", instructor="_T-Instructor-00002", room="RM0002") + student_group="TC2-TP-2014-2015-_Test Academic Term", instructor="_T-Instructor-00002", room="RM0002") def make_course_schedule_test_record(**args): args = frappe._dict(args) course_schedule = frappe.new_doc("Course Schedule") - course_schedule.student_group = args.student_group or "_Test Student Group" + course_schedule.student_group = args.student_group or "TC-TP-2014-2015-_Test Academic Term" course_schedule.course = args.course or "_Test Course" course_schedule.instructor = args.instructor or "_T-Instructor-00001" course_schedule.room = args.room or "RM0001" diff --git a/erpnext/schools/doctype/examination/examination.json b/erpnext/schools/doctype/examination/examination.json index 1bec29b980d..2a76d1dfcc2 100644 --- a/erpnext/schools/doctype/examination/examination.json +++ b/erpnext/schools/doctype/examination/examination.json @@ -1,6 +1,6 @@ { "allow_copy": 0, - "allow_import": 0, + "allow_import": 1, "allow_rename": 0, "autoname": "field:exam_name", "beta": 0, @@ -480,7 +480,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2016-07-25 01:26:26.776581", + "modified": "2016-07-25 06:24:11.126911", "modified_by": "Administrator", "module": "Schools", "name": "Examination", diff --git a/erpnext/schools/doctype/program/test_records.json b/erpnext/schools/doctype/program/test_records.json index c0f82311262..b2374d6c1f3 100644 --- a/erpnext/schools/doctype/program/test_records.json +++ b/erpnext/schools/doctype/program/test_records.json @@ -1,8 +1,10 @@ [ { - "program_name": "_Test Program" + "program_name": "_Test Program", + "program_abbreviation": "TP" }, { - "program_name": "_Test Program 2" + "program_name": "_Test Program 2", + "program_abbreviation": "TP2" } ] diff --git a/erpnext/schools/doctype/student/student.json b/erpnext/schools/doctype/student/student.json index 7eda5778b5f..4901dc42338 100644 --- a/erpnext/schools/doctype/student/student.json +++ b/erpnext/schools/doctype/student/student.json @@ -556,7 +556,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2016-07-25 01:27:04.145185", + "modified": "2016-07-25 06:23:57.581538", "modified_by": "Administrator", "module": "Schools", "name": "Student", diff --git a/erpnext/schools/doctype/student_batch/student_batch.py b/erpnext/schools/doctype/student_batch/student_batch.py index 7c7568dc77a..107ef933b52 100644 --- a/erpnext/schools/doctype/student_batch/student_batch.py +++ b/erpnext/schools/doctype/student_batch/student_batch.py @@ -8,9 +8,12 @@ from erpnext.schools.utils import validate_duplicate_student import frappe class StudentBatch(Document): - def validate(self): - validate_duplicate_student(self.students) + def autoname(self): prog_abb = frappe.db.get_value("Program", self.program, "program_abbreviation") if not prog_abb: prog_abb = self.program - self.name = prog_abb + "-"+ self.student_batch_name + "-" + self.academic_year \ No newline at end of file + self.name = prog_abb + "-"+ self.student_batch_name + "-" + self.academic_year + + def validate(self): + validate_duplicate_student(self.students) + \ No newline at end of file diff --git a/erpnext/schools/doctype/student_group/student_group.json b/erpnext/schools/doctype/student_group/student_group.json index 3d15e25d2f9..e4b4ea3e214 100644 --- a/erpnext/schools/doctype/student_group/student_group.json +++ b/erpnext/schools/doctype/student_group/student_group.json @@ -1,7 +1,7 @@ { "allow_copy": 0, - "allow_import": 0, - "allow_rename": 0, + "allow_import": 1, + "allow_rename": 1, "autoname": "", "beta": 0, "creation": "2015-09-07 12:55:52.072792", @@ -280,7 +280,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2016-07-25 01:32:57.819189", + "modified": "2016-07-25 06:23:43.903111", "modified_by": "Administrator", "module": "Schools", "name": "Student Group", diff --git a/erpnext/schools/doctype/student_group/student_group.py b/erpnext/schools/doctype/student_group/student_group.py index 3cd9bfbee82..f60477392c2 100644 --- a/erpnext/schools/doctype/student_group/student_group.py +++ b/erpnext/schools/doctype/student_group/student_group.py @@ -9,13 +9,7 @@ from frappe import _ from erpnext.schools.utils import validate_duplicate_student class StudentGroup(Document): - def validate(self): - self.set_name() - self.validate_strength() - self.validate_student_name() - validate_duplicate_student(self.students) - - def set_name(self): + def autoname(self): self.name = frappe.db.get_value("Course", self.course, "course_abbreviation") if not self.name: self.name = self.course @@ -31,6 +25,11 @@ class StudentGroup(Document): self.name += "-" + self.academic_year if self.academic_term: self.name += "-" + self.academic_term + + def validate(self): + self.validate_strength() + self.validate_student_name() + validate_duplicate_student(self.students) def validate_strength(self): if self.max_strength and len(self.students) > self.max_strength: diff --git a/erpnext/schools/doctype/student_group/test_records.json b/erpnext/schools/doctype/student_group/test_records.json index 23186caf4dd..a14f670d8e1 100644 --- a/erpnext/schools/doctype/student_group/test_records.json +++ b/erpnext/schools/doctype/student_group/test_records.json @@ -1,13 +1,11 @@ [ { - "group_name": "_Test Student Group", "program": "_Test Program", "course": "_Test Course", "academic_year": "2014-2015", "academic_term": "_Test Academic Term" }, { - "group_name": "_Test Student Group 1", "program": "_Test Program", "course": "_Test Course 2", "academic_year": "2014-2015", From feea2e3dece6f212c966423d5290c43293c2cff9 Mon Sep 17 00:00:00 2001 From: Neil Trini Lasrado Date: Mon, 25 Jul 2016 16:13:05 +0530 Subject: [PATCH 2/6] [Doctype Rename] Renamed sg_creation_tool_course to Student Group Creation Tool Course --- .../student_group_creation_tool.json | 4 ++-- .../__init__.py | 0 .../student_group_creation_tool_course.json} | 6 +++--- .../student_group_creation_tool_course.py} | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) rename erpnext/schools/doctype/{sg_creation_tool_course => student_group_creation_tool_course}/__init__.py (100%) rename erpnext/schools/doctype/{sg_creation_tool_course/sg_creation_tool_course.json => student_group_creation_tool_course/student_group_creation_tool_course.json} (96%) rename erpnext/schools/doctype/{sg_creation_tool_course/sg_creation_tool_course.py => student_group_creation_tool_course/student_group_creation_tool_course.py} (60%) diff --git a/erpnext/schools/doctype/student_group_creation_tool/student_group_creation_tool.json b/erpnext/schools/doctype/student_group_creation_tool/student_group_creation_tool.json index 3291d830198..dd011c3c38a 100644 --- a/erpnext/schools/doctype/student_group_creation_tool/student_group_creation_tool.json +++ b/erpnext/schools/doctype/student_group_creation_tool/student_group_creation_tool.json @@ -176,7 +176,7 @@ "label": "Courses", "length": 0, "no_copy": 0, - "options": "SG Creation Tool Course", + "options": "Student Group Creation Tool Course", "permlevel": 0, "precision": "", "print_hide": 0, @@ -199,7 +199,7 @@ "issingle": 1, "istable": 0, "max_attachments": 0, - "modified": "2016-07-25 01:23:31.192112", + "modified": "2016-07-25 06:40:46.107131", "modified_by": "Administrator", "module": "Schools", "name": "Student Group Creation Tool", diff --git a/erpnext/schools/doctype/sg_creation_tool_course/__init__.py b/erpnext/schools/doctype/student_group_creation_tool_course/__init__.py similarity index 100% rename from erpnext/schools/doctype/sg_creation_tool_course/__init__.py rename to erpnext/schools/doctype/student_group_creation_tool_course/__init__.py diff --git a/erpnext/schools/doctype/sg_creation_tool_course/sg_creation_tool_course.json b/erpnext/schools/doctype/student_group_creation_tool_course/student_group_creation_tool_course.json similarity index 96% rename from erpnext/schools/doctype/sg_creation_tool_course/sg_creation_tool_course.json rename to erpnext/schools/doctype/student_group_creation_tool_course/student_group_creation_tool_course.json index 8814f883afd..88466b60ab5 100644 --- a/erpnext/schools/doctype/sg_creation_tool_course/sg_creation_tool_course.json +++ b/erpnext/schools/doctype/student_group_creation_tool_course/student_group_creation_tool_course.json @@ -147,10 +147,10 @@ "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2016-07-21 12:31:41.252860", - "modified_by": "r@r.com", + "modified": "2016-07-25 06:40:49.000588", + "modified_by": "Administrator", "module": "Schools", - "name": "SG Creation Tool Course", + "name": "Student Group Creation Tool Course", "name_case": "", "owner": "Administrator", "permissions": [], diff --git a/erpnext/schools/doctype/sg_creation_tool_course/sg_creation_tool_course.py b/erpnext/schools/doctype/student_group_creation_tool_course/student_group_creation_tool_course.py similarity index 60% rename from erpnext/schools/doctype/sg_creation_tool_course/sg_creation_tool_course.py rename to erpnext/schools/doctype/student_group_creation_tool_course/student_group_creation_tool_course.py index 4024c69f1c0..b3411ea7c55 100644 --- a/erpnext/schools/doctype/sg_creation_tool_course/sg_creation_tool_course.py +++ b/erpnext/schools/doctype/student_group_creation_tool_course/student_group_creation_tool_course.py @@ -1,10 +1,10 @@ # -*- coding: utf-8 -*- -# Copyright (c) 2015, Frappe and contributors +# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors # For license information, please see license.txt from __future__ import unicode_literals import frappe from frappe.model.document import Document -class SGCreationToolCourse(Document): +class StudentGroupCreationToolCourse(Document): pass From ce1c63f7768cbbb82f6c82a15ff5c22578451779 Mon Sep 17 00:00:00 2001 From: Neil Trini Lasrado Date: Mon, 25 Jul 2016 18:24:37 +0530 Subject: [PATCH 3/6] [rename] Renamed Fee Amount to Fee Component --- erpnext/patches.txt | 1 + .../v7_0/rename_fee_amount_to_fee_component.py | 15 +++++++++++++++ .../doctype/fee_category/fee_category.json | 2 +- .../{fee_amount => fee_component}/__init__.py | 0 .../fee_component.json} | 6 +++--- .../fee_component.py} | 4 ++-- .../doctype/fee_structure/fee_structure.json | 8 ++++---- erpnext/schools/doctype/fees/fees.json | 8 ++++---- 8 files changed, 30 insertions(+), 14 deletions(-) create mode 100644 erpnext/patches/v7_0/rename_fee_amount_to_fee_component.py rename erpnext/schools/doctype/{fee_amount => fee_component}/__init__.py (100%) rename erpnext/schools/doctype/{fee_amount/fee_amount.json => fee_component/fee_component.json} (95%) rename erpnext/schools/doctype/{fee_amount/fee_amount.py => fee_component/fee_component.py} (64%) diff --git a/erpnext/patches.txt b/erpnext/patches.txt index 09ff7772734..c1813dc0881 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -301,3 +301,4 @@ execute:frappe.delete_doc_if_exists("DocType", "Payment Tool Detail") erpnext.patches.v7_0.setup_account_table_for_expense_claim_type_if_exists erpnext.patches.v7_0.migrate_schools_to_erpnext erpnext.patches.v7_0.remove_administrator_role_in_doctypes +erpnext.patches.v7_0.rename_fee_amount_to_fee_component diff --git a/erpnext/patches/v7_0/rename_fee_amount_to_fee_component.py b/erpnext/patches/v7_0/rename_fee_amount_to_fee_component.py new file mode 100644 index 00000000000..662a260753c --- /dev/null +++ b/erpnext/patches/v7_0/rename_fee_amount_to_fee_component.py @@ -0,0 +1,15 @@ +# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors +# License: GNU General Public License v3. See license.txt + +from __future__ import unicode_literals +import frappe + +from frappe.model.utils.rename_field import rename_field + +def execute(): + frappe.rename_doc("DocType", "Fee Amount", "Fee Component") + for dt in ("Fees", "Fee Structure"): + frappe.reload_doctype(dt) + rename_field(dt, "amount", "components") + + \ No newline at end of file diff --git a/erpnext/schools/doctype/fee_category/fee_category.json b/erpnext/schools/doctype/fee_category/fee_category.json index 022462920b0..4314aae3f2d 100644 --- a/erpnext/schools/doctype/fee_category/fee_category.json +++ b/erpnext/schools/doctype/fee_category/fee_category.json @@ -79,7 +79,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2016-07-25 05:24:22.972715", + "modified": "2016-07-25 08:42:24.309236", "modified_by": "Administrator", "module": "Schools", "name": "Fee Category", diff --git a/erpnext/schools/doctype/fee_amount/__init__.py b/erpnext/schools/doctype/fee_component/__init__.py similarity index 100% rename from erpnext/schools/doctype/fee_amount/__init__.py rename to erpnext/schools/doctype/fee_component/__init__.py diff --git a/erpnext/schools/doctype/fee_amount/fee_amount.json b/erpnext/schools/doctype/fee_component/fee_component.json similarity index 95% rename from erpnext/schools/doctype/fee_amount/fee_amount.json rename to erpnext/schools/doctype/fee_component/fee_component.json index 942b6efb4cd..c0f7bd6f018 100644 --- a/erpnext/schools/doctype/fee_amount/fee_amount.json +++ b/erpnext/schools/doctype/fee_component/fee_component.json @@ -104,10 +104,10 @@ "issingle": 0, "istable": 1, "max_attachments": 0, - "modified": "2016-07-21 12:25:44.368245", - "modified_by": "r@r.com", + "modified": "2016-07-25 08:43:25.405166", + "modified_by": "Administrator", "module": "Schools", - "name": "Fee Amount", + "name": "Fee Component", "name_case": "", "owner": "Administrator", "permissions": [], diff --git a/erpnext/schools/doctype/fee_amount/fee_amount.py b/erpnext/schools/doctype/fee_component/fee_component.py similarity index 64% rename from erpnext/schools/doctype/fee_amount/fee_amount.py rename to erpnext/schools/doctype/fee_component/fee_component.py index a26e1d93036..8694610927b 100644 --- a/erpnext/schools/doctype/fee_amount/fee_amount.py +++ b/erpnext/schools/doctype/fee_component/fee_component.py @@ -1,10 +1,10 @@ # -*- coding: utf-8 -*- -# Copyright (c) 2015, Frappe Technologies and contributors +# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors # For license information, please see license.txt from __future__ import unicode_literals import frappe from frappe.model.document import Document -class FeeAmount(Document): +class FeeComponent(Document): pass diff --git a/erpnext/schools/doctype/fee_structure/fee_structure.json b/erpnext/schools/doctype/fee_structure/fee_structure.json index 51e48d280fd..d6c5a7fa284 100644 --- a/erpnext/schools/doctype/fee_structure/fee_structure.json +++ b/erpnext/schools/doctype/fee_structure/fee_structure.json @@ -146,17 +146,17 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, - "fieldname": "amount", + "fieldname": "components", "fieldtype": "Table", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, - "label": "Amount", + "label": "Components", "length": 0, "no_copy": 0, - "options": "Fee Amount", + "options": "Fee Component", "permlevel": 0, "precision": "", "print_hide": 0, @@ -230,7 +230,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2016-07-25 01:25:22.796777", + "modified": "2016-07-25 08:44:07.886467", "modified_by": "Administrator", "module": "Schools", "name": "Fee Structure", diff --git a/erpnext/schools/doctype/fees/fees.json b/erpnext/schools/doctype/fees/fees.json index 49ab8b97a2e..75e33153b22 100644 --- a/erpnext/schools/doctype/fees/fees.json +++ b/erpnext/schools/doctype/fees/fees.json @@ -295,17 +295,17 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, - "fieldname": "amount", + "fieldname": "components", "fieldtype": "Table", "hidden": 0, "ignore_user_permissions": 0, "ignore_xss_filter": 0, "in_filter": 0, "in_list_view": 0, - "label": "Amount", + "label": "Components", "length": 0, "no_copy": 0, - "options": "Fee Amount", + "options": "Fee Component", "permlevel": 0, "precision": "", "print_hide": 0, @@ -478,7 +478,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2016-07-25 01:27:43.220809", + "modified": "2016-07-25 08:44:33.595812", "modified_by": "Administrator", "module": "Schools", "name": "Fees", From 26cf01aaba21c73fe4a554dc954cc63dfde4a731 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Fri, 22 Jul 2016 13:24:33 +0530 Subject: [PATCH 4/6] [mionr] fixes and cleanups --- erpnext/accounts/page/pos/pos.js | 6 ++-- .../controllers/sales_and_purchase_return.py | 4 +-- erpnext/patches.txt | 1 + .../v7_0/calculate_total_costing_amount.py | 14 ++++++++ .../projects/doctype/timesheet/timesheet.js | 17 ++++++---- .../projects/doctype/timesheet/timesheet.json | 33 ++++++++++++++++--- .../projects/doctype/timesheet/timesheet.py | 17 +++++++--- .../timesheet_detail/timesheet_detail.json | 12 +++---- 8 files changed, 76 insertions(+), 28 deletions(-) create mode 100644 erpnext/patches/v7_0/calculate_total_costing_amount.py diff --git a/erpnext/accounts/page/pos/pos.js b/erpnext/accounts/page/pos/pos.js index cb57ff406fc..a89f40e0ba7 100644 --- a/erpnext/accounts/page/pos/pos.js +++ b/erpnext/accounts/page/pos/pos.js @@ -69,13 +69,13 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ var me = this; // navigator.onLine this.connection_status = false; - this.page.set_indicator("Offline", "grey") + this.page.set_indicator(__("Offline"), "grey") frappe.call({ method:"frappe.handler.ping", callback: function(r){ if(r.message){ me.connection_status = true; - me.page.set_indicator("Online", "green") + me.page.set_indicator(__("Online"), "green") } } }) @@ -278,7 +278,7 @@ erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({ "fieldtype": "Data", "label": "Item", "fieldname": "pos_item", - "placeholder": "Search Item" + "placeholder": __("Search Item") }, parent: this.wrapper.find(".search-area"), only_input: true, diff --git a/erpnext/controllers/sales_and_purchase_return.py b/erpnext/controllers/sales_and_purchase_return.py index 37b13c3e2de..8d30247acf5 100644 --- a/erpnext/controllers/sales_and_purchase_return.py +++ b/erpnext/controllers/sales_and_purchase_return.py @@ -167,9 +167,7 @@ def make_return_doc(doctype, source_name, target_doc=None): target_doc.qty = -1* source_doc.qty if doctype == "Purchase Receipt": target_doc.received_qty = -1* source_doc.qty - target_doc.prevdoc_doctype = source_doc.prevdoc_doctype - target_doc.prevdoc_docname = source_doc.prevdoc_docname - target_doc.prevdoc_detail_docname = source_doc.prevdoc_detail_docname + target_doc.purchase_order = source_doc.purchase_order elif doctype == "Purchase Invoice": target_doc.received_qty = -1* source_doc.qty target_doc.purchase_order = source_doc.purchase_order diff --git a/erpnext/patches.txt b/erpnext/patches.txt index c1813dc0881..3e31d5ec20d 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -302,3 +302,4 @@ erpnext.patches.v7_0.setup_account_table_for_expense_claim_type_if_exists erpnext.patches.v7_0.migrate_schools_to_erpnext erpnext.patches.v7_0.remove_administrator_role_in_doctypes erpnext.patches.v7_0.rename_fee_amount_to_fee_component +erpnext.patches.v7_0.calculate_total_costing_amount diff --git a/erpnext/patches/v7_0/calculate_total_costing_amount.py b/erpnext/patches/v7_0/calculate_total_costing_amount.py new file mode 100644 index 00000000000..f4269040748 --- /dev/null +++ b/erpnext/patches/v7_0/calculate_total_costing_amount.py @@ -0,0 +1,14 @@ +import frappe +from frappe.utils import flt + +def execute(): + frappe.reload_doc('projects', 'doctype', 'timesheet') + + for data in frappe.get_all('Timesheet', fields=["name, total_costing_amount"], + filters = [["docstatus", "<", "2"]]): + if flt(data.total_costing_amount) == 0.0: + ts = frappe.get_doc('Timesheet', data.name) + ts.update_cost() + ts.calculate_total_amounts() + ts.flags.ignore_validate_update_after_submit = True + ts.save() diff --git a/erpnext/projects/doctype/timesheet/timesheet.js b/erpnext/projects/doctype/timesheet/timesheet.js index f816defe60b..f3dfefa7d0c 100644 --- a/erpnext/projects/doctype/timesheet/timesheet.js +++ b/erpnext/projects/doctype/timesheet/timesheet.js @@ -5,11 +5,11 @@ cur_frm.add_fetch('employee', 'employee_name', 'employee_name'); frappe.ui.form.on("Timesheet", { setup: function(frm) { frm.get_field('time_logs').grid.editable_fields = [ - {fieldname: 'billable', columns: 2}, + {fieldname: 'billable', columns: 1}, {fieldname: 'activity_type', columns: 2}, - {fieldname: 'from_time', columns: 2}, - {fieldname: 'hours', columns: 2}, - {fieldname: 'to_time', columns: 2}, + {fieldname: 'from_time', columns: 3}, + {fieldname: 'hours', columns: 1}, + {fieldname: 'project', columns: 3} ]; frm.fields_dict.employee.get_query = function() { @@ -22,7 +22,8 @@ frappe.ui.form.on("Timesheet", { child = locals[cdt][cdn]; return{ filters: { - 'project': child.project + 'project': child.project, + 'status': ["!=", "Closed"] } } } @@ -37,8 +38,7 @@ frappe.ui.form.on("Timesheet", { refresh: function(frm) { if(frm.doc.docstatus==1) { - if(!frm.doc.sales_invoice && frm.doc.total_billing_amount > 0 - && !frm.doc.production_order){ + if(!frm.doc.sales_invoice && frm.doc.total_billing_amount > 0){ frm.add_custom_button(__("Make Sales Invoice"), function() { frm.trigger("make_invoice") }, "icon-file-alt"); } @@ -147,13 +147,16 @@ var calculate_time_and_amount = function(frm) { var tl = frm.doc.time_logs || []; total_hr = 0; total_billing_amount = 0; + total_costing_amount = 0; for(var i=0; i Date: Tue, 26 Jul 2016 08:23:17 +0530 Subject: [PATCH 5/6] [minor] add abbr if missing --- erpnext/setup/doctype/company/company.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/erpnext/setup/doctype/company/company.py b/erpnext/setup/doctype/company/company.py index 65fb42066fe..00538cd4c9e 100644 --- a/erpnext/setup/doctype/company/company.py +++ b/erpnext/setup/doctype/company/company.py @@ -32,6 +32,9 @@ class Company(Document): self.validate_currency() def validate_abbr(self): + if not self.abbr: + self.abbr = ''.join([c[0] for c in self.company_name.split()]).upper() + self.abbr = self.abbr.strip() if self.get('__islocal') and len(self.abbr) > 5: @@ -66,7 +69,7 @@ class Company(Document): if not frappe.local.flags.ignore_chart_of_accounts: self.create_default_accounts() self.create_default_warehouses() - + self.install_country_fixtures() if not frappe.db.get_value("Cost Center", {"is_group": 0, "company": self.name}): @@ -92,7 +95,7 @@ class Company(Document): {"warehouse_name": _("Stores"), "is_group": 0}, {"warehouse_name": _("Work In Progress"), "is_group": 0}, {"warehouse_name": _("Finished Goods"), "is_group": 0}]: - + if not frappe.db.exists("Warehouse", "{0} - {1}".format(wh_detail["warehouse_name"], self.abbr)): stock_group = frappe.db.get_value("Account", {"account_type": "Stock", "is_group": 1, "company": self.name}) @@ -203,9 +206,9 @@ class Company(Document): rec = frappe.db.sql("SELECT name from `tabGL Entry` where company = %s", self.name) if not rec: frappe.db.sql("""delete from `tabBudget Account` - where exists(select name from tabBudget + where exists(select name from tabBudget where name=`tabBudget Account`.parent and company = %s)""", self.name) - + for doctype in ["Account", "Cost Center", "Budget", "Party Account"]: frappe.db.sql("delete from `tab{0}` where company = %s".format(doctype), self.name) From 5662ad6d96cbf9bdbd332b3a35bde71300389a22 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Tue, 26 Jul 2016 09:54:00 +0600 Subject: [PATCH 6/6] bumped to version 7.0.4 --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index 292353db60e..e0ce4fb7892 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals import frappe -__version__ = '7.0.3' +__version__ = '7.0.4' def get_default_company(user=None): '''Get default company for user'''