Skip to Content
Menu
This question has been flagged
7 Replies
12002 Views

Is there a way to set the text displayed in each state for a boolean button?

Avatar
Discard
Best Answer

not in the default code... but you can extend the widget your self...

by default:

    active: Active/Inactive

    archive: Active/Archive

    prod_environment: Product/Test

    by default : On/Off

via the option "terminology"

<field name="active" widget="boolean_button" options='{"terminology": "archive"}'/>




UPDATE:

 Here a sample of code to do it... https://github.com/odoo-dev/odoo/commit/e43ec89ec5e6a4e2cc43bad31e3452f130210acb

Avatar
Discard
Author

Thank you. This is great. Looks perfect. I will try it out ASAP.

Author

Hi, I'm having a bit of difficulty using your example.

My code is:

odoo.define("custom_boolean_button.FieldBooleanButton", function (require) {

"use strict";

var form_widgets = require("web.form_widgets");

form_widgets.FieldBooleanButton.include({

init: function() {

this._super.apply(this, arguments);

switch (this.options["terminology"]) {

case "active":

this.string_true = _t("Active");

this.hover_true = _t("Deactivate");

this.string_false = _t("Inactive");

this.hover_false = _t("Activate");

break;

case "archive":

this.string_true = _t("Not Archived");

this.hover_true = _t("Archive");

this.string_false = _t("Archived");

this.hover_false = _t("Unarchive");

break;

case "custom":

if (this.options["terminology_values"]) {

var terms = this.options["terminology_values"];

this.string_true = _t(terms.string_true); this.hover_true = _t(terms.hover_true);

this.string_false = _t(terms.string_false);

this.hover_false = _t(terms.hover_false);

break;

}

default:

this.string_true = _t("On");

this.hover_true = _t("Switch Off");

this.string_false = _t("Off");

this.hover_false = _t("Switch On");

}

},

});

});

I get the error:

TypeError: Cannot read property 'include' of undefined

Best Answer

You can simply add the options 

options="{'terminology':{

                'string_true': 'verify',

                'hover_true': 'verify',

                'string_false': 'Unverify',

                'hover_false': 'Unverify'

             }}"

Then It will display Verify/Unverify on button.

Eg.

<button name="toggle_verify" type="object" class="oe_stat_button test" icon="fa-check">

                      <field name="verify" widget="boolean_button" options="{'terminology':{

                'string_true': 'verify',

                'hover_true': 'verify',

                'string_false': 'Unverify',

                'hover_false': 'Unverify'

             }}"/>

                  </button>

Avatar
Discard
Best Answer

I used the solution provided by Jeremy and would just like to add that the terminology does not work if you have the field as a checkbox in the same view. The button will just display the checkbox. Remove the checkbox from the view and it works.

Avatar
Discard
Best Answer
<field name="your_boolean_field" nolabel="1"/>
<label attrs="{'invisible':[('your_boolean_field', '=', False)]}">
     Checked
</label>

<label attrs="{'invisible':[('Your_boolean_field','=',True)]}">

    Not Checked

</label>

Avatar
Discard
Author

Thanks for the reply. I'm sorry if I wasn't clear enough in my post. I'm actually looking for a way to change the strings displayed by the boolean_button widget. It has to be the widget because I'm using it to trigger a call to reload_on_button. I appreciate your reply, which would be otherwise totally workable.

Related Posts Replies Views Activity
2
Feb 23
1611
2
Apr 19
8741
1
May 19
6161
0
Oct 16
16837
1
Jan 24
12762