diff --git a/models/sale_order.py b/models/sale_order.py index 5331fe1a157..3324dce2d2a 100644 --- a/models/sale_order.py +++ b/models/sale_order.py @@ -216,13 +216,24 @@ class SaleOrder(models.Model): self.write({'order_line': [(0, False, value) for value in self._get_reward_line_values(program)]}) def _create_reward_coupon(self, program): - coupon = self.env['sale.coupon'].create({ - 'program_id': program.id, - 'state': 'reserved', - 'partner_id': self.partner_id.id, - 'order_id': self.id, - 'discount_line_product_id': program.discount_line_product_id.id - }) + # if there is already a coupon that was set as expired, reactivate that one instead of creating a new one + coupon = self.env['sale.coupon'].search([ + ('program_id', '=', program.id), + ('state', '=', 'expired'), + ('partner_id', '=', self.partner_id.id), + ('order_id', '=', self.id), + ('discount_line_product_id', '=', program.discount_line_product_id.id), + ], limit=1) + if coupon: + coupon.write({'state': 'reserved'}) + else: + coupon = self.env['sale.coupon'].create({ + 'program_id': program.id, + 'state': 'reserved', + 'partner_id': self.partner_id.id, + 'order_id': self.id, + 'discount_line_product_id': program.discount_line_product_id.id + }) self.generated_coupon_ids |= coupon return coupon