Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions docsource/modules180-190.rst
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@ Module coverage 18.0 -> 19.0
+---------------------------------------------------+----------------------+-------------------------------------------------+
| hr |Done | |
+---------------------------------------------------+----------------------+-------------------------------------------------+
| hr_attendance | | |
| hr_attendance |Done | |
+---------------------------------------------------+----------------------+-------------------------------------------------+
| hr_calendar | | |
+---------------------------------------------------+----------------------+-------------------------------------------------+
Expand All @@ -182,7 +182,7 @@ Module coverage 18.0 -> 19.0
+---------------------------------------------------+----------------------+-------------------------------------------------+
| hr_holidays |Done | |
+---------------------------------------------------+----------------------+-------------------------------------------------+
| hr_holidays_attendance | | |
| hr_holidays_attendance |Done | |
+---------------------------------------------------+----------------------+-------------------------------------------------+
| |del| hr_holidays_contract | | |
+---------------------------------------------------+----------------------+-------------------------------------------------+
Expand All @@ -202,13 +202,13 @@ Module coverage 18.0 -> 19.0
+---------------------------------------------------+----------------------+-------------------------------------------------+
| hr_recruitment | | |
+---------------------------------------------------+----------------------+-------------------------------------------------+
| hr_recruitment_skills | | |
| hr_recruitment_skills |Done | |
+---------------------------------------------------+----------------------+-------------------------------------------------+
| hr_recruitment_sms | | |
+---------------------------------------------------+----------------------+-------------------------------------------------+
| hr_recruitment_survey | |No DB layout changes. |
+---------------------------------------------------+----------------------+-------------------------------------------------+
| hr_skills | | |
| hr_skills |Done | |
+---------------------------------------------------+----------------------+-------------------------------------------------+
| |new| hr_skills_event | | |
+---------------------------------------------------+----------------------+-------------------------------------------------+
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
from openupgradelib import openupgrade

_renamed_models = [
("hr.attendance.overtime", "hr.attendance.overtime.line"),
]

_renamed_tables = [
("hr_attendance_overtime", "hr_attendance_overtime_line"),
]


@openupgrade.migrate()
def migrate(env, version):
openupgrade.rename_models(env.cr, _renamed_models)
openupgrade.rename_tables(env.cr, _renamed_tables)
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
from odoo.tests import TransactionCase

from odoo.addons.openupgrade_framework import openupgrade_test


@openupgrade_test
class TestHrAttendanceMigration(TransactionCase):
def test_overtime_line_records_preserved(self):
"""hr.attendance.overtime was renamed to hr.attendance.overtime.line
in 19.0; rename_models + rename_tables in pre-migration must
preserve rows.
"""
self.assertTrue(
self.env["hr.attendance.overtime.line"].search([], limit=1),
"Overtime line records should survive the model+table rename.",
)

def test_obsolete_model_gone(self):
"""The old hr.attendance.overtime model should no longer be
registered after the migration.
"""
self.assertNotIn("hr.attendance.overtime", self.env.registry)
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
---Models in module 'hr_attendance'---
obsolete model hr.attendance.overtime (renamed to hr.attendance.overtime.line)
new model hr.attendance.overtime.line (renamed from hr.attendance.overtime)

# DONE: rename_models + rename_tables in pre-migration.py

new model hr.attendance.overtime.rule
new model hr.attendance.overtime.ruleset

# NOTHING TO DO: new feature

