diff --git a/quality_control_oca_inspection_matrix/README.rst b/quality_control_oca_inspection_matrix/README.rst new file mode 100644 index 00000000000..f1242e27f69 --- /dev/null +++ b/quality_control_oca_inspection_matrix/README.rst @@ -0,0 +1,93 @@ +===================================== +Quality Control OCA Inspection Matrix +===================================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:fd9af74bab2a9bf9d700ee755a33e8326b63dd00aab5302062bf029fcbf29699 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fmanufacture-lightgray.png?logo=github + :target: https://github.com/OCA/manufacture/tree/18.0/quality_control_oca_inspection_matrix + :alt: OCA/manufacture +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/manufacture-18-0/manufacture-18-0-quality_control_oca_inspection_matrix + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/manufacture&target_branch=18.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module provides a matrix view for inspection tests, allowing to +test multiple products at once. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +To use this module, you need to: + +- Go to *Quality Control* > Inspections +- Select multiple inspections linked to the same test +- Select Actions > Inspection Matrix +- Fill in all fields (you get a first table with quantitative + questions, then a table with qualitative questions) +- Save +- The inspections have been filled + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +------- + +* Le Filament + +Contributors +------------ + +- `Le Filament `__ + + - julienCozo + - remi-filament + +Maintainers +----------- + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +This module is part of the `OCA/manufacture `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/quality_control_oca_inspection_matrix/__init__.py b/quality_control_oca_inspection_matrix/__init__.py new file mode 100644 index 00000000000..40272379f72 --- /dev/null +++ b/quality_control_oca_inspection_matrix/__init__.py @@ -0,0 +1 @@ +from . import wizard diff --git a/quality_control_oca_inspection_matrix/__manifest__.py b/quality_control_oca_inspection_matrix/__manifest__.py new file mode 100644 index 00000000000..6ac04bba178 --- /dev/null +++ b/quality_control_oca_inspection_matrix/__manifest__.py @@ -0,0 +1,20 @@ +{ + "name": "Quality Control OCA Inspection Matrix", + "summary": "Quality inspection tests with 2D matrix view.", + "version": "18.0.1.0.0", + "development_status": "Beta", + "category": "Quality Control", + "website": "https://github.com/OCA/manufacture", + "author": "Le Filament, Odoo Community Association (OCA)", + "license": "AGPL-3", + "application": False, + "installable": True, + "depends": [ + "quality_control_oca", + "web_widget_x2many_2d_matrix", + ], + "data": [ + "security/ir.model.access.csv", + "wizard/multi_quality_edit_wizard_view.xml", + ], +} diff --git a/quality_control_oca_inspection_matrix/pyproject.toml b/quality_control_oca_inspection_matrix/pyproject.toml new file mode 100644 index 00000000000..4231d0cccb3 --- /dev/null +++ b/quality_control_oca_inspection_matrix/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/quality_control_oca_inspection_matrix/readme/CONTRIBUTORS.md b/quality_control_oca_inspection_matrix/readme/CONTRIBUTORS.md new file mode 100644 index 00000000000..e9386e7eb6f --- /dev/null +++ b/quality_control_oca_inspection_matrix/readme/CONTRIBUTORS.md @@ -0,0 +1,3 @@ +- [Le Filament](https://le-filament.com) + - julienCozo + - remi-filament diff --git a/quality_control_oca_inspection_matrix/readme/DESCRIPTION.md b/quality_control_oca_inspection_matrix/readme/DESCRIPTION.md new file mode 100644 index 00000000000..a04defd2dbc --- /dev/null +++ b/quality_control_oca_inspection_matrix/readme/DESCRIPTION.md @@ -0,0 +1 @@ +This module provides a matrix view for inspection tests, allowing to test multiple products at once. diff --git a/quality_control_oca_inspection_matrix/readme/USAGE.md b/quality_control_oca_inspection_matrix/readme/USAGE.md new file mode 100644 index 00000000000..de29d43bb2e --- /dev/null +++ b/quality_control_oca_inspection_matrix/readme/USAGE.md @@ -0,0 +1,8 @@ +To use this module, you need to: + +- Go to *Quality Control* > Inspections +- Select multiple inspections linked to the same test +- Select Actions > Inspection Matrix +- Fill in all fields (you get a first table with quantitative questions, then a table with qualitative questions) +- Save +- The inspections have been filled diff --git a/quality_control_oca_inspection_matrix/security/ir.model.access.csv b/quality_control_oca_inspection_matrix/security/ir.model.access.csv new file mode 100644 index 00000000000..73671a95389 --- /dev/null +++ b/quality_control_oca_inspection_matrix/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_multi_quality_edit_wizard,access_multi_quality_edit_wizard,model_multi_quality_edit_wizard,quality_control_oca.group_quality_control_user,1,1,1,1 +access_multi_quality_edit_line_wizard,access_multi_quality_edit_line_wizard,model_multi_quality_edit_line,quality_control_oca.group_quality_control_user,1,1,1,1 diff --git a/quality_control_oca_inspection_matrix/static/description/icon.png b/quality_control_oca_inspection_matrix/static/description/icon.png new file mode 100644 index 00000000000..b9e8e057e44 Binary files /dev/null and b/quality_control_oca_inspection_matrix/static/description/icon.png differ diff --git a/quality_control_oca_inspection_matrix/static/description/icon.svg b/quality_control_oca_inspection_matrix/static/description/icon.svg new file mode 100644 index 00000000000..333fc05ff77 --- /dev/null +++ b/quality_control_oca_inspection_matrix/static/description/icon.svg @@ -0,0 +1,204 @@ + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/quality_control_oca_inspection_matrix/static/description/index.html b/quality_control_oca_inspection_matrix/static/description/index.html new file mode 100644 index 00000000000..3e593d3d7d0 --- /dev/null +++ b/quality_control_oca_inspection_matrix/static/description/index.html @@ -0,0 +1,442 @@ + + + + + +Quality Control OCA Inspection Matrix + + + +
+

