odoo-addon-openupgrade-scripts 18.0.1.0.0.79__py3-none-any.whl → 18.0.1.0.0.97__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 (28) hide show
  1. odoo/addons/openupgrade_scripts/scripts/account/18.0.1.3/post-migration.py +1 -1
  2. odoo/addons/openupgrade_scripts/scripts/base_vat/18.0.1.0/upgrade_analysis_work.txt +5 -0
  3. odoo/addons/openupgrade_scripts/scripts/hr/18.0.1.1/post-migration.py +10 -0
  4. odoo/addons/openupgrade_scripts/scripts/hr/18.0.1.1/pre-migration.py +52 -0
  5. odoo/addons/openupgrade_scripts/scripts/hr/18.0.1.1/upgrade_analysis_work.txt +76 -0
  6. odoo/addons/openupgrade_scripts/scripts/l10n_es/18.0.5.4/upgrade_analysis_work.txt +76 -0
  7. odoo/addons/openupgrade_scripts/scripts/purchase/18.0.1.2/post-migration.py +28 -0
  8. odoo/addons/openupgrade_scripts/scripts/purchase/18.0.1.2/pre-migration.py +24 -0
  9. odoo/addons/openupgrade_scripts/scripts/purchase/18.0.1.2/upgrade_analysis_work.txt +51 -0
  10. odoo/addons/openupgrade_scripts/scripts/sale/18.0.1.2/end-migration.py +49 -0
  11. odoo/addons/openupgrade_scripts/scripts/sale/18.0.1.2/post-migration.py +21 -0
  12. odoo/addons/openupgrade_scripts/scripts/sale/18.0.1.2/pre-migration.py +34 -0
  13. odoo/addons/openupgrade_scripts/scripts/sale/18.0.1.2/upgrade_analysis_work.txt +85 -0
  14. odoo/addons/openupgrade_scripts/scripts/sale_crm/18.0.1.0/upgrade_analysis_work.txt +5 -0
  15. odoo/addons/openupgrade_scripts/scripts/sale_stock/18.0.1.0/post-migration.py +12 -0
  16. odoo/addons/openupgrade_scripts/scripts/sale_stock/18.0.1.0/pre-migration.py +62 -0
  17. odoo/addons/openupgrade_scripts/scripts/sale_stock/18.0.1.0/upgrade_analysis_work.txt +18 -0
  18. odoo/addons/openupgrade_scripts/scripts/stock/18.0.1.1/post-migration.py +99 -0
  19. odoo/addons/openupgrade_scripts/scripts/stock/18.0.1.1/pre-migration.py +81 -0
  20. odoo/addons/openupgrade_scripts/scripts/stock/18.0.1.1/upgrade_analysis_work.txt +139 -0
  21. odoo/addons/openupgrade_scripts/scripts/stock_account/18.0.1.1/end-migration.py +23 -0
  22. odoo/addons/openupgrade_scripts/scripts/stock_account/18.0.1.1/post-migration.py +36 -0
  23. odoo/addons/openupgrade_scripts/scripts/stock_account/18.0.1.1/pre-migration.py +22 -0
  24. odoo/addons/openupgrade_scripts/scripts/stock_account/18.0.1.1/upgrade_analysis_work.txt +34 -0
  25. {odoo_addon_openupgrade_scripts-18.0.1.0.0.79.dist-info → odoo_addon_openupgrade_scripts-18.0.1.0.0.97.dist-info}/METADATA +1 -1
  26. {odoo_addon_openupgrade_scripts-18.0.1.0.0.79.dist-info → odoo_addon_openupgrade_scripts-18.0.1.0.0.97.dist-info}/RECORD +28 -5
  27. {odoo_addon_openupgrade_scripts-18.0.1.0.0.79.dist-info → odoo_addon_openupgrade_scripts-18.0.1.0.0.97.dist-info}/WHEEL +0 -0
  28. {odoo_addon_openupgrade_scripts-18.0.1.0.0.79.dist-info → odoo_addon_openupgrade_scripts-18.0.1.0.0.97.dist-info}/top_level.txt +0 -0
