This question has been flagged
3 Replies
13702 Views

I want to hide edit button in form issue for specific user. In this case , I want user only can create issue but can't edit any recorded issue. Only admin and project manager that able to Edit recorded issue. I have tried change in access control list and record rules but it's not working. I also have tried change access rights in models project.issue and unchecked write access for user. Then , user can't edit but also can't create. Any one can help me for this case?thank you.

Note : Sorry for asking same question, because this problem isn't solved yet since 4 days ago..

Avatar
Discard
Best Answer

You can make your record in two states :-1.)State="OPEN",2.)State="Submitted". Once you submitted the record then the creator of the record cannot edit it , then only Project Manager or the Admin can edit the record. Make a new Group "Can_Edit_Group" in the settings-->Users-->Groups.And add the project manager into it.

You need to add state and edit_group field in your _columns in your .py file.

_columns={
     'state':fields.selection([('open', 'Open'), ('submitted','Submitted'),],'Status', readonly=True),
     'edit_group':fields.many2one('res.groups', string='HR Manager Group'),
}

def _get_edit_group(self, cr, uid, context=None):
        all_groups=self.pool.get('res.groups')
        edit_group = all_groups.browse(cr, uid, all_groups.search(cr,uid,[('name','=','Can_Edit_Group')])[0]).id
        return edit_group

_defaults = {
    'edit_group':lambda self, cr, uid, context:self._get_edit_group( cr, uid, context=None)
}

def change_state(self, cr, uid, ids, context=None):
        self.write(cr, uid, ids, { 'state' : 'submitted' })
        return True

In XML add a button to change the record state on click. Put the button inside the header tag. If you are inheriting the View then do it using the Xpath else, put the header tag after you open the form tag.

<header>
<group attrs="{'invisible':[('state','=','submitted' )]}">
       <button name="change_state" string="Submit" type="object" states="open" class="oe_highlight"/>
</group>
      <field name="state" widget="statusbar" statusbar_visible="open,submitted"/>
<header>

In the record rule you can enter this rule: This will check if the state="submitted" and edit_group i.e the id of the group of whom users can edit the record are "in" the logged in user group.If this condition satisfy then the logged in user can edit the record else not.

['&',('state','=','submitted'),('edit_group','in',[g.id for g in user.groups_id])]

Give them all the access i.e check the boolean field read,write,create,delete and add the group into it i.e. add the Can_Edit_Group And don forget to add the your object and give record a name. And check the Active field.

I hope this is what you were looking for.

Avatar
Discard
Best Answer

I've seen this question for a few days I though that you already have a solution.

I don't have so much time but this is going to help you. I hope that you know how to code.

def write(self, cr, uid, ids, datas = {}, context = {} ):
          if uid not in self.pool.get('res.users').search(cr, uid, [('login','in',['admin','grover'])]):
             return super(class_name, self).write(cr, uid, ids, datas, context)
      else:
             raise osv.except_osv('Error','You are not allowed to make changes!')

Right now admin and grover can't make changes. You can have 1 or more users on that list ['username1','username2','username3']

It's the easiest way. there are other ways to check groups but as I told you I don't have so much time right now.

Avatar
Discard

Oh. this you have to do it inside your module, or if it's a native module inside the inherited module.

Author

By the way sorry for I asked this question in this 4 days , because it's true..I'm not solve this problem yet.. I am a beginner in openerp..If you don't mind to help me again,. can you tell me how to code in function "if uid .....#check if user belongs to a certain group" above..in this case project user can't edit form issue..thank you for helping me

I hope that can help you.

Author

Big thanks Mr.Grover..hmm I copy your code and follow your instruction above..but it become can't connect to open erp..it's written "No Handler Found"..sorry for distrub you again..if you don't mind would you help me again?which file that I have to code?I already do in file project_issue.py Thank you very much mr Grover

Author

Hai Mr.Grover..sorry for disturbing you again..hmmm if you don't mind to help me again..please response my comment above...because this project deadline in next tuesday so that I really need your help..thank you sir

No Handler found happens when you can't connect to the server. Maybe you modified something that you shouldn't modify. The code above only can produce errors but in the server if has something wrong.

Author

hmmm okei, but when the code above is removed my server is working again..hahaha..btw , thank you for helping me..:)

Author

Can you help me where should i post that code? Is it in project_issue.py ?

Yes, inside that file, inside the class that you want to modify

Author Best Answer

any1 can help me?

Avatar
Discard

Hey, If you want , you can make your edit button disable for some group of users, without hiding them .Will that will work for you ..?

Author

yes, its ok.. can you help me?