Skip to content

Commit 70446a0

Browse files
[MIG] stock_dropshipping
1 parent 526369b commit 70446a0

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: create new records with dropshipping_functions
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+
sequence = env.ref('stock_dropshipping.seq_picking_type_dropship', False)
8+
picking_type = env.ref('stock_dropshipping.picking_type_dropship', False)
9+
stock_rule = env.ref('stock_dropshipping.stock_rule_drop_shipping', False)
10+
if sequence and sequence.exists():
11+
if not picking_type or not picking_type.exists():
12+
picking_type = env['stock.picking.type'].search(
13+
[('sequence_id', '=', sequence.id)], limit=1)
14+
if not picking_type:
15+
sequence.company_id = False
16+
else:
17+
company = picking_type.company_id
18+
sequence.update({
19+
'name': 'Dropship (%s)' % company.name,
20+
'code': 'stock.dropshipping',
21+
'company_id': company.id,
22+
'prefix': 'DS/',
23+
})
24+
if picking_type and picking_type.exists():
25+
picking_type.update({
26+
'sequence_code': 'DS',
27+
})
28+
if stock_rule and stock_rule.exists():
29+
supplier_location = env.ref('stock.stock_location_suppliers', False)
30+
customer_location = env.ref('stock.stock_location_customers', False)
31+
if supplier_location and customer_location:
32+
stock_rule.update({
33+
'name': '%s → %s' % (supplier_location.name, customer_location.name),
34+
})
35+
36+
# force execute this functions (they are noupdate=1 in xml data)
37+
env['res.company'].create_missing_dropship_sequence()
38+
env['res.company'].create_missing_dropship_picking_type()
39+
env['res.company'].create_missing_dropship_rule()
40+
41+
env["ir.model.data"].search([
42+
("module", "=", "stock_dropshipping"),
43+
("name", "in", ["seq_picking_type_dropship",
44+
"picking_type_dropship", "stock_rule_drop_shipping"]),
45+
]).unlink()
46+
47+
# now, we redirect referenced records to new records if needed company-wise
48+
49+
# xml_id = stock_dropshipping.seq_picking_type_dropship
50+
model = "ir.sequence"
51+
conditions = {
52+
'seq_picking_type_dropship': "WHERE xml_tab2.code = 'stock.dropshipping'",
53+
}
54+
affected_models = {
55+
'stock.picking.type': ['sequence_id'],
56+
}
57+
redirect_affected_models(env, model, affected_models, conditions)
58+
59+
# xml_id = stock_dropshipping.picking_type_dropship
60+
model = "stock.picking.type"
61+
conditions = {
62+
'picking_type_dropship': "WHERE xml_tab2.sequence_code = 'DS'",
63+
}
64+
affected_models = {
65+
'stock.picking.type': ['return_picking_type_id'],
66+
'stock.picking': ['picking_type_id'],
67+
'stock.rule': ['picking_type_id'],
68+
'stock.warehouse': ['pick_type_id', 'pack_type_id',
69+
'out_type_id', 'in_type_id', 'int_type_id'],
70+
}
71+
redirect_affected_models(env, model, affected_models, conditions)
72+
73+
# xml_id = stock_dropshipping.stock_rule_drop_shipping
74+
model = "stock.rule"
75+
conditions = {
76+
'stock_rule_drop_shipping': "JOIN stock_picking_type spt ON xml_tab2.picking_type_id = spt.id "
77+
"WHERE spt.sequence_code = 'DS'",
78+
}
79+
affected_models = {
80+
'stock.move': ['rule_id'],
81+
'stock.warehouse': ['mto_pull_id'],
82+
}
83+
redirect_affected_models(env, model, affected_models, conditions)
84+
85+
86+
def redirect_affected_models(env, xmlid_model, affected_models, conditions):
87+
xmlid_table = env[xmlid_model]._table
88+
for model, fields in affected_models.items():
89+
table = env[model]._table
90+
for field in fields:
91+
for xmlid_name, condition in conditions.items():
92+
openupgrade.logged_query(
93+
env.cr, """
94+
UPDATE {table} tab
95+
SET {field} = (
96+
SELECT xml_tab2.id
97+
FROM {xmlid_table} xml_tab2
98+
LEFT JOIN ir_model_data imd2 ON (
99+
imd2.module = 'stock_dropshipping' AND
100+
imd2.model = '{xmlid_model}' AND imd2.res_id = xml_tab2.id)
101+
LEFT JOIN res_users ru2 ON ru2.id = xml_tab2.create_uid
102+
{condition}
103+
AND imd2.name IS NULL AND
104+
COALESCE(xml_tab2.company_id, ru2.company_id) =
105+
COALESCE(tab.company_id, ru.company_id)
106+
LIMIT 1
107+
)
108+
FROM {xmlid_table} xml_tab
109+
JOIN ir_model_data imd ON (imd.module = 'stock_dropshipping' AND
110+
imd.model = '{xmlid_model}' AND imd.res_id = xml_tab.id)
111+
LEFT JOIN res_users ru ON xml_tab.create_uid = ru.id
112+
WHERE tab.{field} = xml_tab.id AND
113+
imd.name = '{xmlid_name}' AND xml_tab.company_id != tab.company_id
114+
""".format(
115+
table=table, field=field,
116+
xmlid_table=xmlid_table, xmlid_model=xmlid_model,
117+
xmlid_name=xmlid_name, condition=condition,
118+
))
119+
120+
121+
@openupgrade.migrate()
122+
def migrate(env, version):
123+
run_dropshipping_functions(env)

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)