[FIX] sale_coupon: add missing dependencies on computed fields

Thanks to @rco-odoo
This commit is contained in:
Christophe Monniez
2018-02-01 13:56:29 +01:00
parent 8dc38eb48a
commit 5e1aa6a224
+7
View File
@@ -44,6 +44,7 @@ class SaleCouponProgram(models.Model):
coupon_ids = fields.One2many('sale.coupon', 'program_id', string="Generated Coupons", copy=False)
coupon_count = fields.Integer(compute='_compute_coupon_count')
order_count = fields.Integer(compute='_compute_order_count')
order_line_ids = fields.Many2many('sale.order.line', store=False, search='_search_order_line_ids')
company_id = fields.Many2one('res.company', string="Company", default=lambda self: self.env.user.company_id)
currency_id = fields.Many2one(string="Currency", related='company_id.currency_id', readonly=True)
validity_duration = fields.Integer(default=1,
@@ -53,12 +54,18 @@ class SaleCouponProgram(models.Model):
('unique_promo_code', 'unique(promo_code)', 'The program code must be unique!'),
]
def _search_order_line_ids(self, operator, arg):
# just a hack to enable the invalidation of 'order_count'
return []
@api.depends('order_line_ids.product_id')
def _compute_order_count(self):
product_data = self.env['sale.order.line'].read_group([('product_id', 'in', self.mapped('discount_line_product_id').ids)], ['product_id'], ['product_id'])
mapped_data = dict([(m['product_id'][0], m['product_id_count']) for m in product_data])
for program in self:
program.order_count = mapped_data.get(program.discount_line_product_id.id, 0)
@api.depends('coupon_ids')
def _compute_coupon_count(self):
coupon_data = self.env['sale.coupon'].read_group([('program_id', 'in', self.ids)], ['program_id'], ['program_id'])
mapped_data = dict([(m['program_id'][0], m['program_id_count']) for m in coupon_data])