From 64f1ffbac4c95289e67c45af0e60fe9007930b60 Mon Sep 17 00:00:00 2001 From: DavidJForgeFlow Date: Wed, 28 Aug 2024 09:22:42 +0200 Subject: [PATCH 1/4] [ADD] repair_stock --- repair_stock/README.rst | 78 ++++ repair_stock/__init__.py | 2 + repair_stock/__manifest__.py | 15 + repair_stock/models/__init__.py | 3 + repair_stock/models/repair.py | 38 ++ repair_stock/readme/CONTRIBUTORS.rst | 1 + repair_stock/readme/DESCRIPTION.rst | 3 + repair_stock/static/description/icon.png | Bin 0 -> 9455 bytes repair_stock/static/description/index.html | 422 ++++++++++++++++++ repair_stock/tests/__init__.py | 3 + repair_stock/tests/test_stock_repair_order.py | 122 +++++ repair_stock/views/repair_order_view.xml | 26 ++ setup/repair_stock/odoo/addons/repair_stock | 1 + setup/repair_stock/setup.py | 6 + 14 files changed, 720 insertions(+) create mode 100644 repair_stock/README.rst create mode 100644 repair_stock/__init__.py create mode 100644 repair_stock/__manifest__.py create mode 100644 repair_stock/models/__init__.py create mode 100644 repair_stock/models/repair.py create mode 100644 repair_stock/readme/CONTRIBUTORS.rst create mode 100644 repair_stock/readme/DESCRIPTION.rst create mode 100644 repair_stock/static/description/icon.png create mode 100644 repair_stock/static/description/index.html create mode 100644 repair_stock/tests/__init__.py create mode 100644 repair_stock/tests/test_stock_repair_order.py create mode 100644 repair_stock/views/repair_order_view.xml create mode 120000 setup/repair_stock/odoo/addons/repair_stock create mode 100644 setup/repair_stock/setup.py diff --git a/repair_stock/README.rst b/repair_stock/README.rst new file mode 100644 index 00000000..f3598606 --- /dev/null +++ b/repair_stock/README.rst @@ -0,0 +1,78 @@ +============ +Repair Stock +============ + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:576ed4d5c0c1e57002a5f0fbd364f753297c27ebe3e35595ae64c9cd000b216d + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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/14.0/repair_stock + :alt: OCA/manufacture +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/manufacture-14-0/manufacture-14-0-repair_stock + :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=14.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module acts as a base for the stock related modules for repairs. +It adds some common features that may be overriding between them, +as the compute for the pickings or the smart button for the transfers. + +**Table of contents** + +.. contents:: + :local: + +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 +~~~~~~~ + +* ForgeFlow + +Contributors +~~~~~~~~~~~~ + +* David Jimenez + +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/repair_stock/__init__.py b/repair_stock/__init__.py new file mode 100644 index 00000000..0ee8b507 --- /dev/null +++ b/repair_stock/__init__.py @@ -0,0 +1,2 @@ +from . import models +from . import tests diff --git a/repair_stock/__manifest__.py b/repair_stock/__manifest__.py new file mode 100644 index 00000000..c029bc2f --- /dev/null +++ b/repair_stock/__manifest__.py @@ -0,0 +1,15 @@ +# Copyright 2024 ForgeFlow S.L. (https://www.forgeflow.com) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +{ + "name": "Repair Stock", + "version": "14.0.1.0.0", + "author": "ForgeFlow, Odoo Community Association (OCA)", + "category": "Repair", + "website": "https://github.com/OCA/manufacture", + "depends": ["repair_stock_move"], + "data": [ + "views/repair_order_view.xml", + ], + "license": "AGPL-3", +} diff --git a/repair_stock/models/__init__.py b/repair_stock/models/__init__.py new file mode 100644 index 00000000..316313ec --- /dev/null +++ b/repair_stock/models/__init__.py @@ -0,0 +1,3 @@ +# Copyright 2024 ForgeFlow S.L. (https://www.forgeflow.com) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). +from . import repair diff --git a/repair_stock/models/repair.py b/repair_stock/models/repair.py new file mode 100644 index 00000000..61811cf7 --- /dev/null +++ b/repair_stock/models/repair.py @@ -0,0 +1,38 @@ +# Copyright 2024 ForgeFlow S.L. (https://www.forgeflow.com) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +from odoo import fields, models + + +class RepairOrder(models.Model): + _inherit = "repair.order" + + picking_ids = fields.Many2many( + comodel_name="stock.picking", + compute="_compute_picking_ids", + copy=False, + string="Transfers", + ) + picking_count = fields.Integer( + string="Transfers", copy=False, compute="_compute_picking_ids" + ) + + def action_view_pickings(self): + self.ensure_one() + action = self.env["ir.actions.actions"]._for_xml_id( + "stock.action_picking_tree_all" + ) + action["domain"] = [("id", "in", self.picking_ids.ids)] + return action + + def _compute_picking_ids(self): + for order in self: + moves = self.env["stock.move"].search( + [ + "|", + ("repair_id", "=", order.id), + ("repair_line_id", "in", order.operations.ids), + ] + ) + order.picking_ids = moves.mapped("picking_id") + order.picking_count = len(moves.mapped("picking_id")) diff --git a/repair_stock/readme/CONTRIBUTORS.rst b/repair_stock/readme/CONTRIBUTORS.rst new file mode 100644 index 00000000..11b57a1e --- /dev/null +++ b/repair_stock/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* David Jimenez diff --git a/repair_stock/readme/DESCRIPTION.rst b/repair_stock/readme/DESCRIPTION.rst new file mode 100644 index 00000000..0efcc233 --- /dev/null +++ b/repair_stock/readme/DESCRIPTION.rst @@ -0,0 +1,3 @@ +This module acts as a base for the stock related modules for repairs. +It adds some common features that may be overriding between them, +as the compute for the pickings or the smart button for the transfers. diff --git a/repair_stock/static/description/icon.png b/repair_stock/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/repair_stock/static/description/index.html b/repair_stock/static/description/index.html new file mode 100644 index 00000000..6cbf9d01 --- /dev/null +++ b/repair_stock/static/description/index.html @@ -0,0 +1,422 @@ + + + + + +Repair Stock + + + +
+

