changeset 4a26449fbf23 in modules/account_es:default
details:
https://hg.tryton.org/modules/account_es?cmd=changeset;node=4a26449fbf23
description:
Add amount to compensate from previous periods in 303 report
issue7837
review68351002
diffstat:
CHANGELOG | 1 +
reporting_tax.py | 21 ++++-
tests/303_compensate.txt | 1 +
tests/scenario_reporting_compensate.rst | 154 ++++++++++++++++++++++++++++++++
tests/test_account_es.py | 4 +
5 files changed, 180 insertions(+), 1 deletions(-)
diffs (227 lines):
diff -r 2bf5c75d0833 -r 4a26449fbf23 CHANGELOG
--- a/CHANGELOG Thu Mar 28 12:07:16 2019 +0100
+++ b/CHANGELOG Sat Mar 30 10:13:51 2019 +0100
@@ -1,3 +1,4 @@
+* Add amount to compensate from previous periods in 303 report
* Update model 303 to new format
Version 5.0.0 - 2018-10-01
diff -r 2bf5c75d0833 -r 4a26449fbf23 reporting_tax.py
--- a/reporting_tax.py Thu Mar 28 12:07:16 2019 +0100
+++ b/reporting_tax.py Sat Mar 30 10:13:51 2019 +0100
@@ -234,7 +234,9 @@
def get_context(cls, records, data):
pool = Pool()
Period = pool.get('account.period')
+ Account = pool.get('account.account')
TaxCodeLine = pool.get('account.tax.code.line')
+ transaction = Transaction()
context = super().get_context(records, data)
amounts = context['amounts']
@@ -261,12 +263,29 @@
code = str(int(line.code.code) - 1).rjust(2, '0')
amounts[code] = float(line.tax.rate * Decimal(100))
- for code in ['46', '64', '66', '69', '71', '88']:
+ amount_to_compensate = Decimal(0)
+ fiscalyear = periods[0].fiscalyear
+ start_periods = Period.search([
+ ('fiscalyear', '=', fiscalyear.id),
+ ('end_date', '<=', start_date),
+ ])
+ with transaction.set_context({
+ 'fiscalyear': fiscalyear.id,
+ 'periods': [p.id for p in start_periods],
+ }):
+ for account in Account.search([
+ ('company', '=', fiscalyear.company.id),
+ ('code', 'like', '4700%'),
+ ]):
+ amount_to_compensate += account.balance
+
+ for code in ['46', '64', '66', '67', '69', '71', '88']:
assert code not in amounts, (
"computed code %s already defined" % code)
amounts['46'] = amounts['27'] - amounts['45']
amounts['64'] = amounts['46'] + amounts['58'] + amounts['76']
amounts['66'] = amounts['64'] * Decimal(amounts['65']) / Decimal(100.0)
+ amounts['67'] = amount_to_compensate
amounts['69'] = (amounts['66'] + amounts['77'] - amounts['67']
+ amounts['68'])
amounts['71'] = (amounts['69'] - amounts['70'])
diff -r 2bf5c75d0833 -r 4a26449fbf23 tests/303_compensate.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/303_compensate.txt Sat Mar 30 10:13:51 2019 +0100
@@ -0,0 +1,1 @@
+<T30302018020000><AUX>
</AUX><T30301000> CB01000009DUNDER MIFFLIN
2018022322
2222000000000000000000040000000000000000000000000000000000000100000000000000000000000000000000050000210000000000000001050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000001050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010500220
</T30301000><T30303000>00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105010000000000000000000001050000000000000000000000000000000400000000000000000000N000000000000295000000000000000000N0000000000002950
0 0 0 0
0 0
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
</T30303000></T30302018020000>
diff -r 2bf5c75d0833 -r 4a26449fbf23 tests/scenario_reporting_compensate.rst
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/scenario_reporting_compensate.rst Sat Mar 30 10:13:51 2019 +0100
@@ -0,0 +1,154 @@
+=========================================
+Account ES Compensated Reporting Scenario
+=========================================
+
+Imports::
+
+ >>> import datetime
+ >>> from decimal import Decimal
+ >>> from proteus import Model, Wizard
+ >>> from trytond.tests.tools import activate_modules
+ >>> from trytond.tools import file_open
+ >>> from trytond.modules.company.tests.tools import create_company, \
+ ... get_company
+ >>> from trytond.modules.account.tests.tools import create_fiscalyear
+ >>> from trytond.modules.account_invoice.tests.tools import \
+ ... set_fiscalyear_invoice_sequences
+ >>> today = datetime.date.today()
+
+Install account_es::
+
+ >>> config = activate_modules(['account_es', 'account_invoice'])
+
+Create company::
+
+ >>> _ = create_company()
+ >>> company = get_company()
+ >>> tax_identifier = company.party.identifiers.new()
+ >>> tax_identifier.type = 'eu_vat'
+ >>> tax_identifier.code = 'ESB01000009'
+ >>> company.party.save()
+
+Create fiscal year::
+
+ >>> fiscalyear = set_fiscalyear_invoice_sequences(
+ ... create_fiscalyear(company, datetime.date(2018, 1, 1)))
+ >>> fiscalyear.click('create_period')
+ >>> previous_period = fiscalyear.periods[0]
+ >>> period = fiscalyear.periods[1]
+
+Create chart of accounts::
+
+ >>> AccountTemplate = Model.get('account.account.template')
+ >>> Account = Model.get('account.account')
+ >>> ModelData = Model.get('ir.model.data')
+ >>> data, = ModelData.find([
+ ... ('module', '=', 'account_es'),
+ ... ('fs_id', '=', 'pgc_0_pyme'),
+ ... ], limit=1)
+ >>> account_template = AccountTemplate(data.db_id)
+ >>> create_chart = Wizard('account.create_chart')
+ >>> create_chart.execute('account')
+ >>> create_chart.form.account_template = account_template
+ >>> create_chart.form.company = company
+ >>> create_chart.execute('create_account')
+ >>> accounts = {}
+ >>> for kind in ['receivable', 'payable', 'revenue', 'expense']:
+ ... accounts[kind], = Account.find([
+ ... ('type.%s' % kind , '=', True),
+ ... ('company', '=', company.id),
+ ... ], limit=1)
+ >>> expense = accounts['expense']
+ >>> revenue = accounts['revenue']
+ >>> create_chart.form.account_receivable = accounts['receivable']
+ >>> create_chart.form.account_payable = accounts['payable']
+ >>> create_chart.execute('create_properties')
+
+Create parties::
+
+ >>> Party = Model.get('party.party')
+ >>> party = Party(name='Party')
+ >>> party.save()
+
+Create account category::
+
+ >>> Tax = Model.get('account.tax')
+ >>> customer_tax, = Tax.find([
+ ... ('company', '=', company.id),
+ ... ('name', '=', 'IVA 21%'),
+ ... ])
+ >>> ProductCategory = Model.get('product.category')
+ >>> account_category = ProductCategory(name="Account Category")
+ >>> account_category.accounting = True
+ >>> account_category.account_expense = expense
+ >>> account_category.account_revenue = revenue
+ >>> account_category.customer_taxes.append(customer_tax)
+ >>> account_category.save()
+
+Create product::
+
+ >>> ProductUom = Model.get('product.uom')
+ >>> unit, = ProductUom.find([('name', '=', 'Unit')])
+ >>> ProductTemplate = Model.get('product.template')
+ >>> template = ProductTemplate()
+ >>> template.name = 'product'
+ >>> template.default_uom = unit
+ >>> template.type = 'service'
+ >>> template.list_price = Decimal('40')
+ >>> template.account_category = account_category
+ >>> template.save()
+ >>> product, = template.products
+
+Create invoice::
+
+ >>> Invoice = Model.get('account.invoice')
+ >>> invoice = Invoice()
+ >>> invoice.party = party
+ >>> invoice.invoice_date = period.start_date
+ >>> line = invoice.lines.new()
+ >>> line.product = product
+ >>> line.quantity = 1
+ >>> line.unit_price = Decimal('50')
+ >>> invoice.click('post')
+ >>> invoice.total_amount
+ Decimal('60.50')
+
+Create previous period compensation move::
+
+ >>> Journal = Model.get('account.journal')
+ >>> Move = Model.get('account.move')
+ >>> journal_cash, = Journal.find([
+ ... ('code', '=', 'CASH'),
+ ... ])
+ >>> compensation_account, = Account.find([
+ ... ('company', '=', company.id),
+ ... ('code', '=', '4700'),
+ ... ])
+ >>> move = Move()
+ >>> move.period = previous_period
+ >>> move.journal = journal_cash
+ >>> move.date = previous_period.start_date
+ >>> line = move.lines.new()
+ >>> line.account = expense
+ >>> line.credit = Decimal(40)
+ >>> line = move.lines.new()
+ >>> line.account = compensation_account
+ >>> line.debit = Decimal(40)
+ >>> move.click('post')
+
+
+Generate aeat 303 report::
+
+ >>> Period = Model.get('account.period')
+ >>> aeat = Wizard('account.reporting.aeat')
+ >>> aeat.form.report = '303'
+ >>> aeat.form.periods.append(Period(period.id))
+ >>> aeat.execute('choice')
+ >>> extension, content, _, name = aeat.actions[0]
+ >>> extension
+ 'txt'
+ >>> with file_open('account_es/tests/303_compensate.txt') as f:
+ ... content == f.read()
+ True
+ >>> name
+ 'AEAT Model 303'
diff -r 2bf5c75d0833 -r 4a26449fbf23 tests/test_account_es.py
--- a/tests/test_account_es.py Thu Mar 28 12:07:16 2019 +0100
+++ b/tests/test_account_es.py Sat Mar 30 10:13:51 2019 +0100
@@ -22,4 +22,8 @@
tearDown=doctest_teardown, encoding='utf-8',
checker=doctest_checker,
optionflags=doctest.REPORT_ONLY_FIRST_FAILURE))
+ suite.addTests(doctest.DocFileSuite('scenario_reporting_compensate.rst',
+ tearDown=doctest_teardown, encoding='utf-8',
+ checker=doctest_checker,
+ optionflags=doctest.REPORT_ONLY_FIRST_FAILURE))
return suite