diff --git a/addons/account/tests/test_account_invoice_rounding.py b/addons/account/tests/test_account_invoice_rounding.py index 4838eb3dc44..dcb3752f6bc 100644 --- a/addons/account/tests/test_account_invoice_rounding.py +++ b/addons/account/tests/test_account_invoice_rounding.py @@ -3,7 +3,6 @@ from odoo.addons.account.tests.account_test_classes import AccountingTestCase from odoo.exceptions import ValidationError from odoo.tests import tagged -from odoo.tools import mute_logger import time @@ -60,8 +59,7 @@ class TestAccountInvoiceRounding(AccountingTestCase): # to avoid a ValidationError from _check_cash_rounding because the onchange # are not well triggered in the tests. try: - with mute_logger('odoo.models'): - invoice_id.cash_rounding_id = cash_rounding_id + invoice_id.cash_rounding_id = cash_rounding_id except ValidationError: pass diff --git a/addons/account/views/account_payment_view.xml b/addons/account/views/account_payment_view.xml index 87a012a887b..3387473a9e4 100644 --- a/addons/account/views/account_payment_view.xml +++ b/addons/account/views/account_payment_view.xml @@ -71,7 +71,7 @@
- +
diff --git a/addons/account/views/account_view.xml b/addons/account/views/account_view.xml index 7e78b448a85..ff9fb522b2b 100644 --- a/addons/account/views/account_view.xml +++ b/addons/account/views/account_view.xml @@ -1541,7 +1541,7 @@
- +
diff --git a/addons/gamification/models/badge.py b/addons/gamification/models/badge.py index 6686b29fee5..9997b443d33 100644 --- a/addons/gamification/models/badge.py +++ b/addons/gamification/models/badge.py @@ -231,7 +231,7 @@ class GamificationBadge(models.Model): elif self.rule_auth == 'users' and self.env.user not in self.rule_auth_user_ids: return self.USER_NOT_VIP elif self.rule_auth == 'having': - all_user_badges = self.env['gamification.badge.user'].search([('user_id', '=', self.env.uid)]) + all_user_badges = self.env['gamification.badge.user'].search([('user_id', '=', self.env.uid)]).mapped('badge_id') if self.rule_auth_badge_ids - all_user_badges: return self.BADGE_REQUIRED diff --git a/addons/hr_holidays/report/hr_leave_reports.xml b/addons/hr_holidays/report/hr_leave_reports.xml index d4471fa8a72..64cffa35514 100644 --- a/addons/hr_holidays/report/hr_leave_reports.xml +++ b/addons/hr_holidays/report/hr_leave_reports.xml @@ -77,7 +77,7 @@
- +
diff --git a/addons/lunch/views/lunch_views.xml b/addons/lunch/views/lunch_views.xml index 1c9a718095d..ff7d768beaa 100644 --- a/addons/lunch/views/lunch_views.xml +++ b/addons/lunch/views/lunch_views.xml @@ -383,7 +383,7 @@
- +
diff --git a/addons/mass_mailing/views/unsubscribe_templates.xml b/addons/mass_mailing/views/unsubscribe_templates.xml index 5813edf1860..639663ca266 100644 --- a/addons/mass_mailing/views/unsubscribe_templates.xml +++ b/addons/mass_mailing/views/unsubscribe_templates.xml @@ -46,7 +46,7 @@
- + diff --git a/addons/mrp/views/mrp_unbuild_views.xml b/addons/mrp/views/mrp_unbuild_views.xml index 00e96e8cbad..9a478679c24 100644 --- a/addons/mrp/views/mrp_unbuild_views.xml +++ b/addons/mrp/views/mrp_unbuild_views.xml @@ -83,7 +83,7 @@
- +
diff --git a/addons/payment_authorize/models/payment.py b/addons/payment_authorize/models/payment.py index c1380db1fd6..5a6ed0bf8e1 100644 --- a/addons/payment_authorize/models/payment.py +++ b/addons/payment_authorize/models/payment.py @@ -6,6 +6,7 @@ from datetime import datetime import hashlib import hmac import logging +import string import time from odoo import _, api, fields, models @@ -54,8 +55,16 @@ class PaymentAcquirerAuthorize(models.Model): values['x_fp_sequence'], values['x_fp_timestamp'], values['x_amount'], - values['x_currency_code']]) - return hmac.new(values['x_trans_key'].encode('utf-8'), data.encode('utf-8'), hashlib.md5).hexdigest() + values['x_currency_code']]).encode('utf-8') + + # [BACKWARD COMPATIBILITY] Check that the merchant did update his transaction + # key to signature key (end of MD5 support from Authorize.net) + # The signature key is now '128-character hexadecimal format', while the + # transaction key was only 16-character. + if len(values['x_trans_key']) == 128: + return hmac.new(values['x_trans_key'].decode("hex").encode('utf-8'), data, hashlib.sha512).hexdigest().upper() + else: + return hmac.new(values['x_trans_key'].encode('utf-8'), data, hashlib.md5).hexdigest() @api.multi def authorize_form_generate_values(self, values): @@ -172,7 +181,7 @@ class TxAuthorize(models.Model): def _authorize_form_get_tx_from_data(self, data): """ Given a data dict coming from authorize, verify it and find the related transaction record. """ - reference, trans_id, fingerprint = data.get('x_invoice_num'), data.get('x_trans_id'), data.get('x_MD5_Hash') + reference, trans_id, fingerprint = data.get('x_invoice_num'), data.get('x_trans_id'), data.get('x_SHA2_Hash') or data.get('x_MD5_Hash') if not reference or not trans_id or not fingerprint: error_msg = _('Authorize: received data with missing reference (%s) or trans_id (%s) or fingerprint (%s)') % (reference, trans_id, fingerprint) _logger.info(error_msg) diff --git a/addons/payment_authorize/tests/test_authorize.py b/addons/payment_authorize/tests/test_authorize.py index a45275b07d8..7e12b572419 100644 --- a/addons/payment_authorize/tests/test_authorize.py +++ b/addons/payment_authorize/tests/test_authorize.py @@ -1,7 +1,5 @@ # -*- coding: utf-8 -*- -import hashlib -import hmac import time from werkzeug import urls from lxml import objectify @@ -29,15 +27,6 @@ class AuthorizeCommon(PaymentAcquirerCommon): @odoo.tests.tagged('post_install', '-at_install', '-standard', 'external') class AuthorizeForm(AuthorizeCommon): - def _authorize_generate_hashing(self, values): - data = '^'.join([ - values['x_login'], - values['x_fp_sequence'], - values['x_fp_timestamp'], - values['x_amount'], - ]) + '^' - return hmac.new(values['x_trans_key'].encode('utf-8'), data.encode('utf-8'), hashlib.md5).hexdigest() - def test_10_Authorize_form_render(self): self.assertEqual(self.authorize.environment, 'test', 'test without test environment') @@ -82,7 +71,7 @@ class AuthorizeForm(AuthorizeCommon): 'x_ship_to_state': None, } - form_values['x_fp_hash'] = self._authorize_generate_hashing(form_values) + form_values['x_fp_hash'] = self.env['payment.acquirer']._authorize_generate_hashing(form_values) # render the button res = self.authorize.render('SO004', 56.16, self.currency_usd.id, values=self.buyer_values) # check form result @@ -109,7 +98,9 @@ class AuthorizeForm(AuthorizeCommon): # typical data posted by authorize after client has successfully paid authorize_post_data = { 'return_url': u'/shop/payment/validate', + # x_MD5_Hash will be empty starting the 28th March 2019 'x_MD5_Hash': u'7934485E1C105940BE854208D10FAB4F', + 'x_SHA2_Hash': u'7D3AC844BE8CA3F649AB885A90D22CFE35B850338EC91D1A5ADD819A85FF948A3D777334A18CDE36821DC8F2B42A6E1950C1FF96B52B60F23201483A656195FB', 'x_account_number': u'XXXX0027', 'x_address': u'Huge Street 2/543', 'x_amount': u'320.00', diff --git a/addons/point_of_sale/static/src/js/screens.js b/addons/point_of_sale/static/src/js/screens.js index 19a48e76aaf..cd149543475 100644 --- a/addons/point_of_sale/static/src/js/screens.js +++ b/addons/point_of_sale/static/src/js/screens.js @@ -1318,7 +1318,7 @@ var ClientListScreenWidget = ScreenWidget.extend({ // what happens when we've just pushed modifications for a partner of id partner_id saved_client_details: function(partner_id){ var self = this; - this.reload_partners().then(function(){ + return this.reload_partners().then(function(){ var partner = self.pos.db.get_partner_by_id(partner_id); if (partner) { self.new_client = partner; diff --git a/addons/point_of_sale/views/pos_order_view.xml b/addons/point_of_sale/views/pos_order_view.xml index 95d046dfed4..93198eb6d24 100644 --- a/addons/point_of_sale/views/pos_order_view.xml +++ b/addons/point_of_sale/views/pos_order_view.xml @@ -142,7 +142,7 @@
-
diff --git a/addons/point_of_sale/views/pos_session_view.xml b/addons/point_of_sale/views/pos_session_view.xml index 04766df77ca..677cea3350c 100644 --- a/addons/point_of_sale/views/pos_session_view.xml +++ b/addons/point_of_sale/views/pos_session_view.xml @@ -161,7 +161,7 @@
-
diff --git a/addons/purchase_requisition/views/purchase_requisition_views.xml b/addons/purchase_requisition/views/purchase_requisition_views.xml index 93030beeb2c..3fee77c1231 100644 --- a/addons/purchase_requisition/views/purchase_requisition_views.xml +++ b/addons/purchase_requisition/views/purchase_requisition_views.xml @@ -30,7 +30,7 @@
- +
@@ -252,7 +252,7 @@
- +
diff --git a/addons/repair/views/repair_views.xml b/addons/repair/views/repair_views.xml index ca2f0fd5aec..70d0d02a94b 100644 --- a/addons/repair/views/repair_views.xml +++ b/addons/repair/views/repair_views.xml @@ -206,7 +206,7 @@
- +
diff --git a/addons/stock/views/stock_inventory_views.xml b/addons/stock/views/stock_inventory_views.xml index 0aef58e898c..eb1fd43c0d5 100644 --- a/addons/stock/views/stock_inventory_views.xml +++ b/addons/stock/views/stock_inventory_views.xml @@ -97,7 +97,7 @@
- +
diff --git a/addons/stock/views/stock_move_views.xml b/addons/stock/views/stock_move_views.xml index d9811745801..a89b280ddbc 100644 --- a/addons/stock/views/stock_move_views.xml +++ b/addons/stock/views/stock_move_views.xml @@ -447,7 +447,7 @@
-
@@ -511,7 +511,7 @@
-
diff --git a/addons/stock_picking_batch/views/stock_picking_batch_views.xml b/addons/stock_picking_batch/views/stock_picking_batch_views.xml index b3f42b7c726..22df3fc2e18 100644 --- a/addons/stock_picking_batch/views/stock_picking_batch_views.xml +++ b/addons/stock_picking_batch/views/stock_picking_batch_views.xml @@ -69,7 +69,7 @@
- +
diff --git a/addons/survey/views/survey_views.xml b/addons/survey/views/survey_views.xml index 1ffc25eb948..dd2c8f2a891 100644 --- a/addons/survey/views/survey_views.xml +++ b/addons/survey/views/survey_views.xml @@ -109,7 +109,7 @@
- +
diff --git a/addons/web/static/src/js/fields/field_registry.js b/addons/web/static/src/js/fields/field_registry.js index c94c315cfa6..4406231868f 100644 --- a/addons/web/static/src/js/fields/field_registry.js +++ b/addons/web/static/src/js/fields/field_registry.js @@ -44,8 +44,9 @@ registry .add('priority', basic_fields.PriorityWidget) .add('attachment_image', basic_fields.AttachmentImage) .add('label_selection', basic_fields.LabelSelection) + .add('kanban_label_selection', basic_fields.LabelSelection) // deprecated, use label_selection .add('state_selection', basic_fields.StateSelectionWidget) - .add('kanban_state_selection', basic_fields.StateSelectionWidget) + .add('kanban_state_selection', basic_fields.StateSelectionWidget) // deprecated, use state_selection .add('boolean_favorite', basic_fields.FavoriteWidget) .add('boolean_button', basic_fields.FieldBooleanButton) .add('boolean_toggle', basic_fields.BooleanToggle) diff --git a/addons/website_mass_mailing/i18n/website_mass_mailing.pot b/addons/website_mass_mailing/i18n/website_mass_mailing.pot index 6e2e498360d..604c4965b07 100644 --- a/addons/website_mass_mailing/i18n/website_mass_mailing.pot +++ b/addons/website_mass_mailing/i18n/website_mass_mailing.pot @@ -90,6 +90,11 @@ msgstr "" msgid "Mailing List" msgstr "" +#. module: website_mass_mailing +#: model:ir.ui.view,arch_db:website_mass_mailing.unsubscribe +msgid "Update my subscriptions" +msgstr "" + #. module: website_mass_mailing #. openerp-web #: code:addons/website_mass_mailing/static/src/js/website_mass_mailing.editor.js:21 @@ -160,4 +165,3 @@ msgstr "" #: model_terms:ir.ui.view,arch_db:website_mass_mailing.s_newsletter_subscribe_popup msgid "your email..." msgstr "" - diff --git a/addons/website_sale/models/website.py b/addons/website_sale/models/website.py index 50a8ab084ff..5b1538d4b35 100644 --- a/addons/website_sale/models/website.py +++ b/addons/website_sale/models/website.py @@ -236,7 +236,7 @@ class Website(models.Model): country_code = request.session['geoip'].get('country_code') if country_code: country_id = request.env['res.country'].search([('code', '=', country_code)], limit=1).id - fp_id = request.env['account.fiscal.position'].sudo()._get_fpos_by_region(country_id) + fp_id = request.env['account.fiscal.position'].sudo().with_context(force_company=request.website.company_id.id)._get_fpos_by_region(country_id) sale_order.fiscal_position_id = fp_id else: # if no geolocation, use the public user fp diff --git a/odoo/addons/base/tests/test_views.py b/odoo/addons/base/tests/test_views.py index 33ac7035488..7b8deb8ea33 100644 --- a/odoo/addons/base/tests/test_views.py +++ b/odoo/addons/base/tests/test_views.py @@ -1107,7 +1107,7 @@ class TestViews(ViewCase): # implemeted elsewhere... modifiers_tests() - @mute_logger('odoo.addons.base.models.ir_ui_view', 'odoo.models') + @mute_logger('odoo.addons.base.models.ir_ui_view') def test_invalid_field(self): with self.assertRaises(ValidationError): self.View.create({ @@ -1121,7 +1121,7 @@ class TestViews(ViewCase): """, }) - @mute_logger('odoo.addons.base.models.ir_ui_view', 'odoo.models') + @mute_logger('odoo.addons.base.models.ir_ui_view') def test_invalid_subfield(self): with self.assertRaises(ValidationError): self.View.create({ @@ -1140,7 +1140,7 @@ class TestViews(ViewCase): """, }) - @mute_logger('odoo.addons.base.models.ir_ui_view', 'odoo.models') + @mute_logger('odoo.addons.base.models.ir_ui_view') def test_context_in_view(self): arch = """
@@ -1160,7 +1160,7 @@ class TestViews(ViewCase): 'arch': arch % '', }) - @mute_logger('odoo.addons.base.models.ir_ui_view', 'odoo.models') + @mute_logger('odoo.addons.base.models.ir_ui_view') def test_context_in_subview(self): arch = """ @@ -1192,7 +1192,7 @@ class TestViews(ViewCase): 'arch': arch % ('', ''), }) - @mute_logger('odoo.addons.base.models.ir_ui_view', 'odoo.models') + @mute_logger('odoo.addons.base.models.ir_ui_view') def test_context_in_subview_with_parent(self): arch = """ @@ -1223,7 +1223,7 @@ class TestViews(ViewCase): 'arch': arch % ('', ''), }) - @mute_logger('odoo.addons.base.models.ir_ui_view', 'odoo.models') + @mute_logger('odoo.addons.base.models.ir_ui_view') def test_context_in_subsubview_with_parent(self): arch = """ @@ -1265,7 +1265,7 @@ class TestViews(ViewCase): 'arch': arch % ('', '', ''), }) - @mute_logger('odoo.addons.base.models.ir_ui_view', 'odoo.models') + @mute_logger('odoo.addons.base.models.ir_ui_view') def test_domain_in_view(self): arch = """ @@ -1285,7 +1285,7 @@ class TestViews(ViewCase): 'arch': arch % '', }) - @mute_logger('odoo.addons.base.models.ir_ui_view', 'odoo.models') + @mute_logger('odoo.addons.base.models.ir_ui_view') def test_domain_in_subview(self): arch = """ @@ -1316,7 +1316,7 @@ class TestViews(ViewCase): 'arch': arch % ('', ''), }) - @mute_logger('odoo.addons.base.models.ir_ui_view', 'odoo.models') + @mute_logger('odoo.addons.base.models.ir_ui_view') def test_domain_in_subview_with_parent(self): arch = """ @@ -1347,7 +1347,7 @@ class TestViews(ViewCase): 'arch': arch % ('', ''), }) - @mute_logger('odoo.addons.base.models.ir_ui_view', 'odoo.models') + @mute_logger('odoo.addons.base.models.ir_ui_view') def test_domain_on_field_in_view(self): field = self.env['ir.ui.view']._fields['inherit_id'] self.patch(field, 'domain', "[('model', '=', model)]") @@ -1370,7 +1370,7 @@ class TestViews(ViewCase): 'arch': arch % '', }) - @mute_logger('odoo.addons.base.ir.ir_ui_view', 'odoo.models') + @mute_logger('odoo.addons.base.ir.ir_ui_view') def test_domain_on_field_in_subview(self): field = self.env['ir.ui.view']._fields['inherit_id'] self.patch(field, 'domain', "[('model', '=', model)]") @@ -1404,7 +1404,7 @@ class TestViews(ViewCase): 'arch': arch % ('', ''), }) - @mute_logger('odoo.addons.base.ir.ir_ui_view', 'odoo.models') + @mute_logger('odoo.addons.base.ir.ir_ui_view') def test_domain_on_field_in_subview_with_parent(self): field = self.env['ir.ui.view']._fields['inherit_id'] self.patch(field, 'domain', "[('model', '=', parent.model)]") @@ -1438,7 +1438,7 @@ class TestViews(ViewCase): 'arch': arch % ('', ''), }) - @mute_logger('odoo.addons.base.ir.ir_ui_view', 'odoo.models') + @mute_logger('odoo.addons.base.ir.ir_ui_view') def test_domain_on_field_in_noneditable_subview(self): field = self.env['ir.ui.view']._fields['inherit_id'] self.patch(field, 'domain', "[('model', '=', model)]") @@ -1466,7 +1466,7 @@ class TestViews(ViewCase): 'arch': arch % ' editable="bottom"', }) - @mute_logger('odoo.addons.base.ir.ir_ui_view', 'odoo.models') + @mute_logger('odoo.addons.base.ir.ir_ui_view') def test_domain_on_readonly_field_in_view(self): field = self.env['ir.ui.view']._fields['inherit_id'] self.patch(field, 'domain', "[('model', '=', model)]") @@ -1496,7 +1496,7 @@ class TestViews(ViewCase): 'arch': arch, }) - @mute_logger('odoo.addons.base.ir.ir_ui_view', 'odoo.models') + @mute_logger('odoo.addons.base.ir.ir_ui_view') def test_domain_on_readonly_field_in_subview(self): field = self.env['ir.ui.view']._fields['inherit_id'] self.patch(field, 'domain', "[('model', '=', model)]") @@ -1524,7 +1524,7 @@ class TestViews(ViewCase): 'arch': arch % '', }) - @mute_logger('odoo.addons.base.ir.ir_ui_view', 'odoo.models') + @mute_logger('odoo.addons.base.ir.ir_ui_view') def test_attrs_field(self): arch = """ @@ -1545,7 +1545,7 @@ class TestViews(ViewCase): 'arch': arch % '', }) - @mute_logger('odoo.addons.base.models.ir_ui_view', 'odoo.models') + @mute_logger('odoo.addons.base.models.ir_ui_view') def test_attrs_subfield(self): arch = """ @@ -1577,7 +1577,7 @@ class TestViews(ViewCase): 'arch': arch % ('', ''), }) - @mute_logger('odoo.addons.base.models.ir_ui_view', 'odoo.models') + @mute_logger('odoo.addons.base.models.ir_ui_view') def test_attrs_subfield_with_parent(self): arch = """ diff --git a/odoo/models.py b/odoo/models.py index 85ac3807bd7..6423e18f314 100644 --- a/odoo/models.py +++ b/odoo/models.py @@ -1109,7 +1109,6 @@ class BaseModel(MetaModel('DummyModel', (object,), {'_register': False})): except ValidationError as e: raise except Exception as e: - _logger.exception('Exception while validating constraint') raise ValidationError("%s\n\n%s" % (_("Error while validating constraint"), tools.ustr(e))) @api.model