diff --git a/l10n_es_aeat_mod390/README.rst b/l10n_es_aeat_mod390/README.rst index 97e018a196c..da837d0cf33 100644 --- a/l10n_es_aeat_mod390/README.rst +++ b/l10n_es_aeat_mod390/README.rst @@ -7,7 +7,7 @@ AEAT modelo 390 !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:cd49da2b042bfe8923368e88360be066a71823f46fa943be223ea05beb3aa4ea + !! source digest: sha256:115d6812af39a06156a0255425f9da2422557793d3893a2870acb1a9c6d8aeac !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png @@ -63,25 +63,25 @@ Para crear un modelo, por ejemplo de un trimestre del año: Known issues / Roadmap ====================== -- La declaración sólo se puede realizar para personas jurídicas. -- No se han implementado todas las casillas de opciones de la empresa, - como por ejemplo si la empresa está en concurso de acreedores. -- No se calculan operaciones intragrupo. -- No se contempla el régimen de criterio de caja. -- No se contempla el régimen especial de bienes usados, objetos de - arte, antigüedades y objetos de colección. -- No se contempla el régimen especial de agencias de viaje. -- No se contempla el recargo de equivalencia de impuesto al tabaco - (casillas 41 y 42). -- No se contempla el régimen especial de la agricultura, ganadería y - pesca. -- No se contempla la prorrata general de IVA. -- No se contempla el régimen simplificado. -- No se contempla el régimen de deducción diferenciado. -- No se contempla la inversión de sujeto pasivo nacional. -- No se tienen en cuenta tributaciones territoriales. -- Obtener las casillas 95, 97 y 98 de las declaraciones del 303. -- Falta añadir la casilla 663 de cuota pendientes de compensación. +- La declaración sólo se puede realizar para personas jurídicas. +- No se han implementado todas las casillas de opciones de la empresa, + como por ejemplo si la empresa está en concurso de acreedores. +- No se calculan operaciones intragrupo. +- No se contempla el régimen de criterio de caja. +- No se contempla el régimen especial de bienes usados, objetos de arte, + antigüedades y objetos de colección. +- No se contempla el régimen especial de agencias de viaje. +- No se contempla el recargo de equivalencia de impuesto al tabaco + (casillas 41 y 42). +- No se contempla el régimen especial de la agricultura, ganadería y + pesca. +- No se contempla la prorrata general de IVA. +- No se contempla el régimen simplificado. +- No se contempla el régimen de deducción diferenciado. +- No se contempla la inversión de sujeto pasivo nacional. +- No se tienen en cuenta tributaciones territoriales. +- Obtener las casillas 95, 97 y 98 de las declaraciones del 303. +- Falta añadir la casilla 663 de cuota pendientes de compensación. Bug Tracker =========== @@ -104,23 +104,27 @@ Authors Contributors ------------ -- `Tecnativa `__: +- `Tecnativa `__: - - Pedro M. Baeza + - Pedro M. Baeza -- Albert Cabedo -- `Acysos `__: +- Albert Cabedo +- `Acysos `__: - - Ignacio Ibeas + - Ignacio Ibeas -- `Sygel `__: +- `Sygel `__: - - Harald Panten - - Valentin Vinagre + - Harald Panten + - Valentin Vinagre -- `Dixmit `__: +- `Dixmit `__: - - Enric Tobella + - Enric Tobella + +- `Moduon `__: + + - Emilio Pascual Maintainers ----------- diff --git a/l10n_es_aeat_mod390/data/2021/aeat.model.export.config.line.csv b/l10n_es_aeat_mod390/data/2021/aeat.model.export.config.line.csv index bca8846018c..eafd73dfc17 100644 --- a/l10n_es_aeat_mod390/data/2021/aeat.model.export.config.line.csv +++ b/l10n_es_aeat_mod390/data/2021/aeat.model.export.config.line.csv @@ -25,7 +25,7 @@ aeat_mod390_2021_sub06_export_line_23,"right","False",,"2","aeat_mod390_2021_sub aeat_mod390_2021_sub06_export_line_24,"right","False",,"2","aeat_mod390_2021_sub06_export_config","float",,"0","9. Resultado de las liquidaciones - Total devoluc. Por cuotas en la adquisicion de elementos de transporte [524]","24","17", aeat_mod390_2021_sub06_export_line_25,"right","False",,"2","aeat_mod390_2021_sub06_export_config","float","${object.casilla_97}",,"9. Resultado de las liquidaciones - Resultado declaración-liquidación último periodo - A compensar [97]","25","17", aeat_mod390_2021_sub06_export_line_26,"right","False",,"2","aeat_mod390_2021_sub06_export_config","float","${object.casilla_98}",,"9. Resultado de las liquidaciones - Resultado declaración-liquidación último periodo - A devolver [98]","26","17", -aeat_mod390_2021_sub06_export_line_27,"right","False",,"2","aeat_mod390_2021_sub06_export_config","float",,"0","9. Resultado de las liquidaciones - Cuotas pendientes de compensación al término del ejercicio [662]","27","17", +aeat_mod390_2021_sub06_export_line_27,"right","False",,"2","aeat_mod390_2021_sub06_export_config","float","${object.casilla_662}",,"9. Resultado de las liquidaciones - Cuotas pendientes de compensación al término del ejercicio [662]","27","17", aeat_mod390_2021_sub06_export_line_28,"right","False",,"2","aeat_mod390_2021_sub06_export_config","float",,"0","9. Resultado de las liquidaciones - Total resultados positivos del ejercicio (modelo 322) [525]","28","17", aeat_mod390_2021_sub06_export_line_29,"right","False",,"2","aeat_mod390_2021_sub06_export_config","float",,"0","9. Resultado de las liquidaciones - Total resultados negativos del ejercicio (modelo 322) [526]","29","17", aeat_mod390_2021_sub06_export_line_30,"right","True",,"2","aeat_mod390_2021_sub06_export_config","float","${object.tax_line_ids.filtered(lambda r: r.field_number == 99).amount}",,"10. Volumen de operaciones - Operaciones en régimen general [99]","30","17", diff --git a/l10n_es_aeat_mod390/i18n/es.po b/l10n_es_aeat_mod390/i18n/es.po index e8b220c7486..ed84cd71901 100644 --- a/l10n_es_aeat_mod390/i18n/es.po +++ b/l10n_es_aeat_mod390/i18n/es.po @@ -6,16 +6,16 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 9.0c\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-01-29 15:09+0000\n" -"PO-Revision-Date: 2023-11-07 19:37+0000\n" -"Last-Translator: Ivorra78 \n" +"POT-Creation-Date: 2024-12-23 09:20+0000\n" +"PO-Revision-Date: 2024-12-23 10:35+0100\n" +"Last-Translator: Emilio Pascual \n" "Language-Team: \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.17\n" +"X-Generator: Poedit 3.4.4\n" #. module: l10n_es_aeat_mod390 #: model_terms:ir.ui.view,arch_db:l10n_es_aeat_mod390.view_l10n_es_aeat_mod390_report_form @@ -453,6 +453,27 @@ msgstr "Si está marcado, hay nuevos mensajes que requieren de su atención." msgid "If checked, some messages have a delivery error." msgstr "Si está marcado, hay mensajes con error de entrega." +#. module: l10n_es_aeat_mod390 +#: model:ir.model.fields,help:l10n_es_aeat_mod390.field_l10n_es_aeat_mod390_report__use_303 +msgid "" +"If it's checked, this report uses 303 reports for calculate fields 85, 95, " +"97, 98 and 662. When it's unchecked, you should fill them in. If you " +"calculated first and then checked this option, you must calculate it again." +msgstr "" +"Si está marcado, este informe usará los informes del 303 para calcular las " +"casillas, 85, 95, 97, 98 y 662. Cuando está desmarcado, debería rellenarlas. " +"Si primero calculaste y después marcaste la opción, deberás calcularlo de " +"nuevo." + +#. module: l10n_es_aeat_mod390 +#: model_terms:ir.ui.view,arch_db:l10n_es_aeat_mod390.view_l10n_es_aeat_mod390_report_form +msgid "" +"If you do not want to use the 303 reports for the automatic calculation,\n" +" uncheck \"Use 303 reports\" option." +msgstr "" +"Si no desea utilizar los informes del 303 para el cálculo automático,\n" +" desmarque la opción \"Utilizar informes 303\"." + #. module: l10n_es_aeat_mod390 #: model:ir.model.fields,field_description:l10n_es_aeat_mod390.field_l10n_es_aeat_mod390_report__message_is_follower msgid "Is Follower" @@ -789,9 +810,9 @@ msgstr "Tercer representante" #: code:addons/l10n_es_aeat_mod390/models/mod390.py:0 #, python-format msgid "" -"The result of the manual 303 summary (fields [95], [97] and [98] in the page " -"'9. Resultado liquidaciones') doesn't match the field [86]. Please check if " -"you have filled such fields." +"The result of the manual 303 summary (fields [95], [97], [98] and [662] in " +"the page '9. Resultado liquidaciones') doesn't match the field [86]. Please " +"check if you have filled such fields." msgstr "" "El resultado del resumen manual del 303 (casillas [95], [97] y [98] en la " "página '9. Resultado liquidaciones') no casa con la casilla [86]. Compruebe " @@ -806,11 +827,29 @@ msgstr "" "Esta cuenta será la contrapartida para todos los elementos del diario que " "están regularizados al contabilizar el informe." +#. module: l10n_es_aeat_mod390 +#: model_terms:ir.ui.view,arch_db:l10n_es_aeat_mod390.view_l10n_es_aeat_mod390_report_form +msgid "" +"This is using the 303 reports for automatic calculations in the fields " +"85, 95, 97, 98 and 662. The calculations\n" +" may not be correct if there are duplicated or out-of-" +"date 303 reports." +msgstr "" +"Está utilizando los informes del 303 para cálculos automáticos en las " +"casillas 85, 95, 97, 98 y 662. Los cálculos\n" +" pueden no ser correctos si hay modelos 303 " +"duplicados o desactualizados." + #. module: l10n_es_aeat_mod390 #: model:ir.model.fields,help:l10n_es_aeat_mod390.field_l10n_es_aeat_mod390_report__activity_exception_decoration msgid "Type of the exception activity on record." msgstr "Tipo de la excepción de la actividad en el registro." +#. module: l10n_es_aeat_mod390 +#: model:ir.model.fields,field_description:l10n_es_aeat_mod390.field_l10n_es_aeat_mod390_report__use_303 +msgid "Use 303 reports" +msgstr "Usar informes del 303" + #. module: l10n_es_aeat_mod390 #: model:ir.model.fields,field_description:l10n_es_aeat_mod390.field_l10n_es_aeat_mod390_report__company_vat msgid "VAT number" @@ -955,6 +994,20 @@ msgstr "[64] Suma de deducciones" msgid "[65] Result. rég. gral." msgstr "[65] Result. rég. gral." +#. module: l10n_es_aeat_mod390 +#: model:ir.model.fields,field_description:l10n_es_aeat_mod390.field_l10n_es_aeat_mod390_report__casilla_662 +msgid "[662] Cuotas pendientes de compensación al término del ejercicio" +msgstr "[662] Cuotas pendientes de compensación al término del ejercicio" + +#. module: l10n_es_aeat_mod390 +#: model:ir.model.fields,help:l10n_es_aeat_mod390.field_l10n_es_aeat_mod390_report__casilla_662 +msgid "" +"[662] Cuotas pendientes de compensación generadas en el ejercicio y " +"distintas de las incluidas en la casilla 97" +msgstr "" +"[662] Cuotas pendientes de compensación generadas en el ejercicio y " +"distintas de las incluidas en la casilla 97" + #. module: l10n_es_aeat_mod390 #: model:ir.model.fields,field_description:l10n_es_aeat_mod390.field_l10n_es_aeat_mod390_report__casilla_85 msgid "[85] Compens. ejercicio anterior" @@ -984,92 +1037,3 @@ msgstr "[98] Result. 303 último periodo a devolver" #: model:ir.model.fields,field_description:l10n_es_aeat_mod390.field_l10n_es_aeat_mod390_report__has_347 msgid "¿Obligación del 347?" msgstr "¿Obligación del 347?" - -#~ msgid "SMS Delivery error" -#~ msgstr "Error de entrega de SMS" - -#~ msgid "Last Modified on" -#~ msgstr "Última modificación en" - -#~ msgid "Main Attachment" -#~ msgstr "Adjunto principal" - -#~ msgid "Number of messages which requires an action" -#~ msgstr "Nº de mensajes que requieren una acción" - -#~ msgid "Model" -#~ msgstr "Modelo" - -#~ msgid "Number of unread messages" -#~ msgstr "Nº de mensajes no leídos" - -#~ msgid "Unread Messages" -#~ msgstr "Mensajes sin leer" - -#~ msgid "Unread Messages Counter" -#~ msgstr "Nº de mensajes sin leer" - -#~ msgid "Calculation date" -#~ msgstr "Fecha de cálculo" - -#~ msgid "Contact email" -#~ msgstr "Email contacto" - -#~ msgid "Followers (Channels)" -#~ msgstr "Seguidores (Canales)" - -#~ msgid "Period type" -#~ msgstr "Tipo de periodo" - -#~ msgid "Cancelled" -#~ msgstr "Cancelada" - -#~ msgid "Complementary" -#~ msgstr "Complementaria" - -#~ msgid "DVD" -#~ msgstr "DVD" - -#~ msgid "Done" -#~ msgstr "Realizada" - -#~ msgid "Draft" -#~ msgstr "Borrador" - -#~ msgid "If checked new messages require your attention." -#~ msgstr "Si está marcado, hay nuevos mensajes que requieren de su atención." - -#~ msgid "Normal" -#~ msgstr "Normal" - -#~ msgid "Number of error" -#~ msgstr "Nº de error" - -#~ msgid "Overdue" -#~ msgstr "Retrasado" - -#~ msgid "Planned" -#~ msgstr "Planificado" - -#~ msgid "Posted" -#~ msgstr "Contabilizada" - -#~ msgid "Processed" -#~ msgstr "Procesada" - -#~ msgid "Substitutive" -#~ msgstr "Sustitutiva" - -#~ msgid "Telematics" -#~ msgstr "Telemática" - -#~ msgid "Today" -#~ msgstr "Hoy" - -#, fuzzy -#~ msgid "" -#~ "Código de la notaría en la que se concedió el poder de representación " -#~ "para esta persona." -#~ msgstr "" -#~ "Código de la notaría en la que se concedió el poder de representación " -#~ "para esta persona." diff --git a/l10n_es_aeat_mod390/i18n/l10n_es_aeat_mod390.pot b/l10n_es_aeat_mod390/i18n/l10n_es_aeat_mod390.pot index 072cec90699..d7a958525e2 100644 --- a/l10n_es_aeat_mod390/i18n/l10n_es_aeat_mod390.pot +++ b/l10n_es_aeat_mod390/i18n/l10n_es_aeat_mod390.pot @@ -4,8 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 17.0\n" +"Project-Id-Version: Odoo Server 16.0+e\n" "Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-12-23 09:20+0000\n" +"PO-Revision-Date: 2024-12-23 09:20+0000\n" "Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -440,6 +442,21 @@ msgstr "" msgid "If checked, some messages have a delivery error." msgstr "" +#. module: l10n_es_aeat_mod390 +#: model:ir.model.fields,help:l10n_es_aeat_mod390.field_l10n_es_aeat_mod390_report__use_303 +msgid "" +"If it's checked, this report uses 303 reports for calculate fields 85, 95, " +"97, 98 and 662. When it's unchecked, you should fill them in. If you " +"calculated first and then checked this option, you must calculate it again." +msgstr "" + +#. module: l10n_es_aeat_mod390 +#: model_terms:ir.ui.view,arch_db:l10n_es_aeat_mod390.view_l10n_es_aeat_mod390_report_form +msgid "" +"If you do not want to use the 303 reports for the automatic calculation,\n" +" uncheck \"Use 303 reports\" option." +msgstr "" + #. module: l10n_es_aeat_mod390 #: model:ir.model.fields,field_description:l10n_es_aeat_mod390.field_l10n_es_aeat_mod390_report__message_is_follower msgid "Is Follower" @@ -756,9 +773,9 @@ msgstr "" #: code:addons/l10n_es_aeat_mod390/models/mod390.py:0 #, python-format msgid "" -"The result of the manual 303 summary (fields [95], [97] and [98] in the page" -" '9. Resultado liquidaciones') doesn't match the field [86]. Please check if" -" you have filled such fields." +"The result of the manual 303 summary (fields [95], [97], [98] and [662] in " +"the page '9. Resultado liquidaciones') doesn't match the field [86]. Please " +"check if you have filled such fields." msgstr "" #. module: l10n_es_aeat_mod390 @@ -768,11 +785,23 @@ msgid "" "regularized when posting the report." msgstr "" +#. module: l10n_es_aeat_mod390 +#: model_terms:ir.ui.view,arch_db:l10n_es_aeat_mod390.view_l10n_es_aeat_mod390_report_form +msgid "" +"This is using the 303 reports for automatic calculations in the fields 85, 95, 97, 98 and 662. The calculations\n" +" may not be correct if there are duplicated or out-of-date 303 reports." +msgstr "" + #. module: l10n_es_aeat_mod390 #: model:ir.model.fields,help:l10n_es_aeat_mod390.field_l10n_es_aeat_mod390_report__activity_exception_decoration msgid "Type of the exception activity on record." msgstr "" +#. module: l10n_es_aeat_mod390 +#: model:ir.model.fields,field_description:l10n_es_aeat_mod390.field_l10n_es_aeat_mod390_report__use_303 +msgid "Use 303 reports" +msgstr "" + #. module: l10n_es_aeat_mod390 #: model:ir.model.fields,field_description:l10n_es_aeat_mod390.field_l10n_es_aeat_mod390_report__company_vat msgid "VAT number" @@ -913,6 +942,18 @@ msgstr "" msgid "[65] Result. rég. gral." msgstr "" +#. module: l10n_es_aeat_mod390 +#: model:ir.model.fields,field_description:l10n_es_aeat_mod390.field_l10n_es_aeat_mod390_report__casilla_662 +msgid "[662] Cuotas pendientes de compensación al término del ejercicio" +msgstr "" + +#. module: l10n_es_aeat_mod390 +#: model:ir.model.fields,help:l10n_es_aeat_mod390.field_l10n_es_aeat_mod390_report__casilla_662 +msgid "" +"[662] Cuotas pendientes de compensación generadas en el ejercicio y " +"distintas de las incluidas en la casilla 97" +msgstr "" + #. module: l10n_es_aeat_mod390 #: model:ir.model.fields,field_description:l10n_es_aeat_mod390.field_l10n_es_aeat_mod390_report__casilla_85 msgid "[85] Compens. ejercicio anterior" diff --git a/l10n_es_aeat_mod390/models/mod390.py b/l10n_es_aeat_mod390/models/mod390.py index e7cb820788f..a31b84cbfb9 100644 --- a/l10n_es_aeat_mod390/models/mod390.py +++ b/l10n_es_aeat_mod390/models/mod390.py @@ -323,7 +323,12 @@ class L10nEsAeatMod390Report(models.Model): store=True, string="[65] Result. rég. gral.", ) - casilla_85 = fields.Monetary( + casilla_662 = fields.Monetary( + string="[662] Cuotas pendientes de compensación al término del ejercicio", + help="[662] Cuotas pendientes de compensación generadas en el ejercicio " + "y distintas de las incluidas en la casilla 97", + ) + casilla_85 = fields.Float( string="[85] Compens. ejercicio anterior", help="Si en la autoliquidación del último período del ejercicio " "anterior resultó un saldo a su favor y usted optó por la " @@ -361,6 +366,13 @@ class L10nEsAeatMod390Report(models.Model): compute="_compute_casilla_108", store=True, ) + use_303 = fields.Boolean( + "Use 303 reports", + help="If it's checked, this report uses 303 reports for calculate fields 85, " + "95, 97, 98 and 662. When it's unchecked, you should fill them in. If you " + "calculated first and then checked this option, you must calculate it again.", + default=False, + ) @api.depends("tax_line_ids", "tax_line_ids.amount") def _compute_casilla_33(self): @@ -679,15 +691,70 @@ def _check_type(self): _("You cannot make complementary reports for this model.") ) + def calculate(self): + res = super().calculate() + for mod390 in self: + if not mod390.use_303: + continue + casilla_85, casilla_95, casilla_97, casilla_98, casilla_662 = 0, 0, 0, 0, 0 + reports_303_this_year = self.env["l10n.es.aeat.mod303.report"].search( + [ + ("year", "=", mod390.year), + ("state", "not in", ("draft", "cancelled")), + ("statement_type", "=", "N"), + ] + ) + if not reports_303_this_year: + continue + # casilla 85 = sumatorio de las casilla 78 de los periodos del año + casilla_85 = sum(reports_303_this_year.mapped("cuota_compensar")) + # casilla 95 = sumatorio de las casilla 71 de los periodos del año que + # sean a ingresar + casilla_95 = sum( + reports_303_this_year.filtered( + lambda r: r.result_type in {"I", "G", "U"} + ).mapped("resultado_liquidacion") + ) + report_303_last_period = reports_303_this_year.filtered( + lambda r: r.period_type in {"4T", "12"} + ) + if report_303_last_period: + if report_303_last_period[0].result_type == "C": + # Si salió a compensar, casilla 97 = casilla 71 del último periodo + # del año si fue a compensar + casilla_97 = abs(report_303_last_period.resultado_liquidacion) + elif report_303_last_period[0].result_type == "N": + # casilla 97 = casilla 87 del último periodo del año si fue a + # compensar si salio resultado cero, pero queda pendiente a + # compensar + casilla_97 = report_303_last_period.remaining_cuota_compensar + elif report_303_last_period[0].result_type in {"D", "V", "X"}: + # casilla 98 = casilla 71 del último periodo del año si fue a + # devolver + casilla_98 = abs(report_303_last_period.resultado_liquidacion) + # casilla 662 = casilla 87 del último periodo del año si no se + # incluyo en la casilla 97 + casilla_662 = report_303_last_period.remaining_cuota_compensar + mod390.update( + { + "casilla_85": casilla_85, + "casilla_95": casilla_95, + "casilla_97": casilla_97, + "casilla_98": casilla_98, + "casilla_662": casilla_662, + } + ) + return res + def button_confirm(self): """Check that the manual 303 results match the report.""" self.ensure_one() - summary = self.casilla_95 - self.casilla_97 - self.casilla_98 + summary = self.casilla_95 - self.casilla_97 - self.casilla_98 - self.casilla_662 if float_compare(summary, self.casilla_86, precision_digits=2) != 0: raise exceptions.UserError( _( - "The result of the manual 303 summary (fields [95], [97] and " - "[98] in the page '9. Resultado liquidaciones') doesn't match " + "The result of the manual 303 summary (fields [95], [97], [98] and " + "[662] in the page '9. Resultado liquidaciones') doesn't match " "the field [86]. Please check if you have filled such fields." ) ) diff --git a/l10n_es_aeat_mod390/readme/CONTRIBUTORS.md b/l10n_es_aeat_mod390/readme/CONTRIBUTORS.md index 1d6552196e1..1ad12068307 100644 --- a/l10n_es_aeat_mod390/readme/CONTRIBUTORS.md +++ b/l10n_es_aeat_mod390/readme/CONTRIBUTORS.md @@ -8,3 +8,5 @@ - Valentin Vinagre \<\> - [Dixmit](https://www.dixmit.com): - Enric Tobella +- [Moduon](https://www.moduon.team): + - Emilio Pascual diff --git a/l10n_es_aeat_mod390/static/description/index.html b/l10n_es_aeat_mod390/static/description/index.html index abb7b7bd6f8..67dd9dcb571 100644 --- a/l10n_es_aeat_mod390/static/description/index.html +++ b/l10n_es_aeat_mod390/static/description/index.html @@ -8,10 +8,11 @@ /* :Author: David Goodger (goodger@python.org) -:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $ +:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $ :Copyright: This stylesheet has been placed in the public domain. Default cascading style sheet for the HTML output of Docutils. +Despite the name, some widely supported CSS2 features are used. See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to customize this style sheet. @@ -274,7 +275,7 @@ margin-left: 2em ; margin-right: 2em } -pre.code .ln { color: grey; } /* line numbers */ +pre.code .ln { color: gray; } /* line numbers */ pre.code, code { background-color: #eeeeee } pre.code .comment, code .comment { color: #5C6576 } pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold } @@ -300,7 +301,7 @@ span.pre { white-space: pre } -span.problematic { +span.problematic, pre.problematic { color: red } span.section-subtitle { @@ -366,7 +367,7 @@

