From f3c6e13557e4f8a4389e90dec6a1a83af7cafb3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Mart=C3=ADnez?= Date: Thu, 13 Feb 2025 12:17:30 +0100 Subject: [PATCH] =?UTF-8?q?[IMP]=20l10n=5Fes=5Ffacturae:=20Retenci=C3=B3n?= =?UTF-8?q?=20de=20garant=C3=ADa?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit TT55080 [IMP] l10n_es_facturae: Importe retención garantía modificable Se define el campo facturae_withheld_amount readonly=False para permitir modificarlo para que se pueda ajustar manualmente por ejemplo por el redondeo. TT55080 [IMP] l10n_es_facturae: Restar el importe de retención de garantía del total Relacionado con https://github.com/OCA/l10n-spain/blob/abf6a4bb0ee52305649f07036568f52c220f1c84/l10n_es_facturae/data/Facturaev3_2_2.xsd#L884 TT55080 --- l10n_es_facturae/i18n/es.po | 41 ++++++++++++++++++++ l10n_es_facturae/i18n/l10n_es_facturae.pot | 41 ++++++++++++++++++++ l10n_es_facturae/models/account_move.py | 15 +++++++ l10n_es_facturae/tests/common.py | 26 +++++++++++++ l10n_es_facturae/views/account_move_view.xml | 10 +++++ l10n_es_facturae/views/report_facturae.xml | 14 ++++++- 6 files changed, 145 insertions(+), 2 deletions(-) diff --git a/l10n_es_facturae/i18n/es.po b/l10n_es_facturae/i18n/es.po index e9ece6cd6cd..2d11b925558 100644 --- a/l10n_es_facturae/i18n/es.po +++ b/l10n_es_facturae/i18n/es.po @@ -87,6 +87,11 @@ msgstr "Movimiento contable Facturae firmado" msgid "Account Move Reversal" msgstr "Revocación de movimiento en cuenta" +#. module: l10n_es_facturae +#: model_terms:ir.ui.view,arch_db:l10n_es_facturae.view_move_form +msgid "Amount" +msgstr "Importe" + #. module: l10n_es_facturae #: model:ir.model.fields,field_description:l10n_es_facturae.field_res_partner__attach_invoice_as_annex #: model:ir.model.fields,field_description:l10n_es_facturae.field_res_users__attach_invoice_as_annex @@ -757,6 +762,11 @@ msgstr "Modos de pago" msgid "Payment mode is required" msgstr "El módo de pago es obligatorio" +#. module: l10n_es_facturae +#: model_terms:ir.ui.view,arch_db:l10n_es_facturae.view_move_form +msgid "Percent" +msgstr "Porcentaje" + #. module: l10n_es_facturae #: model:ir.model.fields.selection,name:l10n_es_facturae.selection__account_move__facturae_refund_reason__11 #: model:ir.model.fields.selection,name:l10n_es_facturae.selection__account_move_reversal__refund_reason__11 @@ -783,6 +793,11 @@ msgstr "REIVA: Régimen especial de IVA para agencias de viajes" msgid "Ra: Renta aduanas" msgstr "Ra: Renta aduanas" +#. module: l10n_es_facturae +#: model_terms:ir.ui.view,arch_db:l10n_es_facturae.view_move_form +msgid "Reason" +msgstr "Razón" + #. module: l10n_es_facturae #: model:ir.model.fields.selection,name:l10n_es_facturae.selection__account_move__correction_method__03 #: model:ir.model.fields.selection,name:l10n_es_facturae.selection__account_move_reversal__correction_method__03 @@ -922,6 +937,32 @@ msgstr "Unidad Tramitadora" msgid "Vat must be defined for factura-e enabled partners." msgstr "El iva debe definirse para los socios habilitados para factura-e." +#. module: l10n_es_facturae +#: model:ir.model.fields,field_description:l10n_es_facturae.field_account_bank_statement_line__facturae_withheld_amount +#: model:ir.model.fields,field_description:l10n_es_facturae.field_account_move__facturae_withheld_amount +#: model:ir.model.fields,field_description:l10n_es_facturae.field_account_payment__facturae_withheld_amount +msgid "Withheld Amount" +msgstr "Retención (importe)" + +#. module: l10n_es_facturae +#: model:ir.model.fields,field_description:l10n_es_facturae.field_account_bank_statement_line__facturae_withheld_percent +#: model:ir.model.fields,field_description:l10n_es_facturae.field_account_move__facturae_withheld_percent +#: model:ir.model.fields,field_description:l10n_es_facturae.field_account_payment__facturae_withheld_percent +msgid "Withheld Percent" +msgstr "Retención (porcentaje)" + +#. module: l10n_es_facturae +#: model:ir.model.fields,field_description:l10n_es_facturae.field_account_bank_statement_line__facturae_withheld_reason +#: model:ir.model.fields,field_description:l10n_es_facturae.field_account_move__facturae_withheld_reason +#: model:ir.model.fields,field_description:l10n_es_facturae.field_account_payment__facturae_withheld_reason +msgid "Withheld Reason" +msgstr "Retención (razón)" + +#. module: l10n_es_facturae +#: model_terms:ir.ui.view,arch_db:l10n_es_facturae.view_move_form +msgid "Withhelds" +msgstr "Retención" + #. module: l10n_es_facturae #. odoo-python #: code:addons/l10n_es_facturae/models/account_move.py:0 diff --git a/l10n_es_facturae/i18n/l10n_es_facturae.pot b/l10n_es_facturae/i18n/l10n_es_facturae.pot index 1de4b4077f5..fb13a93d117 100644 --- a/l10n_es_facturae/i18n/l10n_es_facturae.pot +++ b/l10n_es_facturae/i18n/l10n_es_facturae.pot @@ -77,6 +77,11 @@ msgstr "" msgid "Account Move Reversal" msgstr "" +#. module: l10n_es_facturae +#: model_terms:ir.ui.view,arch_db:l10n_es_facturae.view_move_form +msgid "Amount" +msgstr "" + #. module: l10n_es_facturae #: model:ir.model.fields,field_description:l10n_es_facturae.field_res_partner__attach_invoice_as_annex #: model:ir.model.fields,field_description:l10n_es_facturae.field_res_users__attach_invoice_as_annex @@ -732,6 +737,11 @@ msgstr "" msgid "Payment mode is required" msgstr "" +#. module: l10n_es_facturae +#: model_terms:ir.ui.view,arch_db:l10n_es_facturae.view_move_form +msgid "Percent" +msgstr "" + #. module: l10n_es_facturae #: model:ir.model.fields.selection,name:l10n_es_facturae.selection__account_move__facturae_refund_reason__11 #: model:ir.model.fields.selection,name:l10n_es_facturae.selection__account_move_reversal__refund_reason__11 @@ -758,6 +768,11 @@ msgstr "" msgid "Ra: Renta aduanas" msgstr "" +#. module: l10n_es_facturae +#: model_terms:ir.ui.view,arch_db:l10n_es_facturae.view_move_form +msgid "Reason" +msgstr "" + #. module: l10n_es_facturae #: model:ir.model.fields.selection,name:l10n_es_facturae.selection__account_move__correction_method__03 #: model:ir.model.fields.selection,name:l10n_es_facturae.selection__account_move_reversal__correction_method__03 @@ -894,6 +909,32 @@ msgstr "" msgid "Vat must be defined for factura-e enabled partners." msgstr "" +#. module: l10n_es_facturae +#: model:ir.model.fields,field_description:l10n_es_facturae.field_account_bank_statement_line__facturae_withheld_amount +#: model:ir.model.fields,field_description:l10n_es_facturae.field_account_move__facturae_withheld_amount +#: model:ir.model.fields,field_description:l10n_es_facturae.field_account_payment__facturae_withheld_amount +msgid "Withheld Amount" +msgstr "" + +#. module: l10n_es_facturae +#: model:ir.model.fields,field_description:l10n_es_facturae.field_account_bank_statement_line__facturae_withheld_percent +#: model:ir.model.fields,field_description:l10n_es_facturae.field_account_move__facturae_withheld_percent +#: model:ir.model.fields,field_description:l10n_es_facturae.field_account_payment__facturae_withheld_percent +msgid "Withheld Percent" +msgstr "" + +#. module: l10n_es_facturae +#: model:ir.model.fields,field_description:l10n_es_facturae.field_account_bank_statement_line__facturae_withheld_reason +#: model:ir.model.fields,field_description:l10n_es_facturae.field_account_move__facturae_withheld_reason +#: model:ir.model.fields,field_description:l10n_es_facturae.field_account_payment__facturae_withheld_reason +msgid "Withheld Reason" +msgstr "" + +#. module: l10n_es_facturae +#: model_terms:ir.ui.view,arch_db:l10n_es_facturae.view_move_form +msgid "Withhelds" +msgstr "" + #. module: l10n_es_facturae #. odoo-python #: code:addons/l10n_es_facturae/models/account_move.py:0 diff --git a/l10n_es_facturae/models/account_move.py b/l10n_es_facturae/models/account_move.py index b1c667f52d8..e972d390b0e 100644 --- a/l10n_es_facturae/models/account_move.py +++ b/l10n_es_facturae/models/account_move.py @@ -76,6 +76,14 @@ class AccountMove(models.Model): facturae_file_reference = fields.Char() facturae_receiver_transaction_reference = fields.Char() facturae_receiver_contract_reference = fields.Char() + facturae_withheld_reason = fields.Char(string="Withheld Reason") + facturae_withheld_percent = fields.Float(string="Withheld Percent") + facturae_withheld_amount = fields.Monetary( + compute="_compute_facturae_withheld_amount", + store=True, + string="Withheld Amount", + readonly=False, + ) @api.constrains("facturae_start_date", "facturae_end_date") def _check_facturae_date(self): @@ -105,6 +113,13 @@ def _compute_facturae(self): ] ) + @api.depends("amount_untaxed", "facturae_withheld_percent") + def _compute_facturae_withheld_amount(self): + for item in self.filtered("facturae"): + item.facturae_withheld_amount = ( + item.amount_untaxed * item.facturae_withheld_percent + ) + def get_exchange_rate(self, euro_rate, currency_rate): if not euro_rate and not currency_rate: return fields.Datetime.now().strftime("%Y-%m-%d") diff --git a/l10n_es_facturae/tests/common.py b/l10n_es_facturae/tests/common.py index 5d8c06e4f24..65c651a5d78 100644 --- a/l10n_es_facturae/tests/common.py +++ b/l10n_es_facturae/tests/common.py @@ -594,6 +594,8 @@ def _check_amounts(self, move, wo_discount, subtotal, base, tax, discount=0): def _check_totals(self, move, subtotal, base, tax, total): move.action_post() move.name = "2999/99999" + move.facturae_withheld_reason = "WithholdingReason" + move.facturae_withheld_percent = 0.05 generated_facturae = self._create_facturae_file(move) self.assertEqual( generated_facturae.xpath("//InvoiceTotals/TotalGrossAmount")[0].text, @@ -613,6 +615,30 @@ def _check_totals(self, move, subtotal, base, tax, total): generated_facturae.xpath("//InvoiceTotals//InvoiceTotal")[0].text, total, ) + self.assertEqual( + generated_facturae.xpath( + "//InvoiceTotals//AmountsWithheld//WithholdingReason" + )[0].text, + "WithholdingReason", + ) + version = move.get_facturae_version() + self.assertEqual( + generated_facturae.xpath( + "//InvoiceTotals//AmountsWithheld//WithholdingRate" + )[0].text, + ("%.4f" if version == "3_2" else "%.8f") % 5, + ) + self.assertEqual( + generated_facturae.xpath( + "//InvoiceTotals//AmountsWithheld//WithholdingAmount" + )[0].text, + ("%.2f" if version == "3_2" else "%.8f") % 5, + ) + sign = -1 if move.move_type == "out_refund" else 1 + self.assertEqual( + generated_facturae.xpath("//InvoiceTotals//TotalExecutableAmount")[0].text, + ("%.2f" if version == "3_2" else "%.8f") % (float(total) - (sign * 5)), + ) def test_move_rounding(self): self._activate_certificate(self.certificate_password) diff --git a/l10n_es_facturae/views/account_move_view.xml b/l10n_es_facturae/views/account_move_view.xml index c9b34eec202..c84c22f4e58 100644 --- a/l10n_es_facturae/views/account_move_view.xml +++ b/l10n_es_facturae/views/account_move_view.xml @@ -69,6 +69,16 @@ + + + + + diff --git a/l10n_es_facturae/views/report_facturae.xml b/l10n_es_facturae/views/report_facturae.xml index 859f5e9e4a7..d1e6350869d 100644 --- a/l10n_es_facturae/views/report_facturae.xml +++ b/l10n_es_facturae/views/report_facturae.xml @@ -485,9 +485,19 @@ t-out="('%.2f' if version == '3_2' else '%.8f') % (sign * move.amount_total)" /> - + + + + +