Skip to content

Commit

Permalink
[REF] hr_course: training plan planning ISO 9001
Browse files Browse the repository at this point in the history
  • Loading branch information
FernandoRomera authored and manishkumarbohra committed Nov 14, 2023
1 parent 0409ae1 commit c4bb6d3
Show file tree
Hide file tree
Showing 13 changed files with 456 additions and 245 deletions.
2 changes: 2 additions & 0 deletions hr_course/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
"security/ir.model.access.csv",
"views/hr_course_category_views.xml",
"views/hr_course_views.xml",
"views/hr_course_schedule_views.xml",
"views/hr_employee_views.xml",
],
"demo": ["demo/hr_course.xml"],
}
33 changes: 33 additions & 0 deletions hr_course/demo/hr_course.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="hr_course_category_it" model="hr.course.category">
<field name="name">Department IT</field>
</record>
<record id="hr_course_category_language" model="hr.course.category">
<field name="name">Languages</field>
</record>
<record id="hr_course_qsa" model="hr.course">
<field name="name">Qualified Security Assessor Training (QSA)</field>
<field name="category_id" ref="hr_course_category_it" />
</record>
<record id="hr_course_isa" model="hr.course">
<field name="name">Internal Security Assessor Training (ISA)</field>
<field name="category_id" ref="hr_course_category_it" />
</record>
<record id="hr_course_schedule_qsa_october" model="hr.course.schedule">
<field name="name">QSA October</field>
<field name="course_id" ref="hr_course_qsa" />
<field name="start_date">2021-10-21</field>
<field name="end_date">2021-10-21</field>
<field name="cost">100</field>
<field name="authorized_by" ref="hr.employee_hne" />
</record>
<record id="hr_course_schedule_qsa_november" model="hr.course.schedule">
<field name="name">QSA November</field>
<field name="course_id" ref="hr_course_qsa" />
<field name="start_date">2021-11-29</field>
<field name="end_date">2021-11-29</field>
<field name="cost">100</field>
<field name="authorized_by" ref="hr.employee_hne" />
</record>
</odoo>
9 changes: 9 additions & 0 deletions hr_course/migrations/13.0.2.0.0/noupdate_changes.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record model="ir.rule" id="hr_employee_course_rule">
<field name="model_id" ref="model_hr_course_schedule" />
</record>
<record model="ir.rule" id="hr_employee_course_manager_rule">
<field name="model_id" ref="model_hr_course_schedule" />
</record>
</odoo>
26 changes: 26 additions & 0 deletions hr_course/migrations/13.0.2.0.0/post-migrations.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).

from openupgradelib import openupgrade # pylint: disable=W7936


@openupgrade.migrate()
def migrate(env, version):
openupgrade.load_data(
env.cr, "hr_course", "migrations/13.0.2.0.0/noupdate_changes.xml"
)

openupgrade.logged_query(
env.cr,
"""
SELECT setval('hr_course_schedule_id_seq', MAX(id))
FROM hr_course_schedule
""",
)

openupgrade.logged_query(
env.cr,
"""
SELECT setval('hr_course_id_seq', MAX(id))
FROM hr_course
""",
)
33 changes: 33 additions & 0 deletions hr_course/migrations/13.0.2.0.0/pre-migration.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).

from openupgradelib import openupgrade # pylint: disable=W7936

_models_renames = [
("hr.course", "hr.course.schedule"),
]


@openupgrade.migrate()
def migrate(env, version):
openupgrade.rename_models(env, _models_renames)

openupgrade.logged_query(
env.cr,
"""
SELECT id, name, category_id, permanence, permanence_time
INTO hr_course
FROM hr_course_schedule
""",
)

openupgrade.logged_query(
env.cr, "ALTER TABLE hr_course_schedule ADD course_id int4"
)

openupgrade.logged_query(
env.cr,
"""
UPDATE hr_course_schedule
SET course_id = id
""",
)
120 changes: 63 additions & 57 deletions hr_course/models/hr_course.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,13 @@
from odoo.exceptions import ValidationError


class HrCourse(models.Model):
_name = "hr.course"
_description = "Course"
class HrCourseSchedule(models.Model):
_name = "hr.course.schedule"
_description = "Course Schedule"
_inherit = "mail.thread"

name = fields.Char(string="Name", required=True, tracking=True)
category_id = fields.Many2one(
"hr.course.category",
string="Category",
required=True,
)
course_id = fields.Many2one("hr.course", string="Course", required=True)

