Add new model to store SII tax lines

This commit is contained in:
Daniel Möller 2017-06-13 16:57:59 +02:00
parent 67facca5ac
commit b5c6ab257f
5 changed files with 287 additions and 212 deletions

View File

@ -21,6 +21,7 @@ def register():
load_pkcs12.LoadPKCS12Start,
aeat.SIIReport,
aeat.SIIReportLine,
aeat.SIIReportLineTax,
aeat_mapping.IssuedTrytonInvoiceMapper,
aeat_mapping.RecievedTrytonInvoiceMapper,
module='aeat_sii', type_='model')

52
aeat.py
View File

@ -5,6 +5,7 @@
__all__ = [
'SIIReport',
'SIIReportLine',
'SIIReportLineTax',
]
import unicodedata
@ -24,6 +25,10 @@ _logger = getLogger(__name__)
_ZERO = Decimal('0.0')
def _decimal(x):
return Decimal(x) if x is not None else None
COMMUNICATION_TYPE = [ # L0
('A0', 'New Invoices'),
('A1', 'Modify Invoices'),
@ -543,6 +548,17 @@ class SIIReport(Workflow, ModelSQL, ModelView):
reg.DatosFacturaEmitida.
ClaveRegimenEspecialOTrascendencia),
total_amount=reg.DatosFacturaEmitida.ImporteTotal,
taxes=tuple(
SIIReportLineTax(
base=_decimal(detail.BaseImponible),
rate=_decimal(detail.TipoImpositivo),
amount=_decimal(detail.CuotaRepercutida),
surcharge_rate=_decimal(detail.TipoRecargoEquivalencia),
surcharge_amount=_decimal(detail.CuotaRecargoEquivalencia),
)
for detail in reg.DatosFacturaEmitida.TipoDesglose.
DesgloseFactura.Sujeta.NoExenta.DesgloseIVA.DetalleIVA
),
counterpart_name=(
reg.DatosFacturaEmitida.Contraparte.NombreRazon),
counterpart_id=(
@ -617,6 +633,7 @@ class SIIReport(Workflow, ModelSQL, ModelView):
pool = Pool()
Invoice = pool.get('account.invoice')
SIIReportLine = pool.get('aeat.sii.report.lines')
SIIReportLineTax = pool.get('aeat.sii.report.line.tax')
headers = mapping.get_headers(
name=self.company.party.name,
vat=self.company.party.vat_number,
@ -662,6 +679,19 @@ class SIIReport(Workflow, ModelSQL, ModelView):
reg.DatosFacturaRecibida.
ClaveRegimenEspecialOTrascendencia),
total_amount=reg.DatosFacturaRecibida.ImporteTotal,
taxes=tuple(
SIIReportLineTax(
base=_decimal(detail.BaseImponible),
rate=_decimal(detail.TipoImpositivo),
amount=_decimal(detail.CuotaSoportada),
surcharge_rate=_decimal(detail.TipoRecargoEquivalencia),
surcharge_amount=_decimal(detail.CuotaRecargoEquivalencia),
reagyp_rate=_decimal(detail.PorcentCompensacionREAGYP),
reagyp_amount=_decimal(detail.ImporteCompensacionREAGYP),
)
for detail in reg.DatosFacturaRecibida.
DesgloseFactura.DesgloseIVA.DetalleIVA
),
counterpart_name=(
reg.DatosFacturaRecibida.Contraparte.NombreRazon),
counterpart_id=(
@ -702,7 +732,8 @@ class SIIReportLine(ModelSQL, ModelView):
total_amount = fields.Numeric('Total Amount', readonly=True)
counterpart_name = fields.Char('Counterpart Name', readonly=True)
counterpart_id = fields.Char('Counterpart ID', readonly=True)
# TODO: tax lines
taxes = fields.One2Many(
'aeat.sii.report.line.tax', 'line', 'Tax Lines', readonly=True)
presenter = fields.Char('Presenter', readonly=True)
presentation_date = fields.Char('Presentation Date', readonly=True)
csv = fields.Char('CSV', readonly=True)
@ -742,6 +773,7 @@ class SIIReportLine(ModelSQL, ModelView):
default['invoice_kind'] = None
default['special_key'] = None
default['total_amount'] = None
default['taxes'] = None
default['counterpart_name'] = None
default['counterpart_id'] = None
default['presenter'] = None
@ -749,3 +781,21 @@ class SIIReportLine(ModelSQL, ModelView):
default['csv'] = None
default['balance_state'] = None
return super(SIIReportLine, cls).copy(records, default=default)
class SIIReportLineTax(ModelSQL, ModelView):
'''
SII Report Line Tax
'''
__name__ = 'aeat.sii.report.line.tax'
line = fields.Many2One(
'aeat.sii.report.lines', 'Report Line', ondelete='CASCADE')
base = fields.Numeric('Base', readonly=True)
rate = fields.Numeric('Rate', readonly=True)
amount = fields.Numeric('Amount', readonly=True)
surcharge_rate = fields.Numeric('Surcharge Rate', readonly=True)
surcharge_amount = fields.Numeric('Surcharge Amount', readonly=True)
reagyp_rate = fields.Numeric('REAGYP Rate', readonly=True)
reagyp_amount = fields.Numeric('REAGYP Amount', readonly=True)

364
aeat.xml
View File

@ -3,195 +3,205 @@
copyright notices and license terms. -->
<tryton>
<data>
<record model="res.group" id="group_aeat_sii_admin">
<field name="name">AEAT SII Administration</field>
</record>
<record model="res.user-res.group" id="user_admin_group_aeat_sii_admin">
<field name="user" ref="res.user_admin"/>
<field name="group" ref="group_aeat_sii_admin"/>
</record>
<record model="res.user-res.group" id="user_trigger_group_aeat_sii_admin">
<field name="user" ref="res.user_trigger"/>
<field name="group" ref="group_aeat_sii_admin"/>
</record>
<record model="ir.ui.view" id="aeat_sii_report_form_view">
<field name="model">aeat.sii.report</field>
<field name="type">form</field>
<field name="name">sii_report_form</field>
</record>
<record model="ir.ui.view" id="aeat_sii_report_tree_view">
<field name="model">aeat.sii.report</field>
<field name="type">tree</field>
<field name="name">sii_report_list</field>
</record>
<record model="ir.action.act_window" id="act_aeat_sii_report">
<field name="name">SII Report</field>
<field name="res_model">aeat.sii.report</field>
<field name="search_value"></field>
</record>
<record model="ir.action.act_window.view" id="act_aeat_sii_report_view1">
<field name="sequence" eval="10"/>
<field name="view" ref="aeat_sii_report_tree_view"/>
<field name="act_window" ref="act_aeat_sii_report"/>
</record>
<record model="ir.action.act_window.view" id="act_aeat_sii_report_view2">
<field name="sequence" eval="20"/>
<field name="view" ref="aeat_sii_report_form_view"/>
<field name="act_window" ref="act_aeat_sii_report"/>
</record>
<record model="ir.model.access" id="access_aeat_sii_report">
<field name="model" search="[('model', '=', 'aeat.sii.report')]"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="False"/>
<field name="perm_create" eval="False"/>
<field name="perm_delete" eval="False"/>
</record>
<record model="ir.model.access" id="access_aeat_sii_report_admin">
<field name="model" search="[('model', '=', 'aeat.sii.report')]"/>
<field name="group" ref="group_aeat_sii_admin"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
<field name="perm_create" eval="True"/>
<field name="perm_delete" eval="True"/>
</record>
<record model="res.group" id="group_aeat_sii_admin">
<field name="name">AEAT SII Administration</field>
</record>
<record model="res.user-res.group" id="user_admin_group_aeat_sii_admin">
<field name="user" ref="res.user_admin"/>
<field name="group" ref="group_aeat_sii_admin"/>
</record>
<record model="res.user-res.group" id="user_trigger_group_aeat_sii_admin">
<field name="user" ref="res.user_trigger"/>
<field name="group" ref="group_aeat_sii_admin"/>
</record>
<!-- aeat.sii.report.issued -->
<record model="ir.ui.view" id="aeat_sii_report_line_form_view">
<field name="model">aeat.sii.report.lines</field>
<field name="type">form</field>
<field name="name">sii_report_lines_form</field>
</record>
<record model="ir.ui.view" id="aeat_sii_report_line_tree_view">
<field name="model">aeat.sii.report.lines</field>
<field name="type">tree</field>
<field name="name">sii_report_lines_list</field>
</record>
<record model="ir.action.act_window" id="act_aeat_sii_report_line">
<field name="name">AEAT SII Report Lines</field>
<field name="res_model">aeat.sii.report.lines</field>
<field name="search_value"></field>
</record>
<record model="ir.action.act_window.view" id="act_aeat_sii_report_line_view1">
<field name="sequence" eval="10"/>
<field name="view" ref="aeat_sii_report_line_tree_view"/>
<field name="act_window" ref="act_aeat_sii_report_line"/>
</record>
<record model="ir.action.act_window.view" id="act_aeat_sii_report_line_view2">
<field name="sequence" eval="20"/>
<field name="view" ref="aeat_sii_report_line_form_view"/>
<field name="act_window" ref="act_aeat_sii_report_line"/>
</record>
<record model="ir.model.access" id="access_aeat_sii_report_line">
<field name="model" search="[('model', '=', 'aeat.sii.report.lines')]"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="False"/>
<field name="perm_create" eval="False"/>
<field name="perm_delete" eval="False"/>
</record>
<record model="ir.model.access" id="access_aeat_sii_report_line_admin">
<field name="model" search="[('model', '=', 'aeat.sii.report.lines')]"/>
<field name="group" ref="group_aeat_sii_admin"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
<field name="perm_create" eval="True"/>
<field name="perm_delete" eval="True"/>
</record>
<record model="ir.rule.group" id="rule_group_sii_report">
<field name="model" search="[('model', '=', 'aeat.sii.report')]"/>
<field name="global_p" eval="True"/>
</record>
<record model="ir.rule" id="rule_sii_report1">
<field name="domain" eval="[('company', '=', Eval('user' ,{}).get('company', None))]" pyson="1" />
<field name="rule_group" ref="rule_group_sii_report"/>
</record>
<record model="ir.rule.group" id="rule_group_sii_report_line">
<field name="model" search="[('model', '=', 'aeat.sii.report.lines')]"/>
<field name="global_p" eval="True"/>
</record>
<record model="ir.rule" id="rule_sii_report_line1">
<field name="domain" eval="[('company', '=',Eval('user', {}).get('company', None))]" pyson="1"/>
<field name="rule_group" ref="rule_group_sii_report_line"/>
</record>
<record model="ir.ui.view" id="aeat_sii_report_form_view">
<field name="model">aeat.sii.report</field>
<field name="type">form</field>
<field name="name">sii_report_form</field>
</record>
<record model="ir.ui.view" id="aeat_sii_report_tree_view">
<field name="model">aeat.sii.report</field>
<field name="type">tree</field>
<field name="name">sii_report_list</field>
</record>
<record model="ir.action.act_window" id="act_aeat_sii_report">
<field name="name">SII Report</field>
<field name="res_model">aeat.sii.report</field>
<field name="search_value"></field>
</record>
<record model="ir.action.act_window.view" id="act_aeat_sii_report_view1">
<field name="sequence" eval="10"/>
<field name="view" ref="aeat_sii_report_tree_view"/>
<field name="act_window" ref="act_aeat_sii_report"/>
</record>
<record model="ir.action.act_window.view" id="act_aeat_sii_report_view2">
<field name="sequence" eval="20"/>
<field name="view" ref="aeat_sii_report_form_view"/>
<field name="act_window" ref="act_aeat_sii_report"/>
</record>
<record model="ir.model.access" id="access_aeat_sii_report">
<field name="model" search="[('model', '=', 'aeat.sii.report')]"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="False"/>
<field name="perm_create" eval="False"/>
<field name="perm_delete" eval="False"/>
</record>
<record model="ir.model.access" id="access_aeat_sii_report_admin">
<field name="model" search="[('model', '=', 'aeat.sii.report')]"/>
<field name="group" ref="group_aeat_sii_admin"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
<field name="perm_create" eval="True"/>
<field name="perm_delete" eval="True"/>
</record>
<record model="ir.model.button" id="load_invoices_button">
<field name="name">load_invoices</field>
<field name="model" search="[('model', '=', 'aeat.sii.report')]"/>
</record>
<!-- aeat.sii.report.issued -->
<record model="ir.ui.view" id="aeat_sii_report_line_form_view">
<field name="model">aeat.sii.report.lines</field>
<field name="type">form</field>
<field name="name">sii_report_lines_form</field>
</record>
<record model="ir.model.button-res.group"
id="load_invoices_admin">
<field name="button" ref="load_invoices_button"/>
<field name="group" ref="group_aeat_sii_admin"/>
</record>
<record model="ir.ui.view" id="aeat_sii_report_line_tree_view">
<field name="model">aeat.sii.report.lines</field>
<field name="type">tree</field>
<field name="name">sii_report_lines_list</field>
</record>
<record model="ir.action.act_window" id="act_aeat_sii_report_line">
<field name="name">AEAT SII Report Lines</field>
<field name="res_model">aeat.sii.report.lines</field>
<field name="search_value"></field>
</record>
<record model="ir.action.act_window.view" id="act_aeat_sii_report_line_view1">
<field name="sequence" eval="10"/>
<field name="view" ref="aeat_sii_report_line_tree_view"/>
<field name="act_window" ref="act_aeat_sii_report_line"/>
</record>
<record model="ir.action.act_window.view" id="act_aeat_sii_report_line_view2">
<field name="sequence" eval="20"/>
<field name="view" ref="aeat_sii_report_line_form_view"/>
<field name="act_window" ref="act_aeat_sii_report_line"/>
</record>
<menuitem id="menu_aeat_sii_report_menu"
sequence="999" parent="account.menu_reporting"
name="AEAT SII"/>
<record model="ir.model.access" id="access_aeat_sii_report_line">
<field name="model" search="[('model', '=', 'aeat.sii.report.lines')]"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="False"/>
<field name="perm_create" eval="False"/>
<field name="perm_delete" eval="False"/>
</record>
<record model="ir.model.access" id="access_aeat_sii_report_line_admin">
<field name="model" search="[('model', '=', 'aeat.sii.report.lines')]"/>
<field name="group" ref="group_aeat_sii_admin"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="True"/>
<field name="perm_create" eval="True"/>
<field name="perm_delete" eval="True"/>
</record>
<menuitem action="act_aeat_sii_report" id="menu_aeat_sii_report"
parent="menu_aeat_sii_report_menu" sequence="999"
name="AEAT SII Report"/>
<record model="ir.ui.view" id="aeat_sii_report_line_tax_tree_view">
<field name="model">aeat.sii.report.line.tax</field>
<field name="type">tree</field>
<field name="name">sii_report_line_tax_list</field>
</record>
<record model="ir.action.act_window" id="act_aeat_sii_issued_report">
<field name="name">SII Report Issued</field>
<field name="res_model">aeat.sii.report</field>
<field name="domain" eval="[('book', '=', 'E')]" pyson="1"/>
<field name="search_value"></field>
</record>
<menuitem action="act_aeat_sii_issued_report"
id="menu_aeat_sii_report_issued"
parent="menu_aeat_sii_report_menu" sequence="10"
name="AEAT SII Report Issued"/>
<record model="ir.action.act_window" id="act_aeat_sii_invest_report">
<field name="name">SII Report Invest</field>
<field name="res_model">aeat.sii.report</field>
<field name="domain" eval="[('book', '=', 'I')]" pyson="1"/>
<field name="search_value"></field>
</record>
<menuitem action="act_aeat_sii_invest_report"
id="menu_aeat_sii_report_invest"
parent="menu_aeat_sii_report_menu" sequence="10"
name="AEAT SII Report Invest"/>
<record model="ir.rule.group" id="rule_group_sii_report">
<field name="model" search="[('model', '=', 'aeat.sii.report')]"/>
<field name="global_p" eval="True"/>
</record>
<record model="ir.rule" id="rule_sii_report1">
<field name="domain">[('company', '=', user.company.id if user.company else None)]</field>
<field name="rule_group" ref="rule_group_sii_report"/>
</record>
<record model="ir.action.act_window" id="act_aeat_sii_received_report">
<field name="name">SII Report Received</field>
<field name="res_model">aeat.sii.report</field>
<field name="domain" eval="[('book', '=', 'R')]" pyson="1"/>
<record model="ir.rule.group" id="rule_group_sii_report_line">
<field name="model" search="[('model', '=', 'aeat.sii.report.lines')]"/>
<field name="global_p" eval="True"/>
</record>
<record model="ir.rule" id="rule_sii_report_line1">
<field name="domain">[('company', '=', user.company.id if user.company else None)]</field>
<field name="rule_group" ref="rule_group_sii_report_line"/>
</record>
<field name="search_value"></field>
</record>
<menuitem action="act_aeat_sii_received_report"
id="menu_aeat_sii_report_received"
parent="menu_aeat_sii_report_menu" sequence="10"
name="AEAT SII Report Received"/>
<record model="ir.action.act_window" id="act_aeat_sii_intra_report">
<field name="name">SII Report Intracommunity</field>
<field name="res_model">aeat.sii.report</field>
<field name="domain" eval="[('book', '=', 'U')]" pyson="1"/>
<field name="search_value"></field>
</record>
<menuitem action="act_aeat_sii_intra_report"
id="menu_aeat_sii_report_intra"
parent="menu_aeat_sii_report_menu" sequence="10"
name="AEAT SII Report Intracommunity"/>
<record model="ir.model.button" id="load_invoices_button">
<field name="name">load_invoices</field>
<field name="model" search="[('model', '=', 'aeat.sii.report')]"/>
</record>
<record model="ir.action.act_window" id="act_aeat_sii_report_lines">
<field name="name">SII Report Lines</field>
<field name="res_model">aeat.sii.report.lines</field>
</record>
<menuitem action="act_aeat_sii_report_lines"
id="menu_aeat_sii_report"
parent="menu_aeat_sii_report_menu" sequence="10"
name="AEAT SII Report Lines"/>
</data>
<record model="ir.model.button-res.group"
id="load_invoices_admin">
<field name="button" ref="load_invoices_button"/>
<field name="group" ref="group_aeat_sii_admin"/>
</record>
<menuitem id="menu_aeat_sii_report_menu"
sequence="999" parent="account.menu_reporting"
name="AEAT SII"/>
<menuitem action="act_aeat_sii_report" id="menu_aeat_sii_report"
parent="menu_aeat_sii_report_menu" sequence="999"
name="AEAT SII Report"/>
<record model="ir.action.act_window" id="act_aeat_sii_issued_report">
<field name="name">SII Report Issued</field>
<field name="res_model">aeat.sii.report</field>
<field name="domain">[('book', '=', 'E')]</field>
<field name="search_value"></field>
</record>
<menuitem action="act_aeat_sii_issued_report"
id="menu_aeat_sii_report_issued"
parent="menu_aeat_sii_report_menu" sequence="10"
name="AEAT SII Report Issued"/>
<record model="ir.action.act_window" id="act_aeat_sii_invest_report">
<field name="name">SII Report Invest</field>
<field name="res_model">aeat.sii.report</field>
<field name="domain">[('book', '=', 'I')]</field>
<field name="search_value"></field>
</record>
<menuitem action="act_aeat_sii_invest_report"
id="menu_aeat_sii_report_invest"
parent="menu_aeat_sii_report_menu" sequence="10"
name="AEAT SII Report Invest"/>
<record model="ir.action.act_window" id="act_aeat_sii_received_report">
<field name="name">SII Report Received</field>
<field name="res_model">aeat.sii.report</field>
<field name="domain">[('book', '=', 'R')]</field>
<field name="search_value"></field>
</record>
<menuitem action="act_aeat_sii_received_report"
id="menu_aeat_sii_report_received"
parent="menu_aeat_sii_report_menu" sequence="10"
name="AEAT SII Report Received"/>
<record model="ir.action.act_window" id="act_aeat_sii_intra_report">
<field name="name">SII Report Intracommunity</field>
<field name="res_model">aeat.sii.report</field>
<field name="domain">[('book', '=', 'U')]</field>
<field name="search_value"></field>
</record>
<menuitem action="act_aeat_sii_intra_report"
id="menu_aeat_sii_report_intra"
parent="menu_aeat_sii_report_menu" sequence="10"
name="AEAT SII Report Intracommunity"/>
<record model="ir.action.act_window" id="act_aeat_sii_report_lines">
<field name="name">SII Report Lines</field>
<field name="res_model">aeat.sii.report.lines</field>
</record>
<menuitem action="act_aeat_sii_report_lines"
id="menu_aeat_sii_report"
parent="menu_aeat_sii_report_menu" sequence="10"
name="AEAT SII Report Lines"/>
</data>
</tryton>

View File

@ -0,0 +1,13 @@
<?xml version="1.0"?>
<!-- The COPYRIGHT file at the top level of this repository contains the full
copyright notices and license terms. -->
<tree string="SII Report Line Tax">
<field name="line"/>
<field name="base"/>
<field name="rate"/>
<field name="amount"/>
<field name="surcharge_rate"/>
<field name="surcharge_amount"/>
<field name="reagyp_rate"/>
<field name="reagyp_amount"/>
</tree>

View File

@ -2,38 +2,39 @@
<!-- The COPYRIGHT file at the top level of this repository contains the full
copyright notices and license terms. -->
<form string="AEAT SII Issued">
<label name="report"/>
<field name="report"/>
<label name="invoice"/>
<field name="invoice"/>
<label name="state"/>
<field name="state"/>
<label name="communication_msg"/>
<field name="communication_msg"/>
<label name="issuer_vat_number"/>
<field name="issuer_vat_number"/>
<label name="serial_number"/>
<field name="serial_number"/>
<label name="final_serial_number"/>
<field name="final_serial_number"/>
<label name="issue_date"/>
<field name="issue_date"/>
<label name="invoice_kind"/>
<field name="invoice_kind"/>
<label name="special_key"/>
<field name="special_key"/>
<label name="total_amount"/>
<field name="total_amount"/>
<label name="counterpart_name"/>
<field name="counterpart_name"/>
<label name="counterpart_id"/>
<field name="counterpart_id"/>
<label name="presenter"/>
<field name="presenter"/>
<label name="presentation_date"/>
<field name="presentation_date"/>
<label name="csv"/>
<field name="csv"/>
<label name="balance_state"/>
<field name="balance_state"/>
<label name="report"/>
<field name="report"/>
<label name="invoice"/>
<field name="invoice"/>
<label name="state"/>
<field name="state"/>
<label name="communication_msg"/>
<field name="communication_msg"/>
<label name="issuer_vat_number"/>
<field name="issuer_vat_number"/>
<label name="serial_number"/>
<field name="serial_number"/>
<label name="final_serial_number"/>
<field name="final_serial_number"/>
<label name="issue_date"/>
<field name="issue_date"/>
<label name="invoice_kind"/>
<field name="invoice_kind"/>
<label name="special_key"/>
<field name="special_key"/>
<label name="total_amount"/>
<field name="total_amount"/>
<field name="taxes" colspan="4"/>
<label name="counterpart_name"/>
<field name="counterpart_name"/>
<label name="counterpart_id"/>
<field name="counterpart_id"/>
<label name="presenter"/>
<field name="presenter"/>
<label name="presentation_date"/>
<field name="presentation_date"/>
<label name="csv"/>
<field name="csv"/>
<label name="balance_state"/>
<field name="balance_state"/>
</form>