diff --git a/l10n_it_riba/README.rst b/l10n_it_riba/README.rst new file mode 100644 index 000000000000..55bf2af0015d --- /dev/null +++ b/l10n_it_riba/README.rst @@ -0,0 +1,152 @@ +======================= +ITA - Ricevute bancarie +======================= + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:5cfa30ffb10e8e3d58a504c71ce80a7b9e88e928946187b4771d838b1947c92a + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fl10n--italy-lightgray.png?logo=github + :target: https://github.com/OCA/l10n-italy/tree/16.0/l10n_it_riba + :alt: OCA/l10n-italy +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/l10n-italy-16-0/l10n-italy-16-0-l10n_it_riba + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/l10n-italy&target_branch=16.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +**Italiano** + +Modulo per gestire le ricevute bancarie. + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +**Italiano** + +Nella configurazione delle RiBa è possibile specificare se si tratti di +'Salvo buon fine' o 'Al dopo incasso', che hanno un flusso completamente diverso. + +- Al dopo incasso: nessuna registrazione verrà effettuata automaticamente e le + fatture risulteranno pagate solo al momento dell'effettivo incasso. +- Salvo buon fine: le registrazioni generate seguiranno la struttura descritta nel + documento http://goo.gl/jpRhJp + +È possibile specificare diverse configurazioni (dal menù +*Configurazione → Pagamenti → Configurazione RiBa*). Per ognuna, in caso di +'Salvo buon fine', è necessario specificare almeno il registro e il conto da +utilizzare al momento dell'accettazione della distinta da parte della banca. +Tale conto deve essere di tipo 'Crediti' (ad esempio "RiBa all'incasso", +eventualmente da creare). + +La configurazione relativa alla fase di accredito, verrà usata nel momento in +cui la banca accredita l'importo della distinta. +È possibile utilizzare un registro creato appositamente, ad esempio "Accredito RiBa", +e un conto chiamato ad esempio "Banche c/RiBa all'incasso", che non deve essere di tipo +'Banca e cassa'. + +La configurazione relativa all'insoluto verrà utilizzata in caso di mancato pagamento +da parte del cliente. +Il conto può chiamarsi ad esempio "Crediti insoluti". + +Nel caso si vogliano gestire anche le spese per ogni scadenza con ricevuta bancaria, +si deve configurare un prodotto di tipo servizio e collegarlo in +*Configurazione → Impostazioni → Contabilità → Imposte → Spese di incasso RiBa*. + +Usage +===== + +**Italiano** + +Per utilizzare il meccanismo delle RiBa è necessario configurare un termine +di pagamento di tipo 'RiBa'. + +Per emettere una distinta è necessario andare su *RiBa → Emetti RiBa* e +selezionare i pagamenti per i quali emettere la distinta. +Se per il cliente è stato abilitato il raggruppamento, i pagamenti dello stesso +cliente e con la stessa data di scadenza andranno a costituire un solo elemento +della distinta. + +I possibili stati della distinta sono: *Bozza*, *Accettata*, *Accreditata*, +*Pagata*, *Insoluta* e *Annullata*. +Ad ogni passaggio di stato sarà possibile generare le relative registrazioni +contabili, le quali verranno riepilogate nella scheda «Contabilità». +Questa scheda è presente sia sulla distinta che sulle sue righe. + +La voce di menù 'Presentazione Riba' permette estrarre le riba fino al +raggiungimento dell'importo massimo inserito dall'utente. + +Known issues / Roadmap +====================== + +**Italiano** + +Attenzione! +Il modulo è stato migrato, ma gli script di migrazione non sono stati provati. + +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 +======= + +Contributors +~~~~~~~~~~~~ + +* Lorenzo Battistini +* Andrea Cometa +* Andrea Gallina +* Davide Corio +* Giacomo Grasso +* Gabriele Baldessari +* Alex Comba +* Marco Calcagni +* Sergio Zanchetta +* Simone Vanin +* Sergio Corato +* Giovanni Serra +* `Aion Tech `_: + + * Simone Rubino + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +This module is part of the `OCA/l10n-italy `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/l10n_it_riba/__init__.py b/l10n_it_riba/__init__.py new file mode 100644 index 000000000000..9dd2c17785be --- /dev/null +++ b/l10n_it_riba/__init__.py @@ -0,0 +1,8 @@ +# © 2019 Marco Calcagni() +# © 2016 Andrea Cometa () +# © 2012 Agile Business Group sagl () +# © 2012 Domsense srl () +# © 2012 Associazione Odoo Italia +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import models, wizard, report diff --git a/l10n_it_riba/__manifest__.py b/l10n_it_riba/__manifest__.py new file mode 100644 index 000000000000..ffcd52bcfe1d --- /dev/null +++ b/l10n_it_riba/__manifest__.py @@ -0,0 +1,48 @@ +# Copyright (C) 2012 Andrea Cometa. +# Email: info@andreacometa.it +# Web site: http://www.andreacometa.it +# Copyright (C) 2012 Associazione OpenERP Italia +# (). +# Copyright (C) 2012-2017 Lorenzo Battistini - Agile Business Group +# Copyright (C) 2019 Sergio Zanchetta - Associazione PNLUG +# Copyright 2023 Simone Rubino - Aion Tech +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "ITA - Ricevute bancarie", + "version": "16.0.1.0.0", + "development_status": "Beta", + "author": "Odoo Community Association (OCA)", + "category": "Localization/Italy", + "summary": "Ricevute bancarie", + "website": "https://github.com/OCA/l10n-italy", + "license": "AGPL-3", + "depends": [ + "account", + "account_due_list", + "l10n_it_fatturapa_out", + "l10n_it_fiscalcode", + "base_iban", + "l10n_it_abicab", + ], + "data": [ + "data/riba_sequence.xml", + "report/report.xml", + "security/ir.model.access.csv", + "security/riba_security.xml", + "views/wizard_credit.xml", + "views/wizard_past_due.xml", + "views/riba_view.xml", + "views/account_view.xml", + "views/configuration_view.xml", + "views/partner_view.xml", + "views/wizard_riba_issue.xml", + "views/wizard_riba_file_export.xml", + "views/account_config_view.xml", + "views/slip_report.xml", + "views/riba_detail_view.xml", + "views/wizard_presentation.xml", + ], + "demo": ["demo/riba_demo.xml"], + "installable": True, +} diff --git a/l10n_it_riba/data/riba_sequence.xml b/l10n_it_riba/data/riba_sequence.xml new file mode 100644 index 000000000000..24a7b99b01b4 --- /dev/null +++ b/l10n_it_riba/data/riba_sequence.xml @@ -0,0 +1,16 @@ + + + + + + RiBa Slip + seq.riba.slip + %(y)s/ + 3 + + + + diff --git a/l10n_it_riba/demo/riba_demo.xml b/l10n_it_riba/demo/riba_demo.xml new file mode 100644 index 000000000000..50418af5b3b7 --- /dev/null +++ b/l10n_it_riba/demo/riba_demo.xml @@ -0,0 +1,41 @@ + + + + + + + RiBa 30 Days End of Month + RiBa 30 Days End of Month + + + + + + + Bank + CPHBBE75 + + + + BE74126201326907 + + CPHBBE75 + + + + + IT86Y0200809440000005235152 + + CPHBBE75 + + + + diff --git a/l10n_it_riba/i18n/it.po b/l10n_it_riba/i18n/it.po new file mode 100644 index 000000000000..cf546798e70b --- /dev/null +++ b/l10n_it_riba/i18n/it.po @@ -0,0 +1,1358 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * l10n_it_riba +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-09-28 10:26+0000\n" +"PO-Revision-Date: 2023-09-28 10:26+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_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_account_config_settings_riba +msgid "" +"RiBa Collection Fees\n" +" " +msgstr "" +"Spese di incasso RiBa\n" +" " + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.slip_qweb +msgid "Total" +msgstr "Totale" + +#. module: l10n_it_riba +#. odoo-python +#: code:addons/l10n_it_riba/wizard/wizard_credit.py:0 +#: code:addons/l10n_it_riba/wizard/wizard_past_due.py:0 +#, python-format +msgid "A/C Bank" +msgstr "Banca C/C" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_configuration__bank_account_id +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_credit__bank_account_id +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_past_due__bank_account_id +msgid "A/C Bank Account" +msgstr "Conto banca C/C" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_configuration_form +msgid "Acceptance" +msgstr "Accettazione" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_configuration__acceptance_account_id +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__acceptance_account_id +msgid "Acceptance Account" +msgstr "Conto accettazione" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__date_accepted +msgid "Acceptance Date" +msgstr "Data accettazione" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__acceptance_move_ids +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_slip_form +msgid "Acceptance Entries" +msgstr "Registrazioni accettazione" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__acceptance_move_id +msgid "Acceptance Entry" +msgstr "Registrazione accettazione" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_configuration__acceptance_journal_id +msgid "Acceptance Journal" +msgstr "Registro accettazione" + +#. module: l10n_it_riba +#: model:ir.model.fields.selection,name:l10n_it_riba.selection__riba_slip__state__accepted +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_detail_riba_filter +msgid "Accepted" +msgstr "Accettata" + +#. module: l10n_it_riba +#: model:ir.model.fields,help:l10n_it_riba.field_riba_configuration__credit_account_id +msgid "Account used when RiBa amount is credited by the bank." +msgstr "Conto usato quando l'importo RiBa viene accreditato dalla banca." + +#. module: l10n_it_riba +#: model:ir.model.fields,help:l10n_it_riba.field_riba_configuration__acceptance_account_id +msgid "Account used when RiBa is accepted by the bank." +msgstr "Conto usato quando la RiBa viene accettata dalla banca." + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_slip_form +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_slip_line_form +msgid "Accounting" +msgstr "Contabilità" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__message_needaction +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__message_needaction +msgid "Action Needed" +msgstr "Azione richiesta" + +#. module: l10n_it_riba +#: model:ir.model.fields.selection,name:l10n_it_riba.selection__riba_configuration__type__incasso +msgid "After Collection" +msgstr "Al dopo incasso" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__amount +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_move_line__amount +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.slip_qweb +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_detail_riba_tree +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_slip_form +msgid "Amount" +msgstr "Importo" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__message_attachment_count +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__message_attachment_count +msgid "Attachment Count" +msgstr "Numero allegati" + +#. module: l10n_it_riba +#: model:ir.model,name:l10n_it_riba.model_res_bank +msgid "Bank" +msgstr "Banca" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_configuration__bank_id +msgid "Bank Account" +msgstr "Conto bancario" + +#. module: l10n_it_riba +#: model:ir.model.fields,help:l10n_it_riba.field_account_bank_statement_line__riba_partner_bank_id +#: model:ir.model.fields,help:l10n_it_riba.field_account_move__riba_partner_bank_id +#: model:ir.model.fields,help:l10n_it_riba.field_account_payment__riba_partner_bank_id +msgid "" +"Bank Account Number to which the RiBa will be debited. If not set, first " +"bank in partner will be used." +msgstr "" +"Numero di conto bancario al quale verrà addebitata la Riba. Se non " +"impostato, viene utilizzata la prima banca del partner." + +#. module: l10n_it_riba +#: model:ir.model,name:l10n_it_riba.model_res_partner_bank +msgid "Bank Accounts" +msgstr "Conti bancari" + +#. module: l10n_it_riba +#: model:ir.model,name:l10n_it_riba.model_riba_credit +msgid "Bank Credit" +msgstr "Accredito banca" + +#. module: l10n_it_riba +#. odoo-python +#: code:addons/l10n_it_riba/wizard/wizard_credit.py:0 +#: code:addons/l10n_it_riba/wizard/wizard_past_due.py:0 +#, python-format +msgid "Bank Fee" +msgstr "Spese bancarie" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_configuration__bank_expense_account_id +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_credit__bank_expense_account_id +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_past_due__bank_expense_account_id +msgid "Bank Fees Account" +msgstr "Conto spese bancarie" + +#. module: l10n_it_riba +#: model:ir.model,name:l10n_it_riba.model_account_bank_statement_line +msgid "Bank Statement Line" +msgstr "Riga estratto conto bancario" + +#. module: l10n_it_riba +#: model:ir.model.fields,help:l10n_it_riba.field_riba_configuration__bank_id +msgid "Bank account used for RiBa issuing." +msgstr "Conto bancario usato per l'emissione RiBa." + +#. module: l10n_it_riba +#. odoo-python +#: code:addons/l10n_it_riba/wizard/wizard_past_due.py:0 +#, python-format +msgid "Bills" +msgstr "Effetti" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_past_due__effects_account_id +msgid "Bills Account" +msgstr "Conto effetti" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_past_due__effects_amount +msgid "Bills Amount" +msgstr "Importo effetti" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__cig +msgid "CIG" +msgstr "CIG" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__cup +msgid "CUP" +msgstr "CUP" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.riba_credit +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.riba_issue_view +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.riba_past_due +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_slip_form +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.wizard_presentation_riba +msgid "Cancel" +msgstr "Annulla" + +#. module: l10n_it_riba +#: model:ir.model.fields.selection,name:l10n_it_riba.selection__riba_slip__state__cancel +#: model:ir.model.fields.selection,name:l10n_it_riba.selection__riba_slip_line__state__cancel +msgid "Canceled" +msgstr "Annullato" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.wizard_riba_file_export +msgid "Close" +msgstr "Chiudi" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_res_company__due_cost_service_id +msgid "Collection Fees Service" +msgstr "Servizio spese di incasso" + +#. module: l10n_it_riba +#: model:ir.model.fields,help:l10n_it_riba.field_account_payment_term__riba_payment_cost +msgid "" +"Collection fees amount. If different from 0, for each payment deadline an " +"invoice line will be added to invoice, with this amount." +msgstr "" +"Importo spese di incasso. Se diverso da 0, ad ogni scadenza di pagamento " +"viene aggiunta alla fattura una riga pari all'importo." + +#. module: l10n_it_riba +#: model:ir.model,name:l10n_it_riba.model_res_company +msgid "Companies" +msgstr "Aziende" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_configuration__company_id +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__company_id +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__company_id +msgid "Company" +msgstr "Azienda" + +#. module: l10n_it_riba +#: model:ir.model,name:l10n_it_riba.model_res_config_settings +msgid "Config Settings" +msgstr "Impostazioni di configurazione" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_issue__configuration_id +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__config_id +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__config_id +msgid "Configuration" +msgstr "Configurazione" + +#. module: l10n_it_riba +#: model:ir.model,name:l10n_it_riba.model_riba_configuration +msgid "Configuration parameters for RiBa" +msgstr "Parametri di configurazione Riba" + +#. module: l10n_it_riba +#: model:ir.model.fields.selection,name:l10n_it_riba.selection__riba_slip_line__state__confirmed +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_detail_riba_filter +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_slip_riba_filter +msgid "Confirmed" +msgstr "Confermata" + +#. module: l10n_it_riba +#: model:ir.model,name:l10n_it_riba.model_res_partner +msgid "Contact" +msgstr "Contatto" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.riba_credit +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.riba_issue_view +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.riba_past_due +msgid "Create" +msgstr "Crea" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_presentation_riba_issue__create_uid +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_configuration__create_uid +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_credit__create_uid +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_file_export__create_uid +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_issue__create_uid +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_past_due__create_uid +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__create_uid +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__create_uid +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_move_line__create_uid +msgid "Created by" +msgstr "Creato da" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_presentation_riba_issue__create_date +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_configuration__create_date +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_credit__create_date +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_file_export__create_date +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_issue__create_date +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_past_due__create_date +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__create_date +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__create_date +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_move_line__create_date +msgid "Created on" +msgstr "Creato il" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__date_created +msgid "Creation Date" +msgstr "Data creazione" + +#. module: l10n_it_riba +#. odoo-python +#: code:addons/l10n_it_riba/wizard/wizard_credit.py:0 +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_configuration_form +#, python-format +msgid "Credit" +msgstr "Accredito" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_credit__credit_amount +msgid "Credit Amount" +msgstr "Importo accredito" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__date_credited +msgid "Credit Date" +msgstr "Data accredito" + +#. module: l10n_it_riba +#. odoo-python +#: code:addons/l10n_it_riba/wizard/wizard_credit.py:0 +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__credit_move_id +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_slip_form +#, python-format +msgid "Credit Entry" +msgstr "Registrazione accredito" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_configuration__credit_journal_id +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_credit__credit_journal_id +msgid "Credit Journal" +msgstr "Registro accrediti" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_move_line__move_line_id +msgid "Credit Move Line" +msgstr "Riga movimento di accredito" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__move_line_ids +msgid "Credit Move Lines" +msgstr "Righe movimento di accredito" + +#. module: l10n_it_riba +#. odoo-python +#: code:addons/l10n_it_riba/models/riba.py:0 +#, python-format +msgid "Credit date must be greater or equal to acceptance date." +msgstr "" +"La data di accredito deve essere maggiore o pari alla data di accettazione." + +#. module: l10n_it_riba +#: model:ir.model.fields.selection,name:l10n_it_riba.selection__riba_slip__state__credited +#: model:ir.model.fields.selection,name:l10n_it_riba.selection__riba_slip_line__state__credited +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_detail_riba_filter +msgid "Credited" +msgstr "Accreditata" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_account_bank_statement_line__riba_credited_ids +#: model:ir.model.fields,field_description:l10n_it_riba.field_account_move__riba_credited_ids +#: model:ir.model.fields,field_description:l10n_it_riba.field_account_payment__riba_credited_ids +msgid "Credited RiBa Slips" +msgstr "Distinte RiBa accreditate" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_presentation_riba_issue__currency_id +msgid "Currency" +msgstr "Valuta" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__partner_id +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.slip_qweb +msgid "Customer" +msgstr "Cliente" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_to_issue_tree +msgid "Debit Total" +msgstr "Totale addebito" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__bank_id +msgid "Debtor Bank" +msgstr "Banca debitore" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_res_config_settings__due_cost_service_id +msgid "Default Collection Fees Service" +msgstr "Servizio spese di incasso predefinito" + +#. module: l10n_it_riba +#: model:ir.model.fields,help:l10n_it_riba.field_res_config_settings__due_cost_service_id +msgid "Default Service for RiBa Collection Fees on invoice." +msgstr "Servizio predefinito per le spese di incasso RiBa nella fattura." + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_configuration__name +msgid "Description" +msgstr "Descrizione" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_slip_line_form +msgid "Detail" +msgstr "Dettaglio" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_presentation_riba_issue__display_name +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_configuration__display_name +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_credit__display_name +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_file_export__display_name +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_issue__display_name +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_past_due__display_name +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__display_name +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__display_name +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_move_line__display_name +msgid "Display Name" +msgstr "Nome visualizzato" + +#. module: l10n_it_riba +#: model:ir.model.fields.selection,name:l10n_it_riba.selection__riba_slip__state__draft +#: model:ir.model.fields.selection,name:l10n_it_riba.selection__riba_slip_line__state__draft +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_detail_riba_filter +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_slip_riba_filter +msgid "Draft" +msgstr "Bozza" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__due_date +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.slip_qweb +msgid "Due Date" +msgstr "Scadenza" + +#. module: l10n_it_riba +#. odoo-python +#: code:addons/l10n_it_riba/wizard/wizard_credit.py:0 +#: code:addons/l10n_it_riba/wizard/wizard_past_due.py:0 +#, python-format +msgid "Every account is mandatory." +msgstr "I conti sono tutti obbligatori." + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.wizard_riba_file_export +msgid "Export" +msgstr "Esporta" + +#. module: l10n_it_riba +#: model:ir.actions.server,name:l10n_it_riba.action_wizard_riba_file_export +msgid "Export RiBa" +msgstr "Esporta RiBa" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.wizard_riba_file_export +msgid "Export RiBa file" +msgstr "Esporta file RiBa" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_credit__expense_amount +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_past_due__expense_amount +msgid "Fees Amount" +msgstr "Importo spese" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_file_export__riba_txt +msgid "File" +msgstr "File" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_file_export__file_name +msgid "File Name" +msgstr "Nome file" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__message_follower_ids +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__message_follower_ids +msgid "Followers" +msgstr "Seguito da" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__message_partner_ids +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__message_partner_ids +msgid "Followers (Partners)" +msgstr "Seguito da (partner)" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_res_bank__banca_estera +msgid "Foreign Bank" +msgstr "Banca estera" + +#. module: l10n_it_riba +#: model:ir.model,name:l10n_it_riba.model_account_full_reconcile +msgid "Full Reconcile" +msgstr "Riconciliazione completa" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_slip_form +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_slip_line_form +msgid "General" +msgstr "Generale" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_res_partner__group_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_res_users__group_riba +msgid "Group RiBa" +msgstr "Raggruppa per cliente" + +#. module: l10n_it_riba +#: model:ir.model.fields,help:l10n_it_riba.field_res_partner__group_riba +#: model:ir.model.fields,help:l10n_it_riba.field_res_users__group_riba +msgid "Group RiBa by customer while issuing." +msgstr "All'emissione, raggruppa le RiBa per cliente." + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__has_message +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__has_message +msgid "Has Message" +msgstr "Contiene messaggio" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_account_move_line__iban +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__iban +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.slip_qweb +msgid "IBAN" +msgstr "IBAN" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_presentation_riba_issue__id +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_configuration__id +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_credit__id +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_file_export__id +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_issue__id +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_past_due__id +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__id +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__id +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_move_line__id +msgid "ID" +msgstr "ID" + +#. module: l10n_it_riba +#: model:ir.model.fields,help:l10n_it_riba.field_account_setup_bank_manual_config__codice_sia +#: model:ir.model.fields,help:l10n_it_riba.field_res_partner_bank__codice_sia +msgid "Identification Code of the Company in the Interbank System." +msgstr "Codice identificativo dell'azienda nel sistema interbancario." + +#. module: l10n_it_riba +#: model:ir.model.fields,help:l10n_it_riba.field_riba_slip__message_needaction +#: model:ir.model.fields,help:l10n_it_riba.field_riba_slip_line__message_needaction +msgid "If checked, new messages require your attention." +msgstr "Se selezionata, nuovi messaggi richiedono attenzione." + +#. module: l10n_it_riba +#: model:ir.model.fields,help:l10n_it_riba.field_riba_slip__message_has_error +#: model:ir.model.fields,help:l10n_it_riba.field_riba_slip__message_has_sms_error +#: model:ir.model.fields,help:l10n_it_riba.field_riba_slip_line__message_has_error +#: model:ir.model.fields,help:l10n_it_riba.field_riba_slip_line__message_has_sms_error +msgid "If checked, some messages have a delivery error." +msgstr "Se selezionata, alcuni messaggi presentano un errore di consegna." + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__invoice_date +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.slip_qweb +msgid "Invoice Date" +msgstr "Data fattura" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_slip_line_form +msgid "Invoice Entries" +msgstr "Registrazioni fattura" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__invoice_number +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.slip_qweb +msgid "Invoice Number" +msgstr "Numero fattura" + +#. module: l10n_it_riba +#. odoo-python +#: code:addons/l10n_it_riba/models/account.py:0 +#, python-format +msgid "Invoice is linked to RiBa slip No. {riba}" +msgstr "La fattura è collegata alla distinta RiBa n. {riba}" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__message_is_follower +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__message_is_follower +msgid "Is Follower" +msgstr "Sta seguendo" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_account_bank_statement_line__is_riba_payment +#: model:ir.model.fields,field_description:l10n_it_riba.field_account_move__is_riba_payment +#: model:ir.model.fields,field_description:l10n_it_riba.field_account_payment__is_riba_payment +msgid "Is RiBa Payment" +msgstr "È un pagamento RiBa" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_account_bank_statement_line__is_past_due +#: model:ir.model.fields,field_description:l10n_it_riba.field_account_move__is_past_due +#: model:ir.model.fields,field_description:l10n_it_riba.field_account_payment__is_past_due +msgid "Is a past due invoice" +msgstr "È una fattura insoluta" + +#. module: l10n_it_riba +#: model:ir.ui.menu,name:l10n_it_riba.menu_riba_to_issue +msgid "Issue" +msgstr "Emissione" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_configuration__type +msgid "Issue Mode" +msgstr "Modalità emissione" + +#. module: l10n_it_riba +#: model:ir.actions.server,name:l10n_it_riba.riba_issue_action_server +msgid "Issue RiBa" +msgstr "Emetti RiBa" + +#. module: l10n_it_riba +#: model:ir.model,name:l10n_it_riba.model_account_move +msgid "Journal Entry" +msgstr "Registrazione contabile" + +#. module: l10n_it_riba +#: model:ir.model,name:l10n_it_riba.model_account_move_line +msgid "Journal Item" +msgstr "Movimento contabile" + +#. module: l10n_it_riba +#: model:ir.model.fields,help:l10n_it_riba.field_riba_configuration__credit_journal_id +msgid "Journal used when RiBa amount is credited by the bank." +msgstr "" +"Registro utilizzato quando l'importo RiBa viene accreditato dalla banca." + +#. module: l10n_it_riba +#: model:ir.model.fields,help:l10n_it_riba.field_riba_configuration__acceptance_journal_id +msgid "Journal used when RiBa is accepted by the bank." +msgstr "Registro utilizzato quanto la RiBa viene accettata dalla banca." + +#. module: l10n_it_riba +#: model:ir.model.fields,help:l10n_it_riba.field_riba_configuration__past_due_journal_id +msgid "Journal used when RiBa is past due." +msgstr "Registro utilizzato quando la RiBa è insoluta." + +#. module: l10n_it_riba +#: model:ir.model.fields,help:l10n_it_riba.field_riba_configuration__settlement_journal_id +msgid "Journal used when customers finally pay the invoice to bank." +msgstr "Registro usato quando i clienti pagano infine la fattura alla banca." + +#. module: l10n_it_riba +#: model:ir.model.fields,help:l10n_it_riba.field_riba_slip__registration_date +msgid "Keep empty to use the current date." +msgstr "Lasciare vuoto per utilizzare la data corrente." + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_presentation_riba_issue____last_update +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_configuration____last_update +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_credit____last_update +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_file_export____last_update +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_issue____last_update +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_past_due____last_update +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip____last_update +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line____last_update +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_move_line____last_update +msgid "Last Modified on" +msgstr "Ultima modifica il" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_presentation_riba_issue__write_uid +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_configuration__write_uid +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_credit__write_uid +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_file_export__write_uid +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_issue__write_uid +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_past_due__write_uid +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__write_uid +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__write_uid +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_move_line__write_uid +msgid "Last Updated by" +msgstr "Ultimo aggiornamento di" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_presentation_riba_issue__write_date +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_configuration__write_date +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_credit__write_date +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_file_export__write_date +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_issue__write_date +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_past_due__write_date +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__write_date +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__write_date +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_move_line__write_date +msgid "Last Updated on" +msgstr "Ultimo aggiornamento il" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.slip_layout +msgid "Logo" +msgstr "Logo" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__message_main_attachment_id +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__message_main_attachment_id +msgid "Main Attachment" +msgstr "Allegato principale" + +#. module: l10n_it_riba +#: model:ir.model,name:l10n_it_riba.model_riba_past_due +msgid "Manage Past Due RiBas" +msgstr "Gestione RiBa insolute" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_slip_form +msgid "Mark All as Settled" +msgstr "Segna tutte come pagate" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_slip_form +msgid "Mark as Accepted" +msgstr "Segna come accettata" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_slip_form +msgid "Mark as Credited" +msgstr "Segna come accreditata" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_detail_riba_tree +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_slip_form +msgid "Mark as Past Due" +msgstr "Segna come insoluta" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_slip_form +msgid "Mark as Settled" +msgstr "Segna come pagata" + +#. module: l10n_it_riba +#: model:ir.model,name:l10n_it_riba.model_ir_ui_menu +msgid "Menu" +msgstr "Menù" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__message_has_error +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__message_has_error +msgid "Message Delivery error" +msgstr "Errore di consegna messaggio" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__message_ids +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__message_ids +msgid "Messages" +msgstr "Messaggi" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_slip_line_form +msgid "Move Line" +msgstr "Riga movimento" + +#. module: l10n_it_riba +#. odoo-python +#: code:addons/l10n_it_riba/wizard/wizard_riba_file_export.py:0 +#, python-format +msgid "No IBAN or ABI/CAB specified for " +msgstr "Nessun IBAN o ABI/CAB specificato per " + +#. module: l10n_it_riba +#. odoo-python +#: code:addons/l10n_it_riba/wizard/wizard_riba_file_export.py:0 +#, python-format +msgid "No IBAN specified." +msgstr "Nessun IBAN specificato." + +#. module: l10n_it_riba +#. odoo-python +#: code:addons/l10n_it_riba/wizard/wizard_riba_file_export.py:0 +#, python-format +msgid "No SIA Code specified for " +msgstr "Nessun codice SIA specificato per " + +#. module: l10n_it_riba +#. odoo-python +#: code:addons/l10n_it_riba/wizard/wizard_riba_file_export.py:0 +#: code:addons/l10n_it_riba/wizard/wizard_riba_file_export.py:0 +#, python-format +msgid "No VAT or Fiscal Code specified for " +msgstr "Nessuna partita IVA o codice fiscale specificato per " + +#. module: l10n_it_riba +#. odoo-python +#: code:addons/l10n_it_riba/wizard/wizard_credit.py:0 +#: code:addons/l10n_it_riba/wizard/wizard_credit.py:0 +#: code:addons/l10n_it_riba/wizard/wizard_past_due.py:0 +#: code:addons/l10n_it_riba/wizard/wizard_past_due.py:0 +#, python-format +msgid "No active ID found." +msgstr "Nessun ID attivo trovato." + +#. module: l10n_it_riba +#. odoo-python +#: code:addons/l10n_it_riba/wizard/wizard_riba_issue.py:0 +#, python-format +msgid "No bank has been specified for invoice %s" +msgstr "Nessuna banca specificata per la fattura %s" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__sequence +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.slip_qweb +msgid "Number" +msgstr "Numero" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__message_needaction_counter +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__message_needaction_counter +msgid "Number of Actions" +msgstr "Numero di azioni" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__message_has_error_counter +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__message_has_error_counter +msgid "Number of errors" +msgstr "Numero di errori" + +#. module: l10n_it_riba +#: model:ir.model.fields,help:l10n_it_riba.field_riba_slip__message_needaction_counter +#: model:ir.model.fields,help:l10n_it_riba.field_riba_slip_line__message_needaction_counter +msgid "Number of messages requiring action" +msgstr "Numero di messaggi che richiedono un'azione" + +#. module: l10n_it_riba +#: model:ir.model.fields,help:l10n_it_riba.field_riba_slip__message_has_error_counter +#: model:ir.model.fields,help:l10n_it_riba.field_riba_slip_line__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "Numero di messaggi con errore di consegna" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_slip_form +msgid "Other Info" +msgstr "Altre informazioni" + +#. module: l10n_it_riba +#: model:ir.model.fields.selection,name:l10n_it_riba.selection__riba_slip__state__paid +#: model:ir.model.fields.selection,name:l10n_it_riba.selection__riba_slip_line__state__paid +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_detail_riba_filter +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_slip_riba_filter +msgid "Paid" +msgstr "Pagata" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_credit__bank_amount +msgid "Paid Amount" +msgstr "Importo pagato" + +#. module: l10n_it_riba +#: model:ir.model,name:l10n_it_riba.model_account_partial_reconcile +msgid "Partial Reconcile" +msgstr "Riconciliazione parziale" + +#. module: l10n_it_riba +#: model:ir.model.fields.selection,name:l10n_it_riba.selection__riba_slip__state__past_due +#: model:ir.model.fields.selection,name:l10n_it_riba.selection__riba_slip_line__state__past_due +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.invoice_form +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.invoice_tree +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.riba_filter +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_detail_riba_filter +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_configuration_form +msgid "Past Due" +msgstr "Insoluta" + +#. module: l10n_it_riba +#. odoo-python +#: code:addons/l10n_it_riba/wizard/wizard_past_due.py:0 +#, python-format +msgid "Past Due Bills" +msgstr "Effetti insoluti" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_configuration__overdue_effects_account_id +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_past_due__overdue_effects_account_id +msgid "Past Due Bills Account" +msgstr "Conto effetti insoluti" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_past_due__overdue_effects_amount +msgid "Past Due Bills Amount" +msgstr "Importo effetti insoluti" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__date_past_due +msgid "Past Due Date" +msgstr "Data insoluto" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__past_due_move_ids +msgid "Past Due Entries" +msgstr "Registrazioni insoluto" + +#. module: l10n_it_riba +#. odoo-python +#: code:addons/l10n_it_riba/wizard/wizard_past_due.py:0 +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__past_due_move_id +#, python-format +msgid "Past Due Entry" +msgstr "Registrazione insoluto" + +#. module: l10n_it_riba +#: model:ir.actions.act_window,name:l10n_it_riba.action_invoice_tree1 +#: model:ir.model.fields,field_description:l10n_it_riba.field_account_move_line__past_due_invoice_ids +#: model:ir.ui.menu,name:l10n_it_riba.menu_invoices +msgid "Past Due Invoices" +msgstr "Fatture insolute" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_configuration__past_due_journal_id +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_past_due__past_due_journal_id +msgid "Past Due Journal" +msgstr "Registro insoluti" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_account_bank_statement_line__past_due_move_line_ids +#: model:ir.model.fields,field_description:l10n_it_riba.field_account_move__past_due_move_line_ids +#: model:ir.model.fields,field_description:l10n_it_riba.field_account_payment__past_due_move_line_ids +msgid "Past Due Journal Items" +msgstr "Movimenti contabili insoluto" + +#. module: l10n_it_riba +#. odoo-python +#: code:addons/l10n_it_riba/wizard/wizard_past_due.py:0 +#, python-format +msgid "Past Due RiBa %(name)s - Line %(sequence)s" +msgstr "RiBa insoluta %(name)s - Riga %(sequence)s" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_account_bank_statement_line__riba_past_due_ids +#: model:ir.model.fields,field_description:l10n_it_riba.field_account_move__riba_past_due_ids +#: model:ir.model.fields,field_description:l10n_it_riba.field_account_payment__riba_past_due_ids +msgid "Past Due RiBa Slips" +msgstr "Distinte RiBa insolute" + +#. module: l10n_it_riba +#: model:ir.actions.act_window,name:l10n_it_riba.riba_past_due_action +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.riba_past_due +msgid "Past Due RiBas" +msgstr "RiBa insolute" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_slip_form +msgid "Past Dues" +msgstr "Insoluti" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__date_paid +msgid "Payment Date" +msgstr "Data pagamento" + +#. module: l10n_it_riba +#: model:ir.model,name:l10n_it_riba.model_account_payment_term +msgid "Payment Terms" +msgstr "Termini di pagamento" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__payment_ids +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__payment_ids +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_slip_form +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_slip_line_form +msgid "Payments" +msgstr "Pagamenti" + +#. module: l10n_it_riba +#. odoo-python +#: code:addons/l10n_it_riba/models/riba.py:0 +#, python-format +msgid "Please define a Settlement Journal." +msgstr "Definire un registro pagamenti." + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_presentation_riba_issue__presentation_amount +msgid "Presentation Amount" +msgstr "Importo presentazione" + +#. module: l10n_it_riba +#: model:ir.actions.act_window,name:l10n_it_riba.riba_presentation_action +#: model:ir.ui.menu,name:l10n_it_riba.menu_presentation_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.wizard_presentation_riba +msgid "Presentation Riba" +msgstr "Presentazione RiBa" + +#. module: l10n_it_riba +#: model:ir.model,name:l10n_it_riba.model_presentation_riba_issue +msgid "Presentation Riba Issue" +msgstr "Emissione presentazione RiBa" + +#. module: l10n_it_riba +#: model:ir.actions.report,name:l10n_it_riba.print_slip_qweb +msgid "Print Slip" +msgstr "Stampa distinta" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_account_config_settings_riba +msgid "Product" +msgstr "Prodotto" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_account_config_settings_riba +msgid "Product used as Service for RiBa Collection Fees" +msgstr "Prodotto usato come servizio per le spese di incasso RiBa" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_configuration__protest_charge_account_id +msgid "Protest Fee Account" +msgstr "Conto spese di protesto" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.riba_filter +msgid "Reconciled" +msgstr "Riconciliata" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__name +msgid "Reference" +msgstr "Riferimento" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__registration_date +msgid "Registration Date" +msgstr "Data registrazione" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_slip_form +msgid "Reset to Draft" +msgstr "Reimposta a bozza" + +#. module: l10n_it_riba +#. odoo-python +#: code:addons/l10n_it_riba/wizard/wizard_past_due.py:0 +#: model:ir.model.fields,field_description:l10n_it_riba.field_account_move_line__riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_account_payment_term__riba +#: model:ir.ui.menu,name:l10n_it_riba.menu_riba +#, python-format +msgid "RiBa" +msgstr "RiBa" + +#. module: l10n_it_riba +#: model:ir.actions.act_window,name:l10n_it_riba.action_riba_configuration +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_configuration_form +msgid "RiBa - Configuration" +msgstr "RiBa - Configurazione" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_configuration__credit_account_id +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_credit__credit_account_id +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_past_due__riba_bank_account_id +msgid "RiBa Account" +msgstr "Conto RiBa" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_past_due__riba_bank_amount +msgid "RiBa Amount" +msgstr "Importo RiBa" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_account_bank_statement_line__riba_partner_bank_id +#: model:ir.model.fields,field_description:l10n_it_riba.field_account_move__riba_partner_bank_id +#: model:ir.model.fields,field_description:l10n_it_riba.field_account_payment__riba_partner_bank_id +msgid "RiBa Bank Account" +msgstr "Conto bancario RiBa" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_account_payment_term__riba_payment_cost +msgid "RiBa Collection Fees" +msgstr "Spese di incasso RiBa" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_account_move_line__due_cost_line +msgid "RiBa Collection Fees Line" +msgstr "Riga spese di incasso RiBa" + +#. module: l10n_it_riba +#: model:ir.ui.menu,name:l10n_it_riba.menu_riba_configuration +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_account_config_settings_riba +msgid "RiBa Configuration" +msgstr "Configurazione RiBa" + +#. module: l10n_it_riba +#: model:ir.actions.act_window,name:l10n_it_riba.riba_credit_action +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.riba_credit +msgid "RiBa Credit" +msgstr "Accredito banca" + +#. module: l10n_it_riba +#. odoo-python +#: code:addons/l10n_it_riba/wizard/wizard_credit.py:0 +#, python-format +msgid "RiBa Credit %s" +msgstr "Accredito RiBa %s" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_account_move_line__slip_line_ids +msgid "RiBa Detail" +msgstr "Dettaglio RiBa" + +#. module: l10n_it_riba +#: model:ir.model,name:l10n_it_riba.model_riba_slip_line +#: model:ir.model,name:l10n_it_riba.model_riba_slip_move_line +msgid "RiBa Details" +msgstr "Dettagli RiBa" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__line_ids +msgid "RiBa Due Dates" +msgstr "Scadenze RiBa" + +#. module: l10n_it_riba +#: model:ir.model,name:l10n_it_riba.model_riba_file_export +msgid "RiBa File Export Wizard" +msgstr "Procedura esportazione file RiBa" + +#. module: l10n_it_riba +#: model:ir.actions.act_window,name:l10n_it_riba.action_riba_to_issue +#: model:ir.model,name:l10n_it_riba.model_riba_issue +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.riba_issue_view +msgid "RiBa Issue" +msgstr "Emissione RiBa" + +#. module: l10n_it_riba +#: model:ir.actions.act_window,name:l10n_it_riba.slip_riba_action +#: model:ir.model,name:l10n_it_riba.model_riba_slip +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_slip_form +msgid "RiBa Slip" +msgstr "Distinta RiBa" + +#. module: l10n_it_riba +#: model:ir.actions.act_window,name:l10n_it_riba.detail_riba_action +msgid "RiBa Slip Detail" +msgstr "Dettaglio distinta RiBa" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.slip_qweb +msgid "RiBa Slip No." +msgstr "Distinta RiBa n°" + +#. module: l10n_it_riba +#: model:ir.model,name:l10n_it_riba.model_report_l10n_it_riba_slip_qweb +msgid "RiBa Slip Report" +msgstr "Rendiconto distinta RiBa" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_detail_riba_filter +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_slip_riba_filter +msgid "RiBa Slips" +msgstr "Distinte RiBa" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.riba_filter +msgid "RiBa To Issue" +msgstr "RiBa da emettere" + +#. module: l10n_it_riba +#: model:ir.model.fields,help:l10n_it_riba.field_riba_slip__config_id +#: model:ir.model.fields,help:l10n_it_riba.field_riba_slip_line__config_id +msgid "RiBa configuration to be used." +msgstr "Configurazione RiBa da utilizzare." + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_account_setup_bank_manual_config__codice_sia +#: model:ir.model.fields,field_description:l10n_it_riba.field_res_partner_bank__codice_sia +msgid "SIA Code" +msgstr "Codice SIA" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__message_has_sms_error +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__message_has_sms_error +msgid "SMS Delivery error" +msgstr "Errore consegna SMS" + +#. module: l10n_it_riba +#. odoo-python +#: code:addons/l10n_it_riba/models/account.py:0 +#, python-format +msgid "Set a Service for Collection Fees in Company Config." +msgstr "" +"Impostare un servizio per le spese di incasso nella configurazione " +"dell'azienda." + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_configuration_form +msgid "Settlement" +msgstr "Pagamento" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_configuration__settlement_journal_id +msgid "Settlement Journal" +msgstr "Registro pagamenti" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.riba_credit +msgid "Skip and Confirm Credit" +msgstr "Salta e conferma accredito" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.riba_past_due +msgid "Skip and Confirm Past Due" +msgstr "Salta e conferma insoluto" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__slip_id +msgid "Slip" +msgstr "Distinta" + +#. module: l10n_it_riba +#. odoo-python +#: code:addons/l10n_it_riba/models/riba.py:0 +#, python-format +msgid "" +"Slip %(name)s is in state '%(state)s'. You can only delete documents in " +"state 'Draft' or 'Canceled'." +msgstr "" +"La distinta %(name)s si trova nello stato «%(state)s». È possibile eliminare " +"solo documenti in stato «Bozza» o «Annullata»." + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_move_line__riba_line_id +msgid "Slip Line" +msgstr "Riga distinta" + +#. module: l10n_it_riba +#: model:ir.ui.menu,name:l10n_it_riba.menu_riba_distinte +msgid "Slips" +msgstr "Distinte" + +#. module: l10n_it_riba +#: model:ir.ui.menu,name:l10n_it_riba.menu_riba_detail +msgid "Slips Detail" +msgstr "Dettaglio distinte" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_file_export__state +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__state +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__state +msgid "State" +msgstr "Stato" + +#. module: l10n_it_riba +#: model:ir.model.fields.selection,name:l10n_it_riba.selection__riba_configuration__type__sbf +msgid "Subject To Collection" +msgstr "Salvo buon fine" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.slip_layout +msgid "Tel:" +msgstr "Tel:" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.riba_issue_view +msgid "This wizard will generate the RiBa slip" +msgstr "Questa procedura genera la distinta RiBa" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.riba_past_due +msgid "" +"This wizard will generate the journal entry related to an past due RiBa" +msgstr "" +"Questa procedura genera la registrazione contabile relativa a una RiBa " +"insoluta" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.riba_credit +msgid "" +"This wizard will generate the journal entry related to credit received from " +"the bank" +msgstr "" +"Questa procedura genera la registrazione contabile relativa all'accredito " +"ricevuto dalla banca" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.riba_filter +msgid "To Reconcile" +msgstr "Da riconciliare" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_to_issue_tree +msgid "Total Amount" +msgstr "Importo totale" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__type +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__type +msgid "Type" +msgstr "Tipo" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__user_id +msgid "User" +msgstr "Utente" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__website_message_ids +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__website_message_ids +msgid "Website Messages" +msgstr "Messaggi sito web" + +#. module: l10n_it_riba +#: model:ir.model.fields,help:l10n_it_riba.field_riba_slip__website_message_ids +#: model:ir.model.fields,help:l10n_it_riba.field_riba_slip_line__website_message_ids +msgid "Website communication history" +msgstr "Cronologia comunicazioni sito web" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_past_due__bank_amount +msgid "Withdrawn Amount" +msgstr "Importo prelevato" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.riba_past_due +msgid "" +"You can also skip this step and set the line status to 'Past Due' anyway" +msgstr "" +"È anche possibile saltare questo passo e impostare ugualmente lo stato a " +"«Insoluta»" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.riba_credit +msgid "" +"You can also skip this step and set the slip status to 'Credited' anyway" +msgstr "" +"È anche possibile saltare questo passo e impostare ugualmente lo stato ad " +"«Accreditata»" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.slip_qweb +msgid "of" +msgstr "del" + +#. module: l10n_it_riba +#. odoo-python +#: code:addons/l10n_it_riba/models/account.py:0 +#, python-format +msgid "{line_name} for {month}-{year}" +msgstr "{line_name} per {month}-{year}" diff --git a/l10n_it_riba/i18n/l10n_it_riba.pot b/l10n_it_riba/i18n/l10n_it_riba.pot new file mode 100644 index 000000000000..878c3ce83642 --- /dev/null +++ b/l10n_it_riba/i18n/l10n_it_riba.pot @@ -0,0 +1,1373 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * l10n_it_riba +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-09-28 10:27+0000\n" +"PO-Revision-Date: 2023-09-28 10:27+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_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_account_config_settings_riba +msgid "" +"RiBa Collection Fees\n" +" " +msgstr "" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.slip_qweb +msgid "Total" +msgstr "" + +#. module: l10n_it_riba +#. odoo-python +#: code:addons/l10n-italy/l10n_it_riba/wizard/wizard_credit.py:0 +#: code:addons/l10n-italy/l10n_it_riba/wizard/wizard_past_due.py:0 +#: code:addons/l10n_it_riba/wizard/wizard_credit.py:0 +#: code:addons/l10n_it_riba/wizard/wizard_past_due.py:0 +#, python-format +msgid "A/C Bank" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_configuration__bank_account_id +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_credit__bank_account_id +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_past_due__bank_account_id +msgid "A/C Bank Account" +msgstr "" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_configuration_form +msgid "Acceptance" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_configuration__acceptance_account_id +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__acceptance_account_id +msgid "Acceptance Account" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__date_accepted +msgid "Acceptance Date" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__acceptance_move_ids +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_slip_form +msgid "Acceptance Entries" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__acceptance_move_id +msgid "Acceptance Entry" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_configuration__acceptance_journal_id +msgid "Acceptance Journal" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields.selection,name:l10n_it_riba.selection__riba_slip__state__accepted +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_detail_riba_filter +msgid "Accepted" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,help:l10n_it_riba.field_riba_configuration__credit_account_id +msgid "Account used when RiBa amount is credited by the bank." +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,help:l10n_it_riba.field_riba_configuration__acceptance_account_id +msgid "Account used when RiBa is accepted by the bank." +msgstr "" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_slip_form +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_slip_line_form +msgid "Accounting" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__message_needaction +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__message_needaction +msgid "Action Needed" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields.selection,name:l10n_it_riba.selection__riba_configuration__type__incasso +msgid "After Collection" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__amount +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_move_line__amount +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.slip_qweb +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_detail_riba_tree +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_slip_form +msgid "Amount" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__message_attachment_count +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__message_attachment_count +msgid "Attachment Count" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model,name:l10n_it_riba.model_res_bank +msgid "Bank" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_configuration__bank_id +msgid "Bank Account" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,help:l10n_it_riba.field_account_bank_statement_line__riba_partner_bank_id +#: model:ir.model.fields,help:l10n_it_riba.field_account_move__riba_partner_bank_id +#: model:ir.model.fields,help:l10n_it_riba.field_account_payment__riba_partner_bank_id +msgid "" +"Bank Account Number to which the RiBa will be debited. If not set, first " +"bank in partner will be used." +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model,name:l10n_it_riba.model_res_partner_bank +msgid "Bank Accounts" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model,name:l10n_it_riba.model_riba_credit +msgid "Bank Credit" +msgstr "" + +#. module: l10n_it_riba +#. odoo-python +#: code:addons/l10n-italy/l10n_it_riba/wizard/wizard_credit.py:0 +#: code:addons/l10n-italy/l10n_it_riba/wizard/wizard_past_due.py:0 +#: code:addons/l10n_it_riba/wizard/wizard_credit.py:0 +#: code:addons/l10n_it_riba/wizard/wizard_past_due.py:0 +#, python-format +msgid "Bank Fee" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_configuration__bank_expense_account_id +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_credit__bank_expense_account_id +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_past_due__bank_expense_account_id +msgid "Bank Fees Account" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model,name:l10n_it_riba.model_account_bank_statement_line +msgid "Bank Statement Line" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,help:l10n_it_riba.field_riba_configuration__bank_id +msgid "Bank account used for RiBa issuing." +msgstr "" + +#. module: l10n_it_riba +#. odoo-python +#: code:addons/l10n-italy/l10n_it_riba/wizard/wizard_past_due.py:0 +#: code:addons/l10n_it_riba/wizard/wizard_past_due.py:0 +#, python-format +msgid "Bills" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_past_due__effects_account_id +msgid "Bills Account" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_past_due__effects_amount +msgid "Bills Amount" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__cig +msgid "CIG" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__cup +msgid "CUP" +msgstr "" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.riba_credit +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.riba_issue_view +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.riba_past_due +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_slip_form +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.wizard_presentation_riba +msgid "Cancel" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields.selection,name:l10n_it_riba.selection__riba_slip__state__cancel +#: model:ir.model.fields.selection,name:l10n_it_riba.selection__riba_slip_line__state__cancel +msgid "Canceled" +msgstr "" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.wizard_riba_file_export +msgid "Close" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_res_company__due_cost_service_id +msgid "Collection Fees Service" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,help:l10n_it_riba.field_account_payment_term__riba_payment_cost +msgid "" +"Collection fees amount. If different from 0, for each payment deadline an " +"invoice line will be added to invoice, with this amount." +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model,name:l10n_it_riba.model_res_company +msgid "Companies" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_configuration__company_id +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__company_id +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__company_id +msgid "Company" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model,name:l10n_it_riba.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_issue__configuration_id +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__config_id +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__config_id +msgid "Configuration" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model,name:l10n_it_riba.model_riba_configuration +msgid "Configuration parameters for RiBa" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields.selection,name:l10n_it_riba.selection__riba_slip_line__state__confirmed +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_detail_riba_filter +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_slip_riba_filter +msgid "Confirmed" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model,name:l10n_it_riba.model_res_partner +msgid "Contact" +msgstr "" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.riba_credit +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.riba_issue_view +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.riba_past_due +msgid "Create" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_presentation_riba_issue__create_uid +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_configuration__create_uid +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_credit__create_uid +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_file_export__create_uid +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_issue__create_uid +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_past_due__create_uid +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__create_uid +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__create_uid +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_move_line__create_uid +msgid "Created by" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_presentation_riba_issue__create_date +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_configuration__create_date +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_credit__create_date +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_file_export__create_date +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_issue__create_date +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_past_due__create_date +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__create_date +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__create_date +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_move_line__create_date +msgid "Created on" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__date_created +msgid "Creation Date" +msgstr "" + +#. module: l10n_it_riba +#. odoo-python +#: code:addons/l10n-italy/l10n_it_riba/wizard/wizard_credit.py:0 +#: code:addons/l10n_it_riba/wizard/wizard_credit.py:0 +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_configuration_form +#, python-format +msgid "Credit" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_credit__credit_amount +msgid "Credit Amount" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__date_credited +msgid "Credit Date" +msgstr "" + +#. module: l10n_it_riba +#. odoo-python +#: code:addons/l10n-italy/l10n_it_riba/wizard/wizard_credit.py:0 +#: code:addons/l10n_it_riba/wizard/wizard_credit.py:0 +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__credit_move_id +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_slip_form +#, python-format +msgid "Credit Entry" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_configuration__credit_journal_id +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_credit__credit_journal_id +msgid "Credit Journal" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_move_line__move_line_id +msgid "Credit Move Line" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__move_line_ids +msgid "Credit Move Lines" +msgstr "" + +#. module: l10n_it_riba +#. odoo-python +#: code:addons/l10n-italy/l10n_it_riba/models/riba.py:0 +#: code:addons/l10n_it_riba/models/riba.py:0 +#, python-format +msgid "Credit date must be greater or equal to acceptance date." +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields.selection,name:l10n_it_riba.selection__riba_slip__state__credited +#: model:ir.model.fields.selection,name:l10n_it_riba.selection__riba_slip_line__state__credited +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_detail_riba_filter +msgid "Credited" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_account_bank_statement_line__riba_credited_ids +#: model:ir.model.fields,field_description:l10n_it_riba.field_account_move__riba_credited_ids +#: model:ir.model.fields,field_description:l10n_it_riba.field_account_payment__riba_credited_ids +msgid "Credited RiBa Slips" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_presentation_riba_issue__currency_id +msgid "Currency" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__partner_id +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.slip_qweb +msgid "Customer" +msgstr "" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_to_issue_tree +msgid "Debit Total" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__bank_id +msgid "Debtor Bank" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_res_config_settings__due_cost_service_id +msgid "Default Collection Fees Service" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,help:l10n_it_riba.field_res_config_settings__due_cost_service_id +msgid "Default Service for RiBa Collection Fees on invoice." +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_configuration__name +msgid "Description" +msgstr "" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_slip_line_form +msgid "Detail" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_presentation_riba_issue__display_name +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_configuration__display_name +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_credit__display_name +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_file_export__display_name +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_issue__display_name +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_past_due__display_name +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__display_name +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__display_name +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_move_line__display_name +msgid "Display Name" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields.selection,name:l10n_it_riba.selection__riba_slip__state__draft +#: model:ir.model.fields.selection,name:l10n_it_riba.selection__riba_slip_line__state__draft +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_detail_riba_filter +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_slip_riba_filter +msgid "Draft" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__due_date +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.slip_qweb +msgid "Due Date" +msgstr "" + +#. module: l10n_it_riba +#. odoo-python +#: code:addons/l10n-italy/l10n_it_riba/wizard/wizard_credit.py:0 +#: code:addons/l10n-italy/l10n_it_riba/wizard/wizard_past_due.py:0 +#: code:addons/l10n_it_riba/wizard/wizard_credit.py:0 +#: code:addons/l10n_it_riba/wizard/wizard_past_due.py:0 +#, python-format +msgid "Every account is mandatory." +msgstr "" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.wizard_riba_file_export +msgid "Export" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.actions.server,name:l10n_it_riba.action_wizard_riba_file_export +msgid "Export RiBa" +msgstr "" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.wizard_riba_file_export +msgid "Export RiBa file" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_credit__expense_amount +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_past_due__expense_amount +msgid "Fees Amount" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_file_export__riba_txt +msgid "File" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_file_export__file_name +msgid "File Name" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__message_follower_ids +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__message_follower_ids +msgid "Followers" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__message_partner_ids +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__message_partner_ids +msgid "Followers (Partners)" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_res_bank__banca_estera +msgid "Foreign Bank" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model,name:l10n_it_riba.model_account_full_reconcile +msgid "Full Reconcile" +msgstr "" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_slip_form +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_slip_line_form +msgid "General" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_res_partner__group_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_res_users__group_riba +msgid "Group RiBa" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,help:l10n_it_riba.field_res_partner__group_riba +#: model:ir.model.fields,help:l10n_it_riba.field_res_users__group_riba +msgid "Group RiBa by customer while issuing." +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__has_message +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__has_message +msgid "Has Message" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_account_move_line__iban +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__iban +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.slip_qweb +msgid "IBAN" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_presentation_riba_issue__id +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_configuration__id +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_credit__id +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_file_export__id +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_issue__id +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_past_due__id +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__id +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__id +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_move_line__id +msgid "ID" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,help:l10n_it_riba.field_account_setup_bank_manual_config__codice_sia +#: model:ir.model.fields,help:l10n_it_riba.field_res_partner_bank__codice_sia +msgid "Identification Code of the Company in the Interbank System." +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,help:l10n_it_riba.field_riba_slip__message_needaction +#: model:ir.model.fields,help:l10n_it_riba.field_riba_slip_line__message_needaction +msgid "If checked, new messages require your attention." +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,help:l10n_it_riba.field_riba_slip__message_has_error +#: model:ir.model.fields,help:l10n_it_riba.field_riba_slip__message_has_sms_error +#: model:ir.model.fields,help:l10n_it_riba.field_riba_slip_line__message_has_error +#: model:ir.model.fields,help:l10n_it_riba.field_riba_slip_line__message_has_sms_error +msgid "If checked, some messages have a delivery error." +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__invoice_date +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.slip_qweb +msgid "Invoice Date" +msgstr "" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_slip_line_form +msgid "Invoice Entries" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__invoice_number +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.slip_qweb +msgid "Invoice Number" +msgstr "" + +#. module: l10n_it_riba +#. odoo-python +#: code:addons/l10n-italy/l10n_it_riba/models/account.py:0 +#: code:addons/l10n_it_riba/models/account.py:0 +#, python-format +msgid "Invoice is linked to RiBa slip No. {riba}" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__message_is_follower +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__message_is_follower +msgid "Is Follower" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_account_bank_statement_line__is_riba_payment +#: model:ir.model.fields,field_description:l10n_it_riba.field_account_move__is_riba_payment +#: model:ir.model.fields,field_description:l10n_it_riba.field_account_payment__is_riba_payment +msgid "Is RiBa Payment" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_account_bank_statement_line__is_past_due +#: model:ir.model.fields,field_description:l10n_it_riba.field_account_move__is_past_due +#: model:ir.model.fields,field_description:l10n_it_riba.field_account_payment__is_past_due +msgid "Is a past due invoice" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.ui.menu,name:l10n_it_riba.menu_riba_to_issue +msgid "Issue" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_configuration__type +msgid "Issue Mode" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.actions.server,name:l10n_it_riba.riba_issue_action_server +msgid "Issue RiBa" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model,name:l10n_it_riba.model_account_move +msgid "Journal Entry" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model,name:l10n_it_riba.model_account_move_line +msgid "Journal Item" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,help:l10n_it_riba.field_riba_configuration__credit_journal_id +msgid "Journal used when RiBa amount is credited by the bank." +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,help:l10n_it_riba.field_riba_configuration__acceptance_journal_id +msgid "Journal used when RiBa is accepted by the bank." +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,help:l10n_it_riba.field_riba_configuration__past_due_journal_id +msgid "Journal used when RiBa is past due." +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,help:l10n_it_riba.field_riba_configuration__settlement_journal_id +msgid "Journal used when customers finally pay the invoice to bank." +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,help:l10n_it_riba.field_riba_slip__registration_date +msgid "Keep empty to use the current date." +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_presentation_riba_issue____last_update +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_configuration____last_update +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_credit____last_update +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_file_export____last_update +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_issue____last_update +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_past_due____last_update +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip____last_update +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line____last_update +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_move_line____last_update +msgid "Last Modified on" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_presentation_riba_issue__write_uid +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_configuration__write_uid +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_credit__write_uid +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_file_export__write_uid +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_issue__write_uid +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_past_due__write_uid +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__write_uid +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__write_uid +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_move_line__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_presentation_riba_issue__write_date +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_configuration__write_date +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_credit__write_date +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_file_export__write_date +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_issue__write_date +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_past_due__write_date +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__write_date +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__write_date +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_move_line__write_date +msgid "Last Updated on" +msgstr "" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.slip_layout +msgid "Logo" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__message_main_attachment_id +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__message_main_attachment_id +msgid "Main Attachment" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model,name:l10n_it_riba.model_riba_past_due +msgid "Manage Past Due RiBas" +msgstr "" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_slip_form +msgid "Mark All as Settled" +msgstr "" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_slip_form +msgid "Mark as Accepted" +msgstr "" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_slip_form +msgid "Mark as Credited" +msgstr "" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_detail_riba_tree +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_slip_form +msgid "Mark as Past Due" +msgstr "" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_slip_form +msgid "Mark as Settled" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model,name:l10n_it_riba.model_ir_ui_menu +msgid "Menu" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__message_has_error +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__message_has_error +msgid "Message Delivery error" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__message_ids +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__message_ids +msgid "Messages" +msgstr "" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_slip_line_form +msgid "Move Line" +msgstr "" + +#. module: l10n_it_riba +#. odoo-python +#: code:addons/l10n-italy/l10n_it_riba/wizard/wizard_riba_file_export.py:0 +#: code:addons/l10n_it_riba/wizard/wizard_riba_file_export.py:0 +#, python-format +msgid "No IBAN or ABI/CAB specified for " +msgstr "" + +#. module: l10n_it_riba +#. odoo-python +#: code:addons/l10n-italy/l10n_it_riba/wizard/wizard_riba_file_export.py:0 +#: code:addons/l10n_it_riba/wizard/wizard_riba_file_export.py:0 +#, python-format +msgid "No IBAN specified." +msgstr "" + +#. module: l10n_it_riba +#. odoo-python +#: code:addons/l10n-italy/l10n_it_riba/wizard/wizard_riba_file_export.py:0 +#: code:addons/l10n_it_riba/wizard/wizard_riba_file_export.py:0 +#, python-format +msgid "No SIA Code specified for " +msgstr "" + +#. module: l10n_it_riba +#. odoo-python +#: code:addons/l10n-italy/l10n_it_riba/wizard/wizard_riba_file_export.py:0 +#: code:addons/l10n-italy/l10n_it_riba/wizard/wizard_riba_file_export.py:0 +#: code:addons/l10n_it_riba/wizard/wizard_riba_file_export.py:0 +#: code:addons/l10n_it_riba/wizard/wizard_riba_file_export.py:0 +#, python-format +msgid "No VAT or Fiscal Code specified for " +msgstr "" + +#. module: l10n_it_riba +#. odoo-python +#: code:addons/l10n-italy/l10n_it_riba/wizard/wizard_credit.py:0 +#: code:addons/l10n-italy/l10n_it_riba/wizard/wizard_credit.py:0 +#: code:addons/l10n-italy/l10n_it_riba/wizard/wizard_past_due.py:0 +#: code:addons/l10n-italy/l10n_it_riba/wizard/wizard_past_due.py:0 +#: code:addons/l10n_it_riba/wizard/wizard_credit.py:0 +#: code:addons/l10n_it_riba/wizard/wizard_credit.py:0 +#: code:addons/l10n_it_riba/wizard/wizard_past_due.py:0 +#: code:addons/l10n_it_riba/wizard/wizard_past_due.py:0 +#, python-format +msgid "No active ID found." +msgstr "" + +#. module: l10n_it_riba +#. odoo-python +#: code:addons/l10n-italy/l10n_it_riba/wizard/wizard_riba_issue.py:0 +#: code:addons/l10n_it_riba/wizard/wizard_riba_issue.py:0 +#, python-format +msgid "No bank has been specified for invoice %s" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__sequence +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.slip_qweb +msgid "Number" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__message_needaction_counter +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__message_needaction_counter +msgid "Number of Actions" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__message_has_error_counter +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__message_has_error_counter +msgid "Number of errors" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,help:l10n_it_riba.field_riba_slip__message_needaction_counter +#: model:ir.model.fields,help:l10n_it_riba.field_riba_slip_line__message_needaction_counter +msgid "Number of messages requiring action" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,help:l10n_it_riba.field_riba_slip__message_has_error_counter +#: model:ir.model.fields,help:l10n_it_riba.field_riba_slip_line__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_slip_form +msgid "Other Info" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields.selection,name:l10n_it_riba.selection__riba_slip__state__paid +#: model:ir.model.fields.selection,name:l10n_it_riba.selection__riba_slip_line__state__paid +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_detail_riba_filter +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_slip_riba_filter +msgid "Paid" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_credit__bank_amount +msgid "Paid Amount" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model,name:l10n_it_riba.model_account_partial_reconcile +msgid "Partial Reconcile" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields.selection,name:l10n_it_riba.selection__riba_slip__state__past_due +#: model:ir.model.fields.selection,name:l10n_it_riba.selection__riba_slip_line__state__past_due +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.invoice_form +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.invoice_tree +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.riba_filter +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_detail_riba_filter +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_configuration_form +msgid "Past Due" +msgstr "" + +#. module: l10n_it_riba +#. odoo-python +#: code:addons/l10n-italy/l10n_it_riba/wizard/wizard_past_due.py:0 +#: code:addons/l10n_it_riba/wizard/wizard_past_due.py:0 +#, python-format +msgid "Past Due Bills" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_configuration__overdue_effects_account_id +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_past_due__overdue_effects_account_id +msgid "Past Due Bills Account" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_past_due__overdue_effects_amount +msgid "Past Due Bills Amount" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__date_past_due +msgid "Past Due Date" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__past_due_move_ids +msgid "Past Due Entries" +msgstr "" + +#. module: l10n_it_riba +#. odoo-python +#: code:addons/l10n-italy/l10n_it_riba/wizard/wizard_past_due.py:0 +#: code:addons/l10n_it_riba/wizard/wizard_past_due.py:0 +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__past_due_move_id +#, python-format +msgid "Past Due Entry" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.actions.act_window,name:l10n_it_riba.action_invoice_tree1 +#: model:ir.model.fields,field_description:l10n_it_riba.field_account_move_line__past_due_invoice_ids +#: model:ir.ui.menu,name:l10n_it_riba.menu_invoices +msgid "Past Due Invoices" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_configuration__past_due_journal_id +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_past_due__past_due_journal_id +msgid "Past Due Journal" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_account_bank_statement_line__past_due_move_line_ids +#: model:ir.model.fields,field_description:l10n_it_riba.field_account_move__past_due_move_line_ids +#: model:ir.model.fields,field_description:l10n_it_riba.field_account_payment__past_due_move_line_ids +msgid "Past Due Journal Items" +msgstr "" + +#. module: l10n_it_riba +#. odoo-python +#: code:addons/l10n-italy/l10n_it_riba/wizard/wizard_past_due.py:0 +#: code:addons/l10n_it_riba/wizard/wizard_past_due.py:0 +#, python-format +msgid "Past Due RiBa %(name)s - Line %(sequence)s" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_account_bank_statement_line__riba_past_due_ids +#: model:ir.model.fields,field_description:l10n_it_riba.field_account_move__riba_past_due_ids +#: model:ir.model.fields,field_description:l10n_it_riba.field_account_payment__riba_past_due_ids +msgid "Past Due RiBa Slips" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.actions.act_window,name:l10n_it_riba.riba_past_due_action +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.riba_past_due +msgid "Past Due RiBas" +msgstr "" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_slip_form +msgid "Past Dues" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__date_paid +msgid "Payment Date" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model,name:l10n_it_riba.model_account_payment_term +msgid "Payment Terms" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__payment_ids +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__payment_ids +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_slip_form +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_slip_line_form +msgid "Payments" +msgstr "" + +#. module: l10n_it_riba +#. odoo-python +#: code:addons/l10n-italy/l10n_it_riba/models/riba.py:0 +#: code:addons/l10n_it_riba/models/riba.py:0 +#, python-format +msgid "Please define a Settlement Journal." +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_presentation_riba_issue__presentation_amount +msgid "Presentation Amount" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.actions.act_window,name:l10n_it_riba.riba_presentation_action +#: model:ir.ui.menu,name:l10n_it_riba.menu_presentation_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.wizard_presentation_riba +msgid "Presentation Riba" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model,name:l10n_it_riba.model_presentation_riba_issue +msgid "Presentation Riba Issue" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.actions.report,name:l10n_it_riba.print_slip_qweb +msgid "Print Slip" +msgstr "" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_account_config_settings_riba +msgid "Product" +msgstr "" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_account_config_settings_riba +msgid "Product used as Service for RiBa Collection Fees" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_configuration__protest_charge_account_id +msgid "Protest Fee Account" +msgstr "" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.riba_filter +msgid "RIBA Issued RiBas" +msgstr "" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.riba_filter +msgid "Reconciled" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__name +msgid "Reference" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__registration_date +msgid "Registration Date" +msgstr "" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_slip_form +msgid "Reset to Draft" +msgstr "" + +#. module: l10n_it_riba +#. odoo-python +#: code:addons/l10n-italy/l10n_it_riba/wizard/wizard_past_due.py:0 +#: code:addons/l10n_it_riba/wizard/wizard_past_due.py:0 +#: model:ir.model.fields,field_description:l10n_it_riba.field_account_move_line__riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_account_payment_term__riba +#: model:ir.ui.menu,name:l10n_it_riba.menu_riba +#, python-format +msgid "RiBa" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.actions.act_window,name:l10n_it_riba.action_riba_configuration +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_configuration_form +msgid "RiBa - Configuration" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_configuration__credit_account_id +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_credit__credit_account_id +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_past_due__riba_bank_account_id +msgid "RiBa Account" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_past_due__riba_bank_amount +msgid "RiBa Amount" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_account_bank_statement_line__riba_partner_bank_id +#: model:ir.model.fields,field_description:l10n_it_riba.field_account_move__riba_partner_bank_id +#: model:ir.model.fields,field_description:l10n_it_riba.field_account_payment__riba_partner_bank_id +msgid "RiBa Bank Account" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_account_payment_term__riba_payment_cost +msgid "RiBa Collection Fees" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_account_move_line__due_cost_line +msgid "RiBa Collection Fees Line" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.ui.menu,name:l10n_it_riba.menu_riba_configuration +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_account_config_settings_riba +msgid "RiBa Configuration" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.actions.act_window,name:l10n_it_riba.riba_credit_action +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.riba_credit +msgid "RiBa Credit" +msgstr "" + +#. module: l10n_it_riba +#. odoo-python +#: code:addons/l10n-italy/l10n_it_riba/wizard/wizard_credit.py:0 +#: code:addons/l10n_it_riba/wizard/wizard_credit.py:0 +#, python-format +msgid "RiBa Credit %s" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_account_move_line__slip_line_ids +msgid "RiBa Detail" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model,name:l10n_it_riba.model_riba_slip_line +#: model:ir.model,name:l10n_it_riba.model_riba_slip_move_line +msgid "RiBa Details" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__line_ids +msgid "RiBa Due Dates" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model,name:l10n_it_riba.model_riba_file_export +msgid "RiBa File Export Wizard" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.actions.act_window,name:l10n_it_riba.action_riba_to_issue +#: model:ir.model,name:l10n_it_riba.model_riba_issue +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.riba_issue_view +msgid "RiBa Issue" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.actions.act_window,name:l10n_it_riba.slip_riba_action +#: model:ir.model,name:l10n_it_riba.model_riba_slip +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_slip_form +msgid "RiBa Slip" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.actions.act_window,name:l10n_it_riba.detail_riba_action +msgid "RiBa Slip Detail" +msgstr "" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.slip_qweb +msgid "RiBa Slip No." +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model,name:l10n_it_riba.model_report_l10n_it_riba_slip_qweb +msgid "RiBa Slip Report" +msgstr "" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_detail_riba_filter +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_slip_riba_filter +msgid "RiBa Slips" +msgstr "" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.riba_filter +msgid "RiBa To Issue" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,help:l10n_it_riba.field_riba_slip__config_id +#: model:ir.model.fields,help:l10n_it_riba.field_riba_slip_line__config_id +msgid "RiBa configuration to be used." +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_account_setup_bank_manual_config__codice_sia +#: model:ir.model.fields,field_description:l10n_it_riba.field_res_partner_bank__codice_sia +msgid "SIA Code" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__message_has_sms_error +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__message_has_sms_error +msgid "SMS Delivery error" +msgstr "" + +#. module: l10n_it_riba +#. odoo-python +#: code:addons/l10n-italy/l10n_it_riba/models/account.py:0 +#: code:addons/l10n_it_riba/models/account.py:0 +#, python-format +msgid "Set a Service for Collection Fees in Company Config." +msgstr "" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_configuration_form +msgid "Settlement" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_configuration__settlement_journal_id +msgid "Settlement Journal" +msgstr "" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.riba_credit +msgid "Skip and Confirm Credit" +msgstr "" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.riba_past_due +msgid "Skip and Confirm Past Due" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__slip_id +msgid "Slip" +msgstr "" + +#. module: l10n_it_riba +#. odoo-python +#: code:addons/l10n-italy/l10n_it_riba/models/riba.py:0 +#: code:addons/l10n_it_riba/models/riba.py:0 +#, python-format +msgid "" +"Slip %(name)s is in state '%(state)s'. You can only delete documents in " +"state 'Draft' or 'Canceled'." +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_move_line__riba_line_id +msgid "Slip Line" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.ui.menu,name:l10n_it_riba.menu_riba_distinte +msgid "Slips" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.ui.menu,name:l10n_it_riba.menu_riba_detail +msgid "Slips Detail" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_file_export__state +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__state +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__state +msgid "State" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields.selection,name:l10n_it_riba.selection__riba_configuration__type__sbf +msgid "Subject To Collection" +msgstr "" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.slip_layout +msgid "Tel:" +msgstr "" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.riba_issue_view +msgid "This wizard will generate the RiBa slip" +msgstr "" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.riba_past_due +msgid "" +"This wizard will generate the journal entry related to an past due RiBa" +msgstr "" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.riba_credit +msgid "" +"This wizard will generate the journal entry related to credit received from " +"the bank" +msgstr "" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.riba_filter +msgid "To Reconcile" +msgstr "" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.view_riba_to_issue_tree +msgid "Total Amount" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__type +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__type +msgid "Type" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__user_id +msgid "User" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip__website_message_ids +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_slip_line__website_message_ids +msgid "Website Messages" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,help:l10n_it_riba.field_riba_slip__website_message_ids +#: model:ir.model.fields,help:l10n_it_riba.field_riba_slip_line__website_message_ids +msgid "Website communication history" +msgstr "" + +#. module: l10n_it_riba +#: model:ir.model.fields,field_description:l10n_it_riba.field_riba_past_due__bank_amount +msgid "Withdrawn Amount" +msgstr "" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.riba_past_due +msgid "" +"You can also skip this step and set the line status to 'Past Due' anyway" +msgstr "" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.riba_credit +msgid "" +"You can also skip this step and set the slip status to 'Credited' anyway" +msgstr "" + +#. module: l10n_it_riba +#: model_terms:ir.ui.view,arch_db:l10n_it_riba.slip_qweb +msgid "of" +msgstr "" + +#. module: l10n_it_riba +#. odoo-python +#: code:addons/l10n-italy/l10n_it_riba/models/account.py:0 +#: code:addons/l10n_it_riba/models/account.py:0 +#, python-format +msgid "{line_name} for {month}-{year}" +msgstr "" \ No newline at end of file diff --git a/l10n_it_riba/migrations/16.0.1.0.0/data/noupdate.xml b/l10n_it_riba/migrations/16.0.1.0.0/data/noupdate.xml new file mode 100644 index 000000000000..da94ab15de5b --- /dev/null +++ b/l10n_it_riba/migrations/16.0.1.0.0/data/noupdate.xml @@ -0,0 +1,22 @@ + + + + + seq.riba.slip + + + + + + + + + + + + + + diff --git a/l10n_it_riba/migrations/16.0.1.0.0/post-migrate.py b/l10n_it_riba/migrations/16.0.1.0.0/post-migrate.py new file mode 100644 index 000000000000..5358d910b9ab --- /dev/null +++ b/l10n_it_riba/migrations/16.0.1.0.0/post-migrate.py @@ -0,0 +1,16 @@ +# Copyright 2023 Simone Rubino - AionTech +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from openupgradelib import openupgrade + +NEW_MODULE_NAME = "l10n_it_riba" + + +@openupgrade.migrate() +def migrate(env, version): + openupgrade.load_data( + env.cr, + NEW_MODULE_NAME, + "migrations/16.0.1.0.0/data/noupdate.xml", + ) + # TODO selection keys of riba.distinta[.line].state have changed diff --git a/l10n_it_riba/migrations/16.0.1.0.0/pre-migrate.py b/l10n_it_riba/migrations/16.0.1.0.0/pre-migrate.py new file mode 100644 index 000000000000..255887b1b364 --- /dev/null +++ b/l10n_it_riba/migrations/16.0.1.0.0/pre-migrate.py @@ -0,0 +1,284 @@ +# Copyright 2023 Simone Rubino - AionTech +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from openupgradelib import openupgrade + +OLD_MODULE_NAME = "l10n_it_ricevute_bancarie" +NEW_MODULE_NAME = "l10n_it_riba" +RENAMED_MODELS = [ + ("riba.distinta", "riba.slip"), + ("riba.distinta.line", "riba.slip.line"), + ("riba.distinta.move.line", "riba.slip.move.line"), + ( + "report.l10n_it_ricevute_bancarie.distinta_qweb", + "report.l10n_it_riba.slip_qweb", + ), # abstract + ("riba.accreditation", "riba.credit"), + ("riba.unsolved", "riba.past_due"), +] +RENAMED_FIELDS = [ + [ + ( + "account.move", + "riba_credited_ids", + ), + ( + "account.move", + "riba_accredited_ids", + ), + ], + [ + ( + "account.move", + "riba_unsolved_ids", + ), + ( + "account.move", + "riba_past_due_ids", + ), + ], + [ + ( + "account.move", + "unsolved_move_line_ids", # is m2m, with table invoice_unsolved_line_rel + ), + ( + "account.move", + "past_due_move_line_ids", # is m2m, with table invoice_past_due_line_rel + ), + ], + [ + ( + "account.move", + "is_unsolved", + ), + ( + "account.move", + "is_past_due", + ), + ], + [ + ( + "account.move.line", + "distinta_line_ids", + ), + ( + "account.move.line", + "slip_line_ids", + ), + ], + [ + ( + "account.move.line", + "unsolved_invoice_ids", # is m2m with table invoice_unsolved_line_rel + ), + ( + "account.move.line", + "past_due_invoice_ids", # is m2m with table invoice_past_due_line_rel + ), + ], + [ + ( + "riba.distinta", + "date_accreditation", + ), + ( + "riba.slip", + "date_credited", + ), + ], + [ + ( + "riba.distinta", + "date_unsolved", + ), + ( + "riba.slip", + "date_past_due", + ), + ], + [ + ( + "riba.distinta", + "accreditation_move_id", + ), + ( + "riba.slip", + "credit_move_id", + ), + ], + [ + ( + "riba.distinta", + "unsolved_move_ids", # is m2m table name computed + ), + ( + "riba.slip", + "past_due_move_ids", # is m2m table name computed + ), + ], + [ + ( + "riba.distinta.line", + "unsolved_move_id", + ), + ( + "riba.slip.line", + "past_due_move_id", + ), + ], + [ + ( + "riba.distinta.line", + "distinta_id", + ), + ( + "riba.slip.line", + "slip_id", + ), + ], + [ + ( + "riba.configuration", + "accreditation_journal_id", + ), + ( + "riba.configuration", + "credit_journal_id", + ), + ], + [ + ( + "riba.configuration", + "accreditation_account_id", + ), + ( + "riba.configuration", + "credit_account_id", + ), + ], + [ + ( + "riba.configuration", + "unsolved_journal_id", + ), + ( + "riba.configuration", + "past_due_journal_id", + ), + ], + [ + ( + "riba.accreditation", + "accreditation_journal_id", + ), + ( + "riba.credit", + "credit_journal_id", + ), + ], + [ + ( + "riba.accreditation", + "accreditation_account_id", + ), + ( + "riba.credit", + "credit_account_id", + ), + ], + [ + ( + "riba.accreditation", + "accreditation_amount", + ), + ( + "riba.credit", + "credit_amount", + ), + ], + [ + ( + "riba.unsolved", + "unsolved_journal_id", + ), + ( + "riba.past_due", + "past_due_journal_id", + ), + ], +] +RENAMED_XMLIDS = [ + ("seq_riba_distinta", "seq_riba_slip"), + ("print_distinta_qweb", "print_slip_qweb"), + ("access_riba_distinta_uinvoice", "access_riba_slip_uinvoice"), + ("access_riba_distinta_group_invoice", "access_riba_slip_group_invoice"), + ("access_riba_distinta_user", "access_riba_slip_user"), + ("access_riba_distinta_accountant", "access_riba_slip_accountant"), + ("access_riba_distinta_line_uinvoice", "access_riba_slip_line_uinvoice"), + ("access_riba_distinta_line_group_invoice", "access_riba_slip_line_group_invoice"), + ("access_riba_distinta_line_user", "access_riba_slip_line_user"), + ("access_riba_distinta_line_accountant", "access_riba_slip_line_accountant"), + ("access_riba_distinta_move_line_uinvoice", "access_riba_slip_move_line_uinvoice"), + ( + "access_riba_distinta_move_line_group_invoice", + "access_riba_slip_move_line_group_invoice", + ), + ("access_riba_distinta_move_line_user", "access_riba_slip_move_line_user"), + ( + "access_riba_distinta_move_line_accountant", + "access_riba_slip_move_line_accountant", + ), + ("access_riba_unsolved", "access_riba_past_due"), + ("access_riba_accreditation", "access_riba_credit"), + ("riba_distinta_company_rule", "riba_slip_company_rule"), + ("riba_distinta_line_company_rule", "riba_slip_line_company_rule"), + ("view_riba_da_emettere_tree", "view_riba_to_issue_tree"), + ("action_riba_da_emettere", "action_riba_to_issue"), + ("menu_riba_da_emettere", "menu_riba_to_issue"), + ("view_distinta_riba_filtri", "view_slip_riba_filter"), + ("view_distinta_riba_tree", "view_slip_riba_tree"), + ("view_riba_distinta_line_form", "view_riba_slip_line_form"), + ("distinta_riba_action", "slip_riba_action"), + ("distinta_layout", "slip_layout"), + ("distinta_qweb", "slip_qweb"), + ("riba_accreditation", "riba_credit"), + ("riba_accreditation_action", "riba_credit_action"), + ("riba_unsolved", "riba_past_due"), + ("riba_unsolved_action", "riba_past_due_action"), +] + + +@openupgrade.migrate() +def migrate(env, version): + openupgrade.rename_models( + env.cr, + RENAMED_MODELS, + ) + + field_spec = [] + for renamed_field in RENAMED_FIELDS: + (old_model, old_field), (new_model, new_field) = renamed_field + field_spec.append( + ( + old_model, + old_model.replace(".", "_"), + old_field, + new_field, + ) + ) + openupgrade.rename_fields( + env, + field_spec, + ) + + openupgrade.rename_xmlids( + env.cr, + [ + ( + ".".join((OLD_MODULE_NAME, old_xml_id)), + ".".join((NEW_MODULE_NAME, new_xml_id)), + ) + for old_xml_id, new_xml_id in RENAMED_XMLIDS + ], + ) diff --git a/l10n_it_riba/models/__init__.py b/l10n_it_riba/models/__init__.py new file mode 100644 index 000000000000..b776ccef2caf --- /dev/null +++ b/l10n_it_riba/models/__init__.py @@ -0,0 +1,14 @@ +# Copyright (C) 2012 Andrea Cometa. +# Email: info@andreacometa.it +# Web site: http://www.andreacometa.it +# Copyright (C) 2012 Associazione OpenERP Italia +# (). +# Copyright (C) 2012-2017 Lorenzo Battistini - Agile Business Group +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import account +from . import account_config +from . import ir_ui_menu +from . import partner +from . import riba +from . import riba_config diff --git a/l10n_it_riba/models/account.py b/l10n_it_riba/models/account.py new file mode 100644 index 000000000000..e0ac3725eaae --- /dev/null +++ b/l10n_it_riba/models/account.py @@ -0,0 +1,410 @@ +# Copyright (C) 2012 Andrea Cometa. +# Email: info@andreacometa.it +# Web site: http://www.andreacometa.it +# Copyright (C) 2012 Associazione OpenERP Italia +# (). +# Copyright (C) 2012-2018 Lorenzo Battistini - Agile Business Group +# Copyright 2023 Simone Rubino - Aion Tech +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import _, api, fields, models +from odoo.exceptions import UserError + + +class AccountPaymentTerm(models.Model): + # flag riba utile a distinguere la modalità di pagamento + _inherit = "account.payment.term" + + riba = fields.Boolean("RiBa", default=False) + riba_payment_cost = fields.Float( + "RiBa Collection Fees", + digits="Account", + help="Collection fees amount. If different from 0, " + "for each payment deadline an invoice line will be added " + "to invoice, with this amount.", + ) + + +class ResBankAddField(models.Model): + _inherit = "res.bank" + banca_estera = fields.Boolean("Foreign Bank") + + +class ResPartnerBankAdd(models.Model): + _inherit = "res.partner.bank" + codice_sia = fields.Char( + "SIA Code", + size=5, + help="Identification Code of the Company in the Interbank System.", + ) + + +class AccountMove(models.Model): + _inherit = "account.move" + + @api.depends( + "past_due_move_line_ids.past_due_invoice_ids", + "past_due_move_line_ids.full_reconcile_id", + "past_due_move_line_ids.matched_debit_ids", + "past_due_move_line_ids.matched_credit_ids", + ) + def _compute_is_past_due(self): + for invoice in self: + invoice.is_past_due = False + reconciled_past_due = 0 + for past_due_move_line in invoice.past_due_move_line_ids: + if past_due_move_line.reconciled: + reconciled_past_due += 1 + if len(invoice.past_due_move_line_ids) != reconciled_past_due: + invoice.is_past_due = True + + riba_credited_ids = fields.One2many( + "riba.slip", "credit_move_id", "Credited RiBa Slips", readonly=True + ) + riba_past_due_ids = fields.One2many( + "riba.slip.line", "past_due_move_id", "Past Due RiBa Slips", readonly=True + ) + + past_due_move_line_ids = fields.Many2many( + "account.move.line", + "invoice_past_due_line_rel", + "move_id", + "line_id", + "Past Due Journal Items", + ) + + is_past_due = fields.Boolean( + "Is a past due invoice", compute="_compute_is_past_due", store=True + ) + is_riba_payment = fields.Boolean( + "Is RiBa Payment", related="invoice_payment_term_id.riba" + ) + + riba_partner_bank_id = fields.Many2one( + "res.partner.bank", + string="RiBa Bank Account", + help="Bank Account Number to which the RiBa will be debited. " + "If not set, first bank in partner will be used.", + readonly=True, + states={"draft": [("readonly", False)]}, + ) + + @api.model_create_multi + def create(self, vals_list): + invoices = super().create(vals_list) + for invoice in invoices: + if not invoice.riba_partner_bank_id: + invoice._onchange_riba_partner_bank_id() + return invoices + + @api.onchange("partner_id", "invoice_payment_term_id", "move_type") + def _onchange_riba_partner_bank_id(self): + if ( + not self.riba_partner_bank_id + or self.riba_partner_bank_id not in self.partner_id.bank_ids + ): + bank_ids = self.env["res.partner.bank"] + if ( + self.partner_id + and self.invoice_payment_term_id.riba + and self.move_type in ["out_invoice", "out_refund"] + ): + bank_ids = self.partner_id.bank_ids + self.riba_partner_bank_id = bank_ids[0] if bank_ids else None + + def month_check(self, invoice_date_due, all_date_due): + """ + :param invoice_date_due: first due date of invoice + :param all_date_due: list of due dates for partner + :return: True if month of invoice_date_due is in a list of all_date_due + """ + for d in all_date_due: + if invoice_date_due.month == d.month and invoice_date_due.year == d.year: + return True + return False + + def action_post(self): + for invoice in self: + # ---- Add a line with collection fees for each due date only for first due + # ---- date of the month + if ( + invoice.move_type != "out_invoice" + or not invoice.invoice_payment_term_id + or not invoice.invoice_payment_term_id.riba + or invoice.invoice_payment_term_id.riba_payment_cost == 0.0 + ): + continue + if not invoice.company_id.due_cost_service_id: + raise UserError( + _("Set a Service for Collection Fees in Company Config.") + ) + # ---- Apply Collection Fees on invoice only on first due date of the month + # ---- Get Date of first due date + move_line = self.env["account.move.line"].search( + [("partner_id", "=", invoice.partner_id.id)] + ) + if not any(line.due_cost_line for line in move_line): + move_line = self.env["account.move.line"] + # ---- Filtered recordset with date_maturity + move_line = move_line.filtered(lambda l: l.date_maturity is not False) + # ---- Sorted + move_line = move_line.sorted(key=lambda r: r.date_maturity) + # ---- Get date + previous_date_due = move_line.mapped("date_maturity") + pterm = self.env["account.payment.term"].browse( + self.invoice_payment_term_id.id + ) + pterm_list = pterm._compute_terms( + date_ref=self.invoice_date, + currency=self.currency_id, + company=self.company_id, + tax_amount=1, + tax_amount_currency=1, + untaxed_amount=0, + untaxed_amount_currency=0, + sign=1, + ) + + for pay_date in pterm_list: + if not self.month_check(pay_date["date"], previous_date_due): + # ---- Get Line values for service product + service_prod = invoice.company_id.due_cost_service_id + account = service_prod.product_tmpl_id.get_product_accounts( + invoice.fiscal_position_id + )["income"] + line_vals = { + "partner_id": invoice.partner_id.id, + "product_id": service_prod.id, + "move_id": invoice.id, + "price_unit": ( + invoice.invoice_payment_term_id.riba_payment_cost + ), + "due_cost_line": True, + "name": _("{line_name} for {month}-{year}").format( + line_name=service_prod.name, + month=pay_date["date"].month, + year=pay_date["date"].year, + ), + "account_id": account.id, + "sequence": 9999, + } + # ---- Update Line Value with tax if is set on product + if invoice.company_id.due_cost_service_id.taxes_id: + tax = invoice.fiscal_position_id.map_tax(service_prod.taxes_id) + line_vals.update({"tax_ids": [(4, tax.id)]}) + invoice.write({"invoice_line_ids": [(0, 0, line_vals)]}) + # ---- recompute invoice taxes + invoice._sync_dynamic_lines( + container={"records": invoice, "self": invoice} + ) + return super().action_post() + + def button_draft(self): + # ---- Delete Collection Fees Line of invoice when set Back to Draft + # ---- line was added on new validate + res = super().button_draft() + for invoice in self: + due_cost_line_ids = invoice.get_due_cost_line_ids() + if due_cost_line_ids: + invoice.write( + {"invoice_line_ids": [(2, id, 0) for id in due_cost_line_ids]} + ) + invoice._sync_dynamic_lines( + container={"records": invoice, "self": invoice} + ) + return res + + def button_cancel(self): + for invoice in self: + # we get move_lines with date_maturity and check if they are + # present in some riba_slip_line + move_line_model = self.env["account.move.line"] + rdml_model = self.env["riba.slip.move.line"] + move_line_ids = move_line_model.search( + [("move_id", "=", invoice.id), ("date_maturity", "!=", False)] + ) + if move_line_ids: + riba_line_ids = rdml_model.search( + [("move_line_id", "in", [m.id for m in move_line_ids])] + ) + if riba_line_ids: + if len(riba_line_ids) > 1: + riba_line_ids = riba_line_ids[0] + raise UserError( + _( + "Invoice is linked to RiBa slip No. %(riba)s", + riba=riba_line_ids.riba_line_id.slip_id.name, + ) + ) + return super().button_cancel() + + def copy(self, default=None): + self.ensure_one() + # Delete Collection Fees Line of invoice when copying + invoice = super().copy( + default=default, + ) + if invoice: + due_cost_line_ids = invoice.get_due_cost_line_ids() + if due_cost_line_ids: + invoice.write( + {"invoice_line_ids": [(2, id, 0) for id in due_cost_line_ids]} + ) + invoice._sync_dynamic_lines( + container={"records": invoice, "self": invoice} + ) + return invoice + + def get_due_cost_line_ids(self): + return self.invoice_line_ids.filtered(lambda l: l.due_cost_line).ids + + +# se slip_line_ids == None allora non è stata emessa +class AccountMoveLine(models.Model): + _inherit = "account.move.line" + + slip_line_ids = fields.One2many( + "riba.slip.move.line", "move_line_id", "RiBa Detail" + ) + riba = fields.Boolean( + related="move_id.invoice_payment_term_id.riba", string="RiBa", store=False + ) + past_due_invoice_ids = fields.Many2many( + "account.move", + "invoice_past_due_line_rel", + "line_id", + "move_id", + "Past Due Invoices", + ) + iban = fields.Char( + related="move_id.riba_partner_bank_id.acc_number", string="IBAN", store=False + ) + due_cost_line = fields.Boolean("RiBa Collection Fees Line") + + @api.model + def fields_view_get( + self, view_id=None, view_type="form", toolbar=False, submenu=False + ): + model_data_obj = self.env["ir.model.data"] + ids = model_data_obj.search( + [ + ("module", "=", "l10n_it_riba"), + ("name", "=", "view_riba_to_issue_tree"), + ] + ) + if ids: + view_payments_tree_id = model_data_obj.get_object_reference( + "l10n_it_riba", "view_riba_to_issue_tree" + ) + if ids and view_id == view_payments_tree_id[1]: + # Use RiBa slip + result = super(models.Model, self).fields_view_get( + view_id=view_id, + view_type=view_type, + toolbar=toolbar, + submenu=submenu, + ) + else: + # Use special views for account.move.line object + # (for ex. tree view contains user defined fields) + result = super().fields_view_get( + view_id=view_id, + view_type=view_type, + toolbar=toolbar, + submenu=submenu, + ) + return result + + def get_riba_lines(self): + riba_lines = self.env["riba.slip.line"] + return riba_lines.search([("acceptance_move_id", "=", self.move_id.id)]) + + def update_paid_riba_lines(self): + # set paid only if not past_due + if not self.env.context.get("past_due_reconciliation"): + riba_lines = self.get_riba_lines() + for riba_line in riba_lines: + # allowed transitions: + # credited_to_paid and accepted_to_paid. See workflow + if riba_line.state in ["confirmed", "credited"]: + if riba_line.test_reconciled(): + riba_line.state = "paid" + riba_line.slip_id.state = "paid" + + def reconcile(self): + res = super().reconcile() + for line in self: + line.update_paid_riba_lines() + return res + + def action_riba_issue(self): + ctx = dict(self.env.context) + ctx.pop("active_id", None) + ctx["active_ids"] = self.ids + ctx["active_model"] = "account.move.line" + + return { + "type": "ir.actions.act_window", + "name": "Issue RiBa", + "res_model": "riba.issue", + "view_mode": "form", + "target": "new", + "context": ctx, + } + + +class AccountFullReconcile(models.Model): + _inherit = "account.full.reconcile" + + def get_riba_lines(self): + riba_lines = self.env["riba.slip.line"] + for move_line in self.reconciled_line_ids: + riba_lines |= riba_lines.search( + [("acceptance_move_id", "=", move_line.move_id.id)] + ) + return riba_lines + + def unreconcile_riba_lines(self, riba_lines): + for riba_line in riba_lines: + # allowed transitions: + # paid_to_cancel and past_due_to_cancel. See workflow + if riba_line.state in ["paid", "past_due"]: + if not riba_line.test_reconciled(): + if riba_line.slip_id.credit_move_id: + riba_line.state = "credited" + riba_line.slip_id.state = "credited" + else: + riba_line.state = "confirmed" + riba_line.slip_id.state = "accepted" + + def unlink(self): + riba_lines = None + for rec in self: + riba_lines = rec.get_riba_lines() + res = super().unlink() + if riba_lines: + self.unreconcile_riba_lines(riba_lines) + return res + + +class AccountPartialReconcile(models.Model): + _inherit = "account.partial.reconcile" + + def unlink(self): + riba_lines = None + for rec in self: + riba_lines = rec.get_riba_lines() + res = super().unlink() + if riba_lines: + self.env["account.full.reconcile"].unreconcile_riba_lines(riba_lines) + return res + + def get_riba_lines(self): + riba_lines = self.env["riba.slip.line"] + riba_lines |= riba_lines.search( + [("acceptance_move_id", "=", self.debit_move_id.move_id.id)] + ) + riba_lines |= riba_lines.search( + [("acceptance_move_id", "=", self.credit_move_id.move_id.id)] + ) + return riba_lines diff --git a/l10n_it_riba/models/account_config.py b/l10n_it_riba/models/account_config.py new file mode 100644 index 000000000000..bd32b8c1b124 --- /dev/null +++ b/l10n_it_riba/models/account_config.py @@ -0,0 +1,37 @@ +# Copyright (C) 2012 Andrea Cometa. +# Email: info@andreacometa.it +# Web site: http://www.andreacometa.it +# Copyright (C) 2012 Associazione OpenERP Italia +# (). +# Copyright (C) 2012-2017 Lorenzo Battistini - Agile Business Group +# Copyright 2023 Simone Rubino - Aion Tech +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class ResConfigSettings(models.TransientModel): + + _inherit = "res.config.settings" + + due_cost_service_id = fields.Many2one( + string="Default Collection Fees Service", + related="company_id.due_cost_service_id", + help="Default Service for RiBa Collection Fees on invoice.", + domain=[("type", "=", "service")], + readonly=False, + ) + + @api.model + def default_get(self, fields_list): + res = super().default_get(fields_list) + if res: + res["due_cost_service_id"] = self.env.user.company_id.due_cost_service_id.id + return res + + +class ResCompany(models.Model): + + _inherit = "res.company" + + due_cost_service_id = fields.Many2one("product.product", "Collection Fees Service") diff --git a/l10n_it_riba/models/ir_ui_menu.py b/l10n_it_riba/models/ir_ui_menu.py new file mode 100644 index 000000000000..bc0c95b11642 --- /dev/null +++ b/l10n_it_riba/models/ir_ui_menu.py @@ -0,0 +1,27 @@ +# Copyright 2022 Simone Rubino - Agile Business Group +# Copyright 2023 Simone Rubino - Aion Tech +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import models + + +class IrUiMenu(models.Model): + _inherit = "ir.ui.menu" + + def write(self, vals): + old_parent = self.parent_id + new_parent_id = vals.get("parent_id") + + res = super().write(vals) + + if new_parent_id: + # Move the RiBa menu if any of + # its siblings (menu having same parent before write) + # is moved (parent changes). + # This happens when account_accountant (enterprise) + # is installed or uninstalled. + root_riba_menu = self.env.ref("l10n_it_riba.menu_riba") + parent_riba_menu = root_riba_menu.parent_id + if old_parent == parent_riba_menu and new_parent_id != old_parent.id: + root_riba_menu.parent_id = new_parent_id + return res diff --git a/l10n_it_riba/models/partner.py b/l10n_it_riba/models/partner.py new file mode 100644 index 000000000000..7da6ba1c7817 --- /dev/null +++ b/l10n_it_riba/models/partner.py @@ -0,0 +1,18 @@ +# Copyright (C) 2012 Andrea Cometa. +# Email: info@andreacometa.it +# Web site: http://www.andreacometa.it +# Copyright (C) 2012 Associazione OpenERP Italia +# (). +# Copyright (C) 2012-2017 Lorenzo Battistini - Agile Business Group +# Copyright 2023 Simone Rubino - Aion Tech +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class ResPartner(models.Model): + _inherit = "res.partner" + + group_riba = fields.Boolean( + "Group RiBa", help="Group RiBa by customer while issuing." + ) diff --git a/l10n_it_riba/models/riba.py b/l10n_it_riba/models/riba.py new file mode 100644 index 000000000000..9abe955b4b66 --- /dev/null +++ b/l10n_it_riba/models/riba.py @@ -0,0 +1,523 @@ +# Copyright (C) 2012 Andrea Cometa. +# Email: info@andreacometa.it +# Web site: http://www.andreacometa.it +# Copyright (C) 2012 Associazione OpenERP Italia +# (). +# Copyright (C) 2012-2017 Lorenzo Battistini - Agile Business Group +# Copyright 2023 Simone Rubino - Aion Tech +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from datetime import date + +from odoo import _, api, fields, models +from odoo.exceptions import UserError + + +class RibaList(models.Model): + def _compute_acceptance_move_ids(self): + for riba in self: + move_ids = self.env["account.move"] + for line in riba.line_ids: + move_ids |= line.acceptance_move_id + riba.acceptance_move_ids = move_ids + + def _compute_past_due_move_ids(self): + for riba in self: + move_ids = self.env["account.move"] + for line in riba.line_ids: + move_ids |= line.past_due_move_id + riba.past_due_move_ids = move_ids + + def _compute_payment_ids(self): + for riba in self: + move_lines = self.env["account.move.line"] + for line in riba.line_ids: + move_lines |= line.payment_ids + riba.payment_ids = move_lines + + _name = "riba.slip" + _description = "RiBa Slip" + _inherit = ["mail.thread"] + _order = "date_created desc" + + name = fields.Char( + "Reference", + required=True, + readonly=True, + states={"draft": [("readonly", False)]}, + default=(lambda self: self.env["ir.sequence"].next_by_code("riba.slip")), + ) + config_id = fields.Many2one( + "riba.configuration", + string="Configuration", + index=True, + required=True, + readonly=True, + states={"draft": [("readonly", False)]}, + help="RiBa configuration to be used.", + ) + state = fields.Selection( + [ + ("draft", "Draft"), + ("accepted", "Accepted"), + ("credited", "Credited"), + ("paid", "Paid"), + ("past_due", "Past Due"), + ("cancel", "Canceled"), + ], + readonly=True, + default="draft", + ) + line_ids = fields.One2many( + "riba.slip.line", + "slip_id", + "RiBa Due Dates", + readonly=True, + states={"draft": [("readonly", False)]}, + ) + user_id = fields.Many2one( + "res.users", + "User", + required=True, + readonly=True, + states={"draft": [("readonly", False)]}, + default=lambda self: self.env.user, + ) + date_created = fields.Date( + "Creation Date", + readonly=True, + default=lambda self: fields.Date.context_today(self), + ) + date_accepted = fields.Date("Acceptance Date") + date_credited = fields.Date("Credit Date") + date_paid = fields.Date("Payment Date", readonly=True) + date_past_due = fields.Date("Past Due Date", readonly=True) + company_id = fields.Many2one( + "res.company", + "Company", + required=True, + readonly=True, + states={"draft": [("readonly", False)]}, + default=lambda self: self.env.company, + ) + acceptance_move_ids = fields.Many2many( + "account.move", + compute="_compute_acceptance_move_ids", + string="Acceptance Entries", + ) + credit_move_id = fields.Many2one("account.move", "Credit Entry", readonly=True) + payment_ids = fields.Many2many( + "account.move.line", compute="_compute_payment_ids", string="Payments" + ) + past_due_move_ids = fields.Many2many( + "account.move", compute="_compute_past_due_move_ids", string="Past Due Entries" + ) + type = fields.Selection(string="Type", related="config_id.type", readonly=True) + registration_date = fields.Date( + states={ + "draft": [("readonly", False)], + "cancel": [("readonly", False)], + }, + readonly=True, + required=True, + default=lambda self: fields.Date.context_today(self), + help="Keep empty to use the current date.", + ) + + def action_riba_export(self): + return { + "type": "ir.actions.act_window", + "name": "Issue RiBa", + "res_model": "riba.file.export", + "view_mode": "form", + "target": "new", + "context": self.env.context, + } + + @api.ondelete(at_uninstall=False) + def _unlink_if_not_confirmed(self): + for riba_list in self: + if riba_list.state not in ("draft", "cancel"): + raise UserError( + _( + "Slip %(name)s is in state '%(state)s'. You can only delete documents" + " in state 'Draft' or 'Canceled'.", + name=riba_list.name, + state=riba_list.state, + ) + ) + + def confirm(self): + for slip in self: + for line in slip.line_ids: + line.confirm() + + def riba_cancel(self): + for slip in self: + for line in slip.line_ids: + line.state = "cancel" + if line.acceptance_move_id: + line.acceptance_move_id.unlink() + if line.past_due_move_id: + line.past_due_move_id.unlink() + if slip.credit_move_id: + slip.credit_move_id.unlink() + slip.state = "cancel" + + def settle_all_line(self): + for riba_list in self: + for line in riba_list.line_ids: + if line.state == "credited": + line.riba_line_settlement() + + @api.onchange("date_accepted", "date_credited") + def _onchange_date(self): + if self.date_accepted and self.date_credited: + if self.date_accepted > self.date_credited: + raise UserError( + _("Credit date must be greater or equal to acceptance date.") + ) + + def riba_past_due(self): + self.state = "past_due" + self.date_past_due = fields.Date.context_today(self) + + def test_state(self, state): + for riba_list in self: + for line in riba_list.line_ids: + if line.state != state: + return False + return True + + def test_accepted(self): + return self.test_state("confirmed") + + def test_past_due(self): + return self.test_state("past_due") + + def test_paid(self): + return self.test_state("paid") + + def action_cancel_draft(self): + for riba_list in self: + riba_list.state = "draft" + for line in riba_list.line_ids: + line.state = "draft" + + +class RibaListLine(models.Model): + _name = "riba.slip.line" + _inherit = "mail.thread" + _description = "RiBa Details" + _rec_name = "sequence" + + def _compute_line_values(self): + for line in self: + line.amount = 0.0 + line.invoice_date = "" + line.invoice_number = "" + for move_line in line.move_line_ids: + line.amount += move_line.amount + if not line.invoice_date: + line.invoice_date = str( + fields.Date.from_string( + move_line.move_line_id.move_id.invoice_date + ).strftime("%d/%m/%Y") + ) + else: + line.invoice_date = "{}, {}".format( + line.invoice_date, + str( + fields.Date.from_string( + move_line.move_line_id.move_id.invoice_date + ).strftime("%d/%m/%Y") + ), + ) + if not line.invoice_number: + line.invoice_number = str( + move_line.move_line_id.move_id.move_id.name + if move_line.move_line_id.move_id.display_name == "/" + else move_line.move_line_id.move_id.display_name + ) + else: + line.invoice_number = "{}, {}".format( + line.invoice_number, + str( + move_line.move_line_id.move_id.move_id.name + if move_line.move_line_id.move_id.display_name == "/" + else move_line.move_line_id.move_id.display_name + ), + ) + + amount = fields.Float(compute="_compute_line_values") + invoice_date = fields.Char(compute="_compute_line_values", size=256) + invoice_number = fields.Char(compute="_compute_line_values", size=256) + cig = fields.Char(compute="_compute_cig_cup_values", string="CIG", size=256) + cup = fields.Char(compute="_compute_cig_cup_values", string="CUP", size=256) + + def _compute_cig_cup_values(self): + for line in self: + line.cig = "" + line.cup = "" + for move_line in line.move_line_ids: + for ( + related_document + ) in move_line.move_line_id.move_id.related_documents: + if related_document.cup: + line.cup = str(related_document.cup) + if related_document.cig: + line.cig = str(related_document.cig) + + def move_line_id_payment_get(self): + # return the move line ids with the same account as the slip line + if not self.id: + return [] + query = """ SELECT l.id + FROM account_move_line l, riba_slip_line rdl + WHERE rdl.id = %s AND l.move_id = rdl.acceptance_move_id + AND l.account_id = rdl.acceptance_account_id + """ + self._cr.execute(query, (self.id,)) + return [row[0] for row in self._cr.fetchall()] + + def test_reconciled(self): + # check whether all corresponding account move lines are reconciled + line_ids = self.move_line_id_payment_get() + if not line_ids: + return False + move_lines = self.env["account.move.line"].browse(line_ids) + reconcilied = all(line.reconciled for line in move_lines) + return reconcilied + + def _compute_lines(self): + for riba_line in self: + payment_lines = [] + if riba_line.acceptance_move_id and not riba_line.state == "past_due": + for line in riba_line.acceptance_move_id.line_ids: + payment_lines.extend( + [ + _f + for _f in [ + rp.credit_move_id.id for rp in line.matched_credit_ids + ] + if _f + ] + ) + riba_line.payment_ids = self.env["account.move.line"].browse( + list(set(payment_lines)) + ) + + sequence = fields.Integer("Number") + move_line_ids = fields.One2many( + "riba.slip.move.line", "riba_line_id", string="Credit Move Lines" + ) + acceptance_move_id = fields.Many2one( + "account.move", string="Acceptance Entry", readonly=True + ) + past_due_move_id = fields.Many2one( + "account.move", string="Past Due Entry", readonly=True + ) + acceptance_account_id = fields.Many2one( + "account.account", string="Acceptance Account" + ) + bank_id = fields.Many2one("res.partner.bank", string="Debtor Bank") + iban = fields.Char( + related="bank_id.acc_number", string="IBAN", store=False, readonly=True + ) + slip_id = fields.Many2one( + "riba.slip", string="Slip", required=True, ondelete="cascade" + ) + partner_id = fields.Many2one("res.partner", string="Customer", readonly=True) + due_date = fields.Date(readonly=True) + state = fields.Selection( + [ + ("draft", "Draft"), + ("confirmed", "Confirmed"), + ("credited", "Credited"), + ("paid", "Paid"), + ("past_due", "Past Due"), + ("cancel", "Canceled"), + ], + readonly=True, + tracking=True, + ) + payment_ids = fields.Many2many( + "account.move.line", compute="_compute_lines", string="Payments" + ) + type = fields.Selection( + string="Type", related="slip_id.config_id.type", readonly=True + ) + config_id = fields.Many2one( + string="Configuration", related="slip_id.config_id", readonly=True + ) + company_id = fields.Many2one( + "res.company", + string="Company", + related="slip_id.company_id", + store=True, + readonly=True, + related_sudo=False, + ) + + def confirm(self): + move_model = self.env["account.move"] + move_line_model = self.env["account.move.line"] + for line in self: + journal = line.slip_id.config_id.acceptance_journal_id + total_credit = 0.0 + move = move_model.create( + { + "ref": "RiBa {} - Line {}".format(line.slip_id.name, line.sequence), + "journal_id": journal.id, + "date": line.slip_id.registration_date, + } + ) + to_be_reconciled = self.env["account.move.line"] + riba_move_line_name = "" + for riba_move_line in line.move_line_ids: + total_credit += riba_move_line.amount + if ( + str(riba_move_line.move_line_id.move_id.sequence_number) + and str(riba_move_line.move_line_id.move_id.sequence_number) + not in riba_move_line_name + ): + riba_move_line_name = " ".join( + [ + riba_move_line_name, + str(riba_move_line.move_line_id.move_id.sequence_number), + ] + ).lstrip() + elif ( + riba_move_line.move_line_id.name + and riba_move_line.move_line_id.name not in riba_move_line_name + ): + riba_move_line_name = " ".join( + [riba_move_line_name, riba_move_line.move_line_id.name] + ).lstrip() + move_line = move_line_model.with_context( + check_move_validity=False + ).create( + { + "name": ( + riba_move_line.move_line_id.move_id + and riba_move_line.move_line_id.move_id.sequence_number + or riba_move_line.move_line_id.name + ), + "partner_id": line.partner_id.id, + "account_id": riba_move_line.move_line_id.account_id.id, + "credit": riba_move_line.amount, + "debit": 0.0, + "move_id": move.id, + } + ) + to_be_reconciled |= move_line + to_be_reconciled |= riba_move_line.move_line_id + move_line_model.with_context(check_move_validity=False).create( + { + "name": "RiBa %s-%s Ref. %s - %s" + % ( + line.slip_id.name, + line.sequence, + riba_move_line_name, + line.partner_id.name, + ), + "account_id": ( + line.acceptance_account_id.id + or line.slip_id.config_id.acceptance_account_id.id + # in questo modo se la riga non ha conto accettazione + # viene prelevato il conto in configuration riba + ), + "partner_id": line.partner_id.id, + "date_maturity": line.due_date, + "credit": 0.0, + "debit": total_credit, + "move_id": move.id, + } + ) + move.action_post() + to_be_reconciled.reconcile() + line.write( + { + "acceptance_move_id": move.id, + "state": "confirmed", + } + ) + line.slip_id.state = "accepted" + if not line.slip_id.date_accepted: + line.slip_id.date_accepted = fields.Date.context_today(self) + + def riba_line_settlement(self): + for riba_line in self: + if not riba_line.slip_id.config_id.settlement_journal_id: + raise UserError(_("Please define a Settlement Journal.")) + + # trovare le move line delle scritture da chiudere + move_model = self.env["account.move"] + move_line_model = self.env["account.move.line"] + + settlement_move_line = move_line_model.search( + [ + ("account_id", "=", riba_line.acceptance_account_id.id), + ("move_id", "=", riba_line.acceptance_move_id.id), + ("debit", "!=", 0), + ] + ) + + settlement_move_amount = settlement_move_line.debit + + move_ref = "Settlement RiBa {} - {}".format( + riba_line.slip_id.name, + riba_line.partner_id.name, + ) + settlement_move = move_model.create( + { + "journal_id": ( + riba_line.slip_id.config_id.settlement_journal_id.id + ), + "date": date.today().strftime("%Y-%m-%d"), + "ref": move_ref, + } + ) + + move_line_credit = move_line_model.with_context( + check_move_validity=False + ).create( + { + "name": move_ref, + "partner_id": riba_line.partner_id.id, + "account_id": riba_line.acceptance_account_id.id, + "credit": settlement_move_amount, + "debit": 0.0, + "move_id": settlement_move.id, + } + ) + + credit_account = riba_line.slip_id.config_id.credit_account_id + move_line_model.with_context(check_move_validity=False).create( + { + "name": move_ref, + "account_id": credit_account.id, + "credit": 0.0, + "debit": settlement_move_amount, + "move_id": settlement_move.id, + } + ) + + move_line_credit.move_id.action_post() + to_be_settled = self.env["account.move.line"] + to_be_settled |= move_line_credit + to_be_settled |= settlement_move_line + + to_be_settled.reconcile() + + +class RibaListMoveLine(models.Model): + _name = "riba.slip.move.line" + _description = "RiBa Details" + _rec_name = "amount" + + amount = fields.Float(digits="Account") + move_line_id = fields.Many2one("account.move.line", string="Credit Move Line") + riba_line_id = fields.Many2one( + "riba.slip.line", string="Slip Line", ondelete="cascade" + ) diff --git a/l10n_it_riba/models/riba_config.py b/l10n_it_riba/models/riba_config.py new file mode 100644 index 000000000000..989148962c5b --- /dev/null +++ b/l10n_it_riba/models/riba_config.py @@ -0,0 +1,104 @@ +# Copyright (C) 2012 Andrea Cometa. +# Email: info@andreacometa.it +# Web site: http://www.andreacometa.it +# Copyright (C) 2012 Associazione OpenERP Italia +# (). +# Copyright (C) 2012-2017 Lorenzo Battistini - Agile Business Group +# Copyright 2023 Simone Rubino - Aion Tech +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class RibaConfiguration(models.Model): + + _name = "riba.configuration" + _description = "Configuration parameters for RiBa" + + name = fields.Char("Description", size=64, required=True) + type = fields.Selection( + [("sbf", "Subject To Collection"), ("incasso", "After Collection")], + "Issue Mode", + required=True, + ) + bank_id = fields.Many2one( + "res.partner.bank", + "Bank Account", + required=True, + help="Bank account used for RiBa issuing.", + ) + acceptance_journal_id = fields.Many2one( + "account.journal", + "Acceptance Journal", + domain=[("type", "=", "bank")], + help="Journal used when RiBa is accepted by the bank.", + ) + acceptance_account_id = fields.Many2one( + "account.account", + "Acceptance Account", + help="Account used when RiBa is accepted by the bank.", + ) + company_id = fields.Many2one( + "res.company", + "Company", + required=True, + default=lambda self: self.env.company, + ) + credit_journal_id = fields.Many2one( + "account.journal", + "Credit Journal", + domain=[("type", "=", "bank")], + help="Journal used when RiBa amount is credited by the bank.", + ) + credit_account_id = fields.Many2one( + "account.account", + "RiBa Account", + help="Account used when RiBa amount is credited by the bank.", + domain=[("account_type", "!=", "liability_credit_card")], + ) + bank_account_id = fields.Many2one( + "account.account", + "A/C Bank Account", + domain=[("account_type", "=", "asset_cash")], + ) + bank_expense_account_id = fields.Many2one("account.account", "Bank Fees Account") + past_due_journal_id = fields.Many2one( + "account.journal", + "Past Due Journal", + domain=[("type", "=", "bank")], + help="Journal used when RiBa is past due.", + ) + overdue_effects_account_id = fields.Many2one( + "account.account", + "Past Due Bills Account", + domain=[("account_type", "=", "asset_receivable")], + ) + protest_charge_account_id = fields.Many2one( + "account.account", "Protest Fee Account" + ) + settlement_journal_id = fields.Many2one( + "account.journal", + "Settlement Journal", + help="Journal used when customers finally pay the invoice to bank.", + ) + + def get_default_value_by_list(self, field_name): + if not self.env.context.get("active_id", False): + return False + ribalist_model = self.env["riba.slip"] + ribalist = ribalist_model.browse(self.env.context["active_id"]) + return ( + ribalist.config_id[field_name] + and ribalist.config_id[field_name].id + or False + ) + + def get_default_value_by_list_line(self, field_name): + if not self.env.context.get("active_id", False): + return False + ribalist_line = self.env["riba.slip.line"].browse(self.env.context["active_id"]) + return ( + ribalist_line.slip_id.config_id[field_name] + and ribalist_line.slip_id.config_id[field_name].id + or False + ) diff --git a/l10n_it_riba/readme/CONFIGURE.rst b/l10n_it_riba/readme/CONFIGURE.rst new file mode 100644 index 000000000000..8ca7e477f7af --- /dev/null +++ b/l10n_it_riba/readme/CONFIGURE.rst @@ -0,0 +1,30 @@ +**Italiano** + +Nella configurazione delle RiBa è possibile specificare se si tratti di +'Salvo buon fine' o 'Al dopo incasso', che hanno un flusso completamente diverso. + +- Al dopo incasso: nessuna registrazione verrà effettuata automaticamente e le + fatture risulteranno pagate solo al momento dell'effettivo incasso. +- Salvo buon fine: le registrazioni generate seguiranno la struttura descritta nel + documento http://goo.gl/jpRhJp + +È possibile specificare diverse configurazioni (dal menù +*Configurazione → Pagamenti → Configurazione RiBa*). Per ognuna, in caso di +'Salvo buon fine', è necessario specificare almeno il registro e il conto da +utilizzare al momento dell'accettazione della distinta da parte della banca. +Tale conto deve essere di tipo 'Crediti' (ad esempio "RiBa all'incasso", +eventualmente da creare). + +La configurazione relativa alla fase di accredito, verrà usata nel momento in +cui la banca accredita l'importo della distinta. +È possibile utilizzare un registro creato appositamente, ad esempio "Accredito RiBa", +e un conto chiamato ad esempio "Banche c/RiBa all'incasso", che non deve essere di tipo +'Banca e cassa'. + +La configurazione relativa all'insoluto verrà utilizzata in caso di mancato pagamento +da parte del cliente. +Il conto può chiamarsi ad esempio "Crediti insoluti". + +Nel caso si vogliano gestire anche le spese per ogni scadenza con ricevuta bancaria, +si deve configurare un prodotto di tipo servizio e collegarlo in +*Configurazione → Impostazioni → Contabilità → Imposte → Spese di incasso RiBa*. diff --git a/l10n_it_riba/readme/CONTRIBUTORS.rst b/l10n_it_riba/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000000..9c4683bbfedf --- /dev/null +++ b/l10n_it_riba/readme/CONTRIBUTORS.rst @@ -0,0 +1,15 @@ +* Lorenzo Battistini +* Andrea Cometa +* Andrea Gallina +* Davide Corio +* Giacomo Grasso +* Gabriele Baldessari +* Alex Comba +* Marco Calcagni +* Sergio Zanchetta +* Simone Vanin +* Sergio Corato +* Giovanni Serra +* `Aion Tech `_: + + * Simone Rubino diff --git a/l10n_it_riba/readme/DESCRIPTION.rst b/l10n_it_riba/readme/DESCRIPTION.rst new file mode 100644 index 000000000000..72367ba21ae6 --- /dev/null +++ b/l10n_it_riba/readme/DESCRIPTION.rst @@ -0,0 +1,3 @@ +**Italiano** + +Modulo per gestire le ricevute bancarie. diff --git a/l10n_it_riba/readme/ROADMAP.rst b/l10n_it_riba/readme/ROADMAP.rst new file mode 100644 index 000000000000..c9ff0feb7dd3 --- /dev/null +++ b/l10n_it_riba/readme/ROADMAP.rst @@ -0,0 +1,4 @@ +**Italiano** + +Attenzione! +Il modulo è stato migrato, ma gli script di migrazione non sono stati provati. diff --git a/l10n_it_riba/readme/USAGE.rst b/l10n_it_riba/readme/USAGE.rst new file mode 100644 index 000000000000..448fc16c8fc7 --- /dev/null +++ b/l10n_it_riba/readme/USAGE.rst @@ -0,0 +1,19 @@ +**Italiano** + +Per utilizzare il meccanismo delle RiBa è necessario configurare un termine +di pagamento di tipo 'RiBa'. + +Per emettere una distinta è necessario andare su *RiBa → Emetti RiBa* e +selezionare i pagamenti per i quali emettere la distinta. +Se per il cliente è stato abilitato il raggruppamento, i pagamenti dello stesso +cliente e con la stessa data di scadenza andranno a costituire un solo elemento +della distinta. + +I possibili stati della distinta sono: *Bozza*, *Accettata*, *Accreditata*, +*Pagata*, *Insoluta* e *Annullata*. +Ad ogni passaggio di stato sarà possibile generare le relative registrazioni +contabili, le quali verranno riepilogate nella scheda «Contabilità». +Questa scheda è presente sia sulla distinta che sulle sue righe. + +La voce di menù 'Presentazione Riba' permette estrarre le riba fino al +raggiungimento dell'importo massimo inserito dall'utente. diff --git a/l10n_it_riba/report/__init__.py b/l10n_it_riba/report/__init__.py new file mode 100644 index 000000000000..e280c23f9cfe --- /dev/null +++ b/l10n_it_riba/report/__init__.py @@ -0,0 +1,4 @@ +# © 2016 Andrea Cometa +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import slip_qweb diff --git a/l10n_it_riba/report/report.xml b/l10n_it_riba/report/report.xml new file mode 100644 index 000000000000..25f4ba1a2812 --- /dev/null +++ b/l10n_it_riba/report/report.xml @@ -0,0 +1,16 @@ + + + + + Print Slip + riba.slip + qweb-pdf + l10n_it_riba.slip_qweb + l10n_it_riba.slip_qweb + + report + + diff --git a/l10n_it_riba/report/slip_qweb.py b/l10n_it_riba/report/slip_qweb.py new file mode 100644 index 000000000000..d85521371d89 --- /dev/null +++ b/l10n_it_riba/report/slip_qweb.py @@ -0,0 +1,19 @@ +# © 2016 Andrea Cometa +# Copyright 2023 Simone Rubino - Aion Tech +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import models + + +class SlipReportQweb(models.AbstractModel): + + _name = "report.l10n_it_riba.slip_qweb" + _description = "RiBa Slip Report" + + def _get_report_values(self, docids, data=None): + return { + "doc_ids": docids, + "doc_model": "riba.slip", + "docs": self.env["riba.slip"].browse(docids), + "data": data, + } diff --git a/l10n_it_riba/security/ir.model.access.csv b/l10n_it_riba/security/ir.model.access.csv new file mode 100644 index 000000000000..4c7c9d9f10b1 --- /dev/null +++ b/l10n_it_riba/security/ir.model.access.csv @@ -0,0 +1,20 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_riba_slip_uinvoice,riba_slip,model_riba_slip,account.group_account_invoice,1,1,1,1 +access_riba_slip_group_invoice,riba_slip group invoice,model_riba_slip,account.group_account_invoice,1,1,1,1 +access_riba_slip_user,riba_slip user,model_riba_slip,base.group_user,1,0,0,0 +access_riba_slip_accountant,riba_slip accountant,model_riba_slip,account.group_account_user,1,0,0,0 +access_riba_slip_line_uinvoice,riba_slip_line,model_riba_slip_line,account.group_account_invoice,1,1,1,1 +access_riba_slip_line_group_invoice,riba_slip_line group invoice,model_riba_slip_line,account.group_account_invoice,1,1,1,1 +access_riba_slip_line_user,riba_slip_line user,model_riba_slip_line,base.group_user,1,0,0,0 +access_riba_slip_line_accountant,riba_slip_line accountant,model_riba_slip_line,account.group_account_user,1,0,0,0 +access_riba_slip_move_line_uinvoice,riba_slip_move_line,model_riba_slip_move_line,account.group_account_invoice,1,1,1,1 +access_riba_slip_move_line_group_invoice,riba_slip_move_line group invoice,model_riba_slip_move_line,account.group_account_invoice,1,1,1,1 +access_riba_slip_move_line_user,riba_slip_move_line user,model_riba_slip_move_line,base.group_user,1,0,0,0 +access_riba_slip_move_line_accountant,riba_slip_move_line accountant,model_riba_slip_move_line,account.group_account_user,1,0,0,0 +access_riba_configuration_manager,riba_configuration,model_riba_configuration,account.group_account_manager,1,1,1,1 +access_riba_configuration_invoice,riba_configuration invoice,model_riba_configuration,account.group_account_invoice,1,0,0,0 +access_riba_issue,riba_issue,model_riba_issue,account.group_account_invoice,1,1,1,1 +access_riba_past_due,riba_past_due,model_riba_past_due,account.group_account_invoice,1,1,1,1 +access_riba_credit,riba_credit,model_riba_credit,account.group_account_invoice,1,1,1,1 +access_riba_file_export,riba_file_export,model_riba_file_export,account.group_account_invoice,1,1,1,1 +access_presentation_riba_issue,access_presentation_riba_issue,model_presentation_riba_issue,account.group_account_invoice,1,1,1,1 diff --git a/l10n_it_riba/security/riba_security.xml b/l10n_it_riba/security/riba_security.xml new file mode 100644 index 000000000000..2b49e3d717a2 --- /dev/null +++ b/l10n_it_riba/security/riba_security.xml @@ -0,0 +1,36 @@ + + + + + + + RiBa slip multi-company + + + + ['|',('company_id','=',False),('company_id','in',company_ids)] + + + + + RiBa slip line multi-company + + + + ['|',('company_id','=',False),('company_id','in',company_ids)] + + + + + Ri.Ba. configuration multi-company + + + + ['|',('company_id','=',False),('company_id','in',company_ids)] + + + + diff --git a/l10n_it_riba/static/description/icon.png b/l10n_it_riba/static/description/icon.png new file mode 100644 index 000000000000..fc89bcdc9f96 Binary files /dev/null and b/l10n_it_riba/static/description/icon.png differ diff --git a/l10n_it_riba/static/description/index.html b/l10n_it_riba/static/description/index.html new file mode 100644 index 000000000000..cc72d1273d32 --- /dev/null +++ b/l10n_it_riba/static/description/index.html @@ -0,0 +1,486 @@ + + + + + + +ITA - Ricevute bancarie + + + +
+

