Se rendre au contenu
Menu
Cette question a été signalée
3 Réponses
9137 Vues

I needed to change some attributes of the 'stock.move' popup screen that opened when one need to add a product in a delivery order screen, I added the following code


    def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
        if context is None:
            context = {}
        res = super(stock_move, self).fields_view_get(cr, uid, view_id, view_type, context, toolbar=toolbar, submenu=submenu)
        if context.get('picking_type') and context['picking_type']=='out':
            doc = etree.XML(res['arch'])
            domain ="[('use_type','=','finished')]"
            nodes = doc.xpath("//field[@name='product_id']")
            for node in nodes:
                node.set('domain', domain)
                node.set('string', 'Finished Product')
            nodes2 = doc.xpath("//field[@name='prodlot_id']")
            for node in nodes2:
                node.set('readonly',"1")
                node.set('invisible',"1")
                node.set('string',"1==================") res['arch'] = etree.tostring(doc)

The first nodes loop worked ok, the second one, nodes2, didn't work, i.e, the field still available and editable. I added the last line for test and for surprise it worked. Any idea is appreciated


Avatar
Ignorer

try node.set('readonly', '1')

Auteur

No difference. Any more suggestions??

Meilleure réponse

Hi,

You can make apply any modifier as like below.


from openerp.osv.orm import setup_modifiers
def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
if context is None:
context = {}
res = super(stock_move, self).fields_view_get(cr, uid, view_id, view_type, context, toolbar=toolbar, submenu=submenu)
if context.get('picking_type') and context['picking_type']=='out':
doc = etree.XML(res['arch'])
domain ="[('use_type','=','finished')]"
nodes = doc.xpath("//field[@name='product_id']")
for node in nodes:
node.set('domain', domain)
node.set('string', 'Finished Product')
setup_modifiers(node, res['fields']['product_id'])
nodes2 = doc.xpath("//field[@name='prodlot_id']")
for node in nodes2:
node.set('readonly',"1")
node.set('invisible',"1")
node.set('string',"1==================")
setup_modifiers(node, res['fields']['prodlot_id'])
res['arch'] = etree.tostring(doc)


I hope it will help you a lot.

Thanks.

Avatar
Ignorer
Auteur

Thank you 'Emipro' and thank to the site and the community that gave me this chance to get information by asking and receiving replies. You helped me before.

Auteur

I tried your suggestion and it worked well. I now need to disable the 'split' button on the popup screen, I added this code nodes = doc.xpath("//button[@string='Split']") for node in nodes: node.set('readonly','1') I checked the 'res' dictionary to find how to apply this function and didn't get a clue, pls help me again. If this requires adding this in a new question pls post a comment to me to do so. Thx again

It is good that we can manage this as new question. Thanks.

Auteur

I posted the question https://www.odoo.com/nl_NL/forum/help-1/question/i-unable-to-change-the-readonly-proprety-of-a-button-from-within-fields-view-get-method-89309 pls check

Publications associées Réponses Vues Activité
1
déc. 17
7545
2
nov. 16
6352
1
sept. 15
5008
1
juil. 15
8571
1
mars 15
5749