Skip to content

Commit

Permalink
[8.0.1.2.0] hr_job_family_modelling/
Browse files Browse the repository at this point in the history
* Put relation between object
  • Loading branch information
andhit-r committed Jan 18, 2019
1 parent f580182 commit 38305c5
Show file tree
Hide file tree
Showing 13 changed files with 430 additions and 19 deletions.
4 changes: 3 additions & 1 deletion hr_job_family_modelling/__openerp__.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"name": "Job Family Modelling",
"summary": "Grading system that divides jobs into coherent groups "
"based on shared characteristics",
"version": "8.0.1.1.0",
"version": "8.0.1.2.0",
"category": "Human Resources",
"website": "https://opensynergy-indonesia.com/",
"author": "OpenSynergy Indonesia",
Expand All @@ -22,6 +22,8 @@
"views/hr_job_grade_views.xml",
"views/hr_job_family_grade_views.xml",
"views/hr_job_family_views.xml",
"views/hr_job_family_level_views.xml",
"views/hr_job_views.xml",
"views/hr_employee_views.xml",
],
}
2 changes: 2 additions & 0 deletions hr_job_family_modelling/models/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,7 @@
hr_job_grade,
hr_job_family_grade,
hr_job_family,
hr_job_family_level,
hr_employee,
hr_job,
)
27 changes: 22 additions & 5 deletions hr_job_family_modelling/models/hr_employee.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,36 @@
# Copyright 2018 OpenSynergy Indonesia
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).

from openerp import models, fields
from openerp import models, fields, api


class HrEmployee(models.Model):
_inherit = "hr.employee"

@api.multi
@api.depends(
"job_id"
)
def _compute_job_grade(self):
for employee in self:
result = False
if employee.job_id:
result = employee.job_id.job_grade_ids.ids
employee.allowed_job_grade_ids = result

job_grade_id = fields.Many2one(
string="Job Grade",
comodel_name="hr.job_grade",
required=False,
)
job_family_grade_id = fields.Many2one(
string="Job Family Grade",
comodel_name="hr.job_family_grade",
required=False,
allowed_job_grade_ids = fields.Many2many(
string="Job Grades",
comodel_name="hr.job_grade",
compute="_compute_job_grade",
store=False,
)
# job_family_grade_id = fields.Many2one(
# string="Job Family Grade",
# comodel_name="hr.job_family_grade",
# required=False,
# )
75 changes: 75 additions & 0 deletions hr_job_family_modelling/models/hr_job.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
# -*- coding: utf-8 -*-
# Copyright 2018 OpenSynergy Indonesia
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).

from openerp import models, fields, api


class HrJob(models.Model):
_inherit = "hr.job"

@api.multi
@api.depends(
"job_family_level_id"
)
def _compute_job_grade(self):
for job in self:
result = False
if job.job_family_level_id:
result = job.job_family_level_id.job_grade_ids.ids
job.allowed_job_grade_ids = result

job_family_level_id = fields.Many2one(
string="Job Family Level",
comodel_name="hr.job_family_level",
)
allowed_job_grade_ids = fields.Many2many(
string="Job Grades",
comodel_name="hr.job_grade",
compute="_compute_job_grade",
store=False,
)
job_grade_ids = fields.Many2many(
string="Job Grades",
comodel_name="hr.job_grade",
relation="rel_job_2_grade",
column1="job_id",
column2="job_grade_id",
)

@api.multi
def onchange_job_family_level_id(self, job_family_level_id):
value = self._get_value_before_onchange_job_family_level_id()
domain = self._get_domain_before_onchange_job_family_level_id()

if job_family_level_id:
obj_job_family_level = self.env["hr.job_family_level"]
job_family_level = obj_job_family_level.browse(
[job_family_level_id])[0]
value = self._get_value_after_onchange_job_family_level_id(
job_family_level
)
domain = self._get_domain_after_onchange_job_family_level_id(
job_family_level
)
return {"value": value, "domain": domain}

