From f3a1c01a3f4e853f37283d03356411f3b555ee2c Mon Sep 17 00:00:00 2001 From: KNVx Date: Wed, 2 Nov 2022 13:56:34 +0100 Subject: [PATCH 1/5] [ADD] l10n_es_aeat_sii_special_prorate_regularization_capital_asset: New Module --- .../README.rst | 27 + .../__init__.py | 1 + .../__manifest__.py | 24 + .../data/aeat_sii_queue_job.xml | 29 + .../i18n/es.po | 396 +++++++++++++ .../models/__init__.py | 5 + .../models/account_asset.py | 31 + .../models/aeat_tax_agency.py | 18 + .../capital_asset_prorate_regularization.py | 542 ++++++++++++++++++ .../models/mod303.py | 70 +++ .../models/res_company.py | 54 ++ .../static/description/icon.png | Bin 0 -> 6342 bytes .../views/account_asset.xml | 81 +++ .../capital_asset_prorate_regularization.xml | 68 +++ .../views/mod303_views.xml | 35 ++ .../views/res_company_view.xml | 34 ++ 16 files changed, 1415 insertions(+) create mode 100644 l10n_es_aeat_sii_special_prorate_regularization_capital_asset/README.rst create mode 100644 l10n_es_aeat_sii_special_prorate_regularization_capital_asset/__init__.py create mode 100644 l10n_es_aeat_sii_special_prorate_regularization_capital_asset/__manifest__.py create mode 100644 l10n_es_aeat_sii_special_prorate_regularization_capital_asset/data/aeat_sii_queue_job.xml create mode 100644 l10n_es_aeat_sii_special_prorate_regularization_capital_asset/i18n/es.po create mode 100644 l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/__init__.py create mode 100644 l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/account_asset.py create mode 100644 l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/aeat_tax_agency.py create mode 100644 l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/capital_asset_prorate_regularization.py create mode 100644 l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/mod303.py create mode 100644 l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/res_company.py create mode 100644 l10n_es_aeat_sii_special_prorate_regularization_capital_asset/static/description/icon.png create mode 100644 l10n_es_aeat_sii_special_prorate_regularization_capital_asset/views/account_asset.xml create mode 100644 l10n_es_aeat_sii_special_prorate_regularization_capital_asset/views/capital_asset_prorate_regularization.xml create mode 100644 l10n_es_aeat_sii_special_prorate_regularization_capital_asset/views/mod303_views.xml create mode 100644 l10n_es_aeat_sii_special_prorate_regularization_capital_asset/views/res_company_view.xml diff --git a/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/README.rst b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/README.rst new file mode 100644 index 000000000..45dd0fc3b --- /dev/null +++ b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/README.rst @@ -0,0 +1,27 @@ +.. image:: https://img.shields.io/badge/license-AGPL--3-blue.png + :target: https://www.gnu.org/licenses/agpl + :alt: License: AGPL-3 + +======================================================= +AEAT SII - Special Prorate Regularization Capital Asset +======================================================= + +* This module allows to send automaticaly to the SII the capital assets prorate regularization. + +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. + +Credits +======= + +Contributors +------------ + +* Kilian Niubo +* Eric Antones + diff --git a/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/__init__.py b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/__init__.py new file mode 100644 index 000000000..0650744f6 --- /dev/null +++ b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/__manifest__.py b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/__manifest__.py new file mode 100644 index 000000000..2c00603f6 --- /dev/null +++ b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/__manifest__.py @@ -0,0 +1,24 @@ +# Copyright NuoBiT - Kilian Niubo +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) + +{ + "name": "AEAT SII - Special Prorate Regularization Capital Asset", + "summary": "This module allows send to SII automaticaly the " + "capital assets prorate regularization.", + "version": "14.0.1.0.0", + "category": "Accounting", + "author": "NuoBiT Solutions, S.L.", + "website": "https://github.com/nuobit/odoo-addons", + "license": "AGPL-3", + "depends": [ + "l10n_es_aeat_mod303_special_prorate_regularization_capital_asset", + "l10n_es_aeat_sii_oca_extension", + ], + "data": [ + "data/aeat_sii_queue_job.xml", + "views/account_asset.xml", + "views/mod303_views.xml", + "views/capital_asset_prorate_regularization.xml", + "views/res_company_view.xml", + ], +} diff --git a/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/data/aeat_sii_queue_job.xml b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/data/aeat_sii_queue_job.xml new file mode 100644 index 000000000..11cf09b5a --- /dev/null +++ b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/data/aeat_sii_queue_job.xml @@ -0,0 +1,29 @@ + + + + root.capital_asset_validate_sii + + + + + confirm_one_capital_asset_prorate_line + + + + + cancel_one_capital_asset_prorate_line + + + diff --git a/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/i18n/es.po b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/i18n/es.po new file mode 100644 index 000000000..fe684704d --- /dev/null +++ b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/i18n/es.po @@ -0,0 +1,396 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * l10n_es_aeat_sii_special_prorate_regularization_capital_asset +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-21 14:30+0000\n" +"PO-Revision-Date: 2022-11-21 14:30+0000\n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model:ir.model,name:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.model_l10n_es_aeat_mod303_report +msgid "AEAT 303 Report" +msgstr "Modelo AEAT 303" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model:ir.model.fields.selection,name:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.selection__capital_asset_prorate_regularization__sii_state__sent_w_errors +msgid "Accepted with errors" +msgstr "Aceptado con errores" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model:ir.model,name:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.model_aeat_tax_agency +msgid "Aeat Tax Agency" +msgstr "Agencia Tributaria AEAT" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model:ir.model,name:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.model_account_asset +msgid "Asset" +msgstr "Activo" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model:ir.model.fields.selection,name:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.selection__res_company__capital_asset_send_mode__fixed +msgid "At fixed time" +msgstr "A una hora fija" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model_terms:ir.ui.view,arch_db:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.view_l10n_es_aeat_mod303_report_form +msgid "Cancel capital assets prorate regularization SII" +msgstr "" +"Cancelar la regularización de la prorata de los bienes de inversion del SII" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model_terms:ir.ui.view,arch_db:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.view_l10n_es_aeat_mod303_report_form +msgid "Cancel field 43 to SII" +msgstr "Cancelación casilla 43 al SII" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model:ir.model.fields.selection,name:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.selection__capital_asset_prorate_regularization__sii_state__cancelled +msgid "Cancelled" +msgstr "Cancelado" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model:ir.model.fields.selection,name:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.selection__capital_asset_prorate_regularization__sii_state__cancelled_modified +msgid "Cancelled in SII but last modifications not sent" +msgstr "Cancelado en SII pero las ultimas modificaciones no han sido enviadas" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model_terms:ir.ui.view,arch_db:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.capital_asset_prorate_regularization_view_form +msgid "Capital Asset Prorate Regularization" +msgstr "Regularizacion de la prorata de los bienes de inversión" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model_terms:ir.ui.view,arch_db:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.view_company_capital_asset_sii_form +msgid "Capital Asset connector config" +msgstr "Conector configuración - Bienes de inversión" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model:ir.model.fields,help:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_res_company__capital_asset_use_connector +msgid "" +"Check it to use connector instead of sending the invoice directly when it's " +"validated" +msgstr "" +"Márquelo para usar el conector en lugar de enviar la factura directamente " +"cuando se valida" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model:ir.model,name:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.model_res_company +msgid "Companies" +msgstr "Compañías" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_capital_asset_prorate_regularization__asset_prorate_line_job_ids +#: model_terms:ir.ui.view,arch_db:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.capital_asset_prorate_regularization_view_form +msgid "Connector Jobs" +msgstr "Trabajos del conector" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_res_company__capital_asset_delay_time +msgid "Delay time" +msgstr "Tiempo de retardo" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_account_asset__display_name +#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_aeat_tax_agency__display_name +#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_capital_asset_prorate_regularization__display_name +#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_l10n_es_aeat_mod303_report__display_name +#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_res_company__display_name +msgid "Display Name" +msgstr "Nombre mostrado" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_capital_asset_prorate_regularization__sii_enabled +msgid "Enable SII" +msgstr "Activar SII" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: code:addons/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/mod303.py:0 +#, python-format +msgid "" +"Exist prorate lines in year: %s in assets %s with capital asset prorate " +"lines. Please send the cancellation to the sii before canceling the 303 " +"model." +msgstr "" +"Existen lineas de prorata en el año: %s en los activos %s con regularización" +" de prorata de bienes de inversión.Por favor, envie la anulacion al SII " +"antes de cancelar el modelo 303." + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model_terms:ir.ui.view,arch_db:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.capital_asset_prorate_regularization_view_form +msgid "General" +msgstr "" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_account_asset__id +#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_aeat_tax_agency__id +#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_capital_asset_prorate_regularization__id +#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_l10n_es_aeat_mod303_report__id +#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_res_company__id +msgid "ID" +msgstr "Identificador" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model:ir.model.fields,help:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_capital_asset_prorate_regularization__sii_send_failed +msgid "" +"Indicates that the last attempt to communicate this invoice to the SII has " +"failed. See SII return for details" +msgstr "" +"Indica que el último intento de comunicar la factura al SII ha fallado. Ver " +"el retorno SII para más detalles" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model:ir.model.fields,help:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_capital_asset_prorate_regularization__sii_account_registration_date +msgid "" +"Indicates the account registration date set at the SII, which must be the " +"date when the invoice is recorded in the system and is independent of the " +"date of the accounting entry of the invoice" +msgstr "" +"Indica la fecha de registro contable establecida en el SII, la cual debe ser" +" la fecha en que se registra la factura en el sistema con independencia de " +"la fecha del asiento contable de la factura" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model:ir.model.fields,help:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_capital_asset_prorate_regularization__sii_state +msgid "" +"Indicates the state of this invoice in relation with the presentation at the" +" SII" +msgstr "Indica el estado de esta factura en relación al registro en el SII" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_account_asset____last_update +#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_aeat_tax_agency____last_update +#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_capital_asset_prorate_regularization____last_update +#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_l10n_es_aeat_mod303_report____last_update +#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_res_company____last_update +msgid "Last Modified on" +msgstr "Última modificación" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: code:addons/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/capital_asset_prorate_regularization.py:0 +#, python-format +msgid "No VAT configured for the company '{}'" +msgstr "No esta configurado el CIF para la compañia '{}'" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model:ir.model.fields.selection,name:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.selection__capital_asset_prorate_regularization__sii_state__not_sent +msgid "Not sent" +msgstr "No registrada" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model:ir.model.fields.selection,name:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.selection__res_company__capital_asset_send_mode__auto +msgid "On validate" +msgstr "Al validar" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: code:addons/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/mod303.py:0 +#, python-format +msgid "" +"Please, post capital asset prorate move of the 303 model before send capital" +" asset prorate regularization to SII" +msgstr "" +"Por favor, publique el asiento de los bienes de inversión del modelo 303 " +"antes de mandar la regularización de los bienes de inversión al SII" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: code:addons/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/capital_asset_prorate_regularization.py:0 +#, python-format +msgid "" +"Please, post capital asset prorate regularization move before send capital " +"asset prorate regularization to SII" +msgstr "" +"Por favor, publique el asiento de los bienes de inversión del modelo 303 " +"antes de mandar la regularización de los bienes de inversión al SII" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_l10n_es_aeat_mod303_report__prorate_asset_lines_to_cancel +msgid "Prorate Asset Lines To Cancel" +msgstr "Lineas de prorata de activo para cancelar" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_l10n_es_aeat_mod303_report__prorate_asset_lines_to_send +msgid "Prorate Asset Lines To Send" +msgstr "Lineas de prorata de activo para enviar" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model:ir.model.fields.selection,name:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.selection__capital_asset_prorate_regularization__sii_state__sent_modified +msgid "Registered in SII but last modifications not sent" +msgstr "Registro correcto en SII con modificaciones pendientes de comunicar" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_capital_asset_prorate_regularization__sii_csv +msgid "SII CSV" +msgstr "" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model_terms:ir.ui.view,arch_db:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.account_asset_view_search +msgid "SII Cancelled" +msgstr "" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model_terms:ir.ui.view,arch_db:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.capital_asset_prorate_regularization_view_form +msgid "SII Information" +msgstr "Información SII" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model_terms:ir.ui.view,arch_db:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.capital_asset_prorate_regularization_view_form +msgid "SII Result" +msgstr "Resultado SII" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_capital_asset_prorate_regularization__sii_return +msgid "SII Return" +msgstr "Retorno SII" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_capital_asset_prorate_regularization__sii_send_error +msgid "SII Send Error" +msgstr "Error de envío SII" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_account_asset__sii_send_errors +msgid "SII Send Errors" +msgstr "Errores de envío SII" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model_terms:ir.ui.view,arch_db:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.account_asset_view_search +msgid "SII Sent" +msgstr "" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_capital_asset_prorate_regularization__sii_account_registration_date +msgid "SII account registration date" +msgstr "Fecha de registro contable SII" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model_terms:ir.ui.view,arch_db:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.account_asset_view_search +msgid "SII error" +msgstr "" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_capital_asset_prorate_regularization__sii_content_sent +msgid "SII last content sent" +msgstr "Último contenido enviado al SII" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_capital_asset_prorate_regularization__sii_header_sent +msgid "SII last header sent" +msgstr "Última cabecera enviada al SII" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model_terms:ir.ui.view,arch_db:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.account_asset_view_search +msgid "SII not sent" +msgstr "" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_capital_asset_prorate_regularization__sii_send_failed +msgid "SII send failed" +msgstr "Envío SII fallido" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_capital_asset_prorate_regularization__sii_state +msgid "SII send state" +msgstr "Estado de envío SII" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model_terms:ir.ui.view,arch_db:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.account_asset_view_search +msgid "SII sent with errors" +msgstr "" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model_terms:ir.ui.view,arch_db:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.account_asset_view_form +msgid "Send asset to SII" +msgstr "Enviar activo al SII" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model_terms:ir.ui.view,arch_db:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.account_asset_view_form +msgid "Send cancellation to SII" +msgstr "Enviar anulación al SII" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model_terms:ir.ui.view,arch_db:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.view_l10n_es_aeat_mod303_report_form +msgid "Send capital assets prorate regularization to SII" +msgstr "" +"Enviar regularización de la prorrata de los bienes de inversion al SII" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model_terms:ir.ui.view,arch_db:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.view_l10n_es_aeat_mod303_report_form +msgid "Send field 43 to SII" +msgstr "Enviar casilla 43 al SII" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_res_company__capital_asset_send_mode +msgid "Send mode" +msgstr "Modo de envío" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model:ir.model.fields.selection,name:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.selection__capital_asset_prorate_regularization__sii_state__sent +msgid "Sent" +msgstr "Enviada" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_res_company__capital_asset_sent_time +msgid "Sent time" +msgstr "Hora de envío" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model_terms:ir.ui.view,arch_db:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.capital_asset_prorate_regularization_view_form +msgid "Technical" +msgstr "" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: code:addons/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/capital_asset_prorate_regularization.py:0 +#, python-format +msgid "" +"The fiscal position of the partner and of the invoice is different.Please " +"review asset: {%i} %s" +msgstr "" +"La posicion fiscal de la empresa y de la factura es distinta. Por favor, " +"revise el activo {%i} %s." + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: code:addons/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/capital_asset_prorate_regularization.py:0 +#, python-format +msgid "The partner has not a VAT configured." +msgstr "" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: code:addons/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/capital_asset_prorate_regularization.py:0 +#, python-format +msgid "This company doesn't have SII enabled." +msgstr "Esta compañia no tiene habilitado el SII" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_res_company__capital_asset_use_connector +msgid "Use connector" +msgstr "Usar conector" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model:ir.model.fields.selection,name:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.selection__res_company__capital_asset_send_mode__delayed +msgid "With delay" +msgstr "Con retardo" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: code:addons/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/capital_asset_prorate_regularization.py:0 +#, python-format +msgid "" +"You can't delete a capital asset prorate regularization line if it has been " +"previously sent" +msgstr "No se puede eliminar una línea de regularizacion de prorata del bien de inversión si esta ha sido anteriormente enviada al SII" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: code:addons/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/capital_asset_prorate_regularization.py:0 +#, python-format +msgid "You have to select what account chart template use this company." +msgstr "Debe seleccionar qué plan contable utiliza esta compañía." + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model:ir.model,name:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.model_capital_asset_prorate_regularization +msgid "capital.asset.prorate.regularization" +msgstr "" diff --git a/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/__init__.py b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/__init__.py new file mode 100644 index 000000000..bf3f241ec --- /dev/null +++ b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/__init__.py @@ -0,0 +1,5 @@ +from . import account_asset +from . import aeat_tax_agency +from . import mod303 +from . import capital_asset_prorate_regularization +from . import res_company diff --git a/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/account_asset.py b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/account_asset.py new file mode 100644 index 000000000..ab921a24d --- /dev/null +++ b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/account_asset.py @@ -0,0 +1,31 @@ +# Copyright NuoBiT - Kilian Niubo +# Copyright NuoBiT - Eric Antones +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class AccountAsset(models.Model): + _inherit = "account.asset" + + sii_send_errors = fields.Char( + string="SII Send Errors", + compute="_compute_sii_send_errors", + store=True, + readonly=True, + ) + + @api.depends( + "capital_asset_prorate_regularization_ids", + "capital_asset_prorate_regularization_ids.sii_send_error", + ) + def _compute_sii_send_errors(self): + for rec in self: + if rec.capital_asset_prorate_regularization_ids: + rec.sii_send_errors = ", ".join( + sorted( + rec.capital_asset_prorate_regularization_ids.filtered( + "sii_send_error" + ).mapped("sii_send_error") + ) + ) diff --git a/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/aeat_tax_agency.py b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/aeat_tax_agency.py new file mode 100644 index 000000000..805b3058b --- /dev/null +++ b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/aeat_tax_agency.py @@ -0,0 +1,18 @@ +# Copyright NuoBiT - Kilian Niubo +# Copyright NuoBiT - Eric Antones +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import models + + +class AeatTaxAgency(models.Model): + _inherit = "aeat.tax.agency" + + def _prepare_sii_wdsl_mapping(self): + return {**super()._prepare_sii_wdsl_mapping(), "capital_asset": "sii_wsdl_pi"} + + def _prepare_sii_port_name_mapping(self): + return { + **super()._prepare_sii_port_name_mapping(), + "capital_asset": "SuministroBienesInversion", + } diff --git a/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/capital_asset_prorate_regularization.py b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/capital_asset_prorate_regularization.py new file mode 100644 index 000000000..605526dc7 --- /dev/null +++ b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/capital_asset_prorate_regularization.py @@ -0,0 +1,542 @@ +# Copyright NuoBiT - Kilian Niubo +# Copyright NuoBiT - Eric Antones +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) + +import json +import logging + +from requests import Session + +from odoo import _, api, exceptions, fields, models +from odoo.exceptions import ValidationError +from odoo.modules.registry import Registry + +from odoo.addons.l10n_es_aeat_sii_oca.models.account_move import ( + SII_STATES, + SII_VERSION, + round_by_keys, +) + +_logger = logging.getLogger(__name__) +try: + from zeep import Client + from zeep.plugins import HistoryPlugin + from zeep.transports import Transport +except (ImportError, IOError) as err: + _logger.debug(err) + +try: + pass +except ImportError: + _logger.debug("Can not `import queue_job`.") + + +class AssetProrateRegularization(models.Model): + _inherit = "capital.asset.prorate.regularization" + + sii_state = fields.Selection( + selection=SII_STATES, + string="SII send state", + default="not_sent", + readonly=True, + copy=False, + help="Indicates the state of this invoice in relation with the " + "presentation at the SII", + ) + sii_csv = fields.Char( + string="SII CSV", + copy=False, + readonly=True, + ) + sii_return = fields.Text( + string="SII Return", + copy=False, + readonly=True, + ) + sii_header_sent = fields.Text( + string="SII last header sent", + copy=False, + readonly=True, + ) + sii_content_sent = fields.Text( + string="SII last content sent", + copy=False, + readonly=True, + ) + sii_send_error = fields.Text( + string="SII Send Error", + copy=False, + readonly=True, + ) + sii_send_failed = fields.Boolean( + string="SII send failed", + copy=False, + help="Indicates that the last attempt to communicate this invoice to " + "the SII has failed. See SII return for details", + ) + + sii_account_registration_date = fields.Date( + string="SII account registration date", + readonly=True, + copy=False, + help="Indicates the account registration date set at the SII, which " + "must be the date when the invoice is recorded in the system and " + "is independent of the date of the accounting entry of the " + "invoice", + ) + asset_prorate_line_job_ids = fields.Many2many( + comodel_name="queue.job", + column1="asset_prorate_line_id", + column2="job_id", + # TODO: remove this comment.Nom relation Massa llarg? + relation="capital_asset_prorate_regularization_queue_job_rel", + string="Connector Jobs", + copy=False, + ) + sii_enabled = fields.Boolean(string="Enable SII", compute="_compute_sii_enabled") + + def _compute_sii_enabled(self): + """Compute if the asset is enabled for the SII""" + for line in self: + if line.asset_id.company_id.sii_enabled: + asset_invoice = self.asset_id.invoice_move_line_id.move_id + self.sii_enabled = ( + asset_invoice.fiscal_position_id + and asset_invoice.fiscal_position_id.sii_active + ) or not asset_invoice.fiscal_position_id + else: + self.sii_enabled = False + + def _get_account_registration_date(self): + """Hook method to allow the setting of the account registration date + of each supplier invoice. The SII recommends to set the send date as + the default value (point 9.3 of the document + SII_Descripcion_ServicioWeb_v0.7.pdf), so by default we return + the current date or, if exists, the stored + sii_account_registration_date + :return String date in the format %Y-%m-%d""" + self.ensure_one() + return self.sii_account_registration_date or fields.Date.today() + + def confirm_one_capital_asset_prorate_line(self): + self.sudo()._send_asset_to_sii() + + def cancel_one_capital_asset_prorate_line(self): + self.sudo()._cancel_asset_to_sii() + + def _process_asset_for_sii_send(self): + """Process invoices for sending to the SII. Adds general checks from + configuration parameters and invoice availability for SII. If the + invoice is to be sent the decides the send method: direct send or + via connector depending on 'Use connector' configuration""" + # TODO: descomentar + queue_obj = self.env["queue.job"].sudo() + for asset_line in self: + company = asset_line.asset_id.company_id + if not company.capital_asset_use_connector: + asset_line._send_asset_to_sii() + # TODO:descomentar cuando esten los jobs + else: + eta = company._get_sii_eta_capital_assets() + new_delay = ( + asset_line.sudo() + .with_context(company_id=company.id) + .with_delay(eta=eta if not asset_line.sii_send_failed else False) + .confirm_one_capital_asset_prorate_line() + ) + job = queue_obj.search([("uuid", "=", new_delay.uuid)], limit=1) + asset_line.sudo().asset_prorate_line_job_ids |= job + + def send_asset_sii(self): + if ( + self.mod303_id + and self.mod303_id.move_prorate_capital_asset_id.state == "draft" + or (self.mod303_id and not self.mod303_id.move_prorate_capital_asset_id) + ): + raise ValidationError( + _( + "Please, post capital asset prorate regularization move before send " + "capital asset prorate regularization to SII" + ) + ) + if not self._cancel_asset_jobs(): + self._process_asset_for_sii_send() + + def _send_asset_to_sii(self): + serv = self._connect_sii("capital_asset") + if self.sii_state == "not_sent": + tipo_comunicacion = "A0" + else: + tipo_comunicacion = "A1" + header = self._get_sii_header(tipo_comunicacion) + asset_line_vals = { + "sii_header_sent": json.dumps(header, indent=4), + } + try: + asset_dict = self._get_sii_asset_dict() + asset_line_vals["sii_content_sent"] = json.dumps(asset_dict, indent=4) + res = serv.SuministroLRBienesInversion(header, asset_dict) + res_line = res["RespuestaLinea"][0] + if res["EstadoEnvio"] == "Correcto": + asset_line_vals.update( + { + "sii_state": "sent", + "sii_csv": res["CSV"], + "sii_send_failed": False, + } + ) + elif ( + res["EstadoEnvio"] == "ParcialmenteCorrecto" + and res_line["EstadoRegistro"] == "AceptadoConErrores" + ): + asset_line_vals.update( + { + "sii_state": "sent_w_errors", + "sii_csv": res["CSV"], + "sii_send_failed": True, + } + ) + else: + asset_line_vals["sii_send_failed"] = True + if ( + "sii_state" in asset_line_vals + and not self.sii_account_registration_date + ): + asset_line_vals[ + "sii_account_registration_date" + ] = self._get_account_registration_date() + asset_line_vals["sii_return"] = res + send_error = False + if res_line["CodigoErrorRegistro"]: + send_error = "{} | {}".format( + str(res_line["CodigoErrorRegistro"]), + str(res_line["DescripcionErrorRegistro"])[:60], + ) + asset_line_vals["sii_send_error"] = send_error + self.write(asset_line_vals) + + except Exception as fault: + new_cr = Registry(self.env.cr.dbname).cursor() + env = api.Environment(new_cr, self.env.uid, self.env.context) + asset_line = env["capital.asset.prorate.regularization"].browse(self.id) + asset_line_vals.update( + { + "sii_send_failed": True, + "sii_send_error": repr(fault)[:60], + "sii_return": repr(fault), + } + ) + asset_line.write(asset_line_vals) + new_cr.commit() + new_cr.close() + raise + + def cancel_asset_sii(self): + if not self._cancel_asset_jobs(): + queue_obj = self.env["queue.job"] + for asset_line in self: + company = self.asset_id.company_id + if not company.capital_asset_use_connector: + self._cancel_asset_to_sii() + else: + eta = company._get_sii_eta_capital_assets() + new_delay = ( + self.sudo() + .with_context(company_id=company.id) + .with_delay(eta=eta) + .cancel_one_capital_asset_prorate_line() + ) + job = queue_obj.search([("uuid", "=", new_delay.uuid)], limit=1) + asset_line.sudo().asset_prorate_line_job_ids |= job + + def _cancel_asset_to_sii(self): + serv = self._connect_sii("capital_asset") + header = self._get_sii_header(cancellation=True) + asset_line_vals = { + "sii_send_failed": True, + "sii_send_error": False, + } + try: + asset_dict = self._get_cancel_sii_asset_dict() + res = serv.AnulacionLRBienesInversion(header, asset_dict) + asset_line_vals["sii_return"] = res + if res["EstadoEnvio"] == "Correcto": + asset_line_vals.update( + { + "sii_state": "cancelled", + "sii_csv": res["CSV"], + "sii_send_failed": False, + } + ) + res_line = res["RespuestaLinea"][0] + + if res_line["CodigoErrorRegistro"]: + asset_line_vals["sii_send_error"] = "{} | {}".format( + str(res_line["CodigoErrorRegistro"]), + str(res_line["DescripcionErrorRegistro"])[:60], + ) + self.write(asset_line_vals) + except Exception as fault: + new_cr = Registry(self.env.cr.dbname).cursor() + env = api.Environment(new_cr, self.env.uid, self.env.context) + asset_line = env["capital.asset.prorate.regularization"].browse(self.id) + asset_line_vals.update( + { + "sii_send_failed": True, + "sii_send_error": repr(fault)[:60], + "sii_return": repr(fault), + } + ) + asset_line.write(asset_line_vals) + new_cr.commit() + new_cr.close() + raise + + def _get_cancel_sii_asset_dict(self): + self.ensure_one() + self._sii_check_exceptions() + return self._get_sii_asset_dict(cancel=True) + + def _cancel_asset_jobs(self): + job_started = False + for queue in self.sudo().mapped("asset_prorate_line_job_ids"): + if queue.state == "started": + job_started = True + elif queue.state in ("pending", "enqueued", "failed"): + queue.unlink() + return job_started + + def _connect_sii(self, mapping_key): + self.ensure_one() + public_crt, private_key = self.env["l10n.es.aeat.certificate"].get_certificates( + company=self.asset_id.company_id + ) + params = self._connect_params_sii(mapping_key) + session = Session() + session.cert = (public_crt, private_key) + transport = Transport(session=session) + history = HistoryPlugin() + client = Client(wsdl=params["wsdl"], transport=transport, plugins=[history]) + return self._bind_sii(client, params["port_name"], params["address"]) + + def _bind_sii(self, client, port_name, address=None): + self.ensure_one() + service = client._get_service("siiService") + port = client._get_port(service, port_name) + address = address or port.binding_options["address"] + return client.create_service(port.binding.name, address) + + def _connect_params_sii(self, mapping_key): + self.ensure_one() + agency = self.asset_id.company_id.tax_agency_id + if not agency: + # We use spanish agency by default to keep old behavior with + # ir.config parameters. In the future it might be good to reinforce + # to explicitly set a tax agency in the company by raising an error + # here. + agency = self.env.ref("l10n_es_aeat.aeat_tax_agency_spain") + return agency._connect_params_sii(mapping_key, self.asset_id.company_id) + + def _get_sii_header(self, tipo_comunicacion=False, cancellation=False): + """Builds SII send header + + :param tipo_comunicacion String 'A0': new reg, 'A1': modification + :param cancellation Bool True when the communitacion es for invoice + cancellation + :return Dict with header data depending on cancellation + """ + self.ensure_one() + company = self.asset_id.company_id + if not company.vat: + raise exceptions.UserError( + _("No VAT configured for the company '{}'").format(company.name) + ) + header = { + "IDVersionSii": SII_VERSION, + "Titular": { + "NombreRazon": self.asset_id.company_id.name[0:120], + "NIF": self.asset_id.company_id.vat[2:], + }, + } + if not cancellation: + header.update({"TipoComunicacion": tipo_comunicacion}) + return header + + def _get_sii_identifier(self): + """Get the SII structure for a partner identifier depending on the + conditions of the invoice. + """ + self.ensure_one() + gen_type = self._get_sii_gen_type() + ( + country_code, + identifier_type, + identifier, + ) = self._sii_get_partner()._parse_aeat_vat_info() + # Limpiar alfanum + if identifier: + identifier = "".join(e for e in identifier if e.isalnum()).upper() + else: + identifier = "NO_DISPONIBLE" + identifier_type = "06" + if gen_type == 1: + if "1117" in (self.sii_send_error or ""): + return { + "IDOtro": { + "CodigoPais": country_code, + "IDType": "07", + "ID": identifier, + } + } + else: + if identifier_type == "": + return {"NIF": identifier} + return { + "IDOtro": { + "CodigoPais": country_code, + "IDType": identifier_type, + "ID": identifier, + }, + } + elif gen_type == 2: + return {"IDOtro": {"IDType": "02", "ID": country_code + identifier}} + elif gen_type == 3 and identifier_type: + return { + "IDOtro": { + "CodigoPais": country_code, + "IDType": identifier_type, + "ID": identifier, + }, + } + elif gen_type == 3: + return {"NIF": identifier} + + def _get_sii_gen_type(self): + """Make a choice for general invoice type + + Returns: + int: 1 (National), 2 (Intracom), 3 (Export) + """ + self.ensure_one() + partner_ident = self.asset_id.partner_id.property_account_position_id + partner_ident_type = partner_ident.sii_partner_identification_type + if partner_ident_type: + res = int(partner_ident_type) + elif partner_ident.name == "Régimen Intracomunitario": + res = 2 + elif partner_ident.name == "Régimen Extracomunitario": + res = 3 + else: + res = 1 + return res + + def _get_sii_body(self, cancel=False): + body = { + "PeriodoLiquidacion": {"Ejercicio": self.year, "Periodo": "0A"}, + "IDFactura": { + "IDEmisorFactura": { + "NombreRazon": self.asset_id.partner_id.name[0:120], + # "NIF": self.asset_id.partner_id.vat[2:], + **self._get_sii_identifier(), + }, + "NumSerieFacturaEmisor": (self.asset_id.invoice_ref or "")[0:60], + "FechaExpedicionFacturaEmisor": self._change_date_format( + self.asset_id.invoice_date + ), + }, + } + if cancel: + body["IdentificacionBien"] = self.asset_id.name.replace("\n", " ")[0:40] + else: + body["BienesInversion"] = { + "IdentificacionBien": self.asset_id.name.replace("\n", " ")[0:40], + "FechaInicioUtilizacion": self._change_date_format( + self.asset_id.date_start + ), + "ProrrataAnualDefinitiva": self.prorate_percent, + # OPCIONALES + "RegularizacionAnualDeduccion": self.amount, + # "IdentificacionEntrega": None, + # RegularizacionDeduccionEfectuada is used when asset is sold. Not implemented + # "RegularizacionDeduccionEfectuada": self.asset_id.final_deductible_tax_amount, + # "RefExterna": (self.asset_id.invoice_ref or "")[0:60], + # "NumRegistroAcuerdoFacturacion": None, + # "EntidadSucedida": { + # "NombreRazon": self.asset_id.partner_id.name[0:120], + # "NIF": self.asset_id.partner_id.vat[2:], + # }, + } + return body + + def _get_sii_asset_dict(self, cancel=False): + self._sii_check_exceptions() + asset_dict = self._get_sii_body(cancel) + round_by_keys( + asset_dict, + [ + "ProrrataAnualDefinitiva", + "RegularizacionAnualDeduccion", + "RegularizacionDeduccionEfectuada", + ], + ) + return asset_dict + + def _change_date_format(self, date): + datetimeobject = fields.Date.to_date(date) + new_date = datetimeobject.strftime("%d-%m-%Y") + return new_date + + def _check_fiscal_position(self): + partner_fiscal_position = self.asset_id.partner_id.property_account_position_id + asset_invoice = self.asset_id.invoice_move_line_id.move_id + if asset_invoice: + if asset_invoice.fiscal_position_id != partner_fiscal_position: + raise ValidationError( + _( + "The fiscal position of the partner and of the invoice is different." + "Please review asset: {%i} %s" + ) + % (self.asset_id.id, self.asset_id.name) + ) + + def _get_sii_country_code(self): + self.ensure_one() + return self._sii_get_partner()._parse_aeat_vat_info()[0] + + def _sii_get_partner(self): + return self.asset_id.partner_id + + def _is_sii_simplified_invoice(self): + """Inheritable method to allow control when an + invoice are simplified or normal""" + partner = self._sii_get_partner() + is_simplified = partner.sii_simplified_invoice + return is_simplified + + def _sii_check_exceptions(self): + """Inheritable method for exceptions control when sending SII invoices.""" + self.ensure_one() + self._check_fiscal_position() + gen_type = self._get_sii_gen_type() + # invoice_move_line + partner = self._sii_get_partner() + country_code = self._get_sii_country_code() + if (gen_type != 3 or country_code == "ES") and not partner.vat: + raise exceptions.UserError(_("The partner has not a VAT configured.")) + if not self.asset_id.company_id.chart_template_id: + raise exceptions.UserError( + _("You have to select what account chart template use this company.") + ) + if not self.asset_id.company_id.sii_enabled: + raise exceptions.UserError(_("This company doesn't have SII enabled.")) + + def unlink(self): + for rec in self: + if rec.sii_state != "not_sent": + raise ValidationError( + _( + "You can't delete a capital asset prorate " + "regularization line if it has been previously sent" + ) + ) + super(AssetProrateRegularization, self).unlink() diff --git a/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/mod303.py b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/mod303.py new file mode 100644 index 000000000..70b07759b --- /dev/null +++ b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/mod303.py @@ -0,0 +1,70 @@ +# Copyright NuoBiT - Kilian Niubo +# Copyright NuoBiT - Eric Antones +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) + + +from odoo import _, fields, models +from odoo.exceptions import ValidationError + + +class L10nEsAeatMod303Report(models.AbstractModel): + _inherit = "l10n.es.aeat.mod303.report" + + prorate_asset_lines_to_send = fields.One2many( + comodel_name="capital.asset.prorate.regularization", + compute="_compute_prorate_asset_lines_to_send", + ) + + def _compute_prorate_asset_lines_to_send(self): + for rec in self: + rec.prorate_asset_lines_to_send = ( + rec.capital_asset_prorate_regularization_line_ids.filtered( + lambda x: x.sii_state not in ["sent"] + ) + ) + + prorate_asset_lines_to_cancel = fields.One2many( + comodel_name="capital.asset.prorate.regularization", + compute="_compute_prorate_asset_lines_to_cancel", + ) + + def _compute_prorate_asset_lines_to_cancel(self): + for rec in self: + rec.prorate_asset_lines_to_cancel = ( + rec.capital_asset_prorate_regularization_line_ids.filtered( + lambda x: x.sii_state not in ["cancelled", "not_sent"] + ) + ) + + def send_sii(self): + for report in self: + if ( + self.move_prorate_capital_asset_id + and self.move_prorate_capital_asset_id.state == "draft" + ): + raise ValidationError( + _( + "Please, post capital asset prorate move of the 303 model " + "before send capital asset prorate regularization to SII" + ) + ) + for line in report.prorate_asset_lines_to_send: + line.send_asset_sii() + + def cancel_sii(self): + for report in self: + for line in report.prorate_asset_lines_to_cancel: + line.cancel_asset_sii() + + def button_unpost(self): + if self.prorate_asset_lines_to_cancel: + raise ValidationError( + _( + "Exist prorate lines in year: %s in assets %s with " + "capital asset prorate lines. " + "Please send the cancellation to the sii before canceling the 303 model." + ) + % (self.year, self.prorate_asset_lines_to_cancel) + ) + self.cancel_sii() + super().button_unpost() diff --git a/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/res_company.py b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/res_company.py new file mode 100644 index 000000000..8a119dae0 --- /dev/null +++ b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/res_company.py @@ -0,0 +1,54 @@ +# Copyright NuoBiT - Kilian Niubo +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from datetime import datetime, timedelta + +import pytz + +from odoo import fields, models + + +class ResCompany(models.Model): + _inherit = "res.company" + + capital_asset_use_connector = fields.Boolean( + string="Use connector", + help="Check it to use connector instead of sending the invoice " + "directly when it's validated", + ) + capital_asset_send_mode = fields.Selection( + string="Send mode", + selection=[ + ("auto", "On validate"), + ("fixed", "At fixed time"), + ("delayed", "With delay"), + ], + default="auto", + ) + capital_asset_sent_time = fields.Float( + string="Sent time", + ) + capital_asset_delay_time = fields.Float( + string="Delay time", + ) + + # TODO: This code is like _get_sii_eta. Refactor and fix bugs in fixed mode and make an a PR + def _get_sii_eta_capital_assets(self): + if self.capital_asset_send_mode == "fixed": + tz = self.env.context.get("tz", self.env.user.partner_id.tz) + offset = datetime.now(pytz.timezone(tz)).strftime("%z") if tz else "+00" + hour_diff = int(offset[:3]) + hour, minute = divmod(self.capital_asset_sent_time * 60, 60) + hour = int(hour - hour_diff) + minute = int(minute) + now = datetime.now() + if now.hour > hour or (now.hour == hour and now.minute > minute): + now += timedelta(days=1) + now = now.replace(hour=hour, minute=minute) + return now + elif self.send_mode == "delayed": + return datetime.now() + timedelta( + seconds=self.capital_asset_delay_time * 3600 + ) + else: + return None diff --git a/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/static/description/icon.png b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1cd641e792c30455187ca30940bc0f329ce8bbb0 GIT binary patch literal 6342 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 literal 0 HcmV?d00001 diff --git a/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/views/account_asset.xml b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/views/account_asset.xml new file mode 100644 index 000000000..98d191d78 --- /dev/null +++ b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/views/account_asset.xml @@ -0,0 +1,81 @@ + + + + + account.asset + + + + + + + + + + diff --git a/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/views/res_company_view.xml b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/views/res_company_view.xml new file mode 100644 index 000000000..7dd683eb9 --- /dev/null +++ b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/views/res_company_view.xml @@ -0,0 +1,34 @@ + + + + + res.company.sii.form + res.company + + + + + + + + + + + + + From e2c4cad71433d9f6c5f9fe2ed98e2fbd0b1502cf Mon Sep 17 00:00:00 2001 From: Eric Antones Date: Fri, 7 Nov 2025 14:25:29 +0100 Subject: [PATCH 2/5] [FIX] l10n_es_aeat_sii_special_prorate_regularization_capital_asset: wrong view inheritance --- .../views/account_asset.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/views/account_asset.xml b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/views/account_asset.xml index 98d191d78..a6c8b8ca4 100644 --- a/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/views/account_asset.xml +++ b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/views/account_asset.xml @@ -6,7 +6,7 @@ account.asset Date: Wed, 4 Mar 2026 17:37:25 +0100 Subject: [PATCH 3/5] [IMP] l10n_es_aeat_sii_special_prorate_regularization_capital_asset: pre-commit auto fixes --- .../__manifest__.py | 2 +- .../models/capital_asset_prorate_regularization.py | 10 +++++----- .../pyproject.toml | 3 +++ 3 files changed, 9 insertions(+), 6 deletions(-) create mode 100644 l10n_es_aeat_sii_special_prorate_regularization_capital_asset/pyproject.toml diff --git a/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/__manifest__.py b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/__manifest__.py index 2c00603f6..c8ef8a2ed 100644 --- a/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/__manifest__.py +++ b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/__manifest__.py @@ -8,7 +8,7 @@ "version": "14.0.1.0.0", "category": "Accounting", "author": "NuoBiT Solutions, S.L.", - "website": "https://github.com/nuobit/odoo-addons", + "website": "https://github.com/NuoBiT/odoo-addons", "license": "AGPL-3", "depends": [ "l10n_es_aeat_mod303_special_prorate_regularization_capital_asset", diff --git a/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/capital_asset_prorate_regularization.py b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/capital_asset_prorate_regularization.py index 605526dc7..3a0c35eb4 100644 --- a/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/capital_asset_prorate_regularization.py +++ b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/capital_asset_prorate_regularization.py @@ -22,7 +22,7 @@ from zeep import Client from zeep.plugins import HistoryPlugin from zeep.transports import Transport -except (ImportError, IOError) as err: +except (OSError, ImportError) as err: _logger.debug(err) try: @@ -202,9 +202,9 @@ def _send_asset_to_sii(self): "sii_state" in asset_line_vals and not self.sii_account_registration_date ): - asset_line_vals[ - "sii_account_registration_date" - ] = self._get_account_registration_date() + asset_line_vals["sii_account_registration_date"] = ( + self._get_account_registration_date() + ) asset_line_vals["sii_return"] = res send_error = False if res_line["CodigoErrorRegistro"]: @@ -539,4 +539,4 @@ def unlink(self): "regularization line if it has been previously sent" ) ) - super(AssetProrateRegularization, self).unlink() + super().unlink() diff --git a/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/pyproject.toml b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/pyproject.toml new file mode 100644 index 000000000..4231d0ccc --- /dev/null +++ b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" From ad58af9da506d9479768487d7591129d7ddc12f0 Mon Sep 17 00:00:00 2001 From: ??? Date: Wed, 4 Mar 2026 18:04:53 +0100 Subject: [PATCH 4/5] [MIG] l10n_es_aeat_sii_special_prorate_regularization_capital_asset: Migration to 18.0 --- .../README.rst | 60 ++- .../__manifest__.py | 8 +- .../i18n/es.po | 192 ++++---- .../migrations/18.0.1.0.1/pre-migrate.py | 22 + .../models/account_asset.py | 10 +- .../models/aeat_tax_agency.py | 4 +- .../capital_asset_prorate_regularization.py | 169 +++---- .../models/mod303.py | 21 +- .../models/res_company.py | 6 +- .../readme/CONTRIBUTORS.md | 4 + .../readme/DESCRIPTION.md | 1 + .../static/description/index.html | 422 ++++++++++++++++++ .../views/account_asset.xml | 23 +- .../capital_asset_prorate_regularization.xml | 21 +- .../views/mod303_views.xml | 7 +- .../views/res_company_view.xml | 11 +- 16 files changed, 726 insertions(+), 255 deletions(-) create mode 100644 l10n_es_aeat_sii_special_prorate_regularization_capital_asset/migrations/18.0.1.0.1/pre-migrate.py create mode 100644 l10n_es_aeat_sii_special_prorate_regularization_capital_asset/readme/CONTRIBUTORS.md create mode 100644 l10n_es_aeat_sii_special_prorate_regularization_capital_asset/readme/DESCRIPTION.md create mode 100644 l10n_es_aeat_sii_special_prorate_regularization_capital_asset/static/description/index.html diff --git a/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/README.rst b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/README.rst index 45dd0fc3b..4a044b431 100644 --- a/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/README.rst +++ b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/README.rst @@ -1,27 +1,65 @@ -.. image:: https://img.shields.io/badge/license-AGPL--3-blue.png - :target: https://www.gnu.org/licenses/agpl - :alt: License: AGPL-3 - ======================================================= AEAT SII - Special Prorate Regularization Capital Asset ======================================================= -* This module allows to send automaticaly to the SII the capital assets prorate regularization. +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:99123384c24c2b73dc236e771222caff831de4cec8cc8cb9a81ff1e0a04564a1 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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-NuoBiT%2Fodoo--addons-lightgray.png?logo=github + :target: https://github.com/NuoBiT/odoo-addons/tree/18.0/l10n_es_aeat_sii_special_prorate_regularization_capital_asset + :alt: NuoBiT/odoo-addons + +|badge1| |badge2| |badge3| + +This module allows send to SII automaticaly the capital assets prorate +regularization. + +**Table of contents** + +.. contents:: + :local: 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. +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 to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. Credits ======= +Authors +------- + +* NuoBiT Solutions SL + Contributors ------------ -* Kilian Niubo -* Eric Antones +- `NuoBiT `__: + + - Kilian Niubo kniubo@nuobit.com + - Eric Antones eantones@nuobit.com + - Deniz Gallo dgallo@nuobit.com + +Maintainers +----------- + +This module is part of the `NuoBiT/odoo-addons `_ project on GitHub. +You are welcome to contribute. diff --git a/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/__manifest__.py b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/__manifest__.py index c8ef8a2ed..7ae675142 100644 --- a/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/__manifest__.py +++ b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/__manifest__.py @@ -1,18 +1,20 @@ -# Copyright NuoBiT - Kilian Niubo +# Copyright NuoBiT Solutions SL - Kilian Niubo +# Copyright 2026 NuoBiT Solutions SL - Deniz Gallo # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) { "name": "AEAT SII - Special Prorate Regularization Capital Asset", "summary": "This module allows send to SII automaticaly the " "capital assets prorate regularization.", - "version": "14.0.1.0.0", + "version": "18.0.1.0.1", "category": "Accounting", - "author": "NuoBiT Solutions, S.L.", + "author": "NuoBiT Solutions SL", "website": "https://github.com/NuoBiT/odoo-addons", "license": "AGPL-3", "depends": [ "l10n_es_aeat_mod303_special_prorate_regularization_capital_asset", "l10n_es_aeat_sii_oca_extension", + "queue_job", ], "data": [ "data/aeat_sii_queue_job.xml", diff --git a/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/i18n/es.po b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/i18n/es.po index fe684704d..ac2a8b63f 100644 --- a/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/i18n/es.po +++ b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/i18n/es.po @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 14.0\n" +"Project-Id-Version: Odoo Server 18.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-11-21 14:30+0000\n" -"PO-Revision-Date: 2022-11-21 14:30+0000\n" +"PO-Revision-Date: 2026-03-05 10:41+0000\n" "Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -18,10 +18,35 @@ msgstr "" #. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset #: model:ir.model,name:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.model_l10n_es_aeat_mod303_report msgid "AEAT 303 Report" -msgstr "Modelo AEAT 303" +msgstr "Modelo 303" #. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset -#: model:ir.model.fields.selection,name:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.selection__capital_asset_prorate_regularization__sii_state__sent_w_errors +#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_capital_asset_prorate_regularization__aeat_send_error +msgid "AEAT Send Error" +msgstr "Error de envío AEAT" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_capital_asset_prorate_regularization__aeat_content_sent +msgid "AEAT last content sent" +msgstr "Último contenido enviado AEAT" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_capital_asset_prorate_regularization__aeat_header_sent +msgid "AEAT last header sent" +msgstr "Última cabecera enviada AEAT" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_capital_asset_prorate_regularization__aeat_send_failed +msgid "AEAT send failed" +msgstr "Envío AEAT fallido" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_capital_asset_prorate_regularization__aeat_state +msgid "AEAT send state" +msgstr "" + +#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model:ir.model.fields.selection,name:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.selection__capital_asset_prorate_regularization__aeat_state__sent_w_errors msgid "Accepted with errors" msgstr "Aceptado con errores" @@ -52,16 +77,17 @@ msgid "Cancel field 43 to SII" msgstr "Cancelación casilla 43 al SII" #. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset -#: model:ir.model.fields.selection,name:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.selection__capital_asset_prorate_regularization__sii_state__cancelled +#: model:ir.model.fields.selection,name:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.selection__capital_asset_prorate_regularization__aeat_state__cancelled msgid "Cancelled" msgstr "Cancelado" #. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset -#: model:ir.model.fields.selection,name:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.selection__capital_asset_prorate_regularization__sii_state__cancelled_modified +#: model:ir.model.fields.selection,name:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.selection__capital_asset_prorate_regularization__aeat_state__cancelled_modified msgid "Cancelled in SII but last modifications not sent" msgstr "Cancelado en SII pero las ultimas modificaciones no han sido enviadas" #. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#: model:ir.model,name:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.model_capital_asset_prorate_regularization #: model_terms:ir.ui.view,arch_db:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.capital_asset_prorate_regularization_view_form msgid "Capital Asset Prorate Regularization" msgstr "Regularizacion de la prorata de los bienes de inversión" @@ -96,50 +122,32 @@ msgstr "Trabajos del conector" msgid "Delay time" msgstr "Tiempo de retardo" -#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset -#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_account_asset__display_name -#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_aeat_tax_agency__display_name -#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_capital_asset_prorate_regularization__display_name -#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_l10n_es_aeat_mod303_report__display_name -#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_res_company__display_name -msgid "Display Name" -msgstr "Nombre mostrado" - #. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset #: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_capital_asset_prorate_regularization__sii_enabled msgid "Enable SII" msgstr "Activar SII" #. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#. odoo-python #: code:addons/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/mod303.py:0 -#, python-format msgid "" -"Exist prorate lines in year: %s in assets %s with capital asset prorate " -"lines. Please send the cancellation to the sii before canceling the 303 " -"model." +"Exist prorate lines in year: %(year)s in assets %(assets)s with capital " +"asset prorate lines. Please send the cancellation to the sii before " +"canceling the 303 model." msgstr "" -"Existen lineas de prorata en el año: %s en los activos %s con regularización" -" de prorata de bienes de inversión.Por favor, envie la anulacion al SII " -"antes de cancelar el modelo 303." +"Existen líneas de prorata en el año: %(year)s en los activos %(assets)s con " +"líneas de prorata de bienes de inversión. Por favor, envíe la cancelación al " +"SII antes de cancelar el modelo 303." #. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset #: model_terms:ir.ui.view,arch_db:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.capital_asset_prorate_regularization_view_form msgid "General" -msgstr "" +msgstr "General" #. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset -#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_account_asset__id -#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_aeat_tax_agency__id -#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_capital_asset_prorate_regularization__id -#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_l10n_es_aeat_mod303_report__id -#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_res_company__id -msgid "ID" -msgstr "Identificador" - -#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset -#: model:ir.model.fields,help:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_capital_asset_prorate_regularization__sii_send_failed +#: model:ir.model.fields,help:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_capital_asset_prorate_regularization__aeat_send_failed msgid "" -"Indicates that the last attempt to communicate this invoice to the SII has " +"Indicates that the last attempt to communicate this document to the SII has " "failed. See SII return for details" msgstr "" "Indica que el último intento de comunicar la factura al SII ha fallado. Ver " @@ -157,29 +165,20 @@ msgstr "" "la fecha del asiento contable de la factura" #. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset -#: model:ir.model.fields,help:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_capital_asset_prorate_regularization__sii_state +#: model:ir.model.fields,help:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_capital_asset_prorate_regularization__aeat_state msgid "" -"Indicates the state of this invoice in relation with the presentation at the" -" SII" -msgstr "Indica el estado de esta factura en relación al registro en el SII" - -#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset -#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_account_asset____last_update -#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_aeat_tax_agency____last_update -#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_capital_asset_prorate_regularization____last_update -#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_l10n_es_aeat_mod303_report____last_update -#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_res_company____last_update -msgid "Last Modified on" -msgstr "Última modificación" +"Indicates the state of this document in relation with the presentation at " +"the AEAT" +msgstr "Indica el estado de este documento en relación con la presentación en la AEAT" #. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#. odoo-python #: code:addons/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/capital_asset_prorate_regularization.py:0 -#, python-format msgid "No VAT configured for the company '{}'" -msgstr "No esta configurado el CIF para la compañia '{}'" +msgstr "No hay un IVA configurado para la compañía '{}'" #. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset -#: model:ir.model.fields.selection,name:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.selection__capital_asset_prorate_regularization__sii_state__not_sent +#: model:ir.model.fields.selection,name:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.selection__capital_asset_prorate_regularization__aeat_state__not_sent msgid "Not sent" msgstr "No registrada" @@ -189,24 +188,23 @@ msgid "On validate" msgstr "Al validar" #. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#. odoo-python #: code:addons/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/mod303.py:0 -#, python-format msgid "" "Please, post capital asset prorate move of the 303 model before send capital" " asset prorate regularization to SII" -msgstr "" -"Por favor, publique el asiento de los bienes de inversión del modelo 303 " -"antes de mandar la regularización de los bienes de inversión al SII" +msgstr "Por favor, contabilice el asiento de la prorata de los bienes de inversión del " +"modelo 303 antes de enviar la regularización de la prorata de los bienes de inversión al SII" #. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#. odoo-python #: code:addons/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/capital_asset_prorate_regularization.py:0 -#, python-format msgid "" "Please, post capital asset prorate regularization move before send capital " "asset prorate regularization to SII" -msgstr "" -"Por favor, publique el asiento de los bienes de inversión del modelo 303 " -"antes de mandar la regularización de los bienes de inversión al SII" +msgstr "Por favor, contabilice el asiento de regularización de la prorata de los bienes " +"de inversión antes de enviar la regularización de la prorata de los bienes de inversión al SII" + #. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset #: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_l10n_es_aeat_mod303_report__prorate_asset_lines_to_cancel @@ -219,19 +217,19 @@ msgid "Prorate Asset Lines To Send" msgstr "Lineas de prorata de activo para enviar" #. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset -#: model:ir.model.fields.selection,name:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.selection__capital_asset_prorate_regularization__sii_state__sent_modified +#: model:ir.model.fields.selection,name:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.selection__capital_asset_prorate_regularization__aeat_state__sent_modified msgid "Registered in SII but last modifications not sent" msgstr "Registro correcto en SII con modificaciones pendientes de comunicar" #. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset #: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_capital_asset_prorate_regularization__sii_csv msgid "SII CSV" -msgstr "" +msgstr "CSV SII" #. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset #: model_terms:ir.ui.view,arch_db:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.account_asset_view_search msgid "SII Cancelled" -msgstr "" +msgstr "SII cancelado" #. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset #: model_terms:ir.ui.view,arch_db:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.capital_asset_prorate_regularization_view_form @@ -248,20 +246,15 @@ msgstr "Resultado SII" msgid "SII Return" msgstr "Retorno SII" -#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset -#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_capital_asset_prorate_regularization__sii_send_error -msgid "SII Send Error" -msgstr "Error de envío SII" - #. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset #: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_account_asset__sii_send_errors msgid "SII Send Errors" -msgstr "Errores de envío SII" +msgstr "Errores de envío al SII" #. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset #: model_terms:ir.ui.view,arch_db:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.account_asset_view_search msgid "SII Sent" -msgstr "" +msgstr "SII enviado" #. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset #: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_capital_asset_prorate_regularization__sii_account_registration_date @@ -271,37 +264,17 @@ msgstr "Fecha de registro contable SII" #. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset #: model_terms:ir.ui.view,arch_db:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.account_asset_view_search msgid "SII error" -msgstr "" - -#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset -#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_capital_asset_prorate_regularization__sii_content_sent -msgid "SII last content sent" -msgstr "Último contenido enviado al SII" - -#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset -#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_capital_asset_prorate_regularization__sii_header_sent -msgid "SII last header sent" -msgstr "Última cabecera enviada al SII" +msgstr "Error SII" #. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset #: model_terms:ir.ui.view,arch_db:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.account_asset_view_search msgid "SII not sent" -msgstr "" - -#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset -#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_capital_asset_prorate_regularization__sii_send_failed -msgid "SII send failed" -msgstr "Envío SII fallido" - -#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset -#: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_capital_asset_prorate_regularization__sii_state -msgid "SII send state" -msgstr "Estado de envío SII" +msgstr "SII no enviado" #. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset #: model_terms:ir.ui.view,arch_db:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.account_asset_view_search msgid "SII sent with errors" -msgstr "" +msgstr "SII enviado con errores" #. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset #: model_terms:ir.ui.view,arch_db:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.account_asset_view_form @@ -330,7 +303,7 @@ msgid "Send mode" msgstr "Modo de envío" #. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset -#: model:ir.model.fields.selection,name:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.selection__capital_asset_prorate_regularization__sii_state__sent +#: model:ir.model.fields.selection,name:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.selection__capital_asset_prorate_regularization__aeat_state__sent msgid "Sent" msgstr "Enviada" @@ -342,29 +315,28 @@ msgstr "Hora de envío" #. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset #: model_terms:ir.ui.view,arch_db:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.capital_asset_prorate_regularization_view_form msgid "Technical" -msgstr "" +msgstr "Técnica" #. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#. odoo-python #: code:addons/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/capital_asset_prorate_regularization.py:0 -#, python-format msgid "" -"The fiscal position of the partner and of the invoice is different.Please " -"review asset: {%i} %s" -msgstr "" -"La posicion fiscal de la empresa y de la factura es distinta. Por favor, " -"revise el activo {%i} %s." +"The fiscal position of the partner and of the invoice is different. Please " +"review asset: %(asset_id)i %(asset_name)s" +msgstr "La posición fiscal del cliente y de la factura es diferente." +"Por favor revise el activo: %(asset_id)i %(asset_name)s" #. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#. odoo-python #: code:addons/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/capital_asset_prorate_regularization.py:0 -#, python-format msgid "The partner has not a VAT configured." -msgstr "" +msgstr "El cliente no tiene un IVA configurado." #. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#. odoo-python #: code:addons/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/capital_asset_prorate_regularization.py:0 -#, python-format msgid "This company doesn't have SII enabled." -msgstr "Esta compañia no tiene habilitado el SII" +msgstr "Esta compañía no tiene el SII activado." #. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset #: model:ir.model.fields,field_description:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.field_res_company__capital_asset_use_connector @@ -377,20 +349,16 @@ msgid "With delay" msgstr "Con retardo" #. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#. odoo-python #: code:addons/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/capital_asset_prorate_regularization.py:0 -#, python-format msgid "" "You can't delete a capital asset prorate regularization line if it has been " "previously sent" -msgstr "No se puede eliminar una línea de regularizacion de prorata del bien de inversión si esta ha sido anteriormente enviada al SII" +msgstr "No se puede eliminar una línea de regularización de la prorata de los " +"bienes de inversión si ha sido enviada previamente" #. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset +#. odoo-python #: code:addons/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/capital_asset_prorate_regularization.py:0 -#, python-format msgid "You have to select what account chart template use this company." -msgstr "Debe seleccionar qué plan contable utiliza esta compañía." - -#. module: l10n_es_aeat_sii_special_prorate_regularization_capital_asset -#: model:ir.model,name:l10n_es_aeat_sii_special_prorate_regularization_capital_asset.model_capital_asset_prorate_regularization -msgid "capital.asset.prorate.regularization" -msgstr "" +msgstr "Debe seleccionar qué plantilla de plan contable utiliza esta compañía." \ No newline at end of file diff --git a/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/migrations/18.0.1.0.1/pre-migrate.py b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/migrations/18.0.1.0.1/pre-migrate.py new file mode 100644 index 000000000..bc745cc1a --- /dev/null +++ b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/migrations/18.0.1.0.1/pre-migrate.py @@ -0,0 +1,22 @@ +# Copyright 2026 NuoBiT Solutions SL - Deniz Gallo +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) + +from openupgradelib import openupgrade + +from odoo.tools.sql import column_exists + +_column_renames = { + "capital_asset_prorate_regularization": [ + ("sii_state", "aeat_state"), + ("sii_header_sent", "aeat_header_sent"), + ("sii_content_sent", "aeat_content_sent"), + ("sii_send_error", "aeat_send_error"), + ("sii_send_failed", "aeat_send_failed"), + ], +} + + +@openupgrade.migrate() +def migrate(env, version): + if column_exists(env.cr, "capital_asset_prorate_regularization", "sii_state"): + openupgrade.rename_columns(env.cr, _column_renames) diff --git a/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/account_asset.py b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/account_asset.py index ab921a24d..3cf59553a 100644 --- a/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/account_asset.py +++ b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/account_asset.py @@ -1,5 +1,5 @@ -# Copyright NuoBiT - Kilian Niubo -# Copyright NuoBiT - Eric Antones +# Copyright NuoBiT Solutions SL - Kilian Niubo +# Copyright NuoBiT Solutions SL - Eric Antones # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from odoo import api, fields, models @@ -17,7 +17,7 @@ class AccountAsset(models.Model): @api.depends( "capital_asset_prorate_regularization_ids", - "capital_asset_prorate_regularization_ids.sii_send_error", + "capital_asset_prorate_regularization_ids.aeat_send_error", ) def _compute_sii_send_errors(self): for rec in self: @@ -25,7 +25,7 @@ def _compute_sii_send_errors(self): rec.sii_send_errors = ", ".join( sorted( rec.capital_asset_prorate_regularization_ids.filtered( - "sii_send_error" - ).mapped("sii_send_error") + "aeat_send_error" + ).mapped("aeat_send_error") ) ) diff --git a/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/aeat_tax_agency.py b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/aeat_tax_agency.py index 805b3058b..4462e08a6 100644 --- a/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/aeat_tax_agency.py +++ b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/aeat_tax_agency.py @@ -1,5 +1,5 @@ -# Copyright NuoBiT - Kilian Niubo -# Copyright NuoBiT - Eric Antones +# Copyright NuoBiT Solutions SL - Kilian Niubo +# Copyright NuoBiT Solutions SL - Eric Antones # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from odoo import models diff --git a/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/capital_asset_prorate_regularization.py b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/capital_asset_prorate_regularization.py index 3a0c35eb4..ad243b20a 100644 --- a/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/capital_asset_prorate_regularization.py +++ b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/capital_asset_prorate_regularization.py @@ -1,5 +1,6 @@ -# Copyright NuoBiT - Kilian Niubo -# Copyright NuoBiT - Eric Antones +# Copyright NuoBiT Solutions SL - Kilian Niubo +# Copyright NuoBiT Solutions SL - Eric Antones +# Copyright 2026 NuoBiT Solutions SL - Deniz Gallo # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) import json @@ -11,11 +12,8 @@ from odoo.exceptions import ValidationError from odoo.modules.registry import Registry -from odoo.addons.l10n_es_aeat_sii_oca.models.account_move import ( - SII_STATES, - SII_VERSION, - round_by_keys, -) +from odoo.addons.l10n_es_aeat.models.aeat_mixin import AEAT_STATES, round_by_keys +from odoo.addons.l10n_es_aeat_sii_oca.models.sii_mixin import SII_STATES, SII_VERSION _logger = logging.getLogger(__name__) try: @@ -34,14 +32,14 @@ class AssetProrateRegularization(models.Model): _inherit = "capital.asset.prorate.regularization" - sii_state = fields.Selection( - selection=SII_STATES, - string="SII send state", + aeat_state = fields.Selection( + selection=AEAT_STATES + SII_STATES, + string="AEAT send state", default="not_sent", readonly=True, copy=False, - help="Indicates the state of this invoice in relation with the " - "presentation at the SII", + help="Indicates the state of this document in relation with the " + "presentation at the AEAT", ) sii_csv = fields.Char( string="SII CSV", @@ -53,25 +51,25 @@ class AssetProrateRegularization(models.Model): copy=False, readonly=True, ) - sii_header_sent = fields.Text( - string="SII last header sent", + aeat_header_sent = fields.Text( + string="AEAT last header sent", copy=False, readonly=True, ) - sii_content_sent = fields.Text( - string="SII last content sent", + aeat_content_sent = fields.Text( + string="AEAT last content sent", copy=False, readonly=True, ) - sii_send_error = fields.Text( - string="SII Send Error", + aeat_send_error = fields.Text( + string="AEAT Send Error", copy=False, readonly=True, ) - sii_send_failed = fields.Boolean( - string="SII send failed", + aeat_send_failed = fields.Boolean( + string="AEAT send failed", copy=False, - help="Indicates that the last attempt to communicate this invoice to " + help="Indicates that the last attempt to communicate this document to " "the SII has failed. See SII return for details", ) @@ -125,9 +123,9 @@ def cancel_one_capital_asset_prorate_line(self): self.sudo()._cancel_asset_to_sii() def _process_asset_for_sii_send(self): - """Process invoices for sending to the SII. Adds general checks from - configuration parameters and invoice availability for SII. If the - invoice is to be sent the decides the send method: direct send or + """Process documents for sending to the SII. Adds general checks from + configuration parameters and document availability for SII. If the + document is to be sent the decides the send method: direct send or via connector depending on 'Use connector' configuration""" # TODO: descomentar queue_obj = self.env["queue.job"].sudo() @@ -141,7 +139,7 @@ def _process_asset_for_sii_send(self): new_delay = ( asset_line.sudo() .with_context(company_id=company.id) - .with_delay(eta=eta if not asset_line.sii_send_failed else False) + .with_delay(eta=eta if not asset_line.aeat_send_failed else False) .confirm_one_capital_asset_prorate_line() ) job = queue_obj.search([("uuid", "=", new_delay.uuid)], limit=1) @@ -155,7 +153,8 @@ def send_asset_sii(self): ): raise ValidationError( _( - "Please, post capital asset prorate regularization move before send " + "Please, post capital asset prorate" + " regularization move before send " "capital asset prorate regularization to SII" ) ) @@ -163,26 +162,26 @@ def send_asset_sii(self): self._process_asset_for_sii_send() def _send_asset_to_sii(self): - serv = self._connect_sii("capital_asset") - if self.sii_state == "not_sent": + serv = self._connect_aeat("capital_asset") + if self.aeat_state == "not_sent": tipo_comunicacion = "A0" else: tipo_comunicacion = "A1" - header = self._get_sii_header(tipo_comunicacion) + header = self._get_aeat_header(tipo_comunicacion) asset_line_vals = { - "sii_header_sent": json.dumps(header, indent=4), + "aeat_header_sent": json.dumps(header, indent=4), } try: asset_dict = self._get_sii_asset_dict() - asset_line_vals["sii_content_sent"] = json.dumps(asset_dict, indent=4) + asset_line_vals["aeat_content_sent"] = json.dumps(asset_dict, indent=4) res = serv.SuministroLRBienesInversion(header, asset_dict) res_line = res["RespuestaLinea"][0] if res["EstadoEnvio"] == "Correcto": asset_line_vals.update( { - "sii_state": "sent", + "aeat_state": "sent", "sii_csv": res["CSV"], - "sii_send_failed": False, + "aeat_send_failed": False, } ) elif ( @@ -191,15 +190,15 @@ def _send_asset_to_sii(self): ): asset_line_vals.update( { - "sii_state": "sent_w_errors", + "aeat_state": "sent_w_errors", "sii_csv": res["CSV"], - "sii_send_failed": True, + "aeat_send_failed": True, } ) else: - asset_line_vals["sii_send_failed"] = True + asset_line_vals["aeat_send_failed"] = True if ( - "sii_state" in asset_line_vals + "aeat_state" in asset_line_vals and not self.sii_account_registration_date ): asset_line_vals["sii_account_registration_date"] = ( @@ -212,7 +211,7 @@ def _send_asset_to_sii(self): str(res_line["CodigoErrorRegistro"]), str(res_line["DescripcionErrorRegistro"])[:60], ) - asset_line_vals["sii_send_error"] = send_error + asset_line_vals["aeat_send_error"] = send_error self.write(asset_line_vals) except Exception as fault: @@ -221,8 +220,8 @@ def _send_asset_to_sii(self): asset_line = env["capital.asset.prorate.regularization"].browse(self.id) asset_line_vals.update( { - "sii_send_failed": True, - "sii_send_error": repr(fault)[:60], + "aeat_send_failed": True, + "aeat_send_error": repr(fault)[:60], "sii_return": repr(fault), } ) @@ -250,11 +249,11 @@ def cancel_asset_sii(self): asset_line.sudo().asset_prorate_line_job_ids |= job def _cancel_asset_to_sii(self): - serv = self._connect_sii("capital_asset") - header = self._get_sii_header(cancellation=True) + serv = self._connect_aeat("capital_asset") + header = self._get_aeat_header(cancellation=True) asset_line_vals = { - "sii_send_failed": True, - "sii_send_error": False, + "aeat_send_failed": True, + "aeat_send_error": False, } try: asset_dict = self._get_cancel_sii_asset_dict() @@ -263,15 +262,15 @@ def _cancel_asset_to_sii(self): if res["EstadoEnvio"] == "Correcto": asset_line_vals.update( { - "sii_state": "cancelled", + "aeat_state": "cancelled", "sii_csv": res["CSV"], - "sii_send_failed": False, + "aeat_send_failed": False, } ) res_line = res["RespuestaLinea"][0] if res_line["CodigoErrorRegistro"]: - asset_line_vals["sii_send_error"] = "{} | {}".format( + asset_line_vals["aeat_send_error"] = "{} | {}".format( str(res_line["CodigoErrorRegistro"]), str(res_line["DescripcionErrorRegistro"])[:60], ) @@ -282,8 +281,8 @@ def _cancel_asset_to_sii(self): asset_line = env["capital.asset.prorate.regularization"].browse(self.id) asset_line_vals.update( { - "sii_send_failed": True, - "sii_send_error": repr(fault)[:60], + "aeat_send_failed": True, + "aeat_send_error": repr(fault)[:60], "sii_return": repr(fault), } ) @@ -294,7 +293,7 @@ def _cancel_asset_to_sii(self): def _get_cancel_sii_asset_dict(self): self.ensure_one() - self._sii_check_exceptions() + self._aeat_check_exceptions() return self._get_sii_asset_dict(cancel=True) def _cancel_asset_jobs(self): @@ -306,27 +305,27 @@ def _cancel_asset_jobs(self): queue.unlink() return job_started - def _connect_sii(self, mapping_key): + def _connect_aeat(self, mapping_key): self.ensure_one() public_crt, private_key = self.env["l10n.es.aeat.certificate"].get_certificates( company=self.asset_id.company_id ) - params = self._connect_params_sii(mapping_key) + params = self._connect_params_aeat(mapping_key) session = Session() session.cert = (public_crt, private_key) transport = Transport(session=session) history = HistoryPlugin() client = Client(wsdl=params["wsdl"], transport=transport, plugins=[history]) - return self._bind_sii(client, params["port_name"], params["address"]) + return self._bind_service(client, params["port_name"], params["address"]) - def _bind_sii(self, client, port_name, address=None): + def _bind_service(self, client, port_name, address=None): self.ensure_one() service = client._get_service("siiService") port = client._get_port(service, port_name) address = address or port.binding_options["address"] return client.create_service(port.binding.name, address) - def _connect_params_sii(self, mapping_key): + def _connect_params_aeat(self, mapping_key): self.ensure_one() agency = self.asset_id.company_id.tax_agency_id if not agency: @@ -337,11 +336,11 @@ def _connect_params_sii(self, mapping_key): agency = self.env.ref("l10n_es_aeat.aeat_tax_agency_spain") return agency._connect_params_sii(mapping_key, self.asset_id.company_id) - def _get_sii_header(self, tipo_comunicacion=False, cancellation=False): + def _get_aeat_header(self, tipo_comunicacion=False, cancellation=False): """Builds SII send header :param tipo_comunicacion String 'A0': new reg, 'A1': modification - :param cancellation Bool True when the communitacion es for invoice + :param cancellation Bool True when the communication is for document cancellation :return Dict with header data depending on cancellation """ @@ -364,7 +363,7 @@ def _get_sii_header(self, tipo_comunicacion=False, cancellation=False): def _get_sii_identifier(self): """Get the SII structure for a partner identifier depending on the - conditions of the invoice. + conditions of the document. """ self.ensure_one() gen_type = self._get_sii_gen_type() @@ -372,7 +371,7 @@ def _get_sii_identifier(self): country_code, identifier_type, identifier, - ) = self._sii_get_partner()._parse_aeat_vat_info() + ) = self._aeat_get_partner()._parse_aeat_vat_info() # Limpiar alfanum if identifier: identifier = "".join(e for e in identifier if e.isalnum()).upper() @@ -380,7 +379,7 @@ def _get_sii_identifier(self): identifier = "NO_DISPONIBLE" identifier_type = "06" if gen_type == 1: - if "1117" in (self.sii_send_error or ""): + if "1117" in (self.aeat_send_error or ""): return { "IDOtro": { "CodigoPais": country_code, @@ -457,8 +456,11 @@ def _get_sii_body(self, cancel=False): # OPCIONALES "RegularizacionAnualDeduccion": self.amount, # "IdentificacionEntrega": None, - # RegularizacionDeduccionEfectuada is used when asset is sold. Not implemented - # "RegularizacionDeduccionEfectuada": self.asset_id.final_deductible_tax_amount, + # RegularizacionDeduccionEfectuada is used when asset + # is sold. Not implemented¡ + # "RegularizacionDeduccionEfectuada": ( + # self.asset_id.final_deductible_tax_amount + # ), # "RefExterna": (self.asset_id.invoice_ref or "")[0:60], # "NumRegistroAcuerdoFacturacion": None, # "EntidadSucedida": { @@ -469,7 +471,7 @@ def _get_sii_body(self, cancel=False): return body def _get_sii_asset_dict(self, cancel=False): - self._sii_check_exceptions() + self._aeat_check_exceptions() asset_dict = self._get_sii_body(cancel) round_by_keys( asset_dict, @@ -493,37 +495,37 @@ def _check_fiscal_position(self): if asset_invoice.fiscal_position_id != partner_fiscal_position: raise ValidationError( _( - "The fiscal position of the partner and of the invoice is different." - "Please review asset: {%i} %s" + "The fiscal position of the " + "partner and of the invoice is different. " + "Please review asset: %(asset_id)i %(asset_name)s", + asset_id=self.asset_id.id, + asset_name=self.asset_id.name, ) - % (self.asset_id.id, self.asset_id.name) ) - def _get_sii_country_code(self): + def _get_aeat_country_code(self): self.ensure_one() - return self._sii_get_partner()._parse_aeat_vat_info()[0] + return self._aeat_get_partner()._parse_aeat_vat_info()[0] - def _sii_get_partner(self): + def _aeat_get_partner(self): return self.asset_id.partner_id - def _is_sii_simplified_invoice(self): - """Inheritable method to allow control when an - invoice are simplified or normal""" - partner = self._sii_get_partner() - is_simplified = partner.sii_simplified_invoice - return is_simplified + def _is_aeat_simplified_invoice(self): + """Inheritable method to allow control when a + document is simplified or normal""" + partner = self._aeat_get_partner() + return partner.aeat_simplified_invoice - def _sii_check_exceptions(self): - """Inheritable method for exceptions control when sending SII invoices.""" + def _aeat_check_exceptions(self): + """Inheritable method for exceptions control when sending SII documents.""" self.ensure_one() self._check_fiscal_position() gen_type = self._get_sii_gen_type() - # invoice_move_line - partner = self._sii_get_partner() - country_code = self._get_sii_country_code() + partner = self._aeat_get_partner() + country_code = self._get_aeat_country_code() if (gen_type != 3 or country_code == "ES") and not partner.vat: raise exceptions.UserError(_("The partner has not a VAT configured.")) - if not self.asset_id.company_id.chart_template_id: + if not self.asset_id.company_id.chart_template: raise exceptions.UserError( _("You have to select what account chart template use this company.") ) @@ -531,12 +533,13 @@ def _sii_check_exceptions(self): raise exceptions.UserError(_("This company doesn't have SII enabled.")) def unlink(self): + res = super().unlink() for rec in self: - if rec.sii_state != "not_sent": + if rec.aeat_state != "not_sent": raise ValidationError( _( "You can't delete a capital asset prorate " "regularization line if it has been previously sent" ) ) - super().unlink() + return res diff --git a/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/mod303.py b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/mod303.py index 70b07759b..c6b8daf2b 100644 --- a/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/mod303.py +++ b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/mod303.py @@ -1,5 +1,6 @@ -# Copyright NuoBiT - Kilian Niubo -# Copyright NuoBiT - Eric Antones +# Copyright NuoBiT Solutions SL - Kilian Niubo +# Copyright NuoBiT Solutions SL - Eric Antones +# Copyright 2026 NuoBiT Solutions SL - Deniz Gallo # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) @@ -19,7 +20,7 @@ def _compute_prorate_asset_lines_to_send(self): for rec in self: rec.prorate_asset_lines_to_send = ( rec.capital_asset_prorate_regularization_line_ids.filtered( - lambda x: x.sii_state not in ["sent"] + lambda x: x.aeat_state not in ["sent"] ) ) @@ -32,7 +33,7 @@ def _compute_prorate_asset_lines_to_cancel(self): for rec in self: rec.prorate_asset_lines_to_cancel = ( rec.capital_asset_prorate_regularization_line_ids.filtered( - lambda x: x.sii_state not in ["cancelled", "not_sent"] + lambda x: x.aeat_state not in ["cancelled", "not_sent"] ) ) @@ -57,14 +58,18 @@ def cancel_sii(self): line.cancel_asset_sii() def button_unpost(self): + res = super().button_unpost() if self.prorate_asset_lines_to_cancel: raise ValidationError( _( - "Exist prorate lines in year: %s in assets %s with " + "Exist prorate lines in year: " + "%(year)s in assets %(assets)s with " "capital asset prorate lines. " - "Please send the cancellation to the sii before canceling the 303 model." + "Please send the cancellation to the " + "sii before canceling the 303 model.", + year=self.year, + assets=self.prorate_asset_lines_to_cancel, ) - % (self.year, self.prorate_asset_lines_to_cancel) ) self.cancel_sii() - super().button_unpost() + return res diff --git a/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/res_company.py b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/res_company.py index 8a119dae0..a24834651 100644 --- a/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/res_company.py +++ b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/models/res_company.py @@ -1,4 +1,5 @@ -# Copyright NuoBiT - Kilian Niubo +# Copyright NuoBiT Solutions SL - Kilian Niubo +# Copyright 2026 NuoBiT Solutions SL - Deniz Gallo # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from datetime import datetime, timedelta @@ -32,7 +33,8 @@ class ResCompany(models.Model): string="Delay time", ) - # TODO: This code is like _get_sii_eta. Refactor and fix bugs in fixed mode and make an a PR + # TODO: This code is like _get_sii_eta. + # Refactor and fix bugs in fixed mode and make an a PR def _get_sii_eta_capital_assets(self): if self.capital_asset_send_mode == "fixed": tz = self.env.context.get("tz", self.env.user.partner_id.tz) diff --git a/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/readme/CONTRIBUTORS.md b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/readme/CONTRIBUTORS.md new file mode 100644 index 000000000..0355cecbc --- /dev/null +++ b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/readme/CONTRIBUTORS.md @@ -0,0 +1,4 @@ +- [NuoBiT](https://www.nuobit.com): + - Kilian Niubo + - Eric Antones + - Deniz Gallo diff --git a/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/readme/DESCRIPTION.md b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/readme/DESCRIPTION.md new file mode 100644 index 000000000..b563444d9 --- /dev/null +++ b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/readme/DESCRIPTION.md @@ -0,0 +1 @@ +This module allows send to SII automaticaly the capital assets prorate regularization. diff --git a/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/static/description/index.html b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/static/description/index.html new file mode 100644 index 000000000..f11276958 --- /dev/null +++ b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/static/description/index.html @@ -0,0 +1,422 @@ + + + + + +AEAT SII - Special Prorate Regularization Capital Asset + + + +
+

