I solved the problem
I couldn't find a regular way to do what i wanted.
I feel this is a bit hackish way to achieve what i wanted; what i did was override the fields-view_get method and implemented what i wanted in that.
here's a sample code of what i did, maybe it'll help other looking to implement similar functionality
def fields_view_get(self, cr, user, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
"""
Overrides orm field_view_get.
@return: Dictionary of Fields, arch and toolbar.
"""
res = {}
res = super(employee_exit, self).fields_view_get(cr, user, view_id, view_type,
context, toolbar=toolbar, submenu=submenu)
hr_employee = self.pool.get('hr.employee')
emp = hr_employee.search(cr, user, [('user_id', '=', user)])[0]
logged_employee = hr_employee.browse(cr, user, emp)
from lxml import etree
doc=etree.XML(res['arch'])
for node in doc.xpath("//field[@name='target_employee_id']"):
if not logged_employee.department_id.name == "Human Resources":
node.set('domain', "['&','|',('parent_id.user_id', '=', uid),('department_id.manager_id.user_id','=',uid),('user_id','!=',uid)]")
elif logged_employee.department_id.manager_id.user_id.id==user:
node.set('domain', "[('user_id','!=',uid)]")
else:
node.set('domain', "['&','&',('user_id','!=',uid),('user_id','!=',"+str(logged_employee.department_id.manager_id.user_id.id)+\
"),('user_id','!=',"+str(logged_employee.parent_id.user_id.id)+")]")
res['arch']=etree.tostring(doc)
return res
EDIT: I can't mark this as the answer as i don't have sufficient points. if somebody finds it useful and doesn't know of any better method please mark this as the answer so it may be visible to others in need at the top
No one know how to do it? is it even possible?