Skip to content

Commit

Permalink
[OU-ADD] sale_loyalty
Browse files Browse the repository at this point in the history
TT44353
  • Loading branch information
pilarvargas-tecnativa committed Nov 5, 2023
1 parent bf2ae38 commit 7dc5907
Show file tree
Hide file tree
Showing 3 changed files with 392 additions and 0 deletions.
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 openupgrade_scripts/scripts/sale_loyalty/16.0.1.0/pre-migration.py
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)
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

0 comments on commit 7dc5907

Please sign in to comment.