
from openerp import api, models, exceptions
from openerp.tools.safe_eval import safe_eval


class StockProductionLot(models.Model):
    _inherit = "stock.production.lot"

    @api.multi
    def action_traceability(self):
        """Replace the action on stock moves with an action on the report"""
        action = super(StockProductionLot, self).action_traceability()
        if action['res_model'] != 'stock.move':
            raise exceptions.ValidationError(
                "An incompatible module returned an action for the wrong "
                "model.")
        moves = self.env['stock.move'].search(safe_eval(action['domain']))
        return moves.mapped('quant_ids').action_view_quant_history()


from openerp import api, models, exceptions
from openerp.tools.safe_eval import safe_eval


class StockProductionLot(models.Model):
    _inherit = "stock.production.lot"

    @api.multi
    def action_traceability(self):
        """Replace the action on stock moves with an action on the report"""
        action = super(StockProductionLot, self).action_traceability()
        if action['res_model'] != 'stock.move':
            raise exceptions.ValidationError(
                "An incompatible module returned an action for the wrong "
                "model.")
        moves = self.env['stock.move'].search(safe_eval(action['domain']))
        return moves.mapped('quant_ids').filtered(
            lambda x: x.lot_id in self).action_view_quant_history()

Fix a missing filter in lot traceability
Fix a missing filter in lot traceability

When we search for lot traceability we first search for the corresponding stock moves.
But whenever these moves contain extra quants, we need to filter the ones of the wrong lots.

  
  from openerp import api, models, exceptions
  from openerp.tools.safe_eval import safe_eval
  
  
  class StockProductionLot(models.Model):
      _inherit = "stock.production.lot"
  
      @api.multi
      def action_traceability(self):
          """Replace the action on stock moves with an action on the report"""
          action = super(StockProductionLot, self).action_traceability()
          if action['res_model'] != 'stock.move':
              raise exceptions.ValidationError(
                  "An incompatible module returned an action for the wrong "
                  "model.")
          moves = self.env['stock.move'].search(safe_eval(action['domain']))
-         return moves.mapped('quant_ids').action_view_quant_history()
+         return moves.mapped('quant_ids').filtered(
+             lambda x: x.lot_id in self).action_view_quant_history()
  
Fix a missing filter in lot traceability
## Code Before:

from openerp import api, models, exceptions
from openerp.tools.safe_eval import safe_eval


class StockProductionLot(models.Model):
    _inherit = "stock.production.lot"

    @api.multi
    def action_traceability(self):
        """Replace the action on stock moves with an action on the report"""
        action = super(StockProductionLot, self).action_traceability()
        if action['res_model'] != 'stock.move':
            raise exceptions.ValidationError(
                "An incompatible module returned an action for the wrong "
                "model.")
        moves = self.env['stock.move'].search(safe_eval(action['domain']))
        return moves.mapped('quant_ids').action_view_quant_history()

## Instruction:
Fix a missing filter in lot traceability
## Code After:

from openerp import api, models, exceptions
from openerp.tools.safe_eval import safe_eval


class StockProductionLot(models.Model):
    _inherit = "stock.production.lot"

    @api.multi
    def action_traceability(self):
        """Replace the action on stock moves with an action on the report"""
        action = super(StockProductionLot, self).action_traceability()
        if action['res_model'] != 'stock.move':
            raise exceptions.ValidationError(
                "An incompatible module returned an action for the wrong "
                "model.")
        moves = self.env['stock.move'].search(safe_eval(action['domain']))
        return moves.mapped('quant_ids').filtered(
            lambda x: x.lot_id in self).action_view_quant_history()
