[MERGE] forward port branch saas-11.2 up to 7fd9dbdd9f
This commit is contained in:
@@ -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):
|
||||
|
||||
@@ -78,6 +78,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
|
||||
@@ -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();
|
||||
});
|
||||
},
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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 () {
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
|
||||
@@ -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();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user