Skip to Content
मेन्यू
This question has been flagged
1 Reply
146 Views

Hi everyone,

I'm trying to add a confirmation popup when a user clicks the Import button.

This is Odoo’s default import button (not a custom one) on version 18.

Normally, when a user clicks the Import button, the data file is uploaded immediately.

I’d like to add a confirmation step such as:

“Data uploads are irreversible. Are you sure you want to confirm this data upload?”

✅ Yes → Continue import

❌ No → Cancel

Is it possible to do this through a custom module or by overriding the default behavior of the Import button?

Thanks in advance!

Avatar
Discard

Hello,
Yes you can add confirmation dialog using
import {ConfirmationDialog } from "@web/core/confirmation_dialog/confirmation_dialog";
async deleteRecord(record) {
this.dialog.add(ConfirmationDialog, {
title: _t("Bye-bye, record!"),
body: deleteConfirmationMessage,
confirm: () => this.model.root.deleteRecords([record]),
confirmLabel: _t("Delete"),
cancel: () => {},
cancelLabel: _t("No, keep it"),
});
}
Above is just a reference..

async handleImport(isTest = true) in this JS method.

Best Answer

Hi,


It is possible to add a confirmation popup to Odoo's default import button using a custom module. Here's how you can achieve this by overriding the default behavior:


The general approach involves:

1- Inheriting the relevant view: Identify the view containing the import button and inherit it in your custom module.

2- Adding a JavaScript override: Use JavaScript to intercept the click event on the import button and display a confirmation dialog.

3- Modifying the import action: Based on the user's confirmation, either proceed with the default import action or cancel it.


Steps

1- Identify the View:

       * The import button is typically part of a form or list view. You'll need to identify the exact view ID you want to modify. You can do this by activating developer mode in Odoo and inspecting the view.


2- Create a Custom Module:

      * Create a new Odoo module (e.g., import_confirmation).

      * In your module, create the following files:

                * __manifest__.py: Module manifest file.

                * static/src/js/import_confirmation.js: JavaScript file to handle the popup.

                * views/views.xml: XML file to inherit and modify the view.

3- Module Manifest (__manifest__.py):


{

    'name': 'Import Confirmation',

    'version': '1.0',

    'summary': 'Adds a confirmation popup to the import button.',

    'description': """

This module adds a confirmation popup when a user clicks the Import button.

    """,

    'category': 'Tools',

    'author': 'Your Name',

    'website': 'www.example.com',

    'depends': ['base'],  # or the specific module where the import button is

    'data': [

        'views/views.xml',

    ],

    'qweb': [

        'static/src/xml/import_confirmation.xml',

    ],

    'installable': True,

    'application': False,

    'auto_install': False,

}


4- XML View Inheritance (views/views.xml):


<odoo>

    <data>

        <record id="view_id_to_inherit" model="ir.ui.view">

            <field name="name">your.model.form.inherit</field>

            <field name="model">your.model</field>

            <field name="inherit_id" ref="your_module.your_view_id"/>

            <field name="arch" type="xml">

                <xpath expr="//button[@name='action_import']" position="attributes">

                    <attribute name="class">oe_import_button</attribute>

                </xpath>

            </field>

        </record>

    </data>

</odoo>


5- JavaScript File (static/src/js/import_confirmation.js):


/** @odoo-module **/


import { registry } from '@web/core/registry';

import { useService } from "@web/core/utils/hooks";

const { onWillStart } = owl;


registry.category("client_action").add("import_confirmation.ImportConfirmationAction", {

    Component: ImportConfirmationAction,

    force: true,

});


function ImportConfirmationAction() {

    const orm = useService("orm");

    onWillStart(async () => {

        $('.oe_import_button').click(function(event) {

            event.preventDefault();

            if (confirm("Data uploads are irreversible. Are you sure you want to confirm this data upload?")) {

                // Continue with the default import action

                $(this).unbind('click').click();

            } else {

                // Cancel the import

                return false;

            }

        });

    });

    return {};

}


5- QWeb Template (static/src/xml/import_confirmation.xml):

              * This file is needed to load the javascript file.

<?xml version="1.0" encoding="UTF-8"?>

<templates>

    <t t-name="import_confirmation.ImportConfirmationAction" owl="1">

    </t>

</templates>


* View Identification: Make sure you correctly identify the view ID and the import button's XPath.

* JavaScript Loading: Ensure your JavaScript file is correctly loaded by including it in the module's qweb list and defining the necessary template.

* Odoo Version Compatibility: Test the code thoroughly to ensure it works correctly with Odoo 18, as there might be slight differences in the framework.



By following these steps, you can add a confirmation popup to Odoo's default import button, providing an extra layer of protection against accidental data uploads.


Hope it helps



Avatar
Discard
Related Posts Replies Views Activity
0
अक्तू॰ 25
3
0
अक्तू॰ 25
3
0
अक्तू॰ 25
3
0
अक्तू॰ 25
2
0
अक्तू॰ 25
5