mirror of
https://github.com/OCA/stock-logistics-warehouse.git
synced 2025-01-21 14:27:28 +02:00
[MIG] stock_quant_reservation_info: Migration to 13.0
This commit is contained in:
@@ -0,0 +1 @@
|
||||
../../../../stock_quant_reservation_info
|
||||
6
setup/stock_quant_reservation_info/setup.py
Normal file
6
setup/stock_quant_reservation_info/setup.py
Normal file
@@ -0,0 +1,6 @@
|
||||
import setuptools
|
||||
|
||||
setuptools.setup(
|
||||
setup_requires=['setuptools-odoo'],
|
||||
odoo_addon=True,
|
||||
)
|
||||
@@ -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",
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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")]
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2022 ForgeFlow <http://www.forgeflow.com>
|
||||
# Copyright 2023 ForgeFlow <http://www.forgeflow.com>
|
||||
|
||||
from odoo import _, models
|
||||
|
||||
|
||||
1
stock_quant_reservation_info/tests/__init__.py
Normal file
1
stock_quant_reservation_info/tests/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
from . import test_stock_quant_reservation_info
|
||||
@@ -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)
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user