Repair Stock

+ + +

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

+

This module acts as a base for the stock related modules for repairs. +It adds some common features that may be overriding between them, +as the compute for the pickings or the smart button for the transfers.

+

Table of contents

+ +
+

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

+
    +
  • ForgeFlow
  • +
+
+
+

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/repair_stock/tests/__init__.py b/repair_stock/tests/__init__.py new file mode 100644 index 00000000..3f1b05c4 --- /dev/null +++ b/repair_stock/tests/__init__.py @@ -0,0 +1,3 @@ +# Copyright 2024 ForgeFlow S.L. (https://www.forgeflow.com) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). +from . import test_stock_repair_order diff --git a/repair_stock/tests/test_stock_repair_order.py b/repair_stock/tests/test_stock_repair_order.py new file mode 100644 index 00000000..7ac7b5fb --- /dev/null +++ b/repair_stock/tests/test_stock_repair_order.py @@ -0,0 +1,122 @@ +# Copyright 2024 ForgeFlow S.L. (https://www.forgeflow.com) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +from odoo.tests import common + + +class TestStockRepairOrder(common.SavepointCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + + cls.repair_model = cls.env["repair.order"] + cls.repair_line_model = cls.env["repair.line"] + cls.product_model = cls.env["product.product"] + cls.stock_location_model = cls.env["stock.location"] + cls.warehouse_model = cls.env["stock.warehouse"] + cls.company = cls.env.ref("base.main_company") + cls.warehouse = cls.warehouse_model.create( + { + "name": "Test Warehouse", + "code": "TW", + "company_id": cls.company.id, + } + ) + + cls.product1 = cls.product_model.create( + { + "name": "Product 1", + "type": "product", + "company_id": cls.company.id, + } + ) + cls.product2 = cls.product_model.create( + { + "name": "Product 2", + "type": "product", + "company_id": cls.company.id, + } + ) + cls.repair_location = cls.stock_location_model.create( + { + "name": "Repair Location", + "usage": "internal", + "location_id": cls.warehouse.view_location_id.id, + "company_id": cls.company.id, + } + ) + cls.production_location = cls.stock_location_model.create( + { + "name": "Production Location", + "usage": "production", + "company_id": cls.company.id, + } + ) + cls.env["stock.quant"].create( + { + "product_id": cls.product1.id, + "location_id": cls.repair_location.id, + "quantity": 10, + } + ) + cls.env["stock.quant"].create( + { + "product_id": cls.product2.id, + "location_id": cls.warehouse.lot_stock_id.id, + "quantity": 10, + } + ) + + def test_compute_pickings(self): + repair_order = self.repair_model.create( + { + "product_id": self.product1.id, + "product_uom": self.product1.uom_id.id, + "location_id": self.repair_location.id, + "company_id": self.company.id, + } + ) + self.repair_line_model.create( + { + "name": "Repair Line 2", + "repair_id": repair_order.id, + "product_id": self.product2.id, + "type": "add", + "product_uom_qty": 1, + "product_uom": self.product2.uom_id.id, + "price_unit": 1, + "location_id": self.repair_location.id, + "location_dest_id": self.production_location.id, + } + ) + repair_order.action_repair_confirm() + repair_order._compute_picking_ids() + self.assertEqual(len(repair_order.picking_ids), 0) + picking = self.env["stock.picking"].create( + { + "partner_id": False, + "user_id": False, + "picking_type_id": self.warehouse.int_type_id.id, + "move_type": "direct", + "location_id": self.repair_location.id, + "location_dest_id": self.production_location.id, + } + ) + self.env["stock.move"].create( + { + "name": repair_order.product_id.name, + "product_id": repair_order.product_id.id, + "location_id": repair_order.location_id.id, + "location_dest_id": self.production_location.id, + "picking_id": picking.id, + "state": "draft", + "company_id": picking.company_id.id, + "picking_type_id": self.warehouse.int_type_id.id, + "product_uom_qty": 1, + "product_uom": repair_order.move_id.product_uom.id, + "repair_id": repair_order.id, + } + ) + repair_order._compute_picking_ids() + self.assertTrue(repair_order.picking_ids) + self.assertEqual(len(repair_order.picking_ids), 1) diff --git a/repair_stock/views/repair_order_view.xml b/repair_stock/views/repair_order_view.xml new file mode 100644 index 00000000..9667f627 --- /dev/null +++ b/repair_stock/views/repair_order_view.xml @@ -0,0 +1,26 @@ + + + + + repair.order.form - repair_stock_move - custom + repair.order + + + + + + + + diff --git a/setup/repair_stock/odoo/addons/repair_stock b/setup/repair_stock/odoo/addons/repair_stock new file mode 120000 index 00000000..fc3ff9e3 --- /dev/null +++ b/setup/repair_stock/odoo/addons/repair_stock @@ -0,0 +1 @@ +../../../../repair_stock \ No newline at end of file diff --git a/setup/repair_stock/setup.py b/setup/repair_stock/setup.py new file mode 100644 index 00000000..28c57bb6 --- /dev/null +++ b/setup/repair_stock/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) From 6d4350174a12d6d9e9ec90bf21e4a7477dc47b13 Mon Sep 17 00:00:00 2001 From: DavidJForgeFlow Date: Wed, 28 Aug 2024 13:46:34 +0200 Subject: [PATCH 2/4] [IMP] repair_stock: pre-commit stuff --- repair_stock/README.rst | 16 ++++++++-------- repair_stock/__init__.py | 1 - repair_stock/__manifest__.py | 2 +- repair_stock/static/description/index.html | 8 ++++---- 4 files changed, 13 insertions(+), 14 deletions(-) diff --git a/repair_stock/README.rst b/repair_stock/README.rst index f3598606..455793ed 100644 --- a/repair_stock/README.rst +++ b/repair_stock/README.rst @@ -16,14 +16,14 @@ Repair Stock .. |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/14.0/repair_stock - :alt: OCA/manufacture +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Frepair-lightgray.png?logo=github + :target: https://github.com/OCA/repair/tree/16.0/repair_stock + :alt: OCA/repair .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/manufacture-14-0/manufacture-14-0-repair_stock + :target: https://translation.odoo-community.org/projects/repair-16-0/repair-16-0-repair_stock :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=14.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/repair&target_branch=16.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| @@ -40,10 +40,10 @@ as the compute for the pickings or the smart button for the transfers. Bug Tracker =========== -Bugs are tracked on `GitHub Issues `_. +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 `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -73,6 +73,6 @@ 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. +This module is part of the `OCA/repair `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/repair_stock/__init__.py b/repair_stock/__init__.py index 0ee8b507..0650744f 100644 --- a/repair_stock/__init__.py +++ b/repair_stock/__init__.py @@ -1,2 +1 @@ from . import models -from . import tests diff --git a/repair_stock/__manifest__.py b/repair_stock/__manifest__.py index c029bc2f..962c8036 100644 --- a/repair_stock/__manifest__.py +++ b/repair_stock/__manifest__.py @@ -6,7 +6,7 @@ "version": "14.0.1.0.0", "author": "ForgeFlow, Odoo Community Association (OCA)", "category": "Repair", - "website": "https://github.com/OCA/manufacture", + "website": "https://github.com/OCA/repair", "depends": ["repair_stock_move"], "data": [ "views/repair_order_view.xml", diff --git a/repair_stock/static/description/index.html b/repair_stock/static/description/index.html index 6cbf9d01..a8855865 100644 --- a/repair_stock/static/description/index.html +++ b/repair_stock/static/description/index.html @@ -368,7 +368,7 @@

