odoo 12:如何计算通用性指数

2024-05-19 00:21:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两种型号: 第一个(‘hr.多价’)

 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_多价中添加多个技能时,我会得到一个错误提升值错误(“预期的单例::%s”%self) ValueError:预期的单态:hr.多价(15,16)

有人能帮我找到正确的结石吗


Tags: selfidfieldsstringrateemployeehrjob
1条回答
网友
1楼 · 发布于 2024-05-19 00:21:38

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

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

谢谢

相关问题 更多 >

    热门问题