From ca728ea414a27ecbff1981b0ac4b5b284a610123 Mon Sep 17 00:00:00 2001 From: cubells Date: Thu, 5 May 2022 17:45:48 +0200 Subject: [PATCH] [12][ADD] repair_quality_control_issue: new module --- repair_quality_control_issue/README.rst | 95 ++++ repair_quality_control_issue/__init__.py | 4 + repair_quality_control_issue/__manifest__.py | 21 + .../models/__init__.py | 5 + .../models/qc_issue.py | 29 ++ .../models/repair_order.py | 13 + .../readme/CONTRIBUTORS.rst | 3 + .../readme/DESCRIPTION.rst | 2 + repair_quality_control_issue/readme/USAGE.rst | 7 + .../static/description/index.html | 437 ++++++++++++++++++ .../views/qc_issue_views.xml | 17 + .../views/repair_order_views.xml | 13 + .../wizards/__init__.py | 3 + .../wizards/qc_issue_make_repair.py | 121 +++++ .../wizards/qc_issue_make_repair_views.xml | 56 +++ 15 files changed, 826 insertions(+) create mode 100644 repair_quality_control_issue/README.rst create mode 100644 repair_quality_control_issue/__init__.py create mode 100644 repair_quality_control_issue/__manifest__.py create mode 100644 repair_quality_control_issue/models/__init__.py create mode 100644 repair_quality_control_issue/models/qc_issue.py create mode 100644 repair_quality_control_issue/models/repair_order.py create mode 100644 repair_quality_control_issue/readme/CONTRIBUTORS.rst create mode 100644 repair_quality_control_issue/readme/DESCRIPTION.rst create mode 100644 repair_quality_control_issue/readme/USAGE.rst create mode 100644 repair_quality_control_issue/static/description/index.html create mode 100644 repair_quality_control_issue/views/qc_issue_views.xml create mode 100644 repair_quality_control_issue/views/repair_order_views.xml create mode 100644 repair_quality_control_issue/wizards/__init__.py create mode 100644 repair_quality_control_issue/wizards/qc_issue_make_repair.py create mode 100644 repair_quality_control_issue/wizards/qc_issue_make_repair_views.xml diff --git a/repair_quality_control_issue/README.rst b/repair_quality_control_issue/README.rst new file mode 100644 index 000000000..b487ea6aa --- /dev/null +++ b/repair_quality_control_issue/README.rst @@ -0,0 +1,95 @@ +============================ +Repair Quality Control Issue +============================ + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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-LGPL--3-blue.png + :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html + :alt: License: LGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fmanufacture-lightgray.png?logo=github + :target: https://github.com/OCA/manufacture/tree/12.0/repair_quality_control_issue + :alt: OCA/manufacture +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/manufacture-12-0/manufacture-12-0-repair_quality_control_issue + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/129/12.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module extends the functionality of quality control issue to allow you to +create repair orders from issues. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +In order to create repair orders from issues you must: + +#. Create one or more issues in quality control. +#. Open any issue and confirm it. +#. Now you must see a button `Create Repair Order`. +#. You can go to issue list and select more than one issue. Then you can create + repair orders in menu `Create Repair Orders` in action button. + +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 smashing it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Trey + +Contributors +~~~~~~~~~~~~ + +* `Trey Kilobytes de Soluciones SL `__: + + * Vicent Cubells + +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. + +.. |maintainer-cubells| image:: https://github.com/cubells.png?size=40px + :target: https://github.com/cubells + :alt: cubells + +Current `maintainer `__: + +|maintainer-cubells| + +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/repair_quality_control_issue/__init__.py b/repair_quality_control_issue/__init__.py new file mode 100644 index 000000000..5df6a3e9f --- /dev/null +++ b/repair_quality_control_issue/__init__.py @@ -0,0 +1,4 @@ +# Copyright 2022 Trey, Kilobytes de Soluciones - Vicent Cubells +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from . import models +from . import wizards diff --git a/repair_quality_control_issue/__manifest__.py b/repair_quality_control_issue/__manifest__.py new file mode 100644 index 000000000..6dd72161b --- /dev/null +++ b/repair_quality_control_issue/__manifest__.py @@ -0,0 +1,21 @@ +# Copyright 2022 Trey, Kilobytes de Soluciones - Vicent Cubells +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "Repair Quality Control Issue", + "version": "12.0.1.0.0", + "license": "LGPL-3", + "category": "Quality control", + "summary": "Add the possibility to create repairs orders from quality " + "control issues.", + "author": "Trey, Odoo Community Association (OCA)", + "maintainers": ["cubells"], + "website": "https://www.github.com/OCA/manufacture", + "depends": ["repair", "quality_control_issue"], + "data": [ + "wizards/qc_issue_make_repair_views.xml", + "views/qc_issue_views.xml", + "views/repair_order_views.xml", + ], + "installable": True, +} diff --git a/repair_quality_control_issue/models/__init__.py b/repair_quality_control_issue/models/__init__.py new file mode 100644 index 000000000..009140ede --- /dev/null +++ b/repair_quality_control_issue/models/__init__.py @@ -0,0 +1,5 @@ +# Copyright 2022 Trey, Kilobytes de Soluciones - Vicent Cubells +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import qc_issue +from . import repair_order diff --git a/repair_quality_control_issue/models/qc_issue.py b/repair_quality_control_issue/models/qc_issue.py new file mode 100644 index 000000000..1adf8aff6 --- /dev/null +++ b/repair_quality_control_issue/models/qc_issue.py @@ -0,0 +1,29 @@ +# Copyright 2022 Trey, Kilobytes de Soluciones - Vicent Cubells +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class QualityControlIssue(models.Model): + _inherit = "qc.issue" + + repair_order_ids = fields.One2many( + comodel_name="repair.order", + string="Repair Orders", + inverse_name="qc_issue_id", + ) + repair_order_count = fields.Integer( + compute="_compute_repair_order_count", + ) + + @api.multi + def _compute_repair_order_count(self): + for issue in self: + issue.repair_order_count = len(issue.repair_order_ids) + + @api.multi + def action_view_repair_orders(self): + action = self.env.ref("repair.action_repair_order_tree") + result = action.read()[0] + result["domain"] = [("id", "in", self.repair_order_ids.ids)] + return result diff --git a/repair_quality_control_issue/models/repair_order.py b/repair_quality_control_issue/models/repair_order.py new file mode 100644 index 000000000..1e4526964 --- /dev/null +++ b/repair_quality_control_issue/models/repair_order.py @@ -0,0 +1,13 @@ +# Copyright 2022 Trey, Kilobytes de Soluciones - Vicent Cubells +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class RepairOrder(models.Model): + _inherit = "repair.order" + + qc_issue_id = fields.Many2one( + comodel_name="qc.issue", + string="Quality Control Issue", + ) diff --git a/repair_quality_control_issue/readme/CONTRIBUTORS.rst b/repair_quality_control_issue/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..8c5b24524 --- /dev/null +++ b/repair_quality_control_issue/readme/CONTRIBUTORS.rst @@ -0,0 +1,3 @@ +* `Trey Kilobytes de Soluciones SL `__: + + * Vicent Cubells diff --git a/repair_quality_control_issue/readme/DESCRIPTION.rst b/repair_quality_control_issue/readme/DESCRIPTION.rst new file mode 100644 index 000000000..69c60f5f1 --- /dev/null +++ b/repair_quality_control_issue/readme/DESCRIPTION.rst @@ -0,0 +1,2 @@ +This module extends the functionality of quality control issue to allow you to +create repair orders from issues. diff --git a/repair_quality_control_issue/readme/USAGE.rst b/repair_quality_control_issue/readme/USAGE.rst new file mode 100644 index 000000000..067fe5d4c --- /dev/null +++ b/repair_quality_control_issue/readme/USAGE.rst @@ -0,0 +1,7 @@ +In order to create repair orders from issues you must: + +#. Create one or more issues in quality control. +#. Open any issue and confirm it. +#. Now you must see a button `Create Repair Order`. +#. You can go to issue list and select more than one issue. Then you can create + repair orders in menu `Create Repair Orders` in action button. diff --git a/repair_quality_control_issue/static/description/index.html b/repair_quality_control_issue/static/description/index.html new file mode 100644 index 000000000..5181d5bca --- /dev/null +++ b/repair_quality_control_issue/static/description/index.html @@ -0,0 +1,437 @@ + + + + + + +Repair Quality Control Issue + + + +
+

