python - odoo 12:如何计算多功能性指数
问题描述
我有 2 个模型:第一个('hr.polyvalence')
class Polyvalence(models.Model):
_name = 'hr.polyvalence'
job_id = fields.Many2one('hr.job', string='Job')
skill_id = fields.Many2one('hr.skill', string='Skills')
weight = fields.Integer(string='Weight')
例子 :
Job | skills | weight
------|------- |--------
job1 | skill1 |3
------|--------|--------
| skill2 |2
------------------------
job2 | skill1 |1
------|--------|--------
| skill3 |2
第二个(_inherit = 'hr.employee')
class EmployeePolyvalence(models.Model):
_inherit = 'hr.employee'
rate_skill = fields.Float(string="Rate", compute="_compute_rate_skill")
@api.multi
@api.depends('job_id', 'employee_skill_ids')
def _compute_rate_skill(self):
somme = 0
for rec in self:
if rec.job_id and rec.employee_skill_ids:
for skill in rec.employee_skill_ids:
if skill.level == '0':
level = 1
elif skill.level == '1':
level = 2
elif skill.level == '2':
level = 3
elif skill.level == '3':
level = 4
versatility = self.env['hr.polyvalence'].search([('job_id', '=', rec.job_id.id)])
if versatility:
weight = versatility.weight
rate = level * weight
somme += rate
rec.rate_skill = somme
例子 :
Employee | skills | level
----------|------- |--------
employee1 | skill1 |1
----------|--------|--------
| skill2 |3
----------|--------|---------
我想用这两个公式计算多功能指数:
*Score of employee1:
job1= (1*3 + 3*2) / (3+2) = 1.8 Sum (level*Weight) / Sum(Weight)
job2=.....= 2
job3=.....= 3
*Versatility index= (3+2+1.8)/ (3*3) = 75 % Sum (Job Note) /( Number of Jobs * 3)
但是在 hr_polyvalence 添加多个技能时,我得到一个错误 raise Value error("Expected singleton: : %s" % self ValueError: Expected singleton:hr.polyvalence(15,16)
有人可以帮我得到正确的计算吗?
解决方案
那是因为你得到了多条记录。所以尝试替换这段代码,
versatility = self.env['hr.polyvalence'].search([('job_id', '=', rec.job_id.id)])
for vers in versatility:
weight = vers.weight
rate = level * weight
somme += rate
谢谢