[IMP] account: account_move_form owl migrate

Part-of: odoo/odoo#96672
This commit is contained in:
Habib (ayh)
2022-08-27 19:01:12 +02:00
parent 4f4e31c623
commit 5d4a337a2b
4 changed files with 120 additions and 49 deletions
+1
View File
@@ -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,
}