AEAT modelo 390

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:cd49da2b042bfe8923368e88360be066a71823f46fa943be223ea05beb3aa4ea +!! source digest: sha256:115d6812af39a06156a0255425f9da2422557793d3893a2870acb1a9c6d8aeac !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

Beta License: AGPL-3 OCA/l10n-spain Translate me on Weblate Try me on Runboat

Modelo 390 de la AEAT. Declaración-resumen anual del Impuesto sobre el @@ -417,8 +418,8 @@

Known issues / Roadmap

como por ejemplo si la empresa está en concurso de acreedores.
  • No se calculan operaciones intragrupo.
  • No se contempla el régimen de criterio de caja.
  • -
  • No se contempla el régimen especial de bienes usados, objetos de -arte, antigüedades y objetos de colección.
  • +
  • No se contempla el régimen especial de bienes usados, objetos de arte, +antigüedades y objetos de colección.
  • No se contempla el régimen especial de agencias de viaje.
  • No se contempla el recargo de equivalencia de impuesto al tabaco (casillas 41 y 42).
  • @@ -470,12 +471,18 @@

    Contributors

  • Enric Tobella
  • +
  • Moduon:
      +
    • Emilio Pascual
    • +
    +
  • Maintainers

    This module is maintained by the OCA.

    -Odoo Community Association + +Odoo Community Association +

    OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use.

    diff --git a/l10n_es_aeat_mod390/tests/test_l10n_es_aeat_mod390.py b/l10n_es_aeat_mod390/tests/test_l10n_es_aeat_mod390.py index 1b8b2f003de..b79f1d44713 100644 --- a/l10n_es_aeat_mod390/tests/test_l10n_es_aeat_mod390.py +++ b/l10n_es_aeat_mod390/tests/test_l10n_es_aeat_mod390.py @@ -233,6 +233,23 @@ def setUpClass(cls): "journal_id": cls.journal_misc.id, } ) + cls.model390_2023 = cls.env["l10n.es.aeat.mod390.report"].create( + { + "name": "999000001390", + "company_id": cls.company.id, + "company_vat": "1234567890", + "contact_name": "Test owner", + "statement_type": "N", + "support_type": "T", + "contact_phone": "911234455", + "year": 2023, + "period_type": "0A", + "date_start": "2023-01-01", + "date_end": "2023-12-31", + "journal_id": cls.journal_misc.id, + "use_303": True, + } + ) class TestL10nEsAeatMod390(TestL10nEsAeatMod390Base): @@ -303,3 +320,171 @@ def test_model_390(self): for xml_id in export_config_xml_ids: export_config = self.env.ref(xml_id) self.assertTrue(export_to_boe._export_config(self.model390, export_config)) + + def test_model_390_using_303_01(self): + # Check use 303 activated but no 303 reports exist + # Purchase invoices + self._invoice_purchase_create("2023-01-01") + self._invoice_purchase_create("2023-04-01") + self._invoice_purchase_create("2023-07-01") + self._invoice_purchase_create("2023-10-01") + # Sale invoices + self._invoice_sale_create("2023-01-01") + self._invoice_sale_create("2023-07-01") + self._invoice_sale_create("2023-10-01") + # Calculate 390 + self.model390_2023.button_calculate() + self.assertAlmostEqual(self.model390_2023.casilla_85, 0.0, 2) + self.assertAlmostEqual(self.model390_2023.casilla_95, 0.0, 2) + self.assertAlmostEqual(self.model390_2023.casilla_97, 0.0, 2) + self.assertAlmostEqual(self.model390_2023.casilla_98, 0.0, 2) + self.assertAlmostEqual(self.model390_2023.casilla_662, 0.0, 2) + + def test_model_390_using_303_02(self): + # Check use 303 activated and 303 reports exist but none are to be enter + # and last period is to return with remaining compensation + # Purchase invoices + self._invoice_purchase_create("2023-01-01") + self._invoice_purchase_create("2023-10-01") + # Reports 303 + model303_1T = self.env["l10n.es.aeat.mod303.report"].create( + { + "name": "9991000000303", + "company_id": self.company.id, + "company_vat": "1234567890", + "contact_name": "Test owner", + "statement_type": "N", + "support_type": "T", + "contact_phone": "911234455", + "year": 2023, + "period_type": "1T", + "date_start": "2023-01-01", + "date_end": "2023-03-31", + "journal_id": self.journal_misc.id, + } + ) + model303_2T = model303_1T.copy( + { + "name": "9992000000303", + "period_type": "2T", + "date_start": "2023-04-01", + "date_end": "2023-06-30", + } + ) + model303_3T = model303_1T.copy( + { + "name": "9993000000303", + "period_type": "3T", + "date_start": "2023-07-01", + "date_end": "2023-09-30", + } + ) + model303_4T = model303_1T.copy( + { + "name": "9994000000303", + "period_type": "4T", + "date_start": "2023-10-01", + "date_end": "2023-12-31", + } + ) + # Calculate reports + model303_1T.button_calculate() + model303_2T.button_calculate() + model303_3T.button_calculate() + model303_4T.button_calculate() + self.model390_2023.button_calculate() + # Check casilla_85, casilla_95, casilla_97, casilla_98, casilla_662 + self.assertAlmostEqual(self.model390_2023.casilla_85, 0.0, 2) + self.assertAlmostEqual(self.model390_2023.casilla_95, 0.0, 2) + self.assertAlmostEqual(self.model390_2023.casilla_97, 560.85, 2) + self.assertAlmostEqual(self.model390_2023.casilla_98, 0.0, 2) + self.assertAlmostEqual(self.model390_2023.casilla_662, 0.0, 2) + + model303_4T.return_last_period = True + model303_4T.button_calculate() + self.model390_2023.button_calculate() + # Check casilla_85, casilla_95, casilla_97, casilla_98, casilla_662 + self.assertAlmostEqual(self.model390_2023.casilla_85, 560.85, 2) + self.assertAlmostEqual(self.model390_2023.casilla_95, 0.0, 2) + self.assertAlmostEqual(self.model390_2023.casilla_97, 0.0, 2) + self.assertAlmostEqual(self.model390_2023.casilla_98, 1121.7, 2) + self.assertAlmostEqual(self.model390_2023.casilla_662, 0.0, 2) + + def test_model_390_using_303_03(self): + # Check use 303 activated, 303 reports exist and last period is to compensate + # Purchase invoices + self._invoice_purchase_create("2023-01-01") + self._invoice_purchase_create("2023-04-01") + self._invoice_purchase_create("2023-07-01") + self._invoice_purchase_create("2023-10-01") + # # Sale invoices + self._invoice_sale_create("2023-01-01") + self._invoice_sale_create("2023-04-01") + self._invoice_sale_create("2023-07-01") + self._invoice_sale_create("2023-10-01") + # Reports 303 + model303_1T = self.env["l10n.es.aeat.mod303.report"].create( + { + "name": "9991000000303", + "company_id": self.company.id, + "company_vat": "1234567890", + "contact_name": "Test owner", + "statement_type": "N", + "support_type": "T", + "contact_phone": "911234455", + "year": 2023, + "period_type": "1T", + "date_start": "2023-01-01", + "date_end": "2023-03-31", + "journal_id": self.journal_misc.id, + } + ) + model303_2T = model303_1T.copy( + { + "name": "9992000000303", + "period_type": "2T", + "date_start": "2023-04-01", + "date_end": "2023-06-30", + } + ) + model303_3T = model303_1T.copy( + { + "name": "9993000000303", + "period_type": "3T", + "date_start": "2023-07-01", + "date_end": "2023-09-30", + } + ) + + model303_4T = model303_1T.copy( + { + "name": "9994000000303", + "period_type": "4T", + "date_start": "2023-10-01", + "date_end": "2023-12-31", + } + ) + # Calculate reports + model303_1T.button_calculate() + model303_2T.button_calculate() + model303_3T.button_calculate() + model303_4T.potential_cuota_compensar = 905.25 + model303_4T.cuota_compensar = 805.25 + model303_4T.button_calculate() + self.model390_2023.button_calculate() + # Check casilla_85, casilla_95, casilla_97, casilla_98, casilla_662 + self.assertAlmostEqual(self.model390_2023.casilla_85, 805.25, 2) + self.assertAlmostEqual(self.model390_2023.casilla_95, 2415.75, 2) + self.assertAlmostEqual(self.model390_2023.casilla_97, 100.0, 2) + self.assertAlmostEqual(self.model390_2023.casilla_98, 0.0, 2) + self.assertAlmostEqual(self.model390_2023.casilla_662, 0.0, 2) + + model303_4T.return_last_period = True + model303_4T.button_calculate() + self.model390_2023.button_calculate() + # Check casilla_85, casilla_95, casilla_97, casilla_98, casilla_662 + self.assertAlmostEqual(self.model390_2023.casilla_85, 905.25, 2) + self.assertAlmostEqual(self.model390_2023.casilla_95, 2415.75, 2) + self.assertAlmostEqual(self.model390_2023.casilla_97, 0.0, 2) + self.assertAlmostEqual(self.model390_2023.casilla_98, 100.00, 2) + self.assertAlmostEqual(self.model390_2023.casilla_662, 0.0, 2) diff --git a/l10n_es_aeat_mod390/views/mod390_view.xml b/l10n_es_aeat_mod390/views/mod390_view.xml index eda67a90515..b957b2de9c0 100644 --- a/l10n_es_aeat_mod390/views/mod390_view.xml +++ b/l10n_es_aeat_mod390/views/mod390_view.xml @@ -17,6 +17,20 @@ l10n.es.aeat.mod390.report +
    + +
    + + + @@ -310,6 +324,13 @@ readonly="state != 'calculated'" />