Repair Stock

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! source digest: sha256:576ed4d5c0c1e57002a5f0fbd364f753297c27ebe3e35595ae64c9cd000b216d !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

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

+

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

This module acts as a base for the stock related modules for repairs. It adds some common features that may be overriding between them, as the compute for the pickings or the smart button for the transfers.

@@ -386,10 +386,10 @@

Repair Stock

Bug Tracker

-

Bugs are tracked on GitHub Issues. +

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.

+feedback.

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

@@ -413,7 +413,7 @@

Maintainers

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.

+

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

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

From 3a32b8c98ca071550d488da3e6d19459d818a642 Mon Sep 17 00:00:00 2001 From: DavidJForgeFlow Date: Wed, 28 Aug 2024 13:50:34 +0200 Subject: [PATCH 3/4] [MIG] repair_stock: Migration to 16.0 --- repair_stock/__manifest__.py | 3 ++- repair_stock/tests/test_stock_repair_order.py | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/repair_stock/__manifest__.py b/repair_stock/__manifest__.py index 962c8036..d7848139 100644 --- a/repair_stock/__manifest__.py +++ b/repair_stock/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Repair Stock", - "version": "14.0.1.0.0", + "version": "16.0.1.0.0", "author": "ForgeFlow, Odoo Community Association (OCA)", "category": "Repair", "website": "https://github.com/OCA/repair", @@ -12,4 +12,5 @@ "views/repair_order_view.xml", ], "license": "AGPL-3", + "development_status": "Alpha", } diff --git a/repair_stock/tests/test_stock_repair_order.py b/repair_stock/tests/test_stock_repair_order.py index 7ac7b5fb..9b5f7c76 100644 --- a/repair_stock/tests/test_stock_repair_order.py +++ b/repair_stock/tests/test_stock_repair_order.py @@ -4,7 +4,7 @@ from odoo.tests import common -class TestStockRepairOrder(common.SavepointCase): +class TestStockRepairOrder(common.TransactionCase): @classmethod def setUpClass(cls): super().setUpClass() From 66e520ee3c825d5893eef63abb3d8b19c7d87112 Mon Sep 17 00:00:00 2001 From: DavidJForgeFlow Date: Wed, 28 Aug 2024 09:25:36 +0200 Subject: [PATCH 4/4] [REF] repair_picking_after_done: adding repair_stock as dependency. --- repair_picking_after_done/__manifest__.py | 4 ++-- .../migration/16.0.1.0.2/pre-migration.py | 8 ++++++++ repair_picking_after_done/models/repair.py | 17 +---------------- .../static/description/index.html | 1 - repair_picking_after_done/views/repair.xml | 16 +--------------- .../wizards/repair_move_transfer.py | 3 ++- 6 files changed, 14 insertions(+), 35 deletions(-) create mode 100644 repair_picking_after_done/migration/16.0.1.0.2/pre-migration.py diff --git a/repair_picking_after_done/__manifest__.py b/repair_picking_after_done/__manifest__.py index 8e521b8d..1109ceb2 100644 --- a/repair_picking_after_done/__manifest__.py +++ b/repair_picking_after_done/__manifest__.py @@ -3,12 +3,12 @@ { "name": "Repair picking after done", - "version": "16.0.1.0.1", + "version": "16.0.1.0.2", "author": "ForgeFlow, Odoo Community Association (OCA)", "website": "https://github.com/OCA/repair", "summary": "Transfer repaired move to another location directly from repaire order", "category": "Repair", - "depends": ["repair_type"], + "depends": ["repair_type", "repair_stock"], "data": [ "security/ir.model.access.csv", "views/repair.xml", diff --git a/repair_picking_after_done/migration/16.0.1.0.2/pre-migration.py b/repair_picking_after_done/migration/16.0.1.0.2/pre-migration.py new file mode 100644 index 00000000..fc21d263 --- /dev/null +++ b/repair_picking_after_done/migration/16.0.1.0.2/pre-migration.py @@ -0,0 +1,8 @@ +# Copyright 2024 ForgeFlow, S.L. +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + + +def migrate(env, version): + repairs = env["repair.order"].search([]) + for repair in repairs: + repair.picking_ids.move_ids.write({"repair_id": repair.id}) diff --git a/repair_picking_after_done/models/repair.py b/repair_picking_after_done/models/repair.py index c0804d2e..0c1f2f71 100644 --- a/repair_picking_after_done/models/repair.py +++ b/repair_picking_after_done/models/repair.py @@ -1,13 +1,12 @@ # Copyright (C) 2022 ForgeFlow S.L. # License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html) -from odoo import _, fields, models +from odoo import fields, models class Repair(models.Model): _inherit = "repair.order" - picking_ids = fields.Many2many("stock.picking", string="Transfers", copy=False) remaining_quantity = fields.Float( "Remaining quantity to be transferred", compute="_compute_remaining_quantity" ) @@ -38,17 +37,3 @@ def action_transfer_done_moves(self): }, "target": "new", } - - def action_open_transfers(self): - self.ensure_one() - domain = [("id", "in", self.picking_ids.ids)] - action = { - "name": _("Transfers"), - "view_type": "tree", - "view_mode": "list,form", - "res_model": "stock.picking", - "type": "ir.actions.act_window", - "context": self.env.context, - "domain": domain, - } - return action diff --git a/repair_picking_after_done/static/description/index.html b/repair_picking_after_done/static/description/index.html index 5eddb44c..8b0b8c05 100644 --- a/repair_picking_after_done/static/description/index.html +++ b/repair_picking_after_done/static/description/index.html @@ -1,4 +1,3 @@ - diff --git a/repair_picking_after_done/views/repair.xml b/repair_picking_after_done/views/repair.xml index 7b3fcf41..8ed2c13b 100644 --- a/repair_picking_after_done/views/repair.xml +++ b/repair_picking_after_done/views/repair.xml @@ -6,6 +6,7 @@
+
- - - - -
diff --git a/repair_picking_after_done/wizards/repair_move_transfer.py b/repair_picking_after_done/wizards/repair_move_transfer.py index c7041fd4..a9692328 100644 --- a/repair_picking_after_done/wizards/repair_move_transfer.py +++ b/repair_picking_after_done/wizards/repair_move_transfer.py @@ -46,6 +46,7 @@ def _prepare_stock_move_vals(self, picking): "picking_type_id": self._get_picking_type().id, "product_uom_qty": self.quantity, "product_uom": self.repair_order_id.move_id.product_uom.id, + "repair_id": self.repair_order_id.id, } def action_create_transfer(self): @@ -69,4 +70,4 @@ def action_create_transfer(self): stock_move.move_line_ids[0].write( {"lot_id": self.repair_order_id.lot_id.id} ) - self.repair_order_id.write({"picking_ids": [(4, picking.id)]}) + self.repair_order_id._compute_picking_ids()