@@ -114,6 +114,7 @@ You could use this simplified accounting in case you work with an (external) acc
|
||||
'account/static/src/js/open_move_widget.js',
|
||||
'account/static/src/js/legacy_open_move_widget.js',
|
||||
'account/static/src/js/account_move_form.js',
|
||||
'account/static/src/js/legacy_account_move_form.js',
|
||||
],
|
||||
'web.assets_frontend': [
|
||||
'account/static/src/js/account_portal_sidebar.js',
|
||||
|
||||
@@ -1,53 +1,61 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import FormController from 'web.FormController';
|
||||
import FormRenderer from 'web.FormRenderer';
|
||||
import FormView from 'web.FormView';
|
||||
import view_registry from 'web.view_registry';
|
||||
import { registry } from "@web/core/registry";
|
||||
import { createElement, append } from "@web/core/utils/xml";
|
||||
import { Notebook } from "@web/core/notebook/notebook";
|
||||
import { formView } from "@web/views/form/form_view";
|
||||
import { FormCompiler } from "@web/views/form/form_compiler";
|
||||
import { FormRenderer } from "@web/views/form/form_renderer";
|
||||
|
||||
var AccountMoveFormController = FormController.extend({
|
||||
custom_events: _.extend({}, FormController.prototype.custom_events, {
|
||||
save_on_tab_switch: '_saveOnTabSwitch',
|
||||
}),
|
||||
_saveOnTabSwitch: async function(event) {
|
||||
let tabName = event.data.originalEvent.target.name
|
||||
await this.saveRecord(this.handle, {
|
||||
stayInEdit: true,
|
||||
});
|
||||
await this.reload();
|
||||
$(`[name='${tabName}']`).tab('show');
|
||||
},
|
||||
});
|
||||
|
||||
var AccountMoveFormRenderer = FormRenderer.extend({
|
||||
_renderTagNotebook: function (node) {
|
||||
var self = this;
|
||||
var $result = this._super.apply(this, arguments);
|
||||
var $nav_items = $result.find('ul.nav-tabs li.nav-item').slice(0, 2);
|
||||
_.each($nav_items, (nav_item) => {
|
||||
$(nav_item).find('a').on('show.bs.tab', function (event) {
|
||||
if (self.state.isDirty()) {
|
||||
event.preventDefault();
|
||||
self.trigger_up('save_on_tab_switch', {originalEvent: event});
|
||||
}
|
||||
});
|
||||
})
|
||||
return $result
|
||||
},
|
||||
});
|
||||
|
||||
var AccountMoveFormView = FormView.extend({
|
||||
config: _.extend({}, FormView.prototype.config, {
|
||||
Controller: AccountMoveFormController,
|
||||
Renderer: AccountMoveFormRenderer,
|
||||
}),
|
||||
|
||||
});
|
||||
|
||||
view_registry.add('account_move_form', AccountMoveFormView);
|
||||
|
||||
export {
|
||||
AccountMoveFormController,
|
||||
AccountMoveFormRenderer,
|
||||
AccountMoveFormView,
|
||||
export class AccountMoveFormNotebook extends Notebook {
|
||||
async changeTabTo(page_id) {
|
||||
if (this.props.onBeforeTabSwitch) {
|
||||
await this.props.onBeforeTabSwitch(page_id);
|
||||
}
|
||||
this.state.currentPage = page_id;
|
||||
}
|
||||
}
|
||||
AccountMoveFormNotebook.template = "account.AccountMoveFormNotebook";
|
||||
AccountMoveFormNotebook.props = {
|
||||
...Notebook.props,
|
||||
onBeforeTabSwitch: { type: Function, optional: true },
|
||||
}
|
||||
export class AccountMoveFormRenderer extends FormRenderer {
|
||||
async saveBeforeTabChange() {
|
||||
if (this.props.record.mode === "edit" && this.props.record.isDirty) {
|
||||
const contentEl = document.querySelector('.o_content');
|
||||
const scrollPos = contentEl.scrollTop;
|
||||
await this.props.record.save({
|
||||
stayInEdition: true,
|
||||
});
|
||||
if (scrollPos) {
|
||||
contentEl.scrollTop = scrollPos;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
AccountMoveFormRenderer.components = {
|
||||
...FormRenderer.components,
|
||||
AccountMoveFormNotebook: AccountMoveFormNotebook,
|
||||
}
|
||||
export class AccountMoveFormCompiler extends FormCompiler {
|
||||
compileNotebook(el, params) {
|
||||
const originalNoteBook = super.compileNotebook(...arguments);
|
||||
const noteBook = createElement("AccountMoveFormNotebook");
|
||||
for (const attr of originalNoteBook.attributes) {
|
||||
noteBook.setAttribute(attr.name, attr.value);
|
||||
}
|
||||
noteBook.setAttribute("onBeforeTabSwitch", "() => this.saveBeforeTabChange()");
|
||||
const slots = originalNoteBook.childNodes;
|
||||
append(noteBook, [...slots]);
|
||||
return noteBook;
|
||||
}
|
||||
}
|
||||
|
||||
const AccountMoveFormView = {
|
||||
...formView,
|
||||
Renderer: AccountMoveFormRenderer,
|
||||
Compiler: AccountMoveFormCompiler,
|
||||
};
|
||||
|
||||
registry.category("views").add("account_move_form", AccountMoveFormView);
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<templates xml:space="preserve">
|
||||
<t t-name="account.AccountMoveFormNotebook" t-inherit="web.Notebook" t-inherit-mode="primary" owl="1">
|
||||
<xpath expr="//a[@class='nav-link']" position="attributes">
|
||||
<attribute name="t-on-click.prevent">() => this.changeTabTo(navItem[0])</attribute>
|
||||
</xpath>
|
||||
</t>
|
||||
</templates>
|
||||
@@ -0,0 +1,53 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import FormController from 'web.FormController';
|
||||
import FormRenderer from 'web.FormRenderer';
|
||||
import FormView from 'web.FormView';
|
||||
import view_registry from 'web.view_registry';
|
||||
|
||||
var AccountMoveFormController = FormController.extend({
|
||||
custom_events: _.extend({}, FormController.prototype.custom_events, {
|
||||
save_on_tab_switch: '_saveOnTabSwitch',
|
||||
}),
|
||||
_saveOnTabSwitch: async function(event) {
|
||||
let tabName = event.data.originalEvent.target.name
|
||||
await this.saveRecord(this.handle, {
|
||||
stayInEdit: true,
|
||||
});
|
||||
await this.reload();
|
||||
$(`[name='${tabName}']`).tab('show');
|
||||
},
|
||||
});
|
||||
|
||||
var AccountMoveFormRenderer = FormRenderer.extend({
|
||||
_renderTagNotebook: function (node) {
|
||||
var self = this;
|
||||
var $result = this._super.apply(this, arguments);
|
||||
var $nav_items = $result.find('ul.nav-tabs li.nav-item').slice(0, 2);
|
||||
_.each($nav_items, (nav_item) => {
|
||||
$(nav_item).find('a').on('show.bs.tab', function (event) {
|
||||
if (self.state.isDirty()) {
|
||||
event.preventDefault();
|
||||
self.trigger_up('save_on_tab_switch', {originalEvent: event});
|
||||
}
|
||||
});
|
||||
})
|
||||
return $result
|
||||
},
|
||||
});
|
||||
|
||||
var AccountMoveFormView = FormView.extend({
|
||||
config: _.extend({}, FormView.prototype.config, {
|
||||
Controller: AccountMoveFormController,
|
||||
Renderer: AccountMoveFormRenderer,
|
||||
}),
|
||||
|
||||
});
|
||||
|
||||
view_registry.add('account_move_form', AccountMoveFormView);
|
||||
|
||||
export {
|
||||
AccountMoveFormController,
|
||||
AccountMoveFormRenderer,
|
||||
AccountMoveFormView,
|
||||
}
|
||||
Reference in New Issue
Block a user