---Fields in module 'hr_attendance'---
hr_attendance / hr.attendance / date (date) : NEW required, isfunction: function, stored
hr_attendance / hr.attendance / in_city (char) : DEL
hr_attendance / hr.attendance / in_country_name (char) : DEL
hr_attendance / hr.attendance / in_location (char) : NEW
hr_attendance / hr.attendance / linked_overtime_ids (many2many): NEW relation: hr.attendance.overtime.line, hasdefault: compute, stored: False
hr_attendance / hr.attendance / out_city (char) : DEL
hr_attendance / hr.attendance / out_country_name (char) : DEL
hr_attendance / hr.attendance / out_location (char) : NEW
hr_attendance / hr.attendance / validated_overtime_hours (float): now a function
hr_attendance / hr.attendance.overtime / _order : _order is now 'time_start' ('date desc')
hr_attendance / hr.attendance.overtime / adjustment (boolean) : DEL
hr_attendance / hr.attendance.overtime / date (date) : now required
hr_attendance / hr.attendance.overtime / duration_real (float) : DEL
hr_attendance / hr.attendance.overtime.line / amount_rate (float) : NEW required, hasdefault: default
hr_attendance / hr.attendance.overtime.line / manual_duration (float) : NEW hasdefault: compute
hr_attendance / hr.attendance.overtime.line / rule_ids (many2many) : NEW relation: hr.attendance.overtime.rule
hr_attendance / hr.attendance.overtime.line / status (selection) : NEW required, selection_keys: ['approved', 'refused', 'to_approve'], hasdefault: compute
hr_attendance / hr.attendance.overtime.line / time_start (datetime) : NEW
hr_attendance / hr.attendance.overtime.line / time_stop (datetime) : NEW
hr_attendance / hr.attendance.overtime.rule / amount_rate (float) : NEW hasdefault: default
hr_attendance / hr.attendance.overtime.rule / base_off (selection) : NEW required, selection_keys: ['quantity', 'timing'], hasdefault: default
hr_attendance / hr.attendance.overtime.rule / description (html) : NEW
hr_attendance / hr.attendance.overtime.rule / employee_tolerance (float) : NEW
hr_attendance / hr.attendance.overtime.rule / employer_tolerance (float) : NEW
hr_attendance / hr.attendance.overtime.rule / expected_hours (float) : NEW
hr_attendance / hr.attendance.overtime.rule / expected_hours_from_contract (boolean): NEW hasdefault: default
hr_attendance / hr.attendance.overtime.rule / name (char) : NEW required
hr_attendance / hr.attendance.overtime.rule / paid (boolean) : NEW
hr_attendance / hr.attendance.overtime.rule / quantity_period (selection) : NEW selection_keys: ['day', 'week'], hasdefault: default
hr_attendance / hr.attendance.overtime.rule / resource_calendar_id (many2one): NEW relation: resource.calendar
hr_attendance / hr.attendance.overtime.rule / ruleset_id (many2one) : NEW relation: hr.attendance.overtime.ruleset, required
hr_attendance / hr.attendance.overtime.rule / sequence (integer) : NEW hasdefault: default
hr_attendance / hr.attendance.overtime.rule / timing_start (float) : NEW hasdefault: default
hr_attendance / hr.attendance.overtime.rule / timing_stop (float) : NEW hasdefault: default
hr_attendance / hr.attendance.overtime.rule / timing_type (selection) : NEW selection_keys: ['leave', 'non_work_days', 'schedule', 'work_days'], hasdefault: default
hr_attendance / hr.attendance.overtime.ruleset / active (boolean) : NEW hasdefault: default
hr_attendance / hr.attendance.overtime.ruleset / company_id (many2one) : NEW relation: res.company, hasdefault: default
hr_attendance / hr.attendance.overtime.ruleset / country_id (many2one) : NEW relation: res.country, hasdefault: default
hr_attendance / hr.attendance.overtime.ruleset / description (html) : NEW
hr_attendance / hr.attendance.overtime.ruleset / name (char) : NEW required
hr_attendance / hr.attendance.overtime.ruleset / rate_combination_mode (selection): NEW required, selection_keys: ['max', 'sum'], hasdefault: default
hr_attendance / hr.attendance.overtime.ruleset / rule_ids (one2many) : NEW relation: hr.attendance.overtime.rule
hr_attendance / hr.employee / overtime_ids (one2many) : relation is now 'hr.attendance.overtime.line' ('hr.attendance.overtime') [nothing to do]
hr_attendance / hr.version / ruleset_id (many2one) : NEW relation: hr.attendance.overtime.ruleset, hasdefault: default
hr_attendance / res.company / attendance_device_tracking (boolean): NEW hasdefault: default

# NOTHING TO DO

