Vous pouvez le faire en FormRenderer et pour masquer ou afficher le bouton quand la valeur de partner_id
vous pouvez créer un nouveau widget many2one en étendant la fonction FieldMany2One
et en changeant l'état de visibilité du bouton en fonction de la valeur du paramètre partner_id
.
Dans l'exemple suivant, le Send Message button
sera caché si le partner_id
est défini lorsque la vue du formulaire est chargée ou lorsque la valeur de l'option partner_id
est réglé sur faux. Le bouton doit être visible lorsque la valeur du partenaire est définie (événement onchange).
odoo.define('stack_overflow.chatter_button_new_message', function (require) {
"use strict";
var FormRenderer = require('web.FormRenderer');
FormRenderer.include({
autofocus: function () {
var self = this;
if(self.state.model === 'project.task' && self.state.data.partner_id===false){
var node = window.$('button.o_chatter_button_new_message');
node.hide();
}
return this._super();
},
});
var relational_fields = require('web.relational_fields');
var FieldMany2One = relational_fields.FieldMany2One.extend({
_onFieldChanged: function (event) {
var node = window.$('button.o_chatter_button_new_message');
if (event.data.changes[event.target.name]===false) {
node.hide();
} else {
node.show();
}
this._super(event);
},
});
fieldRegistry.add('hideSendMsg', FieldMany2One);
});
Vous devez ajouter le fichier js dans un regroupement d'actifs .
Pour utiliser le widget défini ci-dessus, vous devrez définir l'attribut widget de la balise partner_id
pour hideSendMsg
dans la définition XML.
<record id="view_task_form2_inherit" model="ir.ui.view">
<field name="name">view.task.form2.inherit</field>
<field name="model">project.task</field>
<field name="inherit_id" ref="project.view_task_form2"/>
<field name="arch" type="xml">
<field name="partner_id" position="attributes">
<attribute name="widget">hideSendMsg</attribute>
</field>
</field>
</record>
\=============================================================
Ma solution : @Fotic
<script type="text/javascript">
document.onload = check_status();
document.onchange = check_status();
function check_status() {
if (document.getElementById("o_field_input_103")){
var hasCSSClass = document.getElementById("o_field_input_103")
}
if (hasCSSClass){
if ( hasCSSClass.classList.contains("o_field_empty") || hasCSSClass.classList.contains("o_input")) {
$(".o_chatter_button_new_message").show();
console.log("1111111111");
} else{
$(".o_chatter_button_new_message").hide();
console.log("2222222222");
}
}
}
</script>