diff --git a/addons/hr_payroll/i18n/hr_payroll.pot b/addons/hr_payroll/i18n/hr_payroll.pot index 948bab33a6d..3af947e0a5b 100644 --- a/addons/hr_payroll/i18n/hr_payroll.pot +++ b/addons/hr_payroll/i18n/hr_payroll.pot @@ -605,6 +605,18 @@ msgstr "" msgid "Error ! You cannot create a recursive Salary Structure." msgstr "" +#. module: hr_payroll +#: code:addons/hr_payroll/models/hr_salary_rule.py:91 +#, python-format +msgid "Error! You cannot create recursive hierarchy of Salary Rule Category." +msgstr "" + +#. module: hr_payroll +#: code:addons/hr_payroll/models/hr_salary_rule.py:176 +#, python-format +msgid "Error! You cannot create recursive hierarchy of Salary Rules." +msgstr "" + #. module: hr_payroll #: model:ir.model.fields,help:hr_payroll.field_hr_payslip_line__register_id #: model:ir.model.fields,help:hr_payroll.field_hr_salary_rule__register_id diff --git a/addons/hr_payroll/models/hr_salary_rule.py b/addons/hr_payroll/models/hr_salary_rule.py index 30eab19115e..f45b908e956 100644 --- a/addons/hr_payroll/models/hr_salary_rule.py +++ b/addons/hr_payroll/models/hr_salary_rule.py @@ -86,6 +86,11 @@ class HrSalaryRuleCategory(models.Model): company_id = fields.Many2one('res.company', string='Company', default=lambda self: self.env['res.company']._company_default_get()) + @api.constrains('parent_id') + def _check_parent_id(self): + if not self._check_recursion(): + raise ValidationError(_('Error! You cannot create recursive hierarchy of Salary Rule Category.')) + class HrSalaryRule(models.Model): _name = 'hr.salary.rule' @@ -166,6 +171,11 @@ class HrSalaryRule(models.Model): input_ids = fields.One2many('hr.rule.input', 'input_id', string='Inputs', copy=True) note = fields.Text(string='Description') + @api.constrains('parent_rule_id') + def _check_parent_rule_id(self): + if not self._check_recursion(parent='parent_rule_id'): + raise ValidationError(_('Error! You cannot create recursive hierarchy of Salary Rules.')) + @api.multi def _recursive_search_of_rules(self): """ diff --git a/addons/mail/static/src/less/composer.less b/addons/mail/static/src/less/composer.less index 1686444970d..acc820856af 100644 --- a/addons/mail/static/src/less/composer.less +++ b/addons/mail/static/src/less/composer.less @@ -152,7 +152,7 @@ &.o_chat_inline_composer { .o_composer_container { - .o-flex(1, 0, auto); + .o-flex(1, 1, auto); } .o_composer { padding: @o-mail-chatter-gap @o-mail-chatter-gap 0 @o-mail-chatter-gap; diff --git a/addons/product/report/product_pricelist_templates.xml b/addons/product/report/product_pricelist_templates.xml index 43a127cdc6a..25d5f040330 100644 --- a/addons/product/report/product_pricelist_templates.xml +++ b/addons/product/report/product_pricelist_templates.xml @@ -45,6 +45,11 @@ [] + + - + + + ', 0), diff --git a/addons/stock/tests/common.py b/addons/stock/tests/common.py index 8c26b60e6f3..f0a1bd2d795 100644 --- a/addons/stock/tests/common.py +++ b/addons/stock/tests/common.py @@ -48,10 +48,6 @@ class TestStockCommon(common.TransactionCase): self.uom_kg = self.env['uom.uom'].search([('category_id', '=', self.categ_kgm), ('uom_type', '=', 'reference')], limit=1) self.uom_kg.write({ 'name': 'Test-KG', - 'category_id': self.categ_kgm, - 'factor_inv': 1, - 'factor': 1, - 'uom_type': 'reference', 'rounding': 0.000001}) self.uom_tone = self.UomObj.create({ 'name': 'Test-Tone', @@ -75,9 +71,6 @@ class TestStockCommon(common.TransactionCase): self.uom_unit = self.env['uom.uom'].search([('category_id', '=', self.categ_unit), ('uom_type', '=', 'reference')], limit=1) self.uom_unit.write({ 'name': 'Test-Unit', - 'category_id': self.categ_unit, - 'factor': 1, - 'uom_type': 'reference', 'rounding': 1.0}) self.uom_dozen = self.UomObj.create({ 'name': 'Test-DozenA', diff --git a/addons/stock/views/stock_location_views.xml b/addons/stock/views/stock_location_views.xml index 810fc4ba078..2d35bc13d65 100644 --- a/addons/stock/views/stock_location_views.xml +++ b/addons/stock/views/stock_location_views.xml @@ -283,6 +283,7 @@ stock.location.route + diff --git a/addons/web/models/ir_qweb.py b/addons/web/models/ir_qweb.py index 63c73c7915c..29426b9d8a8 100644 --- a/addons/web/models/ir_qweb.py +++ b/addons/web/models/ir_qweb.py @@ -66,7 +66,7 @@ class Image(models.AbstractModel): atts["data-zoom"] = src_zoom and u'1' or None atts["data-zoom-image"] = src_zoom - atts = self.env['ir.qweb']._post_processing_att('img', atts, options) + atts = self.env['ir.qweb']._post_processing_att('img', atts, options.get('template_options')) img = ['