首页 > 解决方案 > 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)

有人可以帮我得到正确的计算吗?

标签: pythonodoo

解决方案


那是因为你得到了多条记录。所以尝试替换这段代码,

versatility = self.env['hr.polyvalence'].search([('job_id', '=', rec.job_id.id)])
for vers in versatility:
    weight = vers.weight
    rate = level * weight
    somme += rate

谢谢


推荐阅读