Odoo Help

Welcome!

This community is for beginners and experts willing to share their Odoo knowledge. It's not a forum to discuss ideas, but a knowledge base of questions and their answers.

0

How to override save & new button functionality ?

By
nagarjuna
on 1/21/16, 1:28 AM 1,225 views

I would like to override the default save & new button functionality ?

the button view is located at web\static\src\xml\base.xml and button click functionality is web\static\src\js\view_form.js.

i manged to override view by adding new xml file at mymodule\static\src\xml\custom.xml

<?xml version="1.0" encoding="UTF-8"?>
<templates id="template" xml:space="preserve">
<t t-name="AbstractFormPopup.buttons">
    <t t-if="! readonly">
        <t t-if="! multi_select">
            <button type="button" class="oe_button oe_abstractformpopup-form-save oe_highlight">Save</button>
        </t>
        <t t-if="multi_select">
            <button type="button" class="oe_button oe_abstractformpopup-form-save oe_highlight">Save &amp; Close</button>
            <button type="button" class="oe_button oe_abstractformpopup-form-save-new oe_highlight">My Own Button</button>
        </t>
        or
    </t>
    <a class="oe_abstractformpopup-form-close oe_bold oe_form_button_cancel" href="javascript:void(0)">
        <t t-if="! readonly">
            Discard
        </t>
        <t t-if="readonly">
            Close
        </t>
    </a>
</t>
</templates>

and adding

'qweb': [
        "static/src/xml/base.xml",
    ],

in _openerp_.py

now button name is changed but the functionality is default functionality. how can i change that default button functionality ?

0

Axel Mendoza

--Axel Mendoza--
10308
| 7 7 8
Camaguey, Cuba
--Axel Mendoza--

DevOps - Full stack - Software Architect - Developer - Technology Integrator

I could help you to develop anything and solve complex problems based on technologies, integrations and tricky stuffs mostly in Python with OpenERP/Odoo, Zato, Django and many others frameworks programming languages and technologies.

I offers consulting services to anyone with an unanswered questions or needs for customizations. Think about it, maybe it's better to have an expert to solve your issues and projects than having a full time employee trying to understand what to do an how

Reach me at aekroft@gmail.com

Axel Mendoza
On 1/21/16, 2:27 AM

To do that you need to add this code in a loaded js file of your module defined in the backend assets template(search others posts for that), changing the code in bold for your needs

instance.web.form.AbstractFormPopup.include({

setup_form_view: function() {

var self = this;

if (this.row_id) {

this.dataset.ids = [this.row_id];

this.dataset.index = 0;

} else {

this.dataset.index = null;

}

var options = _.clone(self.options.form_view_options) || {};

if (this.row_id !== null) {

options.initial_mode = this.options.readonly ? "view" : "edit";

}

_.extend(options, {

$buttons: this.$buttonpane,

});

this.view_form = new instance.web.FormView(this, this.dataset, this.options.view_id || false, options);

if (this.options.alternative_form_view) {

this.view_form.set_embedded_view(this.options.alternative_form_view);

}

this.view_form.appendTo(this.$el.find(".oe_popup_form"));

this.view_form.on("form_view_loaded", self, function() {

var multi_select = self.row_id === null && ! self.options.disable_multiple_selection;

self.$buttonpane.html(QWeb.render("AbstractFormPopup.buttons", {

multi_select: multi_select,

readonly: self.row_id !== null && self.options.readonly,

}));

var $snbutton = self.$buttonpane.find(".oe_abstractformpopup-form-save-new");

$snbutton.click(function() {

alert('test');

$.when(self.view_form.save()).done(function() {

self.view_form.reload_mutex.exec(function() {

self.view_form.on_button_new();

});

});

});

var $sbutton = self.$buttonpane.find(".oe_abstractformpopup-form-save");

$sbutton.click(function() {

$.when(self.view_form.save()).done(function() {

self.view_form.reload_mutex.exec(function() {

self.check_exit();

});

});

});

var $cbutton = self.$buttonpane.find(".oe_abstractformpopup-form-close");

$cbutton.click(function() {

self.view_form.trigger('on_button_cancel');

self.check_exit();

});

self.view_form.do_show();

});

}

});

to what you need

Thanks for the reply Axel, is it enough to add above part of the code in the local module js ? or do i need to add remaining js content from the view_form.js (which is located at web/static/js folder).

nagarjuna
on 1/21/16, 4:56 AM

I don't understand. You need to put that code in a js file that contains the odoo js declaration header and that file it's declared using template asset declaration. No need for add extra content from view_form.js

Axel Mendoza
on 1/21/16, 8:57 AM

Hi Axel, i did that, now i need to call a python method from the js by passing the arguments (cr,ids,uid etc...). i am able to call a plane method but unable to send these argument related to the form. do u have any idea?

nagarjuna
on 1/21/16, 10:42 AM

That is another question that you could find the answer in so many others post in the forum, don't mess up the question objetive

Axel Mendoza
on 1/21/16, 10:49 AM

Your Answer

Please try to give a substantial answer. If you wanted to comment on the question or answer, just use the commenting tool. Please remember that you can always revise your answers - no need to answer the same question twice. Also, please don't forget to vote - it really helps to select the best questions and answers!

About This Community

This community is for professionals and enthusiasts of our products and services. Read Guidelines

Question tools

1 follower(s)

Stats

Asked: 1/21/16, 1:28 AM
Seen: 1225 times
Last updated: 1/21/16, 2:27 AM