changed <terp> tag to <openerp>
[odoo/odoo.git] / addons / hr / hr_department.py
1 # -*- encoding: utf-8 -*-
2 ##############################################################################
3 #
4 # Copyright (c) 2004-2008 TINY SPRL. (http://tiny.be) All Rights Reserved.
5 #
6 # $Id$
7 #
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
13 # Service Company
14 #
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.
19 #
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.
24 #
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.
28 #
29 ##############################################################################
30
31 from osv import fields,osv
32 import tools
33
34 class hr_department(osv.osv):
35     _name = "hr.department"
36     _columns = {
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'),
44     }
45     def _get_members(self,cr, uid, context={}):
46         mids = self.search(cr, uid, [('manager_id','=',uid)])
47         result = {uid:1}
48         for m in self.browse(cr, uid, mids, context):
49             for user in m.member_ids:
50                 result[user.id] = 1
51         return result.keys()
52     def _check_recursion(self, cr, uid, ids):
53         level = 100
54         while len(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()))
57             if not level:
58                 return False
59             level -= 1
60         return True
61     _constraints = [
62         (_check_recursion, 'Error! You can not create recursive departments.', ['parent_id'])
63     ]
64
65 hr_department()
66
67
68 class ir_action_window(osv.osv):
69     _inherit = 'ir.actions.act_window'
70
71     def read(self, cr, uid, ids, fields=None, context=None,
72             load='_classic_read'):
73         select = ids
74         if isinstance(ids, (int, long)):
75             select = [ids]
76         res = super(ir_action_window, self).read(cr, uid, select, fields=fields,
77                 context=context, load=load)
78         for r in res:
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)):
84             return res[0]
85         return res
86
87 ir_action_window()
88
89
90
91 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
92