Repair Quality Control Issue

+ + +

Beta License: LGPL-3 OCA/manufacture Translate me on Weblate Try me on Runbot

+

This module extends the functionality of quality control issue to allow you to +create repair orders from issues.

+

Table of contents

+ +
+

Usage

+

In order to create repair orders from issues you must:

+
    +
  1. Create one or more issues in quality control.
  2. +
  3. Open any issue and confirm it.
  4. +
  5. Now you must see a button Create Repair Order.
  6. +
  7. You can go to issue list and select more than one issue. Then you can create +repair orders in menu Create Repair Orders in action button.
  8. +
+
+
+

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 smashing it by providing a detailed and welcomed +feedback.

+

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

+
+
+

Credits

+
+

Authors

+
    +
  • Trey
  • +
+
+
+

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.

+

Current maintainer:

+

cubells

+

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/repair_quality_control_issue/views/qc_issue_views.xml b/repair_quality_control_issue/views/qc_issue_views.xml new file mode 100644 index 000000000..9c4f30a9d --- /dev/null +++ b/repair_quality_control_issue/views/qc_issue_views.xml @@ -0,0 +1,17 @@ + + + + qc.issue + + +
+ +
+ +
+
+
diff --git a/repair_quality_control_issue/views/repair_order_views.xml b/repair_quality_control_issue/views/repair_order_views.xml new file mode 100644 index 000000000..ad4af72b3 --- /dev/null +++ b/repair_quality_control_issue/views/repair_order_views.xml @@ -0,0 +1,13 @@ + + + + repair.order + + + + + + + + + diff --git a/repair_quality_control_issue/wizards/__init__.py b/repair_quality_control_issue/wizards/__init__.py new file mode 100644 index 000000000..0daef8406 --- /dev/null +++ b/repair_quality_control_issue/wizards/__init__.py @@ -0,0 +1,3 @@ +# Copyright 2022 Trey, Kilobytes de Soluciones - Vicent Cubells +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from . import qc_issue_make_repair diff --git a/repair_quality_control_issue/wizards/qc_issue_make_repair.py b/repair_quality_control_issue/wizards/qc_issue_make_repair.py new file mode 100644 index 000000000..0d045c740 --- /dev/null +++ b/repair_quality_control_issue/wizards/qc_issue_make_repair.py @@ -0,0 +1,121 @@ +# Copyright 2022 Trey, Kilobytes de Soluciones - Vicent Cubells +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from odoo import _, api, fields, models +from odoo.addons import decimal_precision as dp +from odoo.exceptions import UserError + + +class QcIssueMakeRepair(models.TransientModel): + _name = "qc.issue.make.repair" + _description = "QC Issue Make Repair" + + partner_id = fields.Many2one( + comodel_name="res.partner", + ) + item_ids = fields.One2many( + comodel_name="qc.issue.make.repair.item", + inverse_name="wiz_id", + ) + + @api.model + def _prepare_item(self, issue): + return { + "qc_issue_id": issue.id, + "product_id": issue.product_id.id, + "lot_id": issue.lot_id.id, + "name": issue.name, + "product_qty": issue.product_qty, + "product_uom_id": issue.product_uom.id, + } + + @api.model + def default_get(self, fields): + res = super().default_get(fields) + Issue = self.env["qc.issue"] + items = [] + issues = Issue.browse(self.env.context["active_ids"]) + for issue in issues: + items.append([0, 0, self._prepare_item(issue)]) + res["item_ids"] = items + return res + + @api.multi + def make_repair(self): + Repair = self.env["repair.order"] + res = [] + action = self.env.ref("repair.action_repair_order_tree") + action = action.read()[0] + for issue in self.item_ids: + if issue.product_qty <= 0.0: + raise UserError(_("Enter a positive quantity.")) + values = issue._prepare_repair_data() + repair = Repair.create(values) + res.append(repair.id) + if len(res) != 1: + action["domain"] = [("id", "in", res)] + elif len(res) == 1: + view = self.env.ref("repair.view_repair_order_form", False) + action["views"] = [(view and view.id or False, "form")] + action["res_id"] = res[0] + return action + + +class QcIssueMakeRepairItem(models.TransientModel): + _name = "qc.issue.make.repair.item" + _description = "QC Issue Make Repair Item" + + wiz_id = fields.Many2one( + comodel_name="qc.issue.make.repair", + string="Wizard", + required=True, + ondelete="cascade", + readonly=True, + ) + qc_issue_id = fields.Many2one( + comodel_name="qc.issue", + string="Quality Issue", + required=True, + ) + product_id = fields.Many2one( + comodel_name="product.product", + related="qc_issue_id.product_id", + readony=True, + ) + location_id = fields.Many2one( + comodel_name="stock.location", + related="qc_issue_id.location_id", + readonly=True, + ) + lot_id = fields.Many2one( + comodel_name="stock.production.lot", + related="qc_issue_id.lot_id", + readonly=True, + string="Lot/Serial Number", + ) + name = fields.Char( + related="qc_issue_id.name", + readonly=True, + ) + product_uom_id = fields.Many2one( + comodel_name="uom.uom", + string="UoM", + readonly=True, + ) + product_qty = fields.Float( + string="Quantity to Repair", + digits=dp.get_precision("Product Unit of Measure"), + ) + + @api.model + def _prepare_repair_data(self): + self.ensure_one() + return { + "partner_id": self.wiz_id.partner_id.id, + "address_id": self.wiz_id.partner_id.id, + "product_id": self.product_id.id, + "product_uom": self.product_uom_id.id, + "qc_issue_id": self.qc_issue_id.id, + "product_qty": self.product_qty, + "lot_id": self.lot_id.id, + "location_id": self.location_id.id, + } diff --git a/repair_quality_control_issue/wizards/qc_issue_make_repair_views.xml b/repair_quality_control_issue/wizards/qc_issue_make_repair_views.xml new file mode 100644 index 000000000..e8c7e0259 --- /dev/null +++ b/repair_quality_control_issue/wizards/qc_issue_make_repair_views.xml @@ -0,0 +1,56 @@ + +> + + qc.issue.make.repair + form + +
+ + + + + + + + + + + + + + + + + + + +
+
+ +
+
+ + Create Repair Order + ir.actions.act_window + qc.issue.make.repair + form + form + + new + + +