From 5d4a337a2b4fcbc6b24be128fc8cacc59a9b22e7 Mon Sep 17 00:00:00 2001 From: "Habib (ayh)" Date: Fri, 5 Aug 2022 13:00:33 +0000 Subject: [PATCH] [IMP] account: account_move_form owl migrate Part-of: odoo/odoo#96672 --- addons/account/__manifest__.py | 1 + .../static/src/js/account_move_form.js | 106 ++++++++++-------- .../src/js/account_move_form_notebook.xml | 9 ++ .../static/src/js/legacy_account_move_form.js | 53 +++++++++ 4 files changed, 120 insertions(+), 49 deletions(-) create mode 100644 addons/account/static/src/js/account_move_form_notebook.xml create mode 100644 addons/account/static/src/js/legacy_account_move_form.js diff --git a/addons/account/__manifest__.py b/addons/account/__manifest__.py index e3baa3963b2..78d204e004d 100644 --- a/addons/account/__manifest__.py +++ b/addons/account/__manifest__.py @@ -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', diff --git a/addons/account/static/src/js/account_move_form.js b/addons/account/static/src/js/account_move_form.js index f40f6cb3ffe..fc1c44d9c71 100644 --- a/addons/account/static/src/js/account_move_form.js +++ b/addons/account/static/src/js/account_move_form.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); diff --git a/addons/account/static/src/js/account_move_form_notebook.xml b/addons/account/static/src/js/account_move_form_notebook.xml new file mode 100644 index 00000000000..5b1194f7249 --- /dev/null +++ b/addons/account/static/src/js/account_move_form_notebook.xml @@ -0,0 +1,9 @@ + + + + + + () => this.changeTabTo(navItem[0]) + + + diff --git a/addons/account/static/src/js/legacy_account_move_form.js b/addons/account/static/src/js/legacy_account_move_form.js new file mode 100644 index 00000000000..f40f6cb3ffe --- /dev/null +++ b/addons/account/static/src/js/legacy_account_move_form.js @@ -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, +}