This question has been flagged
1 Reply
3721 Views

Hello, i'm using odoo11 with lot traceability activated.

I wrote a custom method so that the lot number of a received product is automatically valorized in the stock.picking model, as soon as the user validates the purchase order, something like this:

class CustomPicking(models.Model):
    _inherit = 'stock.picking'
    _name = 'stock.picking'
    
    @api.multi
    def button_validate(self):  
        for picking in self:  
            for line in picking.move_line_ids:
                #omitted code that calculates a new lot number
                line.lot_name = generated_lot_number
            return super(CustomPicking, self).button_validate()

When the user creates a new Vendor Bill from the purchase order, i'd like the lot number to be automatically valorized with the generated value that was set up in the line of the stock.picking model.

After a bit of research i found that I have to override the method _prepare_invoice_line_from_po_line

class CustomInvoice(models.Model):
    _inherit = 'account.invoice'
    _name = 'account.invoice'    

    @api.multi def _prepare_invoice_line_from_po_line(self, line): data = super(CustomInvoice,self)._prepare_invoice_line_from_po_line(line) #do something with data
        return data

The problem is that the "line" object in this method refers to the purchase_order_line model, and in that model my custom lot_id is still not valorized.

So i'd need to access the respective puchase_order_line instance from the stock_picking_line, but i cannot find a way to do so... (i'd have expected to find some relational field in one of the two models/tables, but unless i missed something i could not find it).

Do you have some suggestions about how could I achieve that?

Thanks!

Avatar
Discard
Best Answer

Hi,

have a look at the stock.py of the module 'purchase' https://github.com/odoo/odoo/blob/11.0/addons/purchase/models/stock.py

Here in stock.move you have 'purchase_line_id'.

Avatar
Discard
Author

Hi, thank you for the answer. I still needed to do some dirty tricks to get everything to work, but i managed to do what i wanted. Cheers