-
-
Notifications
You must be signed in to change notification settings - Fork 716
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Showing
3 changed files
with
392 additions
and
0 deletions.
There are no files selected for viewing
15 changes: 15 additions & 0 deletions
15
openupgrade_scripts/scripts/sale_loyalty/16.0.1.0/post-migration.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
# Copyright 2023 Tecnativa - Pilar Vargas | ||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). | ||
from openupgradelib import openupgrade | ||
|
||
_deleted_xml_records = [ | ||
"sale_loyalty.sale_coupon_apply_code_rule", | ||
] | ||
|
||
|
||
@openupgrade.migrate() | ||
def migrate(env, version): | ||
openupgrade.delete_records_safely_by_xml_id( | ||
env, | ||
_deleted_xml_records, | ||
) |
241 changes: 241 additions & 0 deletions
241
openupgrade_scripts/scripts/sale_loyalty/16.0.1.0/pre-migration.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,241 @@ | ||
# Copyright 2023 Tecnativa - Pilar Vargas | ||
|
||
from openupgradelib import openupgrade | ||
|
||
import random | ||
|
||
_xmlids_renames = [ | ||
( | ||
"sale_loyalty.sale_coupon_apply_code_action", | ||
"sale_loyalty.sale_loyalty_coupon_wizard_action", | ||
), | ||
( | ||
"sale_loyalty.menu_coupon_type_config", | ||
"sale_loyalty.menu_discount_loyalty_type_config", | ||
), | ||
( | ||
"sale_loyalty.menu_promotion_type_config", | ||
"sale_loyalty.menu_gift_ewallet_type_config", | ||
), | ||
( | ||
"sale_loyalty.sale_coupon_view_form", | ||
"sale_loyalty.loyalty_card_view_form_inherit_sale_loyalty", | ||
), | ||
( | ||
"sale_loyalty.sale_coupon_apply_code_view_form", | ||
"sale_loyalty.sale_loyalty_coupon_wizard_view_form", | ||
), | ||
( | ||
"sale_loyalty.sale_order_view_form", | ||
"sale_loyalty.sale_order_view_form_inherit_sale_loyalty", | ||
), | ||
] | ||
|
||
|
||
def _generate_random_reward_code(): | ||
return str(random.getrandbits(32)) | ||
|
||
|
||
def _convert_applied_coupons_to_many2many(env): | ||
openupgrade.logged_query( | ||
env.cr, | ||
""" | ||
CREATE TABLE IF NOT EXISTS loyalty_card_sale_order_rel AS | ||
SELECT id, sales_order_id | ||
FROM loyalty_card | ||
""", | ||
) | ||
|
||
|
||
def _set_sale_ok_default_values(env): | ||
openupgrade.logged_query( | ||
env.cr, | ||
""" | ||
ALTER TABLE loyalty_program | ||
ADD COLUMN IF NOT EXISTS sale_ok BOOLEAN | ||
""", | ||
) | ||
openupgrade.logged_query( | ||
env.cr, | ||
""" | ||
UPDATE loyalty_reward | ||
SET sale_ok = true | ||
""", | ||
) | ||
|
||
|
||
def _fill_code_enabled_rule_ids(env): | ||
""" This is an m2m field, the relationship table is created in case it does not | ||
exist and filled with the data. This field relates the id of a rule to the id of | ||
a sales order to which it has been applied, provided that the rule belongs to an | ||
applicable promotion with code.""" | ||
openupgrade.logged_query( | ||
env.cr, | ||
""" | ||
CREATE TABLE IF NOT EXISTS loyalty_rule_sale_order_rel ( | ||
sale_order_id INT, | ||
loyalty_rule_id INT | ||
) | ||
""", | ||
) | ||
openupgrade.logged_query( | ||
env.cr, | ||
""" | ||
INSERT INTO loyalty_rule_sale_order_rel (sale_order_id, loyalty_rule_id) | ||
SELECT lc.order_id, lr.id | ||
FROM loyalty_card lc | ||
JOIN loyalty_rule lr ON lc.program_id = lr.program_id | ||
WHERE lr.mode = 'with_code' | ||
""", | ||
) | ||
|
||
|
||
def _sale_order_coupon_points_generate(env): | ||
openupgrade.logged_query( | ||
env.cr, | ||
""" | ||
CREATE TABLE IF NOT EXISTS sale_order_coupon_points ( | ||
coupon_id INT, | ||
order_id INT, | ||
points FLOAT, | ||
create_uid INT, | ||
write_uid INT, | ||
create_date DATE, | ||
write_date DATE | ||
) | ||
""", | ||
) | ||
openupgrade.logged_query( | ||
env.cr, | ||
""" | ||
INSERT INTO sale_order_coupon_points (coupon_id, order_id, points, create_uid, write_uid, create_date, write_date) | ||
SELECT id AS coupon_id, order_id, 1 AS points, create_uid, write_uid, create_date, write_date | ||
FROM loyalty_card; | ||
""", | ||
) | ||
|
||
|
||
def _fill_reward_id_field(env): | ||
openupgrade.logged_query( | ||
env.cr, | ||
""" | ||
ALTER TABLE sale_order_line | ||
ADD COLUMN IF NOT EXISTS reward_id INT | ||
""", | ||
) | ||
openupgrade.logged_query( | ||
env.cr, | ||
""" | ||
UPDATE sale_order_line sol | ||
SET reward_id = lr.id | ||
FROM loyalty_reward lr | ||
WHERE sol.product_id = lr.discount_line_product_id | ||
""", | ||
) | ||
|
||
|
||
def _fill_coupon_id_field(env): | ||
openupgrade.logged_query( | ||
env.cr, | ||
""" | ||
ALTER TABLE sale_order_line | ||
ADD COLUMN IF NOT EXISTS coupon_id INT | ||
""", | ||
) | ||
openupgrade.logged_query( | ||
env.cr, | ||
""" | ||
UPDATE sale_order_line | ||
SET coupon_id = loyalty_card.id | ||
FROM loyalty_card | ||
WHERE sale_order_line.order_id = loyalty_card.order_id | ||
""", | ||
) | ||
|
||
|
||
def _fill_reward_identifier_code(env): | ||
openupgrade.logged_query( | ||
env.cr, | ||
""" | ||
ALTER TABLE sale_order_line | ||
ADD COLUMN IF NOT EXISTS reward_identifier_code CHAR | ||
""", | ||
) | ||
reward_code = _generate_random_reward_code() | ||
openupgrade.logged_query( | ||
env.cr, | ||
""" | ||
UPDATE sale_order_line | ||
SET reward_identifier_code = %s | ||
WHERE reward_id IS NOT NULL | ||
""", | ||
(reward_code,), | ||
) | ||
|
||
|
||
def _fill_points_cost_field(env): | ||
openupgrade.logged_query( | ||
env.cr, | ||
""" | ||
ALTER TABLE sale_order_line | ||
ADD COLUMN IF NOT EXISTS points_cost FLOAT | ||
""", | ||
) | ||
openupgrade.logged_query( | ||
env.cr, | ||
""" | ||
UPDATE sale_order_line | ||
SET points_cost = 1 | ||
WHERE reward_id IS NOT NULL | ||
""", | ||
) | ||
|
||
|
||
def _delete_sql_constraints(env): | ||
# Delete constraints to recreate it | ||
openupgrade.delete_sql_constraint_safely( | ||
env, "sale_loyalty", "sale_order_coupon_points", "order_coupon_unique" | ||
) | ||
|
||
|
||
def _update_template_keys(env): | ||
"""Update template keys of the merged sale_gift_card module in loyalty_sale""" | ||
openupgrade.logged_query( | ||
env.cr, | ||
""" | ||
UPDATE ir_ui_view | ||
SET key = 'sale_loyalty.used_gift_card' | ||
WHERE key = 'sale_gif_card.used_gift_card' | ||
""", | ||
) | ||
openupgrade.logged_query( | ||
env.cr, | ||
""" | ||
UPDATE ir_ui_view | ||
SET key = 'sale_loyalty.sale_purchased_gift_card' | ||
WHERE key = 'sale_gif_card.sale_purchased_gift_card' | ||
""", | ||
) | ||
openupgrade.logged_query( | ||
env.cr, | ||
""" | ||
UPDATE ir_ui_view | ||
SET key = 'sale_loyalty.sale_orde_portal_content_inherit' | ||
WHERE key = 'sale_gif_card.sale_orde_portal_content_inherit' | ||
""", | ||
) | ||
|
||
|
||
@openupgrade.migrate() | ||
def migrate(env, version): | ||
openupgrade.rename_xmlids(env.cr, _xmlids_renames) | ||
_convert_applied_coupons_to_many2many(env) | ||
_set_sale_ok_default_values(env) | ||
_fill_code_enabled_rule_ids(env) | ||
_fill_reward_id_field(env) | ||
_fill_coupon_id_field(env) | ||
_fill_reward_identifier_code(env) | ||
_fill_points_cost_field(env) | ||
_sale_order_coupon_points_generate(env) | ||
_delete_sql_constraints(env) | ||
_update_template_keys(env) |
136 changes: 136 additions & 0 deletions
136
openupgrade_scripts/scripts/sale_loyalty/16.0.1.0/upgrade_analysis_work.txt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,136 @@ | ||
---Models in module 'sale_loyalty'--- | ||
obsolete model sale.coupon.apply.code (renamed to sale.loyalty.coupon.wizard) [transient] | ||
new model sale.loyalty.coupon.wizard (renamed from sale.coupon.apply.code) [transient] | ||
new model sale.loyalty.reward.wizard [transient] | ||
# NOTHING TO DO: transient model | ||
|
||
new model sale.order.coupon.points | ||
# NOTHING TO DO: New model | ||
|
||
---Fields in module 'sale_loyalty'--- | ||
sale_coupon / coupon.coupon / sales_order_id (many2one) : DEL relation: sale.order | ||
# NOTHING TO DO | ||
|
||
sale_coupon / sale.order / applied_coupon_ids (one2many) : relation is now 'loyalty.card' ('coupon.coupon') [nothing to do] | ||
sale_coupon / sale.order / applied_coupon_ids (one2many) : table is now 'loyalty_card_sale_order_rel' ('False') | ||
sale_coupon / sale.order / applied_coupon_ids (one2many) : type is now 'many2many' ('one2many') | ||
# DONE pre-migration: convert to many2many | ||
|
||
sale_coupon / sale.order / code_promo_program_id (many2one): DEL relation: coupon.program | ||
sale_coupon / sale.order / generated_coupon_ids (one2many): DEL relation: coupon.coupon | ||
sale_coupon / sale.order / no_code_promo_program_ids (many2many): DEL relation: coupon.program | ||
# NOTHING TO DO | ||
|
||
sale_coupon / sale.order.line / is_reward_line (boolean) : not stored anymore | ||
sale_coupon / sale.order.line / is_reward_line (boolean) : now a function | ||
# NOTHING TO DO | ||
|
||
sale_gift_card / gift.card / buy_line_id (many2one) : DEL relation: sale.order.line | ||
sale_gift_card / gift.card / redeem_line_ids (one2many) : DEL relation: sale.order.line | ||
# NOTHING TO DO | ||
|
||
sale_gift_card / sale.order.line / generated_gift_card_ids (one2many): DEL relation: gift.card | ||
sale_gift_card / sale.order.line / gift_card_id (many2one) : DEL relation: gift.card | ||
# NOTHING TO DO | ||
|
||
sale_loyalty / loyalty.program / sale_ok (boolean) : NEW hasdefault: default | ||
# DONE pre-migration: set default value | ||
|
||
sale_loyalty / sale.order / code_enabled_rule_ids (many2many): NEW relation: loyalty.rule | ||
# DONE pre-migration: create relational table and fill | ||
|
||
sale_loyalty / sale.order / coupon_point_ids (one2many) : NEW relation: sale.order.coupon.points | ||
sale_loyalty / sale.order.coupon.points / coupon_id (many2one) : NEW relation: loyalty.card, required | ||
sale_loyalty / sale.order.coupon.points / order_id (many2one) : NEW relation: sale.order, required | ||
sale_loyalty / sale.order.coupon.points / points (float) : NEW required | ||
# DONE: pre-migration: create table and fill value | ||
|
||
sale_loyalty / sale.order.line / coupon_id (many2one) : NEW relation: loyalty.card | ||
sale_loyalty / sale.order.line / points_cost (float) : NEW | ||
sale_loyalty / sale.order.line / reward_id (many2one) : NEW relation: loyalty.reward | ||
sale_loyalty / sale.order.line / reward_identifier_code (char) : NEW | ||
# DONE pre-migration: fill in data | ||
|
||
---XML records in module 'sale_loyalty'--- | ||
DEL ir.actions.act_window: sale_coupon.sale_coupon_apply_code_action | ||
NEW ir.actions.act_window: sale_loyalty.sale_loyalty_coupon_wizard_action | ||
# DONE pre-migration: rename xmlid | ||
|
||
NEW ir.actions.act_window: sale_loyalty.sale_loyalty_reward_wizard_action | ||
DEL ir.actions.act_window: sale_coupon.sale_order_action | ||
DEL ir.actions.act_window: sale_gift_card.gift_card_sale_order_action | ||
# NOTHING TO DO | ||
|
||
NEW ir.model.access: sale_loyalty.access_applicability_manager [renamed from sale_coupon module] | ||
NEW ir.model.access: sale_loyalty.access_applicability_salesman [renamed from sale_coupon module] | ||
NEW ir.model.access: sale_loyalty.access_communication_manager | ||
NEW ir.model.access: sale_loyalty.access_communication_salesman | ||
NEW ir.model.access: sale_loyalty.access_coupon_manager [renamed from sale_coupon module] | ||
NEW ir.model.access: sale_loyalty.access_coupon_salesman [renamed from sale_coupon module] | ||
NEW ir.model.access: sale_loyalty.access_program_manager [renamed from sale_coupon module] | ||
NEW ir.model.access: sale_loyalty.access_program_salesman [renamed from sale_coupon module] | ||
NEW ir.model.access: sale_loyalty.access_reward_manager [renamed from sale_coupon module] | ||
NEW ir.model.access: sale_loyalty.access_reward_salesman [renamed from sale_coupon module] | ||
NEW ir.model.access: sale_loyalty.access_sale_coupon_apply_code [renamed from sale_coupon module] | ||
NEW ir.model.access: sale_loyalty.access_sale_coupon_apply_code_line | ||
NEW ir.model.access: sale_loyalty.access_sale_coupon_generate | ||
NEW ir.model.access: sale_loyalty.access_sale_order_coupon_points_manager | ||
NEW ir.model.access: sale_loyalty.access_sale_order_coupon_points_salesman | ||
DEL ir.model.access: sale_coupon.access_applicability_manager [renamed to sale_loyalty module] | ||
DEL ir.model.access: sale_coupon.access_applicability_salesman [renamed to sale_loyalty module] | ||
DEL ir.model.access: sale_coupon.access_coupon_manager [renamed to sale_loyalty module] | ||
DEL ir.model.access: sale_coupon.access_coupon_salesman [renamed to sale_loyalty module] | ||
DEL ir.model.access: sale_coupon.access_program_manager [renamed to sale_loyalty module] | ||
DEL ir.model.access: sale_coupon.access_program_salesman [renamed to sale_loyalty module] | ||
DEL ir.model.access: sale_coupon.access_reward_manager [renamed to sale_loyalty module] | ||
DEL ir.model.access: sale_coupon.access_reward_salesman [renamed to sale_loyalty module] | ||
DEL ir.model.access: sale_coupon.access_sale_coupon_apply_code [renamed to sale_loyalty module] | ||
DEL ir.model.access: sale_coupon.access_sale_coupon_generate [renamed to pos_loyalty module] | ||
DEL ir.model.access: sale_gift_card.access_gift_card_manager | ||
DEL ir.model.access: sale_gift_card.access_gift_card_sales | ||
# NOTHING TO DO | ||
|
||
NEW ir.model.constraint: sale_loyalty.constraint_sale_order_coupon_points_order_coupon_unique | ||
# DONE pre-migration: safely delete constraint to recreate it | ||
|
||
DEL ir.rule: sale_coupon.sale_coupon_apply_code_rule (noupdate) | ||
# DONE: post-migration: safely deleted xmlid | ||
|
||
NEW ir.ui.menu: sale_loyalty.menu_discount_loyalty_type_config | ||
NEW ir.ui.menu: sale_loyalty.menu_gift_ewallet_type_config | ||
DEL ir.ui.menu: sale_coupon.menu_coupon_type_config | ||
DEL ir.ui.menu: sale_coupon.menu_promotion_type_config | ||
# DONE pre-migration: rename xmlid | ||
|
||
NEW ir.ui.view: sale_loyalty.loyalty_card_view_form_inherit_sale_loyalty | ||
DEL ir.ui.view: sale_coupon.sale_coupon_view_form | ||
NEW ir.ui.view: sale_loyalty.sale_loyalty_coupon_wizard_view_form | ||
DEL ir.ui.view: sale_coupon.sale_coupon_apply_code_view_form | ||
NEW ir.ui.view: sale_loyalty.sale_order_view_form_inherit_sale_loyalty | ||
DEL ir.ui.view: sale_coupon.sale_order_view_form | ||
# DONE pre-migration: rename xmlid | ||
|
||
NEW ir.ui.view: sale_loyalty.loyalty_program_view_form_inherit_sale_loyalty | ||
NEW ir.ui.view: sale_loyalty.sale_loyalty_reward_wizard_view_form | ||
NEW ir.ui.view: sale_loyalty.sale_order_portal_content_inherit | ||
NEW ir.ui.view: sale_loyalty.sale_purchased_gift_card | ||
NEW ir.ui.view: sale_loyalty.used_gift_card | ||
DEL ir.ui.view: sale_coupon.res_config_settings_view_form | ||
DEL ir.ui.view: sale_coupon.sale_coupon_program_view_coupon_program_form | ||
DEL ir.ui.view: sale_coupon.sale_coupon_program_view_promo_program_form | ||
DEL ir.ui.view: sale_coupon.sale_coupon_view_coupon_program_kanban | ||
DEL ir.ui.view: sale_coupon.sale_coupon_view_tree | ||
DEL ir.ui.view: sale_gift_card.sale_gift_card_view_form | ||
DEL ir.ui.view: sale_gift_card.sale_order_view_extend_gift_card_form | ||
# NOTHING TO DO | ||
|
||
DEL ir.ui.view: sale_gift_card.used_gift_card | ||
DEL ir.ui.view: sale_gift_card.sale_purchased_gift_card | ||
DEL ir.ui.view: sale_gift_card.sale_order_portal_content_inherit | ||
# DONE pre-migration: update template keys | ||
|
||
DEL mail.template: sale_coupon.mail_template_sale_coupon (noupdate) | ||
# NOTHING TO DO: renamed in loyalty module | ||
|
||
DEL mail.template: sale_gift_card.mail_template_gift_card [renamed to loyalty module] | ||
# NOTHING TO DOq |