| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/15.0/sale_coupon |
| VERSION | |
| VERSION | 1.0 |
| CATEGORY | |
| CATEGORY | Sales/Sales |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | |
| MAINTAINERS | |
| MAINTAINERS | |
| COMMITTERS | |
| COMMITTERS | Raphael Collet, Odoo Translation Bot, Martin Trigaux, Thibault Delavallée, Goffin Simon, Jeremy Kersten, GitHub, Yannick Tivisse, Pierre Masereel, Romain Derie, Jorge Pinna Puissant, Adrian Torres, Xavier-Do, Victor Feyens, Andrea Grazioso (agr-odoo), Joseph Caburnay, svs-odoo, Achraf (abz), nie, Tiffany Chang (tic), Ivàn Todorovich, William Braeckman, Kevin Baptiste, Pratima Gupta, pedrambiria, momegahed, prro-odoo, Florian Damhaut, MerlinGuillaume, anhe-odoo, Walid HANNICHE (waha), Nicolas Bayet, Thomas Lefebvre (thle), David, Mylyna Hy, Valentin Vallaeys (vava), Đặng Văn Lộc, Valeriya(vchu), odoostan |
| WEBSITE | |
| WEBSITE | |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:25:28 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - coupon - account - base_setup - base - web - product - bus - web_tour - uom - analytic - portal - web_editor - http_routing - auth_signup - digest - resource - sale - sales_team - payment - utm |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | Integrate coupon mechanism in sales orders. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
res_config_settings_view_form |
res.config.settings.view.form.inherit.sale.coupon | res.config.settings | xpath | Inherits sale.res_config_settings_view_form |
sale_coupon_apply_code_view_form |
sale.coupon.apply.code.form | sale.coupon.apply.code | form | New |
sale_coupon_program_view_coupon_program_form |
coupon.program.form | coupon.program | xpath | Inherits coupon.coupon_program_view_coupon_program_form |
sale_coupon_program_view_promo_program_form |
coupon.program.form | coupon.program | xpath | Inherits coupon.coupon_program_view_promo_program_form |
sale_coupon_view_coupon_program_kanban |
coupon.program.kanban | coupon.program | xpath | Inherits coupon.view_coupon_program_kanban |
sale_coupon_view_form |
coupon.coupon.form | coupon.coupon | xpath | Inherits coupon.coupon_view_form |
sale_coupon_view_tree |
coupon.coupon.tree | coupon.coupon | xpath | Inherits coupon.coupon_view_tree |
sale_order_view_form |
sale.order.form.inherit.coupon | sale.order | xpath | Inherits sale.view_order_form |
order_id
Many2one → sale.order
help='The sales order from which coupon is generated'
readonly=True
args: 'sale.order', 'Order Reference'
sales_order_id
Many2one → sale.order
help='The sales order on which the coupon is applied'
readonly=True
args: 'sale.order', 'Used in'
No public methods.
order_count
Integer
compute='_compute_order_count'
action_view_sales_orders(self)
coupon_code
Char
required=True
string='Code'
apply_coupon(self, order, coupon_code)
process_coupon(self)
applied_coupon_ids
One2many → coupon.coupon
copy=False
string='Applied Coupons'
args: 'coupon.coupon', 'sales_order_id'
code_promo_program_id
Many2one → coupon.program
copy=False
domain="[('promo_code_usage', '=', 'code_needed'), '|', ('company_id', '=', False), ('company_id', '=', company_id)]"
string='Applied Promo Program'
args: 'coupon.program'
generated_coupon_ids
One2many → coupon.coupon
copy=False
string='Offered Coupons'
args: 'coupon.coupon', 'order_id'
no_code_promo_program_ids
Many2many → coupon.program
copy=False
domain="[('promo_code_usage', '=', 'no_code_needed'), '|', ('company_id', '=', False), ('company_id', '=', company_id)]"
string='Applied Immediate Promo Programs'
args: 'coupon.program'
promo_code
Char
help='Applied program code'
readonly=False
related='code_promo_program_id.promo_code'
reward_amount
Float
compute='_compute_reward_total'
action_confirm(self)
action_draft(self)
copy(self, default=None)
recompute_coupon_lines(self)
update_prices(self)
is_reward_line
Boolean
modified(self, fnames, *args, **kwargs)
unlink(self)
| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/14.0/sale_coupon |
| VERSION | |
| VERSION | 1.0 |
| CATEGORY | |
| CATEGORY | Sales/Sales |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | |
| MAINTAINERS | |
| MAINTAINERS | |
| COMMITTERS | |
| COMMITTERS | Raphael Collet, Odoo Translation Bot, Martin Trigaux, Olivier Dony, Thibault Delavallée, Christophe Simonis, Xavier Morel, Goffin Simon, Nicolas Martinelli, Jeremy Kersten, Damien Bouvy, Barad Mahendra, Yannick Tivisse, Pierre Masereel, Romain Derie, Jorge Pinna Puissant, Alexandre Kühn, Arnold Moyaux, Xavier-Do, jvm-odoo, Victor Feyens, Andrea Grazioso (agr-odoo), Loan (lse), fw-bot, Achraf (abz), Lucas Lefèvre, Swapnesh Shah, nie, Ivàn Todorovich, William Braeckman, Kevin Baptiste, roen-odoo, pedrambiria, momegahed, prro-odoo, Florian Damhaut, MerlinGuillaume, anhe-odoo, Walid HANNICHE (waha), Thomas Lefebvre (thle), David, Valentin Vallaeys (vava), Valeriya(vchu) |
| WEBSITE | |
| WEBSITE | |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:14:29 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - coupon - account - base_setup - base - web - product - bus - web_tour - uom - analytic - portal - web_editor - http_routing - auth_signup - digest - resource - sale - sales_team - payment - utm |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | Integrate coupon mechanism in sales orders. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
res_config_settings_view_form |
res.config.settings.view.form.inherit.sale.coupon | res.config.settings | xpath | Inherits sale.res_config_settings_view_form |
sale_coupon_apply_code_view_form |
sale.coupon.apply.code.form | sale.coupon.apply.code | form | New |
sale_coupon_program_view_coupon_program_form |
coupon.program.form | coupon.program | xpath | Inherits coupon.coupon_program_view_coupon_program_form |
sale_coupon_program_view_promo_program_form |
coupon.program.form | coupon.program | xpath | Inherits coupon.coupon_program_view_promo_program_form |
sale_coupon_view_coupon_program_kanban |
coupon.program.kanban | coupon.program | xpath | Inherits coupon.view_coupon_program_kanban |
sale_coupon_view_form |
coupon.coupon.form | coupon.coupon | xpath | Inherits coupon.coupon_view_form |
sale_coupon_view_tree |
coupon.coupon.tree | coupon.coupon | xpath | Inherits coupon.coupon_view_tree |
sale_order_view_form |
sale.order.form.inherit.coupon | sale.order | xpath | Inherits sale.view_order_form |
order_id
Many2one → sale.order
help='The sales order from which coupon is generated'
readonly=True
args: 'sale.order', 'Order Reference'
sales_order_id
Many2one → sale.order
help='The sales order on which the coupon is applied'
readonly=True
args: 'sale.order', 'Used in'
No public methods.
order_count
Integer
compute='_compute_order_count'
action_view_sales_orders(self)
coupon_code
Char
required=True
string='Code'
apply_coupon(self, order, coupon_code)
process_coupon(self)
applied_coupon_ids
One2many → coupon.coupon
copy=False
string='Applied Coupons'
args: 'coupon.coupon', 'sales_order_id'
code_promo_program_id
Many2one → coupon.program
copy=False
domain="[('promo_code_usage', '=', 'code_needed'), '|', ('company_id', '=', False), ('company_id', '=', company_id)]"
string='Applied Promo Program'
args: 'coupon.program'
generated_coupon_ids
One2many → coupon.coupon
copy=False
string='Offered Coupons'
args: 'coupon.coupon', 'order_id'
no_code_promo_program_ids
Many2many → coupon.program
copy=False
domain="[('promo_code_usage', '=', 'no_code_needed'), '|', ('company_id', '=', False), ('company_id', '=', company_id)]"
string='Applied Immediate Promo Programs'
args: 'coupon.program'
promo_code
Char
help='Applied program code'
readonly=False
related='code_promo_program_id.promo_code'
reward_amount
Float
compute='_compute_reward_total'
action_confirm(self)
action_draft(self)
copy(self, default=None)
recompute_coupon_lines(self)
update_prices(self)
is_reward_line
Boolean
modified(self, fnames, *args, **kwargs)
unlink(self)
| REPOSITORY | |
|---|---|
| REPOSITORY | odoo/odoo |
| GIT | |
| GIT | https://github.com/odoo/odoo.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/odoo/odoo/tree/13.0/sale_coupon |
| VERSION | |
| VERSION | 1.0 |
| CATEGORY | |
| CATEGORY | Sales/Sales |
| LICENSE | |
| LICENSE | LGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | |
| MAINTAINERS | |
| MAINTAINERS | |
| COMMITTERS | |
| COMMITTERS | Raphael Collet, Odoo Translation Bot, Martin Trigaux, Thibault Delavallée, Denis Ledoux, Christophe Simonis, Xavier Morel, Goffin Simon, Nicolas Martinelli, Nicolas Lempereur, Jeremy Kersten, Damien Bouvy, Olivier Colson, Yannick Tivisse, qsm-odoo, Odoo Online, Romain Derie, Jorge Pinna Puissant, Adrian Torres, Julien Castiaux, Xavier-Do, jvm-odoo, Victor Feyens, Andrea Grazioso (agr-odoo), Loan (lse), Achraf (abz), Baptiste Vergote, Swapnesh Shah, nie, William Braeckman, Guillaume (guva), pedrambiria, momegahed, prro-odoo, Florian Damhaut, Nicolás Mac Rouillon, anhe-odoo, Walid HANNICHE (waha), jcoux |
| WEBSITE | |
| WEBSITE | |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:06:43 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - sale_management - sale - sales_team - base - base_setup - web - bus - web_tour - payment - account - product - uom - analytic - portal - web_editor - http_routing - auth_signup - digest - resource - utm |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | Integrate coupon mechanism in sales orders. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
report_coupon |
report_coupon | ir.ui.view | qweb | New |
report_coupon_i18n |
report_coupon_i18n | ir.ui.view | qweb | New |
res_config_settings_view_form |
res.config.settings.view.form.inherit.sale.coupon | res.config.settings | xpath | Inherits sale.res_config_settings_view_form |
sale_coupon_apply_code_view_form |
sale.coupon.apply.code.form | sale.coupon.apply.code | form | New |
sale_coupon_generate_view_form |
sale.coupon.generate.form | sale.coupon.generate | form | New |
sale_coupon_program_view_form |
sale.coupon.program.form | sale.coupon.program | xpath | Inherits sale_coupon_program_view_form_common |
sale_coupon_program_view_form_common |
sale.coupon.program.common.form | sale.coupon.program | form | New |
sale_coupon_program_view_promo_program_form |
sale.coupon.promotion.program.form | sale.coupon.program | xpath | Inherits sale_coupon_program_view_form_common |
sale_coupon_program_view_promo_program_search |
sale.coupon.promotion.program.search | sale.coupon.program | search | New |
sale_coupon_program_view_promo_program_tree |
sale.coupon.promotion.program.tree | sale.coupon.program | tree | New |
sale_coupon_program_view_search |
sale.coupon.program.search | sale.coupon.program | search | New |
sale_coupon_program_view_tree |
sale.coupon.program.tree | sale.coupon.program | tree | New |
sale_coupon_view_form |
sale.coupon.form | sale.coupon | form | New |
sale_coupon_view_tree |
sale.coupon.tree | sale.coupon | tree | New |
sale_order_view_form |
sale.order.form.inherit.coupon | sale.order | xpath | Inherits sale.view_order_form |
view_sale_coupon_program_kanban |
sale.coupon.program.kanban | sale.coupon.program | kanban | New |
No new fields.
Public methods (0)No public methods.
code
Char
default=_generate_code
readonly=True
required=True
discount_line_product_id
Many2one → product.product
help='Product used in the sales order to apply the discount.'
readonly=False
related='program_id.discount_line_product_id'
args: 'product.product'
expiration_date
Date
compute='_compute_expiration_date'
args: 'Expiration Date'
order_id
Many2one → sale.order
help='The sales order from which coupon is generated'
readonly=True
args: 'sale.order', 'Order Reference'
partner_id
Many2one → res.partner
program_id
Many2one → sale.coupon.program
ondelete='cascade'
required=True
args: 'sale.coupon.program', 'Program'
sales_order_id
Many2one → sale.order
help='The sales order on which the coupon is applied'
readonly=True
args: 'sale.order', 'Applied on order'
state
Selection
default='new'
required=True
args: [('reserved', 'Reserved'), ('new', 'Valid'), ('used', 'Consumed'), ('expired', 'Expired')]
action_coupon_sent(self)
cron_expire_coupon(self)
coupon_code
Char
required=True
string='Code'
apply_coupon(self, order, coupon_code)
process_coupon(self)
generation_type
Selection
default='nbr_coupon'
args: [('nbr_coupon', 'Number of Coupons'), ('nbr_customer', 'Number of Selected Customers')]
nbr_coupons
Integer
default=1
help='Number of coupons'
string='Number of Coupons'
partners_domain
Char
default='[]'
string='Customer'
generate_coupon(self)
active
Boolean
default=True
help='A program is available for the customers when active'
args: 'Active'
company_id
Many2one → res.company
default=<expr>
string='Company'
args: 'res.company'
coupon_count
Integer
compute='_compute_coupon_count'
coupon_ids
One2many → sale.coupon
copy=False
string='Generated Coupons'
args: 'sale.coupon', 'program_id'
currency_id
Many2one
readonly=True
related='company_id.currency_id'
string='Currency'
maximum_use_number
Integer
help='Maximum number of sales orders in which reward can be provided'
name
Char
required=True
translate=True
order_count
Integer
compute='_compute_order_count'
program_type
Selection
help='A promotional program can be either a limited promotional offer without code (applied automatically)\n or with a code (displayed on a magazine for example) that may generate a discount on the current\n order or create a coupon for a next order.\n\n A coupon program generates coupons with a code that can be used to generate a discount on the current\n order or create a coupon for a next order.'
args: [('promotion_program', 'Promotional Program'), ('coupon_program', 'Coupon Program')]
promo_applicability
Selection
default='on_current_order'
string='Applicability'
args: [('on_current_order', 'Apply On Current Order'), ('on_next_order', 'Apply On Next Order')]
promo_code
Char
copy=False
help="A promotion code is a code that is associated with a marketing discount. For example, a retailer might tell frequent customers to enter the promotion code 'THX001' to receive a 10%% discount on their whole order."
args: 'Promotion Code'
promo_code_usage
Selection
help=<expr>
args: [('no_code_needed', 'Automatically Applied'), ('code_needed', 'Use a code')]
reward_id
Many2one → sale.coupon.reward
copy=False
ondelete='restrict'
required=True
string='Reward'
args: 'sale.coupon.reward'
rule_id
Many2one → sale.coupon.rule
ondelete='restrict'
required=True
string='Coupon Rule'
args: 'sale.coupon.rule'
sequence
Integer
copy=False
help=<expr>
validity_duration
Integer
default=1
help='Validity duration for a coupon after its generation'
action_view_sales_orders(self)
create(self, vals)
toggle_active(self)
unlink(self)
write(self, vals)
discount_apply_on
Selection
default='on_order'
help=<expr>
args: [('on_order', 'On Order'), ('cheapest_product', 'On Cheapest Product'), ('specific_products', 'On Specific Products')]
discount_fixed_amount
Float
help='The discount in fixed amount'
string='Fixed Amount'
discount_line_product_id
Many2one → product.product
copy=False
help='Product used in the sales order to apply the discount. Each coupon program has its own reward product for reporting purpose'
string='Reward Line Product'
args: 'product.product'
discount_max_amount
Float
default=0
help='Maximum amount of discount that can be provided'
discount_percentage
Float
default=10
help='The discount in percentage, between 1 to 100'
string='Discount'
discount_specific_product_ids
Many2many → product.product
help='Products that will be discounted if the discount is applied on specific products'
string='Products'
args: 'product.product'
discount_type
Selection
default='percentage'
help=<expr>
args: [('percentage', 'Percentage'), ('fixed_amount', 'Fixed Amount')]
reward_description
Char
reward_product_id
Many2one → product.product
help='Reward Product'
string='Free Product'
args: 'product.product'
reward_product_quantity
Integer
default=1
help='Reward product quantity'
string='Quantity'
reward_product_uom_id
Many2one
readonly=True
related='reward_product_id.product_tmpl_id.uom_id'
string='Unit of Measure'
reward_type
Selection
default='discount'
help=<expr>
string='Reward Type'
args: [('discount', 'Discount'), ('product', 'Free Product')]
name_get(self)
rule_date_from
Datetime
help='Coupon program start date'
string='Start Date'
rule_date_to
Datetime
help='Coupon program end date'
string='End Date'
rule_min_quantity
Integer
default=1
help='Minimum required product quantity to get the reward'
string='Minimum Quantity'
rule_minimum_amount
Float
default=0.0
help='Minimum required amount to get the reward'
rule_minimum_amount_tax_inclusion
Selection
default='tax_excluded'
args: [('tax_included', 'Tax Included'), ('tax_excluded', 'Tax Excluded')]
rule_partners_domain
Char
help='Coupon program will work for selected customers only'
string='Based on Customers'
rule_products_domain
Char
default=[['sale_ok', '=', True]]
help='On Purchase of selected product, reward will be given'
string='Based on Products'
No public methods.
applied_coupon_ids
One2many → sale.coupon
copy=False
string='Applied Coupons'
args: 'sale.coupon', 'sales_order_id'
code_promo_program_id
Many2one → sale.coupon.program
copy=False
domain="[('promo_code_usage', '=', 'code_needed'), '|', ('company_id', '=', False), ('company_id', '=', company_id)]"
string='Applied Promo Program'
args: 'sale.coupon.program'
generated_coupon_ids
One2many → sale.coupon
copy=False
string='Offered Coupons'
args: 'sale.coupon', 'order_id'
no_code_promo_program_ids
Many2many → sale.coupon.program
copy=False
domain="[('promo_code_usage', '=', 'no_code_needed'), '|', ('company_id', '=', False), ('company_id', '=', company_id)]"
string='Applied Immediate Promo Programs'
args: 'sale.coupon.program'
promo_code
Char
help='Applied program code'
readonly=False
related='code_promo_program_id.promo_code'
reward_amount
Float
compute='_compute_reward_total'
action_cancel(self)
action_confirm(self)
action_draft(self)
copy(self, default=None)
recompute_coupon_lines(self)
is_reward_line
Boolean
modified(self, fnames, *args, **kwargs)
unlink(self)