From cf1428904a0e81b6f0c67926516daa9fd01c0ade Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Tue, 27 Oct 2020 17:36:30 +0530 Subject: [PATCH] fix(refactor): refactor tests, client side code --- .../desk_page/quality/quality.json | 9 +- .../quality_action/quality_action.json | 5 +- .../quality_action/test_quality_action.js | 23 ----- .../quality_action/test_quality_action.py | 39 +-------- .../quality_feedback/quality_feedback.js | 24 +----- .../quality_feedback/quality_feedback.json | 23 ++--- .../quality_feedback/quality_feedback.py | 15 +++- .../quality_feedback/test_quality_feedback.py | 58 ++++--------- .../quality_feedback_parameter.json | 8 +- .../quality_feedback_template.json | 17 ++-- .../test_quality_feedback_template.py | 29 +------ .../doctype/quality_goal/quality_goal.js | 5 +- .../doctype/quality_goal/quality_goal.json | 47 +--------- .../doctype/quality_goal/quality_goal.py | 4 +- .../doctype/quality_goal/test_quality_goal.js | 23 ----- .../doctype/quality_goal/test_quality_goal.py | 50 +++-------- .../quality_meeting/quality_meeting.js | 5 +- .../quality_meeting/quality_meeting.json | 12 +-- .../quality_meeting/test_quality_meeting.js | 23 ----- .../quality_meeting/test_quality_meeting.py | 38 +-------- .../quality_procedure/quality_procedure.py | 63 ++++++-------- .../quality_procedure_tree.js | 2 +- .../test_quality_procedure.js | 23 ----- .../test_quality_procedure.py | 85 +++++++++---------- .../quality_procedure_process.json | 4 +- .../doctype/quality_review/quality_review.py | 30 ++++--- .../quality_review/test_quality_review.js | 23 ----- .../quality_review/test_quality_review.py | 46 +++------- .../quality_review_objective.json | 4 +- 29 files changed, 192 insertions(+), 545 deletions(-) delete mode 100644 erpnext/quality_management/doctype/quality_action/test_quality_action.js delete mode 100644 erpnext/quality_management/doctype/quality_goal/test_quality_goal.js delete mode 100644 erpnext/quality_management/doctype/quality_meeting/test_quality_meeting.js delete mode 100644 erpnext/quality_management/doctype/quality_procedure/test_quality_procedure.js delete mode 100644 erpnext/quality_management/doctype/quality_review/test_quality_review.js diff --git a/erpnext/quality_management/desk_page/quality/quality.json b/erpnext/quality_management/desk_page/quality/quality.json index ffa35dfd68..7a049b21c0 100644 --- a/erpnext/quality_management/desk_page/quality/quality.json +++ b/erpnext/quality_management/desk_page/quality/quality.json @@ -33,7 +33,7 @@ "idx": 0, "is_standard": 1, "label": "Quality", - "modified": "2020-10-26 15:24:58.058088", + "modified": "2020-10-27 16:28:54.138055", "modified_by": "Administrator", "module": "Quality Management", "name": "Quality", @@ -47,6 +47,7 @@ "type": "DocType" }, { + "doc_view": "Tree", "label": "Quality Procedure", "link_to": "Quality Procedure", "type": "DocType" @@ -57,9 +58,12 @@ "type": "DocType" }, { + "color": "#ff8989", "doc_view": "", + "format": "{} Open", "label": "Quality Review", "link_to": "Quality Review", + "stats_filter": "{\"status\": \"Open\"}", "type": "DocType" }, { @@ -72,9 +76,12 @@ "type": "DocType" }, { + "color": "#ff8989", "doc_view": "", + "format": "{} Open", "label": "Non Conformance", "link_to": "Non Conformance", + "stats_filter": "{\"status\": \"Open\"}", "type": "DocType" } ] diff --git a/erpnext/quality_management/doctype/quality_action/quality_action.json b/erpnext/quality_management/doctype/quality_action/quality_action.json index 02f84be7d0..0cc2a98cd2 100644 --- a/erpnext/quality_management/doctype/quality_action/quality_action.json +++ b/erpnext/quality_management/doctype/quality_action/quality_action.json @@ -80,8 +80,7 @@ "fieldtype": "Link", "in_list_view": 1, "label": "Review", - "options": "Quality Review", - "reqd": 1 + "options": "Quality Review" }, { "fieldname": "feedback", @@ -92,7 +91,7 @@ ], "index_web_pages_for_search": 1, "links": [], - "modified": "2020-10-21 13:01:31.920215", + "modified": "2020-10-27 16:21:59.533937", "modified_by": "Administrator", "module": "Quality Management", "name": "Quality Action", diff --git a/erpnext/quality_management/doctype/quality_action/test_quality_action.js b/erpnext/quality_management/doctype/quality_action/test_quality_action.js deleted file mode 100644 index 34a8c86889..0000000000 --- a/erpnext/quality_management/doctype/quality_action/test_quality_action.js +++ /dev/null @@ -1,23 +0,0 @@ -/* eslint-disable */ -// rename this file from _test_[name] to test_[name] to activate -// and remove above this line - -QUnit.test("test: Quality Action", function (assert) { - let done = assert.async(); - - // number of asserts - assert.expect(1); - - frappe.run_serially([ - // insert a new Quality Actions - () => frappe.tests.make('Quality Actions', [ - // values to be set - {key: 'value'} - ]), - () => { - assert.equal(cur_frm.doc.key, 'value'); - }, - () => done() - ]); - -}); diff --git a/erpnext/quality_management/doctype/quality_action/test_quality_action.py b/erpnext/quality_management/doctype/quality_action/test_quality_action.py index 51178d6225..24b97ca3a0 100644 --- a/erpnext/quality_management/doctype/quality_action/test_quality_action.py +++ b/erpnext/quality_management/doctype/quality_action/test_quality_action.py @@ -5,42 +5,7 @@ from __future__ import unicode_literals import frappe import unittest -from erpnext.quality_management.doctype.quality_procedure.test_quality_procedure import create_procedure -from erpnext.quality_management.doctype.quality_goal.test_quality_goal import create_unit -from erpnext.quality_management.doctype.quality_goal.test_quality_goal import create_goal -from erpnext.quality_management.doctype.quality_review.test_quality_review import create_review class TestQualityAction(unittest.TestCase): - - def test_quality_action(self): - create_procedure() - create_unit() - create_goal() - create_review() - test_create_action = create_action() - test_get_action = get_action() - - self.assertEquals(test_create_action, test_get_action) - -def create_action(): - review = frappe.db.exists("Quality Review", {"goal": "GOAL-_Test Quality Goal"}) - action = frappe.get_doc({ - "doctype": "Quality Action", - "action": "Corrective", - "document_type": "Quality Review", - "document_name": review, - "date": frappe.utils.nowdate(), - "goal": "GOAL-_Test Quality Goal", - "procedure": "PRC-_Test Quality Procedure" - }) - action_exist = frappe.db.exists("Quality Action", {"review": review}) - - if not action_exist: - action.insert() - return action.name - else: - return action_exist - -def get_action(): - review = frappe.db.exists("Quality Review", {"goal": "GOAL-_Test Quality Goal"}) - return frappe.db.exists("Quality Action", {"document_name": review}) \ No newline at end of file + # quality action has no code + pass \ No newline at end of file diff --git a/erpnext/quality_management/doctype/quality_feedback/quality_feedback.js b/erpnext/quality_management/doctype/quality_feedback/quality_feedback.js index dac6ac40a7..6fb326776e 100644 --- a/erpnext/quality_management/doctype/quality_feedback/quality_feedback.js +++ b/erpnext/quality_management/doctype/quality_feedback/quality_feedback.js @@ -2,31 +2,9 @@ // For license information, please see license.txt frappe.ui.form.on('Quality Feedback', { - refresh: function(frm) { - frm.set_value("date", frappe.datetime.get_today()); - }, - template: function(frm) { if (frm.doc.template) { - frappe.call({ - "method": "frappe.client.get", - args: { - doctype: "Quality Feedback Template", - name: frm.doc.template - }, - callback: function(data) { - if (data && data.message) { - frm.fields_dict.parameters.grid.remove_all(); - - // fetch parameters from template and autofill - for (let template_parameter of data.message.parameters) { - let row = frm.add_child("parameters"); - row.parameter = template_parameter.parameter; - } - frm.refresh(); - } - } - }); + frm.call('set_parameters'); } } }); diff --git a/erpnext/quality_management/doctype/quality_feedback/quality_feedback.json b/erpnext/quality_management/doctype/quality_feedback/quality_feedback.json index 8d4b996de2..f3bd0ddb2e 100644 --- a/erpnext/quality_management/doctype/quality_feedback/quality_feedback.json +++ b/erpnext/quality_management/doctype/quality_feedback/quality_feedback.json @@ -6,11 +6,10 @@ "editable_grid": 1, "engine": "InnoDB", "field_order": [ - "document_type", "template", "cb_00", + "document_type", "document_name", - "date", "sb_00", "parameters" ], @@ -18,6 +17,7 @@ { "fieldname": "template", "fieldtype": "Link", + "in_list_view": 1, "label": "Template", "options": "Quality Feedback Template", "reqd": 1 @@ -26,13 +26,6 @@ "fieldname": "cb_00", "fieldtype": "Column Break" }, - { - "fieldname": "date", - "fieldtype": "Date", - "in_list_view": 1, - "label": "Date", - "read_only": 1 - }, { "fieldname": "sb_00", "fieldtype": "Section Break" @@ -47,6 +40,7 @@ { "fieldname": "document_type", "fieldtype": "Select", + "in_list_view": 1, "label": "Type", "options": "User\nCustomer", "reqd": 1 @@ -54,13 +48,20 @@ { "fieldname": "document_name", "fieldtype": "Dynamic Link", + "in_list_view": 1, "label": "Feedback By", "options": "document_type", "reqd": 1 } ], - "links": [], - "modified": "2020-10-21 12:39:20.740854", + "links": [ + { + "group": "Actions", + "link_doctype": "Quality Action", + "link_fieldname": "feedback" + } + ], + "modified": "2020-10-27 16:20:10.918544", "modified_by": "Administrator", "module": "Quality Management", "name": "Quality Feedback", diff --git a/erpnext/quality_management/doctype/quality_feedback/quality_feedback.py b/erpnext/quality_management/doctype/quality_feedback/quality_feedback.py index 9894181004..bf82cc080a 100644 --- a/erpnext/quality_management/doctype/quality_feedback/quality_feedback.py +++ b/erpnext/quality_management/doctype/quality_feedback/quality_feedback.py @@ -7,4 +7,17 @@ import frappe from frappe.model.document import Document class QualityFeedback(Document): - pass \ No newline at end of file + def set_parameters(self): + if self.template and not getattr(self, 'parameters', []): + for d in frappe.get_doc('Quality Feedback Template', self.template).parameters: + self.append('parameters', dict( + parameter = d.parameter, + rating = 1 + )) + + def validate(self): + if not self.document_name: + self.document_type ='User' + self.document_name = frappe.session.user + self.set_parameters() + diff --git a/erpnext/quality_management/doctype/quality_feedback/test_quality_feedback.py b/erpnext/quality_management/doctype/quality_feedback/test_quality_feedback.py index 3be1eb2791..5a8bd5ce30 100644 --- a/erpnext/quality_management/doctype/quality_feedback/test_quality_feedback.py +++ b/erpnext/quality_management/doctype/quality_feedback/test_quality_feedback.py @@ -5,49 +5,27 @@ from __future__ import unicode_literals import frappe import unittest -from erpnext.quality_management.doctype.quality_feedback_template.test_quality_feedback_template import create_template + class TestQualityFeedback(unittest.TestCase): - def test_quality_feedback(self): - create_template() - test_create_feedback = create_feedback() - test_get_feedback = get_feedback() + template = frappe.get_doc(dict( + doctype = 'Quality Feedback Template', + template = 'Test Template', + parameters = [ + dict(parameter='Test Parameter 1'), + dict(parameter='Test Parameter 2') + ] + )).insert() - self.assertEqual(test_create_feedback, test_get_feedback) + feedback = frappe.get_doc(dict( + doctype = 'Quality Feedback', + template = template.name, + document_type = 'User', + document_name = frappe.session.user + )).insert() -def create_feedback(): - create_customer() + self.assertEqual(template.parameters[0].parameter, feedback.parameters[0].parameter) - feedabck = frappe.get_doc({ - "doctype": "Quality Feedback", - "template": "TMPL-_Test Feedback Template", - "document_type": "Customer", - "document_name": "Quality Feedback Customer", - "date": frappe.utils.nowdate(), - "parameters": [ - { - "parameter": "Test Parameter", - "rating": 3, - "feedback": "Test Feedback" - } - ] - }) - - feedback_exists = frappe.db.exists("Quality Feedback", {"template": "TMPL-_Test Feedback Template"}) - - if not feedback_exists: - feedabck.insert() - return feedabck.name - else: - return feedback_exists - -def get_feedback(): - return frappe.db.exists("Quality Feedback", {"template": "TMPL-_Test Feedback Template"}) - -def create_customer(): - if not frappe.db.exists("Customer", {"customer_name": "Quality Feedback Customer"}): - customer = frappe.get_doc({ - "doctype": "Customer", - "customer_name": "Quality Feedback Customer" - }).insert(ignore_permissions=True) \ No newline at end of file + feedback.delete() + template.delete() diff --git a/erpnext/quality_management/doctype/quality_feedback_parameter/quality_feedback_parameter.json b/erpnext/quality_management/doctype/quality_feedback_parameter/quality_feedback_parameter.json index 5bd8920a32..ce5d4cfeee 100644 --- a/erpnext/quality_management/doctype/quality_feedback_parameter/quality_feedback_parameter.json +++ b/erpnext/quality_management/doctype/quality_feedback_parameter/quality_feedback_parameter.json @@ -1,4 +1,5 @@ { + "actions": [], "creation": "2019-05-26 21:25:01.715807", "doctype": "DocType", "editable_grid": 1, @@ -39,12 +40,13 @@ "fieldname": "feedback", "fieldtype": "Text Editor", "in_list_view": 1, - "label": "Feedback", - "reqd": 1 + "label": "Feedback" } ], + "index_web_pages_for_search": 1, "istable": 1, - "modified": "2019-07-13 19:58:08.966141", + "links": [], + "modified": "2020-10-27 17:28:12.033145", "modified_by": "Administrator", "module": "Quality Management", "name": "Quality Feedback Parameter", diff --git a/erpnext/quality_management/doctype/quality_feedback_template/quality_feedback_template.json b/erpnext/quality_management/doctype/quality_feedback_template/quality_feedback_template.json index 49275186dc..169647046d 100644 --- a/erpnext/quality_management/doctype/quality_feedback_template/quality_feedback_template.json +++ b/erpnext/quality_management/doctype/quality_feedback_template/quality_feedback_template.json @@ -7,7 +7,6 @@ "engine": "InnoDB", "field_order": [ "template", - "cb_00", "sb_00", "parameters" ], @@ -16,14 +15,10 @@ "fieldname": "template", "fieldtype": "Data", "in_list_view": 1, - "label": "Template", + "label": "Template Name", "reqd": 1, "unique": 1 }, - { - "fieldname": "cb_00", - "fieldtype": "Column Break" - }, { "fieldname": "sb_00", "fieldtype": "Section Break" @@ -36,8 +31,14 @@ "reqd": 1 } ], - "links": [], - "modified": "2020-10-21 12:39:02.221128", + "links": [ + { + "group": "Records", + "link_doctype": "Quality Feedback", + "link_fieldname": "template" + } + ], + "modified": "2020-10-27 16:18:53.579688", "modified_by": "Administrator", "module": "Quality Management", "name": "Quality Feedback Template", diff --git a/erpnext/quality_management/doctype/quality_feedback_template/test_quality_feedback_template.py b/erpnext/quality_management/doctype/quality_feedback_template/test_quality_feedback_template.py index 36dbe137a5..b3eed10383 100644 --- a/erpnext/quality_management/doctype/quality_feedback_template/test_quality_feedback_template.py +++ b/erpnext/quality_management/doctype/quality_feedback_template/test_quality_feedback_template.py @@ -7,31 +7,4 @@ import frappe import unittest class TestQualityFeedbackTemplate(unittest.TestCase): - - def test_quality_feedback_template(self): - test_create_template = create_template() - test_get_template = get_template() - - self.assertEqual(test_create_template, test_get_template) - -def create_template(): - template = frappe.get_doc({ - "doctype": "Quality Feedback Template", - "template": "_Test Feedback Template", - "parameters": [ - { - "parameter": "Test Parameter" - } - ] - }) - - template_exists = frappe.db.exists("Quality Feedback Template", {"template": "_Test Feedback Template"}) - - if not template_exists: - template.insert() - return template.name - else: - return template_exists - -def get_template(): - return frappe.db.exists("Quality Feedback Template", {"template": "_Test Feedback Template"}) \ No newline at end of file + pass \ No newline at end of file diff --git a/erpnext/quality_management/doctype/quality_goal/quality_goal.js b/erpnext/quality_management/doctype/quality_goal/quality_goal.js index ff58c5ad21..40cb4d9246 100644 --- a/erpnext/quality_management/doctype/quality_goal/quality_goal.js +++ b/erpnext/quality_management/doctype/quality_goal/quality_goal.js @@ -2,7 +2,6 @@ // For license information, please see license.txt frappe.ui.form.on('Quality Goal', { - refresh: function(frm) { - frm.doc.created_by = frappe.session.user; - } + // refresh: function(frm) { + // } }); diff --git a/erpnext/quality_management/doctype/quality_goal/quality_goal.json b/erpnext/quality_management/doctype/quality_goal/quality_goal.json index b64754e9a1..26802550dc 100644 --- a/erpnext/quality_management/doctype/quality_goal/quality_goal.json +++ b/erpnext/quality_management/doctype/quality_goal/quality_goal.json @@ -8,27 +8,14 @@ "field_order": [ "goal", "frequency", - "created_by", "cb_00", "procedure", "weekday", - "quarter", "date", - "sb_00", - "revision", - "cb_01", - "revised_on", "sb_01", "objectives" ], "fields": [ - { - "fieldname": "created_by", - "fieldtype": "Link", - "label": "Created By", - "options": "User", - "read_only": 1 - }, { "default": "None", "fieldname": "frequency", @@ -51,20 +38,6 @@ "label": "Date", "options": "1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30" }, - { - "default": "0", - "fieldname": "revision", - "fieldtype": "Int", - "label": "Revision", - "read_only": 1 - }, - { - "fieldname": "revised_on", - "fieldtype": "Date", - "in_list_view": 1, - "label": "Revised On", - "read_only": 1 - }, { "depends_on": "eval:doc.frequency == 'Weekly';", "fieldname": "weekday", @@ -76,15 +49,6 @@ "fieldname": "cb_00", "fieldtype": "Column Break" }, - { - "fieldname": "sb_00", - "fieldtype": "Section Break", - "label": "Revision and Revised On" - }, - { - "fieldname": "cb_01", - "fieldtype": "Column Break" - }, { "fieldname": "sb_01", "fieldtype": "Section Break", @@ -102,15 +66,6 @@ "label": "Goal", "reqd": 1, "unique": 1 - }, - { - "default": "January-April-July-October", - "depends_on": "eval:doc.frequency == 'Quarterly';", - "fieldname": "quarter", - "fieldtype": "Select", - "label": "Quarter", - "options": "January-April-July-October", - "read_only": 1 } ], "index_web_pages_for_search": 1, @@ -121,7 +76,7 @@ "link_fieldname": "goal" } ], - "modified": "2020-10-21 12:49:38.251228", + "modified": "2020-10-27 15:57:59.368605", "modified_by": "Administrator", "module": "Quality Management", "name": "Quality Goal", diff --git a/erpnext/quality_management/doctype/quality_goal/quality_goal.py b/erpnext/quality_management/doctype/quality_goal/quality_goal.py index 4ae015e4a1..f3fe986d53 100644 --- a/erpnext/quality_management/doctype/quality_goal/quality_goal.py +++ b/erpnext/quality_management/doctype/quality_goal/quality_goal.py @@ -8,7 +8,5 @@ import frappe from frappe.model.document import Document class QualityGoal(Document): - def validate(self): - self.revision += 1 - self.revised_on = frappe.utils.today() + pass \ No newline at end of file diff --git a/erpnext/quality_management/doctype/quality_goal/test_quality_goal.js b/erpnext/quality_management/doctype/quality_goal/test_quality_goal.js deleted file mode 100644 index f8afe548a4..0000000000 --- a/erpnext/quality_management/doctype/quality_goal/test_quality_goal.js +++ /dev/null @@ -1,23 +0,0 @@ -/* eslint-disable */ -// rename this file from _test_[name] to test_[name] to activate -// and remove above this line - -QUnit.test("test: Quality Goal", function (assert) { - let done = assert.async(); - - // number of asserts - assert.expect(1); - - frappe.run_serially([ - // insert a new Quality Goal - () => frappe.tests.make('Quality Goal', [ - // values to be set - {key: 'value'} - ]), - () => { - assert.equal(cur_frm.doc.key, 'value'); - }, - () => done() - ]); - -}); diff --git a/erpnext/quality_management/doctype/quality_goal/test_quality_goal.py b/erpnext/quality_management/doctype/quality_goal/test_quality_goal.py index d77187aaa1..f61d6e581d 100644 --- a/erpnext/quality_management/doctype/quality_goal/test_quality_goal.py +++ b/erpnext/quality_management/doctype/quality_goal/test_quality_goal.py @@ -8,44 +8,18 @@ import unittest from erpnext.quality_management.doctype.quality_procedure.test_quality_procedure import create_procedure class TestQualityGoal(unittest.TestCase): - def test_quality_goal(self): - create_procedure() - create_unit() - test_create_goal = create_goal() - test_get_goal = get_goal() + # no code, just a basic sanity check + goal = get_quality_goal() + self.assertTrue(goal) + goal.delete() - self.assertEquals(test_create_goal, test_get_goal) - -def create_goal(): - goal = frappe.get_doc({ - "doctype": "Quality Goal", - "goal": "_Test Quality Goal", - "procedure": "PRC-_Test Quality Procedure", - "objectives": [ - { - "objective": "_Test Quality Objective", - "target": "4", - "uom": "_Test UOM" - } +def get_quality_goal(): + return frappe.get_doc(dict( + doctype = 'Quality Goal', + goal = 'Test Quality Module', + frequency = 'Daily', + objectives = [ + dict(objective = 'Check test cases', target='100', uom='Percent') ] - }) - goal_exist = frappe.db.exists("Quality Goal", {"goal": goal.goal}) - if not goal_exist: - goal.insert() - return goal.name - else: - return goal_exist - -def get_goal(): - goal = frappe.db.exists("Quality Goal", "GOAL-_Test Quality Goal") - return goal - -def create_unit(): - unit = frappe.get_doc({ - "doctype": "UOM", - "uom_name": "_Test UOM", - }) - unit_exist = frappe.db.exists("UOM", unit.uom_name) - if not unit_exist: - unit.insert() + )).insert() \ No newline at end of file diff --git a/erpnext/quality_management/doctype/quality_meeting/quality_meeting.js b/erpnext/quality_management/doctype/quality_meeting/quality_meeting.js index 32c7c33fd5..eb7a8c32d7 100644 --- a/erpnext/quality_management/doctype/quality_meeting/quality_meeting.js +++ b/erpnext/quality_management/doctype/quality_meeting/quality_meeting.js @@ -2,8 +2,5 @@ // For license information, please see license.txt frappe.ui.form.on('Quality Meeting', { - onload: function(frm){ - frm.set_value("date", frappe.datetime.get_today()); - frm.refresh(); - } + }); diff --git a/erpnext/quality_management/doctype/quality_meeting/quality_meeting.json b/erpnext/quality_management/doctype/quality_meeting/quality_meeting.json index 480abf09db..ead403d453 100644 --- a/erpnext/quality_management/doctype/quality_meeting/quality_meeting.json +++ b/erpnext/quality_management/doctype/quality_meeting/quality_meeting.json @@ -6,22 +6,14 @@ "editable_grid": 1, "engine": "InnoDB", "field_order": [ - "date", - "cb_00", "status", + "cb_00", "sb_00", "agenda", "sb_01", "minutes" ], "fields": [ - { - "fieldname": "date", - "fieldtype": "Date", - "in_list_view": 1, - "label": "Date", - "read_only": 1 - }, { "default": "Open", "fieldname": "status", @@ -58,7 +50,7 @@ ], "index_web_pages_for_search": 1, "links": [], - "modified": "2020-10-21 13:08:50.367577", + "modified": "2020-10-27 16:36:45.657883", "modified_by": "Administrator", "module": "Quality Management", "name": "Quality Meeting", diff --git a/erpnext/quality_management/doctype/quality_meeting/test_quality_meeting.js b/erpnext/quality_management/doctype/quality_meeting/test_quality_meeting.js deleted file mode 100644 index 196cc85ccb..0000000000 --- a/erpnext/quality_management/doctype/quality_meeting/test_quality_meeting.js +++ /dev/null @@ -1,23 +0,0 @@ -/* eslint-disable */ -// rename this file from _test_[name] to test_[name] to activate -// and remove above this line - -QUnit.test("test: Quality Meeting", function (assert) { - let done = assert.async(); - - // number of asserts - assert.expect(1); - - frappe.run_serially([ - // insert a new Quality Meeting - () => frappe.tests.make('Quality Meeting', [ - // values to be set - {key: 'value'} - ]), - () => { - assert.equal(cur_frm.doc.key, 'value'); - }, - () => done() - ]); - -}); diff --git a/erpnext/quality_management/doctype/quality_meeting/test_quality_meeting.py b/erpnext/quality_management/doctype/quality_meeting/test_quality_meeting.py index e61b5dfc57..754bccb06e 100644 --- a/erpnext/quality_management/doctype/quality_meeting/test_quality_meeting.py +++ b/erpnext/quality_management/doctype/quality_meeting/test_quality_meeting.py @@ -5,41 +5,7 @@ from __future__ import unicode_literals import frappe import unittest -from erpnext.quality_management.doctype.quality_review.test_quality_review import create_review class TestQualityMeeting(unittest.TestCase): - def test_quality_meeting(self): - create_review() - test_create_meeting = create_meeting() - test_get_meeting = get_meeting() - self.assertEquals(test_create_meeting, test_get_meeting) - -def create_meeting(): - meeting = frappe.get_doc({ - "doctype": "Quality Meeting", - "status": "Open", - "date": frappe.utils.nowdate(), - "agenda": [ - { - "agenda": "Test Agenda" - } - ], - "minutes": [ - { - "document_type": "Quality Review", - "document_name": frappe.db.exists("Quality Review", {"goal": "GOAL-_Test Quality Goal"}), - "minute": "Test Minute" - } - ] - }) - meeting_exist = frappe.db.exists("Quality Meeting", {"date": frappe.utils.nowdate(), "status": "Open"}) - - if not meeting_exist: - meeting.insert() - return meeting.name - else: - return meeting_exist - -def get_meeting(): - meeting = frappe.db.exists("Quality Meeting", {"date": frappe.utils.nowdate(), "status": "Open"}) - return meeting \ No newline at end of file + # nothing to test + pass \ No newline at end of file diff --git a/erpnext/quality_management/doctype/quality_procedure/quality_procedure.py b/erpnext/quality_management/doctype/quality_procedure/quality_procedure.py index 797c26b64c..f0857275ca 100644 --- a/erpnext/quality_management/doctype/quality_procedure/quality_procedure.py +++ b/erpnext/quality_management/doctype/quality_procedure/quality_procedure.py @@ -14,69 +14,58 @@ class QualityProcedure(NestedSet): self.check_for_incorrect_child() def on_update(self): + NestedSet.on_update(self) self.set_parent() def after_insert(self): self.set_parent() - #if Child is Added through Tree View. + + # add child to parent if missing if self.parent_quality_procedure: - parent_quality_procedure = frappe.get_doc("Quality Procedure", self.parent_quality_procedure) - parent_quality_procedure.append("processes", {"procedure": self.name}) - parent_quality_procedure.save() + parent = frappe.get_doc("Quality Procedure", self.parent_quality_procedure) + if not [d for d in parent.processes if d.procedure == self.name]: + parent.append("processes", {"procedure": self.name, "process_description": self.name}) + parent.save() def on_trash(self): - if self.parent_quality_procedure: - doc = frappe.get_doc("Quality Procedure", self.parent_quality_procedure) - for process in doc.processes: - if process.procedure == self.name: - doc.processes.remove(process) - doc.save(ignore_permissions=True) - - flag_is_group = 0 - doc.load_from_db() - - for process in doc.processes: - flag_is_group = 1 if process.procedure else 0 - - doc.is_group = 0 if flag_is_group == 0 else 1 - doc.save(ignore_permissions=True) + # clear from child table (sub procedures) + frappe.db.sql('''update `tabQuality Procedure Process` + set `procedure`='' where `procedure`=%s''', self.name) + NestedSet.on_trash(self, allow_root_deletion=True) def set_parent(self): - rebuild_tree('Quality Procedure', 'parent_quality_procedure') - for process in self.processes: # Set parent for only those children who don't have a parent - parent_quality_procedure = frappe.db.get_value("Quality Procedure", process.procedure, "parent_quality_procedure") - if not parent_quality_procedure and process.procedure: + has_parent = frappe.db.get_value("Quality Procedure", process.procedure, "parent_quality_procedure") + if not has_parent and process.procedure: frappe.db.set_value(self.doctype, process.procedure, "parent_quality_procedure", self.name) def check_for_incorrect_child(self): for process in self.processes: if process.procedure: + self.is_group = 1 # Check if any child process belongs to another parent. parent_quality_procedure = frappe.db.get_value("Quality Procedure", process.procedure, "parent_quality_procedure") if parent_quality_procedure and parent_quality_procedure != self.name: frappe.throw(_("{0} already has a Parent Procedure {1}.".format(frappe.bold(process.procedure), frappe.bold(parent_quality_procedure))), title=_("Invalid Child Procedure")) - self.is_group = 1 @frappe.whitelist() def get_children(doctype, parent=None, parent_quality_procedure=None, is_root=False): if parent is None or parent == "All Quality Procedures": parent = "" - return frappe.db.sql(""" - select - name as value, - is_group as expandable - from - `tab{doctype}` - where - ifnull(parent_quality_procedure, "")={parent} - """.format( - doctype = doctype, - parent=frappe.db.escape(parent) - ), as_dict=1) + if parent: + parent_procedure = frappe.get_doc('Quality Procedure', parent) + # return the list in order + return [dict( + value=d.procedure, + expandable=frappe.db.get_value('Quality Procedure', d.procedure, 'is_group')) + for d in parent_procedure.processes if d.procedure + ] + else: + return frappe.get_all(doctype, fields=['name as value', 'is_group as expandable'], + filters = dict(parent_quality_procedure = parent), order_by='name asc') @frappe.whitelist() def add_node(): @@ -88,4 +77,4 @@ def add_node(): if args.parent_quality_procedure == 'All Quality Procedures': args.parent_quality_procedure = None - frappe.get_doc(args).insert() \ No newline at end of file + return frappe.get_doc(args).insert() \ No newline at end of file diff --git a/erpnext/quality_management/doctype/quality_procedure/quality_procedure_tree.js b/erpnext/quality_management/doctype/quality_procedure/quality_procedure_tree.js index ef48ab6c6e..eeb4cf617c 100644 --- a/erpnext/quality_management/doctype/quality_procedure/quality_procedure_tree.js +++ b/erpnext/quality_management/doctype/quality_procedure/quality_procedure_tree.js @@ -15,7 +15,7 @@ frappe.treeview_settings["Quality Procedure"] = { } }, ], - breadcrumb: "Setup", + breadcrumb: "Quality Management", disable_add_node: true, root_label: "All Quality Procedures", get_tree_root: false, diff --git a/erpnext/quality_management/doctype/quality_procedure/test_quality_procedure.js b/erpnext/quality_management/doctype/quality_procedure/test_quality_procedure.js deleted file mode 100644 index 0a187ebfb7..0000000000 --- a/erpnext/quality_management/doctype/quality_procedure/test_quality_procedure.js +++ /dev/null @@ -1,23 +0,0 @@ -/* eslint-disable */ -// rename this file from _test_[name] to test_[name] to activate -// and remove above this line - -QUnit.test("test: Quality Procedure", function (assert) { - let done = assert.async(); - - // number of asserts - assert.expect(1); - - frappe.run_serially([ - // insert a new Quality Procedure - () => frappe.tests.make('Quality Procedure', [ - // values to be set - {key: 'value'} - ]), - () => { - assert.equal(cur_frm.doc.key, 'value'); - }, - () => done() - ]); - -}); diff --git a/erpnext/quality_management/doctype/quality_procedure/test_quality_procedure.py b/erpnext/quality_management/doctype/quality_procedure/test_quality_procedure.py index 3289bb5a37..36bdf26acf 100644 --- a/erpnext/quality_management/doctype/quality_procedure/test_quality_procedure.py +++ b/erpnext/quality_management/doctype/quality_procedure/test_quality_procedure.py @@ -6,54 +6,45 @@ from __future__ import unicode_literals import frappe import unittest -class TestQualityProcedure(unittest.TestCase): - def test_quality_procedure(self): - test_create_procedure = create_procedure() - test_create_nested_procedure = create_nested_procedure() - test_get_procedure, test_get_nested_procedure = get_procedure() +from .quality_procedure import add_node - self.assertEquals(test_create_procedure, test_get_procedure.get("name")) - self.assertEquals(test_create_nested_procedure, test_get_nested_procedure.get("name")) +class TestQualityProcedure(unittest.TestCase): + def test_add_node(self): + try: + procedure = frappe.get_doc(dict( + doctype = 'Quality Procedure', + quality_procedure_name = 'Test Procedure 1', + processes = [ + dict(process_description = 'Test Step 1') + ] + )).insert() + + frappe.form_dict = dict(doctype = 'Quality Procedure', quality_procedure_name = 'Test Child 1', + parent_quality_procedure = procedure.name, cmd='test', is_root='false') + node = add_node() + + procedure.reload() + + self.assertEqual(procedure.is_group, 1) + + # child row created + self.assertTrue([d for d in procedure.processes if d.procedure == node.name]) + + node.delete() + procedure.reload() + + # child unset + self.assertFalse([d for d in procedure.processes if d.name == node.name]) + + finally: + procedure.delete() def create_procedure(): - procedure = frappe.get_doc({ - "doctype": "Quality Procedure", - "quality_procedure_name": "_Test Quality Procedure", - "processes": [ - { - "process_description": "_Test Quality Procedure Table", - } + return frappe.get_doc(dict( + doctype = 'Quality Procedure', + quality_procedure_name = 'Test Procedure 1', + is_group = 1, + processes = [ + dict(process_description = 'Test Step 1') ] - }) - - procedure_exist = frappe.db.exists("Quality Procedure", "PRC-_Test Quality Procedure") - - if not procedure_exist: - procedure.insert() - return procedure.name - else: - return procedure_exist - -def create_nested_procedure(): - nested_procedure = frappe.get_doc({ - "doctype": "Quality Procedure", - "quality_procedure_name": "_Test Nested Quality Procedure", - "processes": [ - { - "procedure": "PRC-_Test Quality Procedure" - } - ] - }) - - nested_procedure_exist = frappe.db.exists("Quality Procedure", "PRC-_Test Nested Quality Procedure") - - if not nested_procedure_exist: - nested_procedure.insert() - return nested_procedure.name - else: - return nested_procedure_exist - -def get_procedure(): - procedure = frappe.get_doc("Quality Procedure", "PRC-_Test Quality Procedure") - nested_procedure = frappe.get_doc("Quality Procedure", "PRC-_Test Nested Quality Procedure") - return {"name": procedure.name}, {"name": nested_procedure.name, "parent_quality_procedure": nested_procedure.parent_quality_procedure} \ No newline at end of file + )).insert() \ No newline at end of file diff --git a/erpnext/quality_management/doctype/quality_procedure_process/quality_procedure_process.json b/erpnext/quality_management/doctype/quality_procedure_process/quality_procedure_process.json index cf7606e6e5..aeca6ff47a 100644 --- a/erpnext/quality_management/doctype/quality_procedure_process/quality_procedure_process.json +++ b/erpnext/quality_management/doctype/quality_procedure_process/quality_procedure_process.json @@ -21,14 +21,14 @@ "fieldname": "procedure", "fieldtype": "Link", "in_list_view": 1, - "label": "Sub Produre", + "label": "Sub Procedure", "options": "Quality Procedure" } ], "index_web_pages_for_search": 1, "istable": 1, "links": [], - "modified": "2020-10-21 12:10:23.790655", + "modified": "2020-10-27 13:55:11.252945", "modified_by": "Administrator", "module": "Quality Management", "name": "Quality Procedure Process", diff --git a/erpnext/quality_management/doctype/quality_review/quality_review.py b/erpnext/quality_management/doctype/quality_review/quality_review.py index ddf6207a9c..e3a8b073f0 100644 --- a/erpnext/quality_management/doctype/quality_review/quality_review.py +++ b/erpnext/quality_management/doctype/quality_review/quality_review.py @@ -8,8 +8,25 @@ from frappe.model.document import Document class QualityReview(Document): def validate(self): + # fetch targets from goal + if not self.reviews: + for d in frappe.get_doc('Quality Goal', self.goal).objectives: + self.append('reviews', dict( + objective = d.objective, + target = d.target, + uom = d.uom + )) + + self.set_status() + + def set_status(self): # if any child item is failed, fail the parent - self.status = 'Failed' if any([d.status=='Failed' for d in self.reviews]) else 'Passed' + if not len(self.reviews or []) or any([d.status=='Open' for d in self.reviews]): + self.status = 'Open' + elif any([d.status=='Failed' for d in self.reviews]): + self.status = 'Failed' + else: + self.status = 'Passed' def review(): day = frappe.utils.getdate().day @@ -26,7 +43,7 @@ def review(): elif goal.frequency == 'Monthly' and goal.date == str(day): create_review(goal.name) - elif goal.frequency == 'Quarterly' and goal.data == str(day) and get_quarter(month): + elif goal.frequency == 'Quarterly' and day==1 and get_quarter(month): create_review(goal.name) def create_review(goal): @@ -38,15 +55,6 @@ def create_review(goal): "date": frappe.utils.getdate() }) - for objective in goal.objectives: - review.append("reviews", - { - "objective": objective.objective, - "target": objective.target, - "uom": objective.uom - } - ) - review.insert(ignore_permissions=True) def get_quarter(month): diff --git a/erpnext/quality_management/doctype/quality_review/test_quality_review.js b/erpnext/quality_management/doctype/quality_review/test_quality_review.js deleted file mode 100644 index cf910b27af..0000000000 --- a/erpnext/quality_management/doctype/quality_review/test_quality_review.js +++ /dev/null @@ -1,23 +0,0 @@ -/* eslint-disable */ -// rename this file from _test_[name] to test_[name] to activate -// and remove above this line - -QUnit.test("test: Performance Monitoring", function (assert) { - let done = assert.async(); - - // number of asserts - assert.expect(1); - - frappe.run_serially([ - // insert a new Performance Monitoring - () => frappe.tests.make('Performance Monitoring', [ - // values to be set - {key: 'value'} - ]), - () => { - assert.equal(cur_frm.doc.key, 'value'); - }, - () => done() - ]); - -}); diff --git a/erpnext/quality_management/doctype/quality_review/test_quality_review.py b/erpnext/quality_management/doctype/quality_review/test_quality_review.py index 8add6db9c9..a7d92da8ac 100644 --- a/erpnext/quality_management/doctype/quality_review/test_quality_review.py +++ b/erpnext/quality_management/doctype/quality_review/test_quality_review.py @@ -5,42 +5,18 @@ from __future__ import unicode_literals import frappe import unittest -from erpnext.quality_management.doctype.quality_procedure.test_quality_procedure import create_procedure -from erpnext.quality_management.doctype.quality_goal.test_quality_goal import create_unit -from erpnext.quality_management.doctype.quality_goal.test_quality_goal import create_goal + +from ..quality_goal.test_quality_goal import get_quality_goal +from .quality_review import review class TestQualityReview(unittest.TestCase): + def test_review_creation(self): + quality_goal = get_quality_goal() + review() - def test_quality_review(self): - create_procedure() - create_unit() - create_goal() - test_create_review = create_review() - test_get_review = get_review() - self.assertEquals(test_create_review, test_get_review) + # check if review exists + quality_review = frappe.get_doc('Quality Review', dict(goal = quality_goal.name)) + self.assertEqual(quality_goal.objectives[0].target, quality_review.reviews[0].target) + quality_review.delete() -def create_review(): - review = frappe.get_doc({ - "doctype": "Quality Review", - "goal": "GOAL-_Test Quality Goal", - "procedure": "PRC-_Test Quality Procedure", - "date": frappe.utils.nowdate(), - "reviews": [ - { - "objective": "_Test Quality Objective", - "target": "100", - "uom": "_Test UOM", - "review": "Test Review" - } - ] - }) - review_exist = frappe.db.exists("Quality Review", {"goal": "GOAL-_Test Quality Goal"}) - if not review_exist: - review.insert(ignore_permissions=True) - return review.name - else: - return review_exist - -def get_review(): - review = frappe.db.exists("Quality Review", {"goal": "GOAL-_Test Quality Goal"}) - return review \ No newline at end of file + quality_goal.delete() \ No newline at end of file diff --git a/erpnext/quality_management/doctype/quality_review_objective/quality_review_objective.json b/erpnext/quality_management/doctype/quality_review_objective/quality_review_objective.json index e31e65e668..3a750c21d6 100644 --- a/erpnext/quality_management/doctype/quality_review_objective/quality_review_objective.json +++ b/erpnext/quality_management/doctype/quality_review_objective/quality_review_objective.json @@ -61,13 +61,13 @@ "fieldtype": "Select", "in_list_view": 1, "label": "Status", - "options": "Passed\nFailed" + "options": "Open\nPassed\nFailed" } ], "index_web_pages_for_search": 1, "istable": 1, "links": [], - "modified": "2020-10-21 12:21:18.460863", + "modified": "2020-10-27 16:28:20.908637", "modified_by": "Administrator", "module": "Quality Management", "name": "Quality Review Objective",