odoo-addon-openupgrade-scripts 17.0.1.0.1.294__py3-none-any.whl → 17.0.1.0.1.297__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.
- odoo/addons/openupgrade_scripts/scripts/delivery/17.0.1.0/post-migration.py +6 -0
- odoo/addons/openupgrade_scripts/scripts/delivery/17.0.1.0/pre-migration.py +135 -0
- odoo/addons/openupgrade_scripts/scripts/delivery/17.0.1.0/upgrade_analysis_work.txt +2 -4
- odoo/addons/openupgrade_scripts/scripts/project/17.0.1.3/post-migration.py +196 -0
- odoo/addons/openupgrade_scripts/scripts/project/17.0.1.3/pre-migration.py +63 -0
- odoo/addons/openupgrade_scripts/scripts/project/17.0.1.3/upgrade_analysis_work.txt +234 -0
- {odoo_addon_openupgrade_scripts-17.0.1.0.1.294.dist-info → odoo_addon_openupgrade_scripts-17.0.1.0.1.297.dist-info}/METADATA +1 -1
- {odoo_addon_openupgrade_scripts-17.0.1.0.1.294.dist-info → odoo_addon_openupgrade_scripts-17.0.1.0.1.297.dist-info}/RECORD +10 -7
- {odoo_addon_openupgrade_scripts-17.0.1.0.1.294.dist-info → odoo_addon_openupgrade_scripts-17.0.1.0.1.297.dist-info}/WHEEL +0 -0
- {odoo_addon_openupgrade_scripts-17.0.1.0.1.294.dist-info → odoo_addon_openupgrade_scripts-17.0.1.0.1.297.dist-info}/top_level.txt +0 -0
@@ -7,3 +7,9 @@ from openupgradelib import openupgrade
|
|
7
7
|
@openupgrade.migrate()
|
8
8
|
def migrate(env, version):
|
9
9
|
openupgrade.load_data(env, "delivery", "17.0.1.0/noupdate_changes.xml")
|
10
|
+
openupgrade.delete_record_translations(
|
11
|
+
env.cr,
|
12
|
+
"delivery",
|
13
|
+
["free_delivery_carrier", "product_product_delivery"],
|
14
|
+
field_list=["name"],
|
15
|
+
)
|
@@ -37,6 +37,98 @@ _xmlids_renames = [
|
|
37
37
|
"delivery.model_choose_delivery_package",
|
38
38
|
"stock_delivery.model_choose_delivery_package",
|
39
39
|
),
|
40
|
+
(
|
41
|
+
"delivery.choose_delivery_package_view_form",
|
42
|
+
"stock_delivery.choose_delivery_package_view_form",
|
43
|
+
),
|
44
|
+
(
|
45
|
+
"delivery.delivery_stock_report_delivery_no_package_section_line",
|
46
|
+
"stock_delivery.delivery_stock_report_delivery_no_package_section_line",
|
47
|
+
),
|
48
|
+
(
|
49
|
+
"delivery.delivery_tracking_url_warning_form",
|
50
|
+
"stock_delivery.delivery_tracking_url_warning_form",
|
51
|
+
),
|
52
|
+
(
|
53
|
+
"delivery.label_package_template_view_delivery",
|
54
|
+
"stock_delivery.label_package_template_view_delivery",
|
55
|
+
),
|
56
|
+
(
|
57
|
+
"delivery.product_template_hs_code",
|
58
|
+
"stock_delivery.product_template_hs_code",
|
59
|
+
),
|
60
|
+
(
|
61
|
+
"delivery.report_delivery_document2",
|
62
|
+
"stock_delivery.report_delivery_document2",
|
63
|
+
),
|
64
|
+
(
|
65
|
+
"delivery.report_package_barcode_delivery",
|
66
|
+
"stock_delivery.report_package_barcode_delivery",
|
67
|
+
),
|
68
|
+
(
|
69
|
+
"delivery.report_package_barcode_small_delivery",
|
70
|
+
"stock_delivery.report_package_barcode_small_delivery",
|
71
|
+
),
|
72
|
+
(
|
73
|
+
"delivery.report_shipping2",
|
74
|
+
"stock_delivery.report_shipping2",
|
75
|
+
),
|
76
|
+
(
|
77
|
+
"delivery.sale_order_portal_content_inherit_sale_stock_inherit_website_sale_delivery",
|
78
|
+
"stock_delivery.sale_order_portal_content_inherit_sale_stock_inherit_website_sale",
|
79
|
+
),
|
80
|
+
(
|
81
|
+
"delivery.stock_move_line_view_search_delivery",
|
82
|
+
"stock_delivery.stock_move_line_view_search_delivery",
|
83
|
+
),
|
84
|
+
(
|
85
|
+
"delivery.stock_package_type_form_delivery",
|
86
|
+
"stock_delivery.stock_package_type_form_delivery",
|
87
|
+
),
|
88
|
+
(
|
89
|
+
"delivery.stock_package_type_tree_delivery",
|
90
|
+
"stock_delivery.stock_package_type_tree_delivery",
|
91
|
+
),
|
92
|
+
(
|
93
|
+
"delivery.stock_report_delivery_aggregated_move_lines_inherit_delivery",
|
94
|
+
"stock_delivery.stock_report_delivery_aggregated_move_lines_inherit_delivery",
|
95
|
+
),
|
96
|
+
(
|
97
|
+
"delivery.stock_report_delivery_has_serial_move_line_inherit_delivery",
|
98
|
+
"stock_delivery.stock_report_delivery_has_serial_move_line_inherit_delivery",
|
99
|
+
),
|
100
|
+
(
|
101
|
+
"delivery.stock_report_delivery_package_section_line_inherit_delivery",
|
102
|
+
"stock_delivery.stock_report_delivery_package_section_line_inherit_delivery",
|
103
|
+
),
|
104
|
+
(
|
105
|
+
"delivery.view_move_line_tree_detailed_delivery",
|
106
|
+
"stock_delivery.view_move_line_tree_detailed_delivery",
|
107
|
+
),
|
108
|
+
(
|
109
|
+
"delivery.view_picking_type_form_delivery",
|
110
|
+
"stock_delivery.view_picking_type_form_delivery",
|
111
|
+
),
|
112
|
+
(
|
113
|
+
"delivery.view_picking_withcarrier_out_form",
|
114
|
+
"stock_delivery.view_picking_withcarrier_out_form",
|
115
|
+
),
|
116
|
+
(
|
117
|
+
"delivery.view_picking_withweight_internal_move_form",
|
118
|
+
"stock_delivery.view_picking_withweight_internal_move_form",
|
119
|
+
),
|
120
|
+
(
|
121
|
+
"delivery.view_quant_package_weight_form",
|
122
|
+
"stock_delivery.view_quant_package_weight_form",
|
123
|
+
),
|
124
|
+
(
|
125
|
+
"delivery.view_stock_rule_form_delivery",
|
126
|
+
"stock_delivery.view_stock_rule_form_delivery",
|
127
|
+
),
|
128
|
+
(
|
129
|
+
"delivery.vpicktree_view_tree",
|
130
|
+
"stock_delivery.vpicktree_view_tree",
|
131
|
+
),
|
40
132
|
]
|
41
133
|
|
42
134
|
|
@@ -47,6 +139,48 @@ def _delete_sql_constraints(env):
|
|
47
139
|
)
|
48
140
|
|
49
141
|
|
142
|
+
def _fill_sale_order_shipping_weight(env):
|
143
|
+
"""Field `shipping_weight` on sale.order is a new stored field."""
|
144
|
+
openupgrade.logged_query(
|
145
|
+
env.cr,
|
146
|
+
"""
|
147
|
+
ALTER TABLE sale_order
|
148
|
+
ADD COLUMN IF NOT EXISTS shipping_weight float8;
|
149
|
+
""",
|
150
|
+
)
|
151
|
+
openupgrade.logged_query(
|
152
|
+
env.cr,
|
153
|
+
"""
|
154
|
+
WITH weight_data AS (
|
155
|
+
SELECT
|
156
|
+
SUM(
|
157
|
+
COALESCE(sol.product_uom_qty, 0) * COALESCE(p.weight, 0)
|
158
|
+
) AS shipping_weight,
|
159
|
+
sol.order_id
|
160
|
+
FROM sale_order_line sol
|
161
|
+
JOIN product_product p ON sol.product_id = p.id
|
162
|
+
JOIN product_template pt ON p.product_tmpl_id = pt.id
|
163
|
+
WHERE pt.type IN ('product', 'consu')
|
164
|
+
AND (sol.is_delivery IS NULL OR sol.is_delivery = FALSE)
|
165
|
+
AND sol.display_type IS NULL
|
166
|
+
AND sol.product_uom_qty > 0
|
167
|
+
GROUP BY sol.order_id
|
168
|
+
)
|
169
|
+
UPDATE sale_order so
|
170
|
+
SET shipping_weight = wd.shipping_weight
|
171
|
+
FROM weight_data wd
|
172
|
+
WHERE so.id = wd.order_id;
|
173
|
+
""",
|
174
|
+
)
|
175
|
+
openupgrade.logged_query(
|
176
|
+
env.cr,
|
177
|
+
"""UPDATE sale_order
|
178
|
+
SET shipping_weight = 0
|
179
|
+
WHERE shipping_weight IS NULL
|
180
|
+
""",
|
181
|
+
)
|
182
|
+
|
183
|
+
|
50
184
|
def _fill_stock_move_line_carrier_id(env):
|
51
185
|
"""Field `carrier_id` on stock.move.line is now a stored field."""
|
52
186
|
openupgrade.logged_query(
|
@@ -71,6 +205,7 @@ def _fill_stock_move_line_carrier_id(env):
|
|
71
205
|
def migrate(env, version):
|
72
206
|
openupgrade.rename_xmlids(env.cr, _xmlids_renames)
|
73
207
|
_delete_sql_constraints(env)
|
208
|
+
_fill_sale_order_shipping_weight(env)
|
74
209
|
_fill_stock_move_line_carrier_id(env)
|
75
210
|
openupgrade.logged_query( # just to be sure
|
76
211
|
env.cr,
|
@@ -8,7 +8,7 @@ delivery / delivery.carrier / invoice_policy (selection) : select
|
|
8
8
|
# NOTHING TO DO
|
9
9
|
|
10
10
|
delivery / sale.order / shipping_weight (float) : NEW hasdefault: compute
|
11
|
-
#
|
11
|
+
# DONE: pre-migration: Add new column & set value for it
|
12
12
|
|
13
13
|
delivery / stock.move.line / carrier_id (many2one) : is now stored
|
14
14
|
# DONE: pre-migration: Add new column & set value for it
|
@@ -67,8 +67,6 @@ ir.model.constraint: delivery.constraint_delivery_carrier_margin_not_under_100_p
|
|
67
67
|
|
68
68
|
DEL ir.ui.menu: delivery.menu_action_delivery_carrier_form [renamed to stock_delivery module]
|
69
69
|
DEL ir.ui.menu: delivery.menu_delivery_zip_prefix [renamed to stock_delivery module]
|
70
|
-
# DONE: pre-migration: moved to stock_delivery
|
71
|
-
|
72
70
|
DEL ir.ui.view: delivery.choose_delivery_package_view_form
|
73
71
|
DEL ir.ui.view: delivery.delivery_stock_report_delivery_no_package_section_line
|
74
72
|
DEL ir.ui.view: delivery.delivery_tracking_url_warning_form
|
@@ -92,4 +90,4 @@ DEL ir.ui.view: delivery.view_picking_withweight_internal_move_form
|
|
92
90
|
DEL ir.ui.view: delivery.view_quant_package_weight_form
|
93
91
|
DEL ir.ui.view: delivery.view_stock_rule_form_delivery
|
94
92
|
DEL ir.ui.view: delivery.vpicktree_view_tree
|
95
|
-
#
|
93
|
+
# DONE: pre-migration: renamed xmlid to stock_delivery
|
@@ -0,0 +1,196 @@
|
|
1
|
+
# Copyright 2024 Viindoo Technology Joint Stock Company (Viindoo)
|
2
|
+
# Copyright 2025 Tecnativa - Pedro M. Baeza
|
3
|
+
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
4
|
+
|
5
|
+
from datetime import timedelta
|
6
|
+
|
7
|
+
from dateutil.rrule import FR, MO, MONTHLY, SA, SU, TH, TU, WE, YEARLY, rrule
|
8
|
+
from openupgradelib import openupgrade
|
9
|
+
|
10
|
+
_deleted_xml_records = [
|
11
|
+
"project.ir_cron_recurring_tasks",
|
12
|
+
"project.mt_project_task_blocked",
|
13
|
+
"project.mt_project_task_dependency_change",
|
14
|
+
"project.mt_project_task_ready",
|
15
|
+
"project.mt_task_blocked",
|
16
|
+
"project.mt_task_dependency_change",
|
17
|
+
"project.mt_task_progress",
|
18
|
+
"project.mt_task_ready",
|
19
|
+
]
|
20
|
+
|
21
|
+
|
22
|
+
def _fill_project_task_display_in_project(env):
|
23
|
+
"""Set it to False when there's a parent but not display project."""
|
24
|
+
openupgrade.logged_query(
|
25
|
+
env.cr,
|
26
|
+
"""
|
27
|
+
UPDATE project_task
|
28
|
+
SET display_in_project = False
|
29
|
+
WHERE parent_id IS NOT NULL AND display_project_id IS NULL;
|
30
|
+
""",
|
31
|
+
)
|
32
|
+
|
33
|
+
|
34
|
+
def _convert_project_task_repeat_type_after(env):
|
35
|
+
"""Convert the disappeared "repeat N times" strategy to "repeat until"."""
|
36
|
+
DAYS_MAPPING = {
|
37
|
+
"mon": MO,
|
38
|
+
"tue": TU,
|
39
|
+
"wed": WE,
|
40
|
+
"thu": TH,
|
41
|
+
"fri": FR,
|
42
|
+
"sat": SA,
|
43
|
+
"sun": SU,
|
44
|
+
}
|
45
|
+
WEEKS_MAPPING = {"first": 1, "second": 2, "third": 3, "last": 4}
|
46
|
+
MONTH_MAPPING = {
|
47
|
+
"january": 1,
|
48
|
+
"february": 2,
|
49
|
+
"march": 3,
|
50
|
+
"april": 4,
|
51
|
+
"may": 5,
|
52
|
+
"june": 6,
|
53
|
+
"july": 7,
|
54
|
+
"august": 8,
|
55
|
+
"september": 9,
|
56
|
+
"october": 10,
|
57
|
+
"november": 11,
|
58
|
+
"december": 12,
|
59
|
+
}
|
60
|
+
# First, expire all the already consumed recurrences
|
61
|
+
openupgrade.logged_query(
|
62
|
+
env.cr,
|
63
|
+
"""
|
64
|
+
UPDATE project_task_recurrence
|
65
|
+
SET repeat_type = 'until',
|
66
|
+
repeat_until = (CURRENT_DATE - interval '1 days')::date
|
67
|
+
WHERE repeat_type = 'after'
|
68
|
+
AND recurrence_left <= 0
|
69
|
+
""",
|
70
|
+
)
|
71
|
+
# For day interval, we can do it massively by SQL, as there's no variability
|
72
|
+
openupgrade.logged_query(
|
73
|
+
env.cr,
|
74
|
+
"""
|
75
|
+
WITH sub AS (
|
76
|
+
SELECT recurrence_id, MAX(date_deadline) AS date_deadline
|
77
|
+
FROM project_task
|
78
|
+
WHERE recurrence_id IS NOT NULL
|
79
|
+
GROUP by recurrence_id
|
80
|
+
)
|
81
|
+
UPDATE project_task_recurrence ptr
|
82
|
+
SET repeat_type = 'until',
|
83
|
+
repeat_until = (
|
84
|
+
sub.date_deadline + (
|
85
|
+
interval '1 days' * ptr.repeat_interval * ptr.recurrence_left
|
86
|
+
)
|
87
|
+
)::date
|
88
|
+
FROM sub
|
89
|
+
WHERE ptr.id = sub.recurrence_id
|
90
|
+
AND ptr.repeat_type = 'after'
|
91
|
+
AND ptr.repeat_unit = 'day'
|
92
|
+
AND ptr.recurrence_left > 0
|
93
|
+
""",
|
94
|
+
)
|
95
|
+
# WEEK
|
96
|
+
# - Obtain the number of days per week of each ocurrence
|
97
|
+
# - Get the remaining weeks from the number of days per week
|
98
|
+
# - Always put the end date on the last day of the week (Sunday)
|
99
|
+
env.cr.execute(
|
100
|
+
"""
|
101
|
+
SELECT
|
102
|
+
ptr.id, ptr.recurrence_left, ptr.repeat_interval,
|
103
|
+
ptr.mon, ptr.tue, ptr.wed, ptr.thu, ptr.fri, ptr.sat, ptr.sun,
|
104
|
+
MAX(pt.date_deadline) AS date_deadline
|
105
|
+
FROM project_task pt JOIN project_task_recurrence ptr
|
106
|
+
ON ptr.id = pt.recurrence_id
|
107
|
+
WHERE ptr.repeat_type = 'after'
|
108
|
+
AND ptr.repeat_unit = 'week'
|
109
|
+
AND date_deadline IS NOT NULL
|
110
|
+
GROUP BY pt.id, ptr.id
|
111
|
+
"""
|
112
|
+
)
|
113
|
+
for row in env.cr.dictfetchall():
|
114
|
+
ptr = env["project.task.recurrence"].browse(row["id"])
|
115
|
+
days_per_week = sum(1 if row[x] else 0 for x in DAYS_MAPPING)
|
116
|
+
weeks = int(row["recurrence_left"] % days_per_week) + 1
|
117
|
+
repeat_until = row["date_deadline"] + timedelta(
|
118
|
+
weeks=weeks * row["repeat_interval"]
|
119
|
+
)
|
120
|
+
repeat_until += timedelta(days=6 - repeat_until.weekday()) # Put Sunday
|
121
|
+
ptr.write({"repeat_type": "until", "repeat_until": repeat_until})
|
122
|
+
# MONTH AND YEAR
|
123
|
+
# - Build rrule inspired on v16 code, but in an optimized way
|
124
|
+
# - Get end date through rrule execution
|
125
|
+
env.cr.execute(
|
126
|
+
"""
|
127
|
+
SELECT
|
128
|
+
ptr.id, ptr.recurrence_left, ptr.repeat_interval, ptr.repeat_unit,
|
129
|
+
ptr.repeat_on_month, ptr.repeat_on_year, ptr.repeat_day, ptr.repeat_month,
|
130
|
+
ptr.repeat_week, ptr.repeat_weekday, MAX(pt.date_deadline) AS date_deadline
|
131
|
+
FROM project_task pt JOIN project_task_recurrence ptr
|
132
|
+
ON ptr.id = pt.recurrence_id
|
133
|
+
WHERE ptr.repeat_type = 'after'
|
134
|
+
AND ptr.repeat_unit IN ('month', 'year')
|
135
|
+
AND date_deadline IS NOT NULL
|
136
|
+
GROUP BY pt.id, ptr.id
|
137
|
+
"""
|
138
|
+
)
|
139
|
+
for row in env.cr.dictfetchall():
|
140
|
+
ptr = env["project.task.recurrence"].browse(row["id"])
|
141
|
+
rrule_kwargs = {
|
142
|
+
"interval": row["recurrence_left"] * row["repeat_interval"],
|
143
|
+
"dtstart": row["date_deadline"],
|
144
|
+
"freq": MONTHLY if row["repeat_unit"] == "month" else YEARLY,
|
145
|
+
}
|
146
|
+
if (row["repeat_on_month"] == "day" and row["repeat_unit"] == "month") or (
|
147
|
+
row["repeat_on_year"] == "day" and row["repeat_unit"] == "year"
|
148
|
+
):
|
149
|
+
rrule_kwargs["byweekday"] = [
|
150
|
+
DAYS_MAPPING[row["repeat_weekday"]](WEEKS_MAPPING[row["repeat_week"]])
|
151
|
+
]
|
152
|
+
if row["repeat_unit"] == "year" and row["repeat_on_year"] == "date":
|
153
|
+
rrule_kwargs["bymonth"] = MONTH_MAPPING[row["repeat_month"]]
|
154
|
+
repeat_until = list(rrule(**rrule_kwargs))[1]
|
155
|
+
if row["repeat_unit"] == "month" and row["repeat_on_month"] == "date":
|
156
|
+
repeat_until = repeat_until.replace(day=int(row["repeat_day"]))
|
157
|
+
if row["repeat_unit"] == "year" and row["repeat_on_year"] == "date":
|
158
|
+
repeat_until = repeat_until.replace(
|
159
|
+
day=int(row["repeat_day"]), month=MONTH_MAPPING[row["repeat_month"]]
|
160
|
+
)
|
161
|
+
ptr.write({"repeat_type": "until", "repeat_until": repeat_until})
|
162
|
+
|
163
|
+
|
164
|
+
def _fill_project_update_task_count(env):
|
165
|
+
"""Use an heuristics to get the fields task_count and closed_task_count for
|
166
|
+
historical project updates:
|
167
|
+
|
168
|
+
- Task count: the number of tasks which creation date is below project update
|
169
|
+
creation date.
|
170
|
+
- Closed task count: the number of tasks which end date is below project update
|
171
|
+
creation date.
|
172
|
+
"""
|
173
|
+
for update in env["project.update"].search([]):
|
174
|
+
base_domain = [("display_project_id", "=", update.project_id.id)]
|
175
|
+
update.task_count = env["project.task"].search_count(
|
176
|
+
base_domain + [("create_date", "<=", update.create_date)]
|
177
|
+
)
|
178
|
+
update.closed_task_count = env["project.task"].search_count(
|
179
|
+
base_domain + [("date_end", "<=", update.create_date)]
|
180
|
+
)
|
181
|
+
|
182
|
+
|
183
|
+
@openupgrade.migrate()
|
184
|
+
def migrate(env, version):
|
185
|
+
_fill_project_task_display_in_project(env)
|
186
|
+
_convert_project_task_repeat_type_after(env)
|
187
|
+
openupgrade.load_data(env, "project", "17.0.1.3/noupdate_changes.xml")
|
188
|
+
openupgrade.delete_record_translations(
|
189
|
+
env.cr,
|
190
|
+
"project",
|
191
|
+
("project_message_user_assigned", "rating_project_request_email_template"),
|
192
|
+
)
|
193
|
+
openupgrade.delete_records_safely_by_xml_id(
|
194
|
+
env,
|
195
|
+
_deleted_xml_records,
|
196
|
+
)
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# Copyright 2024 Viindoo Technology Joint Stock Company (Viindoo)
|
2
|
+
# Copyright 2025 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 _rename_fields(env):
|
9
|
+
openupgrade.rename_fields(
|
10
|
+
env,
|
11
|
+
[
|
12
|
+
("project.task", "project_task", "planned_hours", "allocated_hours"),
|
13
|
+
(
|
14
|
+
"project.task.type",
|
15
|
+
"project_task_type",
|
16
|
+
"auto_validation_kanban_state",
|
17
|
+
"auto_validation_state",
|
18
|
+
),
|
19
|
+
],
|
20
|
+
)
|
21
|
+
|
22
|
+
|
23
|
+
def _convert_project_task_state(env):
|
24
|
+
"""Handle kanban_state, is_closed, etc to state conversion."""
|
25
|
+
openupgrade.add_fields(
|
26
|
+
env, [("state", "project.task", "project_task", "selection", False, "project")]
|
27
|
+
)
|
28
|
+
openupgrade.logged_query(
|
29
|
+
env.cr,
|
30
|
+
"""
|
31
|
+
UPDATE project_task
|
32
|
+
SET state = CASE
|
33
|
+
WHEN kanban_state = 'done' THEN CASE
|
34
|
+
WHEN is_closed THEN '1_done'
|
35
|
+
ELSE '03_approved'
|
36
|
+
END
|
37
|
+
WHEN kanban_state = 'blocked' THEN CASE
|
38
|
+
WHEN is_closed THEN '1_canceled'
|
39
|
+
ELSE '02_changes_requested'
|
40
|
+
END
|
41
|
+
ELSE '01_in_progress'
|
42
|
+
END
|
43
|
+
WHERE kanban_state IN ('done', 'blocked', 'normal');
|
44
|
+
""",
|
45
|
+
)
|
46
|
+
# Secnd pass for setting '04_waiting_normal' on tasks with "Blocked By" entries
|
47
|
+
# that qualify
|
48
|
+
openupgrade.logged_query(
|
49
|
+
env.cr,
|
50
|
+
"""
|
51
|
+
UPDATE project_task pt
|
52
|
+
SET state = '04_waiting_normal'
|
53
|
+
FROM task_dependencies_rel rel
|
54
|
+
JOIN project_task dep ON dep.id = rel.depends_on_id
|
55
|
+
WHERE rel.task_id = pt.id AND dep.state NOT IN ('1_done', '1_canceled')
|
56
|
+
""",
|
57
|
+
)
|
58
|
+
|
59
|
+
|
60
|
+
@openupgrade.migrate()
|
61
|
+
def migrate(env, version):
|
62
|
+
_rename_fields(env)
|
63
|
+
_convert_project_task_state(env)
|
@@ -0,0 +1,234 @@
|
|
1
|
+
---Models in module 'project'---
|
2
|
+
new model project.project.stage.delete.wizard [transient]
|
3
|
+
# NOTHING TO DO
|
4
|
+
|
5
|
+
---Fields in module 'project'---
|
6
|
+
project / project.milestone / message_main_attachment_id (many2one): DEL relation: ir.attachment
|
7
|
+
project / project.milestone / rating_ids (one2many) : NEW relation: rating.rating
|
8
|
+
project / project.project / activity_user_id (many2one) : not related anymore
|
9
|
+
project / project.project / activity_user_id (many2one) : now a function
|
10
|
+
# NOTHING TO DO
|
11
|
+
|
12
|
+
project / project.project / alias_enabled (boolean) : DEL
|
13
|
+
project / project.project / allow_recurring_tasks (boolean): DEL
|
14
|
+
project / project.project / allow_subtasks (boolean) : DEL
|
15
|
+
# NOTHING TO DO:
|
16
|
+
|
17
|
+
project / project.project / company_id (many2one) : now a function
|
18
|
+
# NOTHING TO DO: handled by ORM
|
19
|
+
|
20
|
+
project / project.project / currency_id (many2one) : not related anymore
|
21
|
+
project / project.project / currency_id (many2one) : now a function
|
22
|
+
# NOTHING TO DO: compute non-stored
|
23
|
+
|
24
|
+
project / project.project / last_update_status (selection): selection_keys is now '['at_risk', 'done', 'off_track', 'on_hold', 'on_track', 'to_define']' ('['at_risk', 'off_track', 'on_hold', 'on_track', 'to_define']')
|
25
|
+
# NOTHING TO DO: new key: 'done'
|
26
|
+
|
27
|
+
project / project.project / message_main_attachment_id (many2one): DEL relation: ir.attachment
|
28
|
+
# NOTHING TO DO
|
29
|
+
|
30
|
+
project / project.project / partner_email (char) : DEL
|
31
|
+
project / project.project / partner_phone (char) : DEL
|
32
|
+
# NOTHING TO DO
|
33
|
+
|
34
|
+
project / project.project / resource_calendar_id (many2one): not related anymore
|
35
|
+
project / project.project / resource_calendar_id (many2one): now a function
|
36
|
+
# NOTHING TO DO: compute non-stored
|
37
|
+
|
38
|
+
project / project.project.stage / company_id (many2one) : NEW relation: res.company
|
39
|
+
project / project.tags / _order : _order is now 'name' ('id')
|
40
|
+
project / project.task / _order : _order is now 'priority desc, sequence, date_deadline asc, id desc' ('priority desc, sequence, id desc')
|
41
|
+
# NOTHING TO DO
|
42
|
+
|
43
|
+
project / project.task / activity_user_id (many2one) : not related anymore
|
44
|
+
project / project.task / activity_user_id (many2one) : now a function
|
45
|
+
# NOTHING TO DO
|
46
|
+
|
47
|
+
project / project.task / allocated_hours (float) : NEW
|
48
|
+
project / project.task / planned_hours (float) : DEL
|
49
|
+
# DONE: rename planned_hours -> allocated_hours
|
50
|
+
|
51
|
+
project / project.task / ancestor_id (many2one) : DEL relation: project.task
|
52
|
+
project / project.task / date_deadline (date) : type is now 'datetime' ('date')
|
53
|
+
# NOTHING TO DO
|
54
|
+
|
55
|
+
project / project.task / display_in_project (boolean) : NEW
|
56
|
+
project / project.task / display_project_id (many2one) : DEL relation: project.project
|
57
|
+
# DONE: post-migration: set display_in_project to False when there's a parent but no display project
|
58
|
+
|
59
|
+
project / project.task / email_from (char) : DEL
|
60
|
+
project / project.task / fri (boolean) : DEL
|
61
|
+
project / project.task / is_analytic_account_id_changed (boolean): DEL
|
62
|
+
project / project.task / is_blocked (boolean) : DEL
|
63
|
+
project / project.task / message_main_attachment_id (many2one): DEL relation: ir.attachment
|
64
|
+
project / project.task / mon (boolean) : DEL
|
65
|
+
project / project.task / partner_email (char) : DEL
|
66
|
+
project / project.task / partner_phone (char) : DEL
|
67
|
+
# NOTHING TO DO
|
68
|
+
|
69
|
+
project / project.task / recurrence_update (selection) : DEL selection_keys: ['all', 'subsequent', 'this']
|
70
|
+
project / project.task / repeat_day (selection) : DEL selection_keys: ['1', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '2', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '3', '30', '31', '4', '5', '6', '7', '8', '9']
|
71
|
+
project / project.task / repeat_month (selection) : DEL selection_keys: ['april', 'august', 'december', 'february', 'january', 'july', 'june', 'march', 'may', 'november', 'october', 'september']
|
72
|
+
project / project.task / repeat_number (integer) : DEL
|
73
|
+
project / project.task / repeat_on_month (selection) : DEL selection_keys: ['date', 'day']
|
74
|
+
project / project.task / repeat_on_year (selection) : DEL selection_keys: ['date', 'day']
|
75
|
+
project / project.task / repeat_type (selection) : selection_keys is now '['forever', 'until']' ('['after', 'forever', 'until']')
|
76
|
+
project / project.task / repeat_week (selection) : DEL selection_keys: ['first', 'last', 'second', 'third']
|
77
|
+
project / project.task / repeat_weekday (selection) : DEL selection_keys: ['fri', 'mon', 'sat', 'sun', 'thu', 'tue', 'wed']
|
78
|
+
project / project.task / sat (boolean) : DEL
|
79
|
+
# NOTHING TO DO: deleted fields, the recurrence task option has been simplified in odoo 17
|
80
|
+
# There is no longer the ability to select days of the week, there is no longer the ability to select days of the month
|
81
|
+
|
82
|
+
project / project.task / is_closed (boolean) : DEL
|
83
|
+
project / project.task / kanban_state (selection) : DEL required, selection_keys: ['blocked', 'done', 'normal']
|
84
|
+
project / project.task / state (selection) : NEW required, selection_keys: ['01_in_progress', '02_changes_requested', '03_approved', '04_waiting_normal', '1_canceled', '1_done'], isfunction: function, stored
|
85
|
+
# DONE: pre-migration: add the field and convert data from kanban_state, is_closed to state. Done in pre for avoiding the ORM computation.
|
86
|
+
|
87
|
+
project / project.task / sun (boolean) : DEL
|
88
|
+
project / project.task / thu (boolean) : DEL
|
89
|
+
project / project.task / tue (boolean) : DEL
|
90
|
+
project / project.task / wed (boolean) : DEL
|
91
|
+
# NOTHING TO DO
|
92
|
+
|
93
|
+
project / project.task.recurrence / fri (boolean) : DEL
|
94
|
+
project / project.task.recurrence / mon (boolean) : DEL
|
95
|
+
project / project.task.recurrence / next_recurrence_date (date) : DEL
|
96
|
+
project / project.task.recurrence / recurrence_left (integer) : DEL
|
97
|
+
project / project.task.recurrence / repeat_day (selection) : DEL selection_keys: ['1', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '2', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '3', '30', '31', '4', '5', '6', '7', '8', '9']
|
98
|
+
project / project.task.recurrence / repeat_month (selection) : DEL selection_keys: ['april', 'august', 'december', 'february', 'january', 'july', 'june', 'march', 'may', 'november', 'october', 'september']
|
99
|
+
project / project.task.recurrence / repeat_on_month (selection) : DEL selection_keys: ['date', 'day']
|
100
|
+
project / project.task.recurrence / repeat_on_year (selection) : DEL selection_keys: ['date', 'day']
|
101
|
+
project / project.task.recurrence / repeat_week (selection) : DEL selection_keys: ['first', 'last', 'second', 'third']
|
102
|
+
project / project.task.recurrence / repeat_weekday (selection) : DEL selection_keys: ['fri', 'mon', 'sat', 'sun', 'thu', 'tue', 'wed']
|
103
|
+
project / project.task.recurrence / sat (boolean) : DEL
|
104
|
+
project / project.task.recurrence / sun (boolean) : DEL
|
105
|
+
project / project.task.recurrence / thu (boolean) : DEL
|
106
|
+
project / project.task.recurrence / tue (boolean) : DEL
|
107
|
+
project / project.task.recurrence / wed (boolean) : DEL
|
108
|
+
# NOTHING TO DO: The recurrence task option has been simplified in odoo 17:
|
109
|
+
# There is no longer the ability to select days of the week, there is no longer the ability to select days of the month.
|
110
|
+
# If we want to restore the old behavior, an OCA module should be done
|
111
|
+
|
112
|
+
project / project.task.recurrence / repeat_type (selection) : selection_keys is now '['forever', 'until']' ('['after', 'forever', 'until']')
|
113
|
+
project / project.task.recurrence / repeat_number (integer) : DEL
|
114
|
+
# DONE: post-migration: replace setting 'after' by 'until' in combination with "repeat_until" extracting the information from date_deadline, repeat_number, repeat_interval, repeat_unit and the rest of the involved fields
|
115
|
+
|
116
|
+
project / project.task.type / auto_validation_kanban_state (boolean): DEL
|
117
|
+
project / project.task.type / auto_validation_state (boolean): NEW hasdefault: default
|
118
|
+
# DONE pre-migration: rename field
|
119
|
+
|
120
|
+
project / project.task.type / legend_blocked (char) : DEL required
|
121
|
+
project / project.task.type / legend_done (char) : DEL required
|
122
|
+
project / project.task.type / legend_normal (char) : DEL required
|
123
|
+
project / project.task.type / user_id (many2one) : now a function
|
124
|
+
# NOTHING TO DO
|
125
|
+
|
126
|
+
project / project.update / _order : _order is now 'id desc' ('date desc')
|
127
|
+
project / project.update / activity_user_id (many2one) : not related anymore
|
128
|
+
project / project.update / activity_user_id (many2one) : now a function
|
129
|
+
# NOTHING TO DO
|
130
|
+
|
131
|
+
project / project.update / closed_task_count (integer) : NEW
|
132
|
+
project / project.update / task_count (integer) : NEW
|
133
|
+
# DONE: post-migration: Infer under a heuristics these fields for historical data
|
134
|
+
|
135
|
+
project / project.update / message_main_attachment_id (many2one): DEL relation: ir.attachment
|
136
|
+
project / project.update / rating_ids (one2many) : NEW relation: rating.rating
|
137
|
+
project / project.update / status (selection) : selection_keys is now '['at_risk', 'done', 'off_track', 'on_hold', 'on_track']' ('['at_risk', 'off_track', 'on_hold', 'on_track']')
|
138
|
+
project / res.company / analytic_plan_id (many2one) : DEL relation: account.analytic.plan
|
139
|
+
project / res.partner / project_ids (one2many) : NEW relation: project.project
|
140
|
+
# NOTHING TO DO
|
141
|
+
|
142
|
+
---XML records in module 'project'---
|
143
|
+
NEW ir.actions.act_window: project.action_view_my_task
|
144
|
+
NEW ir.actions.act_window: project.mail_activity_plan_action_config_project_task_plan
|
145
|
+
NEW ir.actions.act_window: project.mail_activity_plan_action_config_task_plan
|
146
|
+
NEW ir.actions.act_window.view: project.mail_activity_plan_action_project_task_view_form
|
147
|
+
NEW ir.actions.act_window.view: project.mail_activity_plan_action_project_task_view_tree
|
148
|
+
NEW ir.actions.act_window.view: project.open_view_my_task_list_calendar
|
149
|
+
NEW ir.actions.act_window.view: project.open_view_my_task_list_kanban
|
150
|
+
NEW ir.actions.act_window.view: project.open_view_my_task_list_tree
|
151
|
+
NEW ir.actions.act_window.view: project.open_view_project_all_group_stage_kanban_view
|
152
|
+
NEW ir.actions.act_window.view: project.open_view_project_all_group_stage_tree_view
|
153
|
+
NEW ir.actions.server: project.action_server_convert_to_subtask
|
154
|
+
NEW ir.actions.server: project.action_server_view_my_task
|
155
|
+
NEW ir.actions.server: project.unlink_project_stage_action
|
156
|
+
# NOTHING TO DO
|
157
|
+
|
158
|
+
DEL ir.cron: project.ir_cron_recurring_tasks (noupdate)
|
159
|
+
# DONE: delete in post-migration
|
160
|
+
|
161
|
+
NEW ir.model.access: project.access_mail_activity_plan_project_manager
|
162
|
+
NEW ir.model.access: project.access_mail_activity_plan_template_project_manager
|
163
|
+
NEW ir.model.access: project.access_project_project_stage_delete_wizard
|
164
|
+
NEW ir.model.constraint: project.constraint_project_task_private_task_has_no_parent
|
165
|
+
NEW ir.model.constraint: project.constraint_project_task_recurring_task_has_no_parent
|
166
|
+
NEW ir.rule: project.mail_plan_rule_group_project_manager_task (noupdate)
|
167
|
+
NEW ir.rule: project.mail_plan_templates_rule_group_project_manager_task (noupdate)
|
168
|
+
NEW ir.rule: project.project_project_stage_rule (noupdate)
|
169
|
+
# NOTHING TO DO: new feature
|
170
|
+
|
171
|
+
NEW ir.ui.menu: project.mail_activity_plan_menu_config_project
|
172
|
+
NEW ir.ui.menu: project.menu_project_management_all_tasks
|
173
|
+
NEW ir.ui.menu: project.menu_project_management_my_tasks
|
174
|
+
DEL ir.ui.menu: project.menu_tasks_config
|
175
|
+
# NOTHING TO DO: new feature
|
176
|
+
|
177
|
+
NEW ir.ui.view: project.mail_activity_plan_view_form_project_and_task
|
178
|
+
NEW ir.ui.view: project.open_view_all_tasks_list_view
|
179
|
+
NEW ir.ui.view: project.open_view_my_tasks_list_view
|
180
|
+
NEW ir.ui.view: project.portal_my_task_allocated_hours_template
|
181
|
+
NEW ir.ui.view: project.project_kanban_view_group_stage
|
182
|
+
NEW ir.ui.view: project.project_list_view_group_stage
|
183
|
+
NEW ir.ui.view: project.project_project_view_activity
|
184
|
+
NEW ir.ui.view: project.project_share_wizard_confirm_form
|
185
|
+
NEW ir.ui.view: project.project_task_convert_to_subtask_view_form
|
186
|
+
NEW ir.ui.view: project.project_task_view_tree_base
|
187
|
+
NEW ir.ui.view: project.project_task_view_tree_main_base
|
188
|
+
NEW ir.ui.view: project.quick_create_project_form
|
189
|
+
NEW ir.ui.view: project.quick_create_task_form_inherit_view_default_project
|
190
|
+
NEW ir.ui.view: project.task_link_preview_front_end
|
191
|
+
NEW ir.ui.view: project.task_link_preview_portal_layout
|
192
|
+
NEW ir.ui.view: project.view_project_config
|
193
|
+
NEW ir.ui.view: project.view_project_config_group_stage
|
194
|
+
NEW ir.ui.view: project.view_project_config_kanban_group_stage
|
195
|
+
NEW ir.ui.view: project.view_project_project_stage_delete_wizard
|
196
|
+
NEW ir.ui.view: project.view_project_project_stage_unarchive_wizard
|
197
|
+
NEW ir.ui.view: project.view_task_kanban_inherit_all_task
|
198
|
+
NEW ir.ui.view: project.view_task_kanban_inherit_view_default_project
|
199
|
+
NEW ir.ui.view: project.view_task_search_form_base
|
200
|
+
NEW ir.ui.view: project.view_task_search_form_project_base
|
201
|
+
NEW ir.ui.view: project.view_task_search_form_project_fsm_base
|
202
|
+
# NOTHING TO DO
|
203
|
+
|
204
|
+
DEL ir.ui.view: project.portal_my_task_planned_hours_template
|
205
|
+
DEL ir.ui.view: project.project_task_view_tree_activity
|
206
|
+
DEL ir.ui.view: project.report_project_task_user_view_tree
|
207
|
+
DEL ir.ui.view: project.view_task_search_form_extended
|
208
|
+
# NOTHING TO DO
|
209
|
+
|
210
|
+
NEW mail.message.subtype: project.mt_project_task_approved (noupdate)
|
211
|
+
NEW mail.message.subtype: project.mt_project_task_canceled (noupdate)
|
212
|
+
NEW mail.message.subtype: project.mt_project_task_changes_requested (noupdate)
|
213
|
+
NEW mail.message.subtype: project.mt_project_task_done (noupdate)
|
214
|
+
NEW mail.message.subtype: project.mt_project_task_in_progress (noupdate)
|
215
|
+
NEW mail.message.subtype: project.mt_project_task_waiting (noupdate)
|
216
|
+
NEW mail.message.subtype: project.mt_task_approved (noupdate)
|
217
|
+
NEW mail.message.subtype: project.mt_task_canceled (noupdate)
|
218
|
+
NEW mail.message.subtype: project.mt_task_changes_requested (noupdate)
|
219
|
+
NEW mail.message.subtype: project.mt_task_done (noupdate)
|
220
|
+
NEW mail.message.subtype: project.mt_task_in_progress (noupdate)
|
221
|
+
NEW mail.message.subtype: project.mt_task_waiting (noupdate)
|
222
|
+
# NOTHING TO DO
|
223
|
+
|
224
|
+
DEL mail.message.subtype: project.mt_project_task_blocked (noupdate)
|
225
|
+
DEL mail.message.subtype: project.mt_project_task_dependency_change (noupdate)
|
226
|
+
DEL mail.message.subtype: project.mt_project_task_ready (noupdate)
|
227
|
+
DEL mail.message.subtype: project.mt_task_blocked (noupdate)
|
228
|
+
DEL mail.message.subtype: project.mt_task_dependency_change (noupdate)
|
229
|
+
DEL mail.message.subtype: project.mt_task_progress (noupdate)
|
230
|
+
DEL mail.message.subtype: project.mt_task_ready (noupdate)
|
231
|
+
# DONE: safely delete in post-migration
|
232
|
+
|
233
|
+
DEL res.groups: project.group_subtask_project
|
234
|
+
# NOTHING TO DO
|
@@ -104,10 +104,10 @@ odoo/addons/openupgrade_scripts/scripts/crm_sms/17.0.1.1/upgrade_analysis.txt,sh
|
|
104
104
|
odoo/addons/openupgrade_scripts/scripts/crm_sms/17.0.1.1/upgrade_analysis_work.txt,sha256=Ow5a5Lyg4qXbb4MbklCub9zPTRfS9pFb709QbrlLE6M,185
|
105
105
|
odoo/addons/openupgrade_scripts/scripts/data_recycle/17.0.1.3/upgrade_analysis.txt,sha256=wdeiKYCMj5MW7YVu94llE2nXsKYPHFjeGN3v3aw2X0U,159
|
106
106
|
odoo/addons/openupgrade_scripts/scripts/delivery/17.0.1.0/noupdate_changes.xml,sha256=W0ixm3_Pz3eJrW2ovtdLU_ZCP_g1GKh_TDCVcrmNhJU,524
|
107
|
-
odoo/addons/openupgrade_scripts/scripts/delivery/17.0.1.0/post-migration.py,sha256=
|
108
|
-
odoo/addons/openupgrade_scripts/scripts/delivery/17.0.1.0/pre-migration.py,sha256=
|
107
|
+
odoo/addons/openupgrade_scripts/scripts/delivery/17.0.1.0/post-migration.py,sha256=lrCIVskgcuEInTADp0LAP5pZ9Sr4yvjnrcycU5YftWA,481
|
108
|
+
odoo/addons/openupgrade_scripts/scripts/delivery/17.0.1.0/pre-migration.py,sha256=T2HEmxQMIrnQmJZyfxyUNAX_dmRtqEHOioc7khU3s8Q,6758
|
109
109
|
odoo/addons/openupgrade_scripts/scripts/delivery/17.0.1.0/upgrade_analysis.txt,sha256=5gPxAQ-98Kx6IWI-CqxuyhbRFlzhBjGq5WEzZGOgBf0,6585
|
110
|
-
odoo/addons/openupgrade_scripts/scripts/delivery/17.0.1.0/upgrade_analysis_work.txt,sha256=
|
110
|
+
odoo/addons/openupgrade_scripts/scripts/delivery/17.0.1.0/upgrade_analysis_work.txt,sha256=_9mmINZMxzVEKsBQ6h4OKeRHPPug1qHkGoZ8AaUwCdo,7058
|
111
111
|
odoo/addons/openupgrade_scripts/scripts/delivery_mondialrelay/17.0.0.1/upgrade_analysis.txt,sha256=b8I5lcmNozL7-QxXWat4eRogSuXBKJ2yoDt_hOP1Kqk,186
|
112
112
|
odoo/addons/openupgrade_scripts/scripts/delivery_stock_picking_batch/17.0.1.0/upgrade_analysis.txt,sha256=0-syDUbB9TRxr5bObpQpVaNLL2hJVGF1-JgnNuEoBqA,207
|
113
113
|
odoo/addons/openupgrade_scripts/scripts/digest/17.0.1.1/noupdate_changes.xml,sha256=xwMvzujXqHa9nTQZGs9Wk6zB0UZaWFpWqtS1u6ccaOU,19965
|
@@ -526,7 +526,10 @@ odoo/addons/openupgrade_scripts/scripts/product_expiry/17.0.1.0/upgrade_analysis
|
|
526
526
|
odoo/addons/openupgrade_scripts/scripts/product_images/17.0.1.0/upgrade_analysis.txt,sha256=ZFdJzO3tOMvoa1XV86Kzqw5uqUSHhXmQjlN8ebFkbS8,165
|
527
527
|
odoo/addons/openupgrade_scripts/scripts/product_margin/17.0.1.0/upgrade_analysis.txt,sha256=4ttHOXP24HQX80aD5j6gIjzZBzhAD599KgvOxkR9wmM,165
|
528
528
|
odoo/addons/openupgrade_scripts/scripts/project/17.0.1.3/noupdate_changes.xml,sha256=kuc_hH18-FzRvDUBYZ-PZak_1MlhVqZOA0YY1mXNah8,6665
|
529
|
+
odoo/addons/openupgrade_scripts/scripts/project/17.0.1.3/post-migration.py,sha256=vWjpZaubAmwbOt3xgh2AalljmLYnLOZAOtc1m7p6-cg,7316
|
530
|
+
odoo/addons/openupgrade_scripts/scripts/project/17.0.1.3/pre-migration.py,sha256=8YxrddTLOUK3pk04Gn04wl5vjaLTW7RwLnCmTDTrY1g,1906
|
529
531
|
odoo/addons/openupgrade_scripts/scripts/project/17.0.1.3/upgrade_analysis.txt,sha256=IplxnUO7IaWhFqn-cdKH6WrsihyAqOHQh8_jmdeWycQ,14096
|
532
|
+
odoo/addons/openupgrade_scripts/scripts/project/17.0.1.3/upgrade_analysis_work.txt,sha256=ubbJKApiM_7UL_Xlv7j8uiBLC9ggsfpey4FVt1o9EI4,15791
|
530
533
|
odoo/addons/openupgrade_scripts/scripts/project_account/17.0.1.0/upgrade_analysis.txt,sha256=lx-fG9hTBhBenpcIyDgWbGbyeiOgNnI8zaDZQYaog0Y,651
|
531
534
|
odoo/addons/openupgrade_scripts/scripts/project_hr_expense/17.0.1.0/upgrade_analysis.txt,sha256=yACyVRcjb1HQpDunih7oLjN_mOPWDyMhm6JOgYUhNmM,177
|
532
535
|
odoo/addons/openupgrade_scripts/scripts/project_mrp/17.0.1.0/upgrade_analysis.txt,sha256=-MQoSXEnRnNoFaQbQ3KinscFFDASuoP70EbSph6GiyQ,156
|
@@ -728,7 +731,7 @@ odoo/addons/openupgrade_scripts/scripts/website_twitter/17.0.1.0/upgrade_analysi
|
|
728
731
|
odoo/addons/openupgrade_scripts/static/description/banner.png,sha256=KTIBu4gfxeZVw9zjs_fivTgFEOeaAorlBxajmCA1p6k,26859
|
729
732
|
odoo/addons/openupgrade_scripts/static/description/icon.png,sha256=6xBPJauaFOF0KDHfHgQopSc28kKvxMaeoQFQWZtfZDo,9455
|
730
733
|
odoo/addons/openupgrade_scripts/static/description/index.html,sha256=iV41-zYBM4uvZPuunpcr7bQeRgBaojVsKo_gkeyJyA4,12639
|
731
|
-
odoo_addon_openupgrade_scripts-17.0.1.0.1.
|
732
|
-
odoo_addon_openupgrade_scripts-17.0.1.0.1.
|
733
|
-
odoo_addon_openupgrade_scripts-17.0.1.0.1.
|
734
|
-
odoo_addon_openupgrade_scripts-17.0.1.0.1.
|
734
|
+
odoo_addon_openupgrade_scripts-17.0.1.0.1.297.dist-info/METADATA,sha256=J6EJX16Xejjf1CBAkh3HdEsf0CL8D2YNC2zV8B3VT1k,3786
|
735
|
+
odoo_addon_openupgrade_scripts-17.0.1.0.1.297.dist-info/WHEEL,sha256=9fEMia4zL7ZuZbnCOrcYogUhmn4XFIVaJ8G4YGI31xc,81
|
736
|
+
odoo_addon_openupgrade_scripts-17.0.1.0.1.297.dist-info/top_level.txt,sha256=QE6RBQ0QX5f4eFuUcGgU5Kbq1A_qJcDs-e_vpr6pmfU,4
|
737
|
+
odoo_addon_openupgrade_scripts-17.0.1.0.1.297.dist-info/RECORD,,
|
File without changes
|