2 votes

Bouton de masquage de Form View via CSS

Dans la vue du formulaire, je veux masquer un bouton si le client a un problème. partner_id est Faux, j'ai essayé t-if sans succès, j'ai attaché attrs mais ça n'a pas marché non plus.

Vérifier le statut du client partner_id :

enter image description here

Je veux cacher le bouton "Envoyer un message" :

enter image description here

Une solution ?

J'ai essayé d'exécuter le CSS pour cacher le bouton

Mon code :

<field name="name" attrs="{'invisible': [('partner_id', '=', False)]}">
      <style>
        .o_chatter_button_new_message {
                display: none !important;
        }
      </style>
      </field>

1voto

WaKo Points 7674

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>

0voto

Dipen Shah Points 59

Ce n'est pas possible avec l'approche que vous avez adoptée. Le site Envoyer un message est rendu de manière dynamique et est défini dans le fichier Qweb modèle.

Vous pouvez trouver le Bouton Code ici, Cliquez ici

Solution : Pour cacher le bouton, vous pouvez le faire à partir du js où le bouton est rendu et passer la valeur [avec vérification que le partner_id est False] et ajouter la condition sur le bouton lui-même.

Gracias

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X