AEAT SII - Special Prorate Regularization Capital Asset

+ + +

Beta License: AGPL-3 NuoBiT/odoo-addons

+

This module allows send to SII automaticaly the capital assets prorate +regularization.

+

Table of contents

+ +
+

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 to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • NuoBiT Solutions SL
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is part of the NuoBiT/odoo-addons project on GitHub.

+

You are welcome to contribute.

+
+
+
+ + diff --git a/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/views/account_asset.xml b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/views/account_asset.xml index a6c8b8ca4..502a791e1 100644 --- a/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/views/account_asset.xml +++ b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/views/account_asset.xml @@ -1,5 +1,6 @@ - @@ -9,12 +10,12 @@ ref="l10n_es_aeat_mod303_special_prorate_regularization_capital_asset.account_asset_view_form" /> - - - + + diff --git a/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/views/res_company_view.xml b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/views/res_company_view.xml index 7dd683eb9..6b0804a1f 100644 --- a/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/views/res_company_view.xml +++ b/l10n_es_aeat_sii_special_prorate_regularization_capital_asset/views/res_company_view.xml @@ -1,5 +1,6 @@ - @@ -7,7 +8,7 @@ res.company - + From f03809ab9430ebbba11a091cbe32b56b146a1a0f Mon Sep 17 00:00:00 2001 From: ??? Date: Thu, 5 Mar 2026 17:03:47 +0100 Subject: [PATCH 5/5] [DO NOT MERGE] test-requirements.txt --- test-requirements.txt | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 test-requirements.txt diff --git a/test-requirements.txt b/test-requirements.txt new file mode 100644 index 000000000..7801af7e1 --- /dev/null +++ b/test-requirements.txt @@ -0,0 +1,11 @@ +odoo-addon-l10n_es_extension@git+https://github.com/nuobit/odoo-addons.git@refs/pull/769/head#subdirectory=l10n_es_extension +odoo-addon-account_asset_management_extension@git+https://github.com/nuobit/odoo-addons.git@refs/pull/754/head#subdirectory=account_asset_management_extension +odoo-addon-l10n_es_asset_extension@git+https://github.com/nuobit/odoo-addons.git@refs/pull/780/head#subdirectory=l10n_es_asset_extension +odoo-addon-l10n_es_account_capital_asset@git+https://github.com/nuobit/odoo-addons.git@refs/pull/814/head#subdirectory=l10n_es_account_capital_asset +odoo-addon-l10n_es_special_prorate@git+https://github.com/nuobit/odoo-addons.git@refs/pull/800/head#subdirectory=l10n_es_special_prorate +odoo-addon-l10n_es_aeat_mod303_special_prorate_regularization@git+https://github.com/nuobit/odoo-addons.git@refs/pull/846/head#subdirectory=l10n_es_aeat_mod303_special_prorate_regularization +odoo-addon-l10n_es_aeat_prorate_asset@git+https://github.com/nuobit/odoo-addons.git@refs/pull/834/head#subdirectory=l10n_es_aeat_prorate_asset +odoo-addon-l10n_es_aeat_vat_special_prorrate@git+https://github.com/nuobit/odoo-addons.git@refs/pull/835/head#subdirectory=l10n_es_aeat_vat_special_prorrate +odoo-addon-l10n_es_aeat_mod303_special_prorate_regularization_capital_asset@git+https://github.com/nuobit/odoo-addons.git@refs/pull/851/head#subdirectory=l10n_es_aeat_mod303_special_prorate_regularization_capital_asset +odoo-addon-account_asset_transfer_extension@git+https://github.com/nuobit/odoo-addons.git@refs/pull/763/head#subdirectory=account_asset_transfer_extension +odoo-addon-l10n_es_aeat_sii_oca_extension@git+https://github.com/nuobit/odoo-addons.git@refs/pull/801/head#subdirectory=l10n_es_aeat_sii_oca_extension