ITA - Ricevute bancarie

+ + +

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

+

Italiano

+

Modulo per gestire le ricevute bancarie.

+

Table of contents

+ +
+

Configuration

+

Italiano

+

Nella configurazione delle RiBa è possibile specificare se si tratti di +‘Salvo buon fine’ o ‘Al dopo incasso’, che hanno un flusso completamente diverso.

+
    +
  • Al dopo incasso: nessuna registrazione verrà effettuata automaticamente e le +fatture risulteranno pagate solo al momento dell’effettivo incasso.
  • +
  • Salvo buon fine: le registrazioni generate seguiranno la struttura descritta nel +documento http://goo.gl/jpRhJp
  • +
+

È possibile specificare diverse configurazioni (dal menù +Configurazione → Pagamenti → Configurazione RiBa). Per ognuna, in caso di +‘Salvo buon fine’, è necessario specificare almeno il registro e il conto da +utilizzare al momento dell’accettazione della distinta da parte della banca. +Tale conto deve essere di tipo ‘Crediti’ (ad esempio “RiBa all’incasso”, +eventualmente da creare).

+

La configurazione relativa alla fase di accredito, verrà usata nel momento in +cui la banca accredita l’importo della distinta. +È possibile utilizzare un registro creato appositamente, ad esempio “Accredito RiBa”, +e un conto chiamato ad esempio “Banche c/RiBa all’incasso”, che non deve essere di tipo +‘Banca e cassa’.

