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

时间:2014-05-19 16:12:37

标签: python openerp openerp-7

我正在使用时间表模块设置OpenERP 7.0,我希望任何用户只能在使用My timesheet部分编写时间表时看到分配给他的项目。

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

我试过

  1. ACL部分(as said here),
  2. 群组属性,
  3. 用户技术选项,
  4. 但我失败了。标签SummaryDetails的不同行为让我觉得OpenERP代码中存在一些错误。

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

2 个答案:

答案 0 :(得分:1)

您必须使用域规则 你可以在这里找到一个好的答案和解释: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>

希望这会有所帮助!

答案 1 :(得分:0)

试试这个:

您可以获得任何员工分配的项目列表。

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,
        }