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

94 lines
3.1 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.model import fields
from trytond.pool import Pool, PoolMeta
from trytond.pyson import Eval
from trytond.transaction import Transaction
class CreateChartProperties(metaclass=PoolMeta):
__name__ = 'account.create_chart.properties'
category_account_expense = fields.Many2One(
'account.account', 'Default Expense Account',
domain=[
('closed', '!=', True),
('type.expense', '=', True),
('company', '=', Eval('company', -1)),
])
category_account_revenue = fields.Many2One(
'account.account', 'Default Revenue Account',
domain=[
('closed', '!=', True),
('type.revenue', '=', True),
('company', '=', Eval('company', -1)),
])
class CreateChart(metaclass=PoolMeta):
__name__ = 'account.create_chart'
def transition_create_properties(self):
pool = Pool()
Configuration = pool.get('account.configuration')
state = super().transition_create_properties()
with Transaction().set_context(company=self.properties.company.id):
config = Configuration(1)
for name in [
'category_account_expense',
'category_account_revenue']:
setattr(config, 'default_%s' % name,
getattr(self.properties, name, None))
config.save()
return state
def default_properties(self, fields):
pool = Pool()
Account = pool.get('account.account')
defaults = super().default_properties(fields)
expense_accounts = Account.search([
('type.expense', '=', True),
('company', '=', self.account.company.id),
], limit=2)
revenue_accounts = Account.search([
('type.revenue', '=', True),
('company', '=', self.account.company.id),
], limit=2)
if len(expense_accounts) == 1:
defaults['category_account_expense'] = expense_accounts[0].id
else:
defaults['category_account_expense'] = None
if len(revenue_accounts) == 1:
defaults['category_account_revenue'] = revenue_accounts[0].id
else:
defaults['category_account_revenue'] = None
return defaults
class MoveLine(metaclass=PoolMeta):
__name__ = 'account.move.line'
@property
def product(self):
pass
@property
def rule_pattern(self):
def parents(categories):
for category in categories:
while category:
yield category
category = category.parent
pattern = super().rule_pattern
if self.product:
pattern['product'] = self.product.id
pattern['product_categories'] = [
c.id for c in parents(self.product.categories_all)]
else:
pattern['product'] = None
pattern['product_categories'] = []
return pattern