Skip to content

Commit

Permalink
[IMP] stock_move_location
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
AungKoKoLin1997 committed Apr 5, 2024
1 parent 619cf2b commit efa92e2
Showing 1 changed file with 26 additions and 15 deletions.
41 changes: 26 additions & 15 deletions stock_move_location/wizard/stock_move_location.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,26 +7,13 @@

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.",
Expand Down Expand Up @@ -54,7 +41,9 @@ def _get_default_picking_type_id(self):
column2="move_location_line_wiz_id",
)
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"
Expand All @@ -75,6 +64,28 @@ def _compute_readonly_locations(self):
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)
Expand Down

0 comments on commit efa92e2

Please sign in to comment.