start_date = fields.Date(
string="Start date",
Expand Down Expand Up @@ -43,22 +39,6 @@ class HrCourse(models.Model):
states={"draft": [("readonly", False)]},
tracking=True,
)
permanence = fields.Boolean(
string="Has Permanence",
readonly=True,
states={"draft": [("readonly", False)]},
tracking=True,
help="Check if the participants of this course are restricted to"
" stay in the company for a certain period of time.",
)
permanence_time = fields.Char(
string="Permanence time",
readonly=True,
states={"draft": [("readonly", False)]},
tracking=True,
help="Amount of time the employee is restricted to stay in the"
" company by participating to this course.",
)
state = fields.Selection(
[
("draft", "Draft"),
Expand All @@ -73,14 +53,20 @@ class HrCourse(models.Model):
default="draft",
tracking=True,
)

comment = fields.Text("Comment")
training_company_id = fields.Many2one("res.partner", string="Training company")
instructor_ids = fields.Many2many("res.partner", string="Instructor")
place = fields.Char("Place")

attendant_ids = fields.Many2many(
"hr.employee",
readonly=True,
states={"waiting_attendees": [("readonly", False)]},
)
course_attendee_ids = fields.One2many(
"hr.course.attendee",
inverse_name="course_id",
inverse_name="course_schedule_id",
readonly=True,
states={"in_validation": [("readonly", False)]},
)
Expand All @@ -97,17 +83,11 @@ def all_passed(self):
for attendee in self.course_attendee_ids:
attendee.result = "passed"

@api.onchange("permanence")
def _onchange_permanence(self):
self.permanence_time = False

def _draft2waiting_values(self):
return {
"state": "waiting_attendees",
}
return {"state": "waiting_attendees"}

def _attendee_values(self, attendee):
return {"employee_id": attendee.id, "course_id": self.id}
return {"employee_id": attendee.id, "course_schedule_id": self.id}

def _waiting2inprogress_values(self):
attendants = []
Expand All @@ -130,24 +110,16 @@ def _waiting2inprogress_values(self):
return {"state": "in_progress", "course_attendee_ids": attendants}

def _inprogress2validation_values(self):
return {
"state": "in_validation",
}
return {"state": "in_validation"}

def _validation2complete_values(self):
return {
"state": "completed",
}
return {"state": "completed"}

def _back2draft_values(self):
return {
"state": "draft",
}
return {"state": "draft"}

def _cancel_course_values(self):
return {
"state": "cancelled",
}
return {"state": "cancelled"}

def draft2waiting(self):
for record in self:
Expand Down Expand Up @@ -185,17 +157,14 @@ class HRCourseAttendee(models.Model):
_name = "hr.course.attendee"
_description = "Course Attendee"

course_id = fields.Many2one(
"hr.course",
ondelete="cascade",
readonly=True,
required=True,
course_schedule_id = fields.Many2one(
"hr.course.schedule", ondelete="cascade", readonly=True, required=True
)
name = fields.Char(related="course_id.name", readonly=True)
name = fields.Char(related="course_schedule_id.name", readonly=True)
employee_id = fields.Many2one("hr.employee", readonly=True)
course_start = fields.Date(related="course_id.start_date", readonly=True)
course_end = fields.Date(related="course_id.end_date", readonly=True)
state = fields.Selection(related="course_id.state", readonly=True)
course_start = fields.Date(related="course_schedule_id.start_date", readonly=True)
course_end = fields.Date(related="course_schedule_id.end_date", readonly=True)
state = fields.Selection(related="course_schedule_id.state", readonly=True)
result = fields.Selection(
[
("passed", "Passed"),
Expand All @@ -212,11 +181,48 @@ def _remove_from_course(self):
return [(1, self.id, {"active": False})]


class HrCourse(models.Model):
_name = "hr.course"
_description = "Course"
_inherit = "mail.thread"

name = fields.Char(string="Name", required=True, tracking=True)
category_id = fields.Many2one(
"hr.course.category", string="Category", required=True
)

permanence = fields.Boolean(
string="Has Permanence",
readonly=True,
default=False,
tracking=True,
)
permanence_time = fields.Char(
string="Permanence time",
readonly=True,
tracking=True,
)

content = fields.Html()
objective = fields.Html()

evaluation_criteria = fields.Html()

course_schedule_ids = fields.One2many(
"hr.course.schedule",
inverse_name="course_id",
readonly=True,
)

@api.onchange("permanence")
def _onchange_permanence(self):
self.permanence_time = False


class HRCourseCategory(models.Model):
_name = "hr.course.category"
_description = "Course Category"

name = fields.Char(string="Course category", required=True)

_sql_constraints = [
("name_uniq", "unique (name)", "Category already exists !"),
]
_sql_constraints = [("name_uniq", "unique (name)", "Category already exists !")]
6 changes: 4 additions & 2 deletions hr_course/readme/USAGE.rst
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
To create a Course go to Employees -> Courses.

To create a Training Schedule go to Employees -> Courses Schedule.

Fill the information and click assign attendees to continue. Assign them and
then start the course.
then start the course session.

One it has finished you must enter the results and finish the course.
One it has finished you must enter the results and finish the course session.
4 changes: 2 additions & 2 deletions hr_course/security/course_security.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<odoo noupdate="1">
<record model="ir.rule" id="hr_employee_course_rule">
<field name="name">hr.employee.course.rule</field>
<field name="model_id" ref="model_hr_course" />
<field name="model_id" ref="model_hr_course_schedule" />
<field
name="domain_force"
>[('attendant_ids', 'in', user.employee_ids.ids)]</field>
Expand All @@ -11,7 +11,7 @@
</record>
<record model="ir.rule" id="hr_employee_course_manager_rule">
<field name="name">hr.employee.course.rule</field>
<field name="model_id" ref="model_hr_course" />
<field name="model_id" ref="model_hr_course_schedule" />
<field name="domain_force">[(1, '=', 1)]</field>
<field name="groups" eval="[(4, ref('hr.group_hr_manager'))]" />
<field name="global" eval="False" />
Expand Down
2 changes: 2 additions & 0 deletions hr_course/security/ir.model.access.csv
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_hr_course,access_hr_course,model_hr_course,base.group_user,1,0,0,0
access_hr_course_manager,access_hr_course_manager,model_hr_course,hr.group_hr_manager,1,1,1,1
access_hr_course_schedule,access_hr_course_schedule,model_hr_course_schedule,base.group_user,1,0,0,0
access_hr_course_schedule_manager,access_hr_course_schedule_manager,model_hr_course_schedule,hr.group_hr_manager,1,1,1,1
access_hr_course_attendee,access_hr_course_attendee,model_hr_course_attendee,base.group_user,1,0,0,0
access_hr_course_attendee_manager,access_hr_course_attendee_manager,model_hr_course_attendee,hr.group_hr_manager,1,1,1,1
access_hr_course_category,access_hr_course_category,model_hr_course_category,base.group_user,1,0,0,0
Expand Down
Loading

0 comments on commit c4bb6d3

Please sign in to comment.