From 792cf231d455fa59ee5bb061a4548497363e7c8f Mon Sep 17 00:00:00 2001 From: Chankya Soni Date: Fri, 9 Jul 2021 14:37:19 +0530 Subject: [PATCH 1/3] [14.0][MIG] hr_holidays. --- docsource/modules130-140.rst | 2 +- .../hr_holidays/14.0.1.5/noupdate_changes.xml | 4 +- .../hr_holidays/14.0.1.5/post-migration.py | 9 ++ .../hr_holidays/14.0.1.5/pre-migration.py | 44 +++++++++ .../14.0.1.5/upgrade_analysis_work.txt | 98 +++++++++++++++++++ 5 files changed, 154 insertions(+), 3 deletions(-) create mode 100644 openupgrade_scripts/scripts/hr_holidays/14.0.1.5/post-migration.py create mode 100644 openupgrade_scripts/scripts/hr_holidays/14.0.1.5/pre-migration.py create mode 100644 openupgrade_scripts/scripts/hr_holidays/14.0.1.5/upgrade_analysis_work.txt diff --git a/docsource/modules130-140.rst b/docsource/modules130-140.rst index 0a971ae31d2c..b102716da5b7 100644 --- a/docsource/modules130-140.rst +++ b/docsource/modules130-140.rst @@ -164,7 +164,7 @@ Module coverage 13.0 -> 14.0 +--------------------------------------------+-------------------------------------------------+ |hr_gamification | | +--------------------------------------------+-------------------------------------------------+ -|hr_holidays | | +|hr_holidays | Done | +--------------------------------------------+-------------------------------------------------+ |hr_holidays_attendance | | +--------------------------------------------+-------------------------------------------------+ diff --git a/openupgrade_scripts/scripts/hr_holidays/14.0.1.5/noupdate_changes.xml b/openupgrade_scripts/scripts/hr_holidays/14.0.1.5/noupdate_changes.xml index 0ee1ed30bd71..1b98781c7f49 100644 --- a/openupgrade_scripts/scripts/hr_holidays/14.0.1.5/noupdate_changes.xml +++ b/openupgrade_scripts/scripts/hr_holidays/14.0.1.5/noupdate_changes.xml @@ -20,7 +20,7 @@ both - + [ @@ -58,7 +58,7 @@ Allocations: holiday user : create/write - + diff --git a/openupgrade_scripts/scripts/hr_holidays/14.0.1.5/post-migration.py b/openupgrade_scripts/scripts/hr_holidays/14.0.1.5/post-migration.py new file mode 100644 index 000000000000..a3d39b1c52ca --- /dev/null +++ b/openupgrade_scripts/scripts/hr_holidays/14.0.1.5/post-migration.py @@ -0,0 +1,9 @@ +# Copyright (C) 2021 Open Source Integrators +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from openupgradelib import openupgrade + + +@openupgrade.migrate() +def migrate(env, version): + # Load noupdate changes + openupgrade.load_data(env.cr, "hr_holidays", "14.0.1.5/noupdate_changes.xml") diff --git a/openupgrade_scripts/scripts/hr_holidays/14.0.1.5/pre-migration.py b/openupgrade_scripts/scripts/hr_holidays/14.0.1.5/pre-migration.py new file mode 100644 index 000000000000..12bf25024e09 --- /dev/null +++ b/openupgrade_scripts/scripts/hr_holidays/14.0.1.5/pre-migration.py @@ -0,0 +1,44 @@ +# Copyright (C) 2021 Open Source Integrators +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from openupgradelib import openupgrade + +_field_renames = [ + ("hr.leave.type", "hr_leave_type", "validation_type", "leave_validation_type"), +] + +xmlid_renames = [ + ( + "hr_holidays_calendar.hr_leave_report_calendar_rule_multi_company", + "hr_holidays.hr_leave_report_calendar_rule_multi_company", + ), +] + + +@openupgrade.migrate() +def migrate(env, version): + openupgrade.rename_fields(env, _field_renames) + openupgrade.rename_xmlids(env.cr, xmlid_renames) + openupgrade.set_xml_ids_noupdate_value( + env, + "hr_holidays", + [ + "hr_holidays_status_rule_multi_company", + "hr_leave_allocation_rule_employee", + "hr_leave_allocation_rule_employee_update", + "hr_leave_allocation_rule_manager", + "hr_leave_allocation_rule_officer_read", + "hr_leave_allocation_rule_officer_update", + "hr_leave_rule_employee", + "hr_leave_rule_employee_unlink", + "hr_leave_rule_employee_update", + "hr_leave_rule_manager", + "hr_leave_rule_multicompany", + "hr_leave_rule_officer_update", + "hr_leave_rule_responsible_read", + "hr_leave_rule_responsible_update", + "hr_leave_rule_user_read", + "resource_leaves_base_user", + "resource_leaves_holidays_user", + ], + True, + ) diff --git a/openupgrade_scripts/scripts/hr_holidays/14.0.1.5/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/hr_holidays/14.0.1.5/upgrade_analysis_work.txt new file mode 100644 index 000000000000..a4b3081f7b1f --- /dev/null +++ b/openupgrade_scripts/scripts/hr_holidays/14.0.1.5/upgrade_analysis_work.txt @@ -0,0 +1,98 @@ +---Models in module 'hr_holidays'--- +---Fields in module 'hr_holidays'--- +hr_holidays / hr.employee / hr_icon_display (False) : NEW selection_keys: ['presence_absent', 'presence_absent_active', 'presence_holiday_absent', 'presence_holiday_present', 'presence_present', 'presence_to_define', 'presence_undetermined'], mode: modify +hr_holidays / hr.employee / leave_manager_id (many2one) : now a function +hr_holidays / hr.leave / category_id (many2one) : now a function +hr_holidays / hr.leave / date_from (datetime) : now a function +hr_holidays / hr.leave / date_to (datetime) : now a function +hr_holidays / hr.leave / department_id (many2one) : now a function +hr_holidays / hr.leave / duration_display (char) : is now stored +hr_holidays / hr.leave / employee_id (many2one) : now a function +hr_holidays / hr.leave / holiday_status_id (many2one) : now a function +hr_holidays / hr.leave / manager_id (many2one) : now a function +hr_holidays / hr.leave / message_has_sms_error (boolean): module is now 'sms' ('hr_holidays') +hr_holidays / hr.leave / mode_company_id (many2one) : now a function +hr_holidays / hr.leave / name (char) : not stored anymore +hr_holidays / hr.leave / name (char) : now a function +hr_holidays / hr.leave / number_of_days (float) : now a function +hr_holidays / hr.leave / private_name (char) : NEW +hr_holidays / hr.leave / request_unit_custom (boolean) : now a function +hr_holidays / hr.leave / request_unit_half (boolean) : now a function +hr_holidays / hr.leave / request_unit_hours (boolean) : now a function +hr_holidays / hr.leave / state (selection) : now a function +hr_holidays / hr.leave / website_message_ids (one2many): module is now 'portal' ('hr_holidays') +hr_holidays / hr.leave.allocation / category_id (many2one) : now a function +hr_holidays / hr.leave.allocation / date_to (datetime) : now a function +hr_holidays / hr.leave.allocation / department_id (many2one) : now a function +hr_holidays / hr.leave.allocation / employee_id (many2one) : now a function +hr_holidays / hr.leave.allocation / holiday_status_id (many2one) : now a function +hr_holidays / hr.leave.allocation / interval_number (integer) : now a function +hr_holidays / hr.leave.allocation / interval_unit (selection) : now a function +hr_holidays / hr.leave.allocation / interval_unit (selection) : selection_keys is now '['days', 'months', 'weeks', 'years']' ('['months', 'weeks', 'years']') +hr_holidays / hr.leave.allocation / manager_id (many2one) : now a function +hr_holidays / hr.leave.allocation / message_has_sms_error (boolean): module is now 'sms' ('hr_holidays') +hr_holidays / hr.leave.allocation / mode_company_id (many2one) : now a function +hr_holidays / hr.leave.allocation / name (char) : not stored anymore +hr_holidays / hr.leave.allocation / name (char) : now a function +hr_holidays / hr.leave.allocation / number_of_days (float) : now a function +hr_holidays / hr.leave.allocation / number_per_interval (float) : now a function +hr_holidays / hr.leave.allocation / private_name (char) : NEW +hr_holidays / hr.leave.allocation / unit_per_interval (selection) : now a function +hr_holidays / hr.leave.allocation / website_message_ids (one2many): module is now 'portal' ('hr_holidays') +hr_holidays / hr.leave.type / allocation_validation_type (selection): NEW selection_keys: ['both', 'hr', 'manager'], hasdefault + +hr_holidays / hr.leave.type / leave_validation_type (selection): NEW selection_keys: ['both', 'hr', 'manager', 'no_validation'], hasdefault +hr_holidays / hr.leave.type / validation_type (selection) : DEL selection_keys: ['both', 'hr', 'manager', 'no_validation'] +# DONE: pre-migration: renamed field + +---XML records in module 'hr_holidays'--- +DEL ir.actions.act_window: hr_holidays.hr_leave_action_all +DEL ir.actions.act_window: hr_holidays.hr_leave_action_payroll +NEW ir.actions.act_window.view: hr_holidays.action_view_activity_manager_approve +NEW ir.actions.act_window.view: hr_holidays.action_view_calendar_manager_approve +NEW ir.model.access: hr_holidays.access_hr_holidays_summary_employee +NEW ir.model.access: hr_holidays.access_hr_leave_report_calendar [renamed from hr_holidays_calendar module] +DEL ir.model.access: hr_holidays_calendar.access_hr_leave_report_calendar [renamed to hr_holidays module] +NEW ir.rule: hr_holidays.hr_leav_allocation_rule_employee_unlink (noupdate) + +ir.rule: hr_holidays.hr_holidays_status_rule_multi_company (noupdate) (noupdate switched) +ir.rule: hr_holidays.hr_leave_allocation_rule_employee (noupdate) (noupdate switched) +ir.rule: hr_holidays.hr_leave_allocation_rule_employee_update (noupdate) (noupdate switched) +ir.rule: hr_holidays.hr_leave_allocation_rule_manager (noupdate) (noupdate switched) +ir.rule: hr_holidays.hr_leave_allocation_rule_officer_read (noupdate) (noupdate switched) +ir.rule: hr_holidays.hr_leave_allocation_rule_officer_update (noupdate) (noupdate switched) +NEW ir.rule: hr_holidays.hr_leave_report_calendar_rule_multi_company [renamed from hr_holidays_calendar module] (noupdate) (noupdate switched) +DEL ir.rule: hr_holidays_calendar.hr_leave_report_calendar_rule_multi_company [renamed to hr_holidays module] +ir.rule: hr_holidays.hr_leave_rule_employee (noupdate) (noupdate switched) +ir.rule: hr_holidays.hr_leave_rule_employee_unlink (noupdate) (noupdate switched) +ir.rule: hr_holidays.hr_leave_rule_employee_update (noupdate) (noupdate switched) +ir.rule: hr_holidays.hr_leave_rule_manager (noupdate) (noupdate switched) +ir.rule: hr_holidays.hr_leave_rule_multicompany (noupdate) (noupdate switched) +ir.rule: hr_holidays.hr_leave_rule_officer_update (noupdate) (noupdate switched) +ir.rule: hr_holidays.hr_leave_rule_responsible_read (noupdate) (noupdate switched) +ir.rule: hr_holidays.hr_leave_rule_responsible_update (noupdate) (noupdate switched) +ir.rule: hr_holidays.hr_leave_rule_user_read (noupdate) (noupdate switched) +ir.rule: hr_holidays.resource_leaves_base_user (noupdate) (noupdate switched) +ir.rule: hr_holidays.resource_leaves_holidays_user (noupdate) (noupdate switched) +# DONE: pre-migration: switched noupdate +# DONE: pre-migration: renamed rule xmlid + +DEL ir.ui.menu: hr_holidays.hr_holidays_menu_manager_all +DEL ir.ui.menu: hr_holidays.hr_holidays_menu_manager_all_allocations +DEL ir.ui.menu: hr_holidays.hr_holidays_menu_manager_approve +DEL ir.ui.menu: hr_holidays.hr_holidays_menu_manager_payroll +DEL ir.ui.menu: hr_holidays.hr_holidays_menu_manager_payroll_to_report +DEL ir.ui.menu: hr_holidays.menu_open_employee_leave +NEW ir.ui.view: hr_holidays.hr_departure_wizard_view_form +NEW ir.ui.view: hr_holidays.hr_kanban_view_public_employees_kanban +NEW ir.ui.view: hr_holidays.hr_leave_allocation_view_search_manager +NEW ir.ui.view: hr_holidays.hr_leave_allocation_view_search_my +NEW ir.ui.view: hr_holidays.hr_leave_report_calendar_view +NEW ir.ui.view: hr_holidays.hr_leave_report_calendar_view_form +NEW ir.ui.view: hr_holidays.hr_leave_view_form_dashboard_new_time_off +NEW ir.ui.view: hr_holidays.hr_leave_view_search_manager +NEW ir.ui.view: hr_holidays.hr_leave_view_search_my +NEW ir.ui.view: hr_holidays.view_employee_tree_inherit_leave +DEL ir.ui.view: hr_holidays.hr_leave_view_form_manager_approve +DEL ir.ui.view: hr_holidays_calendar.hr_leave_report_calendar_view +DEL ir.ui.view: hr_holidays_calendar.hr_leave_report_calendar_view_form From d2341ca135c424e5b338f57bb4870dff703954ee Mon Sep 17 00:00:00 2001 From: mreficent Date: Thu, 22 Jul 2021 20:09:33 +0200 Subject: [PATCH 2/3] [MIG] hr_holidays (continue) --- .../hr_holidays/14.0.1.5/pre-migration.py | 16 +++++----- .../14.0.1.5/upgrade_analysis_work.txt | 31 +++++++++++++------ 2 files changed, 29 insertions(+), 18 deletions(-) diff --git a/openupgrade_scripts/scripts/hr_holidays/14.0.1.5/pre-migration.py b/openupgrade_scripts/scripts/hr_holidays/14.0.1.5/pre-migration.py index 12bf25024e09..f1c5f0e6ac13 100644 --- a/openupgrade_scripts/scripts/hr_holidays/14.0.1.5/pre-migration.py +++ b/openupgrade_scripts/scripts/hr_holidays/14.0.1.5/pre-migration.py @@ -1,23 +1,21 @@ # Copyright (C) 2021 Open Source Integrators +# Copyright 2021 ForgeFlow S.L. # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). from openupgradelib import openupgrade +_column_copies = { + "hr_leave_type": [("validation_type", "allocation_validation_type", "varchar")] +} + _field_renames = [ ("hr.leave.type", "hr_leave_type", "validation_type", "leave_validation_type"), ] -xmlid_renames = [ - ( - "hr_holidays_calendar.hr_leave_report_calendar_rule_multi_company", - "hr_holidays.hr_leave_report_calendar_rule_multi_company", - ), -] - @openupgrade.migrate() def migrate(env, version): + openupgrade.copy_columns(env.cr, _column_copies) openupgrade.rename_fields(env, _field_renames) - openupgrade.rename_xmlids(env.cr, xmlid_renames) openupgrade.set_xml_ids_noupdate_value( env, "hr_holidays", @@ -26,8 +24,10 @@ def migrate(env, version): "hr_leave_allocation_rule_employee", "hr_leave_allocation_rule_employee_update", "hr_leave_allocation_rule_manager", + "hr_leave_allocation_rule_multicompany", "hr_leave_allocation_rule_officer_read", "hr_leave_allocation_rule_officer_update", + "hr_leave_report_calendar_rule_multi_company", "hr_leave_rule_employee", "hr_leave_rule_employee_unlink", "hr_leave_rule_employee_update", diff --git a/openupgrade_scripts/scripts/hr_holidays/14.0.1.5/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/hr_holidays/14.0.1.5/upgrade_analysis_work.txt index a4b3081f7b1f..6fba31bf6086 100644 --- a/openupgrade_scripts/scripts/hr_holidays/14.0.1.5/upgrade_analysis_work.txt +++ b/openupgrade_scripts/scripts/hr_holidays/14.0.1.5/upgrade_analysis_work.txt @@ -1,6 +1,16 @@ ---Models in module 'hr_holidays'--- ---Fields in module 'hr_holidays'--- hr_holidays / hr.employee / hr_icon_display (False) : NEW selection_keys: ['presence_absent', 'presence_absent_active', 'presence_holiday_absent', 'presence_holiday_present', 'presence_present', 'presence_to_define', 'presence_undetermined'], mode: modify +hr_holidays / hr.leave / private_name (char) : NEW +hr_holidays / hr.leave.allocation / private_name (char) : NEW +# NOTHING TO DO: new features + +hr_holidays / hr.leave / message_has_sms_error (boolean): module is now 'sms' ('hr_holidays') +hr_holidays / hr.leave / website_message_ids (one2many): module is now 'portal' ('hr_holidays') +hr_holidays / hr.leave.allocation / message_has_sms_error (boolean): module is now 'sms' ('hr_holidays') +hr_holidays / hr.leave.allocation / website_message_ids (one2many): module is now 'portal' ('hr_holidays') +# NOTHING TO DO: handled by ORM + hr_holidays / hr.employee / leave_manager_id (many2one) : now a function hr_holidays / hr.leave / category_id (many2one) : now a function hr_holidays / hr.leave / date_from (datetime) : now a function @@ -10,17 +20,14 @@ hr_holidays / hr.leave / duration_display (char) : is now hr_holidays / hr.leave / employee_id (many2one) : now a function hr_holidays / hr.leave / holiday_status_id (many2one) : now a function hr_holidays / hr.leave / manager_id (many2one) : now a function -hr_holidays / hr.leave / message_has_sms_error (boolean): module is now 'sms' ('hr_holidays') hr_holidays / hr.leave / mode_company_id (many2one) : now a function hr_holidays / hr.leave / name (char) : not stored anymore hr_holidays / hr.leave / name (char) : now a function hr_holidays / hr.leave / number_of_days (float) : now a function -hr_holidays / hr.leave / private_name (char) : NEW hr_holidays / hr.leave / request_unit_custom (boolean) : now a function hr_holidays / hr.leave / request_unit_half (boolean) : now a function hr_holidays / hr.leave / request_unit_hours (boolean) : now a function hr_holidays / hr.leave / state (selection) : now a function -hr_holidays / hr.leave / website_message_ids (one2many): module is now 'portal' ('hr_holidays') hr_holidays / hr.leave.allocation / category_id (many2one) : now a function hr_holidays / hr.leave.allocation / date_to (datetime) : now a function hr_holidays / hr.leave.allocation / department_id (many2one) : now a function @@ -28,19 +35,19 @@ hr_holidays / hr.leave.allocation / employee_id (many2one) : now a hr_holidays / hr.leave.allocation / holiday_status_id (many2one) : now a function hr_holidays / hr.leave.allocation / interval_number (integer) : now a function hr_holidays / hr.leave.allocation / interval_unit (selection) : now a function -hr_holidays / hr.leave.allocation / interval_unit (selection) : selection_keys is now '['days', 'months', 'weeks', 'years']' ('['months', 'weeks', 'years']') hr_holidays / hr.leave.allocation / manager_id (many2one) : now a function -hr_holidays / hr.leave.allocation / message_has_sms_error (boolean): module is now 'sms' ('hr_holidays') hr_holidays / hr.leave.allocation / mode_company_id (many2one) : now a function hr_holidays / hr.leave.allocation / name (char) : not stored anymore hr_holidays / hr.leave.allocation / name (char) : now a function hr_holidays / hr.leave.allocation / number_of_days (float) : now a function hr_holidays / hr.leave.allocation / number_per_interval (float) : now a function -hr_holidays / hr.leave.allocation / private_name (char) : NEW hr_holidays / hr.leave.allocation / unit_per_interval (selection) : now a function -hr_holidays / hr.leave.allocation / website_message_ids (one2many): module is now 'portal' ('hr_holidays') -hr_holidays / hr.leave.type / allocation_validation_type (selection): NEW selection_keys: ['both', 'hr', 'manager'], hasdefault +# NOTHING TO DO +hr_holidays / hr.leave.allocation / interval_unit (selection) : selection_keys is now '['days', 'months', 'weeks', 'years']' ('['months', 'weeks', 'years']') +# NOTHING TO DO: added 'days' option + +hr_holidays / hr.leave.type / allocation_validation_type (selection): NEW selection_keys: ['both', 'hr', 'manager'], hasdefault hr_holidays / hr.leave.type / leave_validation_type (selection): NEW selection_keys: ['both', 'hr', 'manager', 'no_validation'], hasdefault hr_holidays / hr.leave.type / validation_type (selection) : DEL selection_keys: ['both', 'hr', 'manager', 'no_validation'] # DONE: pre-migration: renamed field @@ -51,14 +58,18 @@ DEL ir.actions.act_window: hr_holidays.hr_leave_action_payroll NEW ir.actions.act_window.view: hr_holidays.action_view_activity_manager_approve NEW ir.actions.act_window.view: hr_holidays.action_view_calendar_manager_approve NEW ir.model.access: hr_holidays.access_hr_holidays_summary_employee +NEW ir.rule: hr_holidays.hr_leav_allocation_rule_employee_unlink (noupdate) +# NOTHING TO DO + NEW ir.model.access: hr_holidays.access_hr_leave_report_calendar [renamed from hr_holidays_calendar module] DEL ir.model.access: hr_holidays_calendar.access_hr_leave_report_calendar [renamed to hr_holidays module] -NEW ir.rule: hr_holidays.hr_leav_allocation_rule_employee_unlink (noupdate) +# NOTHING TO DO: the prefix is corrected when merging the module ir.rule: hr_holidays.hr_holidays_status_rule_multi_company (noupdate) (noupdate switched) ir.rule: hr_holidays.hr_leave_allocation_rule_employee (noupdate) (noupdate switched) ir.rule: hr_holidays.hr_leave_allocation_rule_employee_update (noupdate) (noupdate switched) ir.rule: hr_holidays.hr_leave_allocation_rule_manager (noupdate) (noupdate switched) +ir.rule: hr_holidays.hr_leave_allocation_rule_multicompany (noupdate) (noupdate switched) ir.rule: hr_holidays.hr_leave_allocation_rule_officer_read (noupdate) (noupdate switched) ir.rule: hr_holidays.hr_leave_allocation_rule_officer_update (noupdate) (noupdate switched) NEW ir.rule: hr_holidays.hr_leave_report_calendar_rule_multi_company [renamed from hr_holidays_calendar module] (noupdate) (noupdate switched) @@ -75,7 +86,6 @@ ir.rule: hr_holidays.hr_leave_rule_user_read (noupdate) (noupdate switched) ir.rule: hr_holidays.resource_leaves_base_user (noupdate) (noupdate switched) ir.rule: hr_holidays.resource_leaves_holidays_user (noupdate) (noupdate switched) # DONE: pre-migration: switched noupdate -# DONE: pre-migration: renamed rule xmlid DEL ir.ui.menu: hr_holidays.hr_holidays_menu_manager_all DEL ir.ui.menu: hr_holidays.hr_holidays_menu_manager_all_allocations @@ -96,3 +106,4 @@ NEW ir.ui.view: hr_holidays.view_employee_tree_inherit_leave DEL ir.ui.view: hr_holidays.hr_leave_view_form_manager_approve DEL ir.ui.view: hr_holidays_calendar.hr_leave_report_calendar_view DEL ir.ui.view: hr_holidays_calendar.hr_leave_report_calendar_view_form +# NOTHING TO DO From f30775409d5757b82b225fbcee7bddf4c4d75272 Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Sat, 11 Dec 2021 21:30:44 +0100 Subject: [PATCH 3/3] [FIX] hr_holidays: Remove invalid noupdate changes They shouldn't be changed to respect user preferences, and some of the changes were not real, but only little syntax variation. TT30272 --- .../hr_holidays/14.0.1.5/noupdate_changes.xml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/openupgrade_scripts/scripts/hr_holidays/14.0.1.5/noupdate_changes.xml b/openupgrade_scripts/scripts/hr_holidays/14.0.1.5/noupdate_changes.xml index 1b98781c7f49..75fd9bd4246e 100644 --- a/openupgrade_scripts/scripts/hr_holidays/14.0.1.5/noupdate_changes.xml +++ b/openupgrade_scripts/scripts/hr_holidays/14.0.1.5/noupdate_changes.xml @@ -1,6 +1,6 @@ - + - + --> + [ '|', @@ -57,9 +57,9 @@ ] Allocations: holiday user : create/write - - - +