Skip to content

Commit 32074a5

Browse files
authored
Merge pull request OCA#1722 from Tecnativa/17.0-ou_fix-mass_mailing_custom_unsubscribe
[17.0][OU-FIX] mass_mailing_custom_unsubscribe: Proper SQL
2 parents ebe4404 + 11c889c commit 32074a5

File tree

1 file changed

+22
-47
lines changed

1 file changed

+22
-47
lines changed

mass_mailing_custom_unsubscribe/migrations/17.0.1.0.0/post-migration.py

Lines changed: 22 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -21,36 +21,6 @@ def migrate(env, version):
2121
openupgrade.logged_query(
2222
env.cr,
2323
"""
24-
WITH latest_records AS (
25-
SELECT
26-
mu.id,
27-
CAST(SPLIT_PART(mu.unsubscriber_id, ',', 2) AS INTEGER) AS contact_id,
28-
COALESCE(mu.mass_mailing_id, rel.mailing_list_id) AS list_id,
29-
mu.action,
30-
mu.reason_id,
31-
mu.create_uid,
32-
mu.write_uid,
33-
mu.date,
34-
mu.create_date,
35-
mu.write_date,
36-
mu.metadata,
37-
-- Window function to rank records for each contact-list pair
38-
ROW_NUMBER() OVER (
39-
PARTITION BY
40-
CAST(SPLIT_PART(mu.unsubscriber_id, ',', 2) AS INTEGER),
41-
COALESCE(mu.mass_mailing_id, rel.mailing_list_id)
42-
ORDER BY mu.id DESC
43-
) AS rn
44-
FROM
45-
mail_unsubscription mu
46-
LEFT JOIN
47-
mail_unsubscription_mailing_list_rel rel ON mu.id = rel.mail_unsubscription_id
48-
WHERE
49-
mu.unsubscriber_id LIKE 'mailing.contact,%'
50-
AND SPLIT_PART(mu.unsubscriber_id, ',', 2) ~ '^[0-9]+$'
51-
AND (mu.mass_mailing_id IS NOT NULL OR rel.mailing_list_id IS NOT NULL)
52-
AND mu.action IN ('subscription', 'unsubscription')
53-
)
5424
INSERT INTO mailing_subscription (
5525
contact_id,
5626
list_id,
@@ -64,27 +34,32 @@ def migrate(env, version):
6434
metadata
6535
)
6636
SELECT
67-
contact_id,
68-
list_id,
69-
reason_id AS opt_out_reason_id,
70-
create_uid,
71-
write_uid,
37+
CAST(SPLIT_PART(mu.unsubscriber_id, ',', 2) AS INTEGER),
38+
rel.mailing_list_id,
39+
mu.reason_id,
40+
mu.create_uid,
41+
mu.write_uid,
7242
CASE
73-
WHEN action = 'unsubscription' THEN TRUE
74-
WHEN action = 'subscription' THEN FALSE
75-
END AS opt_out,
43+
WHEN mu.action = 'unsubscription' THEN TRUE
44+
WHEN mu.action = 'subscription' THEN FALSE
45+
END,
7646
CASE
77-
WHEN action = 'unsubscription' THEN date
47+
WHEN mu.action = 'unsubscription' THEN date
7848
ELSE NULL
79-
END AS opt_out_datetime,
80-
create_date,
81-
write_date,
82-
metadata
83-
FROM
84-
latest_records
49+
END,
50+
mu.create_date,
51+
mu.write_date,
52+
mu.metadata
53+
FROM mail_unsubscription mu
54+
JOIN mail_unsubscription_mailing_list_rel rel
55+
ON mu.id = rel.mail_unsubscription_id
8556
WHERE
86-
rn = 1; -- Only take the most recent record for each contact-list pair
87-
""", # noqa: E501
57+
mu.unsubscriber_id LIKE 'mailing.contact,%'
58+
AND SPLIT_PART(mu.unsubscriber_id, ',', 2) ~ '^[0-9]+$'
59+
AND mu.action IN ('subscription', 'unsubscription')
60+
ORDER BY mu.create_date desc
61+
ON CONFLICT DO NOTHING
62+
""",
8863
)
8964
# Blacklist metadata
9065
openupgrade.logged_query(

0 commit comments

Comments
 (0)