From da020d326d7858fd7914c58ed26a729c1c02c9a3 Mon Sep 17 00:00:00 2001 From: Antony Lesuisse Date: Wed, 29 Jan 2014 01:29:13 +0100 Subject: [PATCH] [IMP] hr.department cleanup - Consolidate multiple hr.departement definition into hr.py file - Remove ulgy department_users_get() domain hack on act_window - Add the jobs_ids inverse relationship from departement to jobs bzr revid: al@openerp.com-20140129002913-5qgq10jy9u3xn74e --- addons/hr/__init__.py | 1 - addons/hr/__openerp__.py | 1 - addons/hr/hr.py | 51 ++++++++++++++- addons/hr/hr_department.py | 107 ------------------------------- addons/hr/hr_department_view.xml | 64 ------------------ addons/hr/hr_view.xml | 57 ++++++++++++++++ 6 files changed, 105 insertions(+), 176 deletions(-) delete mode 100644 addons/hr/hr_department.py delete mode 100644 addons/hr/hr_department_view.xml diff --git a/addons/hr/__init__.py b/addons/hr/__init__.py index fbd01761f39..b9782fde6b7 100644 --- a/addons/hr/__init__.py +++ b/addons/hr/__init__.py @@ -19,7 +19,6 @@ # ############################################################################## -import hr_department import hr import res_config diff --git a/addons/hr/__openerp__.py b/addons/hr/__openerp__.py index 8435d787381..ef7225788f6 100644 --- a/addons/hr/__openerp__.py +++ b/addons/hr/__openerp__.py @@ -54,7 +54,6 @@ You can manage: 'security/ir.model.access.csv', 'board_hr_view.xml', 'hr_view.xml', - 'hr_department_view.xml', 'process/hr_process.xml', 'hr_installer.xml', 'hr_data.xml', diff --git a/addons/hr/hr.py b/addons/hr/hr.py index 37d1bae7fea..4b50a8ac84f 100644 --- a/addons/hr/hr.py +++ b/addons/hr/hr.py @@ -330,13 +330,58 @@ class hr_employee(osv.osv): class hr_department(osv.osv): - _description = "Department" - _inherit = 'hr.department' + + def _dept_name_get_fnc(self, cr, uid, ids, prop, unknow_none, context=None): + res = self.name_get(cr, uid, ids, context=context) + return dict(res) + + _name = "hr.department" _columns = { + 'name': fields.char('Department Name', size=64, required=True), + 'complete_name': fields.function(_dept_name_get_fnc, type="char", string='Name'), + 'company_id': fields.many2one('res.company', 'Company', select=True, required=False), + 'parent_id': fields.many2one('hr.department', 'Parent Department', select=True), + 'child_ids': fields.one2many('hr.department', 'parent_id', 'Child Departments'), 'manager_id': fields.many2one('hr.employee', 'Manager'), 'member_ids': fields.one2many('hr.employee', 'department_id', 'Members', readonly=True), + 'jobs_ids': fields.one2many('hr.job', 'department_id', 'Jobs'), + 'note': fields.text('Note'), } + _defaults = { + 'company_id': lambda self, cr, uid, c: self.pool.get('res.company')._company_default_get(cr, uid, 'hr.department', context=c), + } + + def _check_recursion(self, cr, uid, ids, context=None): + if context is None: + context = {} + level = 100 + while len(ids): + cr.execute('select distinct parent_id from hr_department where id IN %s',(tuple(ids),)) + ids = filter(None, map(lambda x:x[0], cr.fetchall())) + if not level: + return False + level -= 1 + return True + + _constraints = [ + (_check_recursion, 'Error! You cannot create recursive departments.', ['parent_id']) + ] + + def name_get(self, cr, uid, ids, context=None): + if context is None: + context = {} + if not ids: + return [] + reads = self.read(cr, uid, ids, ['name','parent_id'], context=context) + res = [] + for record in reads: + name = record['name'] + if record['parent_id']: + name = record['parent_id'][1]+' / '+name + res.append((record['id'], name)) + return res + def copy(self, cr, uid, ids, default=None, context=None): if default is None: default = {} @@ -344,6 +389,7 @@ class hr_department(osv.osv): default['member_ids'] = [] return super(hr_department, self).copy(cr, uid, ids, default, context=context) + class res_users(osv.osv): _name = 'res.users' _inherit = 'res.users' @@ -353,5 +399,4 @@ class res_users(osv.osv): } - # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr/hr_department.py b/addons/hr/hr_department.py deleted file mode 100644 index dded3241b91..00000000000 --- a/addons/hr/hr_department.py +++ /dev/null @@ -1,107 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## - -from openerp.osv import fields, osv -from openerp import tools - -class hr_department(osv.osv): - def name_get(self, cr, uid, ids, context=None): - if context is None: - context = {} - if not ids: - return [] - reads = self.read(cr, uid, ids, ['name','parent_id'], context=context) - res = [] - for record in reads: - name = record['name'] - if record['parent_id']: - name = record['parent_id'][1]+' / '+name - res.append((record['id'], name)) - return res - - def _dept_name_get_fnc(self, cr, uid, ids, prop, unknow_none, context=None): - res = self.name_get(cr, uid, ids, context=context) - return dict(res) - - _name = "hr.department" - _columns = { - 'name': fields.char('Department Name', size=64, required=True), - 'complete_name': fields.function(_dept_name_get_fnc, type="char", string='Name'), - 'company_id': fields.many2one('res.company', 'Company', select=True, required=False), - 'parent_id': fields.many2one('hr.department', 'Parent Department', select=True), - 'child_ids': fields.one2many('hr.department', 'parent_id', 'Child Departments'), - 'note': fields.text('Note'), - } - - _defaults = { - 'company_id': lambda self, cr, uid, c: self.pool.get('res.company')._company_default_get(cr, uid, 'hr.department', context=c), - } - - def _get_members(self, cr, uid, context=None): - mids = self.search(cr, uid, [('manager_id', '=', uid)], context=context) - result = {uid: 1} - for m in self.browse(cr, uid, mids, context=context): - for user in m.member_ids: - result[user.id] = 1 - return result.keys() - - def _check_recursion(self, cr, uid, ids, context=None): - if context is None: - context = {} - level = 100 - while len(ids): - cr.execute('select distinct parent_id from hr_department where id IN %s',(tuple(ids),)) - ids = filter(None, map(lambda x:x[0], cr.fetchall())) - if not level: - return False - level -= 1 - return True - - _constraints = [ - (_check_recursion, 'Error! You cannot create recursive departments.', ['parent_id']) - ] - - -class ir_action_window(osv.osv): - _inherit = 'ir.actions.act_window' - - def read(self, cr, uid, ids, fields=None, context=None, load='_classic_read'): - if context is None: - context = {} - obj_dept = self.pool.get('hr.department') - select = ids - if isinstance(ids, (int, long)): - select = [ids] - res = super(ir_action_window, self).read(cr, uid, select, fields=fields, context=context, load=load) - for r in res: - mystring = 'department_users_get()' - if mystring in (r.get('domain', '[]') or ''): - r['domain'] = r['domain'].replace(mystring, str(obj_dept._get_members(cr, uid))) - if isinstance(ids, (int, long)): - if res: - return res[0] - else: - return False - return res - - - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr/hr_department_view.xml b/addons/hr/hr_department_view.xml deleted file mode 100644 index 6ea43e45b66..00000000000 --- a/addons/hr/hr_department_view.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - - hr.department.form - hr.department - -
- - - - - - - - -
-
-
- - hr.department.tree - hr.department - child_ids - - - - - - - - - - Departments - hr.department - - - - - - - - - - Departments - hr.department - form - - -

- Click to create a department. -

- OpenERP's department structure is used to manage all documents - related to employees by departments: expenses, timesheets, - leaves and holidays, recruitments, etc. -

-
-
- - - -
-
diff --git a/addons/hr/hr_view.xml b/addons/hr/hr_view.xml index e9a859bf44d..eea2eb2ce41 100644 --- a/addons/hr/hr_view.xml +++ b/addons/hr/hr_view.xml @@ -326,6 +326,7 @@ + hr.job.form hr.job @@ -442,5 +443,61 @@ + + + hr.department.form + hr.department + +
+ + + + + + + + +
+
+
+ + hr.department.tree + hr.department + child_ids + + + + + + + + + + Departments + hr.department + + + + + + + + + Departments + hr.department + form + + +

+ Click to create a department. +

+ OpenERP's department structure is used to manage all documents + related to employees by departments: expenses, timesheets, + leaves and holidays, recruitments, etc. +

+
+
+ +