[MIG] stock_quant_reservation_info: Migration to 13.0

This commit is contained in:
SergiCForgeFlow
2023-05-24 13:19:14 +02:00
parent 97107ffabb
commit 6e0689a481
10 changed files with 111 additions and 11 deletions

View File

@@ -0,0 +1 @@
../../../../stock_quant_reservation_info

View File

@@ -0,0 +1,6 @@
import setuptools
setuptools.setup(
setup_requires=['setuptools-odoo'],
odoo_addon=True,
)

View File

@@ -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",

View File

@@ -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"

View File

@@ -1,4 +1,4 @@
# Copyright 2022 ForgeFlow <http://www.forgeflow.com>
# Copyright 2023 ForgeFlow <http://www.forgeflow.com>
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")]

View File

@@ -1,4 +1,4 @@
# Copyright 2022 ForgeFlow <http://www.forgeflow.com>
# Copyright 2023 ForgeFlow <http://www.forgeflow.com>
from odoo import _, models

View File

@@ -0,0 +1 @@
from . import test_stock_quant_reservation_info

View File

@@ -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)

View File

@@ -8,6 +8,7 @@
<field name="picking_id" />
<button
name="action_view_picking_from_reserved"
string="Related Document"
type="object"
class="btn btn-link text-info"
icon="fa-arrow-right"

View File

@@ -4,10 +4,11 @@
<field name="model">stock.quant</field>
<field name="inherit_id" ref="stock.view_stock_quant_tree_editable" />
<field name="arch" type="xml">
<field name="available_quantity" position="after">
<field name="reserved_quantity" optional="show" />
<field name="lot_id" optional="show" />
<field name="reserved_quantity" position="after" optional="show">
<button
name="action_reserved_moves"
string="Reservation Details"
type="object"
attrs="{'invisible': [('reserved_quantity', '=', 0)]}"
class="btn btn-link text-info"
@@ -23,10 +24,11 @@
<field name="model">stock.quant</field>
<field name="inherit_id" ref="stock.view_stock_quant_tree" />
<field name="arch" type="xml">
<field name="available_quantity" position="after">
<field name="reserved_quantity" optional="show" />
<field name="lot_id" optional="show" />
<field name="reserved_quantity" position="after" optional="show">
<button
name="action_reserved_moves"
string="Reservation Details"
type="object"
attrs="{'invisible': [('reserved_quantity', '=', 0)]}"
class="btn btn-link text-info"