2015-09-17 20 views
1

我已將此添加到res.users型號:如何使用current_user字段進行過濾?

class res_users(osv.osv): 
    _inherit = 'res.users' 

    _columns = {    
     'por_sucursal': fields.boolean('Por Sucursal', help="Es por Sucursal"), 
     'sucursal_u' : fields.many2one('sucursales', 'Sucursal', help="Selecciona la sucursal"),   
    } 

    _defaults = { 
     'por_sucursal': False,    
    }  

res_users() 

我也有模型ordenes.orden

class ordenes_orden(osv.Model): 
    _name = 'ordenes.orden' 
    _description = 'Ordenes de servicio' 
    _columns = {    
     'sucursal' : fields.many2one('sucursales', 'Sucursal', help="Selecciona la sucursal", required= True), 
    }   

ordenes_orden() 

sucursales來的模型來源:

class sucursales(osv.Model): 
    _name = 'sucursales' 
    _description = 'Sucursales de la empresa' 
    _columns = {    
     'name': fields.char('Sucursal', size=50, help="Sucursal"), 
    } 
sucursales() 

最後我加入這個類以及:

class ordenes(osv.Model): 
    _name = 'ordenes.orden' 
    _inherit = 'ordenes.orden' 

    def dame_sucursal(self, cr, uid, ids, field, arg, context=None): 
     res = {} 
     for obj in self.browse(cr, uid, ids, context=context): 
      res[obj.id] = False 
      user = self.pool.get('res.users').browse(cr, uid, uid, context=context) 
      if user and user.sucursal_u and user.por_sucursal: 
       res[obj.id] = user.sucursal_u.id 

     return res 

    _columns = {    
     'name_suc': fields.function(dame_sucursal, type='many2one', store= True, 
               readonly = True, relation='sucursales') 
    }  

ordenes() 

所以我想過濾從sucursal中的所有命令,其中等於在樹視圖中current_user的sucursal。它工作正常,但只是第一次。如果我更改當前用戶的sucursal,則函數字段不會更新。這是我的樹視圖:

<record id="open_view_ordenes_sucursales" model="ir.actions.act_window"> 
    <field name="name">Ordenes</field> 
    <field name="res_model">ordenes.orden</field> 
    <field name="view_type">form</field> 
    <field name="view_mode">tree,form</field> 
    <field name="domain">[('sucursal','=','name_suc'),('state', 'not in', ('done','cancel'))]</field> 
    <field name="view_id" ref="x_sucursal_view_tree"/> 
</record> 

回答

2

你的代碼不能工作,因爲你正在嘗試存儲在ordenes.orden記錄當前用戶的succursal - 這是不可能的,因爲多個用戶可以同時進行搜索訂單時間。

你的樹形圖中使用的domain表達不能正常工作或:('sucursal','=','name_suc')將只顯示訂單,其中succursal正好名爲「name_suc」 - 它沒有任何關係與name_suc領域。每個領域術語的右邊是一個靜態文字值。您可以在Odoo文檔中閱讀more about domains

但有一個更簡單的方法做你想要什麼,假設你succursales應該是類似於Odoo的BUIT-在公司概念;您應該使用類似的技術來過濾記錄:每記錄安全記錄規則(ir.rule)。 嘗試以下操作:

  • 刪除您的訂單上的無用name_suc柱,以及相關領域
  • 創建record ruleir.rule)爲ordenes.orden模型擁有以下域值:[('sucursal', '=', user.sucursal.id)]。你可以做到這一點在用戶界面中進行測試,或者在您的模塊的XML數據創建:

    <record id="ordenes_sucursales_rule" model="ir.rule"> 
        <field name="name">Per sucursal rule</field> 
        <field name="model_id" ref="model_ordenes_orden"/> 
        <field name="domain_force">[('sucursal', '=', user.sucursal_u.id)] 
        </field> 
    </record> 
    

    根據用戶的sucursal處處這會自動過濾訂單,除了Administrator帳戶(ID 1)不受記錄規則限制。

    <record id="ordenes_sucursales_rule" model="ir.rule"> 
        <field name="name">Per sucursal rule</field> 
        <field name="model_id" ref="model_ordenes_orden"/> 
        <field name="domain_force">['|', ('sucursal', '=', False), 
                ('sucursal', '=', user.sucursal_u.id)] 
        </field> 
    </record> 
    

    這裏假設你有一個ordenes.ordensucursal是一個many2onesucursales

    如果您還希望用戶看到一些沒有sucursal訂單,您可以按如下修改規則。

+0

感謝Odony我不知道爲什麼iknew是它使用的規則,這樣讓我試試,我會告訴你 – Leonardo

0

作品perfectlty感謝Odony

<record id="ordenes_sucursales_rule" model="ir.rule"> 
     <field name="name">Per sucursal rule</field> 
     <field name="model_id" ref="model_ordenes_orden"/> 
     <field name="groups" eval="[(4,ref('group_sucursales'))]"></field>   
     <field name="domain_force">[('sucursal','=',user.sucursal_u.id)]</field> 
     <field eval="1" name="perm_write"/> 
     <field eval="1" name="perm_read"/> 
     <field eval="1" name="perm_create"/>       
</record> 
相關問題