first commit
This commit is contained in:
136
modules/account_eu/account.py
Normal file
136
modules/account_eu/account.py
Normal file
@@ -0,0 +1,136 @@
|
||||
# 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 sql import Null
|
||||
from sql.aggregate import Min, Sum
|
||||
|
||||
from trytond.model import ModelSQL, ModelView, fields
|
||||
from trytond.modules.account.exceptions import FiscalYearNotFoundError
|
||||
from trytond.modules.currency.fields import Monetary
|
||||
from trytond.pool import Pool, PoolMeta
|
||||
from trytond.pyson import Bool, Eval
|
||||
from trytond.transaction import Transaction
|
||||
|
||||
|
||||
class TaxTemplate(metaclass=PoolMeta):
|
||||
__name__ = 'account.tax.template'
|
||||
|
||||
ec_sales_list_code = fields.Char("EC Sales List Code")
|
||||
|
||||
def _get_tax_value(self, tax=None):
|
||||
value = super()._get_tax_value(tax=tax)
|
||||
if not tax or tax.ec_sales_list_code != self.ec_sales_list_code:
|
||||
value['ec_sales_list_code'] = self.ec_sales_list_code
|
||||
return value
|
||||
|
||||
|
||||
class Tax(metaclass=PoolMeta):
|
||||
__name__ = 'account.tax'
|
||||
|
||||
ec_sales_list_code = fields.Char("EC Sales List Code",
|
||||
states={
|
||||
'readonly': (Bool(Eval('template', -1))
|
||||
& ~Eval('template_override', False)),
|
||||
})
|
||||
|
||||
|
||||
class ECSalesList(ModelSQL, ModelView):
|
||||
__name__ = 'account.ec_sales_list'
|
||||
|
||||
company_tax_identifier = fields.Many2One(
|
||||
'party.identifier', "Company Tax Identifier")
|
||||
party = fields.Many2One('party.party', "Party")
|
||||
party_tax_identifier = fields.Many2One(
|
||||
'party.identifier', "Party Tax Identifier")
|
||||
code = fields.Char("Code")
|
||||
amount = Monetary(
|
||||
"Amount", currency='currency', digits='currency')
|
||||
currency = fields.Many2One('currency.currency', "Currency")
|
||||
|
||||
@classmethod
|
||||
def table_query(cls):
|
||||
pool = Pool()
|
||||
Company = pool.get('company.company')
|
||||
Invoice = pool.get('account.invoice')
|
||||
Move = pool.get('account.move')
|
||||
Line = pool.get('account.move.line')
|
||||
TaxLine = pool.get('account.tax.line')
|
||||
Period = pool.get('account.period')
|
||||
Tax = pool.get('account.tax')
|
||||
context = Transaction().context
|
||||
company = Company.__table__()
|
||||
invoice = Invoice.__table__()
|
||||
move = Move.__table__()
|
||||
line = Line.__table__()
|
||||
tax_line = TaxLine.__table__()
|
||||
period = Period.__table__()
|
||||
tax = Tax.__table__()
|
||||
where = invoice.company == context.get('company')
|
||||
if context.get('fiscalyear'):
|
||||
where &= (period.fiscalyear == context.get('fiscalyear'))
|
||||
if context.get('period'):
|
||||
where &= (period.id == context.get('period'))
|
||||
if context.get('start_date'):
|
||||
where &= (move.date >= context.get('start_date'))
|
||||
if context.get('end_date'):
|
||||
where &= (move.date <= context.get('end_date'))
|
||||
where &= ((tax.ec_sales_list_code != Null)
|
||||
& (tax.ec_sales_list_code != ''))
|
||||
where &= tax_line.type == 'base'
|
||||
where &= invoice.type == 'out'
|
||||
return (tax_line
|
||||
.join(tax, condition=tax_line.tax == tax.id)
|
||||
.join(line, condition=tax_line.move_line == line.id)
|
||||
.join(move, condition=line.move == move.id)
|
||||
.join(period, condition=move.period == period.id)
|
||||
.join(invoice, condition=invoice.move == move.id)
|
||||
.join(company, condition=company.id == invoice.company)
|
||||
.select(
|
||||
Min(tax_line.id).as_('id'),
|
||||
invoice.tax_identifier.as_('company_tax_identifier'),
|
||||
invoice.party.as_('party'),
|
||||
invoice.party_tax_identifier.as_('party_tax_identifier'),
|
||||
tax.ec_sales_list_code.as_('code'),
|
||||
Sum(tax_line.amount).as_('amount'),
|
||||
company.currency.as_('currency'),
|
||||
where=where,
|
||||
group_by=[
|
||||
invoice.tax_identifier,
|
||||
invoice.party,
|
||||
invoice.party_tax_identifier,
|
||||
tax.ec_sales_list_code,
|
||||
company.currency,
|
||||
]))
|
||||
|
||||
|
||||
class ECSalesListContext(ModelView):
|
||||
__name__ = 'account.ec_sales_list.context'
|
||||
|
||||
company = fields.Many2One('company.company', "Company", required=True)
|
||||
fiscalyear = fields.Many2One(
|
||||
'account.fiscalyear', "Fiscal Year", required=True,
|
||||
domain=[
|
||||
('company', '=', Eval('company', -1)),
|
||||
])
|
||||
period = fields.Many2One(
|
||||
'account.period', "Period",
|
||||
domain=[
|
||||
('fiscalyear', '=', Eval('fiscalyear', -1)),
|
||||
])
|
||||
|
||||
@classmethod
|
||||
def default_company(cls):
|
||||
return Transaction().context.get('company')
|
||||
|
||||
@classmethod
|
||||
def default_fiscalyear(cls):
|
||||
pool = Pool()
|
||||
FiscalYear = pool.get('account.fiscalyear')
|
||||
context = Transaction().context
|
||||
if 'fiscalyear' not in context:
|
||||
try:
|
||||
fiscalyear = FiscalYear.find(
|
||||
cls.default_company(), test_state=False)
|
||||
except FiscalYearNotFoundError:
|
||||
return None
|
||||
return fiscalyear.id
|
||||
return context['fiscalyear']
|
||||
Reference in New Issue
Block a user