मुझे समझा है कि आपके पास उन उपयोगकर्ताओं की एक निश्चित सूची है जो स्वीकृति देने में सक्षम होंगे और उन उपयोगकर्ताओं की अन्य निश्चित सूची जो अस्वीकार करने में सक्षम होंगे। कुछ उपयोगकर्ताओं को होने के बावजूद, मैं दो समूह बनाने के साथ अपने बटन पर groups
विशेषता का प्रयोग करेंगे, लेकिन अगर फिर भी आप उनके लिए समूहों की एक जोड़ी बनाने के लिए नहीं करना चाहते हैं, तो आप ऐसा कर सकते हैं:
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
और SECOND_APPROVE
उस स्थिति में होगा जिसमें आपको उन उपयोगकर्ताओं के निश्चित आईडीएस को पेश करना होगा जो संबंधित कार्रवाई कर सकते हैं (उदाहरण के लिए: FIRST APPROVE = [2, 7, 9]
)।
YourClass
वह वर्ग होना चाहिए जिसमें आपने अपने बटनों की विधियां घोषित की हैं (जिसमें आपने update_approve
और update_reject
घोषित किया है)।
महत्वपूर्ण: इस कोड के साथ, अपने बटन क्योंकि XML कोड लोड करने के बाद, fields_view_get
invisible
मान ओवरराइट 0.
यह स्थापित करने के लिए होगा हमेशा (लिखना अपने XML दृश्य पर invisible="1"
) अदृश्य होना चाहिए, अपने उद्देश्य को प्रबंधित करने का एक असामान्य तरीका है, लेकिन दुर्भाग्य से मुझे लगता है कि यदि आप समूह बनाना नहीं चाहते हैं तो यह सबसे आसान है। मुझे उम्मीद है कि यह आपको और अन्य उपयोगकर्ताओं की मदद करेगा!