pos_loyalty/models/loyalty_rule.py

40 lines
1.7 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import api, fields, models
from odoo.osv import expression
class LoyaltyRule(models.Model):
_inherit = 'loyalty.rule'
valid_product_ids = fields.Many2many(
'product.product', "Valid Products", compute='_compute_valid_product_ids',
help="These are the products that are valid for this rule.")
any_product = fields.Boolean(
compute='_compute_valid_product_ids', help="Technical field, whether all product match")
promo_barcode = fields.Char("Barcode", compute='_compute_promo_barcode', store=True, readonly=False,
help="A technical field used as an alternative to the promo code. "
"This is automatically generated when the promo code is changed."
)
@api.depends('product_ids', 'product_category_id', 'product_tag_id') #TODO later: product tags
def _compute_valid_product_ids(self):
for rule in self:
if rule.product_ids or\
rule.product_category_id or\
rule.product_tag_id or\
rule.product_domain not in ('[]', "[['sale_ok', '=', True]]"):
domain = rule._get_valid_product_domain()
domain = expression.AND([[('available_in_pos', '=', True)], domain])
rule.valid_product_ids = self.env['product.product'].search(domain)
rule.any_product = False
else:
rule.any_product = True
rule.valid_product_ids = self.env['product.product']
@api.depends('code')
def _compute_promo_barcode(self):
for rule in self:
rule.promo_barcode = self.env['loyalty.card']._generate_code()