# -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. import pytz from odoo import api, fields, models class LoyaltyCard(models.Model): _inherit = 'loyalty.card' subscription_start_date = fields.Date(string="Subscription Start Date") subscription_end_date = fields.Date(string="Subscription End Date") subscription_usage_count = fields.Integer(compute='_compute_subscription_usage_count', string="Subscription Usage Today") def _compute_subscription_usage_count(self): for card in self: if card.program_id.program_type != 'subscription': card.subscription_usage_count = 0 continue domain = [('card_id', '=', card.id), ('used', '>', 0)] user_tz = pytz.timezone(self.env.user.tz or 'UTC') now_utc = fields.Datetime.now() now_local = pytz.utc.localize(now_utc).astimezone(user_tz) midnight_local = now_local.replace(hour=0, minute=0, second=0, microsecond=0) start_date = midnight_local.astimezone(pytz.utc).replace(tzinfo=None) domain.append(('create_date', '>=', start_date)) # Use sudo() to bypass potential multi-company record access rules on loyalty.history card.subscription_usage_count = self.env['loyalty.history'].sudo().search_count(domain) @api.model def _load_pos_data_fields(self, config): fields_list = super()._load_pos_data_fields(config) fields_list.extend(['subscription_start_date', 'subscription_end_date', 'subscription_usage_count', 'active']) return fields_list