Files
tradon/ir/calendar_.py
2025-12-26 13:11:43 +00:00

68 lines
2.0 KiB
Python
Executable File

# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
from trytond.cache import Cache
from trytond.model import ModelSQL, Unique, fields
from trytond.rpc import RPC
from trytond.transaction import Transaction
class _Calendar(ModelSQL):
_order_name = 'index'
index = fields.Integer("Index", required=True)
name = fields.Char("Name", required=True, translate=True)
abbreviation = fields.Char("Abbreviation", required=True, translate=True)
@classmethod
def __setup__(cls):
super().__setup__()
t = cls.__table__()
cls.__rpc__.update({
'read': RPC(),
'search': RPC(),
'search_count': RPC(),
'search_read': RPC(),
})
cls.index.domain = [
('index', '>=', cls._min_index),
('index', '<=', cls._max_index),
]
cls._order = [('index', 'ASC')]
cls._sql_constraints = [
('index_unique', Unique(t, t.index),
"The index must by unique.")
]
@classmethod
def locale(cls, language=None, field='name'):
transaction = Transaction()
if language is None:
language = transaction.language
elif isinstance(language, ModelSQL):
language = language.code
key = (language, field)
result = cls._cache_locale.get(key)
if not result:
with transaction.set_context(language=language):
records = cls.search([])
result = [None] * cls._min_index
result += [getattr(r, field) for r in records]
cls._cache_locale.set(key, result)
return result
class Month(_Calendar):
"Month"
__name__ = 'ir.calendar.month'
_min_index = 1
_max_index = 12
_cache_locale = Cache('ir.calendar.month')
class Day(_Calendar):
"Day"
__name__ = 'ir.calendar.day'
_min_index = 0
_max_index = 6
_cache_locale = Cache('ir.calendar.day')