@@ -85,7 +85,7 @@ def fill_res_partner_property_x_payment_method_line_id(env):
85
85
  FROM (
86
86
  SELECT
87
87
  SPLIT_PART(ip.res_id, ',', 2)::integer res_id,
88
- JSON_OBJECT_AGG(ip.company_id, sub.id) value
88
+ JSON_OBJECT_AGG(ip.company_id, sub.id) AS "value"
89
89
  FROM ir_property ip
90
90
  JOIN LATERAL (
91
91
  SELECT *
@@ -0,0 +1,5 @@
1
+ ---Models in module 'base_vat'---
2
+ ---Fields in module 'base_vat'---
3
+ ---XML records in module 'base_vat'---
4
+ ---nothing has changed in this module--
5
+ # NOTHING TO DO
@@ -0,0 +1,10 @@
1
+ from openupgradelib import openupgrade
2
+
3
+
4
+ @openupgrade.migrate()
5
+ def migrate(env, version):
6
+ openupgrade.load_data(env, "hr", "18.0.1.1/noupdate_changes.xml")
7
+ openupgrade.delete_record_translations(
8
+ env.cr, "hr", ["contract_type_part_time"], ["name"]
9
+ )
10
+ openupgrade.delete_records_safely_by_xml_id(env, ["hr.hr_presence_control_login"])
@@ -0,0 +1,52 @@
1
+ from openupgradelib import openupgrade
2
+
3
+ _new_columns = [
4
+ (
5
+ "hr.employee",
6
+ "distance_home_work_unit",
7
+ "selection",
8
+ "kilometers",
9
+ "hr_employee",
10
+ ),
11
+ ("hr.employee", "is_flexible", "boolean", None, "hr_employee"),
12
+ ("hr.employee", "is_fully_flexible", "boolean", None, "hr_employee"),
13
+ ("res.company", "hr_presence_control_attendance", "boolean"),
14
+ ("res.company", "hr_presence_control_email", "boolean"),
15
+ ("res.company", "hr_presence_control_ip", "boolean"),
16
+ ("res.company", "hr_presence_control_login", "boolean", True),
17
+ ]
18
+
19
+
20
+ @openupgrade.migrate()
21
+ def migrate(env, version):
22
+ openupgrade.rename_columns(
23
+ env.cr, {"employee_category_rel": [("emp_id", "employee_id")]}
24
+ )
25
+ openupgrade.add_columns(env, _new_columns)
26
+ openupgrade.logged_query(
27
+ env.cr,
28
+ """
29
+ UPDATE hr_employee
30
+ SET is_fully_flexible = CASE WHEN resource_calendar_id IS NULL
31
+ THEN TRUE ELSE FALSE END
32
+ """,
33
+ )
34
+ openupgrade.logged_query(
35
+ env.cr,
36
+ """
37
+ UPDATE hr_employee he2
38
+ SET is_flexible = CASE WHEN he.is_fully_flexible OR rc.flexible_hours
39
+ THEN TRUE ELSE FALSE END
40
+ FROM hr_employee he
41
+ LEFT JOIN resource_calendar rc ON he.resource_calendar_id = rc.id
42
+ WHERE he.id = he2.id
43
+ """,
44
+ )
45
+ openupgrade.logged_query(
46
+ env.cr,
47
+ """
48
+ UPDATE hr_employee
49
+ SET marital = 'single'
50
+ WHERE marital IS NULL
51
+ """,
52
+ )
@@ -0,0 +1,76 @@
1
+ ---Models in module 'hr'---
2
+ new model hr.manager.department.report [abstract]
3
+ # NOTHING TO DO
4
+
5
+ ---Fields in module 'hr'---
6
+ hr / hr.department / activity_ids (one2many) : NEW relation: mail.activity
7
+ hr / hr.department / has_read_access (boolean) : NEW stored: False
8
+ hr / hr.department / message_has_sms_error (boolean): previously in module sms
9
+ hr / hr.department / website_message_ids (one2many): previously in module portal
10
+ # NOTHING TO DO
11
+
12
+ hr / hr.employee / category_ids (many2many) : column1 is now 'employee_id' ('emp_id') [employee_category_rel]
13
+ hr / hr.employee.category / employee_ids (many2many) : column2 is now 'employee_id' ('emp_id') [employee_category_rel]
14
+ # DONE: pre-migration: Rename column
15
+
16
+ hr / hr.employee / distance_home_work (integer) : NEW
17
+ hr / hr.employee / distance_home_work_unit (selection): NEW required, selection_keys: ['kilometers', 'miles'], hasdefault: default
18
+ # DONE: pre-migration: ADD column
19
+
20
+ hr / hr.employee / employee_type (selection) : selection_keys is now '['contractor', 'employee', 'freelance', 'student', 'trainee', 'worker']' ('['contractor', 'employee', 'freelance', 'student', 'trainee']')
21
+ # NOTHING TO DO: new 'worker' option
22
+
23
+ hr / hr.employee / hr_icon_display (selection) : selection_keys is now '['presence_absent', 'presence_archive', 'presence_out_of_working_hour', 'presence_present', 'presence_undetermined']' ('['presence_absent', 'presence_absent_active', 'presence_present', 'presence_to_define', 'presence_undetermined']')
24
+ hr / hr.employee / hr_presence_state (selection) : selection_keys is now '['absent', 'archive', 'out_of_working_hour', 'present']' ('['absent', 'present', 'to_define']')
25
+ # NOTHING TO DO: non stored fields
26
+
27
+ hr / hr.employee / is_flexible (boolean) : NEW isfunction: function, stored
28
+ hr / hr.employee / is_fully_flexible (boolean) : NEW isfunction: function, stored
29
+ # DONE: pre-migration: pre-created and filled
30
+
31
+ hr / hr.employee / km_home_work (integer) : now a function
32
+ hr / hr.employee / marital (selection) : now required
33
+ hr / hr.employee / marital (selection) : selection_keys is now 'function' ('['cohabitant', 'divorced', 'married', 'single', 'widower']')
34
+ hr / hr.employee / message_has_sms_error (boolean): previously in module sms
35
+ hr / hr.employee / website_message_ids (one2many): previously in module portal
36
+ hr / hr.job / message_has_sms_error (boolean): previously in module sms
37
+ hr / hr.job / no_of_hired_employee (integer): module is now 'hr_recruitment' ('hr')
38
+ hr / hr.job / website_message_ids (one2many): previously in module portal
39
+ hr / res.company / hr_presence_control_attendance (boolean): NEW
40
+ hr / res.company / hr_presence_control_email (boolean): NEW
41
+ hr / res.company / hr_presence_control_ip (boolean): NEW
42
+ hr / res.company / hr_presence_control_login (boolean): NEW hasdefault: default
43
+ # NOTHING TO DO
44
+
45
+ ---XML records in module 'hr'---
46
+ NEW digest.tip: hr.digest_tip_hr_0
47
+ NEW hr.contract.type: hr.contract_type_apprenticeship (noupdate)
48
+ NEW hr.contract.type: hr.contract_type_employee (noupdate)
49
+ NEW hr.contract.type: hr.contract_type_statutaire (noupdate)
50
+ NEW hr.contract.type: hr.contract_type_student (noupdate)
51
+ NEW hr.contract.type: hr.contract_type_thesis (noupdate)
52
+ DEL ir.actions.act_window: hr.act_employee_from_department
53
+ DEL ir.actions.act_window: hr.open_view_employee_tree
54
+ NEW ir.actions.act_window.view: hr.act_hr_employee_activity_view
55
+ NEW ir.actions.act_window.view: hr.act_hr_employee_form_view
56
+ NEW ir.actions.act_window.view: hr.act_hr_employee_graph_view
57
+ NEW ir.actions.act_window.view: hr.act_hr_employee_kanban_view
58
+ NEW ir.actions.act_window.view: hr.act_hr_employee_pivot_view
59
+ NEW ir.actions.act_window.view: hr.act_hr_employee_public_form_view
60
+ NEW ir.actions.act_window.view: hr.act_hr_employee_public_kanban_view
61
+ NEW ir.actions.act_window.view: hr.act_hr_employee_public_tree_view
62
+ NEW ir.actions.act_window.view: hr.act_hr_employee_tree_view
63
+ NEW ir.actions.act_window.view: hr.hr_department_form_view_kanban_action
64
+ NEW ir.actions.act_window.view: hr.hr_department_form_view_tree_action
65
+ NEW ir.actions.act_window.view: hr.hr_department_kanban_view_kanban_action
66
+ NEW ir.actions.act_window.view: hr.hr_department_kanban_view_tree_action
67
+ NEW ir.actions.act_window.view: hr.hr_department_tree_view_kanban_action
68
+ NEW ir.actions.act_window.view: hr.hr_department_tree_view_tree_action
69
+ DEL ir.actions.server: hr.action_hr_employee_create_user
70
+ DEL ir.config_parameter: hr.hr_presence_control_login (noupdate)
71
+ DEL ir.ui.menu: hr.menu_config_plan
72
+ DEL ir.ui.menu: hr.menu_hr_department_tree
73
+ NEW ir.ui.view: hr.res_partner_view_search
74
+ NEW ir.ui.view: hr.view_employee_form_smartbutton_inherited
75
+ NEW report.paperformat: hr.paperformat_hr_employee_badge
76
+ # NOTHING TO DO
@@ -0,0 +1,76 @@
1
+ ---Models in module 'l10n_es'---
2
+ ---Fields in module 'l10n_es'---
3
+ l10n_es / res.company / l10n_es_simplified_invoice_limit (float): NEW hasdefault: default
4
+ # NOTHING TO DO
5
+
6
+ ---XML records in module 'l10n_es'---
7
+ NEW account.report: l10n_es.mod_420
8
+ NEW account.report.column: l10n_es.mod_420_column_base
9
+ NEW account.report.column: l10n_es.mod_420_column_tax_amount
10
+ NEW account.report.expression: l10n_es.mod_420_casilla_10
11
+ NEW account.report.expression: l10n_es.mod_420_casilla_12
12
+ NEW account.report.expression: l10n_es.mod_420_casilla_13
13
+ NEW account.report.expression: l10n_es.mod_420_casilla_15
14
+ NEW account.report.expression: l10n_es.mod_420_casilla_16
15
+ NEW account.report.expression: l10n_es.mod_420_casilla_18
16
+ NEW account.report.expression: l10n_es.mod_420_casilla_19
17
+ NEW account.report.expression: l10n_es.mod_420_casilla_1_base
18
+ NEW account.report.expression: l10n_es.mod_420_casilla_20
19
+ NEW account.report.expression: l10n_es.mod_420_casilla_21
20
+ NEW account.report.expression: l10n_es.mod_420_casilla_22
21
+ NEW account.report.expression: l10n_es.mod_420_casilla_23
22
+ NEW account.report.expression: l10n_es.mod_420_casilla_24
23
+ NEW account.report.expression: l10n_es.mod_420_casilla_25
24
+ NEW account.report.expression: l10n_es.mod_420_casilla_26
25
+ NEW account.report.expression: l10n_es.mod_420_casilla_27
26
+ NEW account.report.expression: l10n_es.mod_420_casilla_28
27
+ NEW account.report.expression: l10n_es.mod_420_casilla_29
28
+ NEW account.report.expression: l10n_es.mod_420_casilla_30
29
+ NEW account.report.expression: l10n_es.mod_420_casilla_31
30
+ NEW account.report.expression: l10n_es.mod_420_casilla_32
31
+ NEW account.report.expression: l10n_es.mod_420_casilla_33
32
+ NEW account.report.expression: l10n_es.mod_420_casilla_34
33
+ NEW account.report.expression: l10n_es.mod_420_casilla_35
34
+ NEW account.report.expression: l10n_es.mod_420_casilla_36
35
+ NEW account.report.expression: l10n_es.mod_420_casilla_37
36
+ NEW account.report.expression: l10n_es.mod_420_casilla_38
37
+ NEW account.report.expression: l10n_es.mod_420_casilla_39
38
+ NEW account.report.expression: l10n_es.mod_420_casilla_4
39
+ NEW account.report.expression: l10n_es.mod_420_casilla_40
40
+ NEW account.report.expression: l10n_es.mod_420_casilla_41
41
+ NEW account.report.expression: l10n_es.mod_420_casilla_42
42
+ NEW account.report.expression: l10n_es.mod_420_casilla_43
43
+ NEW account.report.expression: l10n_es.mod_420_casilla_44
44
+ NEW account.report.expression: l10n_es.mod_420_casilla_45
45
+ NEW account.report.expression: l10n_es.mod_420_casilla_6
46
+ NEW account.report.expression: l10n_es.mod_420_casilla_7
47
+ NEW account.report.expression: l10n_es.mod_420_casilla_9
48
+ NEW account.report.line: l10n_es.mod_420_casilla_10_12
49
+ NEW account.report.line: l10n_es.mod_420_casilla_13_15
50
+ NEW account.report.line: l10n_es.mod_420_casilla_16_18
51
+ NEW account.report.line: l10n_es.mod_420_casilla_1_3
52
+ NEW account.report.line: l10n_es.mod_420_casilla_4_6
53
+ NEW account.report.line: l10n_es.mod_420_casilla_7_9
54
+ NEW account.report.line: l10n_es.mod_420_casilla_comp_agri
55
+ NEW account.report.line: l10n_es.mod_420_casilla_comp_reg_def
56
+ NEW account.report.line: l10n_es.mod_420_casilla_comp_reg_inv
57
+ NEW account.report.line: l10n_es.mod_420_casilla_comp_reg_start
58
+ NEW account.report.line: l10n_es.mod_420_casilla_deduc_modif
59
+ NEW account.report.line: l10n_es.mod_420_casilla_diff
60
+ NEW account.report.line: l10n_es.mod_420_casilla_igic_comp
61
+ NEW account.report.line: l10n_es.mod_420_casilla_igic_deductible
62
+ NEW account.report.line: l10n_es.mod_420_casilla_igic_deductible_imp
63
+ NEW account.report.line: l10n_es.mod_420_casilla_igic_deductible_imp_inv
64
+ NEW account.report.line: l10n_es.mod_420_casilla_igic_deductible_inv
65
+ NEW account.report.line: l10n_es.mod_420_casilla_isp
66
+ NEW account.report.line: l10n_es.mod_420_casilla_mod_21_22
67
+ NEW account.report.line: l10n_es.mod_420_casilla_mod_23_24
68
+ NEW account.report.line: l10n_es.mod_420_casilla_reg_art
69
+ NEW account.report.line: l10n_es.mod_420_casilla_result
70
+ NEW account.report.line: l10n_es.mod_420_casilla_to_deduct
71
+ NEW account.report.line: l10n_es.mod_420_casilla_total
72
+ NEW account.report.line: l10n_es.mod_420_casilla_total_25
73
+ NEW account.report.line: l10n_es.mod_420_igic_due
74
+ NEW account.report.line: l10n_es.mod_420_title_igic_deductible
75
+ NEW ir.ui.view: l10n_es.res_config_settings_view_form
76
+ # NOTHING TO DO
@@ -0,0 +1,28 @@
1
+ # Copyright 2025 ForgeFlow S.L. (https://www.forgeflow.com)
2
+ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
3
+ from openupgradelib import openupgrade, openupgrade_180
4
+
5
+
6
+ def convert_company_dependent(env):
7
+ openupgrade_180.convert_company_dependent(
8
+ env, "res.partner", "property_purchase_currency_id"
9
+ )
10
+ openupgrade_180.convert_company_dependent(
11
+ env, "res.partner", "receipt_reminder_email"
12
+ )
13
+ openupgrade_180.convert_company_dependent(
14
+ env, "res.partner", "reminder_date_before_receipt"
15
+ )
16
+
17
+
18
+ @openupgrade.migrate()
19
+ def migrate(env, version):
20
+ convert_company_dependent(env)
21
+ openupgrade.load_data(env, "purchase", "18.0.1.2/noupdate_changes.xml")
22
+ openupgrade.delete_record_translations(
23
+ env.cr, "purchase", ["email_template_edi_purchase", "track_po_line_template"]
24
+ )
25
+ openupgrade.delete_records_safely_by_xml_id(
26
+ env,
27
+ ["purchase.receipt_reminder_email", "purchase.reminder_date_before_receipt"],
28
+ )
@@ -0,0 +1,24 @@
1
+ # Copyright 2025 ForgeFlow S.L. (https://www.forgeflow.com)
2
+ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
3
+ from openupgradelib import openupgrade
4
+
5
+
6
+ def fill_purchase_order_amount_total_cc(env):
7
+ openupgrade.logged_query(
8
+ env.cr,
9
+ """
10
+ UPDATE purchase_order
11
+ SET amount_total_cc = amount_total / currency_rate
12
+ WHERE COALESCE(currency_rate, 0) != 0""",
13
+ )
14
+
15
+
16
+ @openupgrade.migrate()
17
+ def migrate(env, version):
18
+ openupgrade.delete_sql_constraint_safely(
19
+ env, "purchase", "purchase_order_line", "accountable_required_fields"
20
+ )
21
+ openupgrade.add_columns(
22
+ env, [("purchase.order", "amount_total_cc", "float", None, "purchase_order")]
23
+ )
24
+ fill_purchase_order_amount_total_cc(env)
@@ -0,0 +1,51 @@
1
+ ---Models in module 'purchase'---
2
+ new model bill.to.po.wizard [transient]
3
+ new model purchase.bill.line.match [sql_view]
4
+ # NOTHING TO DO
5
+
6
+ ---Fields in module 'purchase'---
7
+ purchase / account.move.line / is_downpayment (boolean) : previously in module sale
8
+ # NOTHING TO DO
9
+
10
+ purchase / purchase.order / amount_total_cc (float) : NEW isfunction: function, stored
11
+ # DONE: pre-migration: pre-create column and fill it (amount_total_cc = amount_total / currency_rate)
12
+
13
+ purchase / purchase.order / mail_reception_declined (boolean): NEW
14
+ # NOTHING TO DO: new feature
15
+
16
+ purchase / purchase.order.line / analytic_distribution_search (json): DEL stored: False
17
+ # NOTHING TO DO
18
+
19
+ purchase / purchase.order.line / is_downpayment (boolean) : NEW
20
+ purchase / purchase.order.line / product_no_variant_attribute_value_ids (many2many): previously in module purchase_product_matrix
21
+ purchase / purchase.order.line / product_template_attribute_value_ids (many2many): previously in module purchase_product_matrix
22
+ # NOTHING TO DO
23
+
24
+ purchase / res.partner / property_purchase_currency_id (many2one): needs conversion to v18-style company dependent
25
+ purchase / res.partner / receipt_reminder_email (boolean): needs conversion to v18-style company dependent
26
+ purchase / res.partner / reminder_date_before_receipt (integer): needs conversion to v18-style company dependent
27
+ # DONE: post-migration: used openupgrade_180.convert_company_dependent
28
+
29
+ ---XML records in module 'purchase'---
30
+ NEW ir.actions.server: purchase.action_confirm_rfqs
31
+ NEW ir.actions.server: purchase.action_merger
32
+ NEW ir.model.access: purchase.access_bill_to_po_wizard
33
+ NEW ir.model.access: purchase.access_purchase_bill_line_match
34
+ NEW ir.model.access: purchase.access_purchase_bill_line_match_invoicing_payments
35
+ NEW ir.model.access: purchase.access_purchase_bill_line_match_readonly
36
+ # NOTHING TO DO
37
+
38
+ ir.model.constraint: purchase.constraint_purchase_order_line_accountable_required_fields (changed definition: is now 'check(display_type is not null or is_downpayment or(product_id is not null and product_uom is not null and date_planned is not null))' ('check(display_type is not null or(product_id is not null and product_uom is not null and date_planned is not null))'))
39
+ # DONE: pre-migration: delete it (to safely force the change)
40
+
41
+ DEL ir.property: purchase.receipt_reminder_email (noupdate)
42
+ DEL ir.property: purchase.reminder_date_before_receipt (noupdate)
43
+ # DONE: post-migration: delete old property safely (now it's an ir.default record created by ORM)
44
+
45
+ NEW ir.ui.view: purchase.bill_to_po_wizard_form
46
+ NEW ir.ui.view: purchase.product_product_supplierinfo_tree_view2
47
+ NEW ir.ui.view: purchase.purchase_bill_line_match_tree
48
+ NEW ir.ui.view: purchase.purchase_history_graph
49
+ NEW ir.ui.view: purchase.purchase_history_pivot
50
+ DEL ir.ui.view: purchase.view_product_account_purchase_ok_form
51
+ NEW web_tour.tour: purchase.purchase_tour
@@ -0,0 +1,49 @@
1
+ # Copyright 2025 ForgeFlow S.L. (https://www.forgeflow.com)
2
+ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
3
+ from openupgradelib import openupgrade
4
+
5
+
6
+ def _setup_property_downpayment_account(env):
7
+ # "Copy" of sale _setup_property_downpayment_account
8
+ for company in env.companies:
9
+ if not company.chart_template or env["product.category"].with_company(
10
+ company
11
+ ).search_count(
12
+ [("property_account_downpayment_categ_id", "!=", False)], limit=1
13
+ ):
14
+ continue
15
+ # begin patch: avoid having errors for not loading l10n modules
16
+ if not company.country_id.code:
17
+ continue
18
+ module_name = "l10n_" + company.country_id.code.lower()
19
+ l10n_module = env["ir.module.module"].search(
20
+ [
21
+ ("name", "=", module_name),
22
+ ("state", "=", "installed"),
23
+ ]
24
+ )
25
+ if not l10n_module:
26
+ continue
27
+ # end patch
28
+ template_data = (
29
+ env["account.chart.template"]
30
+ ._get_chart_template_data(company.chart_template)
31
+ .get("template_data")
32
+ )
33
+ if template_data and template_data.get("property_account_downpayment_categ_id"):
34
+ property_downpayment_account = env.ref(
35
+ f'account.{company.id}_{template_data["property_account_downpayment_categ_id"]}',
36
+ raise_if_not_found=False,
37
+ )
38
+ if property_downpayment_account:
39
+ env["ir.default"].set(
40
+ "product.category",
41
+ "property_account_downpayment_categ_id",
42
+ property_downpayment_account.id,
43
+ company_id=company.id,
44
+ )
45
+
46
+
47
+ @openupgrade.migrate()
48
+ def migrate(env, version):
49
+ _setup_property_downpayment_account(env)
@@ -0,0 +1,21 @@
1
+ # Copyright 2025 ForgeFlow S.L. (https://www.forgeflow.com)
2
+ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
3
+ from openupgradelib import openupgrade
4
+
5
+
6
+ @openupgrade.migrate()
7
+ def migrate(env, version):
8
+ openupgrade.load_data(env, "sale", "18.0.1.2/noupdate_changes.xml")
9
+ openupgrade.delete_record_translations(
10
+ env.cr, "sale", ["email_template_edi_sale", "mail_template_sale_confirmation"]
11
+ )
12
+ openupgrade.delete_records_safely_by_xml_id(
13
+ env,
14
+ [
15
+ "sale.account_invoice_send_rule_see_all",
16
+ "sale.account_invoice_send_rule_see_personal",
17
+ "sale.onboarding_onboarding_step_sale_order_confirmation",
18
+ "sale.onboarding_onboarding_step_sample_quotation",
19
+ "sale.onboarding_onboarding_sale_quotation",
20
+ ],
21
+ )
@@ -0,0 +1,34 @@
1
+ # Copyright 2025 ForgeFlow S.L. (https://www.forgeflow.com)
2
+ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
3
+ from openupgradelib import openupgrade
4
+
5
+
6
+ @openupgrade.migrate()
7
+ def migrate(env, version):
8
+ openupgrade.rename_fields(
9
+ env,
10
+ [("product.document", "product_document", "attached_on", "attached_on_sale")],
11
+ )
12
+ openupgrade.rename_xmlids(
13
+ env.cr,
14
+ [
15
+ (
16
+ "sale.sale_order_action_view_quotation_kanban",
17
+ "sale.action_quotations_kanban",
18
+ )
19
+ ],
20
+ )
21
+ openupgrade.add_columns(
22
+ env,
23
+ [("sale.order.line", "technical_price_unit", "float", None, "sale_order_line")],
24
+ )
25
+ openupgrade.logged_query(
26
+ env.cr,
27
+ """
28
+ UPDATE sale_order_line
29
+ SET technical_price_unit = price_unit
30
+ """,
31
+ )
32
+ openupgrade.delete_sql_constraint_safely(
33
+ env, "sale", "sale_order_line", "accountable_required_fields"
34
+ )
@@ -0,0 +1,85 @@
1
+ ---Models in module 'sale'---
2
+ ---Fields in module 'sale'---
3
+ sale / account.analytic.applicability / business_domain (False) : selection_keys is now '['bill', 'expense', 'general', 'invoice', 'manufacturing_order', 'purchase_order', 'sale_order', 'stock_picking', 'timesheet']' ('['bill', 'expense', 'general', 'invoice', 'manufacturing_order', 'purchase_order', 'sale_order']')
4
+ # NOTHING TO DO: new options 'stock_picking' and 'timesheet'
5
+
6
+ sale / account.move.line / is_downpayment (boolean) : module is now 'purchase' ('sale')
7
+ # NOTHING TO DO
8
+
9
+ sale / product.category / property_account_downpayment_categ_id (many2one): NEW relation: account.account
10
+ # DONE: end-migration: call _setup_property_downpayment_account
11
+
12
+ sale / product.document / attached_on (selection) : DEL selection_keys: ['quotation', 'sale_order']
13
+ sale / product.document / attached_on_sale (selection) : NEW required, selection_keys: ['hidden', 'quotation', 'sale_order'], hasdefault: default
14
+ # DONE: pre-migration: renamed field
15
+
16
+ sale / res.company / sale_down_payment_product_id (many2one): DEL relation: product.product
17
+ # NOTHING TO DO: it was unused. Now downpayments use property_account_downpayment_categ_id
18
+
19
+ sale / sale.order / amount_to_invoice (float) : not stored anymore
20
+ sale / sale.order / analytic_account_id (many2one): DEL relation: account.analytic.account
21
+
22
+ sale / sale.order.line / analytic_distribution_search (json): DEL stored: False
23
+ # NOTHING TO DO
24
+
25
+ sale / sale.order.line / qty_invoiced_posted (float) : previously in module l10n_it_edi_doi
26
+ l10n_it_edi_doi / sale.order.line / qty_invoiced_posted (float) : not stored anymore
27
+ # NOTHING TO DO
28
+
29
+ sale / sale.order.line / combo_item_id (many2one) : NEW relation: product.combo.item
30
+ sale / sale.order.line / linked_line_id (many2one) : previously in module website_sale
31
+ sale / sale.order.line / linked_line_ids (one2many) : NEW relation: sale.order.line
32
+ sale / sale.order.line / linked_virtual_id (char) : NEW
33
+ sale / sale.order.line / selected_combo_items (char) : NEW stored: False
34
+ sale / sale.order.line / virtual_id (char) : NEW
35
+ # NOTHING TO DO
36
+
37
+ sale / sale.order.line / technical_price_unit (float) : NEW
38
+ # DONE: pre-migration: technical field filled with price_unit
39
+
40
+ ---XML records in module 'sale'---
41
+ NEW ir.actions.act_window.view: sale.action_quotations_kanban
42
+ NEW ir.actions.act_window.view: sale.action_quotations_tree
43
+ NEW ir.actions.server: sale.model_sale_order_send_mail
44
+ NEW ir.model.access: sale.access_account_move_send_batch_wizard_salesman
45
+ NEW ir.model.access: sale.access_account_move_send_wizard_salesman
46
+ NEW ir.model.access: sale.access_update_product_attribute_value_sale_manager
47
+ DEL ir.model.access: sale.access_account_move_send_salesman
48
+ # NOTHING TO DO
49
+
50
+ ir.model.constraint: sale.constraint_sale_order_line_accountable_required_fields (changed definition: is now 'check(display_type is not null or is_downpayment or(product_id is not null and product_uom is not null))' ('check(display_type is not null or(product_id is not null and product_uom is not null))'))
51
+ # DONE: pre-migration: delete it to force the change
52
+
53
+ NEW ir.rule: sale.account_invoice_send_batch_rule_see_all (noupdate)
54
+ NEW ir.rule: sale.account_invoice_send_batch_rule_see_personal (noupdate)
55
+ NEW ir.rule: sale.account_invoice_send_single_rule_see_all (noupdate)
56
+ NEW ir.rule: sale.account_invoice_send_single_rule_see_personal (noupdate)
57
+ DEL ir.rule: sale.account_invoice_send_rule_see_all (noupdate)
58
+ DEL ir.rule: sale.account_invoice_send_rule_see_personal (noupdate)
59
+ # DONE: post-migration: safely delete (we could rename them in pre-migration too, but then we would need to change the field name)
60
+
61
+ NEW ir.ui.menu: sale.menu_product_combos
62
+ NEW ir.ui.menu: sale.menu_product_tags
63
+ NEW ir.ui.menu: sale.sale_menu_config_activities
64
+ NEW ir.ui.view: sale.product_template_view_form
65
+ NEW ir.ui.view: sale.quote_document_layout_preview
66
+ NEW ir.ui.view: sale.sale_order_kanban_upload
67
+ NEW ir.ui.view: sale.sale_order_list_upload
68
+ NEW ir.ui.view: sale.view_category_property_form
69
+ NEW ir.ui.view: sale.view_quotation_kanban_with_onboarding
70
+ DEL ir.ui.view: sale_product_configurator.product_template_view_form
71
+ DEL ir.ui.view: sale_product_configurator.sale_order_view_form
72
+ NEW mail.message.subtype: sale.mt_order_viewed (noupdate)
73
+ NEW mail.message.subtype: sale.mt_salesteam_order_viewed (noupdate)
74
+ # NOTHING TO DO
75
+
76
+ DEL onboarding.onboarding: sale.onboarding_onboarding_sale_quotation (noupdate)
77
+ DEL onboarding.onboarding.step: sale.onboarding_onboarding_step_sale_order_confirmation (noupdate)
78
+ DEL onboarding.onboarding.step: sale.onboarding_onboarding_step_sample_quotation (noupdate)
79
+ # DONE: post-migration: safely delete
80
+
81
+ NEW res.groups: sale.group_discount_per_so_line [renamed from product module]
82
+ # NOTHING TO DO: rename done in product module
83
+
84
+ NEW web_tour.tour: sale.sale_tour
85
+ # NOTHING TO DO
@@ -0,0 +1,5 @@
1
+ ---Models in module 'sale_crm'---
2
+ ---Fields in module 'sale_crm'---
3
+ ---XML records in module 'sale_crm'---
4
+ ---nothing has changed in this module--
5
+ # NOTHING TO DO
@@ -0,0 +1,12 @@
1
+ # Copyright 2025 ForgeFlow S.L. (https://www.forgeflow.com)
2
+ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
3
+ from openupgradelib import openupgrade, openupgrade_180
4
+
5
+
6
+ def convert_company_dependent(env):
7
+ openupgrade_180.convert_company_dependent(env, "res.users", "property_warehouse_id")
8
+
9
+
10
+ @openupgrade.migrate()
11
+ def migrate(env, version):
12
+ convert_company_dependent(env)
@@ -0,0 +1,62 @@
1
+ # Copyright 2025 ForgeFlow S.L. (https://www.forgeflow.com)
2
+ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
3
+ from openupgradelib import openupgrade
4
+
5
+ _new_columns = [
6
+ ("sale.order.line", "warehouse_id", "many2one"),
7
+ ]
8
+
9
+
10
+ def fill_sale_order_line_warehouse_id(env):
11
+ openupgrade.logged_query(
12
+ env.cr,
13
+ """
14
+ UPDATE sale_order_line sol
15
+ SET warehouse_id = so.warehouse_id
16
+ FROM sale_order so
17
+ WHERE sol.order_id = so.id AND sol.route_id IS NULL
18
+ """,
19
+ )
20
+ openupgrade.logged_query(
21
+ env.cr,
22
+ """
23
+ WITH sub as (
24
+ SELECT sr.route_id, sr.location_dest_id, sl.warehouse_id
25
+ FROM stock_rule sr
26
+ JOIN stock_route slr ON sr.route_id = slr.id
27
+ LEFT JOIN stock_location sl ON sr.location_src_id = sl.id
28
+ WHERE sr.action != 'push'
29
+ ORDER BY sr.route_sequence, sr.sequence
30
+ )
31
+ UPDATE sale_order_line sol2
32
+ SET warehouse_id = COALESCE(
33
+ sub1.warehouse_id, sub2.warehouse_id, so.warehouse_id)
34
+ FROM sale_order_line sol
35
+ JOIN sale_order so ON sol.order_id = so.id
36
+ LEFT JOIN res_partner rp ON so.partner_shipping_id = rp.id
37
+ LEFT JOIN stock_location sl ON sl.id = (
38
+ rp.property_stock_customer::jsonb -> so.company_id)::int4
39
+ LEFT JOIN LATERAL (
40
+ SELECT sub.warehouse_id
41
+ FROM sub
42
+ WHERE sol.route_id = sub.route_id AND
43
+ sub.location_dest_id = sl.id AND (
44
+ sub.warehouse_id IS NULL OR so.warehouse_id = sub.warehouse_id)
45
+ LIMIT 1
46
+ ) sub1 ON TRUE
47
+ LEFT JOIN LATERAL (
48
+ SELECT sub.warehouse_id
49
+ FROM sub
50
+ WHERE sol.route_id = sub.route_id AND
51
+ sub.location_dest_id = sl.id
52
+ LIMIT 1
53
+ ) sub2 ON TRUE
54
+ WHERE sol.id = sol2.id AND sol.route_id IS NOT NULL
55
+ """,
56
+ )
57
+
58
+
59
+ @openupgrade.migrate()
60
+ def migrate(env, version=None):
61
+ openupgrade.add_columns(env, _new_columns)
62
+ fill_sale_order_line_warehouse_id(env)
@@ -0,0 +1,18 @@
1
+ ---Models in module 'sale_stock'---
2
+ ---Fields in module 'sale_stock'---
3
+ sale_stock / res.users / property_warehouse_id (many2one): needs conversion to v18-style company dependent
4
+ # DONE: post-migration: used openupgrade_180.convert_company_dependent
5
+
6
+ sale_stock / sale.order.line / warehouse_id (many2one) : is now stored
7
+ sale_stock / sale.order.line / warehouse_id (many2one) : not related anymore
8
+ sale_stock / sale.order.line / warehouse_id (many2one) : now a function
9
+ # DONE: pre-migration: pre-create and fill
10
+
11
+ sale_stock / stock.picking / sale_id (many2one) : not related anymore
12
+ sale_stock / stock.picking / sale_id (many2one) : now a function
13
+ # NOTHING TO DO
14
+
15
+ ---XML records in module 'sale_stock'---
16
+ NEW ir.ui.view: sale_stock.sale_stock_help_message_template
17
+ NEW ir.ui.view: sale_stock.view_picking_form
18
+ # NOTHING TO DO
@@ -0,0 +1,99 @@
1
+ # Copyright 2025 ForgeFlow S.L. (https://www.forgeflow.com)
2
+ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
3
+ from openupgradelib import openupgrade, openupgrade_180
4
+
5
+
6
+ def convert_company_dependent(env):
7
+ openupgrade_180.convert_company_dependent(
8
+ env, "product.template", "property_stock_inventory"
9
+ )
10
+ openupgrade_180.convert_company_dependent(
11
+ env, "product.template", "property_stock_production"
12
+ )
13
+ openupgrade_180.convert_company_dependent(env, "product.template", "responsible_id")
14
+ openupgrade_180.convert_company_dependent(
15
+ env, "res.partner", "property_stock_customer"
16
+ )
17
+ openupgrade_180.convert_company_dependent(
18
+ env, "res.partner", "property_stock_supplier"
19
+ )
20
+
21
+
22
+ def _create_default_new_types_for_all_warehouses(env):
23
+ # method mainly based on _create_or_update_sequences_and_picking_types()
24
+ all_warehouses = env["stock.warehouse"].with_context(active_test=False).search([])
25
+ for wh in all_warehouses:
26
+ sequence_data = wh._get_sequence_values()
27
+ for field in ["qc_type_id", "store_type_id", "xdock_type_id"]:
28
+ # choose the next available color for the operation types of this warehouse
29
+ all_used_colors = [
30
+ res["color"]
31
+ for res in env["stock.picking.type"]
32
+ .with_context(active_test=False)
33
+ .search_read(
34
+ [("warehouse_id", "!=", False), ("color", "!=", False)],
35
+ ["color"],
36
+ order="color",
37
+ )
38
+ ]
39
+ available_colors = [
40
+ zef for zef in range(0, 12) if zef not in all_used_colors
41
+ ]
42
+ color = available_colors[0] if available_colors else 0
43
+ # suit for each warehouse: reception, internal, pick, pack, ship
44
+ max_sequence = (
45
+ env["stock.picking.type"]
46
+ .with_context(active_test=False)
47
+ .search_read(
48
+ [("sequence", "!=", False)],
49
+ ["sequence"],
50
+ limit=1,
51
+ order="sequence desc",
52
+ )
53
+ )
54
+ max_sequence = max_sequence and max_sequence[0]["sequence"] or 0
55
+ values = wh._get_picking_type_update_values()[field]
56
+ create_data, _ = wh._get_picking_type_create_values(max_sequence)
57
+ values.update(create_data[field])
58
+ sequence = env["ir.sequence"].create(sequence_data[field])
59
+ values.update(
60
+ warehouse_id=wh.id,
61
+ color=color,
62
+ sequence_id=sequence.id,
63
+ sequence=max_sequence + 1,
64
+ company_id=wh.company_id.id,
65
+ active=wh.active,
66
+ )
67
+ # create picking type
68
+ picking_type_id = env["stock.picking.type"].create(values).id
69
+ # update picking type for warehouse
70
+ wh.write({field: picking_type_id})
71
+
72
+
73
+ def _set_inter_company_locations(env):
74
+ """See https://github.com/odoo/odoo/commit/08536d687880ca6d9ad5c37b639c0ad4c2599d74"""
75
+ companies = env["res.company"].search([])
76
+ if len(companies) > 1:
77
+ inter_company_location = env.ref("stock.stock_location_inter_company")
78
+ inactive = False
79
+ if not inter_company_location.active:
80
+ inactive = True
81
+ inter_company_location.sudo().write({"active": True})
82
+ for company in companies:
83
+ company.sudo()._set_per_company_inter_company_locations(
84
+ inter_company_location
85
+ )
86
+ if inactive:
87
+ # we leave everything as it was
88
+ inter_company_location.sudo().write({"active": False})
89
+
90
+
91
+ @openupgrade.migrate()
92
+ def migrate(env, version):
93
+ convert_company_dependent(env)
94
+ _create_default_new_types_for_all_warehouses(env)
95
+ _set_inter_company_locations(env)
96
+ openupgrade.load_data(env, "stock", "18.0.1.1/noupdate_changes.xml")
97
+ openupgrade.delete_records_safely_by_xml_id(
98
+ env, ["stock.property_stock_customer", "stock.property_stock_supplier"]
99
+ )
@@ -0,0 +1,81 @@
1
+ # Copyright 2025 ForgeFlow S.L. (https://www.forgeflow.com)
2
+ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
3
+ from openupgradelib import openupgrade
4
+
5
+ _field_renames = [
6
+ ("stock.move", "stock_move", "location_dest_id", "location_final_id"),
7
+ (
8
+ "stock.warehouse.orderpoint",
9
+ "stock_warehouse_orderpoint",
10
+ "qty_to_order",
11
+ "qty_to_order_manual",
12
+ ),
13
+ ]
14
+
15
+ _xmlid_renames = [
16
+ ("stock.stock_location_inter_wh", "stock.stock_location_inter_company"),
17
+ ]
18
+
19
+ _new_columns = [
20
+ ("product.template", "is_storable", "boolean", False),
21
+ ("stock.move", "location_dest_id", "many2one"),
22
+ ("stock.rule", "location_dest_from_rule", "boolean", False),
23
+ ("stock.picking.type", "move_type", "selection", "direct"),
24
+ ("stock.putaway.rule", "sublocation", "selection", "no"),
25
+ ]
26
+
27
+
28
+ def fill_product_template_is_storable(env):
29
+ openupgrade.logged_query(
30
+ env.cr,
31
+ """
32
+ UPDATE product_template
33
+ SET is_storable = TRUE, type = 'consu'
34
+ WHERE type = 'product'""",
35
+ )
36
+
37
+
38
+ def fill_stock_move_location_dest_id(env):
39
+ openupgrade.logged_query(
40
+ env.cr,
41
+ """
42
+ UPDATE stock_move sm2
43
+ SET location_dest_id = COALESCE(sp.location_dest_id,
44
+ spt.default_location_dest_id, sm.location_final_id)
45
+ FROM stock_move sm
46
+ LEFT JOIN stock_picking sp ON sm.picking_id = sp.id
47
+ LEFT JOIN stock_picking_type spt ON sm.picking_type_id = spt.id
48
+ WHERE sm2.id = sm.id
49
+ """,
50
+ )
51
+ openupgrade.logged_query(
52
+ env.cr,
53
+ """
54
+ UPDATE stock_rule sr
55
+ SET location_dest_from_rule = TRUE
56
+ FROM stock_move sm
57
+ WHERE sm.rule_id = sr.id
58
+ AND sm.location_dest_id != sm.location_final_id
59
+ AND sr.action IN ('pull', 'pull_push')
60
+ """,
61
+ )
62
+
63
+
64
+ def fill_stock_putaway_rule_sublocation(env):
65
+ openupgrade.logged_query(
66
+ env.cr,
67
+ """
68
+ UPDATE stock_putaway_rule
69
+ SET sublocation = 'closest_location'
70
+ WHERE storage_category_id is not null""",
71
+ )
72
+
73
+
74
+ @openupgrade.migrate()
75
+ def migrate(env, version=None):
76
+ openupgrade.rename_fields(env, _field_renames)
77
+ openupgrade.rename_xmlids(env.cr, _xmlid_renames)
78
+ openupgrade.add_columns(env, _new_columns)
79
+ fill_product_template_is_storable(env)
80
+ fill_stock_move_location_dest_id(env)
81
+ fill_stock_putaway_rule_sublocation(env)
@@ -0,0 +1,139 @@
1
+ ---Models in module 'stock'---
2
+ obsolete model stock.assign.serial [transient]
3
+ obsolete model stock.scheduler.compute [transient]
4
+ new model stock.lot.report [sql_view]
5
+ new model stock.replenish.mixin [abstract]
6
+ new model stock.scrap.reason.tag
7
+ # NOTHING TO DO
8
+
9
+ ---Fields in module 'stock'---
10
+ stock / product.template / detailed_type (False) : DEL selection_keys: ['consu', 'product', 'service'], mode: modify
11
+ stock / product.template / type (False) : DEL selection_keys: ['consu', 'product', 'service'], mode: modify
12
+ stock / product.template / is_storable (boolean) : NEW hasdefault: default
13
+ # DONE: pre-migration:: pre-create and fill is_storable and move 'product' to 'consu'
14
+
15
+ stock / product.template / route_from_categ_ids (many2many): table is now 'False' ('stock.route')
16
+ # NOTHING TO DO: related field
17
+
18
+ stock / product.template / property_stock_inventory (many2one): needs conversion to v18-style company dependent
19
+ stock / product.template / property_stock_production (many2one): needs conversion to v18-style company dependent
20
+ stock / product.template / responsible_id (many2one) : needs conversion to v18-style company dependent
21
+ stock / res.partner / property_stock_customer (many2one): needs conversion to v18-style company dependent
22
+ stock / res.partner / property_stock_supplier (many2one): needs conversion to v18-style company dependent
23
+ # DONE: post-migration: used openupgrade_180.convert_company_dependent
24
+
25
+ stock / stock.location / return_location (boolean) : DEL
26
+ stock / stock.picking.type / default_location_return_id (many2one): DEL relation: stock.location
27
+ # NOTHING TO DO: now is using _can_return() method instead
28
+
29
+ stock / stock.move / location_dest_id (many2one) : now a function
30
+ stock / stock.move / location_final_id (many2one) : NEW relation: stock.location
31
+ stock / stock.rule / location_dest_from_rule (boolean): NEW hasdefault: default
32
+ # DONE: pre-migration: rename location_dest_id to location_final_id, pre-create and fill location_dest_id and location_dest_from_rule
33
+
34
+ stock / stock.move / never_product_template_attribute_value_ids (many2many): NEW relation: product.template.attribute.value
35
+ # NOTHING TO DO: new technical feature
36
+
37
+ stock / stock.move.line / product_category_name (char) : not stored anymore
38
+ # NOTHING TO DO
39
+
40
+ stock / stock.picking / search_date_category (selection): NEW selection_keys: ['after', 'before', 'day_1', 'day_2', 'today', 'yesterday'], stored: False
41
+ stock / stock.picking / shipping_weight (float) : previously in module stock_delivery
42
+ stock_delivery / stock.picking / shipping_weight (float) : not a function anymore
43
+ stock / stock.picking / weight_bulk (float) : previously in module stock_delivery
44
+ # NOTHING TO DO: not stored
45
+
46
+ stock / stock.picking.type / _order : _order is now 'is_favorite desc, sequence, id' ('sequence, id')
47
+ # NOTHING TO DO: is_favorite is not stored
48
+
49
+ stock / stock.picking.type / default_location_dest_id (many2one): now required
50
+ stock / stock.picking.type / default_location_src_id (many2one): now required
51
+ # NOTHING TO DO? (not sure if we can assure it someway)
52
+
53
+ stock / stock.picking.type / favorite_user_ids (many2many) : NEW relation: res.users
54
+ # NOTHING TO DO: new feature
55
+
56
+ stock / stock.picking.type / move_type (selection) : NEW required, selection_keys: ['direct', 'one'], hasdefault: default
57
+ # DONE: pre-migration: pre-create and fill it with default 'direct'
58
+
59
+ stock / stock.picking.type / show_reserved (boolean) : DEL
60
+ # NOTHING TO DO: obsolete, see https://github.com/odoo/odoo/commit/54a795bf11d1ef5d791e587b0c9e4d260b97a79d
61
+
62
+ stock / stock.putaway.rule / sublocation (selection) : NEW selection_keys: ['closest_location', 'last_used', 'no'], hasdefault: default
63
+ # DONE: pre-migration: pre-create and fill it ('no' by default, 'closest_location' if storage_category_id is not null)
64
+
65
+ stock / stock.quant.package / location_id (many2one) : not a function anymore
66
+ # NOTHING TO DO: not sure why marked this way, it's the same in both v17 and v18
67
+
68
+ stock / stock.quant.package / shipping_weight (float) : previously in module stock_delivery
69
+ # NOTHING TO DO
70
+
71
+ stock / stock.rule / push_domain (char) : NEW
72
+ # NOTHING TO DO: new feature
73
+
74
+ stock / stock.scrap / scrap_reason_tag_ids (many2many): NEW relation: stock.scrap.reason.tag
75
+ stock / stock.scrap.reason.tag / color (char) : NEW hasdefault: default
76
+ stock / stock.scrap.reason.tag / name (char) : NEW required
77
+ stock / stock.scrap.reason.tag / sequence (integer) : NEW hasdefault: default
78
+ # NOTHING TO DO: new feature
79
+
80
+ stock / stock.warehouse / qc_type_id (many2one) : NEW relation: stock.picking.type
81
+ stock / stock.warehouse / store_type_id (many2one) : NEW relation: stock.picking.type
82
+ stock / stock.warehouse / xdock_type_id (many2one) : NEW relation: stock.picking.type
83
+ # DONE: post-migration: created / updated default picking types for all warehouses
84
+
85
+ stock / stock.warehouse.orderpoint / qty_to_order (float) : not stored anymore
86
+ stock / stock.warehouse.orderpoint / qty_to_order (float) : now a function
87
+ stock / stock.warehouse.orderpoint / qty_to_order_manual (float) : NEW
88
+ # DONE: pre-migration: rename qty_to_order to qty_to_order_manual
89
+
90
+ ---XML records in module 'stock'---
91
+ NEW digest.tip: stock.digest_tip_stock_1
92
+ NEW ir.actions.act_window: stock.action_get_picking_type_ready_moves
93
+ NEW ir.actions.act_window: stock.action_inventory_at_date
94
+ NEW ir.actions.act_window: stock.action_lot_report
95
+ NEW ir.actions.act_window: stock.action_picking_tree_graph
96
+ # NOTHING TO DO
97
+
98
+ ir.actions.act_window: stock.stock_picking_action_picking_type (deleted domain)
99
+ # NOTHING TO DO: domain was already empty
100
+
101
+ DEL ir.actions.act_window: stock.act_assign_serial_numbers
102
+ DEL ir.actions.act_window: stock.action_procurement_compute
103
+ NEW ir.actions.server: stock.action_install_barcode
104
+ NEW ir.actions.server: stock.action_print_labels
105
+ NEW ir.actions.server: stock.click_dashboard_graph
106
+ NEW ir.actions.server: stock.method_action_picking_tree_incoming
107
+ NEW ir.actions.server: stock.method_action_picking_tree_internal
108
+ NEW ir.actions.server: stock.method_action_picking_tree_outgoing
109
+ NEW ir.actions.server: stock.stock_split_picking
110
+ NEW ir.config_parameter: stock.barcode_separator (noupdate)
111
+ NEW ir.model.access: stock.access_stock_inventory_adjustment_name_manager
112
+ NEW ir.model.access: stock.access_stock_inventory_adjustment_name_user
113
+ NEW ir.model.access: stock.access_stock_location_all_user
114
+ NEW ir.model.access: stock.access_stock_lot_report
115
+ NEW ir.model.access: stock.access_stock_scrap_reason_tag_manager
116
+ NEW ir.model.access: stock.access_stock_scrap_reason_tag_user
117
+ NEW ir.model.access: stock.access_update_product_attribute_value_stock_manager
118
+ DEL ir.model.access: stock.access_stock_assign_serial
119
+ DEL ir.model.access: stock.access_stock_inventory_adjustment_name
120
+ DEL ir.model.access: stock.access_stock_scheduler_compute
121
+ NEW ir.model.constraint: stock.constraint_stock_scrap_reason_tag_name_uniq
122
+ DEL ir.ui.menu: stock.menu_reordering_rules_config
123
+ NEW ir.ui.view: stock.help_message_template
124
+ NEW ir.ui.view: stock.product_template_search_view_inherit_stock
125
+ NEW ir.ui.view: stock.search_customer_lot_filter
126
+ NEW ir.ui.view: stock.stock_lot_customer_report_view_list
127
+ DEL ir.ui.view: stock.view_assign_serial_numbers
128
+ DEL ir.ui.view: stock.view_procurement_compute_wizard
129
+ DEL res.groups: stock.group_stock_picking_wave
130
+ DEL res.groups: stock.group_stock_storage_categories
131
+ # NOTHING TO DO
132
+
133
+ DEL ir.property: stock.property_stock_customer (noupdate)
134
+ DEL ir.property: stock.property_stock_supplier (noupdate)
135
+ # DONE: post-migration: safely delete records
136
+
137
+ NEW stock.location: stock.stock_location_inter_company (noupdate)
138
+ DEL stock.location: stock.stock_location_inter_wh (noupdate)
139
+ # DONE: pre-migration: rename xmlid
@@ -0,0 +1,23 @@
1
+ # Copyright 2025 ForgeFlow S.L. (https://www.forgeflow.com)
2
+ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
3
+ from openupgradelib import openupgrade
4
+
5
+
6
+ @openupgrade.migrate()
7
+ def migrate(env, version):
8
+ for company in env["res.company"].search([("chart_template", "!=", False)]):
9
+ if not company.country_id.code:
10
+ continue
11
+ module_name = "l10n_" + company.country_id.code.lower()
12
+ l10n_module = env["ir.module.module"].search(
13
+ [
14
+ ("name", "=", module_name),
15
+ ("state", "=", "installed"),
16
+ ]
17
+ )
18
+ if not l10n_module:
19
+ continue
20
+ template_code = company.chart_template
21
+ ChartTemplate = env["account.chart.template"].with_company(company)
22
+ full_data = ChartTemplate._get_chart_template_data(template_code)
23
+ ChartTemplate._load_wip_accounts(company, full_data["res.company"])
@@ -0,0 +1,36 @@
1
+ # Copyright 2025 ForgeFlow S.L. (https://www.forgeflow.com)
2
+ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
3
+ from openupgradelib import openupgrade, openupgrade_180
4
+
5
+
6
+ def convert_company_dependent(env):
7
+ openupgrade_180.convert_company_dependent(
8
+ env, "product.category", "property_cost_method"
9
+ )
10
+ openupgrade_180.convert_company_dependent(
11
+ env, "product.category", "property_stock_account_input_categ_id"
12
+ )
13
+ openupgrade_180.convert_company_dependent(
14
+ env, "product.category", "property_stock_account_output_categ_id"
15
+ )
16
+ openupgrade_180.convert_company_dependent(
17
+ env, "product.category", "property_stock_journal"
18
+ )
19
+ openupgrade_180.convert_company_dependent(
20
+ env, "product.category", "property_stock_valuation_account_id"
21
+ )
22
+ openupgrade_180.convert_company_dependent(
23
+ env, "product.category", "property_valuation"
24
+ )
25
+
26
+
27
+ @openupgrade.migrate()
28
+ def migrate(env, version):
29
+ convert_company_dependent(env)
30
+ openupgrade.delete_records_safely_by_xml_id(
31
+ env,
32
+ [
33
+ "stock_account.default_category_cost_method",
34
+ "stock_account.default_category_valuation",
35
+ ],
36
+ )
@@ -0,0 +1,22 @@
1
+ # Copyright 2025 ForgeFlow S.L. (https://www.forgeflow.com)
2
+ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
3
+ from openupgradelib import openupgrade
4
+
5
+
6
+ def delete_property_xmlids(env):
7
+ # avoid conflict in in _create_default_stock_accounts_properties
8
+ # they changed records from ir.property to ir.default
9
+ for field in [
10
+ "property_stock_account_output_categ_id",
11
+ "property_stock_account_input_categ_id",
12
+ ]:
13
+ imd = env["ir.model.data"].search(
14
+ [("module", "=", "stock_account"), ("name", "=", field)]
15
+ )
16
+ if imd:
17
+ imd.unlink()
18
+
19
+
20
+ @openupgrade.migrate()
21
+ def migrate(env, version):
22
+ delete_property_xmlids(env)
@@ -0,0 +1,34 @@
1
+ ---Models in module 'stock_account'---
2
+ ---Fields in module 'stock_account'---
3
+ stock_account / product.category / property_cost_method (selection): needs conversion to v18-style company dependent
4
+ stock_account / product.category / property_stock_account_input_categ_id (many2one): needs conversion to v18-style company dependent
5
+ stock_account / product.category / property_stock_account_output_categ_id (many2one): needs conversion to v18-style company dependent
6
+ stock_account / product.category / property_stock_journal (many2one): needs conversion to v18-style company dependent
7
+ stock_account / product.category / property_stock_valuation_account_id (many2one): needs conversion to v18-style company dependent
8
+ stock_account / product.category / property_valuation (selection): needs conversion to v18-style company dependent
9
+ # DONE: post-migration: used openupgrade_180.convert_company_dependent
10
+
11
+ stock_account / res.company / account_production_wip_account_id (many2one): NEW relation: account.account
12
+ stock_account / res.company / account_production_wip_overhead_account_id (many2one): NEW relation: account.account
13
+ # DONE: end-migration: call _load_wip_accounts
14
+
15
+ stock_account / product.template / lot_valuated (boolean) : NEW hasdefault: compute
16
+ stock_account / stock.lot / standard_price (float) : NEW
17
+ stock_account / stock.lot / stock_valuation_layer_ids (one2many): NEW relation: stock.valuation.layer
18
+ stock_account / stock.valuation.layer / lot_id (many2one) : NEW relation: stock.lot
19
+ # NOTHING TO DO: new features
20
+
21
+ ---XML records in module 'stock_account'---
22
+ NEW ir.actions.act_window: stock_account.action_revalue_layers
23
+ DEL ir.actions.act_window: stock_account.inventory_aging_action
24
+ # NOTHING TO DO
25
+
26
+ DEL ir.property: stock_account.default_category_cost_method (noupdate)
27
+ DEL ir.property: stock_account.default_category_valuation (noupdate)
28
+ # DONE: post-migration: delete old property safely (now it's an ir.default record created by ORM)
29
+
30
+ DEL ir.ui.menu: stock_account.menu_inventory_aging
31
+ NEW ir.ui.view: stock_account.view_picking_form
32
+ NEW ir.ui.view: stock_account.view_production_lot_form_stock_account
33
+ NEW ir.ui.view: stock_account.view_template_property_form_stock_account
34
+ # NOTHING TO DO
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: odoo-addon-openupgrade_scripts
3
- Version: 18.0.1.0.0.79
3
+ Version: 18.0.1.0.0.97
4
4
  Requires-Python: >=3.10
5
5
  Requires-Dist: odoo==18.0.*
6
6
  Requires-Dist: openupgradelib
@@ -6,7 +6,7 @@ odoo/addons/openupgrade_scripts/readme/CONFIGURE.md,sha256=rnx8ADTYzVUB93PIG3Lib
6
6
  odoo/addons/openupgrade_scripts/readme/DESCRIPTION.md,sha256=6hwHccovmE9cfaV7PQPvKUvNJa-f_Uc1wgXyL_SrYck,86
7
7
  odoo/addons/openupgrade_scripts/readme/INSTALL.md,sha256=NDKVZRv0J8BTqcSTD7JwUXL_AY-cDJoegn5IUTbEOFk,113
8
8
  odoo/addons/openupgrade_scripts/scripts/account/18.0.1.3/noupdate_changes.xml,sha256=1SneJujek6MgUrwI0rVHsDylugguPefT0IsNfQDdmhk,3897
9
- odoo/addons/openupgrade_scripts/scripts/account/18.0.1.3/post-migration.py,sha256=-U8ClT3fU6ANex1D4H5owTIYHpNvBs4gbKehPmvcUcg,6049
9
+ odoo/addons/openupgrade_scripts/scripts/account/18.0.1.3/post-migration.py,sha256=1owo0nPgYcTKkcreMZXqpD7ncjX9NSksKvdpQmODCDA,6054
10
10
  odoo/addons/openupgrade_scripts/scripts/account/18.0.1.3/pre-migration.py,sha256=PhJf_Lde2fk6EjaWUL_TmlGoPY--2WCT3zcbx1ZlaGU,6863
11
11
  odoo/addons/openupgrade_scripts/scripts/account/18.0.1.3/upgrade_analysis.txt,sha256=vbyBRym4DSEQxqxhMH_InF37tEvmv4ZNXvHue0n3OW0,22056
12
12
  odoo/addons/openupgrade_scripts/scripts/account/18.0.1.3/upgrade_analysis_work.txt,sha256=YrfcO8-DN1AlFM261lufp4yhGUyGL1G6_9MBEHnkqf8,25107
@@ -66,6 +66,7 @@ odoo/addons/openupgrade_scripts/scripts/base_setup/18.0.1.0/upgrade_analysis.txt
66
66
  odoo/addons/openupgrade_scripts/scripts/base_setup/18.0.1.0/upgrade_analysis_work.txt,sha256=ZdJBECuFK-mQEKqxI-lNStawGIO5YPmiUJ3QWVtqUBE,333
67
67
  odoo/addons/openupgrade_scripts/scripts/base_sparse_field/18.0.1.0/upgrade_analysis.txt,sha256=shg-2JSIpxi-K20IWUbWROaY5CNsHdGaBUbNizYU8dk,174
68
68
  odoo/addons/openupgrade_scripts/scripts/base_vat/18.0.1.0/upgrade_analysis.txt,sha256=LXrUfYCz0k0VpKULEP3DmH2kYnO2BdMDh6T0HyyYPIc,147
69
+ odoo/addons/openupgrade_scripts/scripts/base_vat/18.0.1.0/upgrade_analysis_work.txt,sha256=G1hXSvAdx6XXjGtAmd-9ib2GBEoLdIqeinN0cTxE2uw,163
69
70
  odoo/addons/openupgrade_scripts/scripts/board/18.0.1.0/upgrade_analysis.txt,sha256=Xl5TzyuBSsACKcv80s8z9wRqjM0jzYLnryGXjsa_H6A,138
70
71
  odoo/addons/openupgrade_scripts/scripts/bus/18.0.1.0/upgrade_analysis.txt,sha256=Yy8XmQl4tpOeVWWhpZo5quFOOVwu7NauJvmuPyEiYRU,132
71
72
  odoo/addons/openupgrade_scripts/scripts/calendar/18.0.1.1/noupdate_changes.xml,sha256=SjGqS0MfHf6LF__KFXX5u5h9W0KJo2UwhYYUZdpVjCs,23914
@@ -114,7 +115,10 @@ odoo/addons/openupgrade_scripts/scripts/google_account/18.0.1.0/upgrade_analysis
114
115
  odoo/addons/openupgrade_scripts/scripts/google_calendar/18.0.1.0/upgrade_analysis.txt,sha256=iMeeIGefpSzSYdQz8N7VPB4kv43LmOuEjTz45kF1UAA,1898
115
116
  odoo/addons/openupgrade_scripts/scripts/google_gmail/18.0.1.2/upgrade_analysis.txt,sha256=b1TWNWOfzOEpXDKKTyKhdJjTQxGbpL13YSubr1uIXKY,159
116
117
  odoo/addons/openupgrade_scripts/scripts/hr/18.0.1.1/noupdate_changes.xml,sha256=_g7rno2TLcVA8xR5C1XaLQBjpLJjXudne5jhRUVmUs4,1106
118
+ odoo/addons/openupgrade_scripts/scripts/hr/18.0.1.1/post-migration.py,sha256=dmm0jm1RwjZb_JIpT1zHJa_rBZ8euEF4rR3Kv_3fh_I,358
119
+ odoo/addons/openupgrade_scripts/scripts/hr/18.0.1.1/pre-migration.py,sha256=EByvFmWejoFNEo2s9fozSGrrpE6ZURvjpDRUrB67oL4,1573
117
120
  odoo/addons/openupgrade_scripts/scripts/hr/18.0.1.1/upgrade_analysis.txt,sha256=kKuy0qp3PThp9pBBA4gp8_VRXO_JQzvFfIMeylPnsvo,5059
121
+ odoo/addons/openupgrade_scripts/scripts/hr/18.0.1.1/upgrade_analysis_work.txt,sha256=XiSQbufmJfTgyBTWG8LPQ8L59QK1Z20cbw1Iuc8Tl2c,5320
118
122
  odoo/addons/openupgrade_scripts/scripts/hr_attendance/18.0.2.0/upgrade_analysis.txt,sha256=fnRJlMoormu0_MXOVs9SwqRyTmz8Y0KUP_CdJq1jmYg,2387
119
123
  odoo/addons/openupgrade_scripts/scripts/hr_calendar/18.0.1.0/upgrade_analysis.txt,sha256=dV6653kOoWySkXPgHvodW1MBxFJdvX-ABxneZaJGm6Y,361
120
124
  odoo/addons/openupgrade_scripts/scripts/hr_contract/18.0.1.0/noupdate_changes.xml,sha256=PkV4DydJ8vfXgFiRWKfxyy4NouAUSO32YafYq4MGLjw,257
@@ -192,6 +196,7 @@ odoo/addons/openupgrade_scripts/scripts/l10n_ee/18.0.1.2/upgrade_analysis.txt,sh
192
196
  odoo/addons/openupgrade_scripts/scripts/l10n_eg/18.0.1.0/upgrade_analysis.txt,sha256=51_t54Tm_IwWUUFvtrB3XmMNkzLggWl2_bb3iSckLGE,144
193
197
  odoo/addons/openupgrade_scripts/scripts/l10n_eg_edi_eta/18.0.0.2/upgrade_analysis.txt,sha256=f2AaXZRdCljxh7HjEHarlfgonOcm-NqVuLmhfAR_y4c,168
194
198
  odoo/addons/openupgrade_scripts/scripts/l10n_es/18.0.5.4/upgrade_analysis.txt,sha256=9M4rNqV6rvP2uFZtXPAOLlSONYBzZS2RT_35vSClxSs,4212
199
+ odoo/addons/openupgrade_scripts/scripts/l10n_es/18.0.5.4/upgrade_analysis_work.txt,sha256=qSYnZ6mWmGu1FeE_Z2Tbi3LYfcEjkxuwo-BWjldcxKs,4245
195
200
  odoo/addons/openupgrade_scripts/scripts/l10n_es_edi_facturae/18.0.1.0/upgrade_analysis.txt,sha256=u_6KlmBB8ePuBHndermTbiQCuEBdSnpcyFrcvm9EtNk,7280
196
201
  odoo/addons/openupgrade_scripts/scripts/l10n_es_edi_sii/18.0.1.1/upgrade_analysis.txt,sha256=cU_8rPaLN5uBVOBEwAaaJs00-ZoLVT1hK5CQBmZ9M4E,2573
197
202
  odoo/addons/openupgrade_scripts/scripts/l10n_es_edi_tbai/18.0.1.1/upgrade_analysis.txt,sha256=3cJ1IutooQ4lIUUNZ24alWY7ifMon4_5TYUPgHop3N8,3021
@@ -404,7 +409,10 @@ odoo/addons/openupgrade_scripts/scripts/project_timesheet_holidays/18.0.1.0/upgr
404
409
  odoo/addons/openupgrade_scripts/scripts/project_todo/18.0.1.0/noupdate_changes.xml,sha256=T2_NPrJLpea-bVxlENwmZHOyNKQeN7HUCNI2UVcxlnw,5561
405
410
  odoo/addons/openupgrade_scripts/scripts/project_todo/18.0.1.0/upgrade_analysis.txt,sha256=XmVoWbJznxZPygiq6awrsJkLPoltoUAjxxHPf5etKlw,465
406
411
  odoo/addons/openupgrade_scripts/scripts/purchase/18.0.1.2/noupdate_changes.xml,sha256=xGGVoZl05obHeSSwfN1KPQcufevlxNgL6rKmvRIyqDU,2256
412
+ odoo/addons/openupgrade_scripts/scripts/purchase/18.0.1.2/post-migration.py,sha256=unDAHUzzbqyJP1cFbrSLKxefmmWFcC0UYlDCALazy-U,1003
413
+ odoo/addons/openupgrade_scripts/scripts/purchase/18.0.1.2/pre-migration.py,sha256=HxbROa1GN7CENDBRBbBBi9jO97Y4CogKR7TO388P8Hs,763
407
414
  odoo/addons/openupgrade_scripts/scripts/purchase/18.0.1.2/upgrade_analysis.txt,sha256=qFZcna2eRbIcTDSv5TyJQKfJsIePI4Z1mCukGfxlLlQ,2554
415
+ odoo/addons/openupgrade_scripts/scripts/purchase/18.0.1.2/upgrade_analysis_work.txt,sha256=qYY_80OGXo303eFurAtAaYXIec638Zy40Ie-Jg2mtOM,3006
408
416
  odoo/addons/openupgrade_scripts/scripts/purchase_edi_ubl_bis3/18.0.1.0/upgrade_analysis.txt,sha256=uysFx3NDehxGwCKjXp3Ldacyz4V-I7E64Fm40Fnh5wI,895
409
417
  odoo/addons/openupgrade_scripts/scripts/purchase_mrp/18.0.1.0/upgrade_analysis.txt,sha256=s0eoIIo1yB8XyLS0MNqcjE3IkZSQ-r4l4jVya3V6GFs,159
410
418
  odoo/addons/openupgrade_scripts/scripts/purchase_product_matrix/18.0.1.0/upgrade_analysis.txt,sha256=obvxp1mgxodP6rjNo4iQu45-Tt6Dec70_Tq-nKHYdM0,466
@@ -421,10 +429,15 @@ odoo/addons/openupgrade_scripts/scripts/resource/18.0.1.1/upgrade_analysis.txt,s
421
429
  odoo/addons/openupgrade_scripts/scripts/resource/18.0.1.1/upgrade_analysis_work.txt,sha256=1Mlqxp205WZTXosQuKyETeoqToAXPadSA9Sg7Mk5uQI,464
422
430
  odoo/addons/openupgrade_scripts/scripts/resource_mail/18.0.1.0/upgrade_analysis.txt,sha256=sgtF4Q_GF86a4zLOB9HX1HnU5mPj_hPWyT54gM3bU7w,162
423
431
  odoo/addons/openupgrade_scripts/scripts/resource_mail/18.0.1.0/upgrade_analysis_work.txt,sha256=lVtnhpENuiCrKqav2o8fwJF5hv2CT5rZEuHu8IjeVwY,178
432
+ odoo/addons/openupgrade_scripts/scripts/sale/18.0.1.2/end-migration.py,sha256=sU91wzwF4aYz_xx9Vt0gWsgB0ZlY3BB91qzz1CLwEyQ,1848
424
433
  odoo/addons/openupgrade_scripts/scripts/sale/18.0.1.2/noupdate_changes.xml,sha256=22xjrfNR9uX7YWGv4cuLmrnwJlqHa9jdOg6IPp5RnO4,15888
434
+ odoo/addons/openupgrade_scripts/scripts/sale/18.0.1.2/post-migration.py,sha256=nw1z4mKNcws5LNxuvyDs9EgB26NAtKAGsmy2tq_DiW0,819
435
+ odoo/addons/openupgrade_scripts/scripts/sale/18.0.1.2/pre-migration.py,sha256=0KR_7FtOfQMT7l3xedoda4FGpjFDaKcWcEq_3gyYuPY,981
425
436
  odoo/addons/openupgrade_scripts/scripts/sale/18.0.1.2/upgrade_analysis.txt,sha256=Zrp9xnFBDxHkINEJZjJgeTv7Ws0xVdadb9d9vIbQkiA,4458
437
+ odoo/addons/openupgrade_scripts/scripts/sale/18.0.1.2/upgrade_analysis_work.txt,sha256=_zKUwOKNSO-IThuLSi9R64SMEPfpvA2zail066ACsZw,5170
426
438
  odoo/addons/openupgrade_scripts/scripts/sale_async_emails/18.0.1.0/upgrade_analysis.txt,sha256=kY93alnS-FPYSRIZdYl4Qcnns27GpJ95evr0XmCBLuA,174
427
439
  odoo/addons/openupgrade_scripts/scripts/sale_crm/18.0.1.0/upgrade_analysis.txt,sha256=lv8jHV4r15aW7GmffXmW3R6DrZAoKEC60trv5mjtbdU,147
440
+ odoo/addons/openupgrade_scripts/scripts/sale_crm/18.0.1.0/upgrade_analysis_work.txt,sha256=wmjKSpCaW6ientHM3WMAfbnXTuvofeXNPLN4guTEv0U,163
428
441
  odoo/addons/openupgrade_scripts/scripts/sale_edi_ubl/18.0.1.0/upgrade_analysis.txt,sha256=Ic9wauo6hAghlyKhAiXFfOmkIos6SghxBK6bbeL_bIU,199
429
442
  odoo/addons/openupgrade_scripts/scripts/sale_expense/18.0.1.0/upgrade_analysis.txt,sha256=fmL9ehU0qjB23ZWgU66K05YBEvF1kjLmbV3p28-CU3M,159
430
443
  odoo/addons/openupgrade_scripts/scripts/sale_expense_margin/18.0.1.0/upgrade_analysis.txt,sha256=9d62c8OD-bC7sknkGNfwteGPhnmi9OnL7DDCGu8F-Po,180
@@ -439,7 +452,10 @@ odoo/addons/openupgrade_scripts/scripts/sale_product_matrix/18.0.1.0/upgrade_ana
439
452
  odoo/addons/openupgrade_scripts/scripts/sale_project/18.0.1.0/upgrade_analysis.txt,sha256=9KgSX5UNQHVbLInxyNxStXas-JmCv98hub3wWM9x-jo,2646
440
453
  odoo/addons/openupgrade_scripts/scripts/sale_purchase/18.0.1.0/upgrade_analysis.txt,sha256=vuc0cBM74XVqfBQyb7Ncpr4U3FEs7bY5FUqXHzXPm7I,245
441
454
  odoo/addons/openupgrade_scripts/scripts/sale_service/18.0.1.0/upgrade_analysis.txt,sha256=aZz8BN0dfotG8o04pLNWHZW-SOa8fWI4iNfbSjV8mgI,159
455
+ odoo/addons/openupgrade_scripts/scripts/sale_stock/18.0.1.0/post-migration.py,sha256=QhAGk_EYZXHBa4iw5kZ5WXrpMTzVRjcyys6XpQ39lFE,395
456
+ odoo/addons/openupgrade_scripts/scripts/sale_stock/18.0.1.0/pre-migration.py,sha256=uck-mNWhW_y1XN3G1HGSQpNBpBHYVwZezt_fD8zADrU,2116
442
457
  odoo/addons/openupgrade_scripts/scripts/sale_stock/18.0.1.0/upgrade_analysis.txt,sha256=RwUr5aCoaKeqbxyGcsCr87a2NjixvvIWSPotRWFwsVI,796
458
+ odoo/addons/openupgrade_scripts/scripts/sale_stock/18.0.1.0/upgrade_analysis_work.txt,sha256=LU3xUMURljn9AQba_G14pBr0XV6RNJcSwzqHugxU-xg,945
443
459
  odoo/addons/openupgrade_scripts/scripts/sale_timesheet/18.0.1.0/upgrade_analysis.txt,sha256=9BvRKELhpDh-lgxHjpW-NUEE5b4PT98qasabwHwWfpI,1875
444
460
  odoo/addons/openupgrade_scripts/scripts/sales_team/18.0.1.1/post-migration.py,sha256=lsz6vqm1VRr8E2YKj0IN9NaA4i1hBUy1IdZxERJsCyc,301
445
461
  odoo/addons/openupgrade_scripts/scripts/sales_team/18.0.1.1/upgrade_analysis.txt,sha256=VOk4EzkUmzQrgbyfJKD9HsloFOmoT_oO9ulNb9S4CHY,311
@@ -456,8 +472,15 @@ odoo/addons/openupgrade_scripts/scripts/spreadsheet_dashboard/18.0.1.0/upgrade_a
456
472
  odoo/addons/openupgrade_scripts/scripts/spreadsheet_dashboard_pos_restaurant/18.0.1.0/upgrade_analysis.txt,sha256=2sp42OSaBEMKrEhPPst4IxjffGe_2wj8nU_QM1uY3m0,292
457
473
  odoo/addons/openupgrade_scripts/scripts/spreadsheet_dashboard_stock_account/18.0.1.0/upgrade_analysis.txt,sha256=iJhZOolILwgrkATpb0o6L7h9lCAK8NA3fVSmO2ST1HU,394
458
474
  odoo/addons/openupgrade_scripts/scripts/stock/18.0.1.1/noupdate_changes.xml,sha256=D5zrp_FcweU-CigDEwOGh0yIrn7lRkhfXVaUzeq7pko,209
475
+ odoo/addons/openupgrade_scripts/scripts/stock/18.0.1.1/post-migration.py,sha256=J_cwgQUx5BdHCdlO1c4AJoanaklhPQbjuxLK38la1_c,4112
476
+ odoo/addons/openupgrade_scripts/scripts/stock/18.0.1.1/pre-migration.py,sha256=-Qn6hUuHJwJBh3pakZ8XR49EX50b0U4H6Mtm71I_qqg,2415
459
477
  odoo/addons/openupgrade_scripts/scripts/stock/18.0.1.1/upgrade_analysis.txt,sha256=7StsiWfSuZCHPygChCsOC2bQM3pUskwMq181WofeNF8,7061
478
+ odoo/addons/openupgrade_scripts/scripts/stock/18.0.1.1/upgrade_analysis_work.txt,sha256=AI7RvmuykQnlxDB4GmGsehDq7WZm9J1BZtzMcCpAoJE,8449
479
+ odoo/addons/openupgrade_scripts/scripts/stock_account/18.0.1.1/end-migration.py,sha256=opAeXNeSconzN37tBDW9tMPMrb4PrHJ0MH6-88yJ28o,925
480
+ odoo/addons/openupgrade_scripts/scripts/stock_account/18.0.1.1/post-migration.py,sha256=Rtfpey0dONHUXyswMrvGK9MlwSJyal2HgfFloO4Dhs0,1213
481
+ odoo/addons/openupgrade_scripts/scripts/stock_account/18.0.1.1/pre-migration.py,sha256=zWOya4IKLGlpWE0pVcTRh7_A5SfKA77Ro8uAHMJ23Jc,698
460
482
  odoo/addons/openupgrade_scripts/scripts/stock_account/18.0.1.1/upgrade_analysis.txt,sha256=gcIY6zJyEcnjzYpQnlk-Tp1_kZlPX51SlIaEvHD0J18,2066
483
+ odoo/addons/openupgrade_scripts/scripts/stock_account/18.0.1.1/upgrade_analysis_work.txt,sha256=eQHOB1lO4QjTyERt4RG1uP5XjNWIP_wzHjSpvNcCS4c,2349
461
484
  odoo/addons/openupgrade_scripts/scripts/stock_delivery/18.0.1.0/upgrade_analysis.txt,sha256=Ld27ATWZZEPNc1b4S8iowPbMPfia2ZB1KTU9QdqWBnk,476
462
485
  odoo/addons/openupgrade_scripts/scripts/stock_dropshipping/18.0.1.0/upgrade_analysis.txt,sha256=DBMf7nszzJNHE1R2i_1f1tCr779hqsVzZ-p4EN9laaU,198
463
486
  odoo/addons/openupgrade_scripts/scripts/stock_fleet/18.0.1.0/upgrade_analysis.txt,sha256=HMq6lVXyu5E8Dt8ow1hwGIxf6XwkrZHZgpYhGubA1dY,1779
@@ -525,7 +548,7 @@ odoo/addons/openupgrade_scripts/scripts/website_slides_survey/18.0.1.0/upgrade_a
525
548
  odoo/addons/openupgrade_scripts/static/description/banner.png,sha256=KTIBu4gfxeZVw9zjs_fivTgFEOeaAorlBxajmCA1p6k,26859
526
549
  odoo/addons/openupgrade_scripts/static/description/icon.png,sha256=6xBPJauaFOF0KDHfHgQopSc28kKvxMaeoQFQWZtfZDo,9455
527
550
  odoo/addons/openupgrade_scripts/static/description/index.html,sha256=Jc0qAThlH5WnoSq6vPamjC8WyMkdo_9zkhDuU1qW1VI,12722
528
- odoo_addon_openupgrade_scripts-18.0.1.0.0.79.dist-info/METADATA,sha256=pOAF8py2K_fACMh08XNRT-M29TiHeaZ5EQz7dtD1jT8,3774
529
- odoo_addon_openupgrade_scripts-18.0.1.0.0.79.dist-info/WHEEL,sha256=9fEMia4zL7ZuZbnCOrcYogUhmn4XFIVaJ8G4YGI31xc,81
530
- odoo_addon_openupgrade_scripts-18.0.1.0.0.79.dist-info/top_level.txt,sha256=QE6RBQ0QX5f4eFuUcGgU5Kbq1A_qJcDs-e_vpr6pmfU,4
531
- odoo_addon_openupgrade_scripts-18.0.1.0.0.79.dist-info/RECORD,,
551
+ odoo_addon_openupgrade_scripts-18.0.1.0.0.97.dist-info/METADATA,sha256=yh5-JnC2IhwsS42bASprPWmMSJhrz4cg0ohOTAQvHpE,3774
552
+ odoo_addon_openupgrade_scripts-18.0.1.0.0.97.dist-info/WHEEL,sha256=9fEMia4zL7ZuZbnCOrcYogUhmn4XFIVaJ8G4YGI31xc,81
553
+ odoo_addon_openupgrade_scripts-18.0.1.0.0.97.dist-info/top_level.txt,sha256=QE6RBQ0QX5f4eFuUcGgU5Kbq1A_qJcDs-e_vpr6pmfU,4
554
+ odoo_addon_openupgrade_scripts-18.0.1.0.0.97.dist-info/RECORD,,