diff --git a/addons/calendar/i18n/calendar.pot b/addons/calendar/i18n/calendar.pot index 2ed94168f2ad56caecf6e221dafa42de88ef064a..ab1483026ae277857e16d6d1c5869093d547e18f 100644 --- a/addons/calendar/i18n/calendar.pot +++ b/addons/calendar/i18n/calendar.pot @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server saas~11.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-03-22 14:11+0000\n" -"PO-Revision-Date: 2018-03-22 14:11+0000\n" +"POT-Creation-Date: 2018-06-06 08:01+0000\n" +"PO-Revision-Date: 2018-06-06 08:01+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -865,6 +865,13 @@ msgstr "" msgid "Meeting" msgstr "" +#. module: calendar +#: code:addons/calendar/models/calendar.py:933 +#: code:addons/calendar/models/calendar.py:937 +#, python-format +msgid "Meeting '%s' starts '%s' and ends '%s'" +msgstr "" + #. module: calendar #: model:ir.ui.view,arch_db:calendar.view_calendar_event_form msgid "Meeting Details" diff --git a/addons/calendar/models/calendar.py b/addons/calendar/models/calendar.py index fa890e274954d11a4c80cfba70de6ffc6f169caf..a06f1b7f1db0e5f228743cca5baf84554425bd8d 100644 --- a/addons/calendar/models/calendar.py +++ b/addons/calendar/models/calendar.py @@ -929,9 +929,13 @@ class Meeting(models.Model): def _check_closing_date(self): for meeting in self: if meeting.start_datetime and meeting.stop_datetime and meeting.stop_datetime < meeting.start_datetime: - raise ValidationError(_('Ending datetime cannot be set before starting datetime.')) + raise ValidationError(_('Ending datetime cannot be set before starting datetime.') + "\n" + + _("Meeting '%s' starts '%s' and ends '%s'") % (meeting.name, meeting.start_datetime, meeting.stop_datetime) + ) if meeting.start_date and meeting.stop_date and meeting.stop_date < meeting.start_date: - raise ValidationError(_('Ending date cannot be set before starting date.')) + raise ValidationError(_('Ending date cannot be set before starting date.') + "\n" + + _("Meeting '%s' starts '%s' and ends '%s'") % (meeting.name, meeting.start_date, meeting.stop_date) + ) @api.onchange('start_datetime', 'duration') def _onchange_duration(self): diff --git a/addons/event/views/res_partner_views.xml b/addons/event/views/res_partner_views.xml index 8fd4b774c5ee928b8c880d3f6dddc1729dde2388..59d096efcd1528d7834b32574744e4fa1d136677 100644 --- a/addons/event/views/res_partner_views.xml +++ b/addons/event/views/res_partner_views.xml @@ -5,6 +5,7 @@ <field name="name">view.res.partner.form.event.inherited</field> <field name="model">res.partner</field> <field name="inherit_id" ref="base.view_partner_form"/> + <field name="groups_id" eval="[(4, ref('event.group_event_user'))]"/> <field name="arch" type="xml"> <div name="button_box" position="inside"> <button class="oe_stat_button" diff --git a/addons/web/static/src/js/views/basic/basic_model.js b/addons/web/static/src/js/views/basic/basic_model.js index e3fb780bc529d43d1a6aba4c1d6676f8cbf99c72..bd06643194d03590e6fe889b7810055ea2669b07 100644 --- a/addons/web/static/src/js/views/basic/basic_model.js +++ b/addons/web/static/src/js/views/basic/basic_model.js @@ -1973,9 +1973,7 @@ var BasicModel = AbstractModel.extend({ var records = []; var ids = []; list = this._applyX2ManyOperations(list); - if (_.isEmpty(list.data)) { - return $.when(); - } + _.each(list.data, function (localId) { var record = self.localData[localId]; var data = record._changes || record.data; @@ -1986,6 +1984,9 @@ var BasicModel = AbstractModel.extend({ ids.push(many2oneRecord.res_id); model = many2oneRecord.model; }); + if (!ids.length) { + return $.when(); + } return this._rpc({ model: model, method: 'name_get', diff --git a/addons/web/static/src/less/list_view.less b/addons/web/static/src/less/list_view.less index 1e57f9253bc6bcb1f6ef2c74914994a978d23348..499ef8d0894a8ff2e6aac76fdcd8feef92ee2515 100644 --- a/addons/web/static/src/less/list_view.less +++ b/addons/web/static/src/less/list_view.less @@ -84,7 +84,6 @@ padding: 0px; background-style: none; border-style: none; - height: 0px; display: table-cell; } diff --git a/addons/web/static/tests/fields/relational_fields_tests.js b/addons/web/static/tests/fields/relational_fields_tests.js index 6db8f370f2b54715b04a3132487ba896cb2646d6..517c10947039c24f5facd2dacff4a50f0957924b 100644 --- a/addons/web/static/tests/fields/relational_fields_tests.js +++ b/addons/web/static/tests/fields/relational_fields_tests.js @@ -2551,6 +2551,58 @@ QUnit.module('relational_fields', { QUnit.module('FieldOne2Many'); + QUnit.test('New record with a o2m also with 2 new records, ordered, and resequenced', function (assert) { + assert.expect(3); + + // Needed to have two new records in a single stroke + this.data.partner.onchanges = { + foo: function(obj) { + obj.p = [ + [5], + [0, 0, {trululu: false}], + [0, 0, {trululu: false}], + ] + } + }; + + var form = createView({ + View: FormView, + model: 'partner', + data: this.data, + arch:'<form string="Partners">' + + '<field name="foo" />' + + '<field name="p">' + + '<tree editable="bottom" default_order="int_field">' + + '<field name="int_field" widget="handle"/>' + + '<field name="trululu"/>' + + '</tree>' + + '</field>' + + '</form>', + viewOptions: { + mode: 'create', + }, + mockRPC: function (route, args) { + assert.step(args.method + ' ' + args.model) + return this._super(route, args); + }, + }); + + // change the int_field through drag and drop + // that way, we'll trigger the sorting and the name_get + // of the lines of "p" + testUtils.dragAndDrop( + form.$('.ui-sortable-handle').eq(1), + form.$('tbody tr').first(), + {position: 'top'} + ); + + // Only those two should have been called + // name_get on trululu would trigger an traceback + assert.verifySteps(['default_get partner', 'onchange partner']); + + form.destroy(); + }); + QUnit.test('O2M List with pager, decoration and default_order: add and cancel adding', function (assert) { assert.expect(3); diff --git a/addons/web_editor/static/src/js/editor/summernote.js b/addons/web_editor/static/src/js/editor/summernote.js index 256d20f9d5f9992c95a3111c410337d52fdfe328..e6bca5e1563e02a41467b6fdf91867d6d2c750b4 100644 --- a/addons/web_editor/static/src/js/editor/summernote.js +++ b/addons/web_editor/static/src/js/editor/summernote.js @@ -2268,7 +2268,7 @@ $.summernote.pluginEvents.backColor = function (event, editor, layoutInfo, backC }; options.onCreateLink = function (sLinkUrl) { - if (sLinkUrl.indexOf('mailto:') === 0) { + if (sLinkUrl.indexOf('mailto:') === 0 || sLinkUrl.indexOf('tel:') === 0) { // pass } else if (sLinkUrl.indexOf('@') !== -1 && sLinkUrl.indexOf(':') === -1) { sLinkUrl = 'mailto:' + sLinkUrl;