This refactoring extracts parts of `sale_coupon` module to create a more generic module called `coupon`. This new module can be extended in different sales modules to implement functionalities specific to modules that extend it.
101 lines
3.5 KiB
Python
101 lines
3.5 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo.addons.sale.tests.test_sale_product_attribute_value_config import TestSaleProductAttributeValueCommon
|
|
|
|
|
|
class TestSaleCouponCommon(TestSaleProductAttributeValueCommon):
|
|
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
super(TestSaleCouponCommon, cls).setUpClass()
|
|
|
|
# set currency to not rely on demo data and avoid possible race condition
|
|
cls.currency_ratio = 1.0
|
|
pricelist = cls.env.ref('product.list0')
|
|
pricelist.currency_id = cls._setup_currency(cls.currency_ratio)
|
|
|
|
# Set all the existing programs to active=False to avoid interference
|
|
cls.env['coupon.program'].search([]).write({'active': False})
|
|
|
|
# create partner for sale order.
|
|
cls.steve = cls.env['res.partner'].create({
|
|
'name': 'Steve Bucknor',
|
|
'email': 'steve.bucknor@example.com',
|
|
})
|
|
|
|
cls.empty_order = cls.env['sale.order'].create({
|
|
'partner_id': cls.steve.id
|
|
})
|
|
|
|
cls.uom_unit = cls.env.ref('uom.product_uom_unit')
|
|
|
|
# Taxes
|
|
cls.tax_15pc_excl = cls.env['account.tax'].create({
|
|
'name': "Tax 15%",
|
|
'amount_type': 'percent',
|
|
'amount': 15,
|
|
'type_tax_use': 'sale',
|
|
})
|
|
|
|
cls.tax_10pc_incl = cls.env['account.tax'].create({
|
|
'name': "10% Tax incl",
|
|
'amount_type': 'percent',
|
|
'amount': 10,
|
|
'price_include': True,
|
|
})
|
|
|
|
#products
|
|
cls.product_A = cls.env['product.product'].create({
|
|
'name': 'Product A',
|
|
'list_price': 100,
|
|
'sale_ok': True,
|
|
'taxes_id': [(6, 0, [cls.tax_15pc_excl.id])],
|
|
})
|
|
|
|
cls.product_B = cls.env['product.product'].create({
|
|
'name': 'Product B',
|
|
'list_price': 5,
|
|
'sale_ok': True,
|
|
'taxes_id': [(6, 0, [cls.tax_15pc_excl.id])],
|
|
})
|
|
|
|
cls.product_C = cls.env['product.product'].create({
|
|
'name': 'Product C',
|
|
'list_price': 100,
|
|
'sale_ok': True,
|
|
'taxes_id': [(6, 0, [])],
|
|
|
|
})
|
|
|
|
# Immediate Program By A + B: get B free
|
|
# No Conditions
|
|
cls.immediate_promotion_program = cls.env['coupon.program'].create({
|
|
'name': 'Buy A + 1 B, 1 B are free',
|
|
'promo_code_usage': 'no_code_needed',
|
|
'reward_type': 'product',
|
|
'reward_product_id': cls.product_B.id,
|
|
'rule_products_domain': "[('id', 'in', [%s])]" % (cls.product_A.id),
|
|
'active': True,
|
|
})
|
|
|
|
cls.code_promotion_program = cls.env['coupon.program'].create({
|
|
'name': 'Buy 1 A + Enter code, 1 A is free',
|
|
'promo_code_usage': 'code_needed',
|
|
'reward_type': 'product',
|
|
'reward_product_id': cls.product_A.id,
|
|
'rule_products_domain': "[('id', 'in', [%s])]" % (cls.product_A.id),
|
|
'active': True,
|
|
})
|
|
|
|
cls.code_promotion_program_with_discount = cls.env['coupon.program'].create({
|
|
'name': 'Buy 1 C + Enter code, 10 percent discount on C',
|
|
'promo_code_usage': 'code_needed',
|
|
'reward_type': 'discount',
|
|
'discount_type': 'percentage',
|
|
'discount_percentage': 10,
|
|
'rule_products_domain': "[('id', 'in', [%s])]" % (cls.product_C.id),
|
|
'active': True,
|
|
'discount_apply_on': 'on_order',
|
|
})
|