Change the 347 cehck from party to tax, and change the calculation of the 347 registers. Now it's possible to have some invoices wih lines added in the 347 and lines without.

This commit is contained in:
Bernat Brunet Torruella 2019-11-26 10:15:20 +01:00
parent 05f9fc157f
commit 67ddb0f0bb
12 changed files with 271 additions and 342 deletions

View File

@ -4,14 +4,11 @@
from trytond.pool import Pool
from . import aeat
from . import invoice
from . import party
from . import tax
def register():
Pool.register(
party.Party,
party.PartyIdentifier,
aeat.Report,
aeat.PartyRecord,
aeat.PropertyRecord,
@ -23,8 +20,6 @@ def register():
invoice.Reasign347RecordEnd,
tax.TaxTemplate,
tax.Tax,
tax.TaxRuleTemplate,
tax.TaxRule,
module='aeat_347', type_='model')
Pool.register(
invoice.Recalculate347Record,

View File

@ -2,247 +2,340 @@
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<tryton>
<data depends="account_es" grouped="1">
<record model="account.tax.template" id="account_es.iva_X0_compras_bc">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_X0_compras_bi">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_X4_compras_bc">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_X4_compras_bi">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_X10_compras_bc">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_X10_compras_bi">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_X21_compras_bc">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_X21_compras_bi">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_X0">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_ISP_compras_16">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_ISP_reciclaje_0">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_ISP_obra_0">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_IO">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_IO_serv">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_dev_AI">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_dev_AI_serv">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_ded_AI">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_ded_AI_serv">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_IC_compras_4_bc">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_IC_compras_4_bc_1">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_IC_compras_4_bc_2">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_IC_compras_4_bi">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_IC_compras_4_bi_1">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_IC_compras_4_bi_2">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_IC_compras_4_servicios">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_IC_compras_4_servicios_1">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_IC_compras_4_servicios_2">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_IC_compras_10_bc">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_IC_compras_10_bc_1">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_IC_compras_10_bc_2">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_IC_compras_10_bi">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_IC_compras_10_bi_1">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_IC_compras_10_bi_2">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_IC_compras_10_servicios">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_IC_compras_10_servicios_1">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_IC_compras_10_servicios_2">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_IC_compras_21_bc">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_IC_compras_21_bc_1">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_IC_compras_21_bc_2">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_IC_compras_21_bi">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_IC_compras_21_bi_1">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_IC_compras_21_bi_2">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_IC_compras_21_ser">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_IC_compras_21_ser_1">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_IC_compras_21_ser_2">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_reagp_compras_12_1">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_ISP_compras">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_ISP_compras_1">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_ISP_compras_2">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_ISP_compras_bi">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_ISP_compras_bi_1">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_ISP_compras_bi_2">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_rep_no_sujeto">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_sop_no_sujeto">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
</data>
<data depends="account_es" grouped="1">
<record model="account.tax.template" id="account_es.iva_sop_ex">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_sop_4">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_sop_10">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_sop_21">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_sop_ex_inv">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_sop_4_inv">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_sop_10_inv">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_sop_21_inv">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_rep_ex">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_rep_0_asis">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_rep_0_ter_rus">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_rep_4">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_rep_10">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_rep_21">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_sop_alq_ex">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_rep_alq_ex">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_no_ded_4">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_no_ded_10">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
<record model="account.tax.template" id="account_es.iva_no_ded_21">
<field name="include_347" eval="True"/>
<field name="operation_347">base_amount</field>
</record>
</data>
<data depends="account_es" grouped="1">
<record model="account.tax.template" id="account_es.re_buy_05">
<field name="include_347" eval="True"/>
<field name="operation_347">amount_only</field>
</record>
<record model="account.tax.template" id="account_es.re_buy_14">
<field name="include_347" eval="True"/>
<field name="operation_347">amount_only</field>
</record>
<record model="account.tax.template" id="account_es.re_buy_52">
<field name="include_347" eval="True"/>
<field name="operation_347">amount_only</field>
</record>
<record model="account.tax.template" id="account_es.re_05">
<field name="include_347" eval="True"/>
<field name="operation_347">amount_only</field>
</record>
<record model="account.tax.template" id="account_es.re_14">
<field name="include_347" eval="True"/>
<field name="operation_347">amount_only</field>
</record>
<record model="account.tax.template" id="account_es.re_52">
<field name="include_347" eval="True"/>
<field name="operation_347">amount_only</field>
</record>
</data>
<data depends="account_es" grouped="1">
<record model="account.tax.template" id="account_es.irpf_1">
<field name="operation_347">exclude_invoice</field>
</record>
<record model="account.tax.template" id="account_es.irpf_2">
<field name="operation_347">exclude_invoice</field>
</record>
<record model="account.tax.template" id="account_es.irpf_7">
<field name="operation_347">exclude_invoice</field>
</record>
<record model="account.tax.template" id="account_es.irpf_9">
<field name="operation_347">exclude_invoice</field>
</record>
<record model="account.tax.template" id="account_es.irpf_15">
<field name="operation_347">exclude_invoice</field>
</record>
<record model="account.tax.template" id="account_es.irpf_18">
<field name="operation_347">exclude_invoice</field>
</record>
<record model="account.tax.template" id="account_es.irpf_19">
<field name="operation_347">exclude_invoice</field>
</record>
<record model="account.tax.template" id="account_es.irpf_195">
<field name="operation_347">exclude_invoice</field>
</record>
<record model="account.tax.template" id="account_es.irpf_20">
<field name="operation_347">exclude_invoice</field>
</record>
<record model="account.tax.template" id="account_es.irpf_21">
<field name="operation_347">exclude_invoice</field>
</record>
<record model="account.tax.template" id="account_es.irpf_35">
<field name="operation_347">exclude_invoice</field>
</record>
<record model="account.tax.template" id="account_es.irpf_37">
<field name="operation_347">exclude_invoice</field>
</record>
<record model="account.tax.template" id="account_es.irpf_19a">
<field name="operation_347">exclude_invoice</field>
</record>
<record model="account.tax.template" id="account_es.irpf_195a">
<field name="operation_347">exclude_invoice</field>
</record>
<record model="account.tax.template" id="account_es.irpf_20a">
<field name="operation_347">exclude_invoice</field>
</record>
<record model="account.tax.template" id="account_es.irpf_sale_1">
<field name="operation_347">exclude_invoice</field>
</record>
<record model="account.tax.template" id="account_es.irpf_sale_2">
<field name="operation_347">exclude_invoice</field>
</record>
<record model="account.tax.template" id="account_es.irpf_sale_7">
<field name="operation_347">exclude_invoice</field>
</record>
<record model="account.tax.template" id="account_es.irpf_sale_9">
<field name="operation_347">exclude_invoice</field>
</record>
<record model="account.tax.template" id="account_es.irpf_sale_15">
<field name="operation_347">exclude_invoice</field>
</record>
<record model="account.tax.template" id="account_es.irpf_sale_18">
<field name="operation_347">exclude_invoice</field>
</record>
<record model="account.tax.template" id="account_es.irpf_sale_19">
<field name="operation_347">exclude_invoice</field>
</record>
<record model="account.tax.template" id="account_es.irpf_sale_195">
<field name="operation_347">exclude_invoice</field>
</record>
<record model="account.tax.template" id="account_es.irpf_sale_20">
<field name="operation_347">exclude_invoice</field>
</record>
<record model="account.tax.template" id="account_es.irpf_sale_21">
<field name="operation_347">exclude_invoice</field>
</record>
<record model="account.tax.template" id="account_es.irpf_sale_35">
<field name="operation_347">exclude_invoice</field>
</record>
<record model="account.tax.template" id="account_es.irpf_sale_37">
<field name="operation_347">exclude_invoice</field>
</record>
<record model="account.tax.template" id="account_es.irpf_sale_19a">
<field name="operation_347">exclude_invoice</field>
</record>
<record model="account.tax.template" id="account_es.irpf_sale_195a">
<field name="operation_347">exclude_invoice</field>
</record>
<record model="account.tax.template" id="account_es.irpf_sale_20a">
<field name="operation_347">exclude_invoice</field>
</record>
</data>
</tryton>

View File

@ -21,6 +21,7 @@ __all__ = ['Report', 'PartyRecord', 'PropertyRecord']
_ZERO = Decimal('0.0')
OPERATION_KEY = [
('none', 'Leave Empty'),
('A', 'A - Good and service adquisitions above limit (1)'),
('B', 'B - Good and service deliveries above limit (1)'),
('C', 'C - Money collection on behavlf of third parties above '
@ -330,12 +331,10 @@ class Report(Workflow, ModelSQL, ModelView):
%s
FROM
aeat_347_record as r
LEFT JOIN party_party as p on p.id = r.party
WHERE
r.fiscalyear = %s and
(p.include_347 = true)
r.fiscalyear = %s
GROUP BY
r.party, r.operation_key, p.name
r.party, r.operation_key
HAVING
sum(amount) > %s
""" % (cls.aggregate_function(), report.fiscalyear.id,

View File

@ -1,14 +1,13 @@
# This file is part aeat_347 module for 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, fields
from trytond.wizard import Wizard, StateView, StateTransition, Button
from trytond.pool import Pool, PoolMeta
from trytond.pyson import Eval, Bool
from trytond.transaction import Transaction
from sql.operators import In
from .aeat import OPERATION_KEY
##from trytond.modules.aeat_347.aeat import OPERATION_KEY
__all__ = ['Record', 'Invoice', 'Recalculate347RecordStart',
'Recalculate347RecordEnd', 'Recalculate347Record', 'Reasign347RecordStart',
@ -80,64 +79,42 @@ class Record(ModelSQL, ModelView):
class Invoice(metaclass=PoolMeta):
__name__ = 'account.invoice'
include_347 = fields.Boolean('Include 347')
aeat347_operation_key = fields.Selection([('', ''), ] + OPERATION_KEY,
'AEAT 347 Operation Key',
states={
'invisible': ~Bool(Eval('include_347')),
'required': Bool(Eval('include_347')),
},
depends=['include_347'])
aeat347_operation_key = fields.Selection(OPERATION_KEY,
'AEAT 347 Operation Key')
@classmethod
def __register__(cls, module_name):
pool = Pool()
Record = pool.get('aeat.347.record')
TableHandler = backend.get('TableHandler')
cursor = Transaction().connection.cursor()
table = TableHandler(cls, module_name)
table_line = TableHandler(cls, 'account.invoice.line')
table = cls.__table_handler__(module_name)
sql_table = cls.__table__()
record_table = Record.__table__()
exist_347 = table.column_exist('include_347')
super(Invoice, cls).__register__(module_name)
if exist_347:
table.drop_column('include_347')
cursor.execute(*sql_table.update(
columns=[sql_table.aeat347_operation_key],
values=['none'],
where=(sql_table.aeat347_operation_key == '')
| (sql_table.aeat347_operation_key == None)))
# Migration: moved 347 check mark from invoice line to invoice
if not exist_347:
cursor.execute(*record_table.select(record_table.invoice,
record_table.operation_key))
for invoice_id, operation_key in cursor.fetchall():
cursor.execute(*sql_table.update(
columns=[sql_table.include_347,
sql_table.aeat347_operation_key],
values=[True, operation_key],
where=sql_table.id == invoice_id))
table_line.drop_column('include_347')
table_line.drop_column('aeat347_operation_key')
@classmethod
def __setup__(cls):
super(Invoice, cls).__setup__()
cls._check_modify_exclude += ['aeat347_operation_key']
def on_change_party(self):
super(Invoice, self).on_change_party()
self.include_347 = self.on_change_with_include_347()
self.aeat347_operation_key = \
self.on_change_with_aeat347_operation_key()
@staticmethod
def default_aeat347_operation_key():
return None
@fields.depends('party')
def on_change_with_include_347(self, name=None):
return self.party.include_347 if self.party else False
@fields.depends('type', 'aeat347_operation_key', 'include_347')
@fields.depends('type', 'aeat347_operation_key')
def on_change_with_aeat347_operation_key(self):
if not self.include_347:
return ''
if self.aeat347_operation_key:
return self.aeat347_operation_key
if self.type:
return self.get_aeat347_operation_key(self.type)
else:
return ''
return None
@classmethod
def get_aeat347_operation_key(cls, invoice_type):
@ -149,10 +126,11 @@ class Invoice(metaclass=PoolMeta):
amount = 0
for tax in self.taxes:
if tax.tax.include_347 and (hasattr(tax.tax, 'recargo_equivalencia')
and tax.tax.recargo_equivalencia):
if tax.tax.operation_347 in ('ignore', 'exclude_invoice'):
continue
if tax.tax.operation_347 == 'amount_only':
amount += tax.amount
elif tax.tax.include_347:
elif tax.tax.operation_347 == 'base_amount':
amount += (tax.base + tax.amount)
if amount > self.total_amount:
amount = self.total_amount
@ -163,10 +141,22 @@ class Invoice(metaclass=PoolMeta):
return amount
def check_347_taxes(self):
include = False
for tax in self.taxes:
if not tax.tax.include_347:
if tax.tax.operation_347 == 'exclude_invoice':
return False
return True
if tax.tax.operation_347 != 'ignore':
include = True
return include
@fields.depends('type', 'aeat347_operation_key')
def _on_change_lines_taxes(self):
super(Invoice, self)._on_change_lines_taxes()
if not self.check_347_taxes():
self.aeat347_operation_key = None
elif not self.aeat347_operation_key:
self.aeat347_operation_key = self.get_aeat347_operation_key(
self.type)
@classmethod
def create_aeat347_records(cls, invoices):
@ -177,12 +167,17 @@ class Invoice(metaclass=PoolMeta):
to_create = {}
to_update = []
for invoice in invoices:
if (not invoice.move or invoice.state == 'cancel' or
not invoice.include_347):
if (not invoice.move or invoice.state == 'cancel'):
continue
if not invoice.check_347_taxes():
invoice.aeat347_operation_key = None
to_update.append(invoice)
continue
if not invoice.aeat347_operation_key:
invoice.aeat347_operation_key = \
invoice.get_aeat347_operation_key(invoice.type)
to_update.append(invoice)
if invoice.aeat347_operation_key:
operation_key = invoice.aeat347_operation_key
amount = invoice.get_aeat347_total_amount()
@ -209,10 +204,8 @@ class Invoice(metaclass=PoolMeta):
Record.delete_record(invoices)
with Transaction().set_context(check_modify_invoice=False):
cls.write(to_update, {
'aeat347_operation_key': None,
'include_347': False,
})
cls.save(to_update)
#cls.save(cls.browse([x.id for x in to_update]))
with Transaction().set_user(0, set_context=True):
Record.create(to_create.values())
@ -222,34 +215,6 @@ class Invoice(metaclass=PoolMeta):
if check:
super(Invoice, cls).check_modify(invoices)
@classmethod
def create(cls, vlist):
Party = Pool().get('party.party')
vlist = [x.copy() for x in vlist]
party_ids = set()
for vals in vlist:
if 'include_347' not in vals:
party_ids.add(vals['party'])
if party_ids:
with Transaction().set_context(active_test=False):
parties = dict([(x.id, x.include_347) for x in Party.search([
('id', 'in', list(party_ids))])])
for vals in vlist:
if 'include_347' not in vals:
party_id = vals['party']
vals['include_347'] = parties[party_id]
if not vals.get('include_347', True):
continue
invoice_type = vals.get('type', 'out')
vals['aeat347_operation_key'] = cls.get_aeat347_operation_key(
invoice_type)
return super(Invoice, cls).create(vlist)
@classmethod
def draft(cls, invoices):
pool = Pool()
@ -313,13 +278,13 @@ class Reasign347RecordStart(ModelView):
"""
__name__ = "aeat.347.reasign.records.start"
aeat_347_operation_key = fields.Selection([('none', 'Leave Empty'), ] +
OPERATION_KEY, 'Operation Key', required=True)
aeat347_operation_key = fields.Selection(OPERATION_KEY, 'Operation Key',
required=True)
include_347 = fields.Boolean('Include 347')
@staticmethod
def default_aeat_347_operation_key():
return 'none'
def default_aeat347_operation_key():
return None
class Reasign347RecordEnd(ModelView):
@ -351,16 +316,11 @@ class Reasign347Record(Wizard):
invoice_ids = Transaction().context['active_ids']
invoices = Invoice.browse(invoice_ids)
value = self.start.aeat_347_operation_key
include = self.start.include_347
if value == 'none' or not include:
value = None
value = self.start.aeat347_operation_key
invoice = Invoice.__table__()
# Update to allow to modify key for posted invoices
cursor.execute(*invoice.update(columns=[invoice.aeat347_operation_key,
invoice.include_347],
values=[value, include], where=In(invoice.id, invoice_ids)))
cursor.execute(*invoice.update(columns=[invoice.aeat347_operation_key,],
values=[value], where=In(invoice.id, invoice_ids)))
Invoice.create_aeat347_records(invoices)

View File

@ -22,7 +22,7 @@ msgctxt "field:aeat.347.reasign.records.end,id:"
msgid "ID"
msgstr "ID"
msgctxt "field:aeat.347.reasign.records.start,aeat_347_operation_key:"
msgctxt "field:aeat.347.reasign.records.start,aeat347_operation_key:"
msgid "Operation Key"
msgstr "Clau operació"
@ -778,37 +778,37 @@ msgctxt "selection:account.invoice,aeat347_operation_key:"
msgid "G - Travel Agency Purchases"
msgstr "G - Compres a agències de viatge"
msgctxt "selection:aeat.347.reasign.records.start,aeat_347_operation_key:"
msgctxt "selection:aeat.347.reasign.records.start,aeat347_operation_key:"
msgid "A - Good and service adquisitions above limit (1)"
msgstr "A - Adquisicions de bens i serveis superiors al límit (1)"
msgctxt "selection:aeat.347.reasign.records.start,aeat_347_operation_key:"
msgctxt "selection:aeat.347.reasign.records.start,aeat347_operation_key:"
msgid "B - Good and service deliveries above limit (1)"
msgstr "B - Entregues de bens i serveis superiors al límit (1)"
msgctxt "selection:aeat.347.reasign.records.start,aeat_347_operation_key:"
msgctxt "selection:aeat.347.reasign.records.start,aeat347_operation_key:"
msgid "C - Money collection on behavlf of third parties above limit (3)"
msgstr "C - Cobraments per compte de tercers superiors al límit (3)"
msgctxt "selection:aeat.347.reasign.records.start,aeat_347_operation_key:"
msgctxt "selection:aeat.347.reasign.records.start,aeat347_operation_key:"
msgid "D - Adquisitions by Public Institutions (...) above limit (1)"
msgstr ""
"D - Adquisicions d'institucions públiques (...) superiors al límit (1)"
msgctxt "selection:aeat.347.reasign.records.start,aeat_347_operation_key:"
msgctxt "selection:aeat.347.reasign.records.start,aeat347_operation_key:"
msgid "E - Grants and help made by public institutions above limit (1)"
msgstr ""
"E - Ajudes i subvencions d'administracions públiques superiors al límit (1)"
msgctxt "selection:aeat.347.reasign.records.start,aeat_347_operation_key:"
msgctxt "selection:aeat.347.reasign.records.start,aeat347_operation_key:"
msgid "F - Travel Agency Sales"
msgstr "F - Vendes a agències de viatge"
msgctxt "selection:aeat.347.reasign.records.start,aeat_347_operation_key:"
msgctxt "selection:aeat.347.reasign.records.start,aeat347_operation_key:"
msgid "G - Travel Agency Purchases"
msgstr "G - Compres a agències de viatge"
msgctxt "selection:aeat.347.reasign.records.start,aeat_347_operation_key:"
msgctxt "selection:aeat.347.reasign.records.start,aeat347_operation_key:"
msgid "Leave Empty"
msgstr "Deixar en blanc"

View File

@ -22,7 +22,7 @@ msgctxt "field:aeat.347.reasign.records.end,id:"
msgid "ID"
msgstr "ID"
msgctxt "field:aeat.347.reasign.records.start,aeat_347_operation_key:"
msgctxt "field:aeat.347.reasign.records.start,aeat347_operation_key:"
msgid "Operation Key"
msgstr "Clave operación"
@ -777,39 +777,39 @@ msgstr "F - Ventas a agencias de viajes"
msgctxt "selection:account.invoice,aeat347_operation_key:"
msgid "G - Travel Agency Purchases"
msgstr "F - Compras a agencias de viajes"
msgstr "G - Compras a agencias de viajes"
msgctxt "selection:aeat.347.reasign.records.start,aeat_347_operation_key:"
msgctxt "selection:aeat.347.reasign.records.start,aeat347_operation_key:"
msgid "A - Good and service adquisitions above limit (1)"
msgstr "A - Adquisiciones de bienes y servicios superiores al límite (1)"
msgctxt "selection:aeat.347.reasign.records.start,aeat_347_operation_key:"
msgctxt "selection:aeat.347.reasign.records.start,aeat347_operation_key:"
msgid "B - Good and service deliveries above limit (1)"
msgstr "B - Entregas de bienes y servicios superiores al límite (1)"
msgctxt "selection:aeat.347.reasign.records.start,aeat_347_operation_key:"
msgctxt "selection:aeat.347.reasign.records.start,aeat347_operation_key:"
msgid "C - Money collection on behavlf of third parties above limit (3)"
msgstr "C - Cobros por cuenta de terceros superiores al límite (3)"
msgctxt "selection:aeat.347.reasign.records.start,aeat_347_operation_key:"
msgctxt "selection:aeat.347.reasign.records.start,aeat347_operation_key:"
msgid "D - Adquisitions by Public Institutions (...) above limit (1)"
msgstr "D - Adquisiciones de instituciones públicas superiores al límite (1)"
msgctxt "selection:aeat.347.reasign.records.start,aeat_347_operation_key:"
msgctxt "selection:aeat.347.reasign.records.start,aeat347_operation_key:"
msgid "E - Grants and help made by public institutions above limit (1)"
msgstr ""
"E - Subvenciones y ayudas satisfechas por administraciones públicas "
"superiores al límite (1)"
msgctxt "selection:aeat.347.reasign.records.start,aeat_347_operation_key:"
msgctxt "selection:aeat.347.reasign.records.start,aeat347_operation_key:"
msgid "F - Travel Agency Sales"
msgstr "F - Ventas a agencias de viajes"
msgctxt "selection:aeat.347.reasign.records.start,aeat_347_operation_key:"
msgctxt "selection:aeat.347.reasign.records.start,aeat347_operation_key:"
msgid "G - Travel Agency Purchases"
msgstr "F - Compras a agencias de viajes"
msgstr "G - Compras a agencias de viajes"
msgctxt "selection:aeat.347.reasign.records.start,aeat_347_operation_key:"
msgctxt "selection:aeat.347.reasign.records.start,aeat347_operation_key:"
msgid "Leave Empty"
msgstr "Dejar en blanco"

52
tax.py
View File

@ -3,58 +3,34 @@
from trytond.model import fields
from trytond.pool import PoolMeta
__all__ = ['TaxTemplate', 'Tax', 'TaxRuleTemplate', 'TaxRule']
__all__ = ['TaxTemplate', 'Tax']
OPERATION_347 = [
(None, ''),
('base_amount', 'Include Base Amount'),
('amount_only', 'Amount Only'),
('ignore', 'Ignore'),
('exclude_invoice', 'Exclude Invoice')]
class TaxTemplate(metaclass=PoolMeta):
__name__ = 'account.tax.template'
include_347 = fields.Boolean('Include 347')
operation_347 = fields.Selection(OPERATION_347, 'Operation for 347')
@staticmethod
def default_include_347():
return False
def default_operation_347():
return 'ignore'
def _get_tax_value(self, tax=None):
res = super(TaxTemplate, self)._get_tax_value(tax)
if not tax or tax.include_347 != self.include_347:
res['include_347'] = self.include_347
if not tax or tax.operation_347 != self.operation_347:
res['operation_347'] = self.operation_347
return res
class Tax(metaclass=PoolMeta):
__name__ = 'account.tax'
include_347 = fields.Boolean('Include 347')
@staticmethod
def default_include_347():
return False
class TaxRuleTemplate(metaclass=PoolMeta):
__name__ = 'account.tax.rule.template'
include_347 = fields.Boolean('Include 347')
@staticmethod
def default_include_347():
return False
def _get_tax_rule_value(self, rule=None):
res = super(TaxRuleTemplate, self)._get_tax_rule_value(rule)
if not rule or rule.include_347 != self.include_347:
res['include_347'] = self.include_347
return res
class TaxRule(metaclass=PoolMeta):
__name__ = 'account.tax.rule'
include_347 = fields.Boolean('Include 347')
@staticmethod
def default_include_347():
return False
operation_347 = fields.Selection(OPERATION_347, 'Operation for 347')

96
tax.xml
View File

@ -8,98 +8,10 @@ contains the full copyright notices and license terms. -->
<field name="inherit" ref="account.tax_view_form"/>
<field name="name">tax_form</field>
</record>
<record model="ir.ui.view" id="tax_rule_view_form">
<field name="model">account.tax.rule</field>
<field name="inherit" ref="account.tax_rule_view_form"/>
<field name="name">tax_rule_form</field>
</record>
</data>
<data depends="account_es" grouped="1">
<record model="account.tax.rule.template" id="account_es.fp_nacional">
<field name="include_347" eval="True"/>
</record>
<record model="account.tax.rule.template" id="fp_nacional_wo_347">
<field name="name">Régimen Nacional (Sin 347)</field>
<field name="account" ref="account_es.pgc_0"/>
<field name="kind">both</field>
<field name="include_347" eval="False"/>
</record>
<record model="account.tax.rule.template" id="account_es.fp_recargo">
<field name="include_347" eval="True"/>
</record>
<record model="account.tax.rule.template" id="account_es.fp_extra">
<field name="include_347" eval="True"/>
</record>
<record model="account.tax.rule.template" id="account_es.fp_intra">
<field name="include_347" eval="True"/>
</record>
<record model="account.tax.rule.template" id="account_es.fp_intra_serv">
<field name="include_347" eval="True"/>
</record>
<record model="account.tax.rule.template" id="account_es.fp_irpf37">
<field name="include_347" eval="False"/>
</record>
<record model="account.tax.rule.template" id="account_es.fp_irpf35">
<field name="include_347" eval="False"/>
</record>
<record model="account.tax.rule.template" id="account_es.fp_irpf21">
<field name="include_347" eval="False"/>
</record>
<record model="account.tax.rule.template" id="account_es.fp_irpf20">
<field name="include_347" eval="False"/>
</record>
<record model="account.tax.rule.template" id="account_es.fp_irpf20a">
<field name="include_347" eval="False"/>
</record>
<record model="account.tax.rule.template" id="account_es.fp_irpf195">
<field name="include_347" eval="False"/>
</record>
<record model="account.tax.rule.template" id="account_es.fp_irpf195a">
<field name="include_347" eval="False"/>
</record>
<record model="account.tax.rule.template" id="account_es.fp_irpf19">
<field name="include_347" eval="False"/>
</record>
<record model="account.tax.rule.template" id="account_es.fp_irpf19a">
<field name="include_347" eval="False"/>
</record>
<record model="account.tax.rule.template" id="account_es.fp_irpf18">
<field name="include_347" eval="False"/>
</record>
<record model="account.tax.rule.template" id="account_es.fp_irpf15">
<field name="include_347" eval="False"/>
</record>
<record model="account.tax.rule.template" id="account_es.fp_irpf9">
<field name="include_347" eval="False"/>
</record>
<record model="account.tax.rule.template" id="account_es.fp_irpf7">
<field name="include_347" eval="False"/>
</record>
<record model="account.tax.rule.template" id="account_es.fp_irpf2">
<field name="include_347" eval="False"/>
</record>
<record model="account.tax.rule.template" id="account_es.fp_irpf1">
<field name="include_347" eval="False"/>
</record>
<record model="account.tax.rule.template" id="account_es.fp_reagp">
<field name="include_347" eval="False"/>
</record>
<record model="account.tax.rule.template" id="account_es.fp_exento">
<field name="include_347" eval="True"/>
</record>
<record model="account.tax.rule.template" id="account_es.fp_exento_ter_rus">
<field name="include_347" eval="True"/>
</record>
<record model="account.tax.rule.template" id="account_es.fp_exento_asis">
<field name="include_347" eval="True"/>
</record>
<record model="account.tax.rule.template" id="account_es.fp_isp_reciclaje">
<field name="include_347" eval="True"/>
</record>
<record model="account.tax.rule.template" id="account_es.fp_isp_obra">
<field name="include_347" eval="True"/>
<record model="ir.ui.view" id="tax_template_view_form">
<field name="model">account.tax.template</field>
<field name="inherit" ref="account.tax_template_view_form"/>
<field name="name">tax_template_form</field>
</record>
</data>
</tryton>

View File

@ -7,8 +7,6 @@ depends:
xml:
aeat.xml
invoice.xml
party.xml
tax.xml
account_es.xml
message.xml

View File

@ -2,10 +2,8 @@
<!--The COPYRIGHT file at the top level of this repository
contains the full copyright notices and license terms. -->
<data>
<xpath expr="/form/notebook/page[@id='info']/field[@name='cancel_move']" position="after">
<xpath expr="/form/notebook/page[@id='info']/separator[@name='comment']" position="before">
<group col="4" colspan="4" id="aeat_347">
<label name="include_347"/>
<field name="include_347"/>
<label name="aeat347_operation_key"/>
<field name="aeat347_operation_key"/>
</group>

View File

@ -2,9 +2,7 @@
<!--The COPYRIGHT file at the top level of this repository
contains the full copyright notices and license terms. -->
<form col="2">
<label name="include_347"/>
<field name="include_347"/>
<label string="Select Operation Key to reasign invoices:"
id="reasing"/>
<field name="aeat_347_operation_key"/>
<field name="aeat347_operation_key"/>
</form>

View File

@ -4,7 +4,7 @@ contains the full copyright notices and license terms. -->
<data>
<xpath expr="/form/notebook/page[@id='general']/field[@name='credit_note_account']" position="after">
<newline/>
<label name="include_347"/>
<field name="include_347"/>
<label name="operation_347"/>
<field name="operation_347"/>
</xpath>
</data>