1 # -*- encoding: utf-8 -*-
2 ##############################################################################
4 # Copyright (c) 2004-2008 TINY SPRL. (http://tiny.be) All Rights Reserved.
8 # WARNING: This program as such is intended to be used by professional
9 # programmers who take the whole responsability of assessing all potential
10 # consequences resulting from its eventual inadequacies and bugs
11 # End users who are looking for a ready-to-use solution with commercial
12 # garantees and support are strongly adviced to contract a Free Software
15 # This program is Free Software; you can redistribute it and/or
16 # modify it under the terms of the GNU General Public License
17 # as published by the Free Software Foundation; either version 2
18 # of the License, or (at your option) any later version.
20 # This program is distributed in the hope that it will be useful,
21 # but WITHOUT ANY WARRANTY; without even the implied warranty of
22 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23 # GNU General Public License for more details.
25 # You should have received a copy of the GNU General Public License
26 # along with this program; if not, write to the Free Software
27 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
29 ##############################################################################
31 from osv import fields,osv
34 class hr_department(osv.osv):
35 _name = "hr.department"
37 'name': fields.char('Department Name', size=64, required=True),
38 'company_id': fields.many2one('res.company', 'Company', select=True, required=True),
39 'parent_id': fields.many2one('hr.department', 'Parent Department', select=True),
40 'child_ids': fields.one2many('hr.department', 'parent_id', 'Childs Departments'),
41 'note': fields.text('Note'),
42 'manager_id': fields.many2one('res.users', 'Manager', required=True),
43 'member_ids': fields.many2many('res.users', 'hr_department_user_rel', 'department_id', 'user_id', 'Members'),
45 def _get_members(self,cr, uid, context={}):
46 mids = self.search(cr, uid, [('manager_id','=',uid)])
48 for m in self.browse(cr, uid, mids, context):
49 for user in m.member_ids:
52 def _check_recursion(self, cr, uid, ids):
55 cr.execute('select distinct parent_id from hr_department where id in ('+','.join(map(str,ids))+')')
56 ids = filter(None, map(lambda x:x[0], cr.fetchall()))
62 (_check_recursion, 'Error! You can not create recursive departments.', ['parent_id'])
68 class ir_action_window(osv.osv):
69 _inherit = 'ir.actions.act_window'
71 def read(self, cr, uid, ids, fields=None, context=None,
72 load='_classic_read'):
74 if isinstance(ids, (int, long)):
76 res = super(ir_action_window, self).read(cr, uid, select, fields=fields,
77 context=context, load=load)
79 mystring = 'department_users_get()'
80 if mystring in (r.get('domain', '[]') or ''):
81 r['domain'] = r['domain'].replace(mystring, str(
82 self.pool.get('hr.department')._get_members(cr, uid)))
83 if isinstance(ids, (int, long)):
91 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: