odoo-addon-openupgrade-scripts 16.0.1.0.3.143__py3-none-any.whl → 16.0.1.0.3.162__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. odoo/addons/openupgrade_scripts/scripts/hr_attendance/16.0.2.0/post-migration.py +6 -0
  2. odoo/addons/openupgrade_scripts/scripts/hr_attendance/16.0.2.0/upgrade_analysis_work.txt +16 -0
  3. odoo/addons/openupgrade_scripts/scripts/hr_contract/16.0.1.0/noupdate_changes.xml +1 -1
  4. odoo/addons/openupgrade_scripts/scripts/hr_contract/16.0.1.0/post-migration.py +9 -0
  5. odoo/addons/openupgrade_scripts/scripts/hr_contract/16.0.1.0/upgrade_analysis_work.txt +23 -0
  6. odoo/addons/openupgrade_scripts/scripts/hr_expense/16.0.2.0/post-migration.py +73 -0
  7. odoo/addons/openupgrade_scripts/scripts/hr_expense/16.0.2.0/pre-migration.py +108 -0
  8. odoo/addons/openupgrade_scripts/scripts/hr_expense/16.0.2.0/upgrade_analysis_work.txt +71 -0
  9. odoo/addons/openupgrade_scripts/scripts/hr_holidays/16.0.1.5/post-migration.py +25 -0
  10. odoo/addons/openupgrade_scripts/scripts/hr_holidays/16.0.1.5/upgrade_analysis_work.txt +44 -0
  11. odoo/addons/openupgrade_scripts/scripts/hr_hourly_cost/16.0.1.0/upgrade_analysis_work.txt +15 -0
  12. odoo/addons/openupgrade_scripts/scripts/hr_recruitment_survey/16.0.1.0/upgrade_analysis_work.txt +6 -0
  13. odoo/addons/openupgrade_scripts/scripts/hr_timesheet/16.0.1.0/pre-migration.py +76 -0
  14. odoo/addons/openupgrade_scripts/scripts/hr_timesheet/16.0.1.0/upgrade_analysis_work.txt +76 -0
  15. odoo/addons/openupgrade_scripts/scripts/hr_timesheet_attendance/{16.0.1.0/upgrade_analysis.txt → 16.0.1.1/upgrade_analysis_work.txt} +1 -0
  16. odoo/addons/openupgrade_scripts/scripts/project/16.0.1.2/post-migration.py +18 -0
  17. odoo/addons/openupgrade_scripts/scripts/project/16.0.1.2/pre-migration.py +170 -0
  18. odoo/addons/openupgrade_scripts/scripts/project/16.0.1.2/tests/__init__.py +1 -0
  19. odoo/addons/openupgrade_scripts/scripts/project/16.0.1.2/tests/test_project_migration.py +13 -0
  20. odoo/addons/openupgrade_scripts/scripts/project/16.0.1.2/upgrade_analysis_work.txt +101 -0
  21. odoo/addons/openupgrade_scripts/scripts/sale_project/16.0.1.0/upgrade_analysis_work.txt +22 -0
  22. odoo/addons/openupgrade_scripts/scripts/sale_timesheet/16.0.1.0/pre-migration.py +36 -0
  23. odoo/addons/openupgrade_scripts/scripts/sale_timesheet/16.0.1.0/upgrade_analysis_work.txt +58 -0
  24. odoo/addons/openupgrade_scripts/scripts/survey/16.0.3.5/post-migration.py +24 -0
  25. odoo/addons/openupgrade_scripts/scripts/survey/16.0.3.5/pre-migration.py +14 -0
  26. odoo/addons/openupgrade_scripts/scripts/survey/16.0.3.5/upgrade_analysis_work.txt +48 -0
  27. {odoo_addon_openupgrade_scripts-16.0.1.0.3.143.dist-info → odoo_addon_openupgrade_scripts-16.0.1.0.3.162.dist-info}/METADATA +1 -1
  28. {odoo_addon_openupgrade_scripts-16.0.1.0.3.143.dist-info → odoo_addon_openupgrade_scripts-16.0.1.0.3.162.dist-info}/RECORD +30 -6
  29. {odoo_addon_openupgrade_scripts-16.0.1.0.3.143.dist-info → odoo_addon_openupgrade_scripts-16.0.1.0.3.162.dist-info}/WHEEL +0 -0
  30. {odoo_addon_openupgrade_scripts-16.0.1.0.3.143.dist-info → odoo_addon_openupgrade_scripts-16.0.1.0.3.162.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,6 @@
1
+ from openupgradelib import openupgrade
2
+
3
+
4
+ @openupgrade.migrate()
5
+ def migrate(env, version):
6
+ openupgrade.load_data(env.cr, "hr_attendance", "16.0.2.0/noupdate_changes.xml")
@@ -0,0 +1,16 @@
1
+ ---Models in module 'hr_attendance'---
2
+ ---Fields in module 'hr_attendance'---
3
+ hr_attendance / res.company / attendance_barcode_source (selection): NEW selection_keys: ['back', 'front', 'scanner'], hasdefault: default
4
+ # NOTHING TO DO: Value only used in enterprise
5
+
6
+ hr_attendance / res.company / attendance_kiosk_delay (integer): NEW hasdefault: default
7
+ # NOTHING TO DO: In v15, this parameter was fixed to 5 seconds. Now it's configurable and set by default in 10. It's reasonable to let the new default as a better default value.
8
+
9
+ hr_attendance / res.company / attendance_kiosk_mode (selection): NEW selection_keys: ['barcode', 'barcode_manual', 'manual'], hasdefault: default
10
+ # NOTHING TO DO: With the default value `barcode_manual`, we get the same behavior as v15
11
+
12
+ ---XML records in module 'hr_attendance'---
13
+ NEW ir.model.access: hr_attendance.access_hr_attendance_officer
14
+ DEL ir.ui.view: hr_attendance.hr_attendance_view_form_inherit
15
+ DEL ir.ui.view: hr_attendance.view_attendance_tree_inherit
16
+ # NOTHING TO DO: noupdate=0 records handled by ORM.
@@ -4,6 +4,6 @@
4
4
  <field name="description">Enable the user to see and manage the contracts from Employee application.</field>
5
5
  </record>
6
6
  <record id="group_hr_contract_manager" model="res.groups">
7
- <field name="implied_ids" eval="[(4, ref('hr_contract.group_hr_contract_employee_manager'))]"/>
7
+ <field name="implied_ids" eval="[(5, ), (4, ref('hr_contract.group_hr_contract_employee_manager'))]"/>
8
8
  </record>
9
9
  </odoo>
@@ -0,0 +1,9 @@
1
+ # Copyright 2023 Coop IT Easy (https://coopiteasy.be)
2
+ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
3
+
4
+ from openupgradelib import openupgrade
5
+
6
+
7
+ @openupgrade.migrate()
8
+ def migrate(env, version):
9
+ openupgrade.load_data(env.cr, "hr_contract", "16.0.1.0/noupdate_changes.xml")
@@ -0,0 +1,23 @@
1
+ ---Models in module 'hr_contract'---
2
+ model hr.contract.type (moved to hr)
3
+ # DONE: in migration script of module hr
4
+
5
+ ---Fields in module 'hr_contract'---
6
+ hr_contract / hr.contract.type / __last_update (datetime) : module is now 'hr' ('hr_contract')
7
+ hr_contract / hr.contract.type / _order : _order is now 'sequence' ('id')
8
+ hr_contract / hr.contract.type / _order : module is now 'hr' ('hr_contract')
9
+ hr_contract / hr.contract.type / display_name (char) : module is now 'hr' ('hr_contract')
10
+ hr_contract / hr.contract.type / name (char) : module is now 'hr' ('hr_contract')
11
+ # DONE: in migration script of module hr
12
+
13
+ ---XML records in module 'hr_contract'---
14
+ NEW ir.model.access: hr_contract.access_hr_contract_hr_employee_manager
15
+ # NOTHING TO DO: New role with less privilege. No need to move user to this group in migration script. See: https://github.com/odoo/odoo/commit/9e14c112eef3b4098c0756b8da17a7253ea0c4d3
16
+
17
+ DEL ir.model.access: hr_contract.access_hr_contract_type_manager [renamed to hr module]
18
+ # DONE: in migration script of module hr
19
+
20
+ NEW ir.rule: hr_contract.ir_rule_hr_contract_employee_manager (noupdate)
21
+ NEW ir.rule: hr_contract.ir_rule_hr_contract_manager (noupdate)
22
+ NEW res.groups: hr_contract.group_hr_contract_employee_manager (noupdate)
23
+ # NOTHING TO DO
@@ -0,0 +1,73 @@
1
+ # Copyright 2023 Tecnativa - Víctor Martínez
2
+ # Copyright 2024 Tecnativa - Pedro M. Baeza
3
+ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
4
+ from openupgradelib import openupgrade
5
+
6
+
7
+ def _hr_expense_process(env):
8
+ """Set amount_tax_company by ORM only when different currency."""
9
+ env.cr.execute(
10
+ """
11
+ SELECT he.id
12
+ FROM hr_expense he
13
+ JOIN res_company rc ON rc.id = he.company_id
14
+ WHERE rc.currency_id = he.currency_id
15
+ """
16
+ )
17
+ env["hr.expense"].browse([x[0] for x in env.cr.fetchall()])._compute_amount_tax()
18
+
19
+
20
+ def _hr_expense_sheet_process(env):
21
+ """With the hr.expense values already defined, we can now set the missing data."""
22
+ openupgrade.logged_query(
23
+ env.cr,
24
+ """
25
+ UPDATE hr_expense_sheet SET total_amount_taxes = (
26
+ SELECT SUM(amount_tax_company)
27
+ FROM hr_expense
28
+ WHERE sheet_id = hr_expense_sheet.id
29
+ )
30
+ """,
31
+ )
32
+ openupgrade.logged_query(
33
+ env.cr,
34
+ """
35
+ UPDATE hr_expense_sheet
36
+ SET untaxed_amount = (total_amount - total_amount_taxes)
37
+ """,
38
+ )
39
+
40
+
41
+ def _hr_expense_analytic_tag(env):
42
+ """If table exists and there are any record with no distribution (used just as tag),
43
+ we set the module hr_expense_analytic_tag to be installed.
44
+ """
45
+ if openupgrade.table_exists(env.cr, "account_analytic_tag_hr_expense_rel"):
46
+ env.cr.execute(
47
+ """SELECT COUNT(*)
48
+ FROM account_analytic_tag_hr_expense_rel rel
49
+ JOIN account_analytic_tag aat ON rel.account_analytic_tag_id = aat.id
50
+ WHERE NOT aat.active_analytic_distribution
51
+ """,
52
+ )
53
+ if env.cr.fetchone()[0]:
54
+ openupgrade.logged_query(
55
+ env.cr,
56
+ """UPDATE ir_module_module
57
+ SET state = 'to install'
58
+ WHERE name = 'hr_expense_analytic_tag'""",
59
+ )
60
+
61
+
62
+ @openupgrade.migrate()
63
+ def migrate(env, version):
64
+ openupgrade.load_data(env.cr, "hr_expense", "16.0.2.0/noupdate_changes.xml")
65
+ _hr_expense_process(env)
66
+ _hr_expense_sheet_process(env)
67
+ _hr_expense_analytic_tag(env)
68
+ openupgrade.set_xml_ids_noupdate_value(
69
+ env,
70
+ "hr_expense",
71
+ ["product_product_no_cost"],
72
+ True,
73
+ )
@@ -0,0 +1,108 @@
1
+ # Copyright 2023 Tecnativa - Víctor Martínez
2
+ # Copyright 2024 Tecnativa - Pedro M. Baeza
3
+ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
4
+ from openupgradelib import openupgrade, openupgrade_160
5
+
6
+
7
+ def _hr_expense_table_new_columns(env):
8
+ """Custom process to create new columns:
9
+ - amount_tax: (total_amount - untaxed_amount). It will be similar enough.
10
+ - amount_tax_company: the same value as amount_tax if same currency, and let
11
+ for post-migration for different currency.
12
+ """
13
+ if not openupgrade.column_exists(env.cr, "hr_expense", "amount_tax"):
14
+ openupgrade.logged_query(
15
+ env.cr,
16
+ "ALTER TABLE hr_expense ADD COLUMN amount_tax numeric",
17
+ )
18
+ openupgrade.logged_query(
19
+ env.cr, "UPDATE hr_expense SET amount_tax = (total_amount - untaxed_amount)"
20
+ )
21
+ if not openupgrade.column_exists(env.cr, "hr_expense", "amount_tax_company"):
22
+ openupgrade.logged_query(
23
+ env.cr,
24
+ "ALTER TABLE hr_expense ADD COLUMN amount_tax_company numeric",
25
+ )
26
+ openupgrade.logged_query(
27
+ env.cr,
28
+ """UPDATE hr_expense he
29
+ SET amount_tax_company = amount_tax
30
+ FROM res_company rc
31
+ WHERE rc.id = he.company_id AND rc.currency_id = he.currency_id
32
+ """,
33
+ )
34
+
35
+
36
+ def _hr_expense_sheet_table_new_columns(env):
37
+ """Pre-create columns to be processed on post-migration."""
38
+ openupgrade.logged_query(
39
+ env.cr,
40
+ """ALTER TABLE hr_expense_sheet
41
+ ADD COLUMN IF NOT EXISTS total_amount_taxes numeric""",
42
+ )
43
+ openupgrade.logged_query(
44
+ env.cr,
45
+ """ALTER TABLE hr_expense_sheet
46
+ ADD COLUMN IF NOT EXISTS untaxed_amount numeric""",
47
+ )
48
+
49
+
50
+ def _fast_fill_analytic_distribution_on_hr_expense(env):
51
+ if not openupgrade.column_exists(env.cr, "hr_expense", "analytic_distribution"):
52
+ openupgrade.logged_query(
53
+ env.cr,
54
+ """
55
+ ALTER TABLE hr_expense
56
+ ADD COLUMN IF NOT EXISTS analytic_distribution jsonb;
57
+ """,
58
+ )
59
+ openupgrade_160.fill_analytic_distribution(
60
+ env,
61
+ table="hr_expense",
62
+ m2m_rel="account_analytic_tag_hr_expense_rel",
63
+ m2m_column1="hr_expense_id",
64
+ )
65
+
66
+
67
+ def _convert_expense_sheet_entries_to_invoices(env):
68
+ """From v16 onwards, account_move related to hr_expense_sheet are created with
69
+ move_type = "in_invoice" as per
70
+ https://github.com/odoo/odoo/blob/87f4667d81f7d8a40dcf225f3daf1a9e2795680d/
71
+ addons/hr_expense/models/hr_expense.py#L1297
72
+ on contrary than on v15, which was "entry".
73
+
74
+ Then, in _compute_payment_state from account.move it will check if the move_type is
75
+ "entry", putting payment_state = "not_paid" for that cases, no matter the
76
+ reconcilation:
77
+ https://github.com/odoo/odoo/blob/87f4667d81f7d8a40dcf225f3daf1a9e2795680d/
78
+ addons/account/models/account_move.py#L926
79
+
80
+ As the sheet payment state is taken from the move's payment_state, we need to
81
+ switch all the existing expenses entries to "in_invoice".
82
+ """
83
+ openupgrade.logged_query(
84
+ env.cr,
85
+ """
86
+ UPDATE account_move am
87
+ SET move_type = 'in_invoice'
88
+ FROM hr_expense_sheet hes
89
+ WHERE hes.account_move_id = am.id AND am.move_type <> 'in_invoice'
90
+ """,
91
+ )
92
+
93
+
94
+ _xmlid_renames = [
95
+ (
96
+ "hr_expense.product_product_zero_cost",
97
+ "hr_expense.product_product_no_cost",
98
+ ),
99
+ ]
100
+
101
+
102
+ @openupgrade.migrate()
103
+ def migrate(env, version):
104
+ _hr_expense_table_new_columns(env)
105
+ _hr_expense_sheet_table_new_columns(env)
106
+ _fast_fill_analytic_distribution_on_hr_expense(env)
107
+ _convert_expense_sheet_entries_to_invoices(env)
108
+ openupgrade.rename_xmlids(env.cr, _xmlid_renames)
@@ -0,0 +1,71 @@
1
+ ---Models in module 'hr_expense'---
2
+ new model hr.expense.split [transient]
3
+ new model hr.expense.split.wizard [transient]
4
+ # NOTHING TO DO
5
+
6
+ ---Fields in module 'hr_expense'---
7
+
8
+ hr_expense / hr.expense / amount_tax (float) : NEW isfunction: function, stored
9
+ # DONE: pre-migration: set value
10
+
11
+ hr_expense / hr.expense / amount_tax_company (float) : NEW isfunction: function, stored
12
+ # DONE: pre-migration: pre-create column for same currency
13
+ # DONE: post-migration: set value by ORM for different currency
14
+
15
+ hr_expense / hr.expense / analytic_account_id (many2one): DEL relation: account.analytic.account
16
+ hr_expense / hr.expense / analytic_distribution_stored_char (char): NEW isfunction: function, stored
17
+ # DONE: pre-migration: fast fill analytic_distribution
18
+
19
+ hr_expense / hr.expense / analytic_tag_ids (many2many) : DEL relation: account.analytic.tag
20
+ # DONE: post-migration: if there are tags with no distribution, we plan OCA module hr_expense_analytic_tag to be installed
21
+
22
+ hr_expense / hr.expense.sheet / total_amount_taxes (float) : NEW isfunction: function, stored
23
+ hr_expense / hr.expense.sheet / untaxed_amount (float) : NEW isfunction: function, stored
24
+ # DONE: pre-migration: pre-create columns
25
+ # DONE: post-migration: set values by SQL
26
+
27
+ hr_expense / account.analytic.applicability / business_domain (False) : NEW selection_keys: ['bill', 'expense', 'general', 'invoice'], mode: modify
28
+ hr_expense / account.move / expense_sheet_id (one2many) : NEW relation: hr.expense.sheet
29
+ hr_expense / hr.expense / name (char) : not a function anymore
30
+ hr_expense / hr.expense / unit_amount (float) : not a function anymore
31
+ hr_expense / hr.expense.sheet / payment_state (selection) : selection_keys is now 'function' ('['in_payment', 'invoicing_legacy', 'not_paid', 'paid', 'partial', 'reversed']')
32
+ # NOTHING TO DO
33
+
34
+ hr_expense / res.company / company_expense_journal_id (many2one): NEW relation: account.journal
35
+ hr_expense / res.company / expense_journal_id (many2one) : NEW relation: account.journal
36
+ # NOTHING TO DO: Preference values for being set by company, but if none selected, the previous default ones are used.
37
+
38
+ ---XML records in module 'hr_expense'---
39
+ DEL ir.actions.act_window: hr_expense.action_hr_expense_sheet_all_to_approve
40
+ DEL ir.actions.act_window: hr_expense.action_hr_expense_sheet_all_to_pay
41
+ DEL ir.actions.act_window: hr_expense.action_hr_expense_sheet_all_to_post
42
+ DEL ir.actions.act_window: hr_expense.hr_expense_actions_my_unsubmitted
43
+ DEL ir.actions.act_window.view: hr_expense.hr_expense_actions_all_kanban
44
+ DEL ir.actions.act_window.view: hr_expense.hr_expense_actions_my_unsubmitted_kanban
45
+ DEL ir.actions.act_window.view: hr_expense.hr_expense_actions_my_unsubmitted_tree
46
+ NEW ir.model.access: hr_expense.access_hr_expense_split_manager
47
+ NEW ir.model.access: hr_expense.access_hr_expense_split_wizard_manager
48
+ NEW ir.rule: hr_expense.ir_rule_hr_expense_sheet_employee_not_draft (noupdate)
49
+ DEL ir.ui.menu: hr_expense.menu_hr_expense_my_expenses_to_submit
50
+ DEL ir.ui.menu: hr_expense.menu_hr_expense_sheet_all
51
+ DEL ir.ui.menu: hr_expense.menu_hr_expense_sheet_all_to_approve
52
+ DEL ir.ui.menu: hr_expense.menu_hr_expense_sheet_all_to_pay
53
+ DEL ir.ui.menu: hr_expense.menu_hr_expense_sheet_all_to_post
54
+ NEW ir.ui.view: hr_expense.hr_expense_sheet_view_search_with_panel
55
+ NEW ir.ui.view: hr_expense.hr_expense_split
56
+ NEW ir.ui.view: hr_expense.product_product_expense_categories_tree_view
57
+ NEW ir.ui.view: hr_expense.view_move_form_inherit_expense
58
+ NEW ir.ui.view: hr_expense.view_product_hr_expense_form
59
+ DEL ir.ui.view: hr_expense.view_hr_expense_sheet_dashboard_tree
60
+ NEW product.product: hr_expense.expense_product_communication (noupdate)
61
+ NEW product.product: hr_expense.expense_product_gift (noupdate)
62
+ NEW product.product: hr_expense.expense_product_meal (noupdate)
63
+ NEW product.product: hr_expense.expense_product_mileage (noupdate)
64
+ NEW product.product: hr_expense.expense_product_travel_accommodation (noupdate)
65
+ DEL product.product: hr_expense.product_product_fixed_cost (noupdate)
66
+ # NOTHING TO DO
67
+
68
+ DEL product.product: hr_expense.product_product_zero_cost
69
+ NEW product.product: hr_expense.product_product_no_cost (noupdate)
70
+ # DONE: pre-migration: renamed product_product_zero_cost -> product_product_no_cost
71
+ # DONE: post-migration: switch noupdate after updating new data
@@ -0,0 +1,25 @@
1
+ # Copyright 2023 Coop IT Easy (https://coopiteasy.be)
2
+ # Copyright 2024 Tecnativa - Pedro M. Baeza
3
+ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
4
+
5
+ from openupgradelib import openupgrade
6
+
7
+
8
+ def _set_allocation_validation_type(env):
9
+ """Convert the previous `set` value to `officer` as it's mostly the same. The only
10
+ difference is that previously if set is selected, the responsible could be empty,
11
+ and thus the own user was selected as approver - which was incorrect -.
12
+ """
13
+ openupgrade.logged_query(
14
+ env.cr,
15
+ """UPDATE hr_leave_type
16
+ SET allocation_validation_type = 'officer'
17
+ WHERE allocation_validation_type = 'set'
18
+ """,
19
+ )
20
+
21
+
22
+ @openupgrade.migrate()
23
+ def migrate(env, version):
24
+ _set_allocation_validation_type(env)
25
+ openupgrade.load_data(env.cr, "hr_holidays", "16.0.1.5/noupdate_changes.xml")
@@ -0,0 +1,44 @@
1
+ ---Models in module 'hr_holidays'---
2
+ new model hr.holidays.cancel.leave [transient]
3
+ # NOTHING TO DO: transient model
4
+
5
+ new model hr.leave.stress.day
6
+ # NOTHING TO DO: new feature
7
+
8
+ ---Fields in module 'hr_holidays'---
9
+ hr_holidays / hr.leave / active (boolean) : NEW
10
+ # NOTHING TO DO: default value is True.
11
+
12
+ hr_holidays / hr.leave / request_unit_custom (boolean) : DEL
13
+ # NOTHING TO DO: not needed anymore. See : https://github.com/odoo/odoo/commit/81c8a0564d54c981e65a6ed3b2c70dd792d59a46
14
+
15
+ hr_holidays / hr.leave.accrual.level / postpone_max_days (integer) : NEW
16
+ hr_holidays / hr.leave.stress.day / color (integer) : NEW hasdefault: default
17
+ hr_holidays / hr.leave.stress.day / company_id (many2one) : NEW relation: res.company, required, hasdefault: default
18
+ hr_holidays / hr.leave.stress.day / department_ids (many2many) : NEW relation: hr.department
19
+ hr_holidays / hr.leave.stress.day / end_date (date) : NEW required
20
+ hr_holidays / hr.leave.stress.day / name (char) : NEW required
21
+ hr_holidays / hr.leave.stress.day / resource_calendar_id (many2one): NEW relation: resource.calendar
22
+ hr_holidays / hr.leave.stress.day / start_date (date) : NEW required
23
+ # NOTHING TO DO: new feature
24
+
25
+ hr_holidays / hr.leave.type / allocation_validation_type (selection): selection_keys is now '['no', 'officer']' ('['no', 'officer', 'set']')
26
+ # DONE: post-migration: convert previous `set` values to `officer`. They acted the same except the responsible_id is not set. In that case, the user was selected as approver, which was incorrect.
27
+
28
+ ---XML records in module 'hr_holidays'---
29
+ NEW ir.actions.act_window: hr_holidays.hr_leave_stress_day_action
30
+ DEL ir.actions.act_window.view: hr_holidays.hr_leave_action_my_view_form
31
+ DEL ir.actions.act_window.view: hr_holidays.hr_leave_action_my_view_tree
32
+ NEW ir.model.access: hr_holidays.access_hr_holidays_cancel_leave
33
+ NEW ir.model.access: hr_holidays.access_hr_leave_stress_day_manager
34
+ NEW ir.model.access: hr_holidays.access_hr_leave_stress_day_user
35
+ NEW ir.model.constraint: hr_holidays.constraint_hr_leave_stress_day_date_from_after_day_to
36
+ NEW ir.rule: hr_holidays.hr_leave_stress_day_rule_multi_company (noupdate)
37
+ NEW ir.ui.menu: hr_holidays.hr_holidays_stress_day_menu_configuration
38
+ NEW ir.ui.view: hr_holidays.hr_holidays_cancel_leave_form
39
+ NEW ir.ui.view: hr_holidays.hr_leave_report_view_form
40
+ NEW ir.ui.view: hr_holidays.hr_leave_stress_day_view_form
41
+ NEW ir.ui.view: hr_holidays.hr_leave_stress_day_view_list
42
+ NEW ir.ui.view: hr_holidays.hr_leave_stress_day_view_search
43
+ NEW ir.ui.view: hr_holidays.hr_leave_view_kanban_approve_department
44
+ # NOTHING TO DO: managed by the ORM
@@ -0,0 +1,15 @@
1
+ ---Models in module 'hr_hourly_cost'---
2
+ ---Fields in module 'hr_hourly_cost'---
3
+ hr_hourly_cost / hr.employee / currency_id (many2one) : previously in module hr_timesheet
4
+
5
+ # NOTHING TO DO
6
+
7
+ hr_hourly_cost / hr.employee / hourly_cost (float) : NEW hasdefault: default
8
+
9
+ # NOTHING TO DO: This field renamed from timesheet_cost and it handled in hr_timsheet (because this module is split from hr_timsheet
10
+ to a new module so that can't put migration script in itself).
11
+
12
+ ---XML records in module 'hr_hourly_cost'---
13
+ NEW ir.ui.view: hr_hourly_cost.view_employee_form
14
+
15
+ #NOTHING TO DO
@@ -0,0 +1,6 @@
1
+ ---Models in module 'hr_recruitment_survey'---
2
+ ---Fields in module 'hr_recruitment_survey'---
3
+ ---XML records in module 'hr_recruitment_survey'---
4
+ ---nothing has changed in this module--
5
+
6
+ # NOTHING TO DO
@@ -0,0 +1,76 @@
1
+ from openupgradelib import openupgrade
2
+
3
+
4
+ def update_rename_field(env):
5
+ openupgrade.logged_query(
6
+ env.cr,
7
+ """
8
+ ALTER TABLE hr_employee
9
+ ADD COLUMN IF NOT EXISTS hourly_cost numeric
10
+ """,
11
+ )
12
+
13
+ openupgrade.logged_query(
14
+ env.cr,
15
+ """
16
+ UPDATE hr_employee
17
+ SET hourly_cost = timesheet_cost
18
+ """,
19
+ )
20
+
21
+
22
+ def create_ancestor_task_id(env):
23
+ openupgrade.logged_query(
24
+ env.cr,
25
+ """
26
+ ALTER TABLE account_analytic_line
27
+ ADD COLUMN IF NOT EXISTS ancestor_task_id integer
28
+ """,
29
+ )
30
+
31
+ openupgrade.logged_query(
32
+ env.cr,
33
+ """
34
+ UPDATE account_analytic_line AS aal
35
+ SET ancestor_task_id = pt.ancestor_id
36
+ FROM project_task AS pt
37
+ WHERE pt.id = aal.task_id
38
+ """,
39
+ )
40
+
41
+
42
+ def create_manager_id(env):
43
+ openupgrade.logged_query(
44
+ env.cr,
45
+ """
46
+ ALTER TABLE account_analytic_line
47
+ ADD COLUMN IF NOT EXISTS manager_id integer
48
+ """,
49
+ )
50
+
51
+ openupgrade.logged_query(
52
+ env.cr,
53
+ """
54
+ UPDATE account_analytic_line AS aal
55
+ SET manager_id = he.parent_id
56
+ FROM hr_employee AS he
57
+ WHERE he.id = aal.employee_id
58
+ """,
59
+ )
60
+
61
+
62
+ def delete_constraint_project_task_create_timesheet_time_positive(env):
63
+ openupgrade.delete_sql_constraint_safely(
64
+ env,
65
+ "hr_timesheet",
66
+ "project_task",
67
+ "create_timesheet_time_positive",
68
+ )
69
+
70
+
71
+ @openupgrade.migrate()
72
+ def migrate(env, version):
73
+ update_rename_field(env)
74
+ create_ancestor_task_id(env)
75
+ create_manager_id(env)
76
+ delete_constraint_project_task_create_timesheet_time_positive(env)
@@ -0,0 +1,76 @@
1
+ ---Models in module 'hr_timesheet'---
2
+ obsolete model project.task.create.timesheet [transient]
3
+ new model timesheets.analysis.report [sql_view]
4
+
5
+ # NOTHING TO DO
6
+
7
+ ---Fields in module 'hr_timesheet'---
8
+ hr_timesheet / account.analytic.line / ancestor_task_id (many2one) : NEW relation: project.task, isrelated: related, stored
9
+ hr_timesheet / account.analytic.line / manager_id (many2one) : NEW relation: hr.employee, isrelated: related, stored
10
+
11
+ # DONE: create column and load data in pre-migration
12
+
13
+ hr_timesheet / account.analytic.line / partner_id (False) : module is now 'account' ('hr_timesheet')
14
+ hr_timesheet / hr.employee / currency_id (many2one) : module is now 'hr_hourly_cost' ('hr_timesheet')
15
+
16
+ # NOTHING TO DO
17
+
18
+ hr_timesheet / hr.employee / timesheet_cost (float) : DEL
19
+
20
+ # DONE: changed to hourly_cost field in pre-migration
21
+
22
+ hr_timesheet / project.project / allocated_hours (float) : NEW
23
+
24
+ # NOTHING TO DO: remove in master
25
+
26
+ hr_timesheet / project.project / timesheet_count (boolean) : type is now 'integer' ('boolean')
27
+
28
+ # NOTHING TO DO: field store = False
29
+
30
+ ---XML records in module 'hr_timesheet'---
31
+ NEW ir.actions.act_window.view: hr_timesheet.act_hr_timesheet_line_by_project_view_form
32
+ NEW ir.actions.act_window.view: hr_timesheet.act_hr_timesheet_line_by_project_view_graph
33
+ NEW ir.actions.act_window.view: hr_timesheet.act_hr_timesheet_line_by_project_view_kanban
34
+ NEW ir.actions.act_window.view: hr_timesheet.act_hr_timesheet_line_by_project_view_pivot
35
+ NEW ir.actions.act_window.view: hr_timesheet.act_hr_timesheet_line_by_project_view_tree
36
+ DEL ir.actions.act_window.view: hr_timesheet.act_hr_timesheet_report_form
37
+ DEL ir.actions.act_window.view: hr_timesheet.act_hr_timesheet_report_kanban
38
+ DEL ir.actions.act_window.view: hr_timesheet.act_hr_timesheet_report_tree
39
+ DEL ir.actions.act_window.view: hr_timesheet.timesheet_action_view_report_by_project_form
40
+ DEL ir.actions.act_window.view: hr_timesheet.timesheet_action_view_report_by_project_kanban
41
+ DEL ir.actions.act_window.view: hr_timesheet.timesheet_action_view_report_by_project_tree
42
+ DEL ir.actions.act_window.view: hr_timesheet.timesheet_action_view_report_by_task_form
43
+ DEL ir.actions.act_window.view: hr_timesheet.timesheet_action_view_report_by_task_kanban
44
+ DEL ir.actions.act_window.view: hr_timesheet.timesheet_action_view_report_by_task_tree
45
+ NEW ir.actions.report: hr_timesheet.timesheet_report_task_timesheets
46
+ NEW ir.model.access: hr_timesheet.access_timesheets_analysis_report_manager
47
+ NEW ir.model.access: hr_timesheet.access_timesheets_analysis_report_user
48
+ DEL ir.model.access: hr_timesheet.access_project_task_create_timesheet
49
+
50
+ # NOTHING TO DO
51
+
52
+ DEL ir.model.constraint: hr_timesheet.constraint_project_task_create_timesheet_time_positive
53
+
54
+ # DONE : delete safely in pre-migration
55
+
56
+ NEW ir.rule: hr_timesheet.timesheets_analysis_report_comp_rule (noupdate)
57
+ NEW ir.ui.view: hr_timesheet.hr_timesheet_report_search
58
+ NEW ir.ui.view: hr_timesheet.project_project_view_tree_inherit_sale_project
59
+ NEW ir.ui.view: hr_timesheet.project_sharing_project_task_view_search_inherit_timesheet
60
+ NEW ir.ui.view: hr_timesheet.project_update_view_search_inherit
61
+ NEW ir.ui.view: hr_timesheet.rating_rating_view_search_project_inherited
62
+ NEW ir.ui.view: hr_timesheet.report_timesheet_task
63
+ NEW ir.ui.view: hr_timesheet.timesheet_project_task_page
64
+ NEW ir.ui.view: hr_timesheet.timesheets_analysis_report_graph_employee
65
+ NEW ir.ui.view: hr_timesheet.timesheets_analysis_report_graph_project
66
+ NEW ir.ui.view: hr_timesheet.timesheets_analysis_report_graph_task
67
+ NEW ir.ui.view: hr_timesheet.timesheets_analysis_report_pivot_employee
68
+ NEW ir.ui.view: hr_timesheet.timesheets_analysis_report_pivot_project
69
+ NEW ir.ui.view: hr_timesheet.timesheets_analysis_report_pivot_task
70
+ NEW ir.ui.view: hr_timesheet.view_hr_timesheet_line_graph_by_employee
71
+ NEW ir.ui.view: hr_timesheet.view_project_project_filter_inherit_timesheet
72
+ NEW ir.ui.view: hr_timesheet.view_task_search_form_hr_extended
73
+ DEL ir.ui.view: hr_timesheet.project_sharing_inherit_project_task_view_search
74
+ DEL ir.ui.view: hr_timesheet.project_task_create_timesheet_view_form
75
+
76
+ # NOTHING TO DO
@@ -5,3 +5,4 @@ NEW ir.actions.act_window.view: hr_timesheet_attendance.action_hr_timesheet_atte
5
5
  NEW ir.rule: hr_timesheet_attendance.hr_timesheet_attendance_report_rule_approver (noupdate)
6
6
  NEW ir.rule: hr_timesheet_attendance.hr_timesheet_attendance_report_rule_manager (noupdate)
7
7
  NEW ir.rule: hr_timesheet_attendance.hr_timesheet_attendance_report_rule_user (noupdate)
8
+ # NOTHING TO DO: Handled by ORM
@@ -0,0 +1,18 @@
1
+ # Copyright 2023 Trần Trường Sơn
2
+ # Copyright 2023 Rémy Taymans
3
+ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
4
+
5
+ from openupgradelib import openupgrade
6
+
7
+ _translations_to_delete = [
8
+ "mail_template_data_project_task",
9
+ "project_manager_all_project_tasks_rule",
10
+ "project_message_user_assigned",
11
+ "rating_project_request_email_template",
12
+ ]
13
+
14
+
15
+ @openupgrade.migrate()
16
+ def migrate(env, version):
17
+ openupgrade.load_data(env.cr, "project", "16.0.1.2/noupdate_changes.xml")
18
+ openupgrade.delete_record_translations(env.cr, "project", _translations_to_delete)
@@ -0,0 +1,170 @@
1
+ # Copyright 2023 Trần Trường Sơn
2
+ # Copyright 2023 Rémy Taymans
3
+ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
4
+
5
+ from openupgradelib import openupgrade
6
+
7
+ _new_fields = [
8
+ (
9
+ "is_closed", # Field name
10
+ "project.task", # Model name
11
+ "project_task", # Table name
12
+ "boolean", # Odoo Field type (in lower case)
13
+ False, # [Optional] SQL type (if custom fields)
14
+ "project", # Module name
15
+ False, # [Optional] Default value
16
+ ),
17
+ (
18
+ "ancestor_id", # Field name
19
+ "project.task", # Model name
20
+ "project_task", # Table name
21
+ "many2one", # Odoo Field type (in lower case)
22
+ False, # [Optional] SQL type (if custom fields)
23
+ "project", # Module name
24
+ False, # [Optional] Default value
25
+ ),
26
+ (
27
+ "is_analytic_account_id_changed", # Field name
28
+ "project.task", # Model name
29
+ "project_task", # Table name
30
+ "boolean", # Odoo Field type (in lower case)
31
+ False, # [Optional] SQL type (if custom fields)
32
+ "project", # Module name
33
+ False, # [Optional] Default value
34
+ ),
35
+ (
36
+ "allow_milestones", # Field name
37
+ "project.project", # Model name
38
+ "project_project", # Table name
39
+ "boolean", # Odoo Field type (in lower case)
40
+ False, # [Optional] SQL type (if custom fields)
41
+ "project", # Module name
42
+ False, # [Optional] Default value
43
+ ),
44
+ ]
45
+
46
+
47
+ def _set_task_type_fold_if_is_closed(env):
48
+ """Field `is_closed` on project.task.type is removed. The field
49
+ `fold` can be used instead.
50
+ """
51
+ openupgrade.logged_query(
52
+ env.cr,
53
+ """
54
+ UPDATE project_task_type
55
+ SET fold = TRUE
56
+ WHERE is_closed = TRUE;
57
+ """,
58
+ )
59
+
60
+
61
+ def _fill_project_task_is_closed(env):
62
+ """Field `is_closed` on project.task is now a stored field."""
63
+ openupgrade.logged_query(
64
+ env.cr,
65
+ """
66
+ UPDATE project_task task
67
+ SET is_closed = stage.fold
68
+ FROM project_task_type stage
69
+ WHERE task.stage_id = stage.id;
70
+ """,
71
+ )
72
+
73
+
74
+ def _fill_project_last_update_status_if_null(env):
75
+ """In some cases, the user can go to the DB and reset the
76
+ `last_update_status` field to NULL. In version 16.0 it is necessary
77
+ to reset it to `to_define` because it has a `required` attribute.
78
+ """
79
+ openupgrade.logged_query(
80
+ env.cr,
81
+ """
82
+ UPDATE project_project project
83
+ SET last_update_status = 'to_define'
84
+ WHERE last_update_status IS NULL;
85
+ """,
86
+ )
87
+
88
+
89
+ def _compute_project_task_ancestor_id(env):
90
+ """
91
+ New column at version 16.0. valid as the ancestor of the current task
92
+ """
93
+ openupgrade.logged_query(
94
+ env.cr,
95
+ """
96
+ WITH RECURSIVE task_ancestors AS (
97
+ SELECT id, parent_id, id AS ancestor_id
98
+ FROM project_task
99
+ WHERE parent_id IS NULL
100
+
101
+ UNION ALL
102
+
103
+ SELECT pt.id, pt.parent_id, ta.ancestor_id
104
+ FROM project_task pt
105
+ INNER JOIN task_ancestors ta ON pt.parent_id = ta.id
106
+ )
107
+ UPDATE project_task pt
108
+ SET ancestor_id = ta.ancestor_id
109
+ FROM task_ancestors ta
110
+ WHERE pt.id = ta.id;
111
+
112
+ UPDATE project_task pt
113
+ SET ancestor_id = NULL
114
+ WHERE id = ancestor_id;
115
+ """,
116
+ )
117
+
118
+
119
+ def _compute_project_task_is_analytic_account_id_changed(env):
120
+ """
121
+ `is_analytic_account_id_changed` is a new field at version 16.0.
122
+ It has a value of False if you have the same admin account as the project,
123
+ otherwise it will have a value of True
124
+ """
125
+ openupgrade.logged_query(
126
+ env.cr,
127
+ """
128
+ UPDATE project_task task
129
+ SET is_analytic_account_id_changed = CASE
130
+ WHEN project_id IS NOT NULL
131
+ AND task.project_id = project.id
132
+ AND task.analytic_account_id != project.analytic_account_id
133
+ THEN TRUE
134
+ ELSE FALSE
135
+ END
136
+ FROM project_project as project;
137
+ """,
138
+ )
139
+
140
+
141
+ def _fill_project_allow_milestones(env):
142
+ """New field allow_milestones on project.project depends on the
143
+ value of the configuration (based on a group)
144
+ project.group_project_milestone.
145
+ Previously, milestone where visible by default on a project. To keep
146
+ this behaviour with existing project, allow_milestones need to be
147
+ set to True.
148
+ """
149
+ openupgrade.logged_query(
150
+ env.cr,
151
+ """
152
+ UPDATE project_project project
153
+ SET allow_milestones = true
154
+ """,
155
+ )
156
+
157
+
158
+ @openupgrade.migrate()
159
+ def migrate(env, version):
160
+ openupgrade.add_fields(env, _new_fields)
161
+ _set_task_type_fold_if_is_closed(env)
162
+ _fill_project_task_is_closed(env)
163
+ _fill_project_last_update_status_if_null(env)
164
+ _compute_project_task_ancestor_id(env)
165
+ _compute_project_task_is_analytic_account_id_changed(env)
166
+
167
+ # Remove SQL view project_task_burndown_chart_report not used anymore in Odoo v16.0
168
+ openupgrade.logged_query(
169
+ env.cr, "DROP VIEW IF EXISTS project_task_burndown_chart_report CASCADE"
170
+ )
@@ -0,0 +1 @@
1
+ from . import test_project_migration
@@ -0,0 +1,13 @@
1
+ from odoo.tests import TransactionCase
2
+
3
+
4
+ class TestProjectMigration(TransactionCase):
5
+ def test_project_allow_milestones(self):
6
+ """Test that the allow_milestones field on a project is correctly set.
7
+ On a database with demo data, project.group_project_milestone
8
+ option is set to true. So allow_milestones should be true on
9
+ projects.
10
+ """
11
+ projects = self.env["project.project"].search([])
12
+ for project in projects:
13
+ self.assertTrue(project.allow_milestones)
@@ -0,0 +1,101 @@
1
+ ---Models in module 'project'---
2
+ obsolete model project.delete.wizard [transient]
3
+ # NOTHING TO DO: wizard removed
4
+
5
+ ---Fields in module 'project'---
6
+ project / account.analytic.tag / task_ids (many2many) : DEL relation: project.task
7
+ project / project.task / analytic_tag_ids (many2many) : DEL relation: account.analytic.tag
8
+ # NOTHING TO DO: lost feature
9
+
10
+ project / project.milestone / task_ids (one2many) : NEW relation: project.task
11
+ project / project.project / task_properties_definition (properties_definition): NEW
12
+ project / project.task / task_properties (properties) : NEW hasdefault: compute
13
+ project / res.company / analytic_plan_id (many2one) : NEW relation: account.analytic.plan, hasdefault: compute
14
+ # NOTHING TO DO: new features
15
+
16
+ project / project.tags / project_ids (many2many) : NEW relation: project.project
17
+ project / project.tags / task_ids (many2many) : NEW relation: project.task
18
+ # NOTHING TO DO: reverse relation that already exists on project.project and project.task
19
+
20
+ pad_project / project.project / description_pad (char) : DEL
21
+ pad_project / project.project / use_pads (boolean) : DEL
22
+ pad_project / project.task / description_pad (char) : DEL
23
+ # TODO: Module pad_project has been removed
24
+
25
+ project / project.project / allow_milestones (boolean) : NEW hasdefault: default
26
+ # DONE: pre-migration: create field and set default value.
27
+
28
+ project / project.project / last_update_status (selection): not a function anymore
29
+ project / project.project / last_update_status (selection): now required
30
+ project / project.project / last_update_status (selection): selection_keys is now '['at_risk', 'off_track', 'on_hold', 'on_track', 'to_define']' ('['at_risk', 'off_track', 'on_hold', 'on_track']')
31
+ # DONE: pre-migration: Set value of last_update_status to 'to_define' where field is empty
32
+
33
+ project / project.task.type / is_closed (boolean) : DEL
34
+ # DONE: pre-migration: Field removed, field 'fold' should be used instead. Moving values from 'is_closed' to 'fold'.
35
+
36
+ project / project.task / is_closed (boolean) : is now stored
37
+ # DONE: pre-migration: Add new column & set value for it
38
+
39
+ project / project.task / ancestor_id (many2one) : NEW relation: project.task, isfunction: function, stored
40
+ project / project.task / is_analytic_account_id_changed (boolean): NEW isfunction: function, stored
41
+ # DONE: pre-migration: pre-compute value for new computed fields
42
+
43
+ project / project.task / is_blocked (boolean) : NEW isfunction: function, stored
44
+ project / project.task / milestone_id (many2one) : NEW relation: project.milestone, hasdefault: compute
45
+ # TODO (speed improvement): pre-migration: pre-compute value for new computed fields
46
+
47
+
48
+ ---XML records in module 'project'---
49
+ NEW digest.tip: project.digest_tip_project_1
50
+ NEW ir.actions.act_window: project.action_send_mail_project_project
51
+ NEW ir.actions.act_window: project.action_send_mail_project_task
52
+ NEW ir.actions.act_window: project.action_view_task_from_milestone
53
+ NEW ir.actions.act_window: project.open_view_project_all_config_group_stage
54
+ NEW ir.actions.act_window: project.project_sharing_project_task_action_sub_task
55
+ NEW ir.actions.act_window: project.project_task_action_sub_task
56
+ DEL ir.actions.act_window: project.project_milestone_all
57
+ NEW ir.actions.act_window.view: project.open_view_all_task_list_calendar
58
+ NEW ir.actions.act_window.view: project.open_view_all_task_list_kanban
59
+ NEW ir.actions.act_window.view: project.open_view_all_task_list_tree
60
+ NEW ir.actions.act_window.view: project.open_view_project_all_config_group_stage_kanban_action_view
61
+ NEW ir.actions.act_window.view: project.open_view_project_all_config_group_stage_tree_action_view
62
+ NEW ir.actions.act_window.view: project.project_all_task_activity_action_view
63
+ NEW ir.actions.act_window.view: project.project_all_task_calendar_action_view
64
+ NEW ir.actions.act_window.view: project.project_all_task_graph_action_view
65
+ NEW ir.actions.act_window.view: project.project_all_task_pivot_action_view
66
+ NEW ir.actions.act_window.view: project.project_sharing_subtasks_form_action_view
67
+ NEW ir.actions.act_window.view: project.project_sharing_subtasks_kanban_action_view
68
+ NEW ir.actions.act_window.view: project.project_sharing_subtasks_tree_action_view
69
+ NEW ir.actions.act_window.view: project.project_task_form_action_view
70
+ NEW ir.actions.act_window.view: project.project_task_kanban_action_view
71
+ NEW ir.actions.act_window.view: project.project_task_tree_action_view
72
+ NEW ir.actions.act_window.view: project.rating_rating_action_task_kanban
73
+ NEW ir.actions.act_window.view: project.rating_rating_action_view_project_rating_kanban
74
+ DEL ir.actions.server: project.unlink_project_action
75
+ NEW ir.model.access: project.access_project_task_burndown_chart_report_user
76
+ NEW ir.model.access: project.access_report_project_task_user_project_user
77
+ DEL ir.model.access: project.access_project_delete_wizard
78
+ NEW ir.rule: project.burndown_chart_project_manager_rule (noupdate)
79
+ NEW ir.rule: project.burndown_chart_project_user_rule (noupdate)
80
+ NEW ir.rule: project.report_project_task_manager_rule (noupdate)
81
+ NEW ir.rule: project.report_project_task_user_rule (noupdate)
82
+ NEW ir.ui.menu: project.menu_projects_config_group_stage
83
+ NEW ir.ui.view: project.rating_rating_project_view_kanban
84
+ NEW ir.ui.view: project.task_type_tree_inherited
85
+ NEW ir.ui.view: project.view_project_calendar
86
+ NEW ir.ui.view: project.view_project_config_kanban
87
+ NEW ir.ui.view: project.view_project_task_pivot_inherit
88
+ NEW ir.ui.view: project.view_project_task_type_unarchive_wizard
89
+ NEW ir.ui.view: project.view_task_all_calendar
90
+ NEW ir.ui.view: project.view_task_kanban_inherit_my_task
91
+ DEL ir.ui.view: pad_project.project_project_view_form
92
+ DEL ir.ui.view: pad_project.res_config_settings_view_form
93
+ DEL ir.ui.view: pad_project.view_task_form2_inherit_pad_project
94
+ DEL ir.ui.view: project.project_collaborator_view_form
95
+ DEL ir.ui.view: project.project_delete_wizard_form
96
+ DEL ir.ui.view: project.project_task_burndown_chart_report_view_pivot
97
+ NEW mail.message.subtype: project.mt_project_update_create (noupdate)
98
+ NEW mail.message.subtype: project.mt_task_progress (noupdate)
99
+ NEW mail.message.subtype: project.mt_update_create (noupdate)
100
+ NEW res.groups: project.group_project_milestone
101
+ # NOTHING TO DO
@@ -0,0 +1,22 @@
1
+ ---Models in module 'sale_project'---
2
+ ---Fields in module 'sale_project'---
3
+ sale_project / product.product / service_policy (selection) : previously in module sale_timesheet
4
+ sale_project / product.template / service_policy (selection) : previously in module sale_timesheet
5
+ sale_project / project.project / allow_billable (boolean) : previously in module sale_timesheet
6
+ sale_project / project.project / invoice_count (integer) : previously in module account_sale_timesheet
7
+ sale_project / project.project / vendor_bill_count (integer) : previously in module sale_project_account
8
+ # NOTHING TO DO: Covered by ORM
9
+
10
+ sale_project / product.template / service_type (False) : NEW selection_keys: ['manual', 'milestones'], mode: modify
11
+ sale_project / project.milestone / quantity_percentage (float) : NEW
12
+ sale_project / project.milestone / sale_line_id (many2one) : NEW relation: sale.order.line
13
+ sale_project / sale.order.line / qty_delivered_method (False) : NEW selection_keys: ['analytic', 'manual', 'milestones', 'stock_move'], mode: modify
14
+ sale_project / sale.order.line / reached_milestones_ids (one2many): NEW relation: project.milestone
15
+ # NOTHING TO DO: New feature of billing by milestones.
16
+
17
+ ---XML records in module 'sale_project'---
18
+ NEW ir.ui.view: sale_project.project_milestone_view_form
19
+ NEW ir.ui.view: sale_project.project_milestone_view_tree
20
+ NEW ir.ui.view: sale_project.sale_project_milestone_view_tree
21
+ DEL ir.ui.view: sale_project.project_task_view_form_inherit_sale_line_editable
22
+ # NOTHING TO DO: noupdate="0" records
@@ -0,0 +1,36 @@
1
+ from openupgradelib import openupgrade
2
+
3
+
4
+ def _update_account_analytic_line_timesheet_invoice_type(env):
5
+ openupgrade.logged_query(
6
+ env.cr,
7
+ """
8
+ WITH timesheet_info as (
9
+ SELECT aal.id as id,
10
+ product_tmpl.service_type as service_type
11
+ FROM account_analytic_line aal
12
+ JOIN sale_order_line sol
13
+ ON sol.id = aal.so_line
14
+ JOIN product_product product
15
+ ON product.id = sol.product_id
16
+ JOIN product_template product_tmpl
17
+ ON product_tmpl.id = product.product_tmpl_id
18
+ WHERE product_tmpl.type = 'service'
19
+ AND product_tmpl.invoice_policy = 'delivery'
20
+ AND product_tmpl.service_type IN ('milestones', 'manual')
21
+ )
22
+ UPDATE account_analytic_line aal
23
+ SET timesheet_invoice_type = CONCAT('billable_', info.service_type)
24
+ FROM timesheet_info info
25
+ WHERE aal.id = info.id
26
+ """,
27
+ )
28
+
29
+
30
+ @openupgrade.migrate()
31
+ def migrate(env, version):
32
+ _update_account_analytic_line_timesheet_invoice_type(env)
33
+ # Remove SQL view project_profitability_report not used anymore in Odoo 16
34
+ openupgrade.logged_query(
35
+ env.cr, "DROP VIEW IF EXISTS project_profitability_report CASCADE"
36
+ )
@@ -0,0 +1,58 @@
1
+ ---Models in module 'sale_timesheet'---
2
+ obsolete model project.profitability.report [sql_view]
3
+ # NOTHING TO DO
4
+
5
+ ---Fields in module 'sale_timesheet'---
6
+ sale_timesheet / account.analytic.line / timesheet_invoice_type (selection): selection_keys is now '['billable_fixed', 'billable_manual', 'billable_milestones', 'billable_time', 'non_billable', 'other_costs', 'other_revenues', 'service_revenues', 'timesheet_revenues']' ('['billable_fixed', 'billable_time', 'non_billable', 'other_costs', 'other_revenues', 'service_revenues', 'timesheet_revenues']')
7
+ # DONE: pre-migration: update the value for timesheet_invoice_type.
8
+
9
+ sale_timesheet / product.product / service_policy (selection) : module is now 'sale_project' ('sale_timesheet')
10
+ sale_timesheet / product.template / service_policy (selection) : module is now 'sale_project' ('sale_timesheet')
11
+ sale_timesheet / project.project / allow_billable (boolean) : module is now 'sale_project' ('sale_timesheet')
12
+ # NOTHING TO DO: Module changes handled by ORM.
13
+
14
+ sale_timesheet / product.template / service_policy (selection) : selection_keys is now 'function' ('['delivered_manual', 'delivered_timesheet', 'ordered_timesheet']')
15
+ # NOTHING TO DO: store="False"
16
+
17
+ sale_timesheet / product.template / service_type (False) : selection_keys is now '['manual', 'milestones', 'timesheet']' ('['manual', 'timesheet']')
18
+ sale_timesheet / sale.order.line / qty_delivered_method (False) : selection_keys is now '['analytic', 'manual', 'milestones', 'stock_move', 'timesheet']' ('['analytic', 'manual', 'stock_move', 'timesheet']')
19
+ sale_timesheet / sale.order.line / timesheet_ids (one2many) : NEW relation: account.analytic.line
20
+ # NOTHING TO DO: New feature of invoicing by milestones.
21
+
22
+ sale_timesheet / project.project / allocated_hours (False) : NEW mode: modify, hasdefault: compute
23
+ # NOTHING TO DO
24
+
25
+ ---XML records in module 'sale_timesheet'---
26
+ NEW ir.actions.act_window: sale_timesheet.timesheet_action_from_sales_order_item
27
+ NEW ir.actions.act_window.view: sale_timesheet.timesheet_action_from_sales_order_item_form
28
+ NEW ir.actions.act_window.view: sale_timesheet.timesheet_action_from_sales_order_item_graph
29
+ NEW ir.actions.act_window.view: sale_timesheet.timesheet_action_from_sales_order_item_kanban
30
+ NEW ir.actions.act_window.view: sale_timesheet.timesheet_action_from_sales_order_item_pivot
31
+ NEW ir.actions.act_window.view: sale_timesheet.timesheet_action_from_sales_order_item_tree
32
+ DEL ir.actions.act_window.view: sale_timesheet.timesheet_action_view_report_by_billing_rate_form
33
+ DEL ir.actions.act_window.view: sale_timesheet.timesheet_action_view_report_by_billing_rate_kanban
34
+ DEL ir.actions.act_window.view: sale_timesheet.timesheet_action_view_report_by_billing_rate_tree
35
+ NEW ir.actions.report: sale_timesheet.timesheet_report_account_move
36
+ NEW ir.actions.report: sale_timesheet.timesheet_report_sale_order
37
+ DEL ir.filters: sale_timesheet.ir_filter_project_profitability_report_costs_and_revenues
38
+ DEL ir.model.access: sale_timesheet.access_project_profitability_report_analysis_manager
39
+ NEW ir.ui.view: sale_timesheet.hr_timesheet_report_search_sale_timesheet
40
+ NEW ir.ui.view: sale_timesheet.project_project_view_kanban_inherit_sale_timesheet_so_button
41
+ NEW ir.ui.view: sale_timesheet.project_sharing_inherit_project_task_view_tree_sale_timesheet
42
+ NEW ir.ui.view: sale_timesheet.report_timesheet_account_move
43
+ NEW ir.ui.view: sale_timesheet.report_timesheet_sale_order
44
+ NEW ir.ui.view: sale_timesheet.timesheet_sale_page
45
+ NEW ir.ui.view: sale_timesheet.timesheets_analysis_report_graph_inherit
46
+ NEW ir.ui.view: sale_timesheet.timesheets_analysis_report_graph_invoice_type
47
+ NEW ir.ui.view: sale_timesheet.timesheets_analysis_report_pivot_inherit
48
+ NEW ir.ui.view: sale_timesheet.timesheets_analysis_report_pivot_invoice_type
49
+ NEW ir.ui.view: sale_timesheet.view_hr_timesheet_line_graph_employee_per_date
50
+ NEW ir.ui.view: sale_timesheet.view_task_tree2_inherited
51
+ DEL ir.ui.view: sale_timesheet.project_profitability_report_view_graph
52
+ DEL ir.ui.view: sale_timesheet.project_profitability_report_view_pivot
53
+ DEL ir.ui.view: sale_timesheet.project_profitability_report_view_search
54
+ DEL ir.ui.view: sale_timesheet.project_profitability_report_view_tree
55
+ DEL ir.ui.view: sale_timesheet.project_project_view_form_salesman
56
+ DEL ir.ui.view: sale_timesheet.project_task_view_form_inherit_sale_timesheet_editable
57
+ DEL ir.ui.view: sale_timesheet.timesheet_view_pivot_revenue
58
+ # NOTHING TO DO: noupdate="0" records
@@ -0,0 +1,24 @@
1
+ # Copyright 2024 Tecnativa - Pedro M. Baeza
2
+ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
3
+ from openupgradelib import openupgrade
4
+
5
+
6
+ def _empty_images_on_answers(env):
7
+ """Clean images on those answers that had the check unmarked on the question, as
8
+ they didn't show the image in v15 even if they have one loaded. Now, not having the
9
+ check, the image will be displayed always.
10
+ """
11
+ env.cr.execute("SELECT id FROM survey_question WHERE NOT allow_value_image")
12
+ question_ids = env.cr.fetchall()
13
+ answers = env["survey.question.answer"].search(
14
+ [("value_image", "!=", False), ("question_id", "in", question_ids)]
15
+ )
16
+ answers.value_image = False
17
+
18
+
19
+ @openupgrade.migrate()
20
+ def migrate(env, version):
21
+ _empty_images_on_answers(env)
22
+ openupgrade.delete_records_safely_by_xml_id(
23
+ env, ["survey.survey_action_server_clean_test_answers"]
24
+ )
@@ -0,0 +1,14 @@
1
+ # Copyright 2024 Tecnativa - Pedro M. Baeza
2
+ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
3
+ from openupgradelib import openupgrade
4
+
5
+ _xmlids_renames = [
6
+ ("survey.survey_form", "survey.survey_survey_view_form"),
7
+ ("survey.survey_kanban", "survey.survey_survey_view_kanban"),
8
+ ("survey.survey_tree", "survey.survey_survey_view_tree"),
9
+ ]
10
+
11
+
12
+ @openupgrade.migrate()
13
+ def migrate(env, version):
14
+ openupgrade.rename_xmlids(env.cr, _xmlids_renames)
@@ -0,0 +1,48 @@
1
+ ---Models in module 'survey'---
2
+ ---Fields in module 'survey'---
3
+ survey / survey.question / allow_value_image (boolean) : DEL
4
+ # DONE: post-migration: Empty value_image on answers that had this check unmarked on the question. Now images are displayed always if they are present.
5
+
6
+ survey / survey.question / background_image (binary) : NEW attachment: True, hasdefault: compute
7
+ # NOTHING TO DO: New feature. The first computation on the existing records is not perfomance-drainer.
8
+
9
+ survey / survey.question / column_nb (selection) : DEL selection_keys: ['12', '2', '3', '4', '6']
10
+ # NOTHING TO DO: Feature already hidden in previous version
11
+
12
+ survey / survey.question / question_placeholder (char) : NEW hasdefault: compute
13
+ # NOTHING TO DO: New feature. The first computation on the existing records is not perfomance-drainer.
14
+
15
+ survey / survey.question.answer / value_image_filename (char) : NEW
16
+ # NOTHING TO DO: New helper field for storing the image filename (only as reference, no other reflection). Existing uploaded images won't have that name, but that was the case in v15.
17
+
18
+ survey / survey.survey / _order : _order is now 'create_date DESC' ('id')
19
+ # NOTHING TO DO: New model sorting criteria
20
+
21
+ survey / survey.user_input / activity_ids (one2many) : NEW relation: mail.activity
22
+ survey / survey.user_input / message_follower_ids (one2many): NEW relation: mail.followers
23
+ survey / survey.user_input / message_ids (one2many) : NEW relation: mail.message
24
+ survey / survey.user_input / message_main_attachment_id (many2one): NEW relation: ir.attachment
25
+ survey / survey.user_input / website_message_ids (one2many): NEW relation: mail.message
26
+ # NOTHING TO DO: New feature in the answers to have its own chatter.
27
+
28
+ ---XML records in module 'survey'---
29
+ DEL ir.actions.server: survey.survey_action_server_clean_test_answers (noupdate)
30
+ # DONE: Try to delete the record.
31
+
32
+ DEL ir.ui.menu: survey.survey_menu_user_inputs
33
+ NEW ir.ui.view: survey.question_result_number_or_date_or_datetime
34
+ NEW ir.ui.view: survey.survey_question_answer_view_form
35
+ NEW ir.ui.view: survey.survey_remove_unnecessary_decimals
36
+ NEW ir.ui.view: survey.survey_results_filters
37
+ NEW ir.ui.view: survey.survey_survey_view_graph
38
+ NEW ir.ui.view: survey.survey_survey_view_pivot
39
+ DEL ir.ui.view: survey.question_result_number_or_date
40
+ # NOTHING TO DO: noupdate=0 records hanlded by ORM.
41
+
42
+ DEL ir.ui.view: survey.survey_form
43
+ NEW ir.ui.view: survey.survey_survey_view_form
44
+ DEL ir.ui.view: survey.survey_kanban
45
+ NEW ir.ui.view: survey.survey_survey_view_kanban
46
+ DEL ir.ui.view: survey.survey_tree
47
+ NEW ir.ui.view: survey.survey_survey_view_tree
48
+ # DONE: Just for completion and double safety, rename XML-IDs
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: odoo-addon-openupgrade-scripts
3
- Version: 16.0.1.0.3.143
3
+ Version: 16.0.1.0.3.162
4
4
  Summary: Module that contains all the migrations analysis and scripts for migrate Odoo SA modules.
5
5
  Home-page: https://github.com/OCA/OpenUpgrade
6
6
  Author: Odoo Community Association (OCA)
@@ -135,19 +135,29 @@ odoo/addons/openupgrade_scripts/scripts/hr/16.0.1.1/tests/__init__.py,sha256=qa6
135
135
  odoo/addons/openupgrade_scripts/scripts/hr/16.0.1.1/tests/data.py,sha256=LswyfUF0owjdxQaiJGxY2wqCzFfthhDApb-v9r2VgBA,9908
136
136
  odoo/addons/openupgrade_scripts/scripts/hr/16.0.1.1/tests/test_hr_migration.py,sha256=a8LNu8hi7cVc4xmuuz4_qpjZ-f2LDb_uELWPUAjlApI,2142
137
137
  odoo/addons/openupgrade_scripts/scripts/hr_attendance/16.0.2.0/noupdate_changes.xml,sha256=nU-PUX2tc-1kcCkKJHQjMHRrhxhT1IagEMvaC3jUjv0,439
138
+ odoo/addons/openupgrade_scripts/scripts/hr_attendance/16.0.2.0/post-migration.py,sha256=xGeFaLZifgKwYW-ah2gswd6O-N066mnmP_G1dmPa1CY,175
138
139
  odoo/addons/openupgrade_scripts/scripts/hr_attendance/16.0.2.0/upgrade_analysis.txt,sha256=Q01smh269EHWk6UvEn2QC3nOuyE24BYRaQMiUCNKrH0,719
139
- odoo/addons/openupgrade_scripts/scripts/hr_contract/16.0.1.0/noupdate_changes.xml,sha256=ON6XfbktyjXtO385zNyyhmKcPJivlgSbGPaamtG1pF0,442
140
+ odoo/addons/openupgrade_scripts/scripts/hr_attendance/16.0.2.0/upgrade_analysis_work.txt,sha256=_j-bbcB5Iy78MpvJw0d_kfrqGufDA_FHFy5u51wWe2k,1089
141
+ odoo/addons/openupgrade_scripts/scripts/hr_contract/16.0.1.0/noupdate_changes.xml,sha256=mnl3pmPfX06TNYbs7uxv8X2XsH-6ZqP-s2g9PceDQLE,449
142
+ odoo/addons/openupgrade_scripts/scripts/hr_contract/16.0.1.0/post-migration.py,sha256=ByGJfZQ1-CBQ9ORoX_ABDvcqXBWuXkoAGNZX95tYAaU,297
140
143
  odoo/addons/openupgrade_scripts/scripts/hr_contract/16.0.1.0/upgrade_analysis.txt,sha256=mJOLGScbyvtjLYM5H6dnlqyKL-F5rQYWF9zvqyXZYh0,1066
144
+ odoo/addons/openupgrade_scripts/scripts/hr_contract/16.0.1.0/upgrade_analysis_work.txt,sha256=StrTtd3_ysYjSWOynWGDcnxFaEfr9rLOQPNdl2e2k0g,1395
141
145
  odoo/addons/openupgrade_scripts/scripts/hr_expense/16.0.2.0/noupdate_changes.xml,sha256=SDRjZLGDKLTmL_xK_a1q9a_8JpXCgJkz27Nt0B1vlMs,1133
146
+ odoo/addons/openupgrade_scripts/scripts/hr_expense/16.0.2.0/post-migration.py,sha256=eUV3kkrEWFlyAOEH1-z0llJJ6qjKdpPyzYmySEN_q-M,2321
147
+ odoo/addons/openupgrade_scripts/scripts/hr_expense/16.0.2.0/pre-migration.py,sha256=cxJDD2gBCL0Vd7i4vn4falwON0YOy67OsAbpMqor1lU,3801
142
148
  odoo/addons/openupgrade_scripts/scripts/hr_expense/16.0.2.0/upgrade_analysis.txt,sha256=jcxZTjMentbGt3vqdFaG_9NX9sb9KHtJyGfZlw6V4us,4453
149
+ odoo/addons/openupgrade_scripts/scripts/hr_expense/16.0.2.0/upgrade_analysis_work.txt,sha256=fvIrFIWUu-yyxh7PoSfj5EuaXqmVntzftuov5P55fSw,4523
143
150
  odoo/addons/openupgrade_scripts/scripts/hr_fleet/16.0.1.0/upgrade_analysis.txt,sha256=3Z06g4YG8NTmD-qV6to7RhPJbqkUPhxqppzKVzunw0w,492
144
151
  odoo/addons/openupgrade_scripts/scripts/hr_gamification/16.0.1.0/upgrade_analysis.txt,sha256=cMaEUAXfvHRW3vwIZMIrGROH5eDQjRAbqLkraqvEj-4,168
145
152
  odoo/addons/openupgrade_scripts/scripts/hr_gamification/16.0.1.0/upgrade_analysis_work.txt,sha256=3iBxaIQTm-sWLBp43p9C6sjlz2cEs0Bw8yf-0VOL0LM,185
146
153
  odoo/addons/openupgrade_scripts/scripts/hr_holidays/16.0.1.5/noupdate_changes.xml,sha256=bq3L_KlIGBVh9BSCmAWA-HVg6LhfQ-2sg-Jr2N1Fi0c,1247
154
+ odoo/addons/openupgrade_scripts/scripts/hr_holidays/16.0.1.5/post-migration.py,sha256=7JcDNJ9XUGHfIF_HBlbm2oCpSJcikpORoZDceOzxN9Q,880
147
155
  odoo/addons/openupgrade_scripts/scripts/hr_holidays/16.0.1.5/upgrade_analysis.txt,sha256=dfAqkleufTqu1igQSi5idj9F69YorN3v8Ff5Mg2Ki5s,2281
156
+ odoo/addons/openupgrade_scripts/scripts/hr_holidays/16.0.1.5/upgrade_analysis_work.txt,sha256=J-9r6yzuGnja9LCx0CkifNxnZFYDRGpY2jUq5Icy-bc,2771
148
157
  odoo/addons/openupgrade_scripts/scripts/hr_holidays_attendance/16.0.1.0/noupdate_changes.xml,sha256=OzxdaoxV1NybA2Xp2qjTU-nG7auZaqwmpHCYoSLZglk,168
149
158
  odoo/addons/openupgrade_scripts/scripts/hr_holidays_attendance/16.0.1.0/upgrade_analysis.txt,sha256=iIq0WvegXemuojBa9KNPlGlhwcCG_xMgIKgY9pLymmg,273
150
159
  odoo/addons/openupgrade_scripts/scripts/hr_hourly_cost/16.0.1.0/upgrade_analysis.txt,sha256=c8u8sEURXNF87Lt3UWDf9VyrxImSdSqG4OOnoCZDAB4,275
160
+ odoo/addons/openupgrade_scripts/scripts/hr_hourly_cost/16.0.1.0/upgrade_analysis_work.txt,sha256=j5moFtU6ZG_xFkqlg3_m8YxwdypufHoMKBda2CJclLw,617
151
161
  odoo/addons/openupgrade_scripts/scripts/hr_maintenance/16.0.1.0/upgrade_analysis.txt,sha256=yu4-K8VQ4jtiDZvIlVIyIZJuj8gnN_qT4qI5RcYzTZM,165
152
162
  odoo/addons/openupgrade_scripts/scripts/hr_maintenance/16.0.1.0/upgrade_analysis_work.txt,sha256=dM-2IlbkgeTl7Ey9Q651OaXYbMivlT2eCVp6x-IEnIg,182
153
163
  odoo/addons/openupgrade_scripts/scripts/hr_org_chart/16.0.1.0/upgrade_analysis.txt,sha256=Uky8qbUr2mAREwEQdj3oO497YPalkGe6-ZVRq_G08-g,159
@@ -160,13 +170,16 @@ odoo/addons/openupgrade_scripts/scripts/hr_recruitment/16.0.1.1/upgrade_analysis
160
170
  odoo/addons/openupgrade_scripts/scripts/hr_recruitment/16.0.1.1/upgrade_analysis_work.txt,sha256=c3WHcrrqfsqosx-k1LF1rNkinSa8fMuq3YWbKv-oTQk,3348
161
171
  odoo/addons/openupgrade_scripts/scripts/hr_recruitment_skills/16.0.1.0/upgrade_analysis.txt,sha256=M9639cCz-6oKY1NC7XA8u2-k-hf9_1mCdaHAptDOt2c,1529
162
172
  odoo/addons/openupgrade_scripts/scripts/hr_recruitment_survey/16.0.1.0/upgrade_analysis.txt,sha256=GMRU5w0aGxnHsHkGm4Jhkco0Dq2iGJ5b5DoX8nCamQk,186
173
+ odoo/addons/openupgrade_scripts/scripts/hr_recruitment_survey/16.0.1.0/upgrade_analysis_work.txt,sha256=_1c4hfHB2K9SFxCDO2N1cNUg_IUJ3AIp7lByQF103lI,203
163
174
  odoo/addons/openupgrade_scripts/scripts/hr_skills/16.0.1.0/noupdate_changes.xml,sha256=ZuJuErC3ewPYGLlOByjzcX3qEo43aQtG8-TQlXrcCBA,456
164
175
  odoo/addons/openupgrade_scripts/scripts/hr_skills/16.0.1.0/upgrade_analysis.txt,sha256=Oo6V5SlbCldLM72UmYstrO1HKjJbHDoxyG3cP5lLnFs,3033
165
176
  odoo/addons/openupgrade_scripts/scripts/hr_skills_slides/16.0.1.0/upgrade_analysis.txt,sha256=rrtYD2Z3hZU9o7NavHC6-NhEq9c4UT4rWYs1eVtVoxg,186
166
177
  odoo/addons/openupgrade_scripts/scripts/hr_skills_survey/16.0.1.0/upgrade_analysis.txt,sha256=GFhqA9h0mFrVP5SC5YpRLRJTLVwLN-1EPFhRL4y0gDg,171
178
+ odoo/addons/openupgrade_scripts/scripts/hr_timesheet/16.0.1.0/pre-migration.py,sha256=ZY9AHIY3YP_HVJg-Qsh_FB9olrnwLqg4BGd8AJHRpfE,1697
167
179
  odoo/addons/openupgrade_scripts/scripts/hr_timesheet/16.0.1.0/upgrade_analysis.txt,sha256=ej1Ej7foICLBjli5HqNAzGi4tyz6IQ8UW-nvqYItr7A,4076
168
- odoo/addons/openupgrade_scripts/scripts/hr_timesheet_attendance/16.0.1.0/upgrade_analysis.txt,sha256=Fhn3fJPxVqhA-bGTho--ynwvTGPsrAbdW-6g0Q2H990,526
180
+ odoo/addons/openupgrade_scripts/scripts/hr_timesheet/16.0.1.0/upgrade_analysis_work.txt,sha256=zzMuoclczyu1Y1BKo-6yfBvNhnaeM6qO6b-tuOsODf0,4176
169
181
  odoo/addons/openupgrade_scripts/scripts/hr_timesheet_attendance/16.0.1.1/upgrade_analysis.txt,sha256=Fhn3fJPxVqhA-bGTho--ynwvTGPsrAbdW-6g0Q2H990,526
182
+ odoo/addons/openupgrade_scripts/scripts/hr_timesheet_attendance/16.0.1.1/upgrade_analysis_work.txt,sha256=CWoHbjP9h8ae7-7q939Uh0ew8Sf0qqP72hIAKPbVp5M,558
170
183
  odoo/addons/openupgrade_scripts/scripts/hr_work_entry/16.0.1.0/upgrade_analysis.txt,sha256=cAbyDftyWWrH859s-9Iy18Oq5FrmvyKtmX8H5_V7ZHE,275
171
184
  odoo/addons/openupgrade_scripts/scripts/hr_work_entry_contract/16.0.1.0/upgrade_analysis.txt,sha256=H4xuArLCSzJ4blG0j_iWhlk1_aXLW3b5jZeaCZLp2JY,550
172
185
  odoo/addons/openupgrade_scripts/scripts/hr_work_entry_holidays/16.0.1.0/upgrade_analysis.txt,sha256=-wF9U3GWdsuzBlkc7Gz2XYElk4lAGOAmtBUwX8nwVKI,189
@@ -434,7 +447,12 @@ odoo/addons/openupgrade_scripts/scripts/product_images/16.0.1.0/upgrade_analysis
434
447
  odoo/addons/openupgrade_scripts/scripts/product_margin/16.0.1.0/upgrade_analysis.txt,sha256=4ttHOXP24HQX80aD5j6gIjzZBzhAD599KgvOxkR9wmM,165
435
448
  odoo/addons/openupgrade_scripts/scripts/product_margin/16.0.1.0/upgrade_analysis_work.txt,sha256=4ttHOXP24HQX80aD5j6gIjzZBzhAD599KgvOxkR9wmM,165
436
449
  odoo/addons/openupgrade_scripts/scripts/project/16.0.1.2/noupdate_changes.xml,sha256=0oH13jMbTYciRXhBd8s5W-ezK9BbpEBrVmAuJMOSdi8,5258
450
+ odoo/addons/openupgrade_scripts/scripts/project/16.0.1.2/post-migration.py,sha256=BT7aWbGKC_qA5kaMHQnVM61fDuBUBolWV-9yWzL8Jqo,594
451
+ odoo/addons/openupgrade_scripts/scripts/project/16.0.1.2/pre-migration.py,sha256=BGn_5Lsjqo_QgZtFxirM-G7HBHa7q5vY07ZRV25ubcc,5137
437
452
  odoo/addons/openupgrade_scripts/scripts/project/16.0.1.2/upgrade_analysis.txt,sha256=Ra_nPB2OUJ54l31epPuP04icLT8uJrcdGHXqlKrermw,5831
453
+ odoo/addons/openupgrade_scripts/scripts/project/16.0.1.2/upgrade_analysis_work.txt,sha256=i35lNMJQ6Ap1z6Nmd-JChXipDqts1akWGWFekAXv0wM,6559
454
+ odoo/addons/openupgrade_scripts/scripts/project/16.0.1.2/tests/__init__.py,sha256=7uKZNMbS-tJslQ3DoJoKyUeosa_RNRseB4khQIP8bfc,37
455
+ odoo/addons/openupgrade_scripts/scripts/project/16.0.1.2/tests/test_project_migration.py,sha256=DIN6z623Bx6XtH62I7xq40CHsmWIIbfOYaceSNxsYBc,524
438
456
  odoo/addons/openupgrade_scripts/scripts/project_hr_expense/16.0.1.0/upgrade_analysis.txt,sha256=skVoiLqMWdknfvsv53MZo2un62E7zQzjFaN4NL4PiZs,198
439
457
  odoo/addons/openupgrade_scripts/scripts/project_mrp/16.0.1.0/upgrade_analysis.txt,sha256=mrMSwqKMslVHJCrf0YpQSAL1NE31ZnY9vLW1ep9rjzI,180
440
458
  odoo/addons/openupgrade_scripts/scripts/project_purchase/16.0.1.0/upgrade_analysis.txt,sha256=1bGd47YlH5_3OHH33v-HGc1IES2Zw1vU0V9iNEcTVz8,200
@@ -484,12 +502,15 @@ odoo/addons/openupgrade_scripts/scripts/sale_mrp/16.0.1.0/upgrade_analysis.txt,s
484
502
  odoo/addons/openupgrade_scripts/scripts/sale_product_configurator/16.0.1.0/upgrade_analysis.txt,sha256=3wHhFk4rmZ3PurMy3ZlQ8vH8baRl0xNZ_9ofGp-3By4,455
485
503
  odoo/addons/openupgrade_scripts/scripts/sale_product_matrix/16.0.1.0/upgrade_analysis.txt,sha256=-_99R6PnRJKHWr1zvrruy5m0RYjMSSK-QIlU_CNEJjk,180
486
504
  odoo/addons/openupgrade_scripts/scripts/sale_project/16.0.1.0/upgrade_analysis.txt,sha256=3_MabDi3INHUQI9b0qYLPEAgQ-FiMBVyz6cf3eoldlU,1618
505
+ odoo/addons/openupgrade_scripts/scripts/sale_project/16.0.1.0/upgrade_analysis_work.txt,sha256=XzPdzthCMjGri6-BgxmrLPf1ctXo1i-k8VXdsc80xKg,1648
487
506
  odoo/addons/openupgrade_scripts/scripts/sale_project_stock/16.0.1.0/upgrade_analysis.txt,sha256=CvydNXFLRJ3UyF1j1fW0FMiIYjMGFaA-KI8t4nPXekM,221
488
507
  odoo/addons/openupgrade_scripts/scripts/sale_purchase/16.0.1.0/upgrade_analysis.txt,sha256=KICfQiqiyfFj1kfW0VXF0zyk8wnik_0APGVT0JdU9lY,361
489
508
  odoo/addons/openupgrade_scripts/scripts/sale_quotation_builder/16.0.1.0/noupdate_changes.xml,sha256=rgaGcEPiWrUftrz6BetgECgDqG3M3Nygj3XmTBVMvbo,3497
490
509
  odoo/addons/openupgrade_scripts/scripts/sale_quotation_builder/16.0.1.0/upgrade_analysis.txt,sha256=06ej-ps7VMDzYrQl7Hdd6uR_V_uhY2mtKQniOHUwmtA,351
491
510
  odoo/addons/openupgrade_scripts/scripts/sale_stock/16.0.1.0/upgrade_analysis.txt,sha256=2pgVDl2UDhrMPdfMl6Yts6AJbXt28_q7I1OuE45E4-U,819
511
+ odoo/addons/openupgrade_scripts/scripts/sale_timesheet/16.0.1.0/pre-migration.py,sha256=9xiwKatRFe6WrUE4jYhdS86LaN8EHslHJyiw2kUwJzw,1297
492
512
  odoo/addons/openupgrade_scripts/scripts/sale_timesheet/16.0.1.0/upgrade_analysis.txt,sha256=3ZAhGhCvAVd45pIpfNRtFbhbdv7dhcd6zdS4qhOCjUU,4247
513
+ odoo/addons/openupgrade_scripts/scripts/sale_timesheet/16.0.1.0/upgrade_analysis_work.txt,sha256=_294_KUpIOVVhbiq_HLCpjXqOX-gXd_5zAwL5jzmKK0,4527
493
514
  odoo/addons/openupgrade_scripts/scripts/sales_team/16.0.1.1/upgrade_analysis.txt,sha256=g4BtnBJtJ-XhWm5omP0T--l4R4D8w0H7X1hVZxhCmRI,243
494
515
  odoo/addons/openupgrade_scripts/scripts/sales_team/16.0.1.1/upgrade_analysis_work.txt,sha256=NZeP-iA5SSfLcMa2o9eFGoaZ4JM15eiBDOKDv4aLVOA,260
495
516
  odoo/addons/openupgrade_scripts/scripts/sms/16.0.2.4/upgrade_analysis.txt,sha256=_rqOOvN_wXpJmP-mMhO3SRQoPOD6UMEae_lZaMJGHYY,1513
@@ -523,7 +544,10 @@ odoo/addons/openupgrade_scripts/scripts/stock_dropshipping/16.0.1.0/upgrade_anal
523
544
  odoo/addons/openupgrade_scripts/scripts/stock_landed_costs/16.0.1.1/upgrade_analysis.txt,sha256=WFU81Vt8XuuK9wkxAIUUtohVnUdyOzBtg08-3QGxKh8,177
524
545
  odoo/addons/openupgrade_scripts/scripts/stock_picking_batch/16.0.1.0/upgrade_analysis.txt,sha256=-vWDvtNd94zMYD8LIYGJT_AiaYq4lZvCh4Jv9vL4paE,1327
525
546
  odoo/addons/openupgrade_scripts/scripts/stock_sms/16.0.1.0/upgrade_analysis.txt,sha256=WmtD-QRPZnTjNKvErYIFRz_n-t4C2ttxPz_9eYkTOrw,150
547
+ odoo/addons/openupgrade_scripts/scripts/survey/16.0.3.5/post-migration.py,sha256=6-FUi-2MkJaOtE7qff_gIJBvPHdT6ugIf_ncjfpqatA,906
548
+ odoo/addons/openupgrade_scripts/scripts/survey/16.0.3.5/pre-migration.py,sha256=CgXlObR_j--DZRjzxdOJhv784bfQCvqmf3l7S_EWCxg,472
526
549
  odoo/addons/openupgrade_scripts/scripts/survey/16.0.3.5/upgrade_analysis.txt,sha256=PZH-5KdMrPL-ozdlDCC5igHDzfcs7rIHqjdRhACr7mg,1977
550
+ odoo/addons/openupgrade_scripts/scripts/survey/16.0.3.5/upgrade_analysis_work.txt,sha256=S6ua954ALVHqYfzvXjtQ4DegqwWwEVZkdgxbmizW0LY,2849
527
551
  odoo/addons/openupgrade_scripts/scripts/transifex/16.0.1.0/upgrade_analysis.txt,sha256=3vfZSjXSINOH_SE9C8mH77q-t2H8KxatKzbAQ5HY7Uc,1120
528
552
  odoo/addons/openupgrade_scripts/scripts/uom/16.0.1.0/upgrade_analysis.txt,sha256=a5PetNi2DgHpGqqOp4U9sM8bpk7yayokWIU5MOfSTu4,137
529
553
  odoo/addons/openupgrade_scripts/scripts/uom/16.0.1.0/upgrade_analysis_work.txt,sha256=byYT_AMkKr8rU-mX88VuQZjIKKtxltSuL-ph5q5EScE,189
@@ -611,7 +635,7 @@ odoo/addons/openupgrade_scripts/scripts/website_twitter/16.0.1.0/upgrade_analysi
611
635
  odoo/addons/openupgrade_scripts/static/description/banner.png,sha256=KTIBu4gfxeZVw9zjs_fivTgFEOeaAorlBxajmCA1p6k,26859
612
636
  odoo/addons/openupgrade_scripts/static/description/icon.png,sha256=6xBPJauaFOF0KDHfHgQopSc28kKvxMaeoQFQWZtfZDo,9455
613
637
  odoo/addons/openupgrade_scripts/static/description/index.html,sha256=IOWtZdzr_jN_Dja8HYIfzIxrO8NE5pFgazKJtPsLKw0,12678
614
- odoo_addon_openupgrade_scripts-16.0.1.0.3.143.dist-info/METADATA,sha256=eNfbBmKiBtBSjz2opuCRs0Vav1RKBIdO5uxIxqLPGz4,3810
615
- odoo_addon_openupgrade_scripts-16.0.1.0.3.143.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
616
- odoo_addon_openupgrade_scripts-16.0.1.0.3.143.dist-info/top_level.txt,sha256=qBj40grFkGOfDZ2WDSw3y1RnDlgG0u8rP8pvGNdbz4w,5
617
- odoo_addon_openupgrade_scripts-16.0.1.0.3.143.dist-info/RECORD,,
638
+ odoo_addon_openupgrade_scripts-16.0.1.0.3.162.dist-info/METADATA,sha256=mToTaIa8ClQEiWd4R-Qr5HGseR1Vt8uH9mA-ACzc9b4,3810
639
+ odoo_addon_openupgrade_scripts-16.0.1.0.3.162.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
640
+ odoo_addon_openupgrade_scripts-16.0.1.0.3.162.dist-info/top_level.txt,sha256=qBj40grFkGOfDZ2WDSw3y1RnDlgG0u8rP8pvGNdbz4w,5
641
+ odoo_addon_openupgrade_scripts-16.0.1.0.3.162.dist-info/RECORD,,