diff --git a/setup/stock_quant_reservation_info/odoo/addons/stock_quant_reservation_info b/setup/stock_quant_reservation_info/odoo/addons/stock_quant_reservation_info new file mode 120000 index 000000000..f7b51d5da --- /dev/null +++ b/setup/stock_quant_reservation_info/odoo/addons/stock_quant_reservation_info @@ -0,0 +1 @@ +../../../../stock_quant_reservation_info \ No newline at end of file diff --git a/setup/stock_quant_reservation_info/setup.py b/setup/stock_quant_reservation_info/setup.py new file mode 100644 index 000000000..28c57bb64 --- /dev/null +++ b/setup/stock_quant_reservation_info/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) diff --git a/stock_quant_reservation_info/__manifest__.py b/stock_quant_reservation_info/__manifest__.py index 93657ade8..fc44f4fce 100644 --- a/stock_quant_reservation_info/__manifest__.py +++ b/stock_quant_reservation_info/__manifest__.py @@ -1,11 +1,11 @@ -# Copyright 2019-2020 ForgeFlow S.L. +# Copyright 2023 ForgeFlow S.L. # (https://www.forgeflow.com) # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). { "name": "Stock Move Reservation Info", "summary": "Allows to see the reserved info of Products", - "version": "14.0.1.0.6", + "version": "13.0.1.0.0", "author": "ForgeFlow, Odoo Community Association (OCA)", "website": "https://github.com/OCA/stock-logistics-warehouse", "category": "Generic", diff --git a/stock_quant_reservation_info/i18n/stock_quant_reservation_info.pot b/stock_quant_reservation_info/i18n/stock_quant_reservation_info.pot index df6298fd3..6bdce2688 100644 --- a/stock_quant_reservation_info/i18n/stock_quant_reservation_info.pot +++ b/stock_quant_reservation_info/i18n/stock_quant_reservation_info.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 14.0\n" +"Project-Id-Version: Odoo Server 13.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" diff --git a/stock_quant_reservation_info/models/stock_move_line.py b/stock_quant_reservation_info/models/stock_move_line.py index bb36805e1..6f7dcebec 100644 --- a/stock_quant_reservation_info/models/stock_move_line.py +++ b/stock_quant_reservation_info/models/stock_move_line.py @@ -1,4 +1,4 @@ -# Copyright 2022 ForgeFlow +# Copyright 2023 ForgeFlow from odoo import models @@ -7,8 +7,8 @@ class StockQuant(models.Model): _inherit = "stock.move.line" def action_view_picking_from_reserved(self): - action = self.env["ir.actions.act_window"]._for_xml_id( - "stock.action_picking_tree_all" + action = self.env["ir.actions.act_window"].for_xml_id( + "stock", "action_picking_tree_all" ) res = self.env.ref("stock.view_picking_form", False) action["views"] = [(res and res.id or False, "form")] diff --git a/stock_quant_reservation_info/models/stock_quant.py b/stock_quant_reservation_info/models/stock_quant.py index e05c6dc3f..3d01429ae 100644 --- a/stock_quant_reservation_info/models/stock_quant.py +++ b/stock_quant_reservation_info/models/stock_quant.py @@ -1,4 +1,4 @@ -# Copyright 2022 ForgeFlow +# Copyright 2023 ForgeFlow from odoo import _, models diff --git a/stock_quant_reservation_info/tests/__init__.py b/stock_quant_reservation_info/tests/__init__.py new file mode 100644 index 000000000..edf74904a --- /dev/null +++ b/stock_quant_reservation_info/tests/__init__.py @@ -0,0 +1 @@ +from . import test_stock_quant_reservation_info diff --git a/stock_quant_reservation_info/tests/test_stock_quant_reservation_info.py b/stock_quant_reservation_info/tests/test_stock_quant_reservation_info.py new file mode 100644 index 000000000..0fbce5898 --- /dev/null +++ b/stock_quant_reservation_info/tests/test_stock_quant_reservation_info.py @@ -0,0 +1,89 @@ +# Copyright 2023 ForgeFlow S.L (https://www.forgeflow.com) + +from odoo.tests.common import TransactionCase + + +class TestStockQuantReservationInfo(TransactionCase): + def setUp(self): + super().setUp() + + self.partner = self.env["res.partner"].create({"name": "Jean"}) + self.partner_customer = self.env["res.partner"].create({"name": "Nate"}) + self.stock_location = self.env.ref("stock.stock_location_stock") + self.supplier_location = self.env.ref("stock.stock_location_suppliers") + self.customer_location = self.env.ref("stock.stock_location_customers") + uom_unit = self.env.ref("uom.product_uom_unit") + + self.product_1 = self.env["product.product"].create( + {"name": "Product 1", "type": "product", "uom_id": uom_unit.id} + ) + self.receipt = self.env["stock.picking"].create( + { + "location_id": self.supplier_location.id, + "location_dest_id": self.stock_location.id, + "partner_id": self.partner.id, + "picking_type_id": self.env.ref("stock.picking_type_in").id, + } + ) + move_receipt_1 = self.env["stock.move"].create( + { + "name": "Test 1", + "product_id": self.product_1.id, + "quantity_done": 20, + "product_uom": self.product_1.uom_id.id, + "picking_id": self.receipt.id, + "picking_type_id": self.env.ref("stock.picking_type_in").id, + "location_id": self.supplier_location.id, + "location_dest_id": self.stock_location.id, + } + ) + move_receipt_1._action_confirm() + self.receipt.button_validate() + + def test_01_StockQuantReservationInfo(self): + + self.delivery = self.env["stock.picking"].create( + { + "location_id": self.stock_location.id, + "location_dest_id": self.customer_location.id, + "partner_id": self.partner_customer.id, + "picking_type_id": self.env.ref("stock.picking_type_out").id, + } + ) + customer_move = self.env["stock.move"].create( + { + "name": "move out", + "location_id": self.stock_location.id, + "location_dest_id": self.customer_location.id, + "product_id": self.product_1.id, + "product_uom": self.product_1.uom_id.id, + "product_uom_qty": 10.0, + "picking_id": self.delivery.id, + } + ) + customer_move._action_confirm() + + move_lines_ini = self.env["stock.move.line"].search( + [("picking_id", "=", self.delivery.id)] + ) + self.assertFalse(move_lines_ini) + self.assertEqual(self.product_1.stock_quant_ids[1].reserved_quantity, 0.0) + + self.delivery.action_assign() + + self.assertEqual(self.product_1.stock_quant_ids[1].reserved_quantity, 10.0) + + # we execute manually the method executed by the first button just to get the domain + action = self.product_1.stock_quant_ids[1].action_reserved_moves() + move_line_post_a = self.env["stock.move.line"].search(action["domain"]) + + # we execute manually the second button to see if the method + # returns the same stock picking form as the delivery picking + action2 = move_line_post_a.action_view_picking_from_reserved() + + self.assertEqual(action2["res_id"], self.delivery.id) + move_line_post_b = self.env["stock.move.line"].search( + [("picking_id", "=", self.delivery.id)] + ) + self.assertTrue(move_line_post_a) + self.assertEqual(move_line_post_a, move_line_post_b) diff --git a/stock_quant_reservation_info/views/stock_move_line.xml b/stock_quant_reservation_info/views/stock_move_line.xml index f0a7ed517..0954ca63c 100644 --- a/stock_quant_reservation_info/views/stock_move_line.xml +++ b/stock_quant_reservation_info/views/stock_move_line.xml @@ -8,6 +8,7 @@