35 lines
1.4 KiB
Python
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
|