pos_loyalty_subscription/models/loyalty_card.py
2026-06-04 12:01:05 +07:00

38 lines
1.6 KiB
Python

# -*- 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'])
return fields_list