+

La configurazione relativa all’insoluto verrà utilizzata in caso di mancato pagamento +da parte del cliente. +Il conto può chiamarsi ad esempio “Crediti insoluti”.

+

Nel caso si vogliano gestire anche le spese per ogni scadenza con ricevuta bancaria, +si deve configurare un prodotto di tipo servizio e collegarlo in +Configurazione → Impostazioni → Contabilità → Imposte → Spese di incasso RiBa.

+
+
+

Usage

+

Italiano

+

Per utilizzare il meccanismo delle RiBa è necessario configurare un termine +di pagamento di tipo ‘RiBa’.

+

Per emettere una distinta è necessario andare su RiBa → Emetti RiBa e +selezionare i pagamenti per i quali emettere la distinta. +Se per il cliente è stato abilitato il raggruppamento, i pagamenti dello stesso +cliente e con la stessa data di scadenza andranno a costituire un solo elemento +della distinta.

+

I possibili stati della distinta sono: Bozza, Accettata, Accreditata, +Pagata, Insoluta e Annullata. +Ad ogni passaggio di stato sarà possibile generare le relative registrazioni +contabili, le quali verranno riepilogate nella scheda «Contabilità». +Questa scheda è presente sia sulla distinta che sulle sue righe.

+

La voce di menù ‘Presentazione Riba’ permette estrarre le riba fino al +raggiungimento dell’importo massimo inserito dall’utente.

