diff options
| author | Christophe Simonis <chs@odoo.com> | 2019-07-05 11:13:53 +0200 |
|---|---|---|
| committer | Christophe Simonis <chs@odoo.com> | 2019-07-05 11:13:53 +0200 |
| commit | 039e6bae9916aaa9d82bc558817a7ed7d0ea3c68 (patch) | |
| tree | fa0f0e71de1c077db86593704eb83fc1b2115e87 /odoo/addons/base/models | |
| parent | 50d21df1561f660c184329cfc4cb567ea5d79ace (diff) | |
| parent | 9c742d0c656412beba7201085abd4cecc81f5d27 (diff) | |
[MERGE] forward port branch 12.0 up to 9c742d0c656
Diffstat (limited to 'odoo/addons/base/models')
| -rw-r--r-- | odoo/addons/base/models/ir_actions_report.py | 31 | ||||
| -rw-r--r-- | odoo/addons/base/models/ir_attachment.py | 10 | ||||
| -rw-r--r-- | odoo/addons/base/models/ir_mail_server.py | 5 | ||||
| -rw-r--r-- | odoo/addons/base/models/ir_model.py | 9 |
4 files changed, 52 insertions, 3 deletions
diff --git a/odoo/addons/base/models/ir_actions_report.py b/odoo/addons/base/models/ir_actions_report.py index ea1cbf63dc6..4715a83dd9d 100644 --- a/odoo/addons/base/models/ir_actions_report.py +++ b/odoo/addons/base/models/ir_actions_report.py @@ -7,6 +7,7 @@ from odoo.tools.misc import find_in_path from odoo.tools import config from odoo.sql_db import TestCursor from odoo.http import request +from odoo.osv.expression import NEGATIVE_TERM_OPERATORS, FALSE_DOMAIN import time import base64 @@ -24,6 +25,7 @@ from distutils.version import LooseVersion from reportlab.graphics.barcode import createBarcodeDrawing from PyPDF2 import PdfFileWriter, PdfFileReader from collections import OrderedDict +from collections.abc import Iterable _logger = logging.getLogger(__name__) @@ -85,7 +87,8 @@ class IrActionsReport(models.Model): name = fields.Char(translate=True) type = fields.Char(default='ir.actions.report') binding_type = fields.Selection(default='report') - model = fields.Char(required=True) + model = fields.Char(required=True, string='Model Name') + model_id = fields.Many2one('ir.model', string='Model', compute='_compute_model_id', search='_search_model_id') report_type = fields.Selection([ ('qweb-html', 'HTML'), @@ -111,6 +114,32 @@ class IrActionsReport(models.Model): attachment = fields.Char(string='Save as Attachment Prefix', help='This is the filename of the attachment used to store the printing result. Keep empty to not save the printed reports. You can use a python expression with the object and time variables.') + @api.depends('model') + def _compute_model_id(self): + for action in self: + action.model_id = self.env['ir.model']._get(action.model).id + + def _search_model_id(self, operator, value): + ir_model_ids = None + if isinstance(value, str): + names = self.env['ir.model'].name_search(value, operator=operator) + ir_model_ids = [n[0] for n in names] + + elif isinstance(value, Iterable): + ir_model_ids = value + + elif isinstance(value, int) and not isinstance(value, bool): + ir_model_ids = [value] + + if ir_model_ids: + operator = 'not in' if operator in NEGATIVE_TERM_OPERATORS else 'in' + ir_model = self.env['ir.model'].browse(ir_model_ids) + return [('model', operator, ir_model.mapped('model'))] + elif isinstance(value, bool) or value is None: + return [('model', operator, value)] + else: + return FALSE_DOMAIN + @api.multi def associated_view(self): """Used in the ir.actions.report form view in order to search naively after the view(s) diff --git a/odoo/addons/base/models/ir_attachment.py b/odoo/addons/base/models/ir_attachment.py index d7672d815ed..5c1ab2079f6 100644 --- a/odoo/addons/base/models/ir_attachment.py +++ b/odoo/addons/base/models/ir_attachment.py @@ -428,6 +428,16 @@ class IrAttachment(models.Model): # sort result according to the original sort ordering result = [id for id in orig_ids if id in ids] + + # If the original search reached the limit, it is important the + # filtered record set does so too. When a JS view recieve a + # record set whose length is bellow the limit, it thinks it + # reached the last page. + if len(orig_ids) == limit and len(result) < len(orig_ids): + result.extend(self._search(args, offset=offset + len(orig_ids), + limit=limit, order=order, count=count, + access_rights_uid=access_rights_uid)[:limit - len(result)]) + return len(result) if count else list(result) @api.multi diff --git a/odoo/addons/base/models/ir_mail_server.py b/odoo/addons/base/models/ir_mail_server.py index 2422b9cf4a9..9ab49f9e5c5 100644 --- a/odoo/addons/base/models/ir_mail_server.py +++ b/odoo/addons/base/models/ir_mail_server.py @@ -279,6 +279,11 @@ class IrMailServer(models.Model): smtp_user = pycompat.to_text(ustr(smtp_user)) smtp_password = pycompat.to_text(ustr(smtp_password)) connection.login(smtp_user, smtp_password) + + # Some methods of SMTP don't check whether EHLO/HELO was sent. + # Anyway, as it may have been sent by login(), all subsequent usages should consider this command as sent. + connection.ehlo_or_helo_if_needed() + return connection def build_email(self, email_from, email_to, subject, body, email_cc=None, email_bcc=None, reply_to=False, diff --git a/odoo/addons/base/models/ir_model.py b/odoo/addons/base/models/ir_model.py index e2d0d87f637..1b6c2124622 100644 --- a/odoo/addons/base/models/ir_model.py +++ b/odoo/addons/base/models/ir_model.py @@ -855,8 +855,13 @@ class IrModelFields(models.Model): keys = [key for key in new_vals if old_vals[key] != new_vals[key]] self.pool.post_init(record.modified, keys) old_vals.update(new_vals) - if module and not field.manual and (module == model._original_module or module in field._modules): - to_xmlids.append(name) + if module and (module == model._original_module or module in field._modules): + # remove this and only keep the else clause if version >= saas-12.4 + if field.manual: + self.pool.loaded_xmlids.add( + '%s.field_%s__%s' % (module, model._name.replace('.', '_'), name)) + else: + to_xmlids.append(name) if to_insert: # insert missing fields |
