1
##############################################################################
3
# Copyright (c) 2004 TINY SPRL. (http://tiny.be) All Rights Reserved.
4
# Fabien Pinckaers <fp@tiny.Be>
6
# WARNING: This program as such is intended to be used by professional
7
# programmers who take the whole responsability of assessing all potential
8
# consequences resulting from its eventual inadequacies and bugs
9
# End users who are looking for a ready-to-use solution with commercial
10
# garantees and support are strongly adviced to contract a Free Software
13
# This program is Free Software; you can redistribute it and/or
14
# modify it under the terms of the GNU General Public License
15
# as published by the Free Software Foundation; either version 2
16
# of the License, or (at your option) any later version.
18
# This program is distributed in the hope that it will be useful,
19
# but WITHOUT ANY WARRANTY; without even the implied warranty of
20
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
# GNU General Public License for more details.
23
# You should have received a copy of the GNU General Public License
24
# along with this program; if not, write to the Free Software
25
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
27
##############################################################################
30
# ON peut choisir lors de la definititon
31
# d'un skill de lui associer des skills
32
# de substitution et d'y associer des poids
33
# (et donc plus d'arbre ..)
35
from osv import osv, fields
38
# eg: years, in english, ..
39
class hr_skill_weight_category(osv.osv):
40
_name ='hr_skill.weight.category'
42
'name': fields.char('Name', size=64, required=True),
45
hr_skill_weight_category()
49
# eg: 0 to 1, more than 5, good, bad
50
class hr_skill_weight(osv.osv):
51
_name ='hr_skill.weight'
53
'name': fields.char('Name', size=64,required=True),
54
'value': fields.float('Numerical value', required=True),
55
'category_id': fields.many2one('hr_skill.weight.category', 'Category', required=True, ondelete='cascade', relate=True), # relate -> click droit dispo
56
}# hr_skill.category ne passe pas (cad creation des tables) la premiere fois (hr_skill_category bien)
62
# eg : Spanish, OO programming (-> skill)
63
# Langage, IT (->view)
64
# Categories of weight
65
class hr_skill_skill(osv.osv):
66
_name = 'hr_skill.skill'
68
'name': fields.char('Name', size=64,required=True),
69
'active': fields.boolean('Active'),
70
'weight': fields.float('Weight', required=True),
71
'weight_category_id': fields.many2one('hr_skill.weight.category','Weight Category'),
72
'parent_id': fields.many2one('hr_skill.skill', 'Parent', ondelete='cascade'),
73
'child_ids': fields.one2many('hr_skill.skill', 'parent_id', 'Childs'),
74
'view': fields.selection([('view','View'), ('skill','Skill')], 'Skill', required=True),
77
'view': lambda self,cr,uid,context: 'view',
78
'weight': lambda self,cr,uid,context: 0,
79
'active': lambda self,cr,uid,context: 1
86
# eg : a degree or a professional experience
87
class hr_skill_experience_category(osv.osv):
88
_name ='hr_skill.experience.category'
90
'name': fields.char('Name', size=64,required=True),
92
hr_skill_experience_category()
96
# eg : a specific former job position or studies
97
# each experience is associated with several couple skill - weight
98
class hr_skill_experience(osv.osv):
99
_name ='hr_skill.experience'
101
'name': fields.char('Name', size=64,required=True),
102
'skill_ids': fields.one2many('hr_skill.experience.skill','experience_id','Skills'),
103
'sequence': fields.integer('Sequence'),
104
'category_id' : fields.many2one('hr_skill.experience.category', 'Category'),
106
hr_skill_experience()
109
# Evaluation Category
110
class hr_skill_evaluation_category(osv.osv):
111
_name ='hr_skill.evaluation.category'
113
'name': fields.char('Name', size=64,required=True),
115
hr_skill_evaluation_category()
118
class hr_skill_evaluation(osv.osv):
119
_name ='hr_skill.evaluation'
121
'name': fields.char('Evaluation name', size=64,required=True),
122
'date': fields.date('Date',required=True),
123
'interviewer_name': fields.char('Evaluator', size=64,required=True),
124
'interviewee_name': fields.char('Evaluated People', size=64,required=True),
125
'employee_id': fields.many2one('hr.employee', 'Evaluated Employee'),
126
'note': fields.text('Notes'),
127
'reference': fields.char('Reference', size=64),
128
'category_id': fields.many2one('hr_skill.evaluation.category', 'Category', change_default=True),
129
'experience_ids': fields.one2many('hr_skill.evaluation.experience','evaluation_id','Experience'),
130
'skill_ids': fields.one2many('hr_skill.evaluation.skill','evaluation_id','Skill'),
133
def onchange_employee_id(self, cr, uid, ids, employee_id):
136
empl = self.pool.get('hr.employee').browse(cr, uid, employee_id)
137
return {'value': {'interviewee_name':empl.name} }
139
hr_skill_evaluation()
142
# eg : management, web-dev.
143
# each profile is associated with several couple skill - weight
144
class hr_skill_profile(osv.osv):
145
_name ='hr_skill.profile'
147
'name': fields.char('Name', size=64, required=True),
148
'skill_ids': fields.one2many('hr_skill.profile.skill','profile_id','Skills'),
154
# eg : Senior web-dev, junior logistician
155
# a position is associated to one (or several) profile
156
class hr_skill_position(osv.osv):
157
_name ='hr_skill.position'
159
'name': fields.char('Name', size=64, required=True),
160
'employee_id': fields.many2one('hr.employee', 'Assigned Employee'),# ?? pq un many2one ?
161
'profile_ids': fields.one2many('hr_skill.position.profile', 'position_id', 'Profiles'),
162
'status': fields.selection([('open','Open'), ('assigned','Assigned'), ('unused','Unused')], 'Status'),
168
# definitition des relations :
169
class hr_skill_position_profile(osv.osv):
170
_name ='hr_skill.position.profile'
172
'name': fields.char('Name', size=64),
173
'weight_id': fields.many2one('hr_skill.weight','Weight',required=True),
174
'position_id': fields.many2one('hr_skill.position','Position', ondelete='cascade',required=True),
175
'profile_id': fields.many2one('hr_skill.profile','Profile', ondelete='cascade',required=True) ,
177
def onchange_profile_id(self, cr, uid, ids, profile_id):
180
prof = self.pool.get('hr_skill.profile').browse(cr, uid, profile_id)
181
return {'value': {'name':prof.name} }
182
hr_skill_position_profile()
185
class hr_skill_experience_skill(osv.osv):
186
_name ='hr_skill.experience.skill'
188
'name': fields.char('Name', size=64, required=True),
189
'weight_id': fields.many2one('hr_skill.weight','Weight', required=True),
190
'skill_id': fields.many2one('hr_skill.skill','Skill', ondelete='cascade',required=True),
191
'experience_id': fields.many2one('hr_skill.experience','Experience', ondelete='cascade',required=True) ,
193
def onchange_skill_id(self, cr, uid, ids, skill_id):
196
sk = self.pool.get('hr_skill.skill').browse(cr, uid, skill_id)
197
return {'value': {'name':sk.name} }
199
hr_skill_experience_skill()
203
class hr_skill_profile_skill(osv.osv):
204
_name ='hr_skill.profile.skill'
206
'name': fields.char('Name', size=64),
207
'weight_id': fields.many2one('hr_skill.weight','Weight',required=True),
208
'profile_id': fields.many2one('hr_skill.profile','Profile', ondelete='cascade',required=True),
209
'skill_id': fields.many2one('hr_skill.skill','Skill', ondelete='cascade',required=True, domain=[('view','<>','view')]),
212
def onchange_skill_id(self, cr, uid, ids, skill_id):
215
sk = self.pool.get('hr_skill.skill').browse(cr, uid, skill_id)
216
return {'value': {'name':sk.name} }
218
hr_skill_profile_skill()
222
class hr_skill_position_profile(osv.osv):
223
_name ='hr_skill.position.profile'
225
'name': fields.char('Name', size=64),
226
'weight_id': fields.many2one('hr_skill.weight','Weight',required=True, ondelete='cascade'),
227
'position_id': fields.many2one('hr_skill.position','Position', ondelete='cascade',required=True),
228
'profile_id': fields.many2one('hr_skill.profile','Profile', ondelete='cascade',required=True),
230
hr_skill_profile_skill()
234
class hr_skill_evaluation_experience(osv.osv):
235
_name ='hr_skill.evaluation.experience'
237
'name': fields.char('Name', size=64,required=True),
238
'weight_id': fields.many2one('hr_skill.weight','Weight',required=True),
239
'evaluation_id': fields.many2one('hr_skill.evaluation','Evaluation', ondelete='cascade', required=True),
240
'experience_id': fields.many2one('hr_skill.experience','Experience', ondelete='cascade', required=True),
243
def onchange_experience_id(self, cr, uid, ids, experience_id):
244
if not experience_id:
246
exp = self.pool.get('hr_skill.experience').browse(cr, uid, experience_id)
247
return {'value': {'name':exp.name} }
249
hr_skill_evaluation_experience()
253
class hr_skill_evaluation_skill(osv.osv):
254
_name ='hr_skill.evaluation.skill'
256
'name': fields.char('Name', size=64),
257
'weight_id': fields.many2one('hr_skill.weight','Weight',required=True),
258
'evaluation_id': fields.many2one('hr_skill.evaluation','Evaluation', ondelete='cascade', required=True),
259
'skill_id': fields.many2one('hr_skill.skill','Skill', ondelete='cascade', required=True),
261
def onchange_skill_id(self, cr, uid, ids, skill_id):
264
sk = self.pool.get('hr_skill.skill').browse(cr, uid, skill_id)
265
return {'value': {'name':sk.name} }
267
hr_skill_evaluation_skill()