---XML records in module 'hr_attendance'---
NEW hr.attendance.overtime.rule: hr_attendance.hr_attendance_overtime_employee_schedule_rule (noupdate)
NEW hr.attendance.overtime.rule: hr_attendance.hr_attendance_overtime_non_working_days_rule (noupdate)
NEW hr.attendance.overtime.ruleset: hr_attendance.hr_attendance_default_ruleset (noupdate)
NEW ir.actions.act_window: hr_attendance.hr_attendance_overtime_rule_action
NEW ir.actions.act_window: hr_attendance.hr_attendance_overtime_ruleset_action
DEL ir.actions.act_window: hr_attendance.hr_attendance_overtime_action
DEL ir.actions.client: hr_attendance.hr_attendance_action_install_kiosk_pwa
NEW ir.model.access: hr_attendance.access_hr_attendance_overtime_line_officer
NEW ir.model.access: hr_attendance.access_hr_attendance_overtime_line_own_reader
NEW ir.model.access: hr_attendance.access_hr_attendance_overtime_rule_admin
NEW ir.model.access: hr_attendance.access_hr_attendance_overtime_rule_officer
NEW ir.model.access: hr_attendance.access_hr_attendance_overtime_rule_user
NEW ir.model.access: hr_attendance.access_hr_attendance_overtime_ruleset_admin
NEW ir.model.access: hr_attendance.access_hr_attendance_overtime_ruleset_hr_manager
NEW ir.model.access: hr_attendance.access_hr_attendance_own_reader
DEL ir.model.access: hr_attendance.access_hr_attendance_admin_overtime
DEL ir.model.access: hr_attendance.access_hr_attendance_officer_overtime
DEL ir.model.access: hr_attendance.access_hr_attendance_overtime_user
NEW ir.model.constraint: hr_attendance.constraint_hr_attendance_overtime_line_overtime_start_before_end
NEW ir.model.constraint: hr_attendance.constraint_hr_attendance_overtime_rule_timing_start_is_hour
NEW ir.model.constraint: hr_attendance.constraint_hr_attendance_overtime_rule_timing_stop_is_hour
NEW ir.rule: hr_attendance.hr_attendance_overtime_line_rule_admin (noupdate)
NEW ir.rule: hr_attendance.hr_attendance_overtime_line_rule_employee_company (noupdate)
NEW ir.rule: hr_attendance.hr_attendance_overtime_line_rule_officer (noupdate)
NEW ir.rule: hr_attendance.hr_attendance_overtime_line_rule_own_reader (noupdate)
NEW ir.rule: hr_attendance.hr_attendance_overtime_ruleset_rule (noupdate)
NEW ir.rule: hr_attendance.hr_attendance_overtime_ruleset_rule_group_hr_attendance_manager (noupdate)
DEL ir.rule: hr_attendance.hr_attendance_overtime_rule_employee_company (noupdate)
DEL ir.rule: hr_attendance.hr_attendance_rule_attendance_officer_overtime_restrict (noupdate)
DEL ir.rule: hr_attendance.hr_attendance_rule_attendance_overtime_admin (noupdate)
DEL ir.rule: hr_attendance.hr_attendance_rule_attendance_overtime_simple_user (noupdate)
NEW ir.ui.menu: hr_attendance.menu_hr_attendance_attendance_reporting
NEW ir.ui.menu: hr_attendance.menu_hr_attendance_configuration
NEW ir.ui.menu: hr_attendance.menu_hr_attendance_employee
NEW ir.ui.menu: hr_attendance.menu_hr_attendance_onboarding
NEW ir.ui.menu: hr_attendance.menu_hr_attendance_overtime_rulesets
NEW ir.ui.menu: hr_attendance.menu_hr_attendance_overview
NEW ir.ui.menu: hr_attendance.menu_hr_attendance_view_dashboard
DEL ir.ui.menu: hr_attendance.menu_hr_attendance_view_attendances
NEW ir.ui.view: hr_attendance.hr_attendance_employee_simple_form_view
NEW ir.ui.view: hr_attendance.hr_attendance_overtime_rule_view_form
NEW ir.ui.view: hr_attendance.hr_attendance_overtime_rule_view_list
NEW ir.ui.view: hr_attendance.hr_attendance_overtime_ruleset_view_filter
NEW ir.ui.view: hr_attendance.hr_attendance_overtime_ruleset_view_form
NEW ir.ui.view: hr_attendance.hr_attendance_overtime_ruleset_view_list
NEW ir.ui.view: hr_attendance.hr_employee_public_view_form
NEW ir.ui.view: hr_attendance.hr_employee_search_view
DEL ir.ui.view: hr_attendance.hr_attendance_overtime_view_pivot
DEL ir.ui.view: hr_attendance.hr_attendance_validated_hours_employee_simple_tree_view
DEL ir.ui.view: hr_attendance.hr_user_view_form
DEL ir.ui.view: hr_attendance.view_attendance_overtime_graph
DEL ir.ui.view: hr_attendance.view_attendance_overtime_search
DEL ir.ui.view: hr_attendance.view_attendance_overtime_tree
NEW res.groups: hr_attendance.group_hr_attendance_user
NEW res.groups.privilege: hr_attendance.res_groups_privilege_attendances

# NOTHING TO DO
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
---Models in module 'hr_holidays_attendance'---
new model hr.leave.attendance.report [sql_view]

# NOTHING TO DO

