How to access 'user' object from domain in action record

Asked by Chertykov Denis

I have a following action definition:
    <record id="action_income_payment_line_tree" model="ir.actions.act_window">
      <field name="name">Payment lines</field>
      <field name="res_model">payment.line</field>
      <field name="view_type">form</field>
      <field name="view_mode">tree,form</field>
      <field name="domain">[('partner_id','in', [p.id for p in user.partner_ids])]</field>
    </record>

user.partner_ids - is a custom field that I have added to res.users

Seems that I can access `user' object from domain_force in Recor Rules, but can't from domain in action.
How to access 'user' object from domain in action record ?

Question information

Language:
English Edit question
Status:
Solved
For:
Odoo Server (MOVED TO GITHUB) Edit question
Assignee:
No assignee Edit question
Solved by:
Serpent Consulting Services
Solved:
Last query:
Last reply:
Revision history for this message
Best Serpent Consulting Services (serpent-consulting-services) said :
#1

Chertykov,

Yes, the user object is not accessible directly except in record rules.

But yes, you can always get it working for you by overriding search() of payment.line and proceed your domain over there.

Use context in order to get this working for you.

Hope this helps.

Thanks,
Serpent Consulting Services.
http://www.serpentcs.com

Revision history for this message
Chertykov Denis (chertykov) said :
#2

Thanks for reply.
This is an example.
Look to USER_PARTNER_IDS and USER_PAYMENT_MODE_IDS.

Part of example.xml:
    <record id="action_income_payment_line_tree" model="ir.actions.act_window">
      <field name="name">Входящие платежи</field>
      <field name="res_model">payment.line</field>
      <field name="view_type">form</field>
      <field name="view_mode">tree,form</field>
      <field name="limit">300</field>
      <field name="context">{"search_default_today":1}</field>
      <field name="domain">[('partner_id','in','USER_PARTNER_IDS')]</field>
      <field name="search_view_id" ref="view_payment_line_search"/>
    </record>

    <record id="action_outgoing_payment_line_tree" model="ir.actions.act_window">
      <field name="name">Исходящие платежи</field>
      <field name="res_model">payment.line</field>
      <field name="view_type">form</field>
      <field name="view_mode">tree,form</field>
      <field name="limit">300</field>
      <field name="context">{"search_default_today":1}</field>
      <field name="domain">[('payment_mode','in','USER_PAYMENT_MODE_IDS')]</field>
      <field name="search_view_id" ref="view_payment_line_search"/>
    </record>

Part of example.py:
    def search(self, cr, uid, args, offset=0, limit=None, order=None, context=None, count=False, xtra=None):
        user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
        new_args = []
        for arg in args:
            if type(arg) is not tuple:
                new_args += arg
                continue
            if arg[2] == 'USER_PARTNER_IDS':
                new_args += [(arg[0], arg[1], [p.id for p in user.partner_ids])]
            elif arg[2] == 'USER_PAYMENT_MODE_IDS':
                new_args += [(arg[0], arg[1], [m.id for m in user.payment_mode_ids])]
            else:
                new_args += [arg]
        return super(payment_line, self).search(cr, uid, new_args, offset, limit, order, context, count)

Revision history for this message
Chertykov Denis (chertykov) said :
#3

Thanks Serpent Consulting Services, that solved my question.

Revision history for this message
Jose Manuel Martinez Duran (josemanuelmartinezduran) said :
#4

It's very simple

<field name="domain">[('partner_id','=', uid)]</field>

Works like a Charm!