+
+
+

Known issues / Roadmap

+

Italiano

+

Attenzione! +Il modulo è stato migrato, ma gli script di migrazione non sono stati provati.

+
+
+

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

+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+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.

+

This module is part of the OCA/l10n-italy project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/l10n_it_riba/tests/__init__.py b/l10n_it_riba/tests/__init__.py new file mode 100644 index 000000000000..68fd2dc7319b --- /dev/null +++ b/l10n_it_riba/tests/__init__.py @@ -0,0 +1,9 @@ +# +# Author: Andrea Gallina +# © 2015 Apulia Software srl +# +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import test_menu +from . import test_riba +from . import riba_common diff --git a/l10n_it_riba/tests/riba_common.py b/l10n_it_riba/tests/riba_common.py new file mode 100644 index 000000000000..a7f39c7152e1 --- /dev/null +++ b/l10n_it_riba/tests/riba_common.py @@ -0,0 +1,272 @@ +# Copyright 2023 Simone Rubino - Aion Tech +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import fields +from odoo.tests import common + + +class TestRibaCommon(common.TransactionCase): + def setUp(self): + super().setUp() + tax_model = self.env["account.tax"] + self.account_tax = ( + self.env.ref("l10n_it.2601", raise_if_not_found=False) + or self.env.ref("l10n_generic_coa.tax_payable", raise_if_not_found=False) + or self.env["account.account"].search( + [("account_type", "=", "liability_current")], limit=1 + ) + ) + self.tax_22 = tax_model.create( + { + "name": "IVA 22 Sale", + "description": "22", + "amount": 22.00, + "type_tax_use": "sale", + "invoice_repartition_line_ids": [ + (5, 0, 0), + ( + 0, + 0, + { + "factor_percent": 100, + "repartition_type": "base", + }, + ), + ( + 0, + 0, + { + "factor_percent": 100, + "repartition_type": "tax", + "account_id": self.account_tax.id, + }, + ), + ], + "refund_repartition_line_ids": [ + (5, 0, 0), + ( + 0, + 0, + { + "factor_percent": 100, + "repartition_type": "base", + }, + ), + ( + 0, + 0, + { + "factor_percent": 100, + "repartition_type": "tax", + "account_id": self.account_tax.id, + }, + ), + ], + } + ) + self.service_due_cost = self._create_service_due_cost() + self.account_model = self.env["account.account"] + self.move_line_model = self.env["account.move.line"] + self.move_model = self.env["account.move"] + self.slip_model = self.env["riba.slip"] + self.partner = self.env.ref("base.res_partner_3") + self.partner.vat = "IT01234567890" + self.product1 = self.env.ref("product.product_product_5") + self.sale_journal = self.env["account.journal"].search([("type", "=", "sale")])[ + 0 + ] + self.bank_journal = self.env["account.journal"].search( + [("type", "=", "bank")], limit=1 + ) + self.payment_term1 = self._create_pterm() + self.payment_term2 = self._create_pterm2() + self.account_rec1_id = self.account_model.create( + dict( + code="custacc", + name="customer account", + account_type="asset_receivable", + reconcile=True, + ) + ) + self.sale_account = self.env["account.account"].search( + [ + ( + "account_type", + "=", + "income_other", + ) + ], + limit=1, + ) + self.expenses_account = self.env["account.account"].search( + [ + ( + "account_type", + "=", + "expense", + ) + ], + limit=1, + ) + self.bank_account = self.env["account.account"].search( + [ + ( + "account_type", + "=", + "asset_cash", + ) + ], + limit=1, + ) + self.invoice = self._create_invoice() + self.invoice2 = self._create_invoice() + self.sbf_effects = self.env["account.account"].create( + { + "code": "STC", + "name": "STC Bills (test)", + "reconcile": True, + "account_type": "asset_receivable", + } + ) + self.riba_account = self.env["account.account"].create( + { + "code": "RiBa", + "name": "RiBa Account (test)", + "account_type": "asset_fixed", + } + ) + self.past_due_account = self.env["account.account"].create( + { + "code": "PastDue", + "name": "Past Due Bills Account (test)", + "reconcile": True, + "account_type": "asset_receivable", + } + ) + self.company_bank = self.env.ref("l10n_it_riba.company_bank") + self.riba_config = self.create_config() + self.account_payment_term_riba = self.env.ref( + "l10n_it_riba.account_payment_term_riba" + ) + self.company_bank.codice_sia = "AA555" + + def _create_service_due_cost(self): + return self.env["product.product"].create( + { + "name": "Collection Fees", + "type": "service", + "taxes_id": [[6, 0, self.tax_22.ids]], + "property_account_income_id": self._account_expense(), + } + ) + + def _account_expense(self): + return self.env["account.account"].create( + { + "code": "demoduecost", + "name": "cashing fees", + "account_type": "expense", + } + ) + + def _create_invoice(self): + # ----- Set invoice date to recent date in the system + # ----- This solves problems with account_invoice_sequential_dates + self.partner.property_account_receivable_id = self.account_rec1_id.id + recent_date = ( + self.env["account.move"] + .search([("invoice_date", "!=", False)], order="invoice_date desc", limit=1) + .invoice_date + ) + return self.env["account.move"].create( + { + "invoice_date": recent_date or fields.Date.today(), + "move_type": "out_invoice", + "journal_id": self.sale_journal.id, + "partner_id": self.partner.id, + "invoice_payment_term_id": self.payment_term1.id, + "riba_partner_bank_id": self.partner.bank_ids[0].id, + "invoice_line_ids": [ + ( + 0, + 0, + { + "name": self.product1.name, + "product_id": self.product1.id, + "quantity": 1.0, + "price_unit": 100.00, + "account_id": self.sale_account.id, + "tax_ids": [[6, 0, self.tax_22.ids]], + }, + ) + ], + } + ) + + def _create_pterm(self): + return self.env["account.payment.term"].create( + { + "name": "RiBa 30/60", + "riba": True, + "riba_payment_cost": 5.00, + "line_ids": [ + ( + 0, + 0, + { + "value": "percent", + "months": 0, + "days": 30, + "value_amount": 0.50, + }, + ), + ( + 0, + 0, + { + "value": "balance", + "months": 0, + "days": 60, + }, + ), + ], + } + ) + + def _create_pterm2(self): + return self.env["account.payment.term"].create( + { + "name": "RiBa 30", + "riba": True, + "riba_payment_cost": 5.00, + "line_ids": [ + ( + 0, + 0, + { + "value": "balance", + "months": 1, + "days": 1, + }, + ) + ], + } + ) + + def create_config(self): + return self.env["riba.configuration"].create( + { + "name": "Subject To Collection", + "type": "sbf", + "bank_id": self.company_bank.id, + "acceptance_journal_id": self.bank_journal.id, + "credit_journal_id": self.bank_journal.id, + "acceptance_account_id": self.sbf_effects.id, + "credit_account_id": self.riba_account.id, + "bank_account_id": self.bank_account.id, + "bank_expense_account_id": self.expenses_account.id, + "past_due_journal_id": self.bank_journal.id, + "overdue_effects_account_id": self.past_due_account.id, + "protest_charge_account_id": self.expenses_account.id, + } + ) diff --git a/l10n_it_riba/tests/test_menu.py b/l10n_it_riba/tests/test_menu.py new file mode 100644 index 000000000000..c2b734ed3c0c --- /dev/null +++ b/l10n_it_riba/tests/test_menu.py @@ -0,0 +1,51 @@ +# Copyright 2022 Simone Rubino - Agile Business Group +# Copyright 2023 Simone Rubino - Aion Tech +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo.tests import common + + +class TestRiBaCommon(common.TransactionCase): + def setUp(self): + super().setUp() + self.menu_model = self.env["ir.ui.menu"] + self.root_riba_menu = self.browse_ref("l10n_it_riba.menu_riba") + self.new_parent = self.browse_ref("base.menu_custom") + + def test_sibling_moved(self): + """Check that RiBa menu is moved when a sibling changes parent.""" + root_riba_parent_menu = self.root_riba_menu.parent_id + sibling_menu = self.menu_model.search( + [ + ("parent_id", "=", root_riba_parent_menu.id), + ], + limit=1, + ) + # pre-condition: menus have same parent + self.assertEqual(root_riba_parent_menu, sibling_menu.parent_id) + + # Change sibling's parent + sibling_menu.parent_id = self.new_parent + + # Check that RiBa menu's parent has changed according to its sibling + self.assertEqual(self.root_riba_menu.parent_id, sibling_menu.parent_id) + self.assertNotEqual(self.root_riba_menu.parent_id, root_riba_parent_menu) + + def test_not_sibling_not_moved(self): + """Check that RiBa menu is not moved when a menu + that is not a sibling changes parent.""" + root_riba_parent_menu = self.root_riba_menu.parent_id + not_sibling_menu = self.menu_model.search( + [ + ("parent_id", "!=", root_riba_parent_menu.id), + ], + limit=1, + ) + # pre-condition: menus have different parent + self.assertNotEqual(root_riba_parent_menu, not_sibling_menu.parent_id) + + # Change not-sibling menu's parent + not_sibling_menu.parent_id = self.new_parent + + # Check RiBa menu's parent is not changed + self.assertEqual(self.root_riba_menu.parent_id, root_riba_parent_menu) diff --git a/l10n_it_riba/tests/test_riba.py b/l10n_it_riba/tests/test_riba.py new file mode 100644 index 000000000000..84eb54e6cd67 --- /dev/null +++ b/l10n_it_riba/tests/test_riba.py @@ -0,0 +1,535 @@ +# Author: Andrea Gallina +# © 2015 Apulia Software srl +# Copyright (C) 2017 Lorenzo Battistini - Agile Business Group +# Copyright 2023 Simone Rubino - Aion Tech +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +import base64 +import os + +from odoo.tools import config + +from . import riba_common + + +class TestInvoiceDueCost(riba_common.TestRibaCommon): + def test_add_due_cost(self): + # ---- Set Service in Company Config + self.invoice.company_id.due_cost_service_id = self.service_due_cost.id + # ---- Validate Invoice + self.invoice.action_post() + # ---- Test Invoice has 2 line + self.assertEqual(len(self.invoice.invoice_line_ids), 3) + # ---- Test Invoice Line for service cost + self.assertEqual( + self.invoice.invoice_line_ids[1].product_id.id, self.service_due_cost.id + ) + # ---- Test Invoice Line for service cost + self.assertEqual( + self.invoice.invoice_line_ids[2].product_id.id, self.service_due_cost.id + ) + # ---- Test Cost line is equal to 10.00 + self.assertEqual( + ( + self.invoice.invoice_line_ids[1].price_unit + + self.invoice.invoice_line_ids[2].price_unit + ), + 10.00, + ) + new_inv = self.invoice.copy() + self.assertEqual(len(new_inv.invoice_line_ids), 1) + + def test_not_add_due_cost(self): + # create 2 invoice for partner in same month on the second one no + # collection fees line expected + # ---- Set Service in Company Config + self.invoice.company_id.due_cost_service_id = self.service_due_cost.id + # ---- Validate Invoice + self.invoice.action_post() + + self.invoice2.invoice_payment_term_id = self.payment_term2 + self.invoice2.action_post() + # ---- Test Invoice has 1 line, no collection fees added because it's added on + # ---- first due date for partner + self.assertEqual(len(self.invoice2.invoice_line_ids), 1) + + def test_delete_due_cost_line(self): + # ---- Set Service in Company Config + self.invoice.company_id.due_cost_service_id = self.service_due_cost.id + # ---- Validate Invoice + self.invoice.action_post() + # ---- Cancel Invoice + self.invoice.button_cancel() + self.invoice.button_draft() + # ---- Set to Draft + # Collection fees line has been unlink + self.assertEqual(len(self.invoice.invoice_line_ids), 1) + + def test_riba_flow(self): + self.partner.property_account_receivable_id = self.account_rec1_id.id + recent_date = ( + self.env["account.move"] + .search([("invoice_date", "!=", False)], order="invoice_date desc", limit=1) + .invoice_date + ) + invoice = self.env["account.move"].create( + { + "invoice_date": recent_date, + "move_type": "out_invoice", + "journal_id": self.sale_journal.id, + "partner_id": self.partner.id, + "invoice_payment_term_id": self.account_payment_term_riba.id, + "invoice_line_ids": [ + ( + 0, + 0, + { + "name": "product1", + "product_id": self.product1.id, + "quantity": 1.0, + "price_unit": 450.00, + "account_id": self.sale_account.id, + "tax_ids": [[6, 0, []]], + }, + ) + ], + } + ) + invoice._onchange_riba_partner_bank_id() + invoice.action_post() + riba_move_line_id = False + for move_line in invoice.line_ids: + if move_line.account_id.id == self.account_rec1_id.id: + riba_move_line_id = move_line.id + line_ids = self.move_line_model.search( + [ + "&", + "|", + ("riba", "=", "True"), + ("past_due_invoice_ids", "!=", False), + ("account_type", "=", "asset_receivable"), + ("reconciled", "=", False), + ("slip_line_ids", "=", False), + ("move_id", "=", invoice.id), + ] + ) + self.assertEqual(len(line_ids), 1) + self.assertEqual(line_ids[0].id, move_line.id) + self.assertTrue(riba_move_line_id) + + # issue wizard + wizard_riba_issue = self.env["riba.issue"].create( + {"configuration_id": self.riba_config.id} + ) + action = wizard_riba_issue.with_context( + active_ids=[riba_move_line_id] + ).create_list() + riba_list_id = action and action["res_id"] or False + riba_list = self.slip_model.browse(riba_list_id) + riba_list.confirm() + self.assertEqual(riba_list.state, "accepted") + self.assertEqual(invoice.state, "posted") + + # Se la compute non viene invocata il test fallisce + riba_list._compute_acceptance_move_ids() + self.assertEqual(len(riba_list.acceptance_move_ids), 1) + self.assertEqual(len(riba_list.payment_ids), 0) + + # I print the RiBa slip report + docargs = { + "doc_ids": riba_list.ids, + "doc_model": "riba.slip", + "docs": self.env["riba.slip"].browse(riba_list.ids), + } + data = self.env["ir.qweb"]._render("l10n_it_riba.slip_qweb", docargs) + if config.get("test_report_directory"): + open( + os.path.join(config["test_report_directory"], "riba-list." + format), + "wb+", + ).write(data) + + # credit wizard + credit_wizard = ( + self.env["riba.credit"] + .with_context( + active_model="riba.slip", + active_ids=[riba_list_id], + active_id=riba_list_id, + ) + .create( + { + "bank_amount": 445, + "expense_amount": 5, + } + ) + ) + credit_wizard.create_move() + self.assertEqual(riba_list.state, "credited") + + bank_credit_line = False + for credit_line in riba_list.credit_move_id.line_ids: + if credit_line.account_id.id == self.bank_account.id: + bank_credit_line = credit_line + break + self.assertTrue(bank_credit_line) + + # register the bank statement with the bank credit + # st = self.env['account.bank.statement'].create({ + # 'journal_id': self.bank_journal.id, + # 'name': 'bank statement', + # 'line_ids': [(0, 0, { + # 'name': 'RiBa', + # 'amount': 445, + # })] + # }) + + # must be possible to close the bank statement line with the + # credit journal item generated by RiBa + # move_lines_for_rec=st.line_ids[0].get_move_lines_for_reconciliation() + # self.assertTrue( + # bank_credit_line.id in [l.id for l in move_lines_for_rec]) + # + # bank notifies cash in + bank_move = self.move_model.create( + { + "journal_id": self.bank_journal.id, + "line_ids": [ + ( + 0, + 0, + { + "partner_id": self.partner.id, + "account_id": self.sbf_effects.id, + "credit": 450, + "debit": 0, + "name": "sbf effects", + }, + ), + ( + 0, + 0, + { + "partner_id": self.partner.id, + "account_id": self.riba_account.id, + "credit": 0, + "debit": 450, + "name": "Banca conto ricevute bancarie", + }, + ), + ], + } + ) + bank_move.action_post() + to_reconcile = self.env["account.move.line"] + line_set = bank_move.line_ids | riba_list.acceptance_move_ids[0].line_ids + for line in line_set: + if line.account_id.id == self.sbf_effects.id: + to_reconcile |= line + self.assertEqual(len(to_reconcile), 2) + to_reconcile.reconcile() + # refresh otherwise riba_list.payment_ids is not recomputed + riba_list.env.invalidate_all() + self.assertEqual(riba_list.state, "paid") + self.assertEqual(len(riba_list.payment_ids), 1) + self.assertEqual(len(riba_list.line_ids), 1) + self.assertEqual(riba_list.line_ids[0].state, "paid") + to_reconcile.remove_move_reconcile() + self.assertEqual(riba_list.state, "credited") + self.assertEqual(riba_list.line_ids[0].state, "credited") + + def test_past_due_riba(self): + # create another invoice to test past due RiBa + self.partner.property_account_receivable_id = self.account_rec1_id.id + recent_date = ( + self.env["account.move"] + .search([("invoice_date", "!=", False)], order="invoice_date desc", limit=1) + .invoice_date + ) + invoice = self.env["account.move"].create( + { + "invoice_date": recent_date, + "move_type": "out_invoice", + "journal_id": self.sale_journal.id, + "partner_id": self.partner.id, + "invoice_payment_term_id": self.account_payment_term_riba.id, + "invoice_line_ids": [ + ( + 0, + 0, + { + "name": "product1", + "product_id": self.product1.id, + "quantity": 1.0, + "price_unit": 100.00, + "account_id": self.sale_account.id, + "tax_ids": [[6, 0, []]], + }, + ) + ], + } + ) + invoice._onchange_riba_partner_bank_id() + invoice.action_post() + for move_line in invoice.line_ids: + if move_line.account_id.id == self.account_rec1_id.id: + riba_move_line_id = move_line.id + # issue wizard + wizard_riba_issue = self.env["riba.issue"].create( + {"configuration_id": self.riba_config.id} + ) + action = wizard_riba_issue.with_context( + active_ids=[riba_move_line_id] + ).create_list() + riba_list_id = action and action["res_id"] or False + riba_list = self.slip_model.browse(riba_list_id) + riba_list.confirm() + self.assertEqual(riba_list.state, "accepted") + self.assertEqual(invoice.state, "posted") + # credit wizard + credit_wizard = ( + self.env["riba.credit"] + .with_context( + active_model="riba.slip", + active_ids=[riba_list_id], + active_id=riba_list_id, + ) + .create( + { + "bank_amount": 95, + "expense_amount": 5, + } + ) + ) + credit_wizard.create_move() + self.assertEqual(riba_list.state, "credited") + + # past due wizard + past_due_wizard = ( + self.env["riba.past_due"] + .with_context( + active_model="riba.slip.line", + active_ids=[riba_list.line_ids[0].id], + active_id=riba_list.line_ids[0].id, + ) + .create( + { + "bank_amount": 102, + "expense_amount": 2, + } + ) + ) + past_due_wizard.create_move() + self.assertEqual(riba_list.state, "past_due") + self.assertEqual(len(riba_list.line_ids), 1) + self.assertEqual(riba_list.line_ids[0].state, "past_due") + self.assertTrue(invoice.past_due_move_line_ids) + + # Se la compute non viene invocata il test fallisce + riba_list._compute_past_due_move_ids() + self.assertEqual(len(riba_list.past_due_move_ids), 1) + bank_past_due_line = False + for past_due_line in riba_list.past_due_move_ids[0].line_ids: + if past_due_line.account_id.id == self.bank_account.id: + bank_past_due_line = past_due_line + break + self.assertTrue(bank_past_due_line) + + # register the bank statement with the bank credit + # st = self.env['account.bank.statement'].create({ + # 'journal_id': self.bank_journal.id, + # 'name': 'bank statement', + # 'line_ids': [(0, 0, { + # 'name': 'RiBa', + # 'amount': -102, + # })] + # }) + # must be possible to close the bank statement line with the + # past due journal item generated by RiBa + # move_lines_for_rec=st.line_ids[0].get_move_lines_for_reconciliation() + # self.assertTrue( + # bank_past_due_line.id in [l.id for l in move_lines_for_rec]) + + riba_list.line_ids[0].past_due_move_id.line_ids.remove_move_reconcile() + self.assertEqual(riba_list.state, "credited") + self.assertEqual(len(riba_list.line_ids), 1) + self.assertEqual(riba_list.line_ids[0].state, "credited") + + def test_riba_fatturapa(self): + self.partner.property_account_receivable_id = self.account_rec1_id.id + recent_date = ( + self.env["account.move"] + .search([("invoice_date", "!=", False)], order="invoice_date desc", limit=1) + .invoice_date + ) + invoice = self.env["account.move"].create( + { + "invoice_date": recent_date, + "move_type": "out_invoice", + "journal_id": self.sale_journal.id, + "partner_id": self.partner.id, + "invoice_payment_term_id": self.account_payment_term_riba.id, + "invoice_line_ids": [ + ( + 0, + 0, + { + "name": "product1", + "product_id": self.product1.id, + "quantity": 1.0, + "price_unit": 450.00, + "account_id": self.sale_account.id, + "tax_ids": [[6, 0, self.tax_22.ids]], + }, + ) + ], + "related_documents": [ + ( + 0, + 0, + { + "type": "order", + "name": "SO1232", + "cig": "7987210EG5", + "cup": "H71N17000690124", + }, + ) + ], + } + ) + invoice._onchange_riba_partner_bank_id() + invoice.action_post() + # issue wizard + riba_move_line_id = invoice.line_ids.filtered( + lambda x: x.account_id == self.account_rec1_id + ) + wizard_riba_issue = self.env["riba.issue"].create( + {"configuration_id": self.riba_config.id} + ) + action = wizard_riba_issue.with_context( + active_ids=[riba_move_line_id.id] + ).create_list() + riba_list_id = action and action["res_id"] or False + riba_list = self.slip_model.browse(riba_list_id) + riba_list.confirm() + self.assertEqual(riba_list.line_ids[0].cig, "7987210EG5") + self.assertEqual(riba_list.line_ids[0].cup, "H71N17000690124") + wizard_riba_export = self.env["riba.file.export"].create({}) + wizard_riba_export.with_context(active_ids=[riba_list.id]).act_getfile() + riba_txt = base64.decodebytes(wizard_riba_export.riba_txt) + self.assertTrue(b"CIG: 7987210EG5 CUP: H71N17000690124" in riba_txt) + + def test_riba_fatturapa_group(self): + self.partner.group_riba = True + self.partner.property_account_receivable_id = self.account_rec1_id.id + recent_date = ( + self.env["account.move"] + .search([("invoice_date", "!=", False)], order="invoice_date desc", limit=1) + .invoice_date + ) + invoice = self.env["account.move"].create( + { + "invoice_date": recent_date, + "move_type": "out_invoice", + "journal_id": self.sale_journal.id, + "partner_id": self.partner.id, + "invoice_payment_term_id": self.account_payment_term_riba.id, + "invoice_line_ids": [ + ( + 0, + 0, + { + "name": "product1", + "product_id": self.product1.id, + "quantity": 1.0, + "price_unit": 450.00, + "account_id": self.sale_account.id, + "tax_ids": [[6, 0, self.tax_22.ids]], + }, + ) + ], + "related_documents": [ + ( + 0, + 0, + { + "type": "order", + "name": "SO1232", + "cig": "7987210EG5", + "cup": "H71N17000690124", + }, + ) + ], + } + ) + invoice._onchange_riba_partner_bank_id() + invoice.action_post() + invoice1 = self.env["account.move"].create( + { + "invoice_date": recent_date, + "move_type": "out_invoice", + "journal_id": self.sale_journal.id, + "partner_id": self.partner.id, + "invoice_payment_term_id": self.account_payment_term_riba.id, + "invoice_line_ids": [ + ( + 0, + 0, + { + "name": "product1", + "product_id": self.product1.id, + "quantity": 1.0, + "price_unit": 450.00, + "account_id": self.sale_account.id, + "tax_ids": [[6, 0, self.tax_22.ids]], + }, + ) + ], + "related_documents": [ + ( + 0, + 0, + { + "type": "order", + "name": "SO1232", + "cig": "7987210EG5", + "cup": "H71N17000690125", + }, + ) + ], + } + ) + invoice1._onchange_riba_partner_bank_id() + invoice1.action_post() + # issue wizard + riba_move_line_id = invoice.line_ids.filtered( + lambda x: x.account_id == self.account_rec1_id + ) + riba_move_line1_id = invoice1.line_ids.filtered( + lambda x: x.account_id == self.account_rec1_id + ) + wizard_riba_issue = self.env["riba.issue"].create( + {"configuration_id": self.riba_config.id} + ) + action = wizard_riba_issue.with_context( + active_ids=[riba_move_line_id.id, riba_move_line1_id.id] + ).create_list() + riba_list_id = action and action["res_id"] or False + riba_list = self.slip_model.browse(riba_list_id) + riba_list.confirm() + self.assertTrue(len(riba_list.line_ids), 2) + wizard_riba_export = self.env["riba.file.export"].create({}) + wizard_riba_export.with_context(active_ids=[riba_list.id]).act_getfile() + riba_txt = base64.decodebytes(wizard_riba_export.riba_txt) + self.assertTrue(b"CIG: 7987210EG5 CUP: H71N17000690124" in riba_txt) + self.assertTrue(b"CIG: 7987210EG5 CUP: H71N17000690125" in riba_txt) + + def test_riba_presentation(self): + total_amount = 200000 + wizard_riba_issue = self.env["presentation.riba.issue"].create( + {"presentation_amount": total_amount} + ) + domain = wizard_riba_issue.action_presentation_riba()["domain"] + total_issue_amount = sum( + self.env["account.move.line"].search(domain).mapped("amount_residual") + ) + self.assertTrue(total_amount - total_issue_amount >= 0) diff --git a/l10n_it_riba/views/account_config_view.xml b/l10n_it_riba/views/account_config_view.xml new file mode 100644 index 000000000000..e8fcb96abb52 --- /dev/null +++ b/l10n_it_riba/views/account_config_view.xml @@ -0,0 +1,46 @@ + + + + + view_account_config_settings_riba + res.config.settings + + +
+
+
+
+ RiBa Collection Fees + +
+ Product used as Service for RiBa Collection Fees +
+
+
+
+
+
+
+
+ + + diff --git a/l10n_it_riba/views/account_view.xml b/l10n_it_riba/views/account_view.xml new file mode 100644 index 000000000000..e011093b2f63 --- /dev/null +++ b/l10n_it_riba/views/account_view.xml @@ -0,0 +1,204 @@ + + + + + + + + + account.riba.add.text.field + account.payment.term + + + + + + + + + + res.bank.add.text.field + res.bank + + + + + + + + + res.partner.bank.form.sia.inherit + res.partner.bank + + + + + + + + + + + + RiBa Issue + account.move.line + + + + + + + + + + + + + + + + + + + + + + RiBa filter + account.move.line + + + + + + + + + + + + + + + + + + RiBa Issue + account.move.line + tree,form + + + ['&','|',('riba','=','True'),('past_due_invoice_ids','!=',False),('account_id.account_type','=','asset_receivable')] + {'search_default_da_emettere':1, 'search_default_to_reconcile':1} + + + + + + + + + account.move.form + account.move + + + + + + + + + + + + account.move.tree + account.move + + + + + + + + + + Past Due Invoices + account.move + tree,form,graph + + [('move_type','=','out_invoice'), ('past_due_move_line_ids', '!=', False)] + {'default_type':'out_invoice', 'move_type':'out_invoice', 'journal_type': 'sale', 'search_default_past_due': True} + + + + + + + tree + + + + + + form + + + + + + diff --git a/l10n_it_riba/views/configuration_view.xml b/l10n_it_riba/views/configuration_view.xml new file mode 100644 index 000000000000..f86e3ee857cc --- /dev/null +++ b/l10n_it_riba/views/configuration_view.xml @@ -0,0 +1,83 @@ + + + + + + + + + riba.configuration.form + riba.configuration + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + RiBa - Configuration + riba.configuration + tree,form + + + + + + + +
diff --git a/l10n_it_riba/views/partner_view.xml b/l10n_it_riba/views/partner_view.xml new file mode 100644 index 000000000000..056168977bc2 --- /dev/null +++ b/l10n_it_riba/views/partner_view.xml @@ -0,0 +1,24 @@ + + + + + + + + + res.parner.form.riba + res.partner + + + + + + + + + + + diff --git a/l10n_it_riba/views/riba_detail_view.xml b/l10n_it_riba/views/riba_detail_view.xml new file mode 100644 index 000000000000..eba2d824bc78 --- /dev/null +++ b/l10n_it_riba/views/riba_detail_view.xml @@ -0,0 +1,92 @@ + + + + + riba.slip.line.filter + riba.slip.line + + + + + + + + + + + + + + + + + riba.slip.line.tree + riba.slip.line + + + + + + + + + + + + + +