mirror of
https://gitlab.com/datalifeit/trytond-aeat_sii
synced 2023-12-13 20:30:37 +01:00
Merged trytonspain/trytond-aeat_sii into default
This commit is contained in:
commit
8f8e583b98
14 changed files with 507 additions and 907 deletions
|
@ -1,4 +0,0 @@
|
||||||
|
|
||||||
\.pyc$
|
|
||||||
\.egg-info
|
|
||||||
|
|
24
account.xml
24
account.xml
|
@ -1,15 +1,17 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0"?>
|
||||||
|
<!-- The COPYRIGHT file at the top level of this repository contains the full
|
||||||
|
copyright notices and license terms. -->
|
||||||
<tryton>
|
<tryton>
|
||||||
<data>
|
<data>
|
||||||
<record model="ir.ui.view" id="aeat_sii_tax_form_view">
|
<record model="ir.ui.view" id="aeat_sii_tax_form_view">
|
||||||
<field name="model">account.tax</field>
|
<field name="model">account.tax</field>
|
||||||
<field name="inherit" ref="account.tax_view_form"/>
|
<field name="inherit" ref="account.tax_view_form"/>
|
||||||
<field name="name">tax_form</field>
|
<field name="name">tax_form</field>
|
||||||
</record>
|
</record>
|
||||||
<record model="ir.ui.view" id="aeat_sii_template_tax_form_view">
|
<record model="ir.ui.view" id="aeat_sii_template_tax_form_view">
|
||||||
<field name="model">account.tax.template</field>
|
<field name="model">account.tax.template</field>
|
||||||
<field name="inherit" ref="account.tax_template_view_form"/>
|
<field name="inherit" ref="account.tax_template_view_form"/>
|
||||||
<field name="name">template_tax_form</field>
|
<field name="name">template_tax_form</field>
|
||||||
</record>
|
</record>
|
||||||
</data>
|
</data>
|
||||||
</tryton>
|
</tryton>
|
||||||
|
|
34
aeat.py
34
aeat.py
|
@ -1,14 +1,6 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# The COPYRIGHT file at the top level of this repository contains the full
|
# The COPYRIGHT file at the top level of this repository contains the full
|
||||||
# copyright notices and license terms.
|
# copyright notices and license terms.
|
||||||
|
|
||||||
__all__ = [
|
|
||||||
'SIIReport',
|
|
||||||
'SIIReportLine',
|
|
||||||
'IssuedTrytonInvoiceMapper',
|
|
||||||
'RecievedTrytonInvoiceMapper',
|
|
||||||
]
|
|
||||||
|
|
||||||
import unicodedata
|
import unicodedata
|
||||||
from logging import getLogger
|
from logging import getLogger
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
|
@ -23,6 +15,8 @@ from trytond.pyson import Eval
|
||||||
from trytond.pool import Pool
|
from trytond.pool import Pool
|
||||||
from trytond.transaction import Transaction
|
from trytond.transaction import Transaction
|
||||||
|
|
||||||
|
__all__ = ['SIIReport', 'SIIReportLine',
|
||||||
|
'IssuedTrytonInvoiceMapper', 'RecievedTrytonInvoiceMapper']
|
||||||
|
|
||||||
_logger = getLogger(__name__)
|
_logger = getLogger(__name__)
|
||||||
_ZERO = Decimal('0.0')
|
_ZERO = Decimal('0.0')
|
||||||
|
@ -252,24 +246,20 @@ class SIIReport(Workflow, ModelSQL, ModelView):
|
||||||
'required': Eval('state').in_(['confirmed', 'done']),
|
'required': Eval('state').in_(['confirmed', 'done']),
|
||||||
'readonly': ~Eval('state').in_(['draft', 'confirmed']),
|
'readonly': ~Eval('state').in_(['draft', 'confirmed']),
|
||||||
}, depends=['state'])
|
}, depends=['state'])
|
||||||
|
|
||||||
period = fields.Many2One('account.period', 'Period', required=True,
|
period = fields.Many2One('account.period', 'Period', required=True,
|
||||||
domain=[('fiscalyear', '=', Eval('fiscalyear'))],
|
domain=[('fiscalyear', '=', Eval('fiscalyear'))],
|
||||||
states={
|
states={
|
||||||
'readonly': Eval('state') != 'draft',
|
'readonly': Eval('state') != 'draft',
|
||||||
}, depends=['state', 'fiscalyear'])
|
}, depends=['state', 'fiscalyear'])
|
||||||
|
|
||||||
operation_type = fields.Selection(COMMUNICATION_TYPE, 'Operation Type',
|
operation_type = fields.Selection(COMMUNICATION_TYPE, 'Operation Type',
|
||||||
required=True,
|
required=True,
|
||||||
states={
|
states={
|
||||||
'readonly': ~Eval('state').in_(['draft', 'confirmed']),
|
'readonly': ~Eval('state').in_(['draft', 'confirmed']),
|
||||||
}, depends=['state'])
|
}, depends=['state'])
|
||||||
|
|
||||||
book = fields.Selection(BOOK_KEY, 'Book', required=True,
|
book = fields.Selection(BOOK_KEY, 'Book', required=True,
|
||||||
states={
|
states={
|
||||||
'readonly': ~Eval('state').in_(['draft', 'confirmed']),
|
'readonly': ~Eval('state').in_(['draft', 'confirmed']),
|
||||||
}, depends=['state'])
|
}, depends=['state'])
|
||||||
|
|
||||||
state = fields.Selection([
|
state = fields.Selection([
|
||||||
('draft', 'Draft'),
|
('draft', 'Draft'),
|
||||||
('confirmed', 'Confirmed'),
|
('confirmed', 'Confirmed'),
|
||||||
|
@ -280,19 +270,14 @@ class SIIReport(Workflow, ModelSQL, ModelView):
|
||||||
|
|
||||||
communication_state = fields.Selection(AEAT_COMMUNICATION_STATE,
|
communication_state = fields.Selection(AEAT_COMMUNICATION_STATE,
|
||||||
'Communication State', readonly=True)
|
'Communication State', readonly=True)
|
||||||
|
csv = fields.Char('CSV', readonly=True)
|
||||||
csv = fields.Char(
|
|
||||||
'CSV', readonly=True
|
|
||||||
)
|
|
||||||
|
|
||||||
version = fields.Selection([
|
version = fields.Selection([
|
||||||
('0.7', '0.7'),
|
('0.7', '0.7'),
|
||||||
], 'Version', required=True, states={
|
], 'Version', required=True, states={
|
||||||
}, depends=['state'])
|
}, depends=['state'])
|
||||||
|
|
||||||
lines = fields.One2Many('aeat.sii.report.lines', 'report',
|
lines = fields.One2Many('aeat.sii.report.lines', 'report',
|
||||||
'Lines', states={
|
'Lines', states={
|
||||||
'readonly': ~Eval('state').in_(['draft']),
|
'readonly': Eval('state') != 'draft',
|
||||||
}, depends=['state'])
|
}, depends=['state'])
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
@ -321,7 +306,6 @@ class SIIReport(Workflow, ModelSQL, ModelView):
|
||||||
Eval('operation_type').in_(['A0', 'A1'])),
|
Eval('operation_type').in_(['A0', 'A1'])),
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
cls._transitions |= set((
|
cls._transitions |= set((
|
||||||
('draft', 'confirmed'),
|
('draft', 'confirmed'),
|
||||||
('draft', 'cancelled'),
|
('draft', 'cancelled'),
|
||||||
|
@ -697,9 +681,8 @@ class BaseTrytonInvoiceMapper(Model):
|
||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
class IssuedTrytonInvoiceMapper(
|
class IssuedTrytonInvoiceMapper(mapping.IssuedInvoiceMapper,
|
||||||
mapping.IssuedInvoiceMapper, BaseTrytonInvoiceMapper
|
BaseTrytonInvoiceMapper):
|
||||||
):
|
|
||||||
"""
|
"""
|
||||||
Tryton Issued Invoice to AEAT mapper
|
Tryton Issued Invoice to AEAT mapper
|
||||||
"""
|
"""
|
||||||
|
@ -708,9 +691,8 @@ class IssuedTrytonInvoiceMapper(
|
||||||
specialkey_or_trascendence = attrgetter('sii_issued_key')
|
specialkey_or_trascendence = attrgetter('sii_issued_key')
|
||||||
|
|
||||||
|
|
||||||
class RecievedTrytonInvoiceMapper(
|
class RecievedTrytonInvoiceMapper(mapping.RecievedInvoiceMapper,
|
||||||
mapping.RecievedInvoiceMapper, BaseTrytonInvoiceMapper
|
BaseTrytonInvoiceMapper):
|
||||||
):
|
|
||||||
"""
|
"""
|
||||||
Tryton Recieved Invoice to AEAT mapper
|
Tryton Recieved Invoice to AEAT mapper
|
||||||
"""
|
"""
|
||||||
|
|
360
aeat.xml
360
aeat.xml
|
@ -1,201 +1,197 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0"?>
|
||||||
<!-- The COPYRIGHT file at the top level of this repository contains the full
|
<!-- The COPYRIGHT file at the top level of this repository contains the full
|
||||||
copyright notices and license terms. -->
|
copyright notices and license terms. -->
|
||||||
<tryton>
|
<tryton>
|
||||||
<data>
|
<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="res.group" id="group_aeat_sii_admin">
|
<record model="ir.ui.view" id="aeat_sii_report_form_view">
|
||||||
<field name="name">AEAT SII Administration</field>
|
<field name="model">aeat.sii.report</field>
|
||||||
</record>
|
<field name="type">form</field>
|
||||||
<record model="res.user-res.group" id="user_admin_group_aeat_sii_admin">
|
<field name="name">sii_report_form</field>
|
||||||
<field name="user" ref="res.user_admin"/>
|
</record>
|
||||||
<field name="group" ref="group_aeat_sii_admin"/>
|
<record model="ir.ui.view" id="aeat_sii_report_tree_view">
|
||||||
</record>
|
<field name="model">aeat.sii.report</field>
|
||||||
<record model="res.user-res.group" id="user_trigger_group_aeat_sii_admin">
|
<field name="type">tree</field>
|
||||||
<field name="user" ref="res.user_trigger"/>
|
<field name="name">sii_report_list</field>
|
||||||
<field name="group" ref="group_aeat_sii_admin"/>
|
</record>
|
||||||
</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.ui.view" id="aeat_sii_report_form_view">
|
<!-- aeat.sii.report.issued -->
|
||||||
<field name="model">aeat.sii.report</field>
|
<record model="ir.ui.view" id="aeat_sii_report_line_form_view">
|
||||||
<field name="type">form</field>
|
<field name="model">aeat.sii.report.lines</field>
|
||||||
<field name="name">sii_report_form</field>
|
<field name="type">form</field>
|
||||||
</record>
|
<field name="name">sii_report_lines_form</field>
|
||||||
<record model="ir.ui.view" id="aeat_sii_report_tree_view">
|
</record>
|
||||||
<field name="model">aeat.sii.report</field>
|
|
||||||
<field name="type">tree</field>
|
<record model="ir.ui.view" id="aeat_sii_report_line_tree_view">
|
||||||
<field name="name">sii_report_list</field>
|
<field name="model">aeat.sii.report.lines</field>
|
||||||
</record>
|
<field name="type">tree</field>
|
||||||
<record model="ir.action.act_window" id="act_aeat_sii_report">
|
<field name="name">sii_report_lines_list</field>
|
||||||
<field name="name">SII Report</field>
|
</record>
|
||||||
<field name="res_model">aeat.sii.report</field>
|
|
||||||
<field name="search_value"></field>
|
<record model="ir.action.act_window" id="act_aeat_sii_report_line">
|
||||||
</record>
|
<field name="name">AEAT SII Report Lines</field>
|
||||||
<record model="ir.action.act_window.view" id="act_aeat_sii_report_view1">
|
<field name="res_model">aeat.sii.report.lines</field>
|
||||||
<field name="sequence" eval="10"/>
|
<field name="search_value"></field>
|
||||||
<field name="view" ref="aeat_sii_report_tree_view"/>
|
</record>
|
||||||
<field name="act_window" ref="act_aeat_sii_report"/>
|
<record model="ir.action.act_window.view" id="act_aeat_sii_report_line_view1">
|
||||||
</record>
|
<field name="sequence" eval="10"/>
|
||||||
<record model="ir.action.act_window.view" id="act_aeat_sii_report_view2">
|
<field name="view" ref="aeat_sii_report_line_tree_view"/>
|
||||||
<field name="sequence" eval="20"/>
|
<field name="act_window" ref="act_aeat_sii_report_line"/>
|
||||||
<field name="view" ref="aeat_sii_report_form_view"/>
|
</record>
|
||||||
<field name="act_window" ref="act_aeat_sii_report"/>
|
<record model="ir.action.act_window.view" id="act_aeat_sii_report_line_view2">
|
||||||
</record>
|
<field name="sequence" eval="20"/>
|
||||||
<record model="ir.model.access" id="access_aeat_sii_report">
|
<field name="view" ref="aeat_sii_report_line_form_view"/>
|
||||||
<field name="model" search="[('model', '=', 'aeat.sii.report')]"/>
|
<field name="act_window" ref="act_aeat_sii_report_line"/>
|
||||||
<field name="perm_read" eval="True"/>
|
</record>
|
||||||
<field name="perm_write" eval="False"/>
|
|
||||||
<field name="perm_create" eval="False"/>
|
<record model="ir.model.access" id="access_aeat_sii_report_line">
|
||||||
<field name="perm_delete" eval="False"/>
|
<field name="model" search="[('model', '=', 'aeat.sii.report.lines')]"/>
|
||||||
</record>
|
<field name="perm_read" eval="True"/>
|
||||||
<record model="ir.model.access" id="access_aeat_sii_report_admin">
|
<field name="perm_write" eval="False"/>
|
||||||
<field name="model" search="[('model', '=', 'aeat.sii.report')]"/>
|
<field name="perm_create" eval="False"/>
|
||||||
<field name="group" ref="group_aeat_sii_admin"/>
|
<field name="perm_delete" eval="False"/>
|
||||||
<field name="perm_read" eval="True"/>
|
</record>
|
||||||
<field name="perm_write" eval="True"/>
|
<record model="ir.model.access" id="access_aeat_sii_report_line_admin">
|
||||||
<field name="perm_create" eval="True"/>
|
<field name="model" search="[('model', '=', 'aeat.sii.report.lines')]"/>
|
||||||
<field name="perm_delete" eval="True"/>
|
<field name="group" ref="group_aeat_sii_admin"/>
|
||||||
</record>
|
<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>
|
||||||
|
|
||||||
|
|
||||||
<!-- aeat.sii.report.issued -->
|
<record model="ir.model.button" id="load_invoices_button">
|
||||||
<record model="ir.ui.view" id="aeat_sii_report_line_form_view">
|
<field name="name">load_invoices</field>
|
||||||
<field name="model">aeat.sii.report.lines</field>
|
<field name="model" search="[('model', '=', 'aeat.sii.report')]"/>
|
||||||
<field name="type">form</field>
|
</record>
|
||||||
<field name="name">sii_report_lines_form</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record model="ir.ui.view" id="aeat_sii_report_line_tree_view">
|
<record model="ir.model.button-res.group"
|
||||||
<field name="model">aeat.sii.report.lines</field>
|
id="load_invoices_admin">
|
||||||
<field name="type">tree</field>
|
<field name="button" ref="load_invoices_button"/>
|
||||||
<field name="name">sii_report_lines_list</field>
|
<field name="group" ref="group_aeat_sii_admin"/>
|
||||||
</record>
|
</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">
|
<menuitem id="menu_aeat_sii_report_menu"
|
||||||
<field name="model" search="[('model', '=', 'aeat.sii.report.lines')]"/>
|
sequence="999" parent="account.menu_reporting"
|
||||||
<field name="perm_read" eval="True"/>
|
name="AEAT SII"/>
|
||||||
<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">
|
<menuitem action="act_aeat_sii_report" id="menu_aeat_sii_report"
|
||||||
<field name="model" search="[('model', '=', 'aeat.sii.report')]"/>
|
parent="menu_aeat_sii_report_menu" sequence="999"
|
||||||
<field name="global_p" eval="True"/>
|
name="AEAT SII Report"/>
|
||||||
</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">
|
<record model="ir.action.act_window" id="act_aeat_sii_issued_report">
|
||||||
<field name="model" search="[('model', '=', 'aeat.sii.report.lines')]"/>
|
<field name="name">SII Report Issued</field>
|
||||||
<field name="global_p" eval="True"/>
|
<field name="res_model">aeat.sii.report</field>
|
||||||
</record>
|
<field name="domain" eval="[('book', '=', 'E')]" pyson="1"/>
|
||||||
<record model="ir.rule" id="rule_sii_report_line1">
|
<field name="search_value"></field>
|
||||||
<field name="domain" eval="[('company', '=',Eval('user', {}).get('company', None))]" pyson="1"/>
|
</record>
|
||||||
<field name="rule_group" ref="rule_group_sii_report_line"/>
|
<menuitem action="act_aeat_sii_issued_report"
|
||||||
</record>
|
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.model.button" id="load_invoices_button">
|
<record model="ir.action.act_window" id="act_aeat_sii_received_report">
|
||||||
<field name="name">load_invoices</field>
|
<field name="name">SII Report Received</field>
|
||||||
<field name="model" search="[('model', '=', 'aeat.sii.report')]"/>
|
<field name="res_model">aeat.sii.report</field>
|
||||||
</record>
|
<field name="domain" eval="[('book', '=', 'R')]" pyson="1"/>
|
||||||
|
|
||||||
<record model="ir.model.button-res.group"
|
<field name="search_value"></field>
|
||||||
id="load_invoices_admin">
|
</record>
|
||||||
<field name="button" ref="load_invoices_button"/>
|
<menuitem action="act_aeat_sii_received_report"
|
||||||
<field name="group" ref="group_aeat_sii_admin"/>
|
id="menu_aeat_sii_report_received"
|
||||||
</record>
|
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"/>
|
||||||
|
|
||||||
<menuitem id="menu_aeat_sii_report_menu"
|
<record model="ir.action.act_window" id="act_aeat_sii_report_lines">
|
||||||
sequence="999" parent="account.menu_reporting"
|
<field name="name">SII Report Lines</field>
|
||||||
name="AEAT SII"/>
|
<field name="res_model">aeat.sii.report.lines</field>
|
||||||
|
</record>
|
||||||
<menuitem action="act_aeat_sii_report" id="menu_aeat_sii_report"
|
<menuitem action="act_aeat_sii_report_lines"
|
||||||
parent="menu_aeat_sii_report_menu" sequence="999"
|
id="menu_aeat_sii_report"
|
||||||
name="AEAT SII Report"/>
|
parent="menu_aeat_sii_report_menu" sequence="10"
|
||||||
|
name="AEAT SII Report Lines"/>
|
||||||
<record model="ir.action.act_window" id="act_aeat_sii_issued_report">
|
</data>
|
||||||
<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.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"/>
|
|
||||||
|
|
||||||
<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.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>
|
</tryton>
|
||||||
|
|
822
aeatsii.xml
822
aeatsii.xml
File diff suppressed because it is too large
Load diff
22
company.py
22
company.py
|
@ -1,6 +1,5 @@
|
||||||
# The COPYRIGHT file at the top level of this repository contains
|
# The COPYRIGHT file at the top level of this repository contains
|
||||||
# the full copyright notices and license terms.
|
# the full copyright notices and license terms.
|
||||||
|
|
||||||
from logging import getLogger
|
from logging import getLogger
|
||||||
from contextlib import contextmanager
|
from contextlib import contextmanager
|
||||||
from tempfile import NamedTemporaryFile
|
from tempfile import NamedTemporaryFile
|
||||||
|
@ -20,6 +19,11 @@ class Company:
|
||||||
__name__ = 'company.company'
|
__name__ = 'company.company'
|
||||||
__metaclass__ = PoolMeta
|
__metaclass__ = PoolMeta
|
||||||
|
|
||||||
|
pem_certificate = fields.Binary('PEM Certificate')
|
||||||
|
encrypted_private_key = fields.Binary('Encrypted Private Key')
|
||||||
|
private_key = fields.Function(fields.Binary('Private Key'),
|
||||||
|
'get_private_key', 'set_private_key')
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def __setup__(cls):
|
def __setup__(cls):
|
||||||
super(Company, cls).__setup__()
|
super(Company, cls).__setup__()
|
||||||
|
@ -29,22 +33,6 @@ class Company:
|
||||||
'missing_pem_cert': "Missing PEM certificate"
|
'missing_pem_cert': "Missing PEM certificate"
|
||||||
})
|
})
|
||||||
|
|
||||||
pem_certificate = fields.Binary(
|
|
||||||
'PEM Certificate'
|
|
||||||
)
|
|
||||||
|
|
||||||
encrypted_private_key = fields.Binary(
|
|
||||||
'Encrypted Private Key'
|
|
||||||
)
|
|
||||||
|
|
||||||
private_key = fields.Function(
|
|
||||||
fields.Binary(
|
|
||||||
'Private Key'
|
|
||||||
),
|
|
||||||
'get_private_key',
|
|
||||||
'set_private_key',
|
|
||||||
)
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_private_key(cls, companies, name=None):
|
def get_private_key(cls, companies, name=None):
|
||||||
converter = buffer
|
converter = buffer
|
||||||
|
|
114
company.xml
114
company.xml
|
@ -3,64 +3,62 @@
|
||||||
copyright notices and license terms. -->
|
copyright notices and license terms. -->
|
||||||
<tryton>
|
<tryton>
|
||||||
<data>
|
<data>
|
||||||
|
<record model="ir.ui.view" id="company_view_form">
|
||||||
|
<field name="model">company.company</field>
|
||||||
|
<field name="inherit" ref="company.company_view_form"/>
|
||||||
|
<field name="name">company_form</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
<record model="ir.ui.view" id="company_view_form">
|
<record model="ir.model.field.access" id="access_company_privatekey">
|
||||||
<field name="model">company.company</field>
|
<field name="field"
|
||||||
<field name="inherit" ref="company.company_view_form"/>
|
search="[('name', '=', 'private_key'),('model.model', '=', 'company.company')]"/>
|
||||||
<field name="name">company_form</field>
|
<field name="perm_read" eval="False"/>
|
||||||
</record>
|
<field name="perm_write" eval="False"/>
|
||||||
|
<field name="perm_create" eval="False"/>
|
||||||
<record model="ir.model.field.access" id="access_company_privatekey">
|
<field name="perm_delete" eval="False"/>
|
||||||
<field name="field"
|
</record>
|
||||||
search="[('name', '=', 'private_key'),('model.model', '=', 'company.company')]"/>
|
<record model="ir.model.field.access" id="access_company_encryptedprivatekey">
|
||||||
<field name="perm_read" eval="False"/>
|
<field name="field"
|
||||||
<field name="perm_write" eval="False"/>
|
search="[('name', '=', 'encrypted_private_key'),('model.model', '=', 'company.company')]"/>
|
||||||
<field name="perm_create" eval="False"/>
|
<field name="perm_read" eval="False"/>
|
||||||
<field name="perm_delete" eval="False"/>
|
<field name="perm_write" eval="False"/>
|
||||||
</record>
|
<field name="perm_create" eval="False"/>
|
||||||
<record model="ir.model.field.access" id="access_company_encryptedprivatekey">
|
<field name="perm_delete" eval="False"/>
|
||||||
<field name="field"
|
</record>
|
||||||
search="[('name', '=', 'encrypted_private_key'),('model.model', '=', 'company.company')]"/>
|
<record model="ir.model.field.access" id="access_company_certificate">
|
||||||
<field name="perm_read" eval="False"/>
|
<field name="field"
|
||||||
<field name="perm_write" eval="False"/>
|
search="[('name', '=', 'pem_certificate'),('model.model', '=', 'company.company')]"/>
|
||||||
<field name="perm_create" eval="False"/>
|
<field name="perm_read" eval="True"/>
|
||||||
<field name="perm_delete" eval="False"/>
|
<field name="perm_write" eval="False"/>
|
||||||
</record>
|
<field name="perm_create" eval="False"/>
|
||||||
<record model="ir.model.field.access" id="access_company_certificate">
|
<field name="perm_delete" eval="False"/>
|
||||||
<field name="field"
|
</record>
|
||||||
search="[('name', '=', 'pem_certificate'),('model.model', '=', 'company.company')]"/>
|
<record model="ir.model.field.access" id="access_company_privatekey_admin">
|
||||||
<field name="perm_read" eval="True"/>
|
<field name="field"
|
||||||
<field name="perm_write" eval="False"/>
|
search="[('name', '=', 'private_key'),('model.model', '=', 'company.company')]"/>
|
||||||
<field name="perm_create" eval="False"/>
|
<field name="group" ref="group_aeat_sii_admin"/>
|
||||||
<field name="perm_delete" eval="False"/>
|
<field name="perm_read" eval="True"/>
|
||||||
</record>
|
<field name="perm_write" eval="True"/>
|
||||||
<record model="ir.model.field.access" id="access_company_privatekey_admin">
|
<field name="perm_create" eval="True"/>
|
||||||
<field name="field"
|
<field name="perm_delete" eval="True"/>
|
||||||
search="[('name', '=', 'private_key'),('model.model', '=', 'company.company')]"/>
|
</record>
|
||||||
<field name="group" ref="group_aeat_sii_admin"/>
|
<record model="ir.model.field.access" id="access_company_encryptedprivatekey_admin">
|
||||||
<field name="perm_read" eval="True"/>
|
<field name="field"
|
||||||
<field name="perm_write" eval="True"/>
|
search="[('name', '=', 'encrypted_private_key'),('model.model', '=', 'company.company')]"/>
|
||||||
<field name="perm_create" eval="True"/>
|
<field name="group" ref="group_aeat_sii_admin"/>
|
||||||
<field name="perm_delete" eval="True"/>
|
<field name="perm_read" eval="True"/>
|
||||||
</record>
|
<field name="perm_write" eval="True"/>
|
||||||
<record model="ir.model.field.access" id="access_company_encryptedprivatekey_admin">
|
<field name="perm_create" eval="True"/>
|
||||||
<field name="field"
|
<field name="perm_delete" eval="True"/>
|
||||||
search="[('name', '=', 'encrypted_private_key'),('model.model', '=', 'company.company')]"/>
|
</record>
|
||||||
<field name="group" ref="group_aeat_sii_admin"/>
|
<record model="ir.model.field.access" id="access_company_certificate_admin">
|
||||||
<field name="perm_read" eval="True"/>
|
<field name="field"
|
||||||
<field name="perm_write" eval="True"/>
|
search="[('name', '=', 'pem_certificate'),('model.model', '=', 'company.company')]"/>
|
||||||
<field name="perm_create" eval="True"/>
|
<field name="group" ref="group_aeat_sii_admin"/>
|
||||||
<field name="perm_delete" eval="True"/>
|
<field name="perm_read" eval="True"/>
|
||||||
</record>
|
<field name="perm_write" eval="True"/>
|
||||||
<record model="ir.model.field.access" id="access_company_certificate_admin">
|
<field name="perm_create" eval="True"/>
|
||||||
<field name="field"
|
<field name="perm_delete" eval="True"/>
|
||||||
search="[('name', '=', 'pem_certificate'),('model.model', '=', 'company.company')]"/>
|
</record>
|
||||||
<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>
|
|
||||||
|
|
||||||
</data>
|
</data>
|
||||||
</tryton>
|
</tryton>
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# The COPYRIGHT file at the top level of this repository contains the full
|
# The COPYRIGHT file at the top level of this repository contains the full
|
||||||
# copyright notices and license terms.
|
# copyright notices and license terms.
|
||||||
|
|
||||||
from trytond.model import fields
|
from trytond.model import fields
|
||||||
from trytond.pool import Pool, PoolMeta
|
from trytond.pool import Pool, PoolMeta
|
||||||
from trytond.pyson import Eval
|
from trytond.pyson import Eval
|
||||||
|
@ -105,14 +104,15 @@ class Invoice:
|
||||||
table = SIILines.__table__()
|
table = SIILines.__table__()
|
||||||
cursor = Transaction().connection.cursor()
|
cursor = Transaction().connection.cursor()
|
||||||
cursor.execute(*table.select(Max(table.id), table.invoice,
|
cursor.execute(*table.select(Max(table.id), table.invoice,
|
||||||
where=table.invoice.in_([x.id for x in invoices]),
|
where=(table.invoice.in_([x.id for x in invoices]) &
|
||||||
|
(table.state != None)),
|
||||||
group_by=table.invoice))
|
group_by=table.invoice))
|
||||||
|
|
||||||
lines = [a[0] for a in cursor.fetchall()]
|
lines = [a[0] for a in cursor.fetchall()]
|
||||||
|
|
||||||
if lines:
|
if lines:
|
||||||
cursor.execute(*table.select(table.state, table.invoice,
|
cursor.execute(*table.select(table.state, table.invoice,
|
||||||
where=table.id.in_(lines)))
|
where=(table.id.in_(lines)) & (table.state != None)))
|
||||||
|
|
||||||
for state, inv in cursor.fetchall():
|
for state, inv in cursor.fetchall():
|
||||||
result['sii_state'][inv] = state
|
result['sii_state'][inv] = state
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0"?>
|
||||||
<!-- The COPYRIGHT file at the top level of this repository contains the full
|
<!-- The COPYRIGHT file at the top level of this repository contains the full
|
||||||
copyright notices and license terms. -->
|
copyright notices and license terms. -->
|
||||||
<tryton>
|
<tryton>
|
||||||
|
@ -15,5 +15,4 @@
|
||||||
<field name="name">account_invoice_list</field>
|
<field name="name">account_invoice_list</field>
|
||||||
</record>
|
</record>
|
||||||
</data>
|
</data>
|
||||||
|
|
||||||
</tryton>
|
</tryton>
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
# The COPYRIGHT file at the top level of this repository contains the full
|
# The COPYRIGHT file at the top level of this repository contains the full
|
||||||
# copyright notices and license terms.
|
# copyright notices and license terms.
|
||||||
|
|
||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
from logging import getLogger
|
from logging import getLogger
|
||||||
|
|
||||||
|
@ -10,7 +9,6 @@ from OpenSSL.crypto import dump_privatekey
|
||||||
from OpenSSL.crypto import FILETYPE_PEM
|
from OpenSSL.crypto import FILETYPE_PEM
|
||||||
from OpenSSL.crypto import Error as CryptoError
|
from OpenSSL.crypto import Error as CryptoError
|
||||||
|
|
||||||
|
|
||||||
from trytond.transaction import Transaction
|
from trytond.transaction import Transaction
|
||||||
from trytond.pool import Pool
|
from trytond.pool import Pool
|
||||||
from trytond.model import ModelView
|
from trytond.model import ModelView
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0"?>
|
||||||
<!-- The COPYRIGHT file at the top level of this repository contains the full
|
<!-- The COPYRIGHT file at the top level of this repository contains the full
|
||||||
copyright notices and license terms. -->
|
copyright notices and license terms. -->
|
||||||
<tryton>
|
<tryton>
|
||||||
<data>
|
<data>
|
||||||
|
|
||||||
<record model="ir.ui.view" id="load_pkcs12_start_view">
|
<record model="ir.ui.view" id="load_pkcs12_start_view">
|
||||||
<field name="model">aeat.sii.load_pkcs12.start</field>
|
<field name="model">aeat.sii.load_pkcs12.start</field>
|
||||||
<field name="type">form</field>
|
<field name="type">form</field>
|
||||||
|
@ -18,6 +17,5 @@
|
||||||
<field name="keyword">form_action</field>
|
<field name="keyword">form_action</field>
|
||||||
<field name="model">company.company,-1</field>
|
<field name="model">company.company,-1</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
</data>
|
</data>
|
||||||
</tryton>
|
</tryton>
|
||||||
|
|
|
@ -8,22 +8,18 @@
|
||||||
<field name="company_vat"/>
|
<field name="company_vat"/>
|
||||||
<label name="currency"/>
|
<label name="currency"/>
|
||||||
<field name="currency"/>
|
<field name="currency"/>
|
||||||
|
|
||||||
<label name="book"/>
|
<label name="book"/>
|
||||||
<field name="book"/>
|
<field name="book"/>
|
||||||
<label name="operation_type"/>
|
<label name="operation_type"/>
|
||||||
<field name="operation_type"/>
|
<field name="operation_type"/>
|
||||||
<label name="version"/>
|
<label name="version"/>
|
||||||
<field name="version"/>
|
<field name="version"/>
|
||||||
|
|
||||||
<label name="fiscalyear"/>
|
<label name="fiscalyear"/>
|
||||||
<field name="fiscalyear"/>
|
<field name="fiscalyear"/>
|
||||||
<label name="period"/>
|
<label name="period"/>
|
||||||
<field name="period"/>
|
<field name="period"/>
|
||||||
<button string="Load Invoices" name="load_invoices" colspan="2"/>
|
<button string="Load Invoices" name="load_invoices" colspan="2"/>
|
||||||
|
|
||||||
<field name="lines" colspan="6"/>
|
<field name="lines" colspan="6"/>
|
||||||
|
|
||||||
<label name="state"/>
|
<label name="state"/>
|
||||||
<field name="state"/>
|
<field name="state"/>
|
||||||
<label name="communication_state"/>
|
<label name="communication_state"/>
|
||||||
|
|
|
@ -2,11 +2,11 @@
|
||||||
<!-- The COPYRIGHT file at the top level of this repository contains the full
|
<!-- The COPYRIGHT file at the top level of this repository contains the full
|
||||||
copyright notices and license terms. -->
|
copyright notices and license terms. -->
|
||||||
<form string="AEAT SII Issued">
|
<form string="AEAT SII Issued">
|
||||||
<label name="report"/>
|
<label name="report"/>
|
||||||
<field name="report"/>
|
<field name="report"/>
|
||||||
<label name="invoice"/>
|
<label name="invoice"/>
|
||||||
<field name="invoice"/>
|
<field name="invoice"/>
|
||||||
<label name="state"/>
|
<label name="state"/>
|
||||||
<field name="state"/>
|
<field name="state"/>
|
||||||
<field name="communication_msg" colspan="4"/>
|
<field name="communication_msg" colspan="4"/>
|
||||||
</form>
|
</form>
|
||||||
|
|
|
@ -12,7 +12,6 @@ contains the full copyright notices and license terms. -->
|
||||||
<field name="sii_received_key"/>
|
<field name="sii_received_key"/>
|
||||||
<label name="sii_intracomunity_key"/>
|
<label name="sii_intracomunity_key"/>
|
||||||
<field name="sii_intracomunity_key"/>
|
<field name="sii_intracomunity_key"/>
|
||||||
|
|
||||||
<label name="sii_subjected_key"/>
|
<label name="sii_subjected_key"/>
|
||||||
<field name="sii_subjected_key"/>
|
<field name="sii_subjected_key"/>
|
||||||
<label name="sii_excemption_key"/>
|
<label name="sii_excemption_key"/>
|
||||||
|
|
Loading…
Reference in a new issue