如何限制OpenERP“我的时间表”项目列表?

问题描述:

我使用时间表模块设置了OpenERP 7.0,我希望任何用户在编写时间表时都能看到分配给他的项目,使用部分My timesheet如何限制OpenERP“我的时间表”项目列表?

我的问题是,当我登录的用户,在My timesheet>标签Summary,当我和添加一行我可以看到所有的项目和解析账户。但是,如果我使用My timesheet>标签Details,我只能看到内部项目。

我试图

  1. ACL部分(as said here
  2. 组属性,
  3. 用户的技术选择,

,但我失败了。标签SummaryDetails的不同行为使我认为OpenERP代码中存在一些错误。

如何管理为用户列出的项目?

您必须使用域规则。
你可以找到一个很好的答案和解释在这里:Understanding OpenERP Domain Filter?

要配置域规则,去Settings >> Technical >> Security >> Record Rules

在另一方面,如果你想创建你的域规则,你安装你的模块,它可能将它们存储在XML文件中会很有用。 我会给你一个我正在使用的例子。

<?xml version="1.0"?> 
<openerp> 
    <data> 
     <!-- ########################### OPINIONS ############################# --> 
     <!-- everyone can see issued opinions, but can't edit them --> 
     <record id="proc_uc_see_issued_opinions_rule" model="ir.rule"> 
      <field name="name">See issued opinions rule</field> 
      <field name="model_id" ref="model_opinion"/> 
      <field name="domain_force">[('state','=','issued')]</field> 
      <field name="perm_read" eval="True"/> <!-- can see --> 
      <field name="perm_write" eval="False"/> <!-- can't change it --> 
      <field name="perm_unlink" eval="False"/> 
      <field name="perm_create" eval="False"/>    
      <!--<field name="global" eval="True"/>--> 
      <field name="global" eval="0" /> 
      <field name="groups" eval="[(6,0,[ref('processos_uc.group_processos_user')])]"/>   
     </record> 

     <!-- consultant can see and edit his opinion requests --> 
     <record id="proc_uc_see_own_opinions_rule" model="ir.rule"> 
      <field name="name">See own opinions rule</field> 
      <field name="model_id" ref="model_opinion"/> 
      <field name="domain_force">['|',('consultant_uid','=',user.id),('consultant_uid','=',False)]</field> 
      <field name="perm_read" eval="True"/> 
      <field name="perm_write" eval="True"/> 
      <field name="perm_unlink" eval="True"/> 
      <field name="perm_create" eval="True"/>    
      <field name="global" eval="0" /> 
      <field name="groups" eval="[(6,0,[ref('processos_uc.group_processos_user')])]"/>   
     </record> 
(...) 
     <!-- managers can do anything on opipions! --> 
     <record id="proc_uc_managers_can_do_anything_opinions_rule" model="ir.rule"> 
      <field name="name">Managers can do anything on opinions rule</field> 
      <field name="model_id" ref="model_opinion"/> 
      <field name="domain_force">[(1,'=',1)]</field> 
      <field name="perm_read" eval="True"/> 
      <field name="perm_write" eval="True"/> 
      <field name="perm_unlink" eval="True"/> 
      <field name="perm_create" eval="True"/>    
      <field name="global" eval="0" /> 
      <field name="groups" eval="[(6,0,[ref('processos_uc.group_processos_manager')])]"/>   
     </record> 
    </data> 
</openerp> 

希望这会有所帮助!

+0

谢谢,这有助于我编写规则的语法。不幸的是,我仍然无法理解我必须创建或更改哪些规则才能获得所需的可视化。我不太了解openERP对象,很难猜测这些字段。 – Radioleao

+0

转到'设置>>技术>>数据库结构>>模型'并搜索您要应用规则的模型(您可以使用搜索框或列出所有对象 - 如果尚未显示)单击_“xxx的1-80”_在搜索框的右上角,选择“无限”) 确定您想要限制的字段的名称(它可能会是'user_id',它肯定会是('your_field_name','=',user.id),('your_field_name','=',False)]'' –

+0

我已经尝试过,但我完全错了。我必须找到'用户关联到项目'或'用户关注项目'的字段。请,你能帮我找到那个,并写出规则吗? – Radioleao

试试这个:

你可以取其员工分配了项目列表。

def default_project(self, cr, uid, context=None): 
    cr.execute('''select project_id from project_team_members where uid=%s and is_active='t' limit 1''',(uid,)) 
    project_id=cr.fetchone() 
    if project_id: 
     return project_id and project_id[0] or False 
    return False 

_defaults = { 
     'project_id':default_project, 
     }