mirror of
https://github.com/OCA/stock-logistics-warehouse.git
synced 2025-01-21 14:27:28 +02:00
[IMP] stock_move_location
This improvement commit ensures the operation type is determined by the original location, aiming to prevent the misuse of incorrect operation types in scenarios where multiple internal transfer options exist.
This commit is contained in:
@@ -7,26 +7,13 @@ from itertools import groupby
|
||||
|
||||
from odoo import api, fields, models
|
||||
from odoo.fields import first
|
||||
from odoo.osv import expression
|
||||
|
||||
|
||||
class StockMoveLocationWizard(models.TransientModel):
|
||||
_name = "wiz.stock.move.location"
|
||||
_description = "Wizard move location"
|
||||
|
||||
def _get_default_picking_type_id(self):
|
||||
company_id = self.env.context.get("company_id") or self.env.user.company_id.id
|
||||
return (
|
||||
self.env["stock.picking.type"]
|
||||
.search(
|
||||
[
|
||||
("code", "=", "internal"),
|
||||
("warehouse_id.company_id", "=", company_id),
|
||||
],
|
||||
limit=1,
|
||||
)
|
||||
.id
|
||||
)
|
||||
|
||||
origin_location_disable = fields.Boolean(
|
||||
compute="_compute_readonly_locations",
|
||||
help="technical field to disable the edition of origin location.",
|
||||
@@ -53,7 +40,9 @@ class StockMoveLocationWizard(models.TransientModel):
|
||||
string="Move Location lines",
|
||||
)
|
||||
picking_type_id = fields.Many2one(
|
||||
comodel_name="stock.picking.type", default=_get_default_picking_type_id
|
||||
compute="_compute_picking_type_id",
|
||||
comodel_name="stock.picking.type",
|
||||
readonly=False,
|
||||
)
|
||||
picking_id = fields.Many2one(
|
||||
string="Connected Picking", comodel_name="stock.picking"
|
||||
@@ -74,6 +63,28 @@ class StockMoveLocationWizard(models.TransientModel):
|
||||
rec.origin_location_disable = True
|
||||
rec.destination_location_disable = True
|
||||
|
||||
@api.depends_context("company")
|
||||
@api.depends("origin_location_id")
|
||||
def _compute_picking_type_id(self):
|
||||
company_id = self.env.context.get("company_id") or self.env.user.company_id.id
|
||||
for rec in self:
|
||||
picking_type = self.env["stock.picking.type"]
|
||||
base_domain = [
|
||||
("code", "=", "internal"),
|
||||
("warehouse_id.company_id", "=", company_id),
|
||||
]
|
||||
if rec.origin_location_id:
|
||||
location_id = rec.origin_location_id
|
||||
while location_id and not picking_type:
|
||||
domain = [("default_location_src_id", "=", location_id.id)]
|
||||
domain = expression.AND([base_domain, domain])
|
||||
picking_type = picking_type.search(domain, limit=1)
|
||||
# Move up to the parent location if no picking type found
|
||||
location_id = not picking_type and location_id.location_id or False
|
||||
if not picking_type:
|
||||
picking_type = picking_type.search(base_domain, limit=1)
|
||||
rec.picking_type_id = picking_type.id
|
||||
|
||||
@api.model
|
||||
def default_get(self, fields):
|
||||
res = super().default_get(fields)
|
||||
|
||||
Reference in New Issue
Block a user