136 lines
4.0 KiB
Python
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
|