summaryrefslogtreecommitdiff
path: root/odoo/addons/base/models
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2019-07-05 11:13:53 +0200
committerChristophe Simonis <chs@odoo.com>2019-07-05 11:13:53 +0200
commit039e6bae9916aaa9d82bc558817a7ed7d0ea3c68 (patch)
treefa0f0e71de1c077db86593704eb83fc1b2115e87 /odoo/addons/base/models
parent50d21df1561f660c184329cfc4cb567ea5d79ace (diff)
parent9c742d0c656412beba7201085abd4cecc81f5d27 (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.py31
-rw-r--r--odoo/addons/base/models/ir_attachment.py10
-rw-r--r--odoo/addons/base/models/ir_mail_server.py5
-rw-r--r--odoo/addons/base/models/ir_model.py9
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