You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

58 lines
2.0 KiB

# License AGPL-3 - See https://www.gnu.org/licenses/agpl-3.0
from odoo import models, fields, api, _
from odoo.exceptions import ValidationError
DISCOUNTS = [
("none", "No initial discount"),
("fixed", "Fixed amount"),
("percent", "Percentage of the price"),
]
class ProductTemplate(models.Model):
_inherit = "product.template"
initial_discount = fields.Selection(
selection=DISCOUNTS,
default="none",
string="Initial discount",
required=True,
)
fixed_discount = fields.Float(
string="Discount amount",
digits="Product Price",
)
percent_discount = fields.Float(
string="Discount (%)",
digits=(12, 2),
)
@api.constrains("list_price", "initial_discount", "fixed_discount")
def check_fixed_discount(self):
for product in self:
if (
product.initial_discount == "fixed"
and product.list_price <= product.fixed_discount
):
raise ValidationError(
_(
"Fixed discount for 1st membership must be less than the product template, or any of its variants, sale price."
)
)
@api.constrains("initial_discount", "percent_discount")
def check_percent_discount(self):
for product in self:
if product.initial_discount == "percent" and product.percent_discount < 0.0:
raise ValidationError(
_(
'Percent discount cannot handle a negative value.\nIf you wan to apply extra fees, please install "Membership initial fee" module (OCA/vertical-association)'
)
)
elif (
product.initial_discount == "percent"
and product.percent_discount >= 100.0
):
raise ValidationError(
_("Percent discount must handle a value smaller than 100%.")
)