Contributors mailing list archives

contributors@odoo-community.org

Browse archives

Avatar

Re: Well practise on rewrite action domain

by
Axel Mendoza
- 27/01/2017 07:51:25
Hi all
There is an alternative to do it completely incremental by using python code, re-implementing the search method of the target model, that is sale.order in this case, to add the extra domain rules to the domain of the search.
This is a valid way of do it and you could find examples of use in the Odoo core modules like in addons/base/res/res_bank.py of v9
Here is how can be done:

    @api.model
    def search(self, args, offset=0, limit=None, order=None, count=False):
        pos = 0
        while pos < len(args):
            if args[pos] == ('state', 'not in', ('draft', 'sent', 'cancel')):
                args[pos] = ('state', 'not in', ('draft', 'sent', 'cancel', 'archived'))
        return super(ResPartnerBank, self).search(args, offset, limit, order, count=count)
    
    # or
    
    @api.model
    def search(self, args, offset=0, limit=None, order=None, count=False):
        pos = 0
        while pos < len(args):
            if args[pos][0] == 'state' and args[pos][1] == 'not in':
                elems = list(args[pos][2])
                elems.append('archived')
                args[pos] = ('state', 'not in', elems)
        return super(ResPartnerBank, self).search(args, offset, limit, order, count=count)

What better works for your case. 
You could also check if isinstance(args[pos], (list, tuple, set)) and len(args[pos]) == 3, values of the context or anything you need to be sure that you are modifying the search of an specific action since the same search method will be used by everything that try to search on the model using the conditions that match the if statement

Hope this make it clear


On Thu, Jan 26, 2017 at 3:23 PM, Richard deMeester <richardd@willdooit.com> wrote:
Hi Michael,

I understand your pain on this type of thing.

A solution of sorts, particularly if module A and module B are not dependent in either direction is:

Module A:
....
<field name="domain">[
                ('state', 'not in', ('draft', 'sent', 'cancel')),
                ('x_type_contract','=','1')   
            ]

Module B:
....
<field name="domain">[
                ('state', 'not in', ('archived')),
            ]

Module C: (depends on A, B and the clever part, auto_install = True so this module is automatic when A and B are both installed)
....
<field name="domain">[
                ('state', 'not in', ('draft', 'sent', 'cancel', 'archived')),
                ('x_type_contract','=','1')   
            ]


Of course, this is not as elegant as could be, and does mean rewriting the domain in two modules if it ever needs to change, and does not extend any base domains (or domains that a third party module may have just added to the same action!)

On 13 January 2017 at 07:38, Michael Delvoye <mdelvoye@misyl-services.com> wrote:
Hi every body
i need to rewrite action sale order like this in one module : 

<record id="sale.action_orders" model="ir.actions.act_window">
<field name="view_id" ref="sale.view_order_tree"/>
<field name="domain">[
('state', 'not in', ('draft', 'sent', 'cancel')),
('x_type_contract','=','1')
]
</field>
</record>

Bu in an other module i need to exclude 'state' '='  'archived')
I don't know the best practise to do that.

Can you orient me. Of course I . can centralize it in one module but i would prefer to keep each module and to "cumulate" the domain.

Thanks for help


--
Michael Delvoye
Directeur Technique
MISYL SERVICES

_______________________________________________
Mailing-List: http://odoo-community.org/groups/contributors-15
Post to: mailto:contributors@odoo-community.org
Unsubscribe: http://odoo-community.org/groups?unsubscribe




--

 

 

<img border="0" width="249" height="60" src="cid:image002.png@01D1EBFD.CB6A7560" alt="Willdoo Logo Positive" style="width:2.5937in;min-height:0.625in">

Richard deMeester

Senior Programmer/Developer/Analyst

WilldooIT Pty Ltd


E: richardd@willdooit.com
P: +61 3 9682 3700 
M: +61 403 76 76 76

Level 1, 119 Ferrars Street Southbank VIC, 3006

<img border="0" width="215" height="69" src="cid:image003.jpg@01D1EBFD.CB6A7560" alt="4" style="width:2.2395in;min-height:0.7187in"><img border="0" width="111" height="69" src="cid:image004.png@01D1EBFD.CB6A7560" alt="1" style="width:1.1562in;min-height:0.7187in"><img border="0" width="94" height="69" src="cid:image005.png@01D1EBFD.CB6A7560" alt="1" style="width:0.9791in;min-height:0.7187in"><img border="0" width="99" height="69" src="cid:image006.png@01D1EBFD.CB6A7560" alt="1" style="width:1.0312in;min-height:0.7187in"><img border="0" width="95" height="69" src="cid:image007.png@01D1EBFD.CB6A7560" alt="1" style="width:0.9895in;min-height:0.7187in">

DISCLAIMER | This electronic message together with any attachments is confidential. If you are not the recipient, do not copy, disclose, or use the contents in any way. Please also advise us by e-mail that you have received this message in error and then please destroy this email and any of its attachments. WilldooIT Pty. Ltd. is not responsible for any changes made to this message and/or any attachments after sending by WilldooIT Pty. Ltd. WilldooIT Pty. Ltd. use virus scanning software but exclude all liability for virus or anything similar in this email or attachment.


_______________________________________________
Mailing-List: http://odoo-community.org/groups/contributors-15
Post to: mailto:contributors@odoo-community.org
Unsubscribe: http://odoo-community.org/groups?unsubscribe


Reference