diff --git a/l10n_it_invoices_data_communication/README.rst b/l10n_it_invoices_data_communication/README.rst deleted file mode 100644 index 6267c55dadf7..000000000000 --- a/l10n_it_invoices_data_communication/README.rst +++ /dev/null @@ -1,109 +0,0 @@ -================================ -ITA - Comunicazione dati fatture -================================ - -.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! This file is generated by oca-gen-addon-readme !! - !! changes will be overwritten. !! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png - :target: https://odoo-community.org/page/development-status - :alt: Beta -.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png - :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html - :alt: License: AGPL-3 -.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fl10n--italy-lightgray.png?logo=github - :target: https://github.com/OCA/l10n-italy/tree/12.0/l10n_it_invoices_data_communication - :alt: OCA/l10n-italy -.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/l10n-italy-12-0/l10n-italy-12-0-l10n_it_invoices_data_communication - :alt: Translate me on Weblate -.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/122/12.0 - :alt: Try me on Runbot - -|badge1| |badge2| |badge3| |badge4| |badge5| - -**Italiano** - -Gestione comunicazione dati fatture ed esportazione file XML conforme alle specifiche dell'Agenzia delle Entrate. - -Riferimento: https://bit.ly/2N2Rhv8 - -**English** - -Invoices data comunication and XML file export, compliant to specifications of Revenue Agency. - -Reference: https://bit.ly/2N2Rhv8 - -**Table of contents** - -.. contents:: - :local: - -Known issues / Roadmap -====================== - -Qualora questo modulo venisse installato in un DB dove ``l10n_it_comunicazione_dati_iva`` è già installato, è necessario eseguire la sequente procedura: - -#. Installare ``openupgradelib`` -#. Lanciare odoo con il paramentro ``shell`` -#. Eseguire i seguenti comandi - - >>> from openupgradelib import openupgrade - >>> openupgrade.update_module_names(env.cr, [('l10n_it_comunicazione_dati_iva', 'l10n_it_invoices_data_communication'),], merge_modules=False,) - >>> env.cr.commit() - -#. Riavviare odoo -#. Aggiornare ``l10n_it_invoices_data_communication`` - -Bug Tracker -=========== - -Bugs are tracked on `GitHub Issues `_. -In case of trouble, please check there if your issue has already been reported. -If you spotted it first, help us smashing it by providing a detailed and welcomed -`feedback `_. - -Do not contact contributors directly about support or help with technical issues. - -Credits -======= - -Authors -~~~~~~~ - -* Openforce di Camilli Alessandro - -Contributors -~~~~~~~~~~~~ - -* Alessandro Camilli -* Lorenzo Battistini -* Francesco Apruzzese -* Glauco Prina - -Other credits -~~~~~~~~~~~~~ - -The development of this module has been financially supported by: - -* Odoo Italia Network - -Maintainers -~~~~~~~~~~~ - -This module is maintained by the OCA. - -.. image:: https://odoo-community.org/logo.png - :alt: Odoo Community Association - :target: https://odoo-community.org - -OCA, or the Odoo Community Association, is a nonprofit organization whose -mission is to support the collaborative development of Odoo features and -promote its widespread use. - -This module is part of the `OCA/l10n-italy `_ project on GitHub. - -You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/l10n_it_invoices_data_communication/__manifest__.py b/l10n_it_invoices_data_communication/__manifest__.py index c4237484c1a9..f57c413496c8 100644 --- a/l10n_it_invoices_data_communication/__manifest__.py +++ b/l10n_it_invoices_data_communication/__manifest__.py @@ -1,5 +1,5 @@ # Copyright 2017 Alessandro Camilli - Openforce -# Copyright 2017-2019 Lorenzo Battistini +# Copyright 2017-2021 Lorenzo Battistini # Copyright 2019 Glauco Prina - Linkit # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). @@ -7,17 +7,17 @@ "name": "ITA - Comunicazione dati fatture", "summary": 'Comunicazione dati fatture (c.d. "nuovo spesometro" o ' '"esterometro")', - "version": "12.0.1.3.1", + "version": "14.0.1.0.0", "category": "Account", - "author": "Openforce di Camilli Alessandro, " "Odoo Community Association (OCA)", + "author": "Openforce di Camilli Alessandro, Odoo Community Association (OCA)", "website": "https://github.com/OCA/l10n-italy", "license": "AGPL-3", "depends": [ "account", "l10n_it_fiscal_document_type", - "l10n_it_codici_carica", + "l10n_it_appointment_code", "l10n_it_fiscalcode", - "l10n_it_esigibilita_iva", + "l10n_it_vat_payability", "l10n_it_account_tax_kind", "l10n_it_account", ], diff --git a/l10n_it_invoices_data_communication/migrations/13.0.1.0.0/post-migrate.py b/l10n_it_invoices_data_communication/migrations/13.0.1.0.0/post-migrate.py new file mode 100644 index 000000000000..ff3bc422a6ac --- /dev/null +++ b/l10n_it_invoices_data_communication/migrations/13.0.1.0.0/post-migrate.py @@ -0,0 +1,55 @@ +from openupgradelib import openupgrade +from psycopg2 import sql + +invoice_data = ("comunicazione_dati_iva_escludi",) + + +@openupgrade.migrate() +def migrate(env, version): + if openupgrade.column_exists(env.cr, "account_move", "old_invoice_id"): + openupgrade.logged_query( + env.cr, + sql.SQL( + """UPDATE account_move m + SET {} + FROM account_invoice i + WHERE m.old_invoice_id = i.id + """ + ).format( + sql.SQL(", ").join( + sql.Composed( + [ + sql.Identifier(col), + sql.SQL(" = "), + sql.SQL("i."), + sql.Identifier(col), + ] + ) + for col in invoice_data + ) + ), + ) + + elif openupgrade.table_exists(env.cr, "account_invoice"): + openupgrade.logged_query( + env.cr, + sql.SQL( + """UPDATE account_move m + SET {} + FROM account_invoice i + WHERE i.move_id = m.id + """ + ).format( + sql.SQL(", ").join( + sql.Composed( + [ + sql.Identifier(col), + sql.SQL(" = "), + sql.SQL("i."), + sql.Identifier(col), + ] + ) + for col in invoice_data + ) + ), + ) diff --git a/l10n_it_invoices_data_communication/migrations/14.0.1.0.0/noupdate_changes.xml b/l10n_it_invoices_data_communication/migrations/14.0.1.0.0/noupdate_changes.xml new file mode 100644 index 000000000000..113ce4fde50b --- /dev/null +++ b/l10n_it_invoices_data_communication/migrations/14.0.1.0.0/noupdate_changes.xml @@ -0,0 +1,8 @@ + + + + ['|',('company_id','=',False),('company_id','in',company_ids)] + + diff --git a/l10n_it_invoices_data_communication/migrations/14.0.1.0.0/post-migration.py b/l10n_it_invoices_data_communication/migrations/14.0.1.0.0/post-migration.py new file mode 100644 index 000000000000..6e9e68960951 --- /dev/null +++ b/l10n_it_invoices_data_communication/migrations/14.0.1.0.0/post-migration.py @@ -0,0 +1,10 @@ +from openupgradelib import openupgrade # pylint: disable=W7936 + + +@openupgrade.migrate() +def migrate(env, version): + openupgrade.load_data( + env.cr, + "l10n_it_invoices_data_communication", + "migrations/14.0.1.0.0/noupdate_changes.xml", + ) diff --git a/l10n_it_invoices_data_communication/models/account_invoice.py b/l10n_it_invoices_data_communication/models/account_invoice.py index 796d7800a7f8..542f2b6c69d4 100644 --- a/l10n_it_invoices_data_communication/models/account_invoice.py +++ b/l10n_it_invoices_data_communication/models/account_invoice.py @@ -2,8 +2,8 @@ from odoo.exceptions import ValidationError -class AccountInvoice(models.Model): - _inherit = "account.invoice" +class AccountMove(models.Model): + _inherit = "account.move" comunicazione_dati_iva_escludi = fields.Boolean( string="Exclude from invoices communication" @@ -11,7 +11,7 @@ class AccountInvoice(models.Model): def _compute_taxes_in_company_currency(self, vals): try: - exchange_rate = self.amount_total_signed / self.amount_total_company_signed + exchange_rate = self.amount_total / self.amount_total_signed except ZeroDivisionError: exchange_rate = 1 vals["ImponibileImporto"] = vals["ImponibileImporto"] / exchange_rate @@ -19,64 +19,43 @@ def _compute_taxes_in_company_currency(self, vals): def _get_tax_comunicazione_dati_iva(self): self.ensure_one() - fattura = self tax_model = self.env["account.tax"] tax_lines = [] tax_grouped = {} - for tax_line in fattura.tax_line_ids: - tax = tax_line.tax_id + for tax in self.line_ids.mapped("tax_ids"): + base_move_lines = self.line_ids.filtered( + lambda line: tax.id in line.tax_ids.ids + ) + base = sum(base_move_lines.mapped("price_unit")) + tax_move_lines = self.line_ids.filtered( + lambda line: tax.id == line.tax_line_id.id + ) + imposta = sum(tax_move_lines.mapped("price_unit")) aliquota = tax.amount - parent = tax_model.search([("children_tax_ids", "in", [tax.id])]) - if parent: - main_tax = parent - aliquota = parent.amount - if ( - tax.cee_type - and tax.amount < 0 - and main_tax.kind_id.code.startswith("N6") - ): - continue - else: - main_tax = tax - kind_id = main_tax.kind_id.id - payability = main_tax.payability - imposta = tax_line.amount - base = tax_line.base - if main_tax.id not in tax_grouped: - tax_grouped[main_tax.id] = { - "ImponibileImporto": 0, - "Imposta": imposta, - "Aliquota": aliquota, - "Natura_id": kind_id, - "EsigibilitaIVA": payability, - "Detraibile": 0.0, - } - if fattura.type in ("in_invoice", "in_refund"): - tax_grouped[main_tax.id]["Detraibile"] = 100.0 - else: - tax_grouped[main_tax.id]["Imposta"] += imposta - if tax.account_id: - # account_id è valorizzato per la parte detraibile dell'imposta - # In questa tax_line è presente il totale dell'imponibile - # per l'imposta corrente - tax_grouped[main_tax.id]["ImponibileImporto"] += base + kind_id = tax.kind_id.id + payability = tax.payability + tax_grouped[tax.id] = { + "ImponibileImporto": base, + "Imposta": imposta, + "Aliquota": aliquota, + "Natura_id": kind_id, + "EsigibilitaIVA": payability, + "Detraibile": 0.0, + } + if self.move_type in ("in_invoice", "in_refund"): + tax_grouped[tax.id]["Detraibile"] = 100.0 + partial_tax = tax.invoice_repartition_line_ids.filtered( + lambda line: line.repartition_type == "tax" and line.account_id + ) + if partial_tax: + tax_grouped[tax.id]["Detraibile"] = partial_tax.factor_percent for tax_id in tax_grouped: tax = tax_model.browse(tax_id) vals = tax_grouped[tax_id] - if tax.children_tax_ids: - parte_detraibile = 0.0 - for child_tax in tax.children_tax_ids: - if child_tax.account_id: - parte_detraibile = child_tax.amount - break - if vals["Aliquota"] and parte_detraibile: - vals["Detraibile"] = 100 / (vals["Aliquota"] / parte_detraibile) - else: - vals["Detraibile"] = 0.0 vals = self._check_tax_comunicazione_dati_iva(tax, vals) - fattura._compute_taxes_in_company_currency(vals) + self._compute_taxes_in_company_currency(vals) tax_lines.append((0, 0, vals)) return tax_lines diff --git a/l10n_it_invoices_data_communication/models/communication.py b/l10n_it_invoices_data_communication/models/communication.py index 25a9260e719e..32cd46b74d59 100644 --- a/l10n_it_invoices_data_communication/models/communication.py +++ b/l10n_it_invoices_data_communication/models/communication.py @@ -27,7 +27,7 @@ def clear_xml_element(element): def clear_xml(xml_root): xml_root = etree.iterwalk(xml_root) - for dummy, xml_element in xml_root: + for _dummy, xml_element in xml_root: parent = xml_element.getparent() if clear_xml_element(xml_element): parent.remove(xml_element) @@ -50,7 +50,7 @@ class ComunicazioneDatiIva(models.Model): @api.model def _default_company(self): - company_id = self._context.get("company_id", self.env.user.company_id.id) + company_id = self._context.get("company_id", self.env.company.id) return company_id @api.constrains("identificativo") @@ -85,7 +85,7 @@ def _get_identificativo(self): string="Declarant fiscal code", help="Fiscal code of the person communicating the invoices data", ) - codice_carica_id = fields.Many2one("codice.carica", string="Role code") + codice_carica_id = fields.Many2one("appointment.code", string="Role code") date_start = fields.Date(string="Date start", required=True) date_end = fields.Date(string="Date end", required=True) fatture_emesse_ids = fields.One2many( @@ -204,15 +204,6 @@ def _get_identificativo(self): errors = fields.Text(copy=False) esterometro = fields.Boolean(default=True, string="Esterometro") - @api.onchange("company_id") - def onchange_company_id(self): - if self.company_id: - if self.company_id.partner_id.vat: - self.taxpayer_vat = self.company_id.partner_id.vat[2:] - else: - self.taxpayer_vat = "" - self.taxpayer_fiscalcode = self.company_id.partner_id.fiscalcode - @api.onchange("partner_cedente_id") def onchange_partner_cedente_id(self): for comunicazione in self: @@ -283,7 +274,6 @@ def _prepare_cedente_partner_id(self, partner, vals=None): vals["cedente_IdFiscaleIVA_IdCodice"] = vals_norm["IdFiscaleIVA_IdCodice"] return vals - @api.multi @api.onchange("partner_cessionario_id") def onchange_partner_cessionario_id(self): for comunicazione in self: @@ -402,11 +392,10 @@ def _prepare_fattura_ricevuta(self, vals, fattura): def _parse_fattura_numero(self, fattura_numero): try: fattura_numero = fattura_numero[-20:] - except: + except BaseException: pass return fattura_numero - @api.multi def compute_values(self): # Unlink existing lines self._unlink_sections() @@ -433,8 +422,8 @@ def _prepare_cessionari_dati_fatture(self, fatture_emesse, cessionari): "posizione": posizione, "invoice_id": fattura.id, "dati_fattura_TipoDocumento": fattura.fiscal_document_type_id.id, - "dati_fattura_Data": fattura.date_invoice, - "dati_fattura_Numero": self._parse_fattura_numero(fattura.number), + "dati_fattura_Data": fattura.invoice_date, + "dati_fattura_Numero": self._parse_fattura_numero(fattura.name), "dati_fattura_iva_ids": fattura._get_tax_comunicazione_dati_iva(), } val = self._prepare_fattura_emessa(val, fattura) @@ -468,13 +457,13 @@ def _get_fatture_emesse_domain(self): domain = [("comunicazione_dati_iva_escludi", "=", True)] no_journal_ids = self.env["account.journal"].search(domain).ids domain = [ - ("type", "in", ["out_invoice", "out_refund"]), + ("move_type", "in", ["out_invoice", "out_refund"]), ("comunicazione_dati_iva_escludi", "=", False), - ("move_id", "!=", False), - ("move_id.journal_id", "not in", no_journal_ids), + ("state", "=", "posted"), + ("journal_id", "not in", no_journal_ids), ("company_id", "=", self.company_id.id), - ("date_invoice", ">=", self.date_start), - ("date_invoice", "<=", self.date_end), + ("invoice_date", ">=", self.date_start), + ("invoice_date", "<=", self.date_end), "|", ("fiscal_document_type_id.out_invoice", "=", True), ("fiscal_document_type_id.out_refund", "=", True), @@ -486,7 +475,7 @@ def _get_fatture_emesse_domain(self): def _get_fatture_emesse(self): self.ensure_one() domain = self._get_fatture_emesse_domain() - return self.env["account.invoice"].search(domain) + return self.env["account.move"].search(domain) def _prepare_cedenti_dati_fatture(self, fatture_ricevute, cedenti): dati_fatture = [] @@ -503,9 +492,9 @@ def _prepare_cedenti_dati_fatture(self, fatture_ricevute, cedenti): "posizione": posizione, "invoice_id": fattura.id, "dati_fattura_TipoDocumento": fattura.fiscal_document_type_id.id, - "dati_fattura_Data": fattura.date_invoice, + "dati_fattura_Data": fattura.invoice_date, "dati_fattura_DataRegistrazione": fattura.date, - "dati_fattura_Numero": self._parse_fattura_numero(fattura.reference) + "dati_fattura_Numero": self._parse_fattura_numero(fattura.ref) or "", "dati_fattura_iva_ids": fattura._get_tax_comunicazione_dati_iva(), } @@ -536,13 +525,13 @@ def _get_fatture_ricevute_domain(self): domain = [("comunicazione_dati_iva_escludi", "=", True)] no_journal_ids = self.env["account.journal"].search(domain).ids domain = [ - ("type", "in", ["in_invoice", "in_refund"]), + ("move_type", "in", ["in_invoice", "in_refund"]), ("comunicazione_dati_iva_escludi", "=", False), - ("move_id", "!=", False), - ("move_id.journal_id", "not in", no_journal_ids), + ("state", "=", "posted"), + ("journal_id", "not in", no_journal_ids), ("company_id", "=", self.company_id.id), - ("date", ">=", self.date_start), - ("date", "<=", self.date_end), + ("invoice_date", ">=", self.date_start), + ("invoice_date", "<=", self.date_end), "|", ("fiscal_document_type_id.in_invoice", "=", True), ("fiscal_document_type_id.in_refund", "=", True), @@ -554,7 +543,7 @@ def _get_fatture_ricevute_domain(self): def _get_fatture_ricevute(self): self.ensure_one() domain = self._get_fatture_ricevute_domain() - return self.env["account.invoice"].search(domain) + return self.env["account.move"].search(domain) def _unlink_sections(self): for comunicazione in self: @@ -600,7 +589,7 @@ def split_communication(self): "fatture_emesse_ids.fatture_emesse_body_ids.invoice_id" ) cessionari = fatture_emesse.mapped("partner_id") - new_set = self.env["account.invoice"] + new_set = self.env["account.move"] old_set = fatture_emesse for cessionario in cessionari: fatture = fatture_emesse.filtered( @@ -608,9 +597,7 @@ def split_communication(self): ) if len(fatture) > 1000: new_set_ids = fatture.ids[: len(fatture) / 2] - new_partial_set = self.env["account.invoice"].browse( - new_set_ids - ) + new_partial_set = self.env["account.move"].browse(new_set_ids) new_set |= new_partial_set old_set -= new_partial_set self._unlink_sections() @@ -621,7 +608,7 @@ def split_communication(self): self.fatture_emesse_ids = dati_fatture_1 self.splitting_note = _( "Splitted considering invoices\n%s" - % "\n".join(old_set.mapped("number")) + % "\n".join(old_set.mapped("name")) ) comm_2 = self.copy() comm_2._unlink_sections() @@ -632,14 +619,14 @@ def split_communication(self): comm_2.fatture_emesse_ids = dati_fatture_2 comm_2.splitting_note = _( "Splitted considering invoices\n%s" - % "\n".join(new_set.mapped("number")) + % "\n".join(new_set.mapped("name")) ) return self | comm_2 elif self.dati_trasmissione == "DTR": if not self.check_fatture_ricevute_partners(): fatture_ricevute = self.mapped( - "fatture_ricevute_ids.fatture_ricevute_body_ids." "invoice_id" + "fatture_ricevute_ids.fatture_ricevute_body_ids.invoice_id" ) cedenti = fatture_ricevute.mapped("partner_id") first_set_ids = cedenti.ids[: len(cedenti) / 2] @@ -668,10 +655,10 @@ def split_communication(self): return self | comm_2 elif not self.check_fatture_ricevute_body(): fatture_ricevute = self.mapped( - "fatture_ricevute_ids.fatture_ricevute_body_ids." "invoice_id" + "fatture_ricevute_ids.fatture_ricevute_body_ids.invoice_id" ) cedenti = fatture_ricevute.mapped("partner_id") - new_set = self.env["account.invoice"] + new_set = self.env["account.move"] old_set = fatture_ricevute for cedente in cedenti: fatture = fatture_ricevute.filtered( @@ -679,9 +666,7 @@ def split_communication(self): ) if len(fatture) > 1000: new_set_ids = fatture.ids[: len(fatture) / 2] - new_partial_set = self.env["account.invoice"].browse( - new_set_ids - ) + new_partial_set = self.env["account.move"].browse(new_set_ids) new_set |= new_partial_set old_set -= new_partial_set self._unlink_sections() @@ -690,7 +675,7 @@ def split_communication(self): self.fatture_ricevute_ids = dati_fatture_1 self.splitting_note = _( "Splitted considering invoices\n%s" - % "\n".join(old_set.mapped("number")) + % "\n".join(old_set.mapped("name")) ) comm_2 = self.copy() comm_2._unlink_sections() @@ -699,7 +684,7 @@ def split_communication(self): comm_2.fatture_ricevute_ids = dati_fatture_2 comm_2.splitting_note = _( "Splitted considering invoices\n%s" - % "\n".join(new_set.mapped("number")) + % "\n".join(new_set.mapped("name")) ) return self | comm_2 @@ -748,7 +733,6 @@ def check_fatture_ricevute_partners(self): return False return True - @api.multi def _check_errors_dte(self): self.ensure_one() comunicazione = self @@ -984,11 +968,10 @@ def _check_errors_dte(self): if not invoice.dati_fattura_iva_ids: errors.append( _(u"No VAT data defined for invoice %s of partner %s") - % (invoice.invoice_id.number, partner.partner_id.display_name) + % (invoice.invoice_id.name, partner.partner_id.display_name) ) return errors - @api.multi def _check_errors_dtr(self): self.ensure_one() comunicazione = self @@ -1221,21 +1204,20 @@ def _check_errors_dtr(self): if not invoice.dati_fattura_iva_ids: errors.append( _(u"No VAT data defined for invoice %s of partner %s") - % (invoice.invoice_id.number, partner.partner_id.display_name) + % (invoice.invoice_id.name, partner.partner_id.display_name) ) if not invoice.dati_fattura_Numero: errors.append( _(u"No invoice number for supplier bill %s") - % (invoice.invoice_id.number) + % (invoice.invoice_id.name) ) if not invoice.dati_fattura_DataRegistrazione: errors.append( _(u"No registration date for supplier bill %s") - % (invoice.invoice_id.number) + % (invoice.invoice_id.name) ) return errors - @api.multi def check_errors(self): for comunicazione in self: errors = [] @@ -2152,7 +2134,6 @@ def _export_xml_get_ann(self): # etree.QName("Posizione")) return x_4_ann - @api.multi def get_export_xml_filename(self): self.ensure_one() filename = "{id}_{type}_{ann}{number}.{ext}".format( @@ -2164,7 +2145,6 @@ def get_export_xml_filename(self): ) return filename - @api.multi def get_export_xml(self): self.ensure_one() self._validate() @@ -2284,7 +2264,6 @@ def _compute_total(self): line.totale_imponibile = totale_imponibile line.totale_iva = totale_iva - @api.multi @api.onchange("partner_id") def onchange_partner_id(self): for fattura in self: @@ -2333,7 +2312,7 @@ def _compute_total(self): posizione = fields.Integer( "Position", help="Invoice position within transmitted file", required=True ) - invoice_id = fields.Many2one("account.invoice", string="Invoice") + invoice_id = fields.Many2one("account.move", string="Invoice") dati_fattura_TipoDocumento = fields.Many2one( "fiscal.document.type", string="Document type", required=True ) @@ -2358,8 +2337,8 @@ def onchange_invoice_id(self): and fattura.invoice_id.fiscal_document_type_id.id or False ) - fattura.dati_fattura_Numero = fattura.invoice_id.number - fattura.dati_fattura_Data = fattura.invoice_id.date_invoice + fattura.dati_fattura_Numero = fattura.invoice_id.name + fattura.dati_fattura_Data = fattura.invoice_id.invoice_date fattura.dati_fattura_iva_ids = ( fattura.invoice_id._get_tax_comunicazione_dati_iva() ) @@ -2550,7 +2529,7 @@ def _compute_total(self): posizione = fields.Integer( "Position", help="Invoice position within transmitted file", required=True ) - invoice_id = fields.Many2one("account.invoice", string="Invoice") + invoice_id = fields.Many2one("account.move", string="Invoice") dati_fattura_TipoDocumento = fields.Many2one( "fiscal.document.type", string="Document type", required=True ) @@ -2578,8 +2557,8 @@ def onchange_invoice_id(self): and fattura.invoice_id.fiscal_document_type_id.id or False ) - fattura.dati_fattura_Numero = fattura.invoice_id.number - fattura.dati_fattura_Data = fattura.invoice_id.date_invoice + fattura.dati_fattura_Numero = fattura.invoice_id.name + fattura.dati_fattura_Data = fattura.invoice_id.invoice_date fattura.dati_fattura_DataRegistrazione = fattura.invoice_id.date # tax tax_lines = [] diff --git a/l10n_it_invoices_data_communication/readme/ROADMAP.rst b/l10n_it_invoices_data_communication/readme/ROADMAP.rst deleted file mode 100644 index c1f5facee7ce..000000000000 --- a/l10n_it_invoices_data_communication/readme/ROADMAP.rst +++ /dev/null @@ -1,12 +0,0 @@ -Qualora questo modulo venisse installato in un DB dove ``l10n_it_comunicazione_dati_iva`` è già installato, è necessario eseguire la sequente procedura: - -#. Installare ``openupgradelib`` -#. Lanciare odoo con il paramentro ``shell`` -#. Eseguire i seguenti comandi - - >>> from openupgradelib import openupgrade - >>> openupgrade.update_module_names(env.cr, [('l10n_it_comunicazione_dati_iva', 'l10n_it_invoices_data_communication'),], merge_modules=False,) - >>> env.cr.commit() - -#. Riavviare odoo -#. Aggiornare ``l10n_it_invoices_data_communication`` diff --git a/l10n_it_invoices_data_communication/security/ir.model.access.csv b/l10n_it_invoices_data_communication/security/ir.model.access.csv index ec74eafae755..9de0c1b7e04b 100644 --- a/l10n_it_invoices_data_communication/security/ir.model.access.csv +++ b/l10n_it_invoices_data_communication/security/ir.model.access.csv @@ -6,3 +6,6 @@ account_comunicazione_dati_iva_fatture_emesse_body_manager,comunicazione.dati.iv account_comunicazione_dati_iva_fatture_ricevute_manager,comunicazione.dati.iva.fatture.ricevute,model_comunicazione_dati_iva_fatture_ricevute,account.group_account_manager,1,1,1,1 account_comunicazione_dati_iva_fatture_ricevute_body_manager,comunicazione.dati.iva.fatture.ricevute.body,model_comunicazione_dati_iva_fatture_ricevute_body,account.group_account_manager,1,1,1,1 account_comunicazione_dati_iva_fatture_ricevute_iva_manager,comunicazione.dati.iva.fatture.ricevute.iva,model_comunicazione_dati_iva_fatture_ricevute_iva,account.group_account_manager,1,1,1,1 +account_comunicazione_dati_iva_ricalcolo_tipo_document_fiscale,comunicazione.dati.iva.ricalcolo.tipo.document.fiscale,model_comunicazione_dati_iva_ricalcolo_tipo_document_fiscale,account.group_account_manager,1,1,1,1 +account_comunicazione_dati_iva_export_file,comunicazione.dati.iva.export.file,model_comunicazione_dati_iva_export_file,account.group_account_manager,1,1,1,1 +account_wizard_split_big_invoices_communication,wizard.split.big.invoices.communication,model_wizard_split_big_invoices_communication,account.group_account_manager,1,1,1,1 diff --git a/l10n_it_invoices_data_communication/security/security.xml b/l10n_it_invoices_data_communication/security/security.xml index fbba8e9db559..fef32b3eeac6 100644 --- a/l10n_it_invoices_data_communication/security/security.xml +++ b/l10n_it_invoices_data_communication/security/security.xml @@ -8,7 +8,7 @@ ['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])] + >['|',('company_id','=',False),('company_id','in',company_ids)] diff --git a/l10n_it_invoices_data_communication/views/account_invoice_view.xml b/l10n_it_invoices_data_communication/views/account_invoice_view.xml index 45e62e8f31ea..640b6f106414 100644 --- a/l10n_it_invoices_data_communication/views/account_invoice_view.xml +++ b/l10n_it_invoices_data_communication/views/account_invoice_view.xml @@ -1,32 +1,12 @@ - + - - account.invoice.supp.fiscal.document.type.form - account.invoice - - - - - - - - - - account.invoice.cus.fiscal.document.type.supp.form - account.invoice + account.invoice.fiscal.document.type.form + account.move @@ -37,7 +17,5 @@ - - - + diff --git a/l10n_it_invoices_data_communication/wizard/compute_fiscal_document_type.py b/l10n_it_invoices_data_communication/wizard/compute_fiscal_document_type.py index 67839794a3bf..8c930469f4a9 100644 --- a/l10n_it_invoices_data_communication/wizard/compute_fiscal_document_type.py +++ b/l10n_it_invoices_data_communication/wizard/compute_fiscal_document_type.py @@ -1,32 +1,31 @@ -from odoo import api, models +from odoo import models class ComunicazioneDatiIvaRicalcoloTipoDocumentoFiscale(models.TransientModel): _name = "comunicazione.dati.iva.ricalcolo.tipo.document.fiscale" _description = "Recompute invoices document type" - @api.multi def compute(self): comunicazione_ids = self._context.get("active_ids") - for wizard in self: + for _wizard in self: for comunicazione in self.env["comunicazione.dati.iva"].browse( comunicazione_ids ): domain = [("comunicazione_dati_iva_escludi", "=", True)] no_journal_ids = self.env["account.journal"].search(domain).ids domain = [ - ("move_id", "!=", False), + ("state", "=", "posted"), ("comunicazione_dati_iva_escludi", "!=", True), - ("move_id.journal_id", "not in", no_journal_ids), + ("journal_id", "not in", no_journal_ids), ("company_id", ">=", comunicazione.company_id.id), - ("date_invoice", ">=", comunicazione.date_start), - ("date_invoice", "<=", comunicazione.date_end), + ("invoice_date", ">=", comunicazione.date_start), + ("invoice_date", "<=", comunicazione.date_end), ] - fatture = self.env["account.invoice"].search(domain) + fatture = self.env["account.move"].search(domain) for fattura in fatture: fattura.fiscal_document_type_id = ( fattura._get_document_fiscal_type( - type=fattura.type, + move_type=fattura.move_type, partner=fattura.partner_id, fiscal_position=fattura.fiscal_position_id, journal=fattura.journal_id, diff --git a/l10n_it_invoices_data_communication/wizard/compute_fiscal_document_type_view.xml b/l10n_it_invoices_data_communication/wizard/compute_fiscal_document_type_view.xml index 4953bf891c3d..1b21d949d7f8 100644 --- a/l10n_it_invoices_data_communication/wizard/compute_fiscal_document_type_view.xml +++ b/l10n_it_invoices_data_communication/wizard/compute_fiscal_document_type_view.xml @@ -37,7 +37,6 @@ comunicazione.dati.iva.ricalcolo.tipo.document.fiscale - form form new diff --git a/l10n_it_invoices_data_communication/wizard/export_file.py b/l10n_it_invoices_data_communication/wizard/export_file.py index 3ac795ba5208..31c56693e67c 100644 --- a/l10n_it_invoices_data_communication/wizard/export_file.py +++ b/l10n_it_invoices_data_communication/wizard/export_file.py @@ -1,6 +1,6 @@ import base64 -from odoo import _, api, exceptions, fields, models +from odoo import _, exceptions, fields, models class ComunicazioneDatiIvaExportFile(models.TransientModel): @@ -11,7 +11,6 @@ class ComunicazioneDatiIvaExportFile(models.TransientModel): filename = fields.Char() name = fields.Char("File Name", readonly=True, default="dati_iva.xml") - @api.multi def export(self): comunicazione_ids = self._context.get("active_ids") @@ -36,7 +35,6 @@ def export(self): view_id = view_rec and view_rec[1] or False return { - "view_type": "form", "view_id": [view_id], "view_mode": "form", "res_model": "comunicazione.dati.iva.export.file", diff --git a/l10n_it_invoices_data_communication/wizard/export_file_view.xml b/l10n_it_invoices_data_communication/wizard/export_file_view.xml index 00cac44fc0ad..30533511951c 100644 --- a/l10n_it_invoices_data_communication/wizard/export_file_view.xml +++ b/l10n_it_invoices_data_communication/wizard/export_file_view.xml @@ -43,7 +43,6 @@ Export invoices data file comunicazione.dati.iva.export.file - form form new diff --git a/l10n_it_invoices_data_communication/wizard/split_big_communication.py b/l10n_it_invoices_data_communication/wizard/split_big_communication.py index a4d3468a081d..c9c12dbad48e 100644 --- a/l10n_it_invoices_data_communication/wizard/split_big_communication.py +++ b/l10n_it_invoices_data_communication/wizard/split_big_communication.py @@ -1,11 +1,10 @@ -from odoo import _, api, exceptions, models +from odoo import _, exceptions, models class SplitBigCommunication(models.TransientModel): _name = "wizard.split.big.invoices.communication" _description = "Split big invoices communication" - @api.multi def split(self): comunicazione_ids = self._context.get("active_ids") communications = self.env["comunicazione.dati.iva"].browse(comunicazione_ids) @@ -14,7 +13,6 @@ def split(self): res = communications.split_communications() return { "type": "ir.actions.act_window", - "view_type": "form", "view_mode": "tree,form", "res_model": "comunicazione.dati.iva", "domain": [("id", "in", res.ids)], diff --git a/l10n_it_invoices_data_communication/wizard/split_big_communication_view.xml b/l10n_it_invoices_data_communication/wizard/split_big_communication_view.xml index aa4175acc8d1..32e3779ab330 100644 --- a/l10n_it_invoices_data_communication/wizard/split_big_communication_view.xml +++ b/l10n_it_invoices_data_communication/wizard/split_big_communication_view.xml @@ -30,7 +30,6 @@ Split big communication ir.actions.act_window wizard.split.big.invoices.communication - form form new