Skip to content

Commit

Permalink
[IMP] l10n_it_sdi_channel: One button to validate, export and send
Browse files Browse the repository at this point in the history
  • Loading branch information
SirTakobi committed Jul 18, 2022
1 parent ade8ad4 commit 14e8db4
Show file tree
Hide file tree
Showing 9 changed files with 128 additions and 0 deletions.
1 change: 1 addition & 0 deletions l10n_it_sdi_channel/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
"data": [
"security/ir.model.access.csv",
"security/security.xml",
"views/account_invoice_views.xml",
"views/sdi_view.xml",
"views/company_view.xml",
"views/fatturapa_attachment_views.xml",
Expand Down
1 change: 1 addition & 0 deletions l10n_it_sdi_channel/models/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

from . import account_invoice
from . import fatturapa_attachment_out
from . import company
from . import sdi
42 changes: 42 additions & 0 deletions l10n_it_sdi_channel/models/account_invoice.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# Copyright 2022 Simone Rubino - TAKOBI
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

from odoo import models


class AccountInvoice (models.Model):
_inherit = 'account.invoice'

def action_open_export_send_sdi(self):
"""Validate, export and send to SdI the invoices."""
# Validate
self.action_invoice_open()

# Export
export_action = self.env['ir.actions.act_window'].for_xml_id(
'l10n_it_fatturapa_out',
'action_wizard_export_fatturapa',
)
export_wizard_model = export_action.get('res_model')
export_wizard = self.env[export_wizard_model] \
.with_context(
active_model=self._name,
active_ids=self.ids,
) \
.create([{}])
export_result = export_wizard.exportFatturaPA()

# Get the exported attachments
attachment_model = self.env[export_result.get('res_model')]
exported_attachments_domain = export_result.get('domain')
if not exported_attachments_domain:
exported_attachments_domain = [
('id', '=', export_result.get('res_id')),
]
exported_attachments = attachment_model.search(
exported_attachments_domain,
)

# Send
send_result = exported_attachments.send_to_sdi()
return send_result
6 changes: 6 additions & 0 deletions l10n_it_sdi_channel/models/company.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,3 +31,9 @@ class AccountConfigSettings(models.TransientModel):
related='company_id.e_invoice_user_id',
readonly=False,
)
group_sdi_channel_validate_send = fields.Boolean(
string="Validate, export and send invoices",
help="Allow users to validate, export and send invoices to SdI "
"in one click.",
implied_group='l10n_it_sdi_channel.res_groups_validate_send',
)
3 changes: 3 additions & 0 deletions l10n_it_sdi_channel/security/security.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,7 @@
<field name="domain_force">['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field>
</record>

<record model="res.groups" id="res_groups_validate_send">
<field name="name">Validate, export and send invoices</field>
</record>
</odoo>
3 changes: 3 additions & 0 deletions l10n_it_sdi_channel/tests/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

from . import test_account_invoice
33 changes: 33 additions & 0 deletions l10n_it_sdi_channel/tests/test_account_invoice.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# Copyright 2022 Simone Rubino - TAKOBI
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

from odoo.addons.l10n_it_fatturapa_out.tests.fatturapa_common import \
FatturaPACommon


class TestAccountInvoice (FatturaPACommon):

def test_action_open_export_send_sdi(self):
"""
Check that the "Validate, export and send to SdI" button
validates the invoice and exports the attachment.
"""
# Arrange: create a draft invoice with no attachment
invoice = self._create_invoice()
self.assertEqual(invoice.state, 'draft')
self.assertFalse(invoice.fatturapa_attachment_out_id)

# Act: open, export and send.
# This raises an exception because there is no channel,
# we can't create a channel yet
# because channel types are defined by depending modules
with self.assertRaises(ValueError) as ve:
invoice.action_open_export_send_sdi()
exc_message = ve.exception.args[0]

# Assert: we are missing the SdI channel,
# but invoice is validated and attachment has been created
self.assertIn('Expected singleton', exc_message)
self.assertIn('sdi.channel', exc_message)
self.assertEqual(invoice.state, 'open')
self.assertTrue(invoice.fatturapa_attachment_out_id)
30 changes: 30 additions & 0 deletions l10n_it_sdi_channel/views/account_invoice_views.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!--
~ Copyright 2022 Simone Rubino - TAKOBI
~ License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
-->

<odoo>
<record id="view_invoice_form_fatturapa" model="ir.ui.view">
<field name="name">Add SdI channel edits to invoice's form view</field>
<field name="model">account.invoice</field>
<field name="inherit_id" ref="l10n_it_fatturapa_out.view_invoice_form_fatturapa"/>
<field name="arch" type="xml">
<button name="%(l10n_it_fatturapa_out.action_wizard_export_fatturapa)d" position="after">
<button name="action_open_export_send_sdi"
type="object"
string="Validate, export and send to SdI"
groups="l10n_it_sdi_channel.res_groups_validate_send"
attrs="{
'invisible': [
'|',
'|',
('fatturapa_attachment_out_id', '!=', False),
('state' ,'not in', ['draft']),
('electronic_invoice_subjected', '=', False),
]}"
/>
</button>
</field>
</record>
</odoo>
9 changes: 9 additions & 0 deletions l10n_it_sdi_channel/views/company_view.xml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,15 @@
</div>
</div>
</div>
<div class="o_setting_left_pane">
<field name="group_sdi_channel_validate_send"/>
</div>
<div class="o_setting_right_pane">
<label for="group_sdi_channel_validate_send"/>
<div class="text-muted">
Allow users to validate, export and send invoices to SdI in one click.
</div>
</div>
</div>
</div>
</xpath>
Expand Down

0 comments on commit 14e8db4

Please sign in to comment.