product_lot_sequence_per_pr.../models/stock_picking.py

35 lines
1.4 KiB
Python

from odoo import models
class StockPicking(models.Model):
_inherit = 'stock.picking'
def action_auto_generate_lots_subcontract(self):
"""
Auto-generate lot names for move lines in this picking that:
1. Have a product with tracking enabled (serial or lot).
2. Have an empty 'lot_name' and no 'lot_id'.
3. Have a product template with a configured 'lot_sequence_id'.
"""
for picking in self:
# We iterate over move_line_ids (operations)
# Filter for lines that need a lot generated
lines_to_process = picking.move_line_ids.filtered(
lambda ml: (
ml.product_id
and ml.product_id.tracking in ('serial', 'lot')
and not ml.lot_name
and not ml.lot_id
and getattr(ml.product_id.product_tmpl_id, 'lot_sequence_id', False)
)
)
for line in lines_to_process:
# Get the sequence from the product template
seq = line.product_id.product_tmpl_id.lot_sequence_id
if seq:
# strict=True ensures we skip if next_by_id fails, though usually it returns None/False
new_lot_name = seq.next_by_id()
if new_lot_name:
line.lot_name = new_lot_name
return True