summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2018-04-24 16:35:06 +0200
committerChristophe Simonis <chs@odoo.com>2018-04-24 16:35:06 +0200
commitec5e27bb7cc7808d7128eae4e7e67910f40492c0 (patch)
treedd750032f3dd0f1d4e443b44f5b0fcf0d8a5ba11
parent3b3f6cc0694b95cfbb0300cbff9aa6d9a3a6fe7e (diff)
parent7fd9dbdd9f8f30424cfb977b83a3c463889bb710 (diff)
[MERGE] forward port branch saas-11.2 up to 7fd9dbdd9f8
-rw-r--r--addons/account/models/chart_template.py4
-rw-r--r--addons/web/static/src/js/views/kanban/kanban_controller.js18
-rw-r--r--addons/web/static/tests/helpers/mock_server.js3
-rw-r--r--addons/web/static/tests/views/kanban_tests.js9
-rw-r--r--odoo/addons/base/static/src/js/res_config_settings.js19
-rw-r--r--odoo/addons/base/static/tests/base_settings_tests.js58
6 files changed, 103 insertions, 8 deletions
diff --git a/addons/account/models/chart_template.py b/addons/account/models/chart_template.py
index 7832a2354aa..69413f6bd66 100644
--- a/addons/account/models/chart_template.py
+++ b/addons/account/models/chart_template.py
@@ -853,7 +853,7 @@ class WizardMultiChartsAccounts(models.TransientModel):
@api.multi
def existing_accounting(self, company_id):
- model_to_check = ['account.move.line', 'account.invoice', 'account.move', 'account.payment', 'account.bank.statement']
+ model_to_check = ['account.move.line', 'account.invoice', 'account.payment', 'account.bank.statement']
for model in model_to_check:
if len(self.env[model].search([('company_id', '=', company_id.id)])) > 0:
return True
@@ -888,7 +888,7 @@ class WizardMultiChartsAccounts(models.TransientModel):
accounting_props.unlink()
# delete account, journal, tax, fiscal position and reconciliation model
- models_to_delete = ['account.reconcile.model', 'account.fiscal.position', 'account.tax', 'account.journal']
+ models_to_delete = ['account.reconcile.model', 'account.fiscal.position', 'account.tax', 'account.move', 'account.journal']
for model in models_to_delete:
res = self.env[model].search([('company_id', '=', self.company_id.id)])
if len(res):
diff --git a/addons/web/static/src/js/views/kanban/kanban_controller.js b/addons/web/static/src/js/views/kanban/kanban_controller.js
index 5e8bcbf963f..986fff3a53e 100644
--- a/addons/web/static/src/js/views/kanban/kanban_controller.js
+++ b/addons/web/static/src/js/views/kanban/kanban_controller.js
@@ -79,6 +79,16 @@ var KanbanController = BasicController.extend({
return this.renderer.updateRecord(this.model.get(id));
},
/**
+ * @param {number[]} ids
+ * @private
+ * @returns {Deferred}
+ */
+ _resequenceColumns: function (ids) {
+ var state = this.model.get(this.handle, {raw: true});
+ var model = state.fields[state.groupedBy[0]].relation;
+ return this.model.resequence(model, ids, this.handle);
+ },
+ /**
* This method calls the server to ask for a resequence. Note that this
* does not rerender the user interface, because in most case, the
* resequencing operation has already been displayed by the renderer.
@@ -134,6 +144,10 @@ var KanbanController = BasicController.extend({
_onAddColumn: function (event) {
var self = this;
this.model.createGroup(event.data.value, this.handle).then(function () {
+ var state = self.model.get(self.handle, {raw: true});
+ var ids = _.pluck(state.data, 'res_id').filter(_.isNumber);
+ return self._resequenceColumns(ids);
+ }).then(function () {
return self.update({}, {reload: false});
}).then(function () {
self._updateButtons();
@@ -396,9 +410,7 @@ var KanbanController = BasicController.extend({
*/
_onResequenceColumn: function (event) {
var self = this;
- var state = this.model.get(this.handle, {raw: true});
- var model = state.fields[state.groupedBy[0]].relation;
- this.model.resequence(model, event.data.ids, this.handle).then(function () {
+ this._resequenceColumns(event.data.ids).then(function () {
self._updateEnv();
});
},
diff --git a/addons/web/static/tests/helpers/mock_server.js b/addons/web/static/tests/helpers/mock_server.js
index a66f78ff159..148b7452678 100644
--- a/addons/web/static/tests/helpers/mock_server.js
+++ b/addons/web/static/tests/helpers/mock_server.js
@@ -1015,6 +1015,9 @@ var MockServer = Class.extend({
case '/web/dataset/search_read':
return $.when(this._mockSearchReadController(args));
+
+ case '/web/dataset/resequence':
+ return $.when();
}
if (route.indexOf('/web/image') >= 0 || _.contains(['.png', '.jpg'], route.substr(route.length - 4))) {
return $.when();
diff --git a/addons/web/static/tests/views/kanban_tests.js b/addons/web/static/tests/views/kanban_tests.js
index fbe345887f3..c5e5f606f61 100644
--- a/addons/web/static/tests/views/kanban_tests.js
+++ b/addons/web/static/tests/views/kanban_tests.js
@@ -1579,7 +1579,7 @@ QUnit.module('Views', {
});
QUnit.test('create a column in grouped on m2o', function (assert) {
- assert.expect(13);
+ assert.expect(14);
var nbRPCs = 0;
var kanban = createView({
@@ -1598,6 +1598,11 @@ QUnit.module('Views', {
if (args.method === 'name_create') {
assert.ok(true, "should call name_create");
}
+ //Create column will call resequence to set column order
+ if (route === '/web/dataset/resequence') {
+ assert.ok(true, "should call resequence");
+ return $.when(true);
+ }
return this._super(route, args);
},
});
@@ -1679,7 +1684,7 @@ QUnit.module('Views', {
});
QUnit.test('delete a column in grouped on m2o', function (assert) {
- assert.expect(28);
+ assert.expect(29);
testUtils.patch(KanbanRenderer, {
_renderGrouped: function () {
diff --git a/odoo/addons/base/static/src/js/res_config_settings.js b/odoo/addons/base/static/src/js/res_config_settings.js
index 623b452a91e..caae87cc183 100644
--- a/odoo/addons/base/static/src/js/res_config_settings.js
+++ b/odoo/addons/base/static/src/js/res_config_settings.js
@@ -1,6 +1,7 @@
odoo.define('base.settings', function (require) {
"use strict";
+var BasicModel = require('web.BasicModel');
var core = require('web.core');
var config = require('web.config');
var FormView = require('web.FormView');
@@ -346,10 +347,27 @@ var BaseSettingController = FormController.extend({
},
});
+var BaseSettingsModel = BasicModel.extend({
+ /**
+ * @override
+ */
+ save: function (recordID) {
+ var self = this;
+ return this._super.apply(this, arguments).then(function (result) {
+ // we remove here the res_id, because the record should still be
+ // considered new. We want the web client to always perform a
+ // default_get to fetch the settings anew.
+ delete self.localData[recordID].res_id;
+ return result;
+ });
+ },
+});
+
var BaseSettingView = FormView.extend({
jsLibs: [],
config: _.extend({}, FormView.prototype.config, {
+ Model: BaseSettingsModel,
Renderer: BaseSettingRenderer,
Controller: BaseSettingController,
}),
@@ -370,6 +388,7 @@ var BaseSettingView = FormView.extend({
view_registry.add('base_settings', BaseSettingView);
return {
+ Model: BaseSettingsModel,
Renderer: BaseSettingRenderer,
Controller: BaseSettingController,
};
diff --git a/odoo/addons/base/static/tests/base_settings_tests.js b/odoo/addons/base/static/tests/base_settings_tests.js
index ae46cacfbc4..e4e5dc0527d 100644
--- a/odoo/addons/base/static/tests/base_settings_tests.js
+++ b/odoo/addons/base/static/tests/base_settings_tests.js
@@ -6,6 +6,8 @@ var view_registry = require('web.view_registry');
var createView = testUtils.createView;
var BaseSettingsView = view_registry.get('base_settings');
+var createActionManager = testUtils.createActionManager;
+
QUnit.module('base_settings_tests', {
beforeEach: function () {
@@ -83,5 +85,59 @@ QUnit.module('base_settings_tests', {
assert.strictEqual(form.$('.notFound').hasClass('o_hidden'),false,"record not found message shown");
form.destroy();
});
+
+ QUnit.test('settings views does not read existing id when coming back in breadcrumbs', function (assert) {
+ assert.expect(7);
+
+ var actions = [{
+ id: 1,
+ name: 'Settings view',
+ res_model: 'project',
+ type: 'ir.actions.act_window',
+ views: [[1, 'form']],
+ }, {
+ id: 4,
+ name: 'Other action',
+ res_model: 'project',
+ type: 'ir.actions.act_window',
+ views: [[2, 'list']],
+ }];
+ var archs = {
+ 'project,1,form': '<form string="Settings" js_class="base_settings">' +
+ '<div class="app_settings_block" string="CRM" data-key="crm">' +
+ '<button name="4" string="Execute action" type="action"/>' +
+ '</div>' +
+ '</form>',
+ 'project,2,list': '<tree><field name="foo"/></tree>',
+ 'project,false,search': '<search></search>',
+ };
+
+ var actionManager = createActionManager({
+ actions: actions,
+ archs: archs,
+ data: this.data,
+ mockRPC: function (route, args) {
+ if (args.method) {
+ assert.step(args.method);
+ }
+ return this._super.apply(this, arguments);
+ },
+ });
+
+ actionManager.doAction(1);
+ actionManager.$('button[name="4"]').click();
+ $('.o_control_panel .breadcrumb li a').click();
+ assert.verifySteps([
+ 'load_views', // initial setting action
+ 'default_get', // this is a setting view => create new record
+ 'create', // when we click on action button => save
+ 'read', // with save, we have a reload... (not necessary actually)
+ 'load_views', // for other action in breadcrumb,
+ // with a searchread (not shown here since it is a route)
+ 'default_get', // when we come back, we want to restart from scratch
+ ]);
+
+ actionManager.destroy();
+ });
+});
});
-}); \ No newline at end of file