TIP: You can type at any time to perform a new search.
Sale Loyalty
sale_loyalty · odoo/odoo
🛠 Migration considerations
- Raw `cr.execute()` INSERT/UPDATE/DELETE bypasses the ORM (no compute/constrains/tracking/mail): `SELECT id FROM loyalty_program WHERE id=%s FOR UPDATE NOWAIT` - re-check the table/column names still match after upgrading. migration-raw-sql-write · source
Found by automated static analysis: patterns worth a look before/after upgrading this module to a newer Odoo version.
- Repository
- odoo/odoo · module folder
- Module version
- 1.0
- Category
- Sales/Sales
- Folder size
- 1.37 MB
- License
- LGPL-3
- Application
- No
- Auto-installable
- Yes
- Website
- None
- Last tracking update
- 2026-08-15 22:44:20
- Authors
- Odoo S.A.
- Maintainers
- Odoo S.A.
- Committers
- Thibault Delavallée, Odoo Translation Bot, Laurent Smet, Julien Castiaux, Victor Feyens, Andrea Grazioso (agr-odoo), Tiffany Chang (tic), Gorash, William Braeckman, Demesmaeker, Valentin Chevalier, alsh-odoo, Pedram (PEBR), Mylyna Hy, Victor Piryns (pivi), Levi Siuzdak (sile), Dylan Kiss (dyki), Antoine Boonen, Sarah Bellefroid, Arnaud Sibille, Louis (loti), kcv-odoo, dere-odoo, Ryan Cen, sabr, Antoine Dupuis, Smit Patel, David Van Droogenbroeck (DROD), Pierre Lamotte (pila), jeep-odoo, Shrey Mehta, Mahdi Alijani (malj), Krzysztof Magusiak (krma), nipl-odoo, krip-odoo, shka-odoo, Nisarg (nipl), Lionel Piraux (lipi), jand-odoo, Merlin Guillaume, enricodg, Farah (ahmfa), kame-odoo, Kirra Hyde, nutav
- Odoo dependencies
- Python dependencies
- None
- System dependencies
- None
- Required by
- sale_loyalty_auto_refresh, sale_loyalty_delivery, website_sale_loyalty
- Description
Integrate discount and loyalty programs mechanisms in sales orders.
Code Analysis ⓘ
Views touched (10)
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
loyalty_card_view_form_inherit_sale_loyalty |
loyalty.card.view.form.inherit.sale.loyalty | loyalty.card | form | Inherits loyalty.loyalty_card_view_form |
loyalty_program_view_form_inherit_sale_loyalty |
loyalty.program.view.form.inherit.sale.loyalty | loyalty.program | form | Inherits loyalty.loyalty_program_view_form |
res_partner_form |
res.partner.view.buttons | res.partner | form | Inherits loyalty.res_partner_form |
sale_loyalty_coupon_wizard_view_form |
sale.loyalty.coupon.wizard.view.form | sale.loyalty.coupon.wizard | form | New |
sale_loyalty_reward_wizard_view_form |
sale.loyalty.reward.wizard.view.form | sale.loyalty.reward.wizard | form | New |
sale_order_portal_content_inherit |
Gift Card Products Portal | ir.ui.view | qweb | Inherits sale.sale_order_portal_content |
sale_order_portal_loyalty_content |
sale_order_portal_loyalty_content | ir.ui.view | qweb | New |
sale_order_view_form_inherit_sale_loyalty |
sale.order.view.form.inherit.sale.loyalty | sale.order | form | Inherits sale.view_order_form |
sale_purchased_gift_card |
sale_purchased_gift_card | ir.ui.view | qweb | New |
used_gift_card |
used_gift_card | ir.ui.view | qweb | New |
HTTP endpoints (0)
No HTTP endpoints found for this module.
Models touched (10)
New fields (0)
No new fields.
Public methods (0)No public methods.
New fields (2)
-
order_idMany2one → sale.ordercomodel_name='sale.order'help='The sales order from which coupon is generated'readonly=Truestring='Order Reference' -
order_id_partner_idMany2one → res.partnercomodel_name='res.partner'related='order_id.partner_id'string='Sale Order Customer'
-
action_archive(self)
New fields (0)
No new fields.
Public methods (0)No public methods.
New fields (2)
-
order_countIntegercompute='_compute_order_count' -
sale_okBooleandefault=Truestring='Sales'
No public methods.
New fields (0)
No new fields.
Public methods (1)-
unlink(self)
New fields (2)
-
coupon_codeCharrequired=True -
order_idMany2one → sale.orderdefault=<expr>required=True args: 'sale.order'
-
action_apply(self)
New fields (6)
-
multi_product_rewardBooleanrelated='selected_reward_id.multi_product' -
order_idMany2one → sale.orderdefault=<expr>required=True args: 'sale.order' -
reward_idsMany2many → loyalty.rewardcompute='_compute_claimable_reward_ids' args: 'loyalty.reward' -
reward_product_idsMany2manyrelated='selected_reward_id.reward_product_ids' -
selected_product_idMany2one → product.productcompute='_compute_selected_product_id'domain="[('id', 'in', reward_product_ids)]"readonly=Falsestore=True args: 'product.product' -
selected_reward_idMany2one → loyalty.rewarddomain="[('id', 'in', reward_ids)]" args: 'loyalty.reward'
-
action_apply(self) -
action_cancel(self)
New fields (6)
-
applied_coupon_idsMany2many → loyalty.cardcomodel_name='loyalty.card'copy=Falsestring='Manually Applied Coupons' -
code_enabled_rule_idsMany2many → loyalty.rulecomodel_name='loyalty.rule'copy=Falsestring='Manually Triggered Rules' -
coupon_point_idsOne2many → sale.order.coupon.pointscomodel_name='sale.order.coupon.points'copy=Falseinverse_name='order_id' -
gift_card_countIntegercompute='_compute_gift_card_count' -
loyalty_dataJsoncompute='_compute_loyalty_data' -
reward_amountFloatcompute='_compute_reward_total'
-
action_confirm(self)Override to validate and update coupon rewards. If called with one SO, checks if there exists rewards that are available but not claimed, and if so returns a notification action. :raises ValidationError: A coupon gave a negative amount of points. :return: True or a notification action :rtype: bool | dict -
action_open_reward_wizard(self) -
action_view_gift_cards(self) -
copy(self, default=None)
New fields (3)
-
coupon_idMany2one → loyalty.cardcomodel_name='loyalty.card'ondelete='cascade'required=True -
order_idMany2one → sale.ordercomodel_name='sale.order'index=Trueondelete='cascade'required=True -
pointsFloatrequired=True
No public methods.
New fields (5)
-
coupon_idMany2one → loyalty.cardcomodel_name='loyalty.card'ondelete='restrict'readonly=True -
is_reward_lineBooleancompute='_compute_is_reward_line'string='Is a program reward line' -
points_costFloathelp='How much point this reward costs on the loyalty card.' -
reward_idMany2one → loyalty.rewardcomodel_name='loyalty.reward'ondelete='restrict'readonly=True -
reward_identifier_codeCharhelp='Technical field used to link multiple reward lines from the same reward together.'
-
create(self, vals_list)@api.model_create_multi -
unlink(self) -
write(self, vals)
Loading…
Loading…
Loading…