@api.multi
def _get_value_before_onchange_job_family_level_id(self):
return {
"job_grade_ids": [],
}

@api.multi
def _get_domain_before_onchange_job_family_level_id(self):
return {}

@api.multi
def _get_value_after_onchange_job_family_level_id(self, job_family_level):
return {
"job_grade_ids": [],
}

@api.multi
def _get_domain_after_onchange_job_family_level_id(self, job_family_level):
return {}
60 changes: 59 additions & 1 deletion hr_job_family_modelling/models/hr_job_family.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,34 @@
# © 2016 OpenSynergy Indonesia
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).

from openerp import models, fields
from openerp import models, fields, api, _
from openerp.exceptions import Warning as UserError


class HrJobFamily(models.Model):
_name = "hr.job_family"
_description = "Job Family"

@api.multi
@api.depends(
"min_job_grade_id",
"max_job_grade_id",
"max_job_grade_id.sequence",
"min_job_grade_id.sequence",
)
def _compute_job_grade_ids(self):
obj_jg = self.env["hr.job_grade"]
job_grade_ids = obj_jg.search([]).ids
for jf in self:
result = []
if jf.min_job_grade_id and jf.max_job_grade_id:
min_job_grade_id = jf.min_job_grade_id.id
max_job_grade_id = jf.max_job_grade_id.id
min_index = job_grade_ids.index(min_job_grade_id)
max_index = job_grade_ids.index(max_job_grade_id)
result = job_grade_ids[min_index:max_index + 1]
jf.job_grade_ids = result

name = fields.Char(
string="Job Family",
required=True,
Expand All @@ -18,10 +39,47 @@ class HrJobFamily(models.Model):
string="Code",
required=True,
)
min_job_grade_id = fields.Many2one(
string="Min. Grade",
comodel_name="hr.job_grade",
required=True,
)
max_job_grade_id = fields.Many2one(
string="Max. Grade",
comodel_name="hr.job_grade",
required=True,
)
job_grade_ids = fields.Many2many(
string="Job Grades",
comodel_name="hr.job_grade",
relation="rel_job_family_2_grade",
column1="job_family_id",
column2="job_grade_id",
compute="_compute_job_grade_ids",
store=True,
readonly=True,
)
active = fields.Boolean(
string="Active",
default=True,
)
note = fields.Text(
string="Note",
)

@api.constrains(
"min_job_grade_id",
"max_job_grade_id",
)
def _check_min_max_grade(self):
obj_jg = self.env["hr.job_grade"]
job_grade_ids = obj_jg.search([]).ids
msg = _("Wrong Max Min Grade")
for jf in self:
if jf.min_job_grade_id and jf.max_job_grade_id:
min_job_grade_id = jf.min_job_grade_id.id
max_job_grade_id = jf.max_job_grade_id.id
min_index = job_grade_ids.index(min_job_grade_id)
max_index = job_grade_ids.index(max_job_grade_id)
if min_index > max_index:
raise UserError(msg)
142 changes: 132 additions & 10 deletions hr_job_family_modelling/models/hr_job_family_level.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,31 +2,80 @@
# © 2016 OpenSynergy Indonesia
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).

from openerp import models, fields
from openerp import models, fields, api, _
from openerp.exceptions import Warning as UserError


class HrJobFamilyLevel(models.Model):
_name = "hr.job.family.level"
_name = "hr.job_family_level"
_description = "Job Family Level"

