diff --git a/docsource/modules160-170.rst b/docsource/modules160-170.rst index 08e1ba1a2645..b981fc77778a 100644 --- a/docsource/modules160-170.rst +++ b/docsource/modules160-170.rst @@ -158,7 +158,7 @@ Module coverage 16.0 -> 17.0 +---------------------------------------------------+----------------------+-------------------------------------------------+ | hr | Done | | +---------------------------------------------------+----------------------+-------------------------------------------------+ -| hr_attendance | | | +| hr_attendance | Done | | +---------------------------------------------------+----------------------+-------------------------------------------------+ | hr_contract | Done | | +---------------------------------------------------+----------------------+-------------------------------------------------+ diff --git a/openupgrade_scripts/scripts/hr_attendance/17.0.2.0/post-migration.py b/openupgrade_scripts/scripts/hr_attendance/17.0.2.0/post-migration.py new file mode 100644 index 000000000000..868dc4012069 --- /dev/null +++ b/openupgrade_scripts/scripts/hr_attendance/17.0.2.0/post-migration.py @@ -0,0 +1,61 @@ +# Copyright 2025 ForgeFlow S.L. (https://www.forgeflow.com) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +import uuid + +from openupgradelib import openupgrade + +_deleted_xml_records = [ + "hr_attendance.hr_attendance_report_rule_multi_company", + "hr_attendance.hr_attendance_rule_attendance_employee", + "hr_attendance.hr_attendance_rule_attendance_manager", + "hr_attendance.hr_attendance_rule_attendance_manual", + "hr_attendance.hr_attendance_rule_attendance_overtime_employee", + "hr_attendance.hr_attendance_rule_attendance_overtime_manager", +] + + +def fill_res_company_hr_attendance_display_overtime(env): + openupgrade.logged_query( + env.cr, + """ + UPDATE res_company + SET hr_attendance_display_overtime = hr_attendance_overtime + """, + ) + + +def fill_res_company_attendance_kiosk_use_pin(env): + group = env.ref("hr_attendance.group_hr_attendance_use_pin") + openupgrade.logged_query( + env.cr, + f""" + UPDATE res_company rc + SET attendance_kiosk_use_pin = TRUE + FROM res_users ru + JOIN res_groups_users_rel group_rel ON group_rel.uid = ru.id + AND group_rel.gid = {group.id} + JOIN res_company_users_rel company_rel ON company_rel.user_id = ru.id + WHERE company_rel.cid = rc.id AND ru.active + """, + ) + + +def fill_res_company_attendance_kiosk_key(env): + companies = env["res.company"].search([]) + for company in companies: + company.attendance_kiosk_key = uuid.uuid4().hex + + +def fill_hr_attendance_overtime_hours(env): + attendances = env["hr.attendance"].search([]) + # this way, the query in the compute method only is executed once + attendances._compute_overtime_hours() + + +@openupgrade.migrate() +def migrate(env, version): + fill_res_company_hr_attendance_display_overtime(env) + fill_res_company_attendance_kiosk_use_pin(env) + fill_res_company_attendance_kiosk_key(env) + openupgrade.delete_records_safely_by_xml_id(env, _deleted_xml_records) + fill_hr_attendance_overtime_hours(env) diff --git a/openupgrade_scripts/scripts/hr_attendance/17.0.2.0/pre-migration.py b/openupgrade_scripts/scripts/hr_attendance/17.0.2.0/pre-migration.py new file mode 100644 index 000000000000..58cc8a1e5cf9 --- /dev/null +++ b/openupgrade_scripts/scripts/hr_attendance/17.0.2.0/pre-migration.py @@ -0,0 +1,46 @@ +# Copyright 2025 ForgeFlow S.L. (https://www.forgeflow.com) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from openupgradelib import openupgrade + +_xmlid_renames = [ + ( + "hr_attendance.group_hr_attendance_user", + "hr_attendance.group_hr_attendance_officer", + ), + ( + "hr_attendance.group_hr_attendance_kiosk", + "hr_attendance.group_hr_attendance_own_reader", + ), +] + + +def pre_create_hr_attendance_overtime_hours(env): + openupgrade.logged_query( + env.cr, + """ + ALTER TABLE hr_attendance + ADD COLUMN IF NOT EXISTS overtime_hours numeric + """, + ) + + +def fill_res_company_attendance_from_systray(env): + openupgrade.logged_query( + env.cr, + """ + ALTER TABLE res_company ADD COLUMN attendance_from_systray boolean DEFAULT true + """, + ) + openupgrade.logged_query( + env.cr, + """ + ALTER TABLE res_company ALTER COLUMN attendance_from_systray DROP DEFAULT + """, + ) + + +@openupgrade.migrate() +def migrate(env, version): + openupgrade.rename_xmlids(env.cr, _xmlid_renames) + pre_create_hr_attendance_overtime_hours(env) + fill_res_company_attendance_from_systray(env) diff --git a/openupgrade_scripts/scripts/hr_attendance/17.0.2.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/hr_attendance/17.0.2.0/upgrade_analysis_work.txt new file mode 100644 index 000000000000..e7ffe6bfd592 --- /dev/null +++ b/openupgrade_scripts/scripts/hr_attendance/17.0.2.0/upgrade_analysis_work.txt @@ -0,0 +1,108 @@ +---Models in module 'hr_attendance'--- +obsolete model hr.attendance.report [sql_view] +---Fields in module 'hr_attendance'--- +hr_attendance / hr.attendance / message_follower_ids (one2many): NEW relation: mail.followers +hr_attendance / hr.attendance / message_ids (one2many) : NEW relation: mail.message +hr_attendance / hr.attendance / rating_ids (one2many) : NEW relation: rating.rating +hr_attendance / hr.attendance / website_message_ids (one2many): NEW relation: mail.message +# NOTHING TO DO + +hr_attendance / hr.attendance / in_browser (char) : NEW +hr_attendance / hr.attendance / in_city (char) : NEW +hr_attendance / hr.attendance / in_country_name (char) : NEW +hr_attendance / hr.attendance / in_ip_address (char) : NEW +hr_attendance / hr.attendance / in_latitude (float) : NEW +hr_attendance / hr.attendance / in_longitude (float) : NEW +hr_attendance / hr.attendance / in_mode (selection) : NEW selection_keys: ['kiosk', 'manual', 'systray'] +hr_attendance / hr.attendance / out_browser (char) : NEW +hr_attendance / hr.attendance / out_city (char) : NEW +hr_attendance / hr.attendance / out_country_name (char) : NEW +hr_attendance / hr.attendance / out_ip_address (char) : NEW +hr_attendance / hr.attendance / out_latitude (float) : NEW +hr_attendance / hr.attendance / out_longitude (float) : NEW +hr_attendance / hr.attendance / out_mode (selection) : NEW selection_keys: ['kiosk', 'manual', 'systray'] +# NOTHING TO DO: new feature (Geolocation information) + +hr_attendance / hr.attendance / overtime_hours (float) : NEW isfunction: function, stored +# DONE: pre-migration: Pre-create the column for not triggering the method for each record (as it is costly) +# DONE: post-migration: Fill column in one call + +hr_attendance / hr.employee / attendance_manager_id (many2one): NEW relation: res.users +# NOTHING TO DO + +hr_attendance / res.company / attendance_from_systray (boolean): NEW hasdefault: default +# DONE: pre-migration: fill default values + +hr_attendance / res.company / attendance_kiosk_key (char) : NEW hasdefault: default +# DONE: post-migration: fill default values + +hr_attendance / res.company / attendance_kiosk_use_pin (boolean): NEW +DEL res.groups: hr_attendance.group_hr_attendance_use_pin +DONE: post-migration: fill if user was in group hr_attendance.group_hr_attendance_use_pin + +hr_attendance / res.company / hr_attendance_display_overtime (boolean): NEW +# DONE: post-migration: maintain v16 usability, which was using hr_attendance_overtime + +---XML records in module 'hr_attendance'--- +NEW ir.actions.act_window: hr_attendance.hr_attendance_reporting +DEL ir.actions.act_window: hr_attendance.hr_attendance_action_employee +DEL ir.actions.act_window: hr_attendance.hr_attendance_action_overview +DEL ir.actions.act_window: hr_attendance.hr_attendance_report_action +DEL ir.actions.act_window: hr_attendance.hr_attendance_report_action_filtered +# NOTHING TO DO + +DEL ir.actions.client: hr_attendance.hr_attendance_action_kiosk_mode +DEL ir.actions.client: hr_attendance.hr_attendance_action_my_attendances +NEW ir.actions.server: hr_attendance.open_kiosk_url +# NOTHING TO DO + +NEW ir.model.access: hr_attendance.access_hr_attendance_admin +NEW ir.model.access: hr_attendance.access_hr_attendance_admin_overtime +NEW ir.model.access: hr_attendance.access_hr_attendance_officer_overtime +DEL ir.model.access: hr_attendance.access_hr_attendance_overtime_system_user +DEL ir.model.access: hr_attendance.access_hr_attendance_report_user +DEL ir.model.access: hr_attendance.access_hr_attendance_system_user +# NOTHING TO DO + +NEW ir.rule: hr_attendance.hr_attendance_rule_attendance_admin (noupdate) +NEW ir.rule: hr_attendance.hr_attendance_rule_attendance_manager_restrict (noupdate) +NEW ir.rule: hr_attendance.hr_attendance_rule_attendance_officer_overtime_restrict (noupdate) +NEW ir.rule: hr_attendance.hr_attendance_rule_attendance_overtime_admin (noupdate) +NEW ir.rule: hr_attendance.hr_attendance_rule_attendance_overtime_simple_user (noupdate) +NEW ir.rule: hr_attendance.hr_attendance_rule_attendance_simple_user (noupdate) +# NOTHING TO DO + +DEL ir.rule: hr_attendance.hr_attendance_report_rule_multi_company (noupdate) +DEL ir.rule: hr_attendance.hr_attendance_rule_attendance_employee (noupdate) +DEL ir.rule: hr_attendance.hr_attendance_rule_attendance_manager (noupdate) +DEL ir.rule: hr_attendance.hr_attendance_rule_attendance_manual (noupdate) +DEL ir.rule: hr_attendance.hr_attendance_rule_attendance_overtime_employee (noupdate) +DEL ir.rule: hr_attendance.hr_attendance_rule_attendance_overtime_manager (noupdate) +# DONE: post-migration: safely delete + +NEW ir.ui.menu: hr_attendance.menu_hr_attendance_reporting +DEL ir.ui.menu: hr_attendance.menu_hr_attendance_attendances_overview +DEL ir.ui.menu: hr_attendance.menu_hr_attendance_my_attendances +DEL ir.ui.menu: hr_attendance.menu_hr_attendance_report +# NOTHING TO DO + +NEW ir.ui.view: hr_attendance.hr_attendance_employee_simple_tree_view +NEW ir.ui.view: hr_attendance.hr_attendance_view_graph +NEW ir.ui.view: hr_attendance.hr_attendance_view_pivot +NEW ir.ui.view: hr_attendance.public_kiosk_mode +NEW ir.ui.view: hr_attendance.view_employee_tree_inherit_leave +DEL ir.ui.view: hr_attendance.hr_attendance_report_view_graph +DEL ir.ui.view: hr_attendance.hr_attendance_report_view_pivot +DEL ir.ui.view: hr_attendance.hr_attendance_report_view_search +# NOTHING TO DO + +NEW res.groups: hr_attendance.group_hr_attendance_officer +DEL res.groups: hr_attendance.group_hr_attendance_user +# DONE: pre-migration: rename group + +NEW res.groups: hr_attendance.group_hr_attendance_own_reader +DEL res.groups: hr_attendance.group_hr_attendance_kiosk +# DONE: pre-migration: rename group + +DEL res.groups: hr_attendance.group_hr_attendance +# NOTHING TO DO