---Fields in module 'hr_holidays_attendance'---
hr_holidays_attendance / hr.attendance.overtime.line / compensable_as_leave (boolean): NEW
hr_holidays_attendance / hr.attendance.overtime.rule / compensable_as_leave (boolean): NEW hasdefault: default
hr_holidays_attendance / hr.leave / employee_overtime (float) : not related anymore
hr_holidays_attendance / hr.leave / employee_overtime (float) : now a function
hr_holidays_attendance / hr.leave / overtime_id (many2one) : DEL relation: hr.attendance.overtime
hr_holidays_attendance / hr.leave.accrual.level / frequency (False) : NEW selection_keys: ['bimonthly', 'biyearly', 'daily', 'hourly', 'monthly', 'weekly', 'worked_hours', 'yearly'], mode: modify
hr_holidays_attendance / hr.leave.accrual.level / frequency_hourly_source (selection): DEL selection_keys: ['attendance', 'calendar']
hr_holidays_attendance / hr.leave.allocation / employee_overtime (float) : not related anymore
hr_holidays_attendance / hr.leave.allocation / employee_overtime (float) : now a function
hr_holidays_attendance / hr.leave.allocation / overtime_id (many2one) : DEL relation: hr.attendance.overtime

# NOTHING TO DO

---XML records in module 'hr_holidays_attendance'---
DEL hr.leave.type: hr_holidays_attendance.holiday_status_extra_hours [renamed to hr_holidays module] (noupdate)
NEW ir.actions.act_window: hr_holidays_attendance.hr_leave_attendance_report_action
DEL ir.actions.act_window: hr_holidays_attendance.hr_leave_allocation_overtime_action
NEW ir.model.access: hr_holidays_attendance.access_hr_leave_attendance_report_manager
NEW ir.ui.menu: hr_holidays_attendance.hr_leave_attendance_report
NEW ir.ui.view: hr_holidays_attendance.hr_attendance_employee_simple_tree_view
NEW ir.ui.view: hr_holidays_attendance.hr_attendance_overtime_rule_view_form
NEW ir.ui.view: hr_holidays_attendance.hr_leave_attendance_report_view_form
NEW ir.ui.view: hr_holidays_attendance.hr_leave_attendance_report_view_list
NEW ir.ui.view: hr_holidays_attendance.hr_leave_attendance_report_view_pivot
NEW ir.ui.view: hr_holidays_attendance.hr_leave_attendance_report_view_search
NEW ir.ui.view: hr_holidays_attendance.view_attendance_overtime_line_list
DEL ir.ui.view: hr_holidays_attendance.hr_leave_allocation_overtime_view_form
DEL ir.ui.view: hr_holidays_attendance.res_users_view_form

# NOTHING TO DO
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
from openupgradelib import openupgrade

_renamed_models = [
("hr.candidate.skill", "hr.applicant.skill"),
]

_renamed_tables = [
("hr_candidate_skill", "hr_applicant_skill"),
("hr_candidate_hr_skill_rel", "hr_applicant_hr_skill_rel"),
]

_renamed_fields = [
("hr.applicant.skill", "hr_applicant_skill", "candidate_id", "applicant_id"),
]

_renamed_columns = {
"hr_applicant_hr_skill_rel": [("hr_candidate_id", "hr_applicant_id")],
}


@openupgrade.migrate()
def migrate(env, version):
openupgrade.rename_models(env.cr, _renamed_models)
openupgrade.rename_tables(env.cr, _renamed_tables)
openupgrade.rename_fields(env, _renamed_fields)
openupgrade.rename_columns(env.cr, _renamed_columns)
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
from odoo.tests import TransactionCase

from odoo.addons.openupgrade_framework import openupgrade_test


@openupgrade_test
class TestHrRecruitmentSkillsMigration(TransactionCase):
def test_applicant_skill_records_preserved(self):
"""hr.candidate.skill was renamed to hr.applicant.skill in 19.0;
rename_models + rename_tables in pre-migration must preserve rows.
"""
self.assertTrue(
self.env["hr.applicant.skill"].search([], limit=1),
"Applicant skill records should survive the model+table rename.",
)

def test_applicant_id_populated(self):
"""The legacy candidate_id column is renamed to applicant_id by
pre-migration; rows that had it set must still have it set.
"""
self.assertTrue(
self.env["hr.applicant.skill"].search([("applicant_id", "!=", False)], limit=1),
"applicant_id should be populated after column rename from candidate_id.",
)

def test_m2m_join_table_renamed(self):
"""The m2m join table for hr.applicant.skill_ids must use the new
explicit name and the join column must be hr_applicant_id (was
hr_candidate_id pre-migration).
"""
self.env.cr.execute(
"""
SELECT column_name
FROM information_schema.columns
WHERE table_name = 'hr_applicant_hr_skill_rel'
ORDER BY column_name
"""
)
cols = [r[0] for r in self.env.cr.fetchall()]
self.assertIn("hr_applicant_id", cols)
self.assertIn("hr_skill_id", cols)
Loading
Loading