from odoo import api, fields, models from odoo.exceptions import ValidationError class CommunityBenefitRedemption(models.Model): _name = 'community.benefit.redemption' _description = 'Benefit Redemption' _order = 'date desc' member_id = fields.Many2one('res.partner', string='Member', required=True) benefit_id = fields.Many2one('community.benefit', required=True) date = fields.Datetime(default=fields.Datetime.now, required=True) verified_by = fields.Many2one('res.users', default=lambda self: self.env.user) notes = fields.Text() @api.constrains('member_id', 'benefit_id') def _check_member_entitled(self): for redemption in self: member = redemption.member_id if member.membership_state not in ('active', 'renewal_due'): raise ValidationError( f"{member.name} does not have an active membership - reusing the same check as the " f"membership QR verification page. Redemption refused." ) if not redemption.benefit_id.is_entitled(member): raise ValidationError( f"{member.name}'s membership tier is not entitled to this benefit." )