Skip to content

Commit 1c08288

Browse files
[MIG] stock_dropshipping
1 parent 5801882 commit 1c08288

File tree

4 files changed

+134
-3
lines changed

4 files changed

+134
-3
lines changed

addons/stock/migrations/13.0.1.1/post-migration.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -210,8 +210,9 @@ def fill_stock_picking_type_sequence_code(env):
210210
openupgrade.logged_query(
211211
env.cr, """
212212
UPDATE stock_picking_type
213-
SET sequence_code = CASE WHEN code = 'incoming' THEN 'IN'
214-
WHEN code = 'outgoing' THEN 'OUT'
213+
SET sequence_code = CASE WHEN code = 'outgoing' THEN 'OUT'
214+
WHEN code = 'incoming' AND name LIKE '%Dropship%' THEN 'DS'
215+
WHEN code = 'incoming' AND name NOT LIKE '%Dropship%' THEN 'IN'
215216
WHEN code = 'internal' AND barcode like '%-PACK' THEN 'PACK'
216217
WHEN code = 'internal' AND barcode like '%-PICK' THEN 'PICK'
217218
WHEN code = 'internal' AND barcode like '%-INTERNAL' THEN 'INT'
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---Models in module 'stock_dropshipping'---
2+
---Fields in module 'stock_dropshipping'---
3+
---XML records in module 'stock_dropshipping'---
4+
DEL ir.sequence: stock_dropshipping.seq_picking_type_dropship (noupdate)
5+
DEL stock.picking.type: stock_dropshipping.picking_type_dropship (noupdate)
6+
DEL stock.rule: stock_dropshipping.stock_rule_drop_shipping (noupdate)
7+
# DONE: post-migration: try to delete xmlid and create missing records
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
# Copyright 2020 ForgeFlow <http://www.forgeflow.com>
2+
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
3+
from openupgradelib import openupgrade
4+
5+
6+
def run_dropshipping_functions(env):
7+
# we nullify the company of the dropship sequence, picking_type, and rule
8+
openupgrade.logged_query(
9+
env.cr, """
10+
UPDATE ir_sequence seq
11+
SET company_id = NULL
12+
FROM ir_model_data imd
13+
WHERE imd.res_id = seq.id AND imd.module = 'stock_dropshipping'
14+
AND imd.name = 'seq_picking_type_dropship'"""
15+
)
16+
openupgrade.logged_query(
17+
env.cr, """
18+
UPDATE stock_picking_type spt
19+
SET company_id = NULL
20+
FROM ir_model_data imd
21+
WHERE imd.res_id = spt.id AND imd.module = 'stock_dropshipping'
22+
AND imd.name = 'picking_type_dropship'"""
23+
)
24+
openupgrade.logged_query(
25+
env.cr, """
26+
UPDATE stock_rule sr
27+
SET company_id = NULL
28+
FROM ir_model_data imd
29+
WHERE imd.res_id = sr.id AND imd.module = 'stock_dropshipping'
30+
AND imd.name = 'stock_rule_drop_shipping'"""
31+
)
32+
33+
# force execute this functions (they are noupdate=1 in xml data)
34+
env['res.company'].create_missing_dropship_sequence()
35+
env['res.company'].create_missing_dropship_picking_type()
36+
env['res.company'].create_missing_dropship_rule()
37+
38+
# xml_id = stock_dropshipping.seq_picking_type_dropship
39+
model = "ir.sequence"
40+
conditions = {
41+
'seq_picking_type_dropship': "WHERE xml_tab2.code = 'stock.dropshipping'",
42+
}
43+
affected_models = {
44+
'stock.picking.type': ['sequence_id'],
45+
}
46+
redirect_affected_models(env, model, affected_models, conditions)
47+
48+
# xml_id = stock_dropshipping.picking_type_dropship
49+
model = "stock.picking.type"
50+
conditions = {
51+
'picking_type_dropship': "WHERE xml_tab2.sequence_code = 'DS'",
52+
}
53+
affected_models = {
54+
'stock.picking.type': ['return_picking_type_id'],
55+
'stock.picking': ['picking_type_id'],
56+
'stock.rule': ['picking_type_id'],
57+
'stock.warehouse': ['pick_type_id', 'pack_type_id',
58+
'out_type_id', 'in_type_id', 'int_type_id'],
59+
}
60+
redirect_affected_models(env, model, affected_models, conditions)
61+
62+
# xml_id = stock_dropshipping.stock_rule_drop_shipping
63+
model = "stock.rule"
64+
conditions = {
65+
'stock_rule_drop_shipping': "JOIN stock_picking_type spt ON xml_tab2.picking_type_id = spt.id "
66+
"WHERE spt.sequence_code = 'DS'",
67+
}
68+
affected_models = {
69+
'stock.move': ['rule_id'],
70+
'stock.warehouse': ['mto_pull_id'],
71+
}
72+
redirect_affected_models(env, model, affected_models, conditions)
73+
74+
75+
def redirect_affected_models(env, xmlid_model, affected_models, conditions):
76+
xmlid_table = env[xmlid_model]._table
77+
for model, fields in affected_models.items():
78+
table = env[model]._table
79+
for field in fields:
80+
for xmlid_name, condition in conditions.items():
81+
openupgrade.logged_query(
82+
env.cr, """
83+
UPDATE {table} tab
84+
SET {field} = (
85+
SELECT xml_tab2.id
86+
FROM {xmlid_table} xml_tab2
87+
LEFT JOIN ir_model_data imd2 ON (
88+
imd2.module = 'stock_dropshipping' AND
89+
imd2.model = '{xmlid_model}' AND imd2.res_id = xml_tab2.id)
90+
LEFT JOIN res_users ru2 ON ru2.id = xml_tab2.create_uid
91+
{condition}
92+
AND imd2.name IS NULL AND
93+
COALESCE(xml_tab2.company_id, ru2.company_id) =
94+
COALESCE(tab.company_id, ru.company_id)
95+
LIMIT 1
96+
)
97+
FROM {xmlid_table} xml_tab
98+
JOIN ir_model_data imd ON (imd.module = 'stock_dropshipping' AND
99+
imd.model = 'xmlid_model' AND imd.res_id = xml_tab.id)
100+
LEFT JOIN res_users ru ON xml_tab.create_uid = ru.id
101+
WHERE tab.{field} = xml_tab.id AND
102+
imd.name = '{xmlid_name}'
103+
""".format(table=table, field=field,
104+
xmlid_table=xmlid_table, xmlid_model=xmlid_model,
105+
xmlid_name=xmlid_name, condition=condition)
106+
)
107+
108+
109+
@openupgrade.migrate()
110+
def migrate(env, version):
111+
run_dropshipping_functions(env)
112+
# openupgrade.delete_records_safely_by_xml_id(
113+
# env, [
114+
# "stock_dropshipping.stock_rule_drop_shipping",
115+
# "stock_dropshipping.picking_type_dropship",
116+
# "stock_dropshipping.seq_picking_type_dropship",
117+
# ]
118+
# )
119+
env["ir.model.data"].search([
120+
("module", "=", "stock_dropshipping"),
121+
("name", "IN", ("seq_picking_type_dropship",
122+
"picking_type_dropship", "stock_rule_drop_shipping")),
123+
]).unlink()

odoo/openupgrade/doc/source/modules120-130.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -599,7 +599,7 @@ missing in the new release are marked with |del|.
599599
+----------------------------------------------+-------------------------------------------------+
600600
|stock_account | |
601601
+----------------------------------------------+-------------------------------------------------+
602-
|stock_dropshipping | |
602+
|stock_dropshipping | Done |
603603
+----------------------------------------------+-------------------------------------------------+
604604
|stock_landed_costs | |
605605
+----------------------------------------------+-------------------------------------------------+

0 commit comments

Comments
 (0)