2017-08-03 1 views
1

J'essaye de créer une vue de forme. Cependant, il existe de nombreux attributs tels que les groupes et les invisibles liés à l'autorisation afin que certains groupes de personnes puissent voir le champ. Mais existe-t-il un moyen pour certains groupes d'éditer le champ et l'autre groupe ne le peut pas?Odoo 9 Existe-t-il un moyen de gérer l'autorisation avec différents groupes sur un certain champ en mode formulaire?

+0

Vous pouvez prendre référence de cette réponse: https: // stackoverflow.com/questions/18912997/how-to-make-champ-readonly-based-on-group-and-status –

Répondre

3

Tout d'abord, vous ne pouvez pas utiliser un domaine comme celui-ci

<field name="is_positive" attrs="{'readonly':[('state','==','final')]}"/> 

Il n'y a pas un opérateur '==', utilisez = à la place. Maintenant, pour répondre à votre question, si vous voulez créer une vue spéciale pour un autre groupe dans lequel certains éléments sont en lecture seule pour un groupe, et éditable dans l'autre, vous devez le faire de cette façon.

Pour la vue par défaut:

<record id="some_model_view" model="ir.ui.view"> 
    <field name="name">some.model.form</field> 
    <field name="model">some.model</field> 
    <field name="arch" type="xml"> 
     <form> 
      <field name="some_field" readonly="1"/> 
     </form> 
    <field/> 
</record> 

Pour un certain groupe:

<record id="some_model_view_for_other_group" model="ir.ui.view"> 
    <field name="name">some.model.form</field> 
    <field name="model">some.model</field> 
    <field name="inherit_id" ref="my_module.some_model_view" 
    <field name="groups_id" eval="[(6, 0, [ref('some.first_group')])]" /> 
    <field name="arch" type="xml"> 
     <field name="some_field" position="attributes"> 
      <attribute name="readonly">0</attribute> 
     </field> 
    <field/> 
</record> 
+0

vous répondez plus \t bonne réponse efficace mais vous n'avez pas utilisé l'expression xpath ça marche comme ça? – Cherif

+1

Oui cela fonctionne. Cela fonctionne s'il n'y a pas d'ambiguïté dans les éléments qui sont appelés. Avec Xpath, vous avez plus de contrôle. Mais si, disons, vous êtes sûr qu'il n'y a qu'un seul champ nommé 'some_field' dans le formulaire, vous pouvez utiliser cette syntaxe pour coder plus rapidement. – Majikat

+0

Merci! Cela a fonctionné pour moi et c'est celui que je cherchais pour utiliser efficacement Odoo. –

2

ajouter un nouveau champ pour vérifier si l'utilisateur est gestionnaire ou utilisateur.

Nouvelle méthode Api

check_user = fields.Boolean(string='user',compute='_compute_user_check') 

@api.multi 
def _compute_user_check(self): 
    if self.user_has_groups('purchase.group_purchase_manager'): 
     self.check_user =True 

Vu

<field name="is_positive" attrs="{'readonly':[('check_user','=','True')]}"/> 
+0

Je ne pense pas que self aurait une méthode 'user_has_groups'. La réponse de @ aslamsha22 est meilleure. – Majikat

+1

S'il vous plaît -> https://github.com/odoo/odoo/search?p=2&q=user_has_groups&type=&utf8=%E2%9C%93 –

+0

OH. Ma faute. C'est une fonctionnalité super pratique que vous avez montrée là. Mais encore, votre méthode de calcul renvoie une valeur au lieu de définir check_user. – Majikat

1

Je vais montrer un exemple sur la façon dont cette fonctionnalité fonctionne en vente groupe.

pour que le champ prix unitaire dans la ligne de commande de vente fait readonly nous sélectionnons le groupe d'utilisateurs user:own documents only Le champ est modifiable pour 2 autres groupes user:All documets et manager

Tout d'abord créer un champ booléen pour la vérification de l'utilisateur appartient à quel groupe

is_own_user = fields.Boolean(string="Own user", compute='compute_own_user') 

Puis assig ns le champ booléen est True lorsque l'utilisateur appartient à l'utilisateur de groupe: propres documents ne cède d'une autre à False

@api.depends('product_id') 
def compute_own_user(self): 
    res_user_id = self.env['res.users'].search([('id', '=', self._uid)]) 
    for rec in self: 
     if res_user_id.has_group('sales_team.group_sale_salesman') and not res_user_id.has_group('sales_team.group_sale_salesman_all_leads'): 
      rec.is_own_user = True 
     else: 
      rec.is_own_user = False 

xml faire is_own_user invisible et remplace le champ prix unitaire

<xpath expr="//notebook/page/field[@name='order_line']/tree/field[@name='price_unit']" position="replace"> 
    <field name="price_unit" attrs="{'readonly': [('isown_user', '=', True)]}" /> 
</xpath> 
+0

Merci d'avoir commenté. C'est bon pour moi d'utiliser python avec Odoo. Merci –