From 5e1aa6a224b1d4fc84af080c6ccb3006956efa9d Mon Sep 17 00:00:00 2001 From: Christophe Monniez Date: Thu, 1 Feb 2018 11:23:37 +0100 Subject: [PATCH] [FIX] sale_coupon: add missing dependencies on computed fields Thanks to @rco-odoo --- models/sale_coupon_program.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/models/sale_coupon_program.py b/models/sale_coupon_program.py index a753a3be344..e620d4b1b10 100644 --- a/models/sale_coupon_program.py +++ b/models/sale_coupon_program.py @@ -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])