From a226723e5255fa9344244dab536c0d9b320758a7 Mon Sep 17 00:00:00 2001 From: William Henrotin Date: Fri, 30 Nov 2018 08:47:34 +0000 Subject: [PATCH] [FIX] mrp: avoid accessing empty data Once we log an exception via next activity in a production, we search moves that have been updated uphill to write the useful information about the change. The issue is by default, the key 'move_orig_id' is searched while some moves could be linked with 'created_purchase_line_id' key. This commit avoid mapping 'move_orig_id' on empty recordset and so avoid a traceback. opw:1911399 closes odoo/odoo#29087 --- addons/mrp/models/mrp_production.py | 10 +++++----- addons/stock/models/stock_picking.py | 15 +++++++-------- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/addons/mrp/models/mrp_production.py b/addons/mrp/models/mrp_production.py index 7682a2c03b1..5e3aac36594 100644 --- a/addons/mrp/models/mrp_production.py +++ b/addons/mrp/models/mrp_production.py @@ -762,14 +762,14 @@ class MrpProduction(models.Model): order_exceptions.update(order_exception) visited_objects += visited visited_objects = self.env[visited_objects[0]._name].concat(*visited_objects) - visited_objects |= visited_objects.mapped('move_orig_ids') - impacted_pickings = [] - if visited_objects._name == 'stock.move': - impacted_pickings = visited_objects.filtered(lambda m: m.state not in ('done', 'cancel')).mapped('picking_id') + impacted_object = [] + if visited_objects and visited_objects._name == 'stock.move': + visited_objects |= visited_objects.mapped('move_orig_ids') + impacted_object = visited_objects.filtered(lambda m: m.state not in ('done', 'cancel')).mapped('picking_id') values = { 'production_order': self, 'order_exceptions': order_exceptions, - 'impacted_pickings': impacted_pickings, + 'impacted_object': impacted_object, 'cancel': cancel } return self.env.ref('mrp.exception_on_mo').render(values=values) diff --git a/addons/stock/models/stock_picking.py b/addons/stock/models/stock_picking.py index fec28f96de1..a3b7f71aa81 100644 --- a/addons/stock/models/stock_picking.py +++ b/addons/stock/models/stock_picking.py @@ -4,6 +4,7 @@ from collections import namedtuple import json import time +from datetime import date from itertools import groupby from odoo import api, fields, models, _ @@ -919,14 +920,12 @@ class Picking(models.Model): """ for (parent, responsible), rendering_context in documents.items(): note = render_method(rendering_context) - - self.env['mail.activity'].create({ - 'activity_type_id': self.env.ref('mail.mail_activity_data_warning').id, - 'note': note, - 'user_id': responsible.id, - 'res_id': parent.id, - 'res_model_id': self.env['ir.model'].search([('model', '=', parent._name)], limit=1).id, - }) + parent.activity_schedule( + 'mail.mail_activity_data_warning', + date.today(), + note=note, + user_id=responsible.id + ) def _log_less_quantities_than_expected(self, moves): """ Log an activity on picking that follow moves. The note