name = fields.Char(
string="Job Family Level",
required=True,
translate=True,
@api.multi
@api.depends(
"job_family_id",
)
def _compute_job_grade(self):
for jfl in self:
jfl.allowed_job_grade_ids = jfl.job_family_id.job_grade_ids.ids

@api.multi
@api.depends(
"min_job_grade_id",
"max_job_grade_id",
"max_job_grade_id.sequence",
"min_job_grade_id.sequence",
)
def _compute_job_grade_ids(self):
obj_jg = self.env["hr.job_grade"]
job_grade_ids = obj_jg.search([]).ids
for jf in self:
result = []
if jf.min_job_grade_id and jf.max_job_grade_id:
min_job_grade_id = jf.min_job_grade_id.id
max_job_grade_id = jf.max_job_grade_id.id
min_index = job_grade_ids.index(min_job_grade_id)
max_index = job_grade_ids.index(max_job_grade_id)
result = job_grade_ids[min_index:max_index + 1]
jf.job_grade_ids = result

code = fields.Char(
string="Code",
required=True,
)
job_family_id = fields.Many2one(
string="Job Family",
comodel_name="hr.job.family",
required=False,
comodel_name="hr.job_family",
required=True,
)
job_family_grade_id = fields.Many2one(
string="Job Family Grade",
comodel_name="hr.job.family.grade",
required=False,
comodel_name="hr.job_family_grade",
required=True,
)
allowed_job_grade_ids = fields.Many2many(
string="Job Grades",
comodel_name="hr.job_grade",
compute="_compute_job_grade",
store=False,
)
job_grade_ids = fields.Many2many(
string="Job Grades",
comodel_name="hr.job_grade",
relation="rel_job_family_level_2_grade",
column1="job_family_level_id",
column2="job_grade_id",
compute="_compute_job_grade_ids",
store=True,
)
min_job_grade_id = fields.Many2one(
string="Min. Grade",
comodel_name="hr.job_grade",
required=True,
)
max_job_grade_id = fields.Many2one(
string="Max. Grade",
comodel_name="hr.job_grade",
required=True,
)
active = fields.Boolean(
string="Active",
Expand All @@ -35,3 +84,76 @@ class HrJobFamilyLevel(models.Model):
note = fields.Text(
string="Note",
)

@api.multi
def name_get(self):
result = []
for jfl in self:
grade_count = len(jfl.job_grade_ids)
if grade_count == 0:
min_grade = "-"
max_grade = "-"
else:
min_grade = jfl.job_grade_ids[0].name
max_grade = jfl.job_grade_ids[grade_count - 1].name

name = "%s %s (%s - %s)" % (
jfl.job_family_grade_id.name,
jfl.job_family_id.name,
min_grade,
max_grade)
result.append([jfl.id, name])
return result

@api.multi
def onchange_job_family_id(self, job_family_id):
value = self._get_value_before_onchange_job_family_id()
domain = self._get_domain_before_onchange_job_family_id()

if job_family_id:
obj_job_family = self.env["hr.job_family"]
job_family = obj_job_family.browse([job_family_id])[0]
value = self._get_value_after_onchange_job_family_id(
job_family
)
domain = self._get_domain_after_onchange_job_family_id(
job_family
)
return {"value": value, "domain": domain}

@api.multi
def _get_value_before_onchange_job_family_id(self):
return {
"job_grade_ids": [],
}

@api.multi
def _get_domain_before_onchange_job_family_id(self):
return {}

@api.multi
def _get_value_after_onchange_job_family_id(self, job_family):
return {
"job_grade_ids": [],
}

@api.multi
def _get_domain_after_onchange_job_family_id(self, job_family):
return {}

@api.constrains(
"min_job_grade_id",
"max_job_grade_id",
)
def _check_min_max_grade(self):
obj_jg = self.env["hr.job_grade"]
job_grade_ids = obj_jg.search([]).ids
msg = _("Wrong Max Min Grade")
for jf in self:
if jf.min_job_grade_id and jf.max_job_grade_id:
min_job_grade_id = jf.min_job_grade_id.id
max_job_grade_id = jf.max_job_grade_id.id
min_index = job_grade_ids.index(min_job_grade_id)
max_index = job_grade_ids.index(max_job_grade_id)
if min_index > max_index:
raise UserError(msg)
Loading

0 comments on commit 38305c5

Please sign in to comment.