38 lines
1.6 KiB
Python
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
|