Saltar al contenido

Odoo: botón Ocultar para un usuario específico

Contamos con tu ayuda para compartir nuestras secciones con relación a las ciencias informáticas.

Solución:

Una de las cosas que sé es usar un campo en attrs, el campo debe mencionarse en el formulario. No sé cómo obtener el valor de la identificación de usuario en el formulario. pero si no hay un camino corto como uid o user puede trabajar alrededor de esto, simplemente cree un campo m2o para res.users hacer que este campo calcule el campo con store = False.

    # by default store = False this means the value of this field
    # is always computed.
    current_user = fields.Many2one('res.users', compute='_get_current_user')

    @api.depends()
    def _get_current_user(self):
        for rec in self:
            rec.current_user = self.env.user

y puede utilizar este campo en su formulario.

    
              

Lo siento por mi ingles.

Tengo entendido que tiene una lista fija de usuarios que podrán aprobar y otra lista fija de usuarios que podrán rechazar. A pesar de ser pocos usuarios, crearía dos grupos y usaría groups attribute en sus botones, pero si aún así no desea crear un par de grupos para ellos, puede hacer esto:

from openerp import models, api
import json
from lxml import etree

FIRST_APPROVE = []  # Fill this list with the IDs of the users who can update approve
SECOND_APPROVE = []  # Fill this list with the IDs of the users who can update reject

class YourClass(models.Model):
    _inherit = 'your.class'

    def update_json_data(self, json_data=False, update_data=):
        ''' It updates JSON data. It gets JSON data, converts it to a Python
        dictionary, updates this, and converts the dictionary to JSON data
        again. '''
        dict_data = json.loads(json_data) if json_data else 
        dict_data.update(update_data)
        return json.dumps(dict_data, ensure_ascii=False)

    def set_modifiers(self, element=False, modifiers_upd=):
        ''' It updates the JSON modifiers with the specified data to indicate
        if a XML tag is readonly or invisible or not. '''
        if element is not False:  # Do not write only if element:
            modifiers = element.get('modifiers') or 
            modifiers_json = self.update_json_data(
                modifiers, modifiers_upd)
            element.set('modifiers', modifiers_json)

    @api.model
    def fields_view_get(self, view_id=None, view_type='form', toolbar=False,
                        submenu=False):
        res = super(YourClass, self).fields_view_get(
            view_id=view_id, view_type=view_type, toolbar=toolbar,
            submenu=submenu)

        doc = etree.XML(res['arch'])

        if view_type == 'form':
            if self.env.uid in FIRST_APPROVE:
                upd_approve_btn_search = doc.xpath("//button[@name='update_approve']")
                upd_approve_btn = upd_approve_btn_search[0] 
                    if upd_approve_btn_search else False
                if upd_approve_btn:
                    self.set_modifiers(upd_approve_btn, 'invisible': False, )

            if self.env.uid in SECOND_APPROVE:
                upd_reject_btn_search = doc.xpath("//button[@name='update_reject']")
                upd_reject_btn = upd_reject_btn_search[0] 
                    if upd_reject_btn_search else False
                if upd_reject_btn:
                    self.set_modifiers(upd_reject_btn, 'invisible': False, )

        res['arch'] = etree.tostring(doc)
        return res

FIRST APPROVE y SECOND_APPROVE será constante en la que deberás introducir los IDS fijos de los usuarios que pueden realizar la acción respectiva (por ejemplo: FIRST APPROVE = [2, 7, 9]).

YourClass debe ser la clase en la que ha declarado los métodos de sus botones (aquella en la que ha declarado update_approve y update_reject).

IMPORTANTE: con este código, tus botones deben estar siempre invisibles (escribe invisible="1" en su vista XML), porque después de cargar el código XML, el fields_view_get sobrescribirá el invisible valor para establecer 0.

Esta es una forma poco común de administrar su propósito, pero desafortunadamente creo que es la más simple si no desea crear grupos. ¡Espero que te ayude a ti y a otros usuarios!

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *