Files
tradon/modules/company/ir.py
2026-03-14 09:42:12 +00:00

136 lines
4.0 KiB
Python

# 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 import backend
from trytond.model import ModelSQL, ModelView, dualmethod, fields
from trytond.pool import Pool, PoolMeta
from trytond.pyson import Eval
from trytond.tools import timezone as tz
from trytond.transaction import Transaction
class Sequence(metaclass=PoolMeta):
__name__ = 'ir.sequence'
company = fields.Many2One(
'company.company', "Company",
help="Restricts the sequence usage to the company.")
@classmethod
def __setup__(cls):
super().__setup__()
cls._order.insert(0, ('company', 'ASC'))
@staticmethod
def default_company():
return Transaction().context.get('company')
class SequenceStrict(Sequence):
__name__ = 'ir.sequence.strict'
class Date(metaclass=PoolMeta):
__name__ = 'ir.date'
@classmethod
def today(cls, timezone=None):
pool = Pool()
Company = pool.get('company.company')
company_id = Transaction().context.get('company')
if timezone is None and company_id is not None and company_id >= 0:
company = Company(company_id)
if company.timezone:
timezone = tz.ZoneInfo(company.timezone)
return super().today(timezone=timezone)
class Rule(metaclass=PoolMeta):
__name__ = 'ir.rule'
@classmethod
def __setup__(cls):
super().__setup__()
cls.domain.help += (
'\n- "companies" as list of ids from the current user')
@classmethod
def _get_cache_key(cls, model_names):
pool = Pool()
User = pool.get('res.user')
key = super()._get_cache_key(model_names)
return (*key, User.get_companies())
@classmethod
def _get_context(cls, model_name):
pool = Pool()
User = pool.get('res.user')
context = super()._get_context(model_name)
context['companies'] = User.get_companies()
return context
class Cron(metaclass=PoolMeta):
__name__ = "ir.cron"
companies = fields.Many2Many(
'ir.cron-company.company', 'cron', 'company', "Companies",
states={
'readonly': Eval('running', False),
},
help='Companies registered for this cron.')
@dualmethod
@ModelView.button
def run_once(cls, crons):
for cron in crons:
if not cron.companies:
super().run_once([cron])
else:
for company in cron.companies:
with Transaction().set_context(company=company.id):
super().run_once([cron])
@staticmethod
def default_companies():
Company = Pool().get('company.company')
return list(map(int, Company.search([])))
class CronCompany(ModelSQL):
__name__ = 'ir.cron-company.company'
cron = fields.Many2One(
'ir.cron', "Cron", ondelete='CASCADE', required=True)
company = fields.Many2One(
'company.company', "Company", ondelete='CASCADE', required=True)
@classmethod
def __register__(cls, module):
# Migration from 7.0: rename to standard name
backend.TableHandler.table_rename('cron_company_rel', cls._table)
super().__register__(module)
class EmailTemplate(metaclass=PoolMeta):
__name__ = 'ir.email.template'
@classmethod
def email_models(cls):
return super().email_models() + ['company.employee']
@classmethod
def _get_address(cls, record):
pool = Pool()
Employee = pool.get('company.employee')
address = super()._get_address(record)
if isinstance(record, Employee):
address = cls._get_address(record.party)
return address
@classmethod
def _get_language(cls, record):
pool = Pool()
Employee = pool.get('company.employee')
language = super()._get_language(record)
if isinstance(record, Employee):
language = cls._get_language(record.party)
return language