Siirry sisältöön
Menu
Sinun on rekisteröidyttävä, jotta voit olla vuorovaikutuksessa yhteisön kanssa.
Tämä kysymys on merkitty
10 Vastaukset
15741 Näkymät

How can I hide the edit button in the purchase.order for a specific state?

Is there any exmaple ? 

Avatar
Hylkää
Paras vastaus

Hi wizards,

I've found a solution for this, and that's working with js files. Here is the example

odoo.define('module.extension_name', function (require) {
    var FormView = require('web.FormView');
    FormView.include({ load_record: function() { this._super.apply(this, arguments);
      if (this.model === 'your.model') {
         if (this.datarecord && (this.datarecord.state === 'state')) {
            this.$buttons.find('.o_form_button_edit').css({'display':'none'});
          }
         else { this.$buttons.find('.o_form_button_edit').css({'display':''}); }
       }
    });
});

You also have to include the file in assets:

<?xml version="1.0" encoding="utf-8"?>
<odoo>
  <data>
    <template id="assets_backend" name="account assets" inherit_id="web.assets_backend">
      <xpath expr="." position="inside">
        <script type="text/javascript" src="/path_to_js/static/src/js/file.js"/>
      </xpath>
    </template>
  </data>
</odoo>

I don't really like this solution as, if you wan't to do this for a lot of models, you'll have to work with a lot of if and elses, incrementing a lot the cyclomatic complexity, but it's the only way I've found to hide that button (you can also disable it with css).


Hope it helps!


Regards,

Benjamin

Avatar
Hylkää

how to include file in assets

Oh I forgot to include that detail!

Add the .xml file to your module manifest, in the data array, as any view you could've develop.

Paras vastaus


odoo.define('module.extension_name', function (require) {
    var FormView = require('web.FormView');
    FormView.include({ init: function() { this._super.apply(this, arguments);
      if (this.controllerParams.modelName === 'your.model') {
                this.rendererParams.activeActions.edit = false;                                                                                                                                                                                                                                                                                                                                                                                 
       }
    });
});
Avatar
Hylkää

its work

its hide full model edit but, i need to hide edit button to specific state please send a code to hide a edit button in purchase model for specific state......

Paras vastaus

It would be inheriting the form and adding edit='false' just like here:

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

<field name="name">stock.quant.form</field>

<field name="model">stock.quant</field>

<field eval="10" name="priority"/>

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

<form string="Inventory Valuation" create="false" edit="false">

<group>

<group>

<field name="product_id"/>

</group>

</form>

</field>

</record>


Avatar
Hylkää
Tekijä

and where is the filter for the state?

This is just an example, it will not work for you anyways. Do not expect other people to solve your problems and you just copy and paste. Read the tips here, search some more and solve your own damn problems. Thats the way to go. Cheers

Paras vastaus

Hi Wizardz,

You can do this by creating a button where you set invisible on the attributes. In these attributes you can use the 'state not in' in order to hide the button when it is not in a specific state (or the other way around, when it is). An example of both:

<button name="your_action" string="Your text" type="object" attrs="{'invisible': [('state','not in', ('purchase','done'))]}"/> <button name="your_other_action" string="Your other text" type="object" attrs="{'invisible': [('state', 'in', ('draft','sent','to approve'))]}"/>

Regards,

Yenthe

Avatar
Hylkää
Tekijä

but those are not doing the same as the edit?

how to remove the edit button from purchase order

Tekijä

with some user rights or you do it in the odoo js like this:

if (this.model === 'purchase.order') {

this is wrong answer

u didn't git the question

Aiheeseen liittyviä artikkeleita Vastaukset Näkymät Toimenpide
1
toukok. 17
3196
6
jouluk. 17
8857
5
syysk. 20
12789
1
toukok. 18
6814
1
maalisk. 15
5244