Store picking_partner_id on stock.move.line and set default_order to product_categ_complete_name, product_id, picking_partner_id in the detailed operations view so sorting uses the full category path (e.g. 'SECO ENVASADO / Aperitivos') instead of only the leaf name. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
63 lines
1.6 KiB
Python
63 lines
1.6 KiB
Python
# Copyright 2026 Criptomart
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
|
|
|
from odoo import api
|
|
from odoo import fields
|
|
from odoo import models
|
|
|
|
|
|
class StockMoveLine(models.Model):
|
|
_inherit = "stock.move.line"
|
|
|
|
product_categ_id = fields.Many2one(
|
|
comodel_name="product.category",
|
|
string="Product Category (Batch)",
|
|
related="product_id.categ_id",
|
|
store=True,
|
|
readonly=True,
|
|
)
|
|
|
|
product_categ_complete_name = fields.Char(
|
|
string="Product Category Path",
|
|
related="product_id.categ_id.complete_name",
|
|
store=True,
|
|
readonly=True,
|
|
)
|
|
|
|
product_default_code = fields.Char(
|
|
string="Product Code",
|
|
related="product_id.default_code",
|
|
readonly=True,
|
|
)
|
|
|
|
picking_partner_id = fields.Many2one(
|
|
related="picking_id.partner_id",
|
|
store=True,
|
|
readonly=True,
|
|
)
|
|
|
|
is_collected = fields.Boolean(
|
|
string="Collected",
|
|
default=False,
|
|
copy=False,
|
|
)
|
|
|
|
home_delivery = fields.Boolean(
|
|
related="picking_id.home_delivery",
|
|
readonly=True,
|
|
)
|
|
|
|
consumer_group_id = fields.Many2one(
|
|
comodel_name="res.partner",
|
|
compute="_compute_consumer_group_id",
|
|
readonly=True,
|
|
)
|
|
|
|
@api.depends("picking_id")
|
|
def _compute_consumer_group_id(self):
|
|
for line in self:
|
|
picking = line.picking_id
|
|
if picking:
|
|
line.consumer_group_id = picking.batch_consumer_group_id
|
|
else:
|
|
line.consumer_group_id = False
|