diff --git a/addons/hr_payroll/i18n/hr_payroll.pot b/addons/hr_payroll/i18n/hr_payroll.pot index 5ced0b2a8ae..88f2bd4c327 100644 --- a/addons/hr_payroll/i18n/hr_payroll.pot +++ b/addons/hr_payroll/i18n/hr_payroll.pot @@ -595,6 +595,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 f8a342a354b..acea3c86543 100644 --- a/addons/hr_payroll/models/hr_salary_rule.py +++ b/addons/hr_payroll/models/hr_salary_rule.py @@ -85,6 +85,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' @@ -165,6 +170,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 9213fb6c416..a22a626c584 100644 --- a/addons/mail/static/src/less/composer.less +++ b/addons/mail/static/src/less/composer.less @@ -136,7 +136,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 6a695af9363..09f55bb2ac3 100644 --- a/addons/stock/tests/common.py +++ b/addons/stock/tests/common.py @@ -44,9 +44,6 @@ class TestStockCommon(common.TransactionCase): self.uom_kg = self.UomObj.create({ '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', @@ -70,8 +67,6 @@ class TestStockCommon(common.TransactionCase): self.uom_unit = self.UomObj.create({ '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 529c3906120..9ee3716ccdf 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 0a5e0deb4e9..972ae4d813d 100644 --- a/addons/web/models/ir_qweb.py +++ b/addons/web/models/ir_qweb.py @@ -65,7 +65,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 = ['