Quality Control OCA Inspection Matrix

+ + +

Beta License: AGPL-3 OCA/manufacture Translate me on Weblate Try me on Runboat

+

This module provides a matrix view for inspection tests, allowing to +test multiple products at once.

+

Table of contents

+ +
+

Usage

+

To use this module, you need to:

+
    +
  • Go to Quality Control > Inspections
  • +
  • Select multiple inspections linked to the same test
  • +
  • Select Actions > Inspection Matrix
  • +
  • Fill in all fields (you get a first table with quantitative +questions, then a table with qualitative questions)
  • +
  • Save
  • +
  • The inspections have been filled
  • +
+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Le Filament
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+ +Odoo Community Association + +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

This module is part of the OCA/manufacture project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/quality_control_oca_inspection_matrix/wizard/__init__.py b/quality_control_oca_inspection_matrix/wizard/__init__.py new file mode 100644 index 00000000000..3189c46b7cb --- /dev/null +++ b/quality_control_oca_inspection_matrix/wizard/__init__.py @@ -0,0 +1 @@ +from . import multi_quality_edit_wizard diff --git a/quality_control_oca_inspection_matrix/wizard/multi_quality_edit_wizard.py b/quality_control_oca_inspection_matrix/wizard/multi_quality_edit_wizard.py new file mode 100644 index 00000000000..48a723409c3 --- /dev/null +++ b/quality_control_oca_inspection_matrix/wizard/multi_quality_edit_wizard.py @@ -0,0 +1,108 @@ +from odoo import api, fields, models +from odoo.exceptions import ValidationError + + +class MultiQualityEditWizard(models.TransientModel): + _name = "multi.quality.edit.wizard" + _description = "Wizard for multi qc edition" + + quantitative_line_ids = fields.One2many( + "multi.quality.edit.line", + "wizard_id", + domain="[('question_type', '=', 'quantitative')]", + ) + qualitative_line_ids = fields.One2many( + "multi.quality.edit.line", + "wizard_id", + domain="[('question_type', '=', 'qualitative')]", + ) + + @api.model + def default_get(self, fields_list): + res = super().default_get(fields_list) + active_ids = self._context.get("active_ids") + inspections = self.env["qc.inspection"].browse(active_ids) + + tests = inspections.mapped("test") + if len(tests) != 1: + raise ValidationError( + self.env._( + "You should only select inspections linked to the same test." + ) + ) + + quantitative_line_ids = [] + qualitative_line_ids = [] + for insp in inspections: + for quant_line in insp.inspection_lines.filtered( + lambda line: line.question_type == "quantitative" + ): + quantitative_line_ids.append( + ( + 0, + 0, + { + "inspection_id": insp.id, + "inspection_line_id": quant_line.id, + "quantitative_response": quant_line.quantitative_value, + }, + ) + ) + for qual_line in insp.inspection_lines.filtered( + lambda line: line.question_type == "qualitative" + ): + qualitative_line_ids.append( + ( + 0, + 0, + { + "inspection_id": insp.id, + "inspection_line_id": qual_line.id, + "qualitative_response": qual_line.qualitative_value, + }, + ) + ) + res["quantitative_line_ids"] = quantitative_line_ids + res["qualitative_line_ids"] = qualitative_line_ids + return res + + def action_save(self): + for line in self.quantitative_line_ids: + line.inspection_line_id.quantitative_value = line.quantitative_response + for line in self.qualitative_line_ids: + line.inspection_line_id.qualitative_value = line.qualitative_response + return {"type": "ir.actions.act_window_close"} + + +class MultiQualityEditLine(models.TransientModel): + _name = "multi.quality.edit.line" + _description = "on line for display" + + wizard_id = fields.Many2one("multi.quality.edit.wizard", required=True) + inspection_id = fields.Many2one("qc.inspection", string="Inspection", required=True) + inspection_line_id = fields.Many2one( + "qc.inspection.line", string="Ligne d'inspection", required=True + ) + column_name = fields.Char(compute="_compute_column_name", string="Object") + question_type = fields.Selection( + related="inspection_line_id.question_type", string="Type de question" + ) + question_name = fields.Char(related="inspection_line_id.name", string="Question") + + quantitative_response = fields.Float() + qualitative_response = fields.Many2one("qc.test.question.value") + qualitative_domain = fields.Binary(compute="_compute_qualitative_domain") + + def _compute_column_name(self): + for line in self: + line.column_name = ( + line.inspection_id.object_id.name + if line.inspection_id.object_id + else self.env._("Unknown") + ) + + def _compute_qualitative_domain(self): + for line in self: + line.qualitative_domain = [ + ("id", "in", line.inspection_line_id.possible_ql_values.ids) + ] diff --git a/quality_control_oca_inspection_matrix/wizard/multi_quality_edit_wizard_view.xml b/quality_control_oca_inspection_matrix/wizard/multi_quality_edit_wizard_view.xml new file mode 100644 index 00000000000..7837b68e85f --- /dev/null +++ b/quality_control_oca_inspection_matrix/wizard/multi_quality_edit_wizard_view.xml @@ -0,0 +1,86 @@ + + + multi.quality.edit.wizard.form + multi.quality.edit.wizard + +
+
+ + + + + + + + + +
+ +
+ + + + + + + + + + +
+
+
+
+
+
+ + + Inspection matrix + multi.quality.edit.wizard + form + new + {'dialog_size': 'extra-large'} + + + + Inspection Matrix + + + + + code + + action = model.env.ref('quality_control_oca_inspection_matrix.action_multi_quality_edit_wizard').read()[0] + + +