diff --git a/hr_job_family_modelling/__openerp__.py b/hr_job_family_modelling/__openerp__.py
index d4437dc0..cee7c1b3 100644
--- a/hr_job_family_modelling/__openerp__.py
+++ b/hr_job_family_modelling/__openerp__.py
@@ -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",
@@ -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",
],
}
diff --git a/hr_job_family_modelling/models/__init__.py b/hr_job_family_modelling/models/__init__.py
index 9630f8fd..97ca8884 100644
--- a/hr_job_family_modelling/models/__init__.py
+++ b/hr_job_family_modelling/models/__init__.py
@@ -7,5 +7,7 @@
hr_job_grade,
hr_job_family_grade,
hr_job_family,
+ hr_job_family_level,
hr_employee,
+ hr_job,
)
diff --git a/hr_job_family_modelling/models/hr_employee.py b/hr_job_family_modelling/models/hr_employee.py
index ed80130d..2cfb529f 100644
--- a/hr_job_family_modelling/models/hr_employee.py
+++ b/hr_job_family_modelling/models/hr_employee.py
@@ -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,
+ # )
diff --git a/hr_job_family_modelling/models/hr_job.py b/hr_job_family_modelling/models/hr_job.py
new file mode 100644
index 00000000..cae2b3f5
--- /dev/null
+++ b/hr_job_family_modelling/models/hr_job.py
@@ -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 {}
diff --git a/hr_job_family_modelling/models/hr_job_family.py b/hr_job_family_modelling/models/hr_job_family.py
index 98fd7f0f..d589aa10 100644
--- a/hr_job_family_modelling/models/hr_job_family.py
+++ b/hr_job_family_modelling/models/hr_job_family.py
@@ -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,
@@ -18,6 +39,26 @@ 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,
@@ -25,3 +66,20 @@ class HrJobFamily(models.Model):
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)
diff --git a/hr_job_family_modelling/models/hr_job_family_level.py b/hr_job_family_modelling/models/hr_job_family_level.py
index 293bb6c3..750411a1 100644
--- a/hr_job_family_modelling/models/hr_job_family_level.py
+++ b/hr_job_family_modelling/models/hr_job_family_level.py
@@ -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",
@@ -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)
diff --git a/hr_job_family_modelling/models/hr_job_grade.py b/hr_job_family_modelling/models/hr_job_grade.py
index dfef84f4..7e24cd06 100644
--- a/hr_job_family_modelling/models/hr_job_grade.py
+++ b/hr_job_family_modelling/models/hr_job_grade.py
@@ -19,6 +19,11 @@ class HrJobGrade(models.Model):
comodel_name="hr.job_grade_category",
required=False,
)
+ sequence = fields.Integer(
+ string="Sequence",
+ required=True,
+ default=5,
+ )
code = fields.Char(
string="Code",
required=True,
diff --git a/hr_job_family_modelling/security/ir.model.access.csv b/hr_job_family_modelling/security/ir.model.access.csv
index ffb9c776..09c09443 100644
--- a/hr_job_family_modelling/security/ir.model.access.csv
+++ b/hr_job_family_modelling/security/ir.model.access.csv
@@ -7,3 +7,5 @@ hr_job_family_grade_employee,hr.job_family_grade - employee,model_hr_job_family_
hr_job_family_grade_all,hr.job_family_grade - all,model_hr_job_family_grade,,1,0,0,0
hr_job_family_employee,hr.job_family - employee,model_hr_job_family,base.group_user,1,1,1,1
hr_job_family_all,hr.job_family - all,model_hr_job_family,,1,0,0,0
+hr_job_family_level_employee,hr.job_family_level - employee,model_hr_job_family_level,base.group_user,1,1,1,1
+hr_job_family_level_all,hr.job_family_level - all,model_hr_job_family_level,,1,0,0,0
diff --git a/hr_job_family_modelling/views/hr_employee_views.xml b/hr_job_family_modelling/views/hr_employee_views.xml
index 9e5ecb0c..c2700b76 100644
--- a/hr_job_family_modelling/views/hr_employee_views.xml
+++ b/hr_job_family_modelling/views/hr_employee_views.xml
@@ -13,8 +13,8 @@
-
-
+
+
diff --git a/hr_job_family_modelling/views/hr_job_family_level_views.xml b/hr_job_family_modelling/views/hr_job_family_level_views.xml
new file mode 100644
index 00000000..113bed31
--- /dev/null
+++ b/hr_job_family_modelling/views/hr_job_family_level_views.xml
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+ tree hr.job_family_level
+ hr.job_family_level
+
+
+
+
+
+
+
+
+
+
+
+
+ form hr.job_family_level
+ hr.job_family_level
+
+
+
+
+
+
+ Job Family Level
+ hr.job_family_level
+ form
+ tree,form
+
+
+
+
+
+
diff --git a/hr_job_family_modelling/views/hr_job_family_views.xml b/hr_job_family_modelling/views/hr_job_family_views.xml
index a00881dc..81937402 100644
--- a/hr_job_family_modelling/views/hr_job_family_views.xml
+++ b/hr_job_family_modelling/views/hr_job_family_views.xml
@@ -13,6 +13,8 @@
+
+
@@ -26,8 +28,19 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/hr_job_family_modelling/views/hr_job_grade_views.xml b/hr_job_family_modelling/views/hr_job_grade_views.xml
index ac8e6dc4..0de606ee 100644
--- a/hr_job_family_modelling/views/hr_job_grade_views.xml
+++ b/hr_job_family_modelling/views/hr_job_grade_views.xml
@@ -11,6 +11,7 @@
hr.job_grade
+
@@ -26,6 +27,7 @@
+
diff --git a/hr_job_family_modelling/views/hr_job_views.xml b/hr_job_family_modelling/views/hr_job_views.xml
new file mode 100644
index 00000000..788bc2c3
--- /dev/null
+++ b/hr_job_family_modelling/views/hr_job_views.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+ hr.job tree
+ hr.job
+
+
+
+
+
+
+
+
+
+
+
+ hr.job form
+ hr.job
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+