19.0 vanilla

This commit is contained in:
Ernad Husremovic 2026-03-09 09:31:28 +01:00
parent ff721d030e
commit 7721452493
1826 changed files with 124775 additions and 274114 deletions

View file

@ -45,38 +45,15 @@ pip install odoo-bringout-oca-ocb-l10n_latam_check
## Dependencies
This addon depends on:
- account_check_printing
- account
- base_vat
## Manifest Information
- **Name**: Third Party and Deferred/Electronic Checks Management
- **Version**: 1.0.0
- **Category**: Accounting/Localizations
- **License**: LGPL-3
- **Installable**: True
## Source
Based on [OCA/OCB](https://github.com/OCA/OCB) branch 16.0, addon `l10n_latam_check`.
- Repository: https://github.com/OCA/OCB
- Branch: 19.0
- Path: addons/l10n_latam_check
## License
This package maintains the original LGPL-3 license from the upstream Odoo project.
## Documentation
- Overview: doc/OVERVIEW.md
- Architecture: doc/ARCHITECTURE.md
- Models: doc/MODELS.md
- Controllers: doc/CONTROLLERS.md
- Wizards: doc/WIZARDS.md
- Reports: doc/REPORTS.md
- Security: doc/SECURITY.md
- Install: doc/INSTALL.md
- Usage: doc/USAGE.md
- Configuration: doc/CONFIGURATION.md
- Dependencies: doc/DEPENDENCIES.md
- Troubleshooting: doc/TROUBLESHOOTING.md
- FAQ: doc/FAQ.md
This package preserves the original LGPL-3 license.

View file

@ -42,21 +42,19 @@ There are 2 main Payment Methods additions:
""",
'author': 'ADHOC SA',
'license': 'LGPL-3',
'images': [
],
'depends': [
'account_check_printing',
'account',
'base_vat',
],
'data': [
'data/account_payment_method_data.xml',
'wizards/l10n_latam_payment_mass_transfer_views.xml',
'security/ir.model.access.csv',
'security/security.xml',
'views/account_payment_view.xml',
'views/account_journal_view.xml',
'views/l10n_latam_check_view.xml',
'views/report_payment_receipt_templates.xml',
'wizards/account_payment_register_views.xml',
],
'installable': True,
'auto_install': False,
'application': False,
}

View file

@ -1,23 +1,40 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo noupdate="1">
<record id="account_payment_method_own_checks" model="account.payment.method">
<field name="name">Own Checks</field>
<field name="name@es_419">Cheques Propios</field>
<field name="code">own_checks</field>
<field name="payment_type">outbound</field>
</record>
<!-- third party checks -->
<record id="account_payment_method_new_third_party_checks" model="account.payment.method">
<field name="name">New Third Party Checks</field>
<field name="name@es_419">Nuevo cheque de Terceros Existente</field>
<field name="code">new_third_party_checks</field>
<field name="payment_type">inbound</field>
</record>
<record id="account_payment_method_in_third_party_checks" model="account.payment.method">
<field name="name">Existing Third Party Checks</field>
<field name="name@es_419">Cheque de Terceros Existente</field>
<field name="code">in_third_party_checks</field>
<field name="payment_type">inbound</field>
</record>
<record id="account_payment_method_out_third_party_checks" model="account.payment.method">
<field name="name">Existing Third Party Checks</field>
<field name="name@es_419">Cheque de Terceros Existente</field>
<field name="code">out_third_party_checks</field>
<field name="payment_type">outbound</field>
</record>
<record id="account_payment_method_return_third_party_checks" model="account.payment.method">
<field name="name">Return Third Party Checks</field>
<field name="name@es_419">Cheques de terceros devueltos</field>
<field name="code">return_third_party_checks</field>
<field name="payment_type">outbound</field>
</record>
</odoo>

View file

@ -1,442 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * l10n_latam_check
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0+e\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-22 17:42+0000\n"
"PO-Revision-Date: 2023-11-22 17:42+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_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
#, python-format
msgid "(Check %s)"
msgstr "(Cheque %s)"
#. module: l10n_latam_check
#: model:ir.model.fields,help:l10n_latam_check.field_account_journal__l10n_latam_manual_checks
#: model:ir.model.fields,help:l10n_latam_check.field_account_payment__l10n_latam_manual_checks
#: model:ir.model.fields,help:l10n_latam_check.field_account_payment_register__l10n_latam_manual_checks
msgid ""
"* Allows putting numbers manually\n"
"* Enables Check Cash-In Date feature\n"
"* Disables printing"
msgstr ""
"* Se le permite poner números manualmente\n"
"* Nuevo campo para fecha de pago (Fecha de Pago del Cheque)\n"
"* La impresión esta deshabilitada"
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_form_inherited
msgid ""
"<span attrs=\"{'invisible': [('l10n_latam_check_current_journal_id', '!=', "
"False)]}\">Not in Wallet</span>"
msgstr ""
"<span attrs=\"{'invisible': [('l10n_latam_check_current_journal_id', '!=', "
"False)]}\">No en Mano</span>"
#. module: l10n_latam_check
#: model:ir.model,name:l10n_latam_check.model_account_chart_template
msgid "Account Chart Template"
msgstr "Plantilla de Plan de Cuentas"
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/wizards/l10n_latam_payment_mass_transfer.py:0
#, python-format
msgid "All selected checks must be on the same journal and on hand"
msgstr ""
"Todos los cheques seleccionados deben estan en el mismo Diario y a mano"
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/wizards/l10n_latam_payment_mass_transfer.py:0
#, python-format
msgid "All the selected checks must be posted"
msgstr "Todos los cheques seleccionados deben estar publicados"
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_l10n_latam_payment_mass_transfer_form
msgid "Cancel"
msgstr "Cancelar"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment__l10n_latam_check_id
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment_register__l10n_latam_check_id
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_mass_transfer__check_ids
msgid "Check"
msgstr "Cheque"
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
#, python-format
msgid ""
"Check \"%s\" is not anymore in journal \"%s\", it seems it has been moved by"
" another payment."
msgstr ""
"Cheque \"%s\" ya no se encuentra en el diario \"%s\", parece que se movió en"
" otro pago."
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
#, python-format
msgid "Check %s delivered"
msgstr "Cheque %s entregado"
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
#, python-format
msgid "Check %s received"
msgstr "Cheque %s recibido"
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
#, python-format
msgid "Check '%s' is on journal '%s', it can't be received it again"
msgstr "Cheque '%s' está en el diario '%s', no podemos recibirlo nuevamente"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment__l10n_latam_check_bank_id
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment_register__l10n_latam_check_bank_id
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_form_inherited
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_register_form
msgid "Check Bank"
msgstr "Banco del Cheque"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment__l10n_latam_check_payment_date
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment_register__l10n_latam_check_payment_date
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_search
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_third_party_checks_search
msgid "Check Cash-In Date"
msgstr "Fecha de Pago del Cheque"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment__l10n_latam_check_current_journal_id
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_form_inherited
msgid "Check Current Journal"
msgstr "Diario del Cheque"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment__l10n_latam_check_issuer_vat
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment_register__l10n_latam_check_issuer_vat
msgid "Check Issuer VAT"
msgstr "CUIT Emisor del Cheque"
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_form_inherited
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_register_form
msgid "Check Issuer Vat"
msgstr "CUIT Emisor del Cheque"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment_register__l10n_latam_check_number
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_form_inherited
msgid "Check Number"
msgstr "Número de Cheque"
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment__l10n_latam_check_operation_ids
#, python-format
msgid "Check Operations"
msgstr "Operaciones del Cheque"
#. module: l10n_latam_check
#: model:ir.actions.act_window,name:l10n_latam_check.action_view_l10n_latam_payment_mass_transfer
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_third_party_check_tree
msgid "Check Transfer"
msgstr "Transferir Cheque"
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_journal_tree
msgid "Checks Management"
msgstr "Manejo de Cheques"
#. module: l10n_latam_check
#: model:ir.model,name:l10n_latam_check.model_l10n_latam_payment_mass_transfer
msgid "Checks Mass Transfers"
msgstr "Transferencia Masiva de Cheques"
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_third_party_checks_search
msgid "Checks on hand"
msgstr "Cheque en mano"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_mass_transfer__company_id
msgid "Company"
msgstr "Compañía"
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_l10n_latam_payment_mass_transfer_form
msgid "Create Transfers"
msgstr "Crear Transferencia"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_mass_transfer__create_uid
msgid "Created by"
msgstr "Creado por"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_mass_transfer__create_date
msgid "Created on"
msgstr "Creado el"
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_third_party_checks_search
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_third_party_check_tree
msgid "Current Journal"
msgstr "Diario Actual"
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_third_party_check_operations_tree
msgid "Customer"
msgstr "Cliente"
#. module: l10n_latam_check
#: model:ir.model.fields,help:l10n_latam_check.field_account_payment__l10n_latam_check_payment_date
#: model:ir.model.fields,help:l10n_latam_check.field_account_payment_register__l10n_latam_check_payment_date
msgid "Date from when you can cash in the check, turn the check into cash"
msgstr ""
"Fecha a partir de la cual puedes cobrar el checque, convertirlo en dinero"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_mass_transfer__destination_journal_id
msgid "Destination Journal"
msgstr "Diario de Destino"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_mass_transfer__display_name
msgid "Display Name"
msgstr "Nombre Mostrado"
#. module: l10n_latam_check
#: model:account.payment.method,name:l10n_latam_check.account_payment_method_in_third_party_checks
#: model:account.payment.method,name:l10n_latam_check.account_payment_method_out_third_party_checks
msgid "Existing Third Party Checks"
msgstr "Cheque de Terceros Existente"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_mass_transfer__id
msgid "ID"
msgstr ""
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
#, python-format
msgid ""
"It seems you're trying to move a check with a date (%s) prior to last "
"operation done with the check (%s). This may be wrong, please double check "
"it. By continue, the last operation on the check will remain being %s"
msgstr ""
"Parece que quieres mover un cheque con fecha (%s) previo a la última "
"operación realizada con el cheque (%s). Esto puede ser incorrecto, por favor"
" chequear. De continuar, la última operación en el cheque continuará siendo "
"%s"
#. module: l10n_latam_check
#: model:ir.model,name:l10n_latam_check.model_account_journal
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_mass_transfer__journal_id
msgid "Journal"
msgstr "Diario"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment__l10n_latam_check_number
msgid "L10N Latam Check Number"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment__l10n_latam_check_warning_msg
msgid "L10N Latam Check Warning Msg"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_mass_transfer____last_update
msgid "Last Modified on"
msgstr "Última Modificación el"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_mass_transfer__write_uid
msgid "Last Updated by"
msgstr "Última Actualización por"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_mass_transfer__write_date
msgid "Last Updated on"
msgstr "Última Actualización el"
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_journal.py:0
#, python-format
msgid ""
"Manual checks (electronic/deferred) can't be used together with check manual"
" sequencing (check printing functionality), please choose one or the other. "
"Journals: %s"
msgstr ""
"Cheques Manuales (electrónicos/diferidos) no pueden ser usados junto con "
"secuencia manual (funcionalidad de impresion de cheques), Por favor "
"seleciona una u otra. Diarios: %s"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_mass_transfer__communication
msgid "Memo"
msgstr ""
#. module: l10n_latam_check
#: model:account.payment.method,name:l10n_latam_check.account_payment_method_new_third_party_checks
msgid "New Third Party Checks"
msgstr "Nuevo Cheque de Tercero"
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
#, python-format
msgid ""
"Other checks were found with same number, issuer and bank. Please double "
"check you are not encoding the same check more than once. List of other "
"payments/checks: %s"
msgstr ""
"Otros cheques fueron encontrados con el mismo número, emisor y banco. Por "
"favor chquear que no estas ingresando el mismo cheque más de una vez. Lista "
"de otros pagos/cheques: %s"
#. module: l10n_latam_check
#: model:ir.actions.act_window,name:l10n_latam_check.action_own_check
#: model:ir.ui.menu,name:l10n_latam_check.menu_own_check
msgid "Own Checks"
msgstr "Cheques Propios"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_mass_transfer__payment_date
msgid "Payment Date"
msgstr "Fecha de Pago"
#. module: l10n_latam_check
#: model:ir.model,name:l10n_latam_check.model_account_payment_method
msgid "Payment Methods"
msgstr "Métodos de pago"
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/wizards/l10n_latam_payment_mass_transfer.py:0
#: model:ir.model,name:l10n_latam_check.model_account_payment
#, python-format
msgid "Payments"
msgstr "Pagos"
#. module: l10n_latam_check
#: model:ir.model,name:l10n_latam_check.model_account_payment_register
msgid "Register Payment"
msgstr "Registrar pago"
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_chart_template.py:0
#, python-format
msgid "Rejected Third Party Checks"
msgstr "Cheques de Terceros Rechazados"
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
#, python-format
msgid "Selected check \"%s\" is not posted"
msgstr "Cheque seleccionado \"%s\" no está publicado"
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
#, python-format
msgid ""
"The amount of the payment (%s) does not match the amount of the selected "
"check (%s). Please try to deselect and select the check again."
msgstr ""
"El monto del pago (%s) no coincide con el monto del cheque seleccionado "
"(%s). Por favor intente deseleccionar y seleccionar nuevamente el cheque"
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
#, python-format
msgid ""
"The check(s) '%s' is already used on another payment. Please select another "
"check or deselect the check on this payment."
msgstr ""
"El/Los cheque/s es/son usado/s en otro pago. Por favor seleccione otro "
"cheque o deseleccione el cheque en este pago."
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
#, python-format
msgid ""
"The currency of the payment (%s) and the currency of the check (%s) must be "
"the same."
msgstr ""
"La moneda del pago (%s) y la moneda del cheque (%s) debe ser la misma."
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/wizards/l10n_latam_payment_mass_transfer.py:0
#, python-format
msgid ""
"The register payment wizard should only be called on account.payment "
"records."
msgstr ""
"El wizard del pago registrado solo debería ser llamado en registros del "
"account.payment."
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_chart_template.py:0
#: model:ir.actions.act_window,name:l10n_latam_check.action_third_party_check
#: model:ir.ui.menu,name:l10n_latam_check.menu_third_party_check
#, python-format
msgid "Third Party Checks"
msgstr "Cheques de terceros"
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
#, python-format
msgid "Unmark sent is not implemented for electronic or deferred checks"
msgstr ""
"Desmarcar enviado no está implementado para cheques electronicos y diferidos"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_journal__l10n_latam_manual_checks
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment__l10n_latam_manual_checks
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment_register__l10n_latam_manual_checks
msgid "Use electronic and deferred checks"
msgstr "Usa cheques electronicos o diferidos"
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_register_form
msgid ""
"You can't use checks when paying invoices of different partners or same "
"partner without grouping"
msgstr ""
"No puede utilizar cheques cuando esta pagando facturas de diferentes "
"contactos o mismo contacto sin agrupar"
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_form_inherited
msgid "⇒ Check Operations"
msgstr "⇒ Operaciones del Cheque"

View file

@ -0,0 +1,863 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * l10n_latam_check
#
# Weblate <noreply-mt-weblate@weblate.org>, 2025.
# "Patricia Gutiérrez (pagc)" <pagc@odoo.com>, 2025.
# "Fernanda Alvarez (mfar)" <mfar@odoo.com>, 2026.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0+e\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-12-30 19:08+0000\n"
"PO-Revision-Date: 2026-03-07 10:02+0000\n"
"Last-Translator: \"Fernanda Alvarez (mfar)\" <mfar@odoo.com>\n"
"Language-Team: Spanish (Latin America) <https://translate.odoo.com/projects/"
"odoo-19-l10n/l10n_latam_check/es_419/>\n"
"Language: es_419\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.16.1\n"
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.report_payment_receipt_document
msgid "<span>Amount</span>"
msgstr "<span>Importe</span>"
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.report_payment_receipt_document
msgid "<span>Bank</span>"
msgstr "<span>Banco</span>"
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.report_payment_receipt_document
msgid "<span>Check Number</span>"
msgstr "<span>Número de cheque</span>"
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.report_payment_receipt_document
msgid "<span>Issuer VAT</span>"
msgstr "<span>Número de identificación fiscal del emisor</span>"
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.l10n_latam_check_view_form
msgid "<span>Journal Entry</span>"
msgstr "<span>Asiento Contable</span>"
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.l10n_latam_check_view_form
msgid "<span>Operations</span>"
msgstr "<span>Operaciones</span>"
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.report_payment_receipt_document
msgid "<span>Payment date</span>"
msgstr "<span>Fecha del pago</span>"
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.l10n_latam_check_view_form
msgid "<span>Payment</span>"
msgstr "<span>Pago</span>"
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.l10n_latam_check_view_form
msgid "<span>Reconciled move</span>"
msgstr "<span>Asiento conciliado</span>"
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
msgid ""
"A payment with any Third Party Check or Own Check payment methods needs an "
"outstanding account"
msgstr ""
"Un pago con cualquiera de los métodos de pago Cheque de terceros o Cheque "
"propio requiere una cuenta de liquidez"
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/wizards/l10n_latam_payment_mass_transfer.py:0
msgid "A second payment has been created: "
msgstr "Se ha creado un segundo pago: "
#. module: l10n_latam_check
#: model:ir.model,name:l10n_latam_check.model_account_chart_template
msgid "Account Chart Template"
msgstr "Plantilla de plan contable"
#. module: l10n_latam_check
#: model:ir.model,name:l10n_latam_check.model_l10n_latam_check
msgid "Account payment check"
msgstr "Cheque"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__message_needaction
msgid "Action Needed"
msgstr "Acción requerida"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__activity_ids
msgid "Activities"
msgstr "Actividades"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__activity_exception_decoration
msgid "Activity Exception Decoration"
msgstr "Decoración de la actividad de excepción"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__activity_state
msgid "Activity State"
msgstr "Estado de la actividad"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__activity_type_icon
msgid "Activity Type Icon"
msgstr "Ícono de tipo de actvidad"
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/wizards/l10n_latam_payment_mass_transfer.py:0
msgid "All selected checks must be on the same journal and on hand"
msgstr ""
"Todos los cheques seleccionados deben estan en el mismo Diario y a mano"
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/wizards/l10n_latam_payment_mass_transfer.py:0
msgid "All the selected checks must be posted"
msgstr "Todos los cheques seleccionados deben estar publicados"
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/wizards/l10n_latam_payment_mass_transfer.py:0
msgid "All the selected checks must use the same currency"
msgstr "Todos los cheques seleccionados deben ser de la misma moneda"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment__amount
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__amount
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_register_check__amount
msgid "Amount"
msgstr "Importe"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__message_attachment_count
msgid "Attachment Count"
msgstr "Nº de archivos adjuntos"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__bank_id
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_register_check__bank_id
msgid "Bank"
msgstr "Banco"
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/l10n_latam_check.py:0
msgid "Can't delete a check if payment is In Process!"
msgstr "No puedes eliminar un cheque si el pago está en proceso."
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_l10n_latam_payment_mass_transfer_form
msgid "Cancel"
msgstr "Cancelar"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_mass_transfer__check_ids
msgid "Check"
msgstr "Cheque"
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
msgid "Check %(check_number)s - %(suffix)s"
msgstr "Cheque %(check_number)s - %(suffix)s"
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/l10n_latam_check.py:0
msgid "Check Operations"
msgstr "Operaciones del Cheque"
#. module: l10n_latam_check
#: model:ir.actions.act_window,name:l10n_latam_check.action_view_l10n_latam_payment_mass_transfer
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_third_party_check_tree
msgid "Check Transfer"
msgstr "Transferir Cheque"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_move_line__l10n_latam_check_ids
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment__l10n_latam_new_check_ids
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment_register__l10n_latam_move_check_ids
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_form_inherited
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_register_form
msgid "Checks"
msgstr "Cheques"
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
msgid "Checks %s delivered"
msgstr "Cheques %s entregados"
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
msgid "Checks %s received"
msgstr "Cheques %s recibidos"
#. module: l10n_latam_check
#: model:ir.model,name:l10n_latam_check.model_l10n_latam_payment_mass_transfer
msgid "Checks Mass Transfers"
msgstr "Transferencia Masiva de Cheques"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment__l10n_latam_move_check_ids
msgid "Checks Operations"
msgstr "Cheques"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__payment_method_code
msgid "Code"
msgstr "Código"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__company_id
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_mass_transfer__company_id
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_register_check__company_id
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_search
msgid "Company"
msgstr "Compañía"
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_l10n_latam_payment_mass_transfer_form
msgid "Create Transfers"
msgstr "Crear Transferencia"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__create_uid
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_mass_transfer__create_uid
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_register_check__create_uid
msgid "Created by"
msgstr "Creado por"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__create_date
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_mass_transfer__create_date
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_register_check__create_date
msgid "Created on"
msgstr "Creado el"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__currency_id
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_register_check__currency_id
msgid "Currency"
msgstr "Moneda"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__current_journal_id
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_third_party_checks_search
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_third_party_check_tree
msgid "Current Journal"
msgstr "Diario Actual"
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_own_check_tree
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_third_party_check_operations_tree
msgid "Customer"
msgstr "Cliente"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__partner_id
msgid "Customer/Vendor"
msgstr "Cliente/Proveedor"
#. module: l10n_latam_check
#: model:ir.model.fields.selection,name:l10n_latam_check.selection__l10n_latam_check__issue_state__debited
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_search
msgid "Debited"
msgstr "Debitado"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_mass_transfer__destination_journal_id
msgid "Destination Journal"
msgstr "Diario de Destino"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_chart_template__display_name
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_journal__display_name
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_move__display_name
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_move_line__display_name
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment__display_name
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment_method__display_name
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment_register__display_name
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__display_name
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_mass_transfer__display_name
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_register_check__display_name
msgid "Display Name"
msgstr "Nombre Mostrado"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__message_follower_ids
msgid "Followers"
msgstr "Seguidores"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__message_partner_ids
msgid "Followers (Partners)"
msgstr "Seguidores (Contactos)"
#. module: l10n_latam_check
#: model:ir.model.fields,help:l10n_latam_check.field_l10n_latam_check__activity_type_icon
msgid "Font awesome icon e.g. fa-tasks"
msgstr "Icono de Font Awesome ej. fa-tasks"
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_search
msgid "Future Activities"
msgstr "Actividades futuras"
#. module: l10n_latam_check
#: model:ir.model.fields.selection,name:l10n_latam_check.selection__l10n_latam_check__issue_state__handed
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_search
msgid "Handed"
msgstr "Entregado"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__has_message
msgid "Has Message"
msgstr "Tiene un mensaje"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_chart_template__id
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_journal__id
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_move__id
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_move_line__id
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment__id
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment_method__id
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment_register__id
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__id
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_mass_transfer__id
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_register_check__id
msgid "ID"
msgstr "ID"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__activity_exception_icon
msgid "Icon"
msgstr "Icono"
#. module: l10n_latam_check
#: model:ir.model.fields,help:l10n_latam_check.field_l10n_latam_check__activity_exception_icon
msgid "Icon to indicate an exception activity."
msgstr "Icono para indicar una actividad de excepción."
#. module: l10n_latam_check
#: model:ir.model.fields,help:l10n_latam_check.field_l10n_latam_check__message_needaction
msgid "If checked, new messages require your attention."
msgstr ""
"Si se encuentra seleccionado, hay nuevos mensajes que requieren tu atención."
#. module: l10n_latam_check
#: model:ir.model.fields,help:l10n_latam_check.field_l10n_latam_check__message_has_error
#: model:ir.model.fields,help:l10n_latam_check.field_l10n_latam_check__message_has_sms_error
msgid "If checked, some messages have a delivery error."
msgstr "Si se encuentra seleccionado, algunos mensajes tienen error de envío."
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__message_is_follower
msgid "Is Follower"
msgstr "Es un seguidor"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__issue_state
msgid "Issue State"
msgstr "Estado de Emisión"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__issuer_vat
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_register_check__issuer_vat
msgid "Issuer Vat"
msgstr "CUIT del Emisor"
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
msgid ""
"It seems you're trying to move a check with a date (%(date)s) prior to last "
"operation done with the check (%(last_operation)s). This may be wrong, "
"please double check it. By continue, the last operation on the check will "
"remain being %(last_operation)s"
msgstr ""
"Parece que intentas mover un cheque con una fecha (%(date)s) anterior a la "
"última operación realizada con el cheque (%(last_operation)s). Esto puede "
"ser incorrecto, verifica la información. Si continúas, la última operación "
"del cheque seguirá siendo %(last_operation)s"
#. module: l10n_latam_check
#: model:ir.model,name:l10n_latam_check.model_account_journal
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__original_journal_id
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_mass_transfer__journal_id
msgid "Journal"
msgstr "Diario"
#. module: l10n_latam_check
#: model:ir.model,name:l10n_latam_check.model_account_move
msgid "Journal Entry"
msgstr "Asiento contable"
#. module: l10n_latam_check
#: model:ir.model,name:l10n_latam_check.model_account_move_line
msgid "Journal Item"
msgstr "Apunte contable"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment__l10n_latam_check_warning_msg
msgid "L10N Latam Check Warning Msg"
msgstr "Mensaje de advertencia del cheque"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__write_uid
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_mass_transfer__write_uid
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_register_check__write_uid
msgid "Last Updated by"
msgstr "Última actualización por"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__write_date
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_mass_transfer__write_date
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_register_check__write_date
msgid "Last Updated on"
msgstr "Última actualización el"
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_search
msgid "Late Activities"
msgstr "Actividades atrasadas"
#. module: l10n_latam_check
#: model:ir.model.fields,help:l10n_latam_check.field_l10n_latam_check__payment_method_line_id
msgid ""
"Manual: Pay or Get paid by any method outside of Odoo.\n"
"Payment Providers: Each payment provider has its own Payment Method. Request "
"a transaction on/to a card thanks to a payment token saved by the partner "
"when buying or subscribing online.\n"
"Check: Pay bills by check and print it from Odoo.\n"
"Batch Deposit: Collect several customer checks at once generating and "
"submitting a batch deposit to your bank. Module account_batch_payment is "
"necessary.\n"
"SEPA Credit Transfer: Pay in the SEPA zone by submitting a SEPA Credit "
"Transfer file to your bank. Module account_iso20022 is necessary.\n"
"SEPA Direct Debit: Get paid in the SEPA zone thanks to a mandate your "
"partner will have granted to you. Module account_iso20022 is necessary.\n"
"U.S. ISO20022: Pay in the US by submitting an ISO20022 file to your bank. "
"Module account_iso20022 is necessary.\n"
msgstr ""
"Manual: Paga o cobra con cualquier método externo a Odoo.\n"
"Proveedores de pago: Cada proveedor de pago tiene su propio método de pago. "
"Solicita una transacción en o a una tarjeta con el token de pago que el "
"contacto guarda al hacer una compra o suscribirse en línea.\n"
"Cheque: Paga las facturas con un cheque e imprímelo desde Odoo.\n"
"Depósito por lote: Cobra varios cheques de clientes a la vez y genera y "
"envía un depósito por lote a tu banco. Necesitas el módulo "
"account_batch_payment.\n"
"Transferencia de crédito SEPA: Paga en la zona SEPA al enviar un archivo de "
"transferencia de crédito SEPA a tu banco. Necesitas el módulo "
"account_iso20022.\n"
"Domiciliación bancaria SEPA: Cobra en la zona SEPA con el mandato que te "
"otorgará tu contacto. Necesitas el módulo account_iso20022.\n"
"EE. UU. ISO20022: Paga en Estados Unidos con el envío de un archivo ISO20022 "
"a tu banco. Necesitas el módulo account_iso20022.\n"
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.l10n_latam_check_view_form
msgid ""
"Marking a check as void will cancel the check and generate a new entry that "
"will re-open the debt."
msgstr ""
"Marcar un cheque como anulado cancelará el cheque y generará un nuevo "
"asiento que reabrirá la deuda."
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_mass_transfer__communication
msgid "Memo"
msgstr "Memo"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__message_has_error
msgid "Message Delivery error"
msgstr "Error de Envío de Mensaje"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__message_ids
msgid "Messages"
msgstr "Mensajes"
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_search
msgid "My Activities"
msgstr "Mis actividades"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__my_activity_date_deadline
msgid "My Activity Deadline"
msgstr "Fecha límite de mi actividad"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment_register__l10n_latam_new_check_ids
msgid "New Checks"
msgstr "Cheques Nuevos"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__activity_calendar_event_id
msgid "Next Activity Calendar Event"
msgstr "Próximo evento del calendario de actividades"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__activity_date_deadline
msgid "Next Activity Deadline"
msgstr "Fecha límite de siguiente actividad"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__activity_summary
msgid "Next Activity Summary"
msgstr "Resumen de la siguiente actividad"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__activity_type_id
msgid "Next Activity Type"
msgstr "Siguiente tipo de actividad"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__name
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_register_check__name
msgid "Number"
msgstr "Número"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__message_needaction_counter
msgid "Number of Actions"
msgstr "Número de acciones"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__message_has_error_counter
msgid "Number of errors"
msgstr "Número de errores"
#. module: l10n_latam_check
#: model:ir.model.fields,help:l10n_latam_check.field_l10n_latam_check__message_needaction_counter
msgid "Number of messages requiring action"
msgstr "Número de mensajes que requieren acción"
#. module: l10n_latam_check
#: model:ir.model.fields,help:l10n_latam_check.field_l10n_latam_check__message_has_error_counter
msgid "Number of messages with delivery error"
msgstr "Número de mensajes con error de envío"
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_third_party_checks_search
msgid "On hand"
msgstr "A la mano"
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_form_inherited
msgid "Open"
msgstr "Abrir"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__operation_ids
msgid "Operation"
msgstr "Operación"
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
msgid ""
"Other checks were found with same number, issuer and bank. Please double "
"check you are not encoding the same check more than once. List of other "
"payments/checks: %s"
msgstr ""
"Se encontraron otros cheques con el mismo número, emisor y banco. Verifique "
"que no esté codificando el mismo cheque más de una vez. Lista de otros pagos/"
"cheques: %s"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__outstanding_line_id
msgid "Outstanding Line"
msgstr "Línea de Liquidez"
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_chart_template.py:0
msgid "Outstanding Payments"
msgstr "Pagos pendientes"
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_chart_template.py:0
msgid "Outstanding Receipts"
msgstr "Ingresos pendientes"
#. module: l10n_latam_check
#: model:ir.actions.act_window,name:l10n_latam_check.action_own_check
#: model:ir.ui.menu,name:l10n_latam_check.menu_own_check
msgid "Own Checks"
msgstr "Cheques Propios"
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_search
msgid "Partner"
msgstr "Contacto"
#. module: l10n_latam_check
#: model:ir.model,name:l10n_latam_check.model_account_payment_register
msgid "Pay"
msgstr "Pagar"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__payment_id
msgid "Payment"
msgstr "Pago"
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_own_check_tree
msgid "Payment Currency"
msgstr "Divisa del pago"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__payment_date
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_mass_transfer__payment_date
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_register_check__payment_date
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_search
msgid "Payment Date"
msgstr "Fecha de Pago"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__payment_method_line_id
msgid "Payment Method"
msgstr "Método de pago"
#. module: l10n_latam_check
#: model:ir.model,name:l10n_latam_check.model_account_payment_method
msgid "Payment Methods"
msgstr "Métodos de pago"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_register_check__payment_register_id
msgid "Payment Register"
msgstr "Registro de pago"
#. module: l10n_latam_check
#: model:ir.model,name:l10n_latam_check.model_l10n_latam_payment_register_check
msgid "Payment register check"
msgstr "Registro de pago de cheque"
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/wizards/l10n_latam_payment_mass_transfer.py:0
#: model:ir.model,name:l10n_latam_check.model_account_payment
msgid "Payments"
msgstr "Pagos"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__rating_ids
msgid "Ratings"
msgstr "Calificaciones"
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_chart_template.py:0
msgid "Rejected Third Party Checks"
msgstr "Cheques de Terceros Rechazados"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__activity_user_id
msgid "Responsible User"
msgstr "Usuario responsable"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__message_has_sms_error
msgid "SMS Delivery error"
msgstr "Error de entrega del SMS"
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
msgid "Selected checks \"%s\" are not posted"
msgstr "Los cheques seleccionados \"%s\" no están publicados"
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_search
msgid "Show all records whose next activity date is past"
msgstr "Mostrar todos los registros cuya próxima fecha de actividad ya pasó."
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
msgid "Some checks are already in hand and can't be received again. Checks: %s"
msgstr ""
"Algunos cheques ya están en mano y no se pueden volver a recibir. Cheques: %s"
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
msgid ""
"Some checks are not anymore in journal, it seems it has been moved by "
"another payment."
msgstr ""
"Algunos cheques ya no están en el diario, parece que han sido movidos por "
"otro pago."
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_search
msgid "State"
msgstr "Estado"
#. module: l10n_latam_check
#: model:ir.model.fields,help:l10n_latam_check.field_l10n_latam_check__activity_state
msgid ""
"Status based on activities\n"
"Overdue: Due date is already passed\n"
"Today: Activity date is today\n"
"Planned: Future activities."
msgstr ""
"Estado basado en actividades\n"
"Vencida: la fecha tope ya ha pasado\n"
"Hoy: La fecha tope es hoy\n"
"Planificada: futuras actividades."
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/l10n_latam_check.py:0
msgid "The amount of the check must be greater than 0"
msgstr "El monto del cheque debe ser mayor a 0"
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
msgid ""
"The amount of the payment does not match the amount of the selected check. "
"Please try to deselect and select the check again."
msgstr ""
"El monto del pago no coincide con el monto del cheque seleccionado. Intente "
"deseleccionar y seleccionar el cheque nuevamente."
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
msgid ""
"The currency of the payment and the currency of the check must be the same."
msgstr "La moneda del pago y la moneda del cheque deben ser la misma."
#. module: l10n_latam_check
#: model:ir.model.fields,help:l10n_latam_check.field_l10n_latam_check__currency_id
#: model:ir.model.fields,help:l10n_latam_check.field_l10n_latam_payment_register_check__currency_id
msgid "The payment's currency."
msgstr "Moneda del pago."
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/wizards/l10n_latam_payment_mass_transfer.py:0
msgid ""
"The register payment wizard should only be called on account.payment records."
msgstr ""
"El asistente de registro de pagos sólo debe llamarse en account.payment "
"registros."
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_chart_template.py:0
#: model:ir.actions.act_window,name:l10n_latam_check.action_third_party_check
#: model:ir.ui.menu,name:l10n_latam_check.menu_third_party_check
msgid "Third Party Checks"
msgstr "Cheques de Terceros"
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/wizards/l10n_latam_payment_mass_transfer.py:0
msgid "This payment has been created from: "
msgstr "Este pago fue creado desde: "
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_search
msgid "Today Activities"
msgstr "Actividades de hoy"
#. module: l10n_latam_check
#: model:ir.model.fields,help:l10n_latam_check.field_l10n_latam_check__activity_exception_decoration
msgid "Type of the exception activity on record."
msgstr "Tipo de la actividad de excepción registrada."
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.l10n_latam_check_view_form
msgid "Void Check"
msgstr "Anular Cheque"
#. module: l10n_latam_check
#: model:ir.model.fields.selection,name:l10n_latam_check.selection__l10n_latam_check__issue_state__voided
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_search
msgid "Voided"
msgstr "Anulado"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__website_message_ids
msgid "Website Messages"
msgstr "Mensajes del sitio web"
#. module: l10n_latam_check
#: model:ir.model.fields,help:l10n_latam_check.field_l10n_latam_check__website_message_ids
msgid "Website communication history"
msgstr "Historial de comunicaciones del sitio web"
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
msgid ""
"You can't cancel or re-open a payment with checks if some check has been "
"debited or been voided. Checks:\n"
"%s"
msgstr ""
"No puede cancelar o reabrir un pago con cheques si algún cheque ha sido "
"debitado o anulado. Cheques:\n"
"%s"
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/wizards/account_payment_register.py:0
msgid ""
"You can't mix checks of different currencies in one payment, and you can't "
"change the payment's currency if checks are already created in that "
"currency.\n"
"Please create separate payments for each currency."
msgstr ""
"No se pueden mezclar cheques de distintas monedas en un mismo pago, y no se "
"puede cambiar la moneda del pago si los cheques seleccionados están creados "
"en esa moneda.\n"
"Por favor, crea pagos separados para cada moneda."
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_register_form
msgid ""
"You can't use checks when paying invoices of different partners or same "
"partner without grouping"
msgstr ""
"No puede utilizar cheques al pagar facturas de diferentes partners o del "
"mismo partner sin agrupar"
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/wizards/l10n_latam_payment_mass_transfer.py:0
msgid ""
"You have selected payments which are not checks. Please call this action "
"from the Third Party Checks menu"
msgstr ""
"Seleccionaste pagos que no son cheques. Ejecuta esta acción desde el menú "
"Cheques de terceros."
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_form_inherited
msgid "open"
msgstr "abrir"

View file

@ -4,10 +4,10 @@
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0+e\n"
"Project-Id-Version: Odoo Server 19.0+e\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-22 17:41+0000\n"
"PO-Revision-Date: 2023-11-22 17:41+0000\n"
"POT-Creation-Date: 2025-12-30 19:08+0000\n"
"PO-Revision-Date: 2025-12-30 19:08+0000\n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
@ -15,28 +15,63 @@ msgstr ""
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.report_payment_receipt_document
msgid "<span>Amount</span>"
msgstr ""
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.report_payment_receipt_document
msgid "<span>Bank</span>"
msgstr ""
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.report_payment_receipt_document
msgid "<span>Check Number</span>"
msgstr ""
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.report_payment_receipt_document
msgid "<span>Issuer VAT</span>"
msgstr ""
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.l10n_latam_check_view_form
msgid "<span>Journal Entry</span>"
msgstr ""
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.l10n_latam_check_view_form
msgid "<span>Operations</span>"
msgstr ""
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.report_payment_receipt_document
msgid "<span>Payment date</span>"
msgstr ""
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.l10n_latam_check_view_form
msgid "<span>Payment</span>"
msgstr ""
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.l10n_latam_check_view_form
msgid "<span>Reconciled move</span>"
msgstr ""
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
#, python-format
msgid "(Check %s)"
msgid ""
"A payment with any Third Party Check or Own Check payment methods needs an "
"outstanding account"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,help:l10n_latam_check.field_account_journal__l10n_latam_manual_checks
#: model:ir.model.fields,help:l10n_latam_check.field_account_payment__l10n_latam_manual_checks
#: model:ir.model.fields,help:l10n_latam_check.field_account_payment_register__l10n_latam_manual_checks
msgid ""
"* Allows putting numbers manually\n"
"* Enables Check Cash-In Date feature\n"
"* Disables printing"
msgstr ""
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_form_inherited
msgid ""
"<span attrs=\"{'invisible': [('l10n_latam_check_current_journal_id', '!=', "
"False)]}\">Not in Wallet</span>"
#. odoo-python
#: code:addons/l10n_latam_check/wizards/l10n_latam_payment_mass_transfer.py:0
msgid "A second payment has been created: "
msgstr ""
#. module: l10n_latam_check
@ -44,28 +79,84 @@ msgstr ""
msgid "Account Chart Template"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model,name:l10n_latam_check.model_l10n_latam_check
msgid "Account payment check"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__message_needaction
msgid "Action Needed"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__activity_ids
msgid "Activities"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__activity_exception_decoration
msgid "Activity Exception Decoration"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__activity_state
msgid "Activity State"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__activity_type_icon
msgid "Activity Type Icon"
msgstr ""
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/wizards/l10n_latam_payment_mass_transfer.py:0
#, python-format
msgid "All selected checks must be on the same journal and on hand"
msgstr ""
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/wizards/l10n_latam_payment_mass_transfer.py:0
#, python-format
msgid "All the selected checks must be posted"
msgstr ""
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/wizards/l10n_latam_payment_mass_transfer.py:0
msgid "All the selected checks must use the same currency"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment__amount
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__amount
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_register_check__amount
msgid "Amount"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__message_attachment_count
msgid "Attachment Count"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__bank_id
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_register_check__bank_id
msgid "Bank"
msgstr ""
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/l10n_latam_check.py:0
msgid "Can't delete a check if payment is In Process!"
msgstr ""
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_l10n_latam_payment_mass_transfer_form
msgid "Cancel"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment__l10n_latam_check_id
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment_register__l10n_latam_check_id
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_mass_transfer__check_ids
msgid "Check"
msgstr ""
@ -73,78 +164,12 @@ msgstr ""
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
#, python-format
msgid ""
"Check \"%s\" is not anymore in journal \"%s\", it seems it has been moved by"
" another payment."
msgid "Check %(check_number)s - %(suffix)s"
msgstr ""
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
#, python-format
msgid "Check %s delivered"
msgstr ""
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
#, python-format
msgid "Check %s received"
msgstr ""
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
#, python-format
msgid "Check '%s' is on journal '%s', it can't be received it again"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment__l10n_latam_check_bank_id
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment_register__l10n_latam_check_bank_id
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_form_inherited
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_register_form
msgid "Check Bank"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment__l10n_latam_check_payment_date
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment_register__l10n_latam_check_payment_date
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_search
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_third_party_checks_search
msgid "Check Cash-In Date"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment__l10n_latam_check_current_journal_id
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_form_inherited
msgid "Check Current Journal"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment__l10n_latam_check_issuer_vat
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment_register__l10n_latam_check_issuer_vat
msgid "Check Issuer VAT"
msgstr ""
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_form_inherited
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_register_form
msgid "Check Issuer Vat"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment_register__l10n_latam_check_number
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_form_inherited
msgid "Check Number"
msgstr ""
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment__l10n_latam_check_operation_ids
#, python-format
#: code:addons/l10n_latam_check/models/l10n_latam_check.py:0
msgid "Check Operations"
msgstr ""
@ -155,8 +180,24 @@ msgid "Check Transfer"
msgstr ""
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_journal_tree
msgid "Checks Management"
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_move_line__l10n_latam_check_ids
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment__l10n_latam_new_check_ids
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment_register__l10n_latam_move_check_ids
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_form_inherited
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_register_form
msgid "Checks"
msgstr ""
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
msgid "Checks %s delivered"
msgstr ""
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
msgid "Checks %s received"
msgstr ""
#. module: l10n_latam_check
@ -165,12 +206,20 @@ msgid "Checks Mass Transfers"
msgstr ""
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_third_party_checks_search
msgid "Checks on hand"
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment__l10n_latam_move_check_ids
msgid "Checks Operations"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__payment_method_code
msgid "Code"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__company_id
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_mass_transfer__company_id
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_register_check__company_id
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_search
msgid "Company"
msgstr ""
@ -180,30 +229,47 @@ msgid "Create Transfers"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__create_uid
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_mass_transfer__create_uid
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_register_check__create_uid
msgid "Created by"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__create_date
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_mass_transfer__create_date
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_register_check__create_date
msgid "Created on"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__currency_id
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_register_check__currency_id
msgid "Currency"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__current_journal_id
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_third_party_checks_search
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_third_party_check_tree
msgid "Current Journal"
msgstr ""
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_own_check_tree
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_third_party_check_operations_tree
msgid "Customer"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,help:l10n_latam_check.field_account_payment__l10n_latam_check_payment_date
#: model:ir.model.fields,help:l10n_latam_check.field_account_payment_register__l10n_latam_check_payment_date
msgid "Date from when you can cash in the check, turn the check into cash"
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__partner_id
msgid "Customer/Vendor"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields.selection,name:l10n_latam_check.selection__l10n_latam_check__issue_state__debited
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_search
msgid "Debited"
msgstr ""
#. module: l10n_latam_check
@ -212,40 +278,126 @@ msgid "Destination Journal"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_chart_template__display_name
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_journal__display_name
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_move__display_name
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_move_line__display_name
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment__display_name
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment_method__display_name
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment_register__display_name
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__display_name
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_mass_transfer__display_name
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_register_check__display_name
msgid "Display Name"
msgstr ""
#. module: l10n_latam_check
#: model:account.payment.method,name:l10n_latam_check.account_payment_method_in_third_party_checks
#: model:account.payment.method,name:l10n_latam_check.account_payment_method_out_third_party_checks
msgid "Existing Third Party Checks"
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__message_follower_ids
msgid "Followers"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__message_partner_ids
msgid "Followers (Partners)"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,help:l10n_latam_check.field_l10n_latam_check__activity_type_icon
msgid "Font awesome icon e.g. fa-tasks"
msgstr ""
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_search
msgid "Future Activities"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields.selection,name:l10n_latam_check.selection__l10n_latam_check__issue_state__handed
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_search
msgid "Handed"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__has_message
msgid "Has Message"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_chart_template__id
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_journal__id
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_move__id
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_move_line__id
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment__id
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment_method__id
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment_register__id
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__id
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_mass_transfer__id
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_register_check__id
msgid "ID"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__activity_exception_icon
msgid "Icon"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,help:l10n_latam_check.field_l10n_latam_check__activity_exception_icon
msgid "Icon to indicate an exception activity."
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,help:l10n_latam_check.field_l10n_latam_check__message_needaction
msgid "If checked, new messages require your attention."
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,help:l10n_latam_check.field_l10n_latam_check__message_has_error
#: model:ir.model.fields,help:l10n_latam_check.field_l10n_latam_check__message_has_sms_error
msgid "If checked, some messages have a delivery error."
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__message_is_follower
msgid "Is Follower"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__issue_state
msgid "Issue State"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__issuer_vat
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_register_check__issuer_vat
msgid "Issuer Vat"
msgstr ""
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
#, python-format
msgid ""
"It seems you're trying to move a check with a date (%s) prior to last "
"operation done with the check (%s). This may be wrong, please double check "
"it. By continue, the last operation on the check will remain being %s"
"It seems you're trying to move a check with a date (%(date)s) prior to last "
"operation done with the check (%(last_operation)s). This may be wrong, "
"please double check it. By continue, the last operation on the check will "
"remain being %(last_operation)s"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model,name:l10n_latam_check.model_account_journal
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__original_journal_id
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_mass_transfer__journal_id
msgid "Journal"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment__l10n_latam_check_number
msgid "L10N Latam Check Number"
#: model:ir.model,name:l10n_latam_check.model_account_move
msgid "Journal Entry"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model,name:l10n_latam_check.model_account_move_line
msgid "Journal Item"
msgstr ""
#. module: l10n_latam_check
@ -254,28 +406,41 @@ msgid "L10N Latam Check Warning Msg"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_mass_transfer____last_update
msgid "Last Modified on"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__write_uid
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_mass_transfer__write_uid
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_register_check__write_uid
msgid "Last Updated by"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__write_date
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_mass_transfer__write_date
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_register_check__write_date
msgid "Last Updated on"
msgstr ""
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_journal.py:0
#, python-format
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_search
msgid "Late Activities"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,help:l10n_latam_check.field_l10n_latam_check__payment_method_line_id
msgid ""
"Manual checks (electronic/deferred) can't be used together with check manual"
" sequencing (check printing functionality), please choose one or the other. "
"Journals: %s"
"Manual: Pay or Get paid by any method outside of Odoo.\n"
"Payment Providers: Each payment provider has its own Payment Method. Request a transaction on/to a card thanks to a payment token saved by the partner when buying or subscribing online.\n"
"Check: Pay bills by check and print it from Odoo.\n"
"Batch Deposit: Collect several customer checks at once generating and submitting a batch deposit to your bank. Module account_batch_payment is necessary.\n"
"SEPA Credit Transfer: Pay in the SEPA zone by submitting a SEPA Credit Transfer file to your bank. Module account_iso20022 is necessary.\n"
"SEPA Direct Debit: Get paid in the SEPA zone thanks to a mandate your partner will have granted to you. Module account_iso20022 is necessary.\n"
"U.S. ISO20022: Pay in the US by submitting an ISO20022 file to your bank. Module account_iso20022 is necessary.\n"
msgstr ""
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.l10n_latam_check_view_form
msgid ""
"Marking a check as void will cancel the check and generate a new entry that "
"will re-open the debt."
msgstr ""
#. module: l10n_latam_check
@ -284,20 +449,117 @@ msgid "Memo"
msgstr ""
#. module: l10n_latam_check
#: model:account.payment.method,name:l10n_latam_check.account_payment_method_new_third_party_checks
msgid "New Third Party Checks"
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__message_has_error
msgid "Message Delivery error"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__message_ids
msgid "Messages"
msgstr ""
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_search
msgid "My Activities"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__my_activity_date_deadline
msgid "My Activity Deadline"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment_register__l10n_latam_new_check_ids
msgid "New Checks"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__activity_calendar_event_id
msgid "Next Activity Calendar Event"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__activity_date_deadline
msgid "Next Activity Deadline"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__activity_summary
msgid "Next Activity Summary"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__activity_type_id
msgid "Next Activity Type"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__name
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_register_check__name
msgid "Number"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__message_needaction_counter
msgid "Number of Actions"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__message_has_error_counter
msgid "Number of errors"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,help:l10n_latam_check.field_l10n_latam_check__message_needaction_counter
msgid "Number of messages requiring action"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,help:l10n_latam_check.field_l10n_latam_check__message_has_error_counter
msgid "Number of messages with delivery error"
msgstr ""
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_third_party_checks_search
msgid "On hand"
msgstr ""
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_form_inherited
msgid "Open"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__operation_ids
msgid "Operation"
msgstr ""
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
#, python-format
msgid ""
"Other checks were found with same number, issuer and bank. Please double "
"check you are not encoding the same check more than once. List of other "
"payments/checks: %s"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__outstanding_line_id
msgid "Outstanding Line"
msgstr ""
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_chart_template.py:0
msgid "Outstanding Payments"
msgstr ""
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_chart_template.py:0
msgid "Outstanding Receipts"
msgstr ""
#. module: l10n_latam_check
#: model:ir.actions.act_window,name:l10n_latam_check.action_own_check
#: model:ir.ui.menu,name:l10n_latam_check.menu_own_check
@ -305,73 +567,151 @@ msgid "Own Checks"
msgstr ""
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_search
msgid "Partner"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model,name:l10n_latam_check.model_account_payment_register
msgid "Pay"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__payment_id
msgid "Payment"
msgstr ""
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_own_check_tree
msgid "Payment Currency"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__payment_date
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_mass_transfer__payment_date
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_register_check__payment_date
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_search
msgid "Payment Date"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__payment_method_line_id
msgid "Payment Method"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model,name:l10n_latam_check.model_account_payment_method
msgid "Payment Methods"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_register_check__payment_register_id
msgid "Payment Register"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model,name:l10n_latam_check.model_l10n_latam_payment_register_check
msgid "Payment register check"
msgstr ""
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/wizards/l10n_latam_payment_mass_transfer.py:0
#: model:ir.model,name:l10n_latam_check.model_account_payment
#, python-format
msgid "Payments"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model,name:l10n_latam_check.model_account_payment_register
msgid "Register Payment"
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__rating_ids
msgid "Ratings"
msgstr ""
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_chart_template.py:0
#, python-format
msgid "Rejected Third Party Checks"
msgstr ""
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
#, python-format
msgid "Selected check \"%s\" is not posted"
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__activity_user_id
msgid "Responsible User"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__message_has_sms_error
msgid "SMS Delivery error"
msgstr ""
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
#, python-format
msgid ""
"The amount of the payment (%s) does not match the amount of the selected "
"check (%s). Please try to deselect and select the check again."
msgid "Selected checks \"%s\" are not posted"
msgstr ""
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_search
msgid "Show all records whose next activity date is past"
msgstr ""
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
#, python-format
msgid ""
"The check(s) '%s' is already used on another payment. Please select another "
"check or deselect the check on this payment."
"Some checks are already in hand and can't be received again. Checks: %s"
msgstr ""
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
#, python-format
msgid ""
"The currency of the payment (%s) and the currency of the check (%s) must be "
"the same."
"Some checks are not anymore in journal, it seems it has been moved by "
"another payment."
msgstr ""
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_search
msgid "State"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,help:l10n_latam_check.field_l10n_latam_check__activity_state
msgid ""
"Status based on activities\n"
"Overdue: Due date is already passed\n"
"Today: Activity date is today\n"
"Planned: Future activities."
msgstr ""
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/l10n_latam_check.py:0
msgid "The amount of the check must be greater than 0"
msgstr ""
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
msgid ""
"The amount of the payment does not match the amount of the selected check. "
"Please try to deselect and select the check again."
msgstr ""
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
msgid ""
"The currency of the payment and the currency of the check must be the same."
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,help:l10n_latam_check.field_l10n_latam_check__currency_id
#: model:ir.model.fields,help:l10n_latam_check.field_l10n_latam_payment_register_check__currency_id
msgid "The payment's currency."
msgstr ""
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/wizards/l10n_latam_payment_mass_transfer.py:0
#, python-format
msgid ""
"The register payment wizard should only be called on account.payment "
"records."
@ -382,31 +722,60 @@ msgstr ""
#: code:addons/l10n_latam_check/models/account_chart_template.py:0
#: model:ir.actions.act_window,name:l10n_latam_check.action_third_party_check
#: model:ir.ui.menu,name:l10n_latam_check.menu_third_party_check
#, python-format
msgid "Third Party Checks"
msgstr ""
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
#, python-format
msgid ""
"This third party check is already used to make one or more payments. Please reset them to draft first.\n"
"Payments made with this check: %s"
#: code:addons/l10n_latam_check/wizards/l10n_latam_payment_mass_transfer.py:0
msgid "This payment has been created from: "
msgstr ""
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_search
msgid "Today Activities"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,help:l10n_latam_check.field_l10n_latam_check__activity_exception_decoration
msgid "Type of the exception activity on record."
msgstr ""
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.l10n_latam_check_view_form
msgid "Void Check"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields.selection,name:l10n_latam_check.selection__l10n_latam_check__issue_state__voided
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_search
msgid "Voided"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__website_message_ids
msgid "Website Messages"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,help:l10n_latam_check.field_l10n_latam_check__website_message_ids
msgid "Website communication history"
msgstr ""
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
#, python-format
msgid "Unmark sent is not implemented for electronic or deferred checks"
msgid ""
"You can't cancel or re-open a payment with checks if some check has been debited or been voided. Checks:\n"
"%s"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_journal__l10n_latam_manual_checks
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment__l10n_latam_manual_checks
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment_register__l10n_latam_manual_checks
msgid "Use electronic and deferred checks"
#. odoo-python
#: code:addons/l10n_latam_check/wizards/account_payment_register.py:0
msgid ""
"You can't mix checks of different currencies in one payment, and you can't change the payment's currency if checks are already created in that currency.\n"
"Please create separate payments for each currency."
msgstr ""
#. module: l10n_latam_check
@ -417,6 +786,14 @@ msgid ""
msgstr ""
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_form_inherited
msgid "⇒ Check Operations"
#. odoo-python
#: code:addons/l10n_latam_check/wizards/l10n_latam_payment_mass_transfer.py:0
msgid ""
"You have selected payments which are not checks. Please call this action "
"from the Third Party Checks menu"
msgstr ""
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_form_inherited
msgid "open"
msgstr ""

View file

@ -0,0 +1,815 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * l10n_latam_check
#
# Weblate <noreply-mt-weblate@weblate.org>, 2025.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 19.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-12-30 19:08+0000\n"
"PO-Revision-Date: 2025-11-17 03:12+0000\n"
"Last-Translator: Weblate <noreply-mt-weblate@weblate.org>\n"
"Language-Team: Portuguese (Brazil) <https://translate.odoo.com/projects/"
"odoo-19-l10n/l10n_latam_check/pt_BR/>\n"
"Language: pt_BR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 5.12.2\n"
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.report_payment_receipt_document
msgid "<span>Amount</span>"
msgstr "<span>Valor</span>"
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.report_payment_receipt_document
msgid "<span>Bank</span>"
msgstr ""
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.report_payment_receipt_document
msgid "<span>Check Number</span>"
msgstr ""
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.report_payment_receipt_document
msgid "<span>Issuer VAT</span>"
msgstr ""
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.l10n_latam_check_view_form
msgid "<span>Journal Entry</span>"
msgstr ""
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.l10n_latam_check_view_form
msgid "<span>Operations</span>"
msgstr "<span>Operações</span>"
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.report_payment_receipt_document
msgid "<span>Payment date</span>"
msgstr ""
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.l10n_latam_check_view_form
msgid "<span>Payment</span>"
msgstr ""
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.l10n_latam_check_view_form
msgid "<span>Reconciled move</span>"
msgstr ""
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
msgid ""
"A payment with any Third Party Check or Own Check payment methods needs an "
"outstanding account"
msgstr ""
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/wizards/l10n_latam_payment_mass_transfer.py:0
msgid "A second payment has been created: "
msgstr ""
#. module: l10n_latam_check
#: model:ir.model,name:l10n_latam_check.model_account_chart_template
msgid "Account Chart Template"
msgstr "Modelo de plano da contas"
#. module: l10n_latam_check
#: model:ir.model,name:l10n_latam_check.model_l10n_latam_check
msgid "Account payment check"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__message_needaction
msgid "Action Needed"
msgstr "Requer ação"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__activity_ids
msgid "Activities"
msgstr "Atividades"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__activity_exception_decoration
msgid "Activity Exception Decoration"
msgstr "Decoração de atividade excepcional"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__activity_state
msgid "Activity State"
msgstr "Status da atividade"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__activity_type_icon
msgid "Activity Type Icon"
msgstr "Ícone do tipo de atividade"
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/wizards/l10n_latam_payment_mass_transfer.py:0
msgid "All selected checks must be on the same journal and on hand"
msgstr ""
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/wizards/l10n_latam_payment_mass_transfer.py:0
msgid "All the selected checks must be posted"
msgstr ""
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/wizards/l10n_latam_payment_mass_transfer.py:0
msgid "All the selected checks must use the same currency"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment__amount
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__amount
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_register_check__amount
msgid "Amount"
msgstr "Valor"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__message_attachment_count
msgid "Attachment Count"
msgstr "Total de anexos"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__bank_id
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_register_check__bank_id
msgid "Bank"
msgstr "Banco"
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/l10n_latam_check.py:0
msgid "Can't delete a check if payment is In Process!"
msgstr ""
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_l10n_latam_payment_mass_transfer_form
msgid "Cancel"
msgstr "Cancelar"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_mass_transfer__check_ids
msgid "Check"
msgstr "Verificar"
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
msgid "Check %(check_number)s - %(suffix)s"
msgstr ""
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/l10n_latam_check.py:0
msgid "Check Operations"
msgstr ""
#. module: l10n_latam_check
#: model:ir.actions.act_window,name:l10n_latam_check.action_view_l10n_latam_payment_mass_transfer
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_third_party_check_tree
msgid "Check Transfer"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_move_line__l10n_latam_check_ids
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment__l10n_latam_new_check_ids
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment_register__l10n_latam_move_check_ids
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_form_inherited
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_register_form
msgid "Checks"
msgstr "Cheques"
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
msgid "Checks %s delivered"
msgstr ""
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
msgid "Checks %s received"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model,name:l10n_latam_check.model_l10n_latam_payment_mass_transfer
msgid "Checks Mass Transfers"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment__l10n_latam_move_check_ids
msgid "Checks Operations"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__payment_method_code
msgid "Code"
msgstr "Código"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__company_id
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_mass_transfer__company_id
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_register_check__company_id
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_search
msgid "Company"
msgstr "Empresa"
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_l10n_latam_payment_mass_transfer_form
msgid "Create Transfers"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__create_uid
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_mass_transfer__create_uid
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_register_check__create_uid
msgid "Created by"
msgstr "Criado por"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__create_date
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_mass_transfer__create_date
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_register_check__create_date
msgid "Created on"
msgstr "Criado em"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__currency_id
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_register_check__currency_id
msgid "Currency"
msgstr "Moeda"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__current_journal_id
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_third_party_checks_search
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_third_party_check_tree
msgid "Current Journal"
msgstr ""
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_own_check_tree
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_third_party_check_operations_tree
msgid "Customer"
msgstr "Cliente"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__partner_id
msgid "Customer/Vendor"
msgstr "Cliente/fornecedor"
#. module: l10n_latam_check
#: model:ir.model.fields.selection,name:l10n_latam_check.selection__l10n_latam_check__issue_state__debited
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_search
msgid "Debited"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_mass_transfer__destination_journal_id
msgid "Destination Journal"
msgstr "Diário de destino"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_chart_template__display_name
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_journal__display_name
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_move__display_name
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_move_line__display_name
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment__display_name
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment_method__display_name
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment_register__display_name
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__display_name
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_mass_transfer__display_name
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_register_check__display_name
msgid "Display Name"
msgstr "Exibir nome"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__message_follower_ids
msgid "Followers"
msgstr "Seguidores"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__message_partner_ids
msgid "Followers (Partners)"
msgstr "Seguidores (parceiros)"
#. module: l10n_latam_check
#: model:ir.model.fields,help:l10n_latam_check.field_l10n_latam_check__activity_type_icon
msgid "Font awesome icon e.g. fa-tasks"
msgstr "Ícone do Font Awesome. Ex.: fa-tasks"
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_search
msgid "Future Activities"
msgstr "Atividades futuras"
#. module: l10n_latam_check
#: model:ir.model.fields.selection,name:l10n_latam_check.selection__l10n_latam_check__issue_state__handed
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_search
msgid "Handed"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__has_message
msgid "Has Message"
msgstr "Tem uma mensagem"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_chart_template__id
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_journal__id
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_move__id
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_move_line__id
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment__id
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment_method__id
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment_register__id
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__id
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_mass_transfer__id
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_register_check__id
msgid "ID"
msgstr "ID"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__activity_exception_icon
msgid "Icon"
msgstr "Ícone"
#. module: l10n_latam_check
#: model:ir.model.fields,help:l10n_latam_check.field_l10n_latam_check__activity_exception_icon
msgid "Icon to indicate an exception activity."
msgstr "Ícone para indicar uma atividade excepcional."
#. module: l10n_latam_check
#: model:ir.model.fields,help:l10n_latam_check.field_l10n_latam_check__message_needaction
msgid "If checked, new messages require your attention."
msgstr "Se marcado, há novas mensagens precisando de sua atenção."
#. module: l10n_latam_check
#: model:ir.model.fields,help:l10n_latam_check.field_l10n_latam_check__message_has_error
#: model:ir.model.fields,help:l10n_latam_check.field_l10n_latam_check__message_has_sms_error
msgid "If checked, some messages have a delivery error."
msgstr "Se marcado, algumas mensagens têm um erro de entrega."
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__message_is_follower
msgid "Is Follower"
msgstr "É um seguidor"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__issue_state
msgid "Issue State"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__issuer_vat
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_register_check__issuer_vat
msgid "Issuer Vat"
msgstr ""
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
msgid ""
"It seems you're trying to move a check with a date (%(date)s) prior to last "
"operation done with the check (%(last_operation)s). This may be wrong, "
"please double check it. By continue, the last operation on the check will "
"remain being %(last_operation)s"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model,name:l10n_latam_check.model_account_journal
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__original_journal_id
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_mass_transfer__journal_id
msgid "Journal"
msgstr "Diário"
#. module: l10n_latam_check
#: model:ir.model,name:l10n_latam_check.model_account_move
msgid "Journal Entry"
msgstr "Lançamento de diário"
#. module: l10n_latam_check
#: model:ir.model,name:l10n_latam_check.model_account_move_line
msgid "Journal Item"
msgstr "Item do diário"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment__l10n_latam_check_warning_msg
msgid "L10N Latam Check Warning Msg"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__write_uid
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_mass_transfer__write_uid
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_register_check__write_uid
msgid "Last Updated by"
msgstr "Última atualização por"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__write_date
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_mass_transfer__write_date
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_register_check__write_date
msgid "Last Updated on"
msgstr "Última atualização em"
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_search
msgid "Late Activities"
msgstr "Atividades atrasadas"
#. module: l10n_latam_check
#: model:ir.model.fields,help:l10n_latam_check.field_l10n_latam_check__payment_method_line_id
msgid ""
"Manual: Pay or Get paid by any method outside of Odoo.\n"
"Payment Providers: Each payment provider has its own Payment Method. Request "
"a transaction on/to a card thanks to a payment token saved by the partner "
"when buying or subscribing online.\n"
"Check: Pay bills by check and print it from Odoo.\n"
"Batch Deposit: Collect several customer checks at once generating and "
"submitting a batch deposit to your bank. Module account_batch_payment is "
"necessary.\n"
"SEPA Credit Transfer: Pay in the SEPA zone by submitting a SEPA Credit "
"Transfer file to your bank. Module account_iso20022 is necessary.\n"
"SEPA Direct Debit: Get paid in the SEPA zone thanks to a mandate your "
"partner will have granted to you. Module account_iso20022 is necessary.\n"
"U.S. ISO20022: Pay in the US by submitting an ISO20022 file to your bank. "
"Module account_iso20022 is necessary.\n"
msgstr ""
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.l10n_latam_check_view_form
msgid ""
"Marking a check as void will cancel the check and generate a new entry that "
"will re-open the debt."
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_mass_transfer__communication
msgid "Memo"
msgstr "Anotação"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__message_has_error
msgid "Message Delivery error"
msgstr "Erro na entrega da mensagem"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__message_ids
msgid "Messages"
msgstr "Mensagens"
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_search
msgid "My Activities"
msgstr "Minhas atividades"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__my_activity_date_deadline
msgid "My Activity Deadline"
msgstr "Prazo da minha atividade"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_account_payment_register__l10n_latam_new_check_ids
msgid "New Checks"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__activity_calendar_event_id
msgid "Next Activity Calendar Event"
msgstr "Evento no calendário para a próxima atividade"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__activity_date_deadline
msgid "Next Activity Deadline"
msgstr "Prazo da próxima atividade"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__activity_summary
msgid "Next Activity Summary"
msgstr "Resumo da próxima atividade"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__activity_type_id
msgid "Next Activity Type"
msgstr "Tipo da próxima atividade"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__name
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_register_check__name
msgid "Number"
msgstr "Número"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__message_needaction_counter
msgid "Number of Actions"
msgstr "Número de ações"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__message_has_error_counter
msgid "Number of errors"
msgstr "Número de erros"
#. module: l10n_latam_check
#: model:ir.model.fields,help:l10n_latam_check.field_l10n_latam_check__message_needaction_counter
msgid "Number of messages requiring action"
msgstr "Número de mensagens que requerem ação"
#. module: l10n_latam_check
#: model:ir.model.fields,help:l10n_latam_check.field_l10n_latam_check__message_has_error_counter
msgid "Number of messages with delivery error"
msgstr "Número de mensagens com erro de entrega"
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_third_party_checks_search
msgid "On hand"
msgstr ""
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_form_inherited
msgid "Open"
msgstr "Abrir"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__operation_ids
msgid "Operation"
msgstr "Operação"
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
msgid ""
"Other checks were found with same number, issuer and bank. Please double "
"check you are not encoding the same check more than once. List of other "
"payments/checks: %s"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__outstanding_line_id
msgid "Outstanding Line"
msgstr ""
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_chart_template.py:0
msgid "Outstanding Payments"
msgstr "Pagamentos pendentes"
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_chart_template.py:0
msgid "Outstanding Receipts"
msgstr "Recebimentos pendentes"
#. module: l10n_latam_check
#: model:ir.actions.act_window,name:l10n_latam_check.action_own_check
#: model:ir.ui.menu,name:l10n_latam_check.menu_own_check
msgid "Own Checks"
msgstr ""
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_search
msgid "Partner"
msgstr "Usuário"
#. module: l10n_latam_check
#: model:ir.model,name:l10n_latam_check.model_account_payment_register
msgid "Pay"
msgstr "Pagar"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__payment_id
msgid "Payment"
msgstr "Pagamento"
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_own_check_tree
msgid "Payment Currency"
msgstr "Moeda do pagamento"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__payment_date
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_mass_transfer__payment_date
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_register_check__payment_date
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_search
msgid "Payment Date"
msgstr "Data de pagamento"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__payment_method_line_id
msgid "Payment Method"
msgstr "Forma de pagamento"
#. module: l10n_latam_check
#: model:ir.model,name:l10n_latam_check.model_account_payment_method
msgid "Payment Methods"
msgstr "Formas de pagamento"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_payment_register_check__payment_register_id
msgid "Payment Register"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model,name:l10n_latam_check.model_l10n_latam_payment_register_check
msgid "Payment register check"
msgstr ""
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/wizards/l10n_latam_payment_mass_transfer.py:0
#: model:ir.model,name:l10n_latam_check.model_account_payment
msgid "Payments"
msgstr "Pagamentos"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__rating_ids
msgid "Ratings"
msgstr "Avaliações"
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_chart_template.py:0
msgid "Rejected Third Party Checks"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__activity_user_id
msgid "Responsible User"
msgstr "Usuário responsável"
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__message_has_sms_error
msgid "SMS Delivery error"
msgstr "Erro no envio de SMS"
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
msgid "Selected checks \"%s\" are not posted"
msgstr ""
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_search
msgid "Show all records whose next activity date is past"
msgstr "Mostrar todos os registros cuja data da próxima atividade já passou"
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
msgid "Some checks are already in hand and can't be received again. Checks: %s"
msgstr ""
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
msgid ""
"Some checks are not anymore in journal, it seems it has been moved by "
"another payment."
msgstr ""
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_search
msgid "State"
msgstr "Estado"
#. module: l10n_latam_check
#: model:ir.model.fields,help:l10n_latam_check.field_l10n_latam_check__activity_state
msgid ""
"Status based on activities\n"
"Overdue: Due date is already passed\n"
"Today: Activity date is today\n"
"Planned: Future activities."
msgstr ""
"Status baseado em atividades\n"
"Atrasado: data de vencimento já passou\n"
"Hoje: data da atividade é hoje\n"
"Planejado: atividades futuras."
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/l10n_latam_check.py:0
msgid "The amount of the check must be greater than 0"
msgstr ""
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
msgid ""
"The amount of the payment does not match the amount of the selected check. "
"Please try to deselect and select the check again."
msgstr ""
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
msgid ""
"The currency of the payment and the currency of the check must be the same."
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,help:l10n_latam_check.field_l10n_latam_check__currency_id
#: model:ir.model.fields,help:l10n_latam_check.field_l10n_latam_payment_register_check__currency_id
msgid "The payment's currency."
msgstr "A moeda do pagamento."
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/wizards/l10n_latam_payment_mass_transfer.py:0
msgid ""
"The register payment wizard should only be called on account.payment records."
msgstr ""
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_chart_template.py:0
#: model:ir.actions.act_window,name:l10n_latam_check.action_third_party_check
#: model:ir.ui.menu,name:l10n_latam_check.menu_third_party_check
msgid "Third Party Checks"
msgstr ""
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/wizards/l10n_latam_payment_mass_transfer.py:0
msgid "This payment has been created from: "
msgstr ""
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_search
msgid "Today Activities"
msgstr "Atividades de hoje"
#. module: l10n_latam_check
#: model:ir.model.fields,help:l10n_latam_check.field_l10n_latam_check__activity_exception_decoration
msgid "Type of the exception activity on record."
msgstr "Tipo de atividade de exceção registrada."
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.l10n_latam_check_view_form
msgid "Void Check"
msgstr "Cheque anulado"
#. module: l10n_latam_check
#: model:ir.model.fields.selection,name:l10n_latam_check.selection__l10n_latam_check__issue_state__voided
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_search
msgid "Voided"
msgstr ""
#. module: l10n_latam_check
#: model:ir.model.fields,field_description:l10n_latam_check.field_l10n_latam_check__website_message_ids
msgid "Website Messages"
msgstr "Mensagens do site"
#. module: l10n_latam_check
#: model:ir.model.fields,help:l10n_latam_check.field_l10n_latam_check__website_message_ids
msgid "Website communication history"
msgstr "Histórico de comunicação do site"
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/models/account_payment.py:0
msgid ""
"You can't cancel or re-open a payment with checks if some check has been "
"debited or been voided. Checks:\n"
"%s"
msgstr ""
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/wizards/account_payment_register.py:0
msgid ""
"You can't mix checks of different currencies in one payment, and you can't "
"change the payment's currency if checks are already created in that "
"currency.\n"
"Please create separate payments for each currency."
msgstr ""
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_register_form
msgid ""
"You can't use checks when paying invoices of different partners or same "
"partner without grouping"
msgstr ""
#. module: l10n_latam_check
#. odoo-python
#: code:addons/l10n_latam_check/wizards/l10n_latam_payment_mass_transfer.py:0
msgid ""
"You have selected payments which are not checks. Please call this action "
"from the Third Party Checks menu"
msgstr ""
#. module: l10n_latam_check
#: model_terms:ir.ui.view,arch_db:l10n_latam_check.view_account_payment_form_inherited
msgid "open"
msgstr "open"

View file

@ -1,4 +1,7 @@
from . import account_journal
from . import account_payment
from . import account_payment_method
from . import account_chart_template
from . import l10n_latam_check
from . import account_move
from . import account_move_line
from . import account_journal

View file

@ -1,7 +1,8 @@
from odoo import models, Command, api, _
from odoo.addons.account.models.chart_template import template
class AccountChartTemplate(models.Model):
class AccountChartTemplate(models.AbstractModel):
_inherit = 'account.chart.template'
@api.model
@ -10,30 +11,66 @@ class AccountChartTemplate(models.Model):
when installing the COA"""
return ["AR"]
def _create_bank_journals(self, company, acc_template_ref):
res = super()._create_bank_journals(company, acc_template_ref)
@template(model='account.journal')
def _get_latam_check_account_journal(self, template_code):
if self.env.company.country_id.code in self._get_third_party_checks_country_codes():
return {
"third_party_check": {
'name': _('Third Party Checks'),
'type': 'cash',
'outbound_payment_method_line_ids': [
Command.create({
'payment_method_id': self.env.ref('l10n_latam_check.account_payment_method_out_third_party_checks').id,
'payment_account_id': 'base_outstanding_payments',
}),
],
'inbound_payment_method_line_ids': [
Command.create({
'payment_method_id': self.env.ref('l10n_latam_check.account_payment_method_new_third_party_checks').id,
'payment_account_id': 'base_outstanding_receipts',
}),
Command.create({
'payment_method_id': self.env.ref('l10n_latam_check.account_payment_method_in_third_party_checks').id,
'payment_account_id': 'base_outstanding_receipts',
}),
],
},
"rejected_third_party_check": {
'name': _('Rejected Third Party Checks'),
'type': 'cash',
'outbound_payment_method_line_ids': [
Command.create({
'payment_method_id': self.env.ref('l10n_latam_check.account_payment_method_out_third_party_checks').id,
'payment_account_id': 'base_outstanding_payments',
}),
],
'inbound_payment_method_line_ids': [
Command.create({
'payment_method_id': self.env.ref('l10n_latam_check.account_payment_method_new_third_party_checks').id,
'payment_account_id': 'base_outstanding_receipts',
}),
Command.create({
'payment_method_id': self.env.ref('l10n_latam_check.account_payment_method_in_third_party_checks').id,
'payment_account_id': 'base_outstanding_receipts',
}),
],
},
}
if company.country_id.code in self._get_third_party_checks_country_codes():
self.env['account.journal'].create({
'name': _('Third Party Checks'),
'type': 'cash',
'company_id': company.id,
'outbound_payment_method_line_ids': [
Command.create({'payment_method_id': self.env.ref('l10n_latam_check.account_payment_method_out_third_party_checks').id}),
],
'inbound_payment_method_line_ids': [
Command.create({'payment_method_id': self.env.ref('l10n_latam_check.account_payment_method_new_third_party_checks').id}),
Command.create({'payment_method_id': self.env.ref('l10n_latam_check.account_payment_method_in_third_party_checks').id}),
]})
self.env['account.journal'].create({
'name': _('Rejected Third Party Checks'),
'type': 'cash',
'company_id': company.id,
'outbound_payment_method_line_ids': [
Command.create({'payment_method_id': self.env.ref('l10n_latam_check.account_payment_method_out_third_party_checks').id}),
],
'inbound_payment_method_line_ids': [
Command.create({'payment_method_id': self.env.ref('l10n_latam_check.account_payment_method_new_third_party_checks').id}),
Command.create({'payment_method_id': self.env.ref('l10n_latam_check.account_payment_method_in_third_party_checks').id}),
]})
return res
@template(model='account.account')
def _get_latam_check_outstanding_account_account(self, template_code):
if self.env.company.country_id.code in self._get_third_party_checks_country_codes():
return {
'base_outstanding_receipts': {
'name': _("Outstanding Receipts"),
'code': '1.1.1.02.003',
'reconcile': True,
'account_type': 'asset_current',
},
'base_outstanding_payments': {
'name': _("Outstanding Payments"),
'code': '1.1.1.02.004',
'reconcile': True,
'account_type': 'asset_current',
},
}

View file

@ -1,28 +1,50 @@
from odoo import models, fields, api, _
from odoo.exceptions import UserError
from odoo import models, api
class AccountJournal(models.Model):
_inherit = 'account.journal'
_inherit = "account.journal"
l10n_latam_manual_checks = fields.Boolean(
string='Use electronic and deferred checks',
help="* Allows putting numbers manually\n"
"* Enables Check Cash-In Date feature\n"
"* Disables printing"
)
def _default_outbound_payment_methods(self):
res = super()._default_outbound_payment_methods()
if self.company_id.country_id.code != "AR":
return res
if self._is_payment_method_available('own_checks'):
res |= self.env.ref('l10n_latam_check.account_payment_method_own_checks')
if self._is_payment_method_available('return_third_party_checks'):
res |= self.env.ref('l10n_latam_check.account_payment_method_return_third_party_checks')
return res
@api.constrains('l10n_latam_manual_checks', 'check_manual_sequencing')
def _check_l10n_latam_manual_checks(self):
""" Protect from setting check_manual_sequencing (Manual Numbering) + Use electronic/deferred checks for these reasons
* Printing checks for manual checks (electronic/deferred) is not implemented and using a "check printing" option together with the manual
checks is confusing
* The next check number field shown when choosing "Manual Numbering" don't have any meaning when using manual checks (electronic/deferred)
* Some methods of account_check_printing module behave differently if "Manual Numbering" is configured
"""
recs = self.filtered(
lambda x: x.check_manual_sequencing and x.l10n_latam_manual_checks)
if recs:
raise UserError(_(
"Manual checks (electronic/deferred) can't be used together with check manual sequencing (check printing functionality), "
"please choose one or the other. Journals: %s", ",".join(recs.mapped("name"))))
@api.model
def _get_reusable_payment_methods(self):
""" We are able to have multiple times Checks payment method in a journal """
res = super()._get_reusable_payment_methods()
res.add("own_checks")
return res
def create(self, vals_list):
journals = super().create(vals_list)
inbound_payment_accounts = self.env['account.account'].search([
('code', '=', '1.1.1.02.003'),
('company_ids', 'in', journals.company_id.ids)
]).grouped('company_ids')
outbound_payment_accounts = self.env['account.account'].search([
('code', '=', '1.1.1.02.004'),
('company_ids', 'in', journals.company_id.ids)
]).grouped('company_ids')
for journal in journals:
if journal.country_code != 'AR' or journal.type not in ('bank', 'cash'):
continue
for payment_method_line in journal.inbound_payment_method_line_ids:
if payment_method_line.payment_account_id:
continue
payment_method_line.payment_account_id = inbound_payment_accounts.get(journal.company_id)
for payment_method_line in journal.outbound_payment_method_line_ids:
if payment_method_line.payment_account_id:
continue
payment_method_line.payment_account_id = outbound_payment_accounts.get(journal.company_id)
return journals

View file

@ -0,0 +1,11 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import models
class AccountMove(models.Model):
_inherit = 'account.move'
def button_draft(self):
super().button_draft()
for move in self.filtered(lambda x: x.origin_payment_id.payment_method_code == 'own_checks'):
move.origin_payment_id._l10n_latam_check_unlink_split_move()

View file

@ -0,0 +1,8 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import fields, models
class AccountMoveLine(models.Model):
_inherit = 'account.move.line'
l10n_latam_check_ids = fields.One2many('l10n_latam.check', 'outstanding_line_id', string='Checks')

View file

@ -1,123 +1,210 @@
import stdnum
from odoo import fields, models, _, api
from odoo import fields, models, api, Command, _
from odoo.exceptions import UserError, ValidationError
from odoo.tools.misc import format_date
class AccountPayment(models.Model):
_inherit = 'account.payment'
_rec_names_search = ['name', 'check_number']
# Third party check operation links
l10n_latam_check_id = fields.Many2one(
comodel_name='account.payment',
string='Check',
readonly=True, states={'draft': [('readonly', False)]},
l10n_latam_new_check_ids = fields.One2many('l10n_latam.check', 'payment_id', string='Checks')
l10n_latam_move_check_ids = fields.Many2many(
comodel_name='l10n_latam.check',
relation='l10n_latam_check_account_payment_rel',
column1="payment_id",
column2="check_id",
required=True,
copy=False,
check_company=True,
)
l10n_latam_check_operation_ids = fields.One2many(
comodel_name='account.payment',
inverse_name='l10n_latam_check_id',
string='Check Operations',
readonly=True,
)
l10n_latam_check_current_journal_id = fields.Many2one(
comodel_name='account.journal',
string="Check Current Journal",
compute='_compute_l10n_latam_check_current_journal', store=True,
string="Checks Operations"
)
# Warning message in case of unlogical third party check operations
l10n_latam_check_warning_msg = fields.Text(
compute='_compute_l10n_latam_check_warning_msg',
)
l10n_latam_check_number = fields.Char(
compute='_compute_l10n_latam_check_number', inverse='_inverse_l10n_latam_check_number',
)
# New third party check info
l10n_latam_check_bank_id = fields.Many2one(
comodel_name='res.bank',
string='Check Bank',
compute='_compute_l10n_latam_check_bank_id', store=True, readonly=False,
states={'posted': [('readonly', True)], 'cancel': [('readonly', True)]},
)
l10n_latam_check_issuer_vat = fields.Char(
string='Check Issuer VAT',
compute='_compute_l10n_latam_check_issuer_vat', store=True, readonly=False,
states={'posted': [('readonly', True)], 'cancel': [('readonly', True)]},
)
l10n_latam_check_payment_date = fields.Date(
string='Check Cash-In Date',
help="Date from when you can cash in the check, turn the check into cash",
readonly=True, states={'draft': [('readonly', False)]},
)
l10n_latam_check_warning_msg = fields.Text(compute='_compute_l10n_latam_check_warning_msg')
amount = fields.Monetary(compute="_compute_amount", readonly=False, store=True)
# This is a technical field for the view only
l10n_latam_manual_checks = fields.Boolean(
related='journal_id.l10n_latam_manual_checks',
)
@api.constrains('state', 'move_id')
def _check_move_id(self):
for payment in self:
if (
not payment.move_id and
payment.payment_method_code in ('own_checks', 'new_third_party_checks', 'in_third_party_checks', 'out_third_party_checks', 'return_third_party_checks') and
not payment.outstanding_account_id
):
raise ValidationError(_("A payment with any Third Party Check or Own Check payment methods needs an outstanding account"))
@api.depends('check_number')
def _compute_l10n_latam_check_number(self):
""" This dummy computed field is added for two reasons:
1. add a new field so that we don't need to modify attrs on the views for the original check_number field
(not nice on terms of inheritance)
2. if we set it as related (with readonly=False) it didn't work properly for our use case: If the user changes
the proposed number the value was not saved. This computed with inverse does the trick"""
@api.depends('l10n_latam_move_check_ids.amount', 'l10n_latam_new_check_ids.amount', 'payment_method_code')
def _compute_amount(self):
for rec in self:
rec.l10n_latam_check_number = rec.check_number
checks = rec.l10n_latam_new_check_ids if rec._is_latam_check_payment(check_subtype='new_check') else rec.l10n_latam_move_check_ids
if checks:
rec.amount = sum(checks.mapped('amount'))
def _inverse_l10n_latam_check_number(self):
for rec in self:
rec.check_number = rec.l10n_latam_check_number
def _is_latam_check_payment(self, check_subtype=False):
if check_subtype == 'move_check':
codes = ['in_third_party_checks', 'out_third_party_checks', 'return_third_party_checks']
elif check_subtype == 'new_check':
codes = ['new_third_party_checks', 'own_checks']
else:
codes = ['in_third_party_checks', 'out_third_party_checks', 'return_third_party_checks', 'new_third_party_checks', 'own_checks']
return self.payment_method_code in codes
def _compute_check_number(self):
""" Override from account_check_printing.
For electronic/deferred own checks or third party checks, don't call super so that number is not cleaned """
latam_checks = self.filtered(
lambda x: x.payment_method_line_id.code == 'new_third_party_checks' or
(x.payment_method_line_id.code == 'check_printing' and x.l10n_latam_manual_checks))
return super(AccountPayment, self - latam_checks)._compute_check_number()
def action_post(self):
# unlink checks if payment method code is not for checks. We do it on post and not when changing payment
# method so that the user don't loose checks data in case of changing payment method and coming back again
# also, changing partner recompute payment method so all checks would be cleaned
for payment in self.filtered(lambda x: x.l10n_latam_new_check_ids and not x._is_latam_check_payment(check_subtype='new_check')):
payment.l10n_latam_new_check_ids.unlink()
if not self.env.context.get('l10n_ar_skip_remove_check'):
for payment in self.filtered(lambda x: x.l10n_latam_move_check_ids and not x._is_latam_check_payment(check_subtype='move_check')):
payment.l10n_latam_move_check_ids = False
msgs = self._get_blocking_l10n_latam_warning_msg()
if msgs:
error_msg = "\n".join(f"* {msg}" for msg in msgs)
raise ValidationError(error_msg)
super().action_post()
self._l10n_latam_check_split_move()
def _inverse_check_number(self):
""" On third party checks or electronic/deferred own checks, avoid calling super because is not needed to write
the sequence for these use case. """
avoid_inverse = self.filtered(
lambda x: x.l10n_latam_manual_checks or x.payment_method_line_id.code == 'new_third_party_checks')
return super(AccountPayment, self - avoid_inverse)._inverse_check_number()
def _get_latam_checks(self):
self.ensure_one()
if self._is_latam_check_payment(check_subtype='new_check'):
return self.l10n_latam_new_check_ids
elif self._is_latam_check_payment(check_subtype='move_check'):
return self.l10n_latam_move_check_ids
else:
return self.env['l10n_latam.check']
@api.depends('payment_method_line_id.code', 'partner_id')
def _compute_l10n_latam_check_bank_id(self):
new_third_party_checks = self.filtered(lambda x: x.payment_method_line_id.code == 'new_third_party_checks')
for rec in new_third_party_checks:
rec.l10n_latam_check_bank_id = rec.partner_id.bank_ids[:1].bank_id
(self - new_third_party_checks).l10n_latam_check_bank_id = False
def _get_blocking_l10n_latam_warning_msg(self):
msgs = []
for rec in self.filtered(lambda x: x.state == 'draft' and x._is_latam_check_payment()):
if any(rec.currency_id != check.currency_id for check in rec._get_latam_checks()):
msgs.append(_('The currency of the payment and the currency of the check must be the same.'))
if not rec.currency_id.is_zero(sum(rec._get_latam_checks().mapped('amount')) - rec.amount):
msgs.append(
_('The amount of the payment does not match the amount of the selected check. '
'Please try to deselect and select the check again.')
)
# checks being moved
if rec._is_latam_check_payment(check_subtype='move_check'):
if any(check.payment_id.state == 'draft' for check in rec.l10n_latam_move_check_ids):
msgs.append(
_('Selected checks "%s" are not posted', rec.l10n_latam_move_check_ids.filtered(lambda x: x.payment_id.state == 'draft').mapped('display_name'))
)
elif rec.payment_type == 'outbound' and any(check.current_journal_id != rec.journal_id for check in rec.l10n_latam_move_check_ids):
# check outbound payment and transfer or inbound transfer
msgs.append(_(
'Some checks are not anymore in journal, it seems it has been moved by another payment.')
)
elif rec.payment_type == 'inbound' and not rec._is_latam_check_transfer() and any(rec.l10n_latam_move_check_ids.mapped('current_journal_id')):
msgs.append(
_("Some checks are already in hand and can't be received again. Checks: %s",
', '.join(rec.l10n_latam_move_check_ids.mapped('display_name')))
)
@api.depends('payment_method_line_id.code', 'partner_id')
def _compute_l10n_latam_check_issuer_vat(self):
new_third_party_checks = self.filtered(lambda x: x.payment_method_line_id.code == 'new_third_party_checks')
for rec in new_third_party_checks:
rec.l10n_latam_check_issuer_vat = rec.partner_id.vat
(self - new_third_party_checks).l10n_latam_check_issuer_vat = False
for check in rec.l10n_latam_move_check_ids:
date = rec.date or fields.Datetime.now()
@api.onchange('l10n_latam_check_issuer_vat')
def _clean_l10n_latam_check_issuer_vat(self):
for rec in self.filtered(lambda x: x.l10n_latam_check_issuer_vat and x.company_id.country_id.code):
stdnum_vat = stdnum.util.get_cc_module(rec.company_id.country_id.code, 'vat')
if hasattr(stdnum_vat, 'compact'):
rec.l10n_latam_check_issuer_vat = stdnum_vat.compact(rec.l10n_latam_check_issuer_vat)
last_operation = check._get_last_operation()
if last_operation and last_operation[0].date > date:
msgs.append(
_(
"It seems you're trying to move a check with a date (%(date)s) prior to last "
"operation done with the check (%(last_operation)s). This may be wrong, please "
"double check it. By continue, the last operation on "
"the check will remain being %(last_operation)s",
date=format_date(self.env, date), last_operation=last_operation.display_name
)
)
return msgs
@api.constrains('l10n_latam_check_issuer_vat', 'company_id')
def _check_l10n_latam_check_issuer_vat(self):
for rec in self.filtered(lambda x: x.l10n_latam_check_issuer_vat and x.company_id.country_id):
if not self.env['res.partner']._run_vat_test(rec.l10n_latam_check_issuer_vat, rec.company_id.country_id):
error_message = self.env['res.partner']._build_vat_error_message(
rec.company_id.country_id.code.lower(), rec.l10n_latam_check_issuer_vat, 'Check Issuer VAT')
raise ValidationError(error_message)
def _get_reconciled_checks_error(self):
checks_reconciled = self.l10n_latam_new_check_ids.filtered(lambda x: x.issue_state in ['debited', 'voided'])
if checks_reconciled:
raise UserError(
_("You can't cancel or re-open a payment with checks if some check has been debited or been voided. "
"Checks:\n%s", ('\n'.join(['* %s (%s)' % (x.name, x.issue_state) for x in checks_reconciled])))
)
@api.depends('payment_method_line_id', 'l10n_latam_check_issuer_vat', 'l10n_latam_check_bank_id', 'company_id',
'l10n_latam_check_number', 'l10n_latam_check_id', 'state', 'date', 'is_internal_transfer', 'amount', 'currency_id')
def action_cancel(self):
self._get_reconciled_checks_error()
super().action_cancel()
def action_draft(self):
self._get_reconciled_checks_error()
super().action_draft()
def _l10n_latam_check_split_move(self):
for payment in self.filtered(lambda x: x.payment_method_code == 'own_checks' and x.payment_type == 'outbound'):
if len(payment.l10n_latam_new_check_ids) == 1:
liquidity_line = payment._seek_for_lines()[0]
payment.l10n_latam_new_check_ids.outstanding_line_id = liquidity_line.id
continue
vals = {
'journal_id': payment.journal_id.id,
'move_type': 'entry',
'line_ids': [],
}
payment_liquidity_line = payment._seek_for_lines()[0]
# One line per check
checks_total = sum(payment.l10n_latam_new_check_ids.mapped('amount'))
liquidity_balance_total = 0.0
for check in payment.l10n_latam_new_check_ids:
liquidity_amount_currency = -check.amount
if check == payment.l10n_latam_new_check_ids[-1]:
liquidity_balance = payment.currency_id.round(payment_liquidity_line.balance - liquidity_balance_total)
else:
liquidity_balance = payment.currency_id.round(payment_liquidity_line.balance * check.amount / checks_total)
liquidity_balance_total += liquidity_balance
vals['line_ids'].append(
Command.create({
'name': _(
'Check %(check_number)s - %(suffix)s',
check_number=check.name,
suffix=''.join([item[1] for item in payment._get_aml_default_display_name_list()])),
'date_maturity': check.payment_date,
'amount_currency': liquidity_amount_currency,
'currency_id': check.currency_id.id,
'debit': max(0.0, liquidity_balance),
'credit': -min(liquidity_balance, 0.0),
'partner_id': payment_liquidity_line.partner_id.id,
'account_id': payment_liquidity_line.account_id.id,
'l10n_latam_check_ids': [Command.link(check.id)]
}),
)
# Cancel payment line
vals['line_ids'].append(
Command.create({
'name': payment_liquidity_line.name,
'date_maturity': payment_liquidity_line.date_maturity,
'amount_currency': -payment_liquidity_line.amount_currency,
'currency_id': payment_liquidity_line.currency_id.id,
'debit': -payment_liquidity_line.debit,
'credit': -payment_liquidity_line.credit,
'partner_id': payment_liquidity_line.partner_id.id,
'account_id': payment_liquidity_line.account_id.id,
}),
)
move_id = self.env['account.move'].create(vals)
move_id.action_post()
split_move_counterpart_line = move_id.line_ids.filtered(lambda x: x.amount_currency == -payment_liquidity_line.amount_currency)
(split_move_counterpart_line + payment_liquidity_line).reconcile()
def _l10n_latam_check_unlink_split_move(self):
self.ensure_one()
for check in self.l10n_latam_new_check_ids:
if self.move_id == check.outstanding_line_id.move_id:
check.outstanding_line_id = False
continue
check.outstanding_line_id.move_id.button_draft()
check.outstanding_line_id.move_id.unlink()
@api.depends(
'payment_method_line_id', 'state', 'date', 'amount', 'currency_id', 'company_id',
'l10n_latam_move_check_ids.issuer_vat', 'l10n_latam_move_check_ids.bank_id', 'l10n_latam_move_check_ids.payment_id.date',
'l10n_latam_new_check_ids.amount', 'l10n_latam_new_check_ids.name',
)
def _compute_l10n_latam_check_warning_msg(self):
"""
Compute warning message for latam checks checks
@ -125,245 +212,68 @@ class AccountPayment(models.Model):
Another approach could be to add an onchange on _inverse_l10n_latam_check_number method
"""
self.l10n_latam_check_warning_msg = False
latam_draft_checks = self.filtered(
lambda x: x.state == 'draft' and (x.l10n_latam_manual_checks or x.payment_method_line_id.code in [
'in_third_party_checks', 'out_third_party_checks', 'new_third_party_checks']))
for rec in latam_draft_checks:
for rec in self.filtered(lambda x: x._is_latam_check_payment()):
msgs = rec._get_blocking_l10n_latam_warning_msg()
# new third party check
if rec.l10n_latam_check_number and rec.payment_method_line_id.code == 'new_third_party_checks' and \
rec.l10n_latam_check_bank_id and rec.l10n_latam_check_issuer_vat:
same_checks = self.search([
('company_id', '=', rec.company_id.id),
('l10n_latam_check_bank_id', '=', rec.l10n_latam_check_bank_id.id),
('l10n_latam_check_issuer_vat', '=', rec.l10n_latam_check_issuer_vat),
('check_number', '=', rec.l10n_latam_check_number),
('id', '!=', rec._origin.id)])
# new third party check uniqueness warning (on own checks it's done by a sql constraint)
if rec.payment_method_code == 'new_third_party_checks':
same_checks = self.env['l10n_latam.check']
for check in rec.l10n_latam_new_check_ids.filtered(
lambda x: x.name and x.payment_method_line_id.code == 'new_third_party_checks' and
x.bank_id and x.issuer_vat):
same_checks += same_checks.search([
('company_id', '=', rec.company_id.id),
('bank_id', '=', check.bank_id.id),
('issuer_vat', '=', check.issuer_vat),
('name', '=', check.name),
('payment_id.state', 'not in', ['draft', 'canceled']),
('id', '!=', check._origin.id)], limit=1)
if same_checks:
msgs.append(_(
"Other checks were found with same number, issuer and bank. Please double check you are not "
"encoding the same check more than once. List of other payments/checks: %s",
", ".join(same_checks.mapped('display_name'))))
msgs.append(
_("Other checks were found with same number, issuer and bank. Please double check you are not "
"encoding the same check more than once. List of other payments/checks: %s",
", ".join(same_checks.mapped('display_name')))
)
rec.l10n_latam_check_warning_msg = msgs and '* %s' % '\n* '.join(msgs) or False
def _get_blocking_l10n_latam_warning_msg(self):
msgs = []
for rec in self.filtered('l10n_latam_check_id'):
if rec.currency_id != rec.l10n_latam_check_id.currency_id:
msgs.append(_(
'The currency of the payment (%s) and the currency of the check (%s) must be the same.') % (
rec.currency_id.name, rec.l10n_latam_check_id.currency_id.name))
if not rec.currency_id.is_zero(rec.l10n_latam_check_id.amount - rec.amount):
msgs.append(_(
'The amount of the payment (%s) does not match the amount of the selected check (%s). '
'Please try to deselect and select the check again.', rec.amount, rec.l10n_latam_check_id.amount))
if rec.payment_method_line_id.code in ['in_third_party_checks', 'out_third_party_checks']:
if rec.l10n_latam_check_id.state != 'posted':
msgs.append(_('Selected check "%s" is not posted', rec.l10n_latam_check_id.display_name))
elif (rec.payment_type == 'outbound' and
rec.l10n_latam_check_id.l10n_latam_check_current_journal_id != rec.journal_id) or (
rec.payment_type == 'inbound' and rec.is_internal_transfer and
rec.l10n_latam_check_id.l10n_latam_check_current_journal_id != rec.destination_journal_id):
# check outbound payment and transfer or inbound transfer
msgs.append(_(
'Check "%s" is not anymore in journal "%s", it seems it has been moved by another payment.',
rec.l10n_latam_check_id.display_name, rec.journal_id.name
if rec.payment_type == 'outbound' else rec.destination_journal_id.name))
elif rec.payment_type == 'inbound' and not rec.is_internal_transfer and \
rec.l10n_latam_check_id.l10n_latam_check_current_journal_id:
msgs.append(_("Check '%s' is on journal '%s', it can't be received it again",
rec.l10n_latam_check_id.display_name, rec.journal_id.name))
# moved third party check
if rec.l10n_latam_check_id:
date = rec.date or fields.Datetime.now()
last_operation = rec.env['account.payment'].search([
('state', '=', 'posted'),
'|', ('l10n_latam_check_id', '=', rec.l10n_latam_check_id.id),
('id', '=', rec.l10n_latam_check_id.id),
], order="date desc, id desc", limit=1)
if last_operation and last_operation[0].date > date:
msgs.append(_(
"It seems you're trying to move a check with a date (%s) prior to last operation done with "
"the check (%s). This may be wrong, please double check it. By continue, the last operation on "
"the check will remain being %s",
format_date(self.env, date), last_operation.display_name, last_operation.display_name))
return msgs
@api.depends('is_internal_transfer')
def _compute_payment_method_line_fields(self):
""" Add is_internal_transfer as a trigger to re-compute """
return super()._compute_payment_method_line_fields()
@api.depends('l10n_latam_check_operation_ids.state', 'payment_method_line_id.code')
def _compute_l10n_latam_check_current_journal(self):
new_checks = self.filtered(lambda x: x.payment_method_line_id.code == 'new_third_party_checks')
payments = self.env['account.payment'].search(
[('l10n_latam_check_id', 'in', new_checks.ids), ('state', '=', 'posted')], order="date desc, id desc")
# we store on a dict the first payment (last operation) for each check
checks_mapping = {}
for payment in payments:
if payment.l10n_latam_check_id not in checks_mapping:
checks_mapping[payment.l10n_latam_check_id] = payment
for rec in new_checks:
last_operation = checks_mapping.get(rec)
if not last_operation:
rec.l10n_latam_check_current_journal_id = rec.journal_id
continue
if last_operation.is_internal_transfer and last_operation.payment_type == 'outbound':
rec.l10n_latam_check_current_journal_id = last_operation.paired_internal_transfer_payment_id.journal_id
elif last_operation.payment_type == 'inbound':
rec.l10n_latam_check_current_journal_id = last_operation.journal_id
else:
rec.l10n_latam_check_current_journal_id = False
@api.depends('l10n_latam_manual_checks')
def _compute_show_check_number(self):
latam_checks = self.filtered(
lambda x: x.payment_method_line_id.code == 'new_third_party_checks' or
(x.payment_method_line_id.code == 'check_printing' and x.l10n_latam_manual_checks))
latam_checks.show_check_number = False
super(AccountPayment, self - latam_checks)._compute_show_check_number()
@api.constrains('check_number', 'journal_id')
def _constrains_check_number_unique(self):
""" Don't enforce uniqueness for third party checks"""
third_party_checks = self.filtered(lambda x: x.payment_method_line_id.code == 'new_third_party_checks')
return super(AccountPayment, self - third_party_checks)._constrains_check_number_unique()
@api.onchange('l10n_latam_check_id')
def _onchange_check(self):
for rec in self.filtered('l10n_latam_check_id'):
rec.amount = rec.l10n_latam_check_id.amount
@api.onchange('payment_method_line_id', 'is_internal_transfer', 'journal_id', 'destination_journal_id')
def _onchange_to_reset_check_ids(self):
# If any of these fields change, the domain of the selectable checks could change
self.l10n_latam_check_id = False
@api.onchange('l10n_latam_check_number')
def _onchange_check_number(self):
for rec in self.filtered(
lambda x: x.journal_id.company_id.country_id.code == "AR" and
x.l10n_latam_check_number and x.l10n_latam_check_number.isdecimal()):
rec.l10n_latam_check_number = '%08d' % int(rec.l10n_latam_check_number)
def _get_payment_method_codes_to_exclude(self):
res = super()._get_payment_method_codes_to_exclude()
if self.is_internal_transfer:
res.append('new_third_party_checks')
return res
def action_unmark_sent(self):
""" Unmarking as sent for electronic/deferred check would give the option to print and re-number check but
it's not implemented yet for this kind of checks"""
if self.filtered(lambda x: x.payment_method_line_id.code == 'check_printing' and x.l10n_latam_manual_checks):
raise UserError(_('Unmark sent is not implemented for electronic or deferred checks'))
return super().action_unmark_sent()
def action_post(self):
msgs = self._get_blocking_l10n_latam_warning_msg()
if msgs:
raise ValidationError('* %s' % '\n* '.join(msgs))
res = super().action_post()
# mark own checks that are not printed as sent
self.filtered(lambda x: x.payment_method_line_id.code == 'check_printing' and x.l10n_latam_manual_checks).write({'is_move_sent': True})
return res
def action_draft(self):
if self.l10n_latam_check_operation_ids.filtered(lambda x: x.state == "posted"):
raise ValidationError(_(
"This third party check is already used to make one or more payments. Please reset them to draft first.\n"
"Payments made with this check: %s",
"".join(f'\n - {payment.name}' for payment in self.l10n_latam_check_operation_ids)))
return super().action_draft()
@api.model
def _get_trigger_fields_to_synchronize(self):
res = super()._get_trigger_fields_to_synchronize()
return res + ('l10n_latam_check_number',)
return res + ('l10n_latam_new_check_ids',)
def _prepare_move_line_default_vals(self, write_off_line_vals=None):
def _prepare_move_line_default_vals(self, write_off_line_vals=None, force_balance=None):
""" Add check name and operation on liquidity line """
res = super()._prepare_move_line_default_vals(write_off_line_vals=write_off_line_vals)
check = self if (self.payment_method_line_id.code == 'new_third_party_checks' or (self.payment_method_line_id.code == 'check_printing' and self.l10n_latam_manual_checks)) \
else self.l10n_latam_check_id
if check:
document_name = (_('Check %s received') if self.payment_type == 'inbound' else _('Check %s delivered')) % (
check.check_number)
res = super()._prepare_move_line_default_vals(write_off_line_vals=write_off_line_vals, force_balance=force_balance)
# if only one check we don't create the split line, we add same data on liquidity line
if self.payment_method_code == 'own_checks' and self.payment_type == 'outbound' and len(self.l10n_latam_new_check_ids) == 1:
res[0].update({
'name': _(
'Check %(check_number)s - %(suffix)s',
check_number=self.l10n_latam_new_check_ids.name,
suffix=''.join([item[1] for item in self._get_aml_default_display_name_list()])),
'date_maturity': self.l10n_latam_new_check_ids.payment_date,
})
# we dont check the payment method code because when deposited on bank/cash journals pay method is manual but we still change the label
# we dont want this names on the own checks because it doesn't add value, already each split/check line will have it name
elif (self.l10n_latam_new_check_ids or self.l10n_latam_move_check_ids) and self.payment_method_code != 'own_checks':
check_name = [check_name for check_name in (self.l10n_latam_new_check_ids | self.l10n_latam_move_check_ids).mapped('name') if check_name]
document_name = (
_('Checks %s received') if self.payment_type == 'inbound' else _('Checks %s delivered')) % (
', '.join(check_name)
)
res[0].update({
'name': document_name + ' - ' + ''.join([item[1] for item in self._get_aml_default_display_name_list()]),
})
return res
def name_get(self):
""" Add check number to display_name on check_id m2o field """
res_names = super().name_get()
for i, (res_name, rec) in enumerate(zip(res_names, self)):
if rec.check_number and rec.payment_method_line_id.code == 'new_third_party_checks':
res_names[i] = (res_name[0], "%s %s" % (res_name[1], _("(Check %s)", rec.check_number)))
return res_names
@api.depends('l10n_latam_move_check_ids')
def _compute_destination_account_id(self):
# EXTENDS 'account'
super()._compute_destination_account_id()
for payment in self:
if payment.l10n_latam_move_check_ids and (not payment.partner_id or payment.partner_id == payment.company_id.partner_id):
payment.destination_account_id = payment.company_id.transfer_account_id.id
def button_open_check_operations(self):
''' Redirect the user to the invoice(s) paid by this payment.
:return: An action on account.move.
'''
def _is_latam_check_transfer(self):
self.ensure_one()
operations = (self.l10n_latam_check_operation_ids.filtered(lambda x: x.state == 'posted') + self)
action = {
'name': _("Check Operations"),
'type': 'ir.actions.act_window',
'res_model': 'account.payment',
'views': [
(self.env.ref('l10n_latam_check.view_account_third_party_check_operations_tree').id, 'tree'),
(False, 'form')],
'context': {'create': False},
'domain': [('id', 'in', operations.ids)],
}
return action
def _create_paired_internal_transfer_payment(self):
"""
Two modifications when only when transferring from a third party checks journal:
1. When a paired transfer is created, the default odoo behavior is to use on the paired transfer the first
available payment method. If we are transferring to another third party checks journal, then set as payment
method on the paired transfer 'in_third_party_checks' or 'out_third_party_checks'
2. On the paired transfer set the l10n_latam_check_id field, this field is needed for the
l10n_latam_check_operation_ids and also for some warnings and constrains.
"""
third_party_checks = self.filtered(lambda x: x.payment_method_line_id.code in [
'in_third_party_checks',
'out_third_party_checks'
])
for rec in third_party_checks:
dest_payment_method_code = 'in_third_party_checks' if rec.payment_type == 'outbound' else 'out_third_party_checks'
dest_payment_method = rec.destination_journal_id.inbound_payment_method_line_ids.filtered(
lambda x: x.code == dest_payment_method_code)
if dest_payment_method:
super(AccountPayment, rec.with_context(
default_payment_method_line_id=dest_payment_method.id,
default_l10n_latam_check_id=rec.l10n_latam_check_id,
))._create_paired_internal_transfer_payment()
else:
super(AccountPayment, rec.with_context(
default_l10n_latam_check_id=rec.l10n_latam_check_id,
))._create_paired_internal_transfer_payment()
super(AccountPayment, self - third_party_checks)._create_paired_internal_transfer_payment()
@api.constrains('l10n_latam_check_id')
def _check_l10n_latam_check_id(self):
if self.filtered(lambda x: x.payment_method_line_id.code == 'out_third_party_checks'):
payments = self.env['account.payment'].search_count([
('l10n_latam_check_id', 'in', self.l10n_latam_check_id.ids),
('payment_type', '=', 'outbound'),
('journal_id', 'in', self.journal_id.ids),
('id', 'not in', self.ids)],
limit=1)
if payments:
raise ValidationError(_(
"The check(s) '%s' is already used on another payment. Please select another check or "
"deselect the check on this payment.", self.l10n_latam_check_id.mapped('display_name')))
return not self.partner_id and self.destination_account_id == self.company_id.transfer_account_id

View file

@ -7,7 +7,9 @@ class AccountPaymentMethod(models.Model):
@api.model
def _get_payment_method_information(self):
res = super()._get_payment_method_information()
res['new_third_party_checks'] = {'mode': 'multi', 'domain': [('type', '=', 'cash')]}
res['in_third_party_checks'] = {'mode': 'multi', 'domain': [('type', '=', 'cash')]}
res['out_third_party_checks'] = {'mode': 'multi', 'domain': [('type', '=', 'cash')]}
res['new_third_party_checks'] = {'mode': 'multi', 'type': ('cash',)}
res['in_third_party_checks'] = {'mode': 'multi', 'type': ('cash',)}
res['out_third_party_checks'] = {'mode': 'multi', 'type': ('cash',)}
res['return_third_party_checks'] = {'mode': 'multi', 'type': ('bank',)}
res['own_checks'] = {'mode': 'multi', 'type': ('bank',)}
return res

View file

@ -0,0 +1,210 @@
# pylint: disable=protected-access
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import logging
import stdnum
from odoo import models, fields, api, Command, _
from odoo.exceptions import UserError, ValidationError
from odoo.tools import index_exists
_logger = logging.getLogger(__name__)
class L10n_LatamCheck(models.Model):
_name = 'l10n_latam.check'
_description = 'Account payment check'
_check_company_auto = True
_inherit = ['mail.thread', 'mail.activity.mixin']
payment_id = fields.Many2one(
'account.payment',
required=True,
ondelete='cascade',
)
operation_ids = fields.Many2many(
comodel_name='account.payment',
relation='l10n_latam_check_account_payment_rel',
column1="check_id",
column2="payment_id",
readonly=True,
check_company=True,
)
current_journal_id = fields.Many2one(
comodel_name='account.journal',
compute='_compute_current_journal', store=True,
)
name = fields.Char(string='Number')
bank_id = fields.Many2one(
comodel_name='res.bank',
compute='_compute_bank_id', store=True, readonly=False,
)
issuer_vat = fields.Char(
compute='_compute_issuer_vat', store=True, readonly=False,
)
payment_date = fields.Date(readonly=False, required=True)
amount = fields.Monetary()
outstanding_line_id = fields.Many2one('account.move.line', readonly=True, check_company=True)
issue_state = fields.Selection(
selection=[('handed', 'Handed'), ('debited', 'Debited'), ('voided', 'Voided')],
compute='_compute_issue_state',
store=True
)
# fields from payment
payment_method_code = fields.Char(related='payment_id.payment_method_code')
partner_id = fields.Many2one(related='payment_id.partner_id')
original_journal_id = fields.Many2one(related='payment_id.journal_id')
company_id = fields.Many2one(related='payment_id.company_id', store=True)
currency_id = fields.Many2one(related='payment_id.currency_id')
payment_method_line_id = fields.Many2one(
related='payment_id.payment_method_line_id',
store=True,
)
# issue_state is used to know that is an own check and also that is posted
_unique = models.UniqueIndex("(name, payment_method_line_id) WHERE outstanding_line_id IS NOT NULL")
@api.onchange('name')
def _onchange_name(self):
if self.name:
self.name = self.name.zfill(8)
def _prepare_void_move_vals(self):
return {
'ref': 'Void check',
'journal_id': self.outstanding_line_id.move_id.journal_id.id,
'line_ids': [
Command.create({
'name': "Void check %s" % self.outstanding_line_id.name,
'date_maturity': self.outstanding_line_id.date_maturity,
'amount_currency': self.outstanding_line_id.amount_currency,
'currency_id': self.outstanding_line_id.currency_id.id,
'debit': self.outstanding_line_id.debit,
'credit': self.outstanding_line_id.credit,
'partner_id': self.outstanding_line_id.partner_id.id,
'account_id': self.payment_id.destination_account_id.id,
}),
Command.create({
'name': "Void check %s" % self.outstanding_line_id.name,
'date_maturity': self.outstanding_line_id.date_maturity,
'amount_currency': -self.outstanding_line_id.amount_currency,
'currency_id': self.outstanding_line_id.currency_id.id,
'debit': -self.outstanding_line_id.debit,
'credit': -self.outstanding_line_id.credit,
'partner_id': self.outstanding_line_id.partner_id.id,
'account_id': self.outstanding_line_id.account_id.id,
}),
],
}
@api.depends('outstanding_line_id.amount_residual')
def _compute_issue_state(self):
for rec in self:
if not rec.outstanding_line_id:
rec.issue_state = False
elif rec.amount and not rec.outstanding_line_id.amount_residual:
if any(
line.account_id.account_type in ['liability_payable', 'asset_receivable']
for line in rec.outstanding_line_id.matched_debit_ids.debit_move_id.move_id.line_ids
):
rec.issue_state = 'voided'
else:
rec.issue_state = 'debited'
else:
rec.issue_state = 'handed'
def action_void(self):
for rec in self.filtered('outstanding_line_id'):
void_move = rec.env['account.move'].create(rec._prepare_void_move_vals())
void_move.action_post()
(void_move.line_ids[1] + rec.outstanding_line_id).reconcile()
def _get_last_operation(self):
self.ensure_one()
return (self.payment_id + self.operation_ids).filtered(
lambda x: x.state not in ['draft', 'canceled']).sorted(key=lambda payment: (payment.date, payment.write_date, payment._origin.id))[-1:]
@api.depends('payment_id.state', 'operation_ids.state')
def _compute_current_journal(self):
for rec in self:
last_operation = rec._get_last_operation()
if not last_operation:
rec.current_journal_id = False
continue
if last_operation.payment_type == 'inbound':
rec.current_journal_id = last_operation.journal_id
else:
rec.current_journal_id = False
def button_open_payment(self):
self.ensure_one()
return self.payment_id._get_records_action()
def button_open_check_operations(self):
''' Redirect the user to the invoice(s) paid by this payment.
:return: An action on account.move.
'''
self.ensure_one()
operations = ((self.operation_ids + self.payment_id).filtered(lambda x: x.state not in ['draft', 'canceled']))
action = {
'name': _("Check Operations"),
'type': 'ir.actions.act_window',
'res_model': 'account.payment',
'views': [
(self.env.ref('l10n_latam_check.view_account_third_party_check_operations_tree').id, 'list'),
(False, 'form')
],
'context': {'create': False},
'domain': [('id', 'in', operations.ids)],
}
return action
def action_show_reconciled_move(self):
self.ensure_one()
move = self._get_reconciled_move()
return move._get_records_action()
def action_show_journal_entry(self):
self.ensure_one()
return self.outstanding_line_id.move_id._get_records_action()
def _get_reconciled_move(self):
reconciled_line = self.outstanding_line_id.full_reconcile_id.reconciled_line_ids - self.outstanding_line_id
return (reconciled_line.move_id.line_ids - reconciled_line).mapped('move_id')
@api.constrains('amount')
def _constrains_min_amount(self):
min_amount_error = self.filtered(lambda x: x.amount <= 0)
if min_amount_error:
raise ValidationError(_('The amount of the check must be greater than 0'))
@api.depends('payment_method_line_id.code', 'payment_id.partner_id')
def _compute_bank_id(self):
new_third_party_checks = self.filtered(lambda x: x.payment_method_line_id.code == 'new_third_party_checks')
for rec in new_third_party_checks:
rec.bank_id = rec.partner_id.bank_ids[:1].bank_id
(self - new_third_party_checks).bank_id = False
@api.depends('payment_method_line_id.code', 'payment_id.partner_id')
def _compute_issuer_vat(self):
new_third_party_checks = self.filtered(lambda x: x.payment_method_line_id.code == 'new_third_party_checks')
for rec in new_third_party_checks:
rec.issuer_vat = rec.payment_id.partner_id.vat
(self - new_third_party_checks).issuer_vat = False
@api.onchange('issuer_vat')
def _clean_issuer_vat(self):
for rec in self.filtered(lambda x: x.issuer_vat and x.company_id.country_id.code):
stdnum_vat = stdnum.util.get_cc_module(rec.company_id.country_id.code, 'vat')
if hasattr(stdnum_vat, 'compact'):
rec.issuer_vat = stdnum_vat.compact(rec.issuer_vat)
@api.constrains('issuer_vat')
def _check_issuer_vat(self):
for rec in self.filtered(lambda x: x.issuer_vat and x.company_id.country_id):
self.env['res.partner']._run_vat_checks(rec.company_id.country_id, rec.issuer_vat, partner_name='Check Issuer VAT')
@api.ondelete(at_uninstall=False)
def _unlink_if_payment_is_draft(self):
if any(check.payment_id.state != 'draft' for check in self):
raise UserError(self.env._("Can't delete a check if payment is In Process!"))

View file

@ -1,2 +1,5 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_l10n_latam_payment_mass_transfer,access_l10n_latam_payment_mass_transfer,model_l10n_latam_payment_mass_transfer,account.group_account_invoice,1,1,1,0
access_l10n_latam_account_payment_register_check,access.account.payment.register.check,model_l10n_latam_payment_register_check,account.group_account_invoice,1,1,1,1
access_l10n_latam_check_readonly,l10n_latam.check,model_l10n_latam_check,account.group_account_readonly,1,0,0,0
access_l10n_latam_check,l10n_latam.check,model_l10n_latam_check,account.group_account_invoice,1,1,1,1

1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_l10n_latam_payment_mass_transfer access_l10n_latam_payment_mass_transfer model_l10n_latam_payment_mass_transfer account.group_account_invoice 1 1 1 0
3 access_l10n_latam_account_payment_register_check access.account.payment.register.check model_l10n_latam_payment_register_check account.group_account_invoice 1 1 1 1
4 access_l10n_latam_check_readonly l10n_latam.check model_l10n_latam_check account.group_account_readonly 1 0 0 0
5 access_l10n_latam_check l10n_latam.check model_l10n_latam_check account.group_account_invoice 1 1 1 1

View file

@ -0,0 +1,9 @@
<odoo noupdate="1">
<record model="ir.rule" id="l10n_latam_check_comp_rule">
<field name="name">Latam Check company rule</field>
<field name="model_id" ref="model_l10n_latam_check"/>
<field name="domain_force">[('company_id', 'in', company_ids)]</field>
</record>
</odoo>

View file

@ -2,26 +2,36 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo.addons.account.tests.common import AccountTestInvoicingCommon
from odoo.tests.common import tagged
from odoo import Command
@tagged('post_install_l10n', 'post_install', '-at_install')
class L10nLatamCheckTest(AccountTestInvoicingCommon):
@classmethod
def setUpClass(cls, chart_template_ref=None):
super().setUpClass(chart_template_ref=chart_template_ref)
def setUpClass(cls):
super().setUpClass()
chart_template = cls.company_data['company'].chart_template_id
cls.company_data_3 = cls.setup_company_data(
'company_3_data', chart_template=chart_template, **{'country_id': cls.env.ref('base.ar').id})
cls.chart_template = cls.company_data['company'].chart_template
cls.company_data_3 = cls.setup_other_company(name='company_3_data', country_id=cls.env.ref('base.ar').id)
cls.bank_journal = cls.company_data_3['default_journal_bank']
cls.bank_journal.outbound_payment_method_line_ids = [
Command.create({'payment_method_id': cls.env.ref('l10n_latam_check.account_payment_method_own_checks').id, 'name': 'Own Checks'}),
Command.create({'payment_method_id': cls.env.ref('l10n_latam_check.account_payment_method_out_third_party_checks').id, 'name': 'Rejected Check'}),
]
# enable use electronic/deferred checks on bank journal
cls.bank_journal.l10n_latam_manual_checks = True
third_party_checks_journals = cls.env['account.journal'].search([('outbound_payment_method_line_ids.code', '=', 'new_third_party_checks'), ('inbound_payment_method_line_ids.code', '=', 'out_third_party_checks'), ('inbound_payment_method_line_ids.code', '=', 'new_third_party_checks')])
third_party_checks_journals = cls.env['account.journal'].search([
('inbound_payment_method_line_ids.code', '=', 'in_third_party_checks'),
('inbound_payment_method_line_ids.code', '=', 'new_third_party_checks'),
('outbound_payment_method_line_ids.code', 'in', ('out_third_party_checks', 'return_third_party_checks')),
])
cls.third_party_check_journal = third_party_checks_journals[0]
cls.rejected_check_journal = third_party_checks_journals[1]
cls.assertTrue(cls.third_party_check_journal, 'Third party check journal was not created so we can run the tests')
cls.assertTrue(cls.rejected_check_journal, 'Rejected check journal was not created so we can run the tests')
for company in third_party_checks_journals.grouped('company_id'):
outstanding_account = cls.outbound_payment_method_line.payment_account_id.copy({'company_ids': [Command.set(company.ids)]})
cls.bank_journal.outbound_payment_method_line_ids.filtered(lambda m: m.company_id == company).payment_account_id = outstanding_account

View file

@ -1,32 +1,94 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo.addons.l10n_latam_check.tests.common import L10nLatamCheckTest
from odoo.tests.common import Form, tagged
from odoo import fields
from odoo.tests import Form, tagged
from odoo import Command, fields
@tagged('post_install_l10n', 'post_install', '-at_install')
class TestOwnChecks(L10nLatamCheckTest):
def test_01_pay_with_manual_check(self):
""" Create and post a manual check with deferred date """
def test_01_pay_with_own_checks(self):
""" Create and post a manual checks with deferred date """
with Form(self.env['account.payment'].with_context(default_payment_type='outbound')) as payment_form:
payment_form.partner_id = self.partner_a
payment_form.amount = 50
payment_form.journal_id = self.bank_journal
payment_form.payment_method_line_id = self.bank_journal._get_available_payment_method_lines(
'outbound').filtered(lambda x: x.code == 'check_printing')
'outbound').filtered(lambda x: x.code == 'own_checks')[0]
payment_form.memo = 'Deferred check'
with payment_form.l10n_latam_new_check_ids.new() as check1:
check1.name = '00000001'
check1.payment_date = fields.Date.add(fields.Date.today(), months=1)
check1.issuer_vat = '30714295698'
check1.amount = 25
payment_form.ref = 'Deferred check'
payment_form.l10n_latam_check_payment_date = fields.Date.add(fields.Date.today(), months=1)
# Manual check (deferred/electronic) has l10n_latam_manual_checks = True and do not auto compute the check
# number field
self.assertEqual(payment_form.l10n_latam_manual_checks, True)
self.assertEqual(payment_form.check_number, False)
payment_form.l10n_latam_check_number = '00000001'
with payment_form.l10n_latam_new_check_ids.new() as check2:
check2.name = '00000002'
check2.payment_date = fields.Date.add(fields.Date.today(), months=1)
check2.issuer_vat = '30714295698'
check2.amount = 25
payment = payment_form.save()
payment.action_post()
self.assertEqual(payment.amount, 50)
outstanding_line_ids = payment.l10n_latam_new_check_ids.mapped('outstanding_line_id')
self.assertEqual(len(outstanding_line_ids), 2, "There should be a split line per check. (2)")
all_handed = any(s == 'handed' for s in payment.l10n_latam_new_check_ids.mapped('issue_state'))
self.assertTrue(all_handed, "All checks should be in handed status.")
first_check = payment.l10n_latam_new_check_ids[0]
first_check.action_void()
self.assertTrue(first_check.issue_state == 'voided', "First checks should be in voided status.")
def test_02_pay_with_own_check_and_cancel_payment(self):
""" Create and post a manual check with deferred date ands cancel it """
with Form(self.env['account.payment'].with_context(default_payment_type='outbound')) as payment_form:
payment_form.partner_id = self.partner_a
payment_form.journal_id = self.bank_journal
payment_form.payment_method_line_id = self.bank_journal._get_available_payment_method_lines(
'outbound').filtered(lambda x: x.code == 'own_checks')[0]
payment_form.memo = 'Deferred check'
with payment_form.l10n_latam_new_check_ids.new() as check1:
check1.name = '00000003'
check1.payment_date = fields.Date.add(fields.Date.today(), months=1)
check1.issuer_vat = '30714295698'
check1.amount = 50
payment = payment_form.save()
payment.action_post()
self.assertEqual(payment.amount, 50)
payment.action_cancel()
self.assertFalse(payment.l10n_latam_new_check_ids.issue_state,
"Canceled payment checks must not have issue state")
self.assertEqual(len(payment.l10n_latam_new_check_ids.outstanding_line_id), 0,
"Canceled payment checks must not have split move")
def test_post_own_check_with_3_lines(self):
foreign_currency = self.env.ref('base.EUR')
foreign_currency.active = True
payment_method_line = self.bank_journal._get_available_payment_method_lines('outbound').filtered_domain([('code', '=', 'own_checks')])[:1]
payment = self.env['account.payment'].create({
'payment_type': 'outbound',
'partner_id': self.partner_a.id,
'journal_id': self.bank_journal.id,
'currency_id': foreign_currency.id,
'payment_method_line_id': payment_method_line.id,
'l10n_latam_new_check_ids': [
Command.create({
'payment_date': fields.Date.today(),
'amount': '20',
}),
Command.create({
'payment_date': fields.Date.today(),
'amount': '30',
}),
Command.create({
'payment_date': fields.Date.today(),
'amount': '70',
}),
]
})
payment.action_post()
self.assertEqual(payment.amount, 120)

View file

@ -1,24 +1,32 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from freezegun import freeze_time
from unittest.mock import patch
from datetime import datetime, timedelta
from odoo.addons.l10n_latam_check.tests.common import L10nLatamCheckTest
from odoo.exceptions import ValidationError, UserError
from odoo.tests.common import tagged
from odoo import fields, Command
@tagged('post_install_l10n', 'post_install', '-at_install')
class TestThirdChecks(L10nLatamCheckTest):
def create_third_party_check(self, journal=False, check_number='00000001'):
def create_third_party_check(self, journal=False, check_numbers=['00000001', '00000002']):
if not journal:
journal = self.third_party_check_journal
vals = {
'partner_id': self.partner_a.id,
'amount': 1,
'check_number': check_number,
'payment_type': 'inbound',
'journal_id': journal.id,
'l10n_latam_new_check_ids': [
Command.create({'name': check_numbers[0], 'payment_date': fields.Date.add(fields.Date.today(), months=1), 'amount': 1}),
Command.create({'name': check_numbers[1], 'payment_date': fields.Date.add(fields.Date.today(), months=1), 'amount': 1}),
],
'payment_method_line_id': journal._get_available_payment_method_lines('inbound').filtered(lambda x: x.code == 'new_third_party_checks').id,
}
payment = self.env['account.payment'].create(vals)
payment.action_post()
return payment
@ -27,50 +35,35 @@ class TestThirdChecks(L10nLatamCheckTest):
""" This a generic test to check that we are able to pay with checks
We pay directly with multiple checks instead of just one check, just to ensure the create multi
is properly working. """
vals_list = [{
'partner_id': self.partner_a.id,
'amount': 1,
'check_number': '00000001',
'payment_type': 'inbound',
'journal_id': self.third_party_check_journal.id,
'payment_method_line_id': self.third_party_check_journal._get_available_payment_method_lines('inbound').filtered(lambda x: x.code == 'new_third_party_checks').id,
}, {
'partner_id': self.partner_a.id,
'amount': 2,
'check_number': '00000002',
'payment_type': 'inbound',
'journal_id': self.third_party_check_journal.id,
'payment_method_line_id': self.third_party_check_journal._get_available_payment_method_lines('inbound').filtered(lambda x: x.code == 'new_third_party_checks').id,
}]
payments = self.env['account.payment'].create(vals_list)
payments.action_post()
self.assertEqual(len(payments), 2, 'Checks where not created properly')
self.assertRecordValues(payments, [{
'l10n_latam_check_current_journal_id': self.third_party_check_journal.id,
payment = self.create_third_party_check()
self.assertEqual(len(payment.l10n_latam_new_check_ids), 2, 'Checks where not created properly')
self.assertRecordValues(payment.l10n_latam_new_check_ids, [{
'current_journal_id': self.third_party_check_journal.id,
}]*2)
# delivery (assert) dd un cheque tmb un return (assert) y un claim (assert)
def test_02_third_party_check_delivery(self):
check = self.create_third_party_check()
payment = self.create_third_party_check()
check = payment.l10n_latam_new_check_ids[0]
# Check Delivery
vals = {
'l10n_latam_check_id': check.id,
'amount': 1,
'l10n_latam_move_check_ids': [Command.set([check.id])],
'partner_id': self.partner_a.id,
'payment_type': 'outbound',
'journal_id': self.third_party_check_journal.id,
'payment_method_line_id': self.third_party_check_journal._get_available_payment_method_lines('outbound').filtered(lambda x: x.code == 'out_third_party_checks').id,
'payment_method_line_id': self.third_party_check_journal._get_available_payment_method_lines('outbound').filtered(lambda x: x.code in ('out_third_party_checks', 'return_third_party_checks')).id,
}
delivery = self.env['account.payment'].create(vals)
delivery.action_post()
self.assertFalse(check.l10n_latam_check_current_journal_id, 'Current journal was not computed properly on delivery')
self.assertFalse(check.current_journal_id, 'Current journal was not computed properly on delivery')
# check dont delivery twice
with self.assertRaisesRegex(ValidationError, "is already used on another payment"), self.cr.savepoint():
with self.assertRaisesRegex(ValidationError, "it seems it has been moved by another payment"):
self.env['account.payment'].create(vals).action_post()
# Check Return / Rejection
vals = {
'l10n_latam_check_id': check.id,
'l10n_latam_move_check_ids': [Command.set([check.id])],
'amount': 1,
'partner_id': self.partner_a.id,
'payment_type': 'inbound',
@ -79,105 +72,138 @@ class TestThirdChecks(L10nLatamCheckTest):
}
supplier_return = self.env['account.payment'].create(vals)
supplier_return.action_post()
self.assertEqual(check.l10n_latam_check_current_journal_id, self.rejected_check_journal, 'Current journal was not computed properly on return')
self.assertEqual(check.current_journal_id, self.rejected_check_journal, 'Current journal was not computed properly on return')
# check dont return twice
with self.assertRaisesRegex(ValidationError, "it can't be received it again"), self.cr.savepoint():
with self.assertRaisesRegex(ValidationError, "Some checks are already in hand and can't be received again"):
self.env['account.payment'].create(vals).action_post()
# Check Claim/Return to customer
vals = {
'l10n_latam_check_id': check.id,
'amount': 1,
'l10n_latam_move_check_ids': [Command.set([check.id])],
'partner_id': self.partner_a.id,
'payment_type': 'outbound',
'journal_id': self.rejected_check_journal.id,
'payment_method_line_id': self.rejected_check_journal._get_available_payment_method_lines('outbound').filtered(lambda x: x.code == 'out_third_party_checks').id,
'payment_method_line_id': self.rejected_check_journal._get_available_payment_method_lines('outbound').filtered(lambda x: x.code in ('out_third_party_checks', 'return_third_party_checks')).id,
}
customer_return = self.env['account.payment'].create(vals)
customer_return.action_post()
self.assertFalse(check.l10n_latam_check_current_journal_id, 'Current journal was not computed properly on customer return')
self.assertFalse(check.current_journal_id, 'Current journal was not computed properly on customer return')
# check dont claim twice
with self.assertRaisesRegex(ValidationError, "is already used on another payment"), self.cr.savepoint():
with self.assertRaisesRegex(ValidationError, "Some checks are not anymore in journal,"):
self.env['account.payment'].create(vals).action_post()
operations = self.env['account.payment'].search([('l10n_latam_check_id', '=', check.id), ('state', '=', 'posted')], order="date desc, id desc")
operations = self.env['account.payment'].search([('l10n_latam_move_check_ids', '=', check.id), ('state', '!=', 'draft')], order="date desc, id desc")
self.assertEqual(len(operations), 3, 'There should be 3 operations on the check')
self.assertEqual(operations, customer_return | supplier_return | delivery)
def test_03_check_deposit(self):
check = self.create_third_party_check()
def test_03_deposit(self):
payment = self.create_third_party_check()
check = payment.l10n_latam_new_check_ids[0]
bank_journal = self.company_data_3['default_journal_bank']
# Check Deposit
deposit = self.env['l10n_latam.payment.mass.transfer'].with_context(
active_model='account.payment', active_ids=[check.id]).create({'destination_journal_id': bank_journal.id})._create_payments()
self.assertEqual(check.l10n_latam_check_current_journal_id, bank_journal, 'Current journal was not computed properly on delivery')
# check dont deposit twice
with self.assertRaisesRegex(UserError, "All selected checks must be on the same journal and on hand"), self.cr.savepoint():
self.env['l10n_latam.payment.mass.transfer'].with_context(
active_model='account.payment', active_ids=[check.id]).create({'destination_journal_id': bank_journal.id})._create_payments()
# Check Rejection
vals = {
'l10n_latam_check_id': check.id,
'amount': 1,
'payment_type': 'inbound',
'journal_id': self.rejected_check_journal.id,
'is_internal_transfer': True,
'payment_method_line_id': self.rejected_check_journal._get_available_payment_method_lines('inbound').filtered(lambda x: x.code == 'in_third_party_checks').id,
# Deposit the check to the bank
self.env['l10n_latam.payment.mass.transfer'].with_context(
active_model='l10n_latam.check', active_ids=[check.id]
).create({
'destination_journal_id': bank_journal.id,
}
bank_rejection = self.env['account.payment'].create(vals)
bank_rejection.action_post()
self.assertEqual(check.l10n_latam_check_current_journal_id, self.rejected_check_journal, 'Current journal was not computed properly on return')
# check dont reject twice
with self.assertRaisesRegex(ValidationError, "it seems it has been moved by another payment"), self.cr.savepoint():
self.env['account.payment'].create(vals).action_post()
})._create_payments()
self.assertEqual(check.current_journal_id.id, bank_journal.id, 'Current journal was not computed properly on delivery')
self.assertEqual(len(check.operation_ids + payment), 3, 'Check that all three payments were created')
# Check Claim/Return to customer
vals = {
'l10n_latam_check_id': check.id,
'amount': 1,
# If the bank tells you that the check has been rejected you have to do a new transfer of the previous check
self.env['l10n_latam.payment.mass.transfer'].with_context(
active_model='l10n_latam.check', active_ids=[check.id]
).create({
'destination_journal_id': self.rejected_check_journal.id,
})._create_payments()
self.assertEqual(check.current_journal_id.id, self.rejected_check_journal.id, 'Current journal was not computed properly on delivery')
self.assertEqual(len(check.operation_ids + payment), 5, 'Check that all five payments were created')
# Sent back to customer (with payment) - check if we can use the check
self.env['account.payment'].create({
'partner_id': self.partner_a.id,
'payment_type': 'outbound',
'journal_id': self.rejected_check_journal.id,
'payment_method_line_id': self.rejected_check_journal._get_available_payment_method_lines('outbound').filtered(lambda x: x.code == 'out_third_party_checks').id,
}
customer_return = self.env['account.payment'].create(vals)
customer_return.action_post()
self.assertFalse(check.l10n_latam_check_current_journal_id, 'Current journal was not computed properly on customer return')
# check dont return twice
with self.assertRaisesRegex(ValidationError, "is already used on another payment"), self.cr.savepoint():
self.env['account.payment'].create(vals).action_post()
operations = self.env['account.payment'].search([('l10n_latam_check_id', '=', check.id), ('state', '=', 'posted')], order="date desc, id desc")
# we have 5 operations because for each transfers a second payment/operation is created automatically by odoo
self.assertEqual(len(operations), 5, 'There should be 5 operations on the check')
self.assertEqual(operations[0], customer_return, 'Last operation should be customer return')
self.assertEqual(operations[2], bank_rejection, 'Previous operation should be bank rejection')
self.assertEqual(operations[4], deposit, 'First operation should be the deposit')
'l10n_latam_move_check_ids': [Command.set([check.id])],
'payment_method_line_id': self.rejected_check_journal._get_available_payment_method_lines('inbound').filtered(lambda x: x.code == 'new_third_party_checks').id,
}).action_post()
def test_04_check_transfer(self):
""" Test transfer between third party checks journals """
check = self.create_third_party_check()
payment = self.create_third_party_check()
check = payment.l10n_latam_new_check_ids[0]
# Transfer to rejected checks journal (usually is to another third party checks journal, but for test purpose is the same)
self.env['l10n_latam.payment.mass.transfer'].with_context(
active_model='account.payment', active_ids=[check.id]).create({'destination_journal_id': self.rejected_check_journal.id})._create_payments()
self.assertEqual(check.l10n_latam_check_current_journal_id, self.rejected_check_journal, 'Current journal was not computed properly on delivery')
active_model='l10n_latam.check', active_ids=[check.id]).create({'destination_journal_id': self.rejected_check_journal.id})._create_payments()
self.assertEqual(check.current_journal_id, self.rejected_check_journal, 'Current journal was not computed properly on delivery')
# test that checks created on different journals but that are on same current journal, can be transfered together
check2 = self.create_third_party_check(journal=self.rejected_check_journal)
payment2 = self.create_third_party_check(journal=self.rejected_check_journal)
check2 = payment2.l10n_latam_new_check_ids[0]
self.env['l10n_latam.payment.mass.transfer'].with_context(
active_model='account.payment', active_ids=[check.id, check2.id]).create({'destination_journal_id': self.third_party_check_journal.id})._create_payments()
active_model='l10n_latam.check', active_ids=[check.id, check2.id]).create({'destination_journal_id': self.third_party_check_journal.id})._create_payments()
def test_check_number_is_number(self):
"""
Ensure 'check_number' field only allows numbers
"""
self.create_third_party_check(check_number='2147483647')
def test_05_check_current_journal_with_both_operations(self):
# -------------------------------
# Case 1: inbound first, then outbound
# -------------------------------
inbound_payment = self.create_third_party_check()
check = inbound_payment.l10n_latam_new_check_ids[0]
with self.assertRaises(ValidationError) as context:
self.create_third_party_check(check_number='absdfdf')
# Check should be on hand after receiving
self.assertEqual(
check.current_journal_id,
self.third_party_check_journal,
"Check should be available after inbound operation"
)
self.assertTrue("Check numbers can only consist of digits" in context.exception.args[0])
# Create outbound payment and consume check
outbound_payment = self.env['account.payment'].create({
'l10n_latam_move_check_ids': [Command.set([check.id])],
'partner_id': self.partner_a.id,
'payment_type': 'outbound',
'journal_id': self.third_party_check_journal.id,
'payment_method_line_id': self.third_party_check_journal
._get_available_payment_method_lines('outbound')
.filtered(lambda x: x.code == 'out_third_party_checks').id,
})
outbound_payment.action_post()
# Check should not be on hand after both operations
self.assertFalse(
check.current_journal_id,
"Check with both inbound and outbound operations should not have current_journal_id set"
)
# -------------------------------
# Case 2: outbound first, then inbound
# -------------------------------
first_now = datetime(2023, 11, 6, 8, 0, 0)
second_now = first_now + timedelta(seconds=1)
# Outbound creation with fixed now
with patch.object(self.env.cr, 'now', lambda: first_now), freeze_time(first_now):
outbound_payment_2 = self.env['account.payment'].create({
'partner_id': self.partner_a.id,
'payment_type': 'outbound',
'journal_id': self.third_party_check_journal.id,
'payment_method_line_id': self.third_party_check_journal
._get_available_payment_method_lines('outbound')
.filtered(lambda x: x.code == 'out_third_party_checks').id,
})
# Inbound creation with slightly later now
with patch.object(self.env.cr, 'now', lambda: second_now), freeze_time(second_now):
inbound_payment_2 = self.create_third_party_check()
check_2 = inbound_payment_2.l10n_latam_new_check_ids[0]
# Link check to outbound afterwards
outbound_payment_2.write({'l10n_latam_move_check_ids': [Command.set([check_2.id])]})
outbound_payment_2.action_post()
# Check should also not be on hand in this order
self.assertFalse(
check_2.current_journal_id,
"Check should not be on hand even if outbound was created before inbound"
)

View file

@ -1,17 +0,0 @@
<odoo>
<record id="view_account_journal_tree" model="ir.ui.view">
<field name="name">account.journal.tree</field>
<field name="model">account.journal</field>
<field name="inherit_id" ref="account_check_printing.view_account_journal_form_inherited"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='check_sequence_id']/.." position="after">
<group string="Checks Management" name="check_management"
attrs="{'invisible': ['|', '!', ('selected_payment_method_codes', 'ilike', ',check_printing,'), ('type', '!=', 'bank')]}">
<field name="l10n_latam_manual_checks"/>
</group>
</xpath>
</field>
</record>
</odoo>

View file

@ -1,239 +1,53 @@
<odoo>
<!-- Own checks search view -->
<record model="ir.ui.view" id="view_account_payment_search">
<field name="name">account.check.search</field>
<field name="model">account.payment</field>
<field name="priority">20</field>
<field name="mode">primary</field>
<field name="inherit_id" ref="account.view_account_payment_search"/>
<field name="arch" type="xml">
<field name="name" position="before">
<field name="check_number"/>
</field>
<filter name="date" position="after">
<separator/>
</filter>
<filter name="groupby_date" position="after">
<filter string="Check Cash-In Date"
name="groupby_l10n_latam_check_payment_date"
context="{'group_by': 'l10n_latam_check_payment_date'}"/>
</filter>
</field>
</record>
<!-- Third party checks search view -->
<record model="ir.ui.view" id="view_account_payment_third_party_checks_search">
<field name="name">account.check.search</field>
<field name="model">account.payment</field>
<field name="priority">22</field>
<field name="mode">primary</field>
<field name="inherit_id" ref="account.view_account_payment_search"/>
<field name="arch" type="xml">
<field name="name" position="before">
<field name="check_number"/>
</field>
<field name="journal_id" position="after">
<field name="l10n_latam_check_current_journal_id"/>
</field>
<filter name="date" position="after">
<separator/>
<filter string="Checks on hand" name="checks_on_hand"
domain="[('state', '=', 'posted'),
('l10n_latam_check_current_journal_id.inbound_payment_method_line_ids.payment_method_id.code', 'in', ['new_third_party_checks', 'in_third_party_checks'])]"/>
</filter>
<filter name="journal" position="after">
<filter name="groupby_third_party_check_current_journal"
string="Current Journal"
context="{'group_by': 'l10n_latam_check_current_journal_id'}"/>
</filter>
<filter name="unmatched" position="attributes">
<attribute name="invisible">1</attribute>
</filter>
<filter name="groupby_date" position="after">
<filter string="Check Cash-In Date"
name="groupby_l10n_latam_check_payment_date"
context="{'group_by': 'l10n_latam_check_payment_date'}"/>
</filter>
</field>
</record>
<record id="view_account_payment_form_inherited" model="ir.ui.view">
<field name="name">account.payment.form.inherited</field>
<field name="model">account.payment</field>
<field name="inherit_id" ref="account_check_printing.view_account_payment_form_inherited" />
<field name="inherit_id" ref="account.view_account_payment_form"/>
<field name="arch" type="xml">
<group>
<notebook>
<page name="latam_checks_page" string="Checks" invisible="payment_method_code not in ['in_third_party_checks', 'out_third_party_checks', 'return_third_party_checks', 'new_third_party_checks', 'own_checks']">
<group name="latam_checks" colspan="2">
<field name="l10n_latam_new_check_ids" invisible="payment_method_code not in ['new_third_party_checks', 'own_checks']" nolabel="1" colspan="2" readonly="state != 'draft'">
<list name="new_checks" editable="bottom">
<field name="company_id" column_invisible="True"/>
<field name="currency_id" column_invisible="True"/>
<field name="name" />
<field name="bank_id" column_invisible="parent.payment_method_code == 'own_checks'"/>
<field name="issuer_vat" column_invisible="parent.payment_method_code == 'own_checks'"/>
<field name="payment_date"/>
<field name="amount" />
<button type="object" name="get_formview_action" icon="fa-pencil-square-o" title="open" help="Open" column_invisible="parent.state == 'draft'"/>
</list>
</field>
<field name="l10n_latam_move_check_ids" invisible="payment_method_code not in ['in_third_party_checks', 'out_third_party_checks', 'return_third_party_checks']"
domain="
[('payment_method_code', '=', 'new_third_party_checks'), ('current_journal_id', '=', journal_id), ('company_id', '=', company_id)]
if payment_type == 'outbound' else
[('payment_method_code', '=', 'new_third_party_checks'), ('current_journal_id', '=', False), ('company_id', '=', company_id)]" options="{'no_create': True}"
nolabel="1" colspan="2" readonly="state != 'draft'">
<list name="existing_checks">
<field name="company_id" column_invisible="True"/>
<field name="currency_id" column_invisible="True"/>
<field name="name" />
<field name="bank_id" optional="hide"/>
<field name="issuer_vat" optional="hide"/>
<field name="payment_date" optional="hide"/>
<field name="amount"/>
<button type="object" name="get_formview_action" icon="fa-pencil-square-o" title="open" help="Open"/>
</list>
</field>
</group>
</page>
</notebook>
</group>
<sheet position="before">
<div class="alert alert-danger mb-0" role="alert"
attrs="{'invisible': [('l10n_latam_check_warning_msg', '=', False)]}">
<div class="alert alert-danger mb-0" role="alert" invisible="not l10n_latam_check_warning_msg">
<field name="l10n_latam_check_warning_msg" nolabel="1"/>
</div>
</sheet>
<field name="destination_journal_id" position="after">
<!-- Move Third party checks -->
<field name="l10n_latam_check_id"
attrs="{
'invisible': [('payment_method_code', 'not in', ['in_third_party_checks', 'out_third_party_checks']), ('l10n_latam_check_id', '=', False)],
'required': [('payment_method_code', 'in', ['in_third_party_checks', 'out_third_party_checks'])]}"
domain="
[('payment_method_code', '=', 'new_third_party_checks'), ('l10n_latam_check_current_journal_id', '=', journal_id), ('state', '=', 'posted'), ('company_id', '=', company_id)]
if payment_type == 'outbound' else
[('payment_method_code', '=', 'new_third_party_checks'), ('l10n_latam_check_current_journal_id', '=', destination_journal_id), ('state', '=', 'posted'), ('company_id', '=', company_id)]
if is_internal_transfer else
[('payment_method_code', '=', 'new_third_party_checks'), ('l10n_latam_check_current_journal_id', '=', False), ('state', '=', 'posted'), ('company_id', '=', company_id)]"
context="{'search_view_ref': 'l10n_latam_check.view_account_payment_third_party_checks_search'}"
options="{'no_create': True}"
/>
</field>
<field name="payment_method_line_id" position="after">
<field name="l10n_latam_manual_checks" invisible="1"/>
<field name="l10n_latam_check_number"
string='Check Number'
attrs="{
'invisible': [('payment_method_code', '!=', 'new_third_party_checks'), '|', ('payment_method_code', '!=', 'check_printing'), ('l10n_latam_manual_checks', '=', False)],
'required': ['|', ('payment_method_code', '=', 'new_third_party_checks'), '&amp;', ('payment_method_code', '=', 'check_printing'), ('l10n_latam_manual_checks', '=', True)],
'readonly': [('state', '!=', 'draft')]}"/>
<field name="l10n_latam_check_payment_date" attrs="{
'invisible': [('payment_method_code', '!=', 'new_third_party_checks'), '|', ('payment_method_code', '!=', 'check_printing'), ('l10n_latam_manual_checks', '=', False)]}"/>
<field name="l10n_latam_check_bank_id" string="Check Bank"
attrs="{'invisible': [('payment_method_code', '!=', 'new_third_party_checks')]}"/>
<field name="l10n_latam_check_issuer_vat" string="Check Issuer Vat"
attrs="{'invisible': [('payment_method_code', '!=', 'new_third_party_checks')]}"/>
<label for="l10n_latam_check_current_journal_id" string="Check Current Journal"
attrs="{'invisible': ['|', ('state', '!=', 'posted'), ('payment_method_code', '!=', 'new_third_party_checks')]}"/>
<div class="oe_inline"
attrs="{'invisible': ['|', ('state', '!=', 'posted'), ('payment_method_code', '!=', 'new_third_party_checks')]}">
<field name="l10n_latam_check_current_journal_id"/>
<span attrs="{'invisible': [('l10n_latam_check_current_journal_id', '!=', False)]}">Not in Wallet</span>
<button name="button_open_check_operations" type="object" string="⇒ Check Operations" class="oe_link"/>
</div>
</field>
</field>
</record>
<record model="ir.ui.view" id="view_account_third_party_check_operations_tree">
<field name="name">account.check.operations.tree</field>
<field name="model">account.payment</field>
<field name="priority" eval="99"/>
<field name="arch" type="xml">
<tree default_order="date desc, id desc, name desc">
<field name="date"/>
<field name="name"/>
<field name="payment_type"/>
<field name="journal_id"/>
<field name="partner_id" string="Customer"/>
<field name="state" invisible="1"/>
</tree>
</field>
</record>
<record model="ir.ui.view" id="view_account_check_calendar">
<field name="name">account.check.calendar</field>
<field name="model">account.payment</field>
<field name="arch" type="xml">
<calendar
mode="month"
date_start="l10n_latam_check_payment_date"
color="journal_id">
<field name="amount"/>
</calendar>
</field>
</record>
<record model="ir.ui.view" id="view_account_check_pivot">
<field name="name">account.check.calendar</field>
<field name="model">account.payment</field>
<field name="arch" type="xml">
<pivot>
<field name="l10n_latam_check_payment_date" type="row" interval="month"/>
<field name="l10n_latam_check_payment_date" type="row" interval="week"/>
<field name="amount" type="measure"/>
</pivot>
</field>
</record>
<!-- Own Check Views and menus -->
<record model="ir.ui.view" id="view_account_own_check_tree">
<field name="name">account.check.tree</field>
<field name="model">account.payment</field>
<field name="priority">100</field>
<field name="mode">primary</field>
<field name="inherit_id" ref="account.view_account_payment_tree"/>
<field name="arch" type="xml">
<field name="name" position="attributes">
<attribute name="optional">hide</attribute>
</field>
<field name="name" position="after">
<field name="check_number"/>
</field>
<field name="payment_method_line_id" position="attributes">
<attribute name="invisible">1</attribute>
</field>
<field name="date" position="after">
<field name="l10n_latam_check_payment_date" optional="show"/>
</field>
<tree>
<field name="is_matched"/>
</tree>
</field>
</record>
<record model="ir.actions.act_window" id="action_own_check">
<field name="name">Own Checks</field>
<field name="res_model">account.payment</field>
<field name="view_mode">tree,form,calendar,graph,pivot</field>
<field name="view_id" ref="view_account_own_check_tree"/>
<field name="search_view_id" ref="view_account_payment_search"/>
<field name="domain">[('payment_method_code', '=', 'check_printing')]</field>
<field name="context">{'search_default_unmatched': True}</field>
</record>
<menuitem
action="action_own_check"
id="menu_own_check"
sequence="50"
parent="account.menu_finance_payables"/>
<!-- Third party check Views and menus -->
<record model="ir.ui.view" id="view_account_third_party_check_tree">
<field name="name">account.check.tree</field>
<field name="model">account.payment</field>
<field name="priority">110</field>
<field name="mode">primary</field>
<field name="inherit_id" ref="view_account_own_check_tree"/>
<field name="arch" type="xml">
<field name="is_matched" position="replace"/>
<field name="journal_id" position="replace">
<field name="l10n_latam_check_current_journal_id" string="Current Journal"/>
</field>
<tree position="attributes">
<attribute name="create">false</attribute>
</tree>
<tree position="inside">
<header>
<button name="%(action_view_l10n_latam_payment_mass_transfer)d" type="action" string="Check Transfer" groups="account.group_account_user"/>
</header>
</tree>
</field>
</record>
<record model="ir.actions.act_window" id="action_third_party_check">
<field name="name">Third Party Checks</field>
<field name="res_model">account.payment</field>
<field name="view_mode">tree,form,calendar,graph,pivot</field>
<field name="view_id" ref="view_account_third_party_check_tree"/>
<field name="search_view_id" ref="l10n_latam_check.view_account_payment_third_party_checks_search"/>
<field name="domain">[('payment_method_code', '=', 'new_third_party_checks')]</field>
<field name="context">{'search_default_checks_on_hand': 1}</field>
</record>
<menuitem
action="action_third_party_check"
id="menu_third_party_check"
sequence="40"
parent="account.menu_finance_receivables"/>
</odoo>

View file

@ -0,0 +1,227 @@
<odoo>
<!-- Own checks search view -->
<record model="ir.ui.view" id="view_account_payment_search">
<field name="name">account.check.search</field>
<field name="model">l10n_latam.check</field>
<field name="inherit_id" eval="False"/>
<field name="arch" type="xml">
<search>
<field name="name"/>
<field name="partner_id"/>
<field name="original_journal_id"/>
<field name="company_id" groups="base.group_multi_company"/>
<separator/>
<filter string="Payment Date" name="payment_date" date="payment_date"/>
<separator/>
<filter string="Handed" name="checks_on_hand" domain="[('issue_state', '=', 'handed')]"/>
<filter string="Voided" name="checks_voided" domain="[('issue_state', '=', 'voided')]"/>
<filter string="Debited" name="checks_debited" domain="[('issue_state', '=', 'debited')]"/>
<separator/>
<filter string="Partner" name="groupby_partner" domain="[]" context="{'group_by': 'partner_id'}"/>
<filter string="Payment Date" name="groupby_date" domain="[]" context="{'group_by': 'payment_date'}"/>
<filter string="State" name="groupby_issue_state" domain="[]" context="{'group_by': 'issue_state'}"/>
<filter string="Company" name="groupby_company" domain="[]" context="{'group_by': 'company_id'}" groups="base.group_multi_company"/>
<separator/>
<filter invisible="1" string="My Activities" name="filter_activities_my"
domain="[('activity_user_id', '=', uid)]"/>
<separator invisible="1"/>
<filter invisible="1" string="Late Activities" name="activities_overdue" domain="[('my_activity_date_deadline', '&lt;', 'today')]" help="Show all records whose next activity date is past"/>
<filter invisible="1" string="Today Activities" name="activities_today" domain="[('my_activity_date_deadline', '=', 'today')]"/>
<filter invisible="1" string="Future Activities" name="activities_upcoming_all" domain="[('my_activity_date_deadline', '&gt;', 'today')]"/>
</search>
</field>
</record>
<!-- Third party checks search view -->
<record model="ir.ui.view" id="view_account_payment_third_party_checks_search">
<field name="name">account.check.search</field>
<field name="model">l10n_latam.check</field>
<field name="mode">primary</field>
<field name="inherit_id" ref="view_account_payment_search"/>
<field name="arch" type="xml">
<filter name="checks_on_hand" position="replace"/>
<filter name="checks_voided" position="replace"/>
<filter name="checks_debited" position="replace">
<filter string="On hand" name="checks_on_hand"
domain="[('current_journal_id.inbound_payment_method_line_ids.payment_method_id.code', '=', 'in_third_party_checks')]"/>
</filter>
<field name="original_journal_id" position="before">
<field name="issuer_vat"/>
<field name="bank_id"/>
<field name="current_journal_id"/>
</field>
<filter name="groupby_issue_state" position="replace">
<filter name="groupby_current_journal"
string="Current Journal"
context="{'group_by': 'current_journal_id'}"/>
</filter>
</field>
</record>
<record model="ir.ui.view" id="view_account_third_party_check_operations_tree">
<field name="name">account.check.operations.list</field>
<field name="model">account.payment</field>
<field name="priority" eval="99"/>
<field name="arch" type="xml">
<list default_order="date desc, id desc, name desc" create="false" delete="false" duplicate="false" >
<field name="date" readonly="state in ['cancel', 'posted']"/>
<field name="name"/>
<field name="payment_type"/>
<field name="journal_id"/>
<field name="partner_id" string="Customer"/>
<field name="state" column_invisible="True"/>
</list>
</field>
</record>
<record model="ir.ui.view" id="view_account_check_calendar">
<field name="name">account.check.calendar</field>
<field name="model">l10n_latam.check</field>
<field name="arch" type="xml">
<calendar
mode="month"
date_start="payment_date"
color="original_journal_id">
<field name="amount"/>
</calendar>
</field>
</record>
<record model="ir.ui.view" id="view_account_check_pivot">
<field name="name">account.check.calendar</field>
<field name="model">l10n_latam.check</field>
<field name="arch" type="xml">
<pivot>
<field name="payment_date" type="row" interval="month"/>
<field name="payment_date" type="row" interval="week"/>
<field name="amount" type="measure"/>
</pivot>
</field>
</record>
<record id="l10n_latam_check_view_form" model="ir.ui.view">
<field name="name">l10n_latam_check.view.form</field>
<field name="model">l10n_latam.check</field>
<field name="arch" type="xml">
<form create="false" edit="false" delete="false">
<field name="outstanding_line_id" invisible="True"/>
<header>
<button name="action_void" string="Void Check" invisible="issue_state != 'handed'" type="object" class="oe_highlight" confirm="Marking a check as void will cancel the check and generate a new entry that will re-open the debt." data-hotkey="v"/>
<field name="issue_state" statusbar_visible="issue_state" widget="statusbar"/>
</header>
<sheet>
<div class="oe_button_box" name="button_box">
<button icon="fa-bars" type="object" name="button_open_check_operations" invisible="payment_method_code != 'new_third_party_checks'">
<span>Operations</span>
</button>
<button icon="fa-bars" type="object" name="button_open_payment" invisible="payment_method_code != 'own_checks'">
<span>Payment</span>
</button>
<button icon="fa-bars" type="object" invisible="not outstanding_line_id" name="action_show_journal_entry" groups="account.group_account_user,account.group_account_readonly">
<span>Journal Entry</span>
</button>
<button icon="fa-bars" type="object" invisible="not issue_state or issue_state == 'handed'" name="action_show_reconciled_move" groups="account.group_account_user,account.group_account_readonly">
<span>Reconciled move</span>
</button>
</div>
<group>
<group>
<field name="name"/>
<field name="payment_date"/>
<field name="original_journal_id"/>
<field name="current_journal_id" invisible="issue_state"/>
</group>
<group>
<field name="amount"/>
<field name="bank_id" invisible="issue_state"/>
<field name="issuer_vat" invisible="issue_state"/>
<field name="currency_id" invisible="1"/>
<field name="company_id" groups="base.group_multi_company"/>
</group>
</group>
</sheet>
<chatter/>
</form>
</field>
</record>
<!-- Own Check Views and menus -->
<record model="ir.ui.view" id="view_account_own_check_tree">
<field name="name">account.check.list</field>
<field name="model">l10n_latam.check</field>
<field name="priority">100</field>
<field name="arch" type="xml">
<list edit="false" create="false" delete="false" duplicate="false" sample="1" decoration-info="issue_state == 'handed'" decoration-muted="issue_state in ('voided','debited')">
<header>
</header>
<field name="payment_date" optional="show"/>
<field name="name"/>
<field name="original_journal_id"/>
<field name="company_id" optional="hide" groups="base.group_multi_company"/>
<field name="payment_method_line_id" column_invisible="True"/>
<field name="partner_id" string="Customer"/>
<field name="amount" optional="show"/>
<field name="currency_id" string="Payment Currency" optional="hide"/>
<field name="issue_state" widget="badge" decoration-info="issue_state == 'handed'" decoration-muted="issue_state in ('voided','debited')"/>
</list>
</field>
</record>
<record model="ir.actions.act_window" id="action_own_check">
<field name="name">Own Checks</field>
<field name="res_model">l10n_latam.check</field>
<field name="view_mode">list,form,calendar,graph,pivot</field>
<field name="view_id" ref="view_account_own_check_tree"/>
<field name="search_view_id" ref="view_account_payment_search"/>
<field name="domain">[('outstanding_line_id', '!=', False)]</field>
<field name="context">{'search_default_checks_on_hand': True}</field>
</record>
<menuitem
action="action_own_check"
id="menu_own_check"
sequence="50"
parent="account.menu_finance_payables"/>
<!-- Third party check Views and menus -->
<record model="ir.ui.view" id="view_account_third_party_check_tree">
<field name="name">account.check.list</field>
<field name="model">l10n_latam.check</field>
<field name="priority">110</field>
<field name="mode">primary</field>
<field name="inherit_id" ref="view_account_own_check_tree"/>
<field name="arch" type="xml">
<field name="issue_state" position="attributes">
<attribute name="column_invisible">1</attribute>
</field>
<field name="original_journal_id" position="replace">
<field name="current_journal_id" string="Current Journal"/>
</field>
<list position="inside">
<header>
<button name="%(action_view_l10n_latam_payment_mass_transfer)d" type="action" string="Check Transfer"/>
</header>
</list>
</field>
</record>
<record model="ir.actions.act_window" id="action_third_party_check">
<field name="name">Third Party Checks</field>
<field name="res_model">l10n_latam.check</field>
<field name="view_mode">list,form,calendar,graph,pivot</field>
<field name="view_id" ref="view_account_third_party_check_tree"/>
<field name="search_view_id" ref="l10n_latam_check.view_account_payment_third_party_checks_search"/>
<field name="domain">[('payment_method_code', '=', 'new_third_party_checks'), ('payment_id.state', '!=', 'draft')]</field>
<field name="context">{'search_default_checks_on_hand': 1}</field>
</record>
<menuitem
action="action_third_party_check"
id="menu_third_party_check"
sequence="40"
parent="account.menu_finance_receivables"/>
</odoo>

View file

@ -0,0 +1,41 @@
<odoo>
<template inherit_id="account.report_payment_receipt_document" id="report_payment_receipt_document">
<xpath expr="//table[@name='invoices']" position="before">
<t t-set="checks" t-value="o._get_latam_checks()"/>
<t t-if="checks">
<table id="l10n_latam_check" class="table table-sm">
<thead>
<tr>
<th><span>Check Number</span></th>
<th t-if="o.payment_method_code != 'own_checks'"><span>Bank</span></th>
<th t-if="o.payment_method_code != 'own_checks'"><span>Issuer VAT</span></th>
<th><span>Payment date</span></th>
<th class="text-end"><span>Amount</span></th>
</tr>
</thead>
<tbody>
<t t-foreach="checks" t-as="check">
<tr>
<td>
<span t-field='check.name'/>
</td>
<td t-if="o.payment_method_code != 'own_checks'">
<span t-field='check.bank_id.display_name'/>
</td>
<td t-if="o.payment_method_code != 'own_checks'">
<span t-field='check.issuer_vat'/>
</td>
<td>
<span t-field='check.payment_date'/>
</td>
<td class="text-end">
<span t-out="check.amount" t-options="{'widget': 'monetary', 'display_currency': o.currency_id}"/>
</td>
</tr>
</t>
</tbody>
</table>
</t>
</xpath>
</template>
</odoo>

View file

@ -2,3 +2,4 @@
from . import account_payment_register
from . import l10n_latam_payment_mass_transfer
from . import l10n_latam_payment_register_check

View file

@ -1,76 +1,63 @@
from odoo import models, fields, api
from odoo import models, fields, api, Command, _
from odoo.exceptions import ValidationError
class AccountPaymentRegister(models.TransientModel):
_inherit = 'account.payment.register'
l10n_latam_check_id = fields.Many2one(
comodel_name='account.payment',
string='Check',
)
l10n_latam_check_bank_id = fields.Many2one(
comodel_name='res.bank',
string='Check Bank',
compute='_compute_l10n_latam_check_bank_id', store=True, readonly=False,
)
l10n_latam_check_issuer_vat = fields.Char(
string='Check Issuer VAT',
compute='_compute_l10n_latam_check_issuer_vat', store=True, readonly=False,
)
l10n_latam_check_number = fields.Char(
string="Check Number",
)
l10n_latam_manual_checks = fields.Boolean(
related='journal_id.l10n_latam_manual_checks',
)
l10n_latam_check_payment_date = fields.Date(
string='Check Cash-In Date', help="Date from when you can cash in the check, turn the check into cash",
l10n_latam_new_check_ids = fields.One2many('l10n_latam.payment.register.check', 'payment_register_id', string="New Checks")
l10n_latam_move_check_ids = fields.Many2many(
comodel_name='l10n_latam.check',
string='Checks',
)
@api.depends('payment_method_line_id.code', 'partner_id')
def _compute_l10n_latam_check_bank_id(self):
new_third_party_checks = self.filtered(lambda x: x.payment_method_line_id.code == 'new_third_party_checks')
for rec in new_third_party_checks:
rec.l10n_latam_check_bank_id = rec.partner_id.bank_ids[:1].bank_id
(self - new_third_party_checks).l10n_latam_check_bank_id = False
@api.depends('payment_method_line_id.code', 'partner_id')
def _compute_l10n_latam_check_issuer_vat(self):
new_third_party_checks = self.filtered(lambda x: x.payment_method_line_id.code == 'new_third_party_checks')
for rec in new_third_party_checks:
rec.l10n_latam_check_issuer_vat = rec.partner_id.vat
(self - new_third_party_checks).l10n_latam_check_issuer_vat = False
@api.depends('l10n_latam_check_id')
@api.depends('l10n_latam_move_check_ids.amount', 'l10n_latam_new_check_ids.amount', 'payment_method_code')
def _compute_amount(self):
super()._compute_amount()
for wizard in self.filtered('l10n_latam_check_id'):
wizard.amount = wizard.l10n_latam_check_id.amount
for wizard in self.filtered(lambda x: x._is_latam_check_payment(check_subtype='new_check')):
wizard.amount = sum(wizard.l10n_latam_new_check_ids.mapped('amount'))
for wizard in self.filtered(lambda x: x._is_latam_check_payment(check_subtype='move_check')):
wizard.amount = sum(wizard.l10n_latam_move_check_ids.mapped('amount'))
@api.depends('l10n_latam_check_id')
@api.depends('l10n_latam_move_check_ids.currency_id')
def _compute_currency_id(self):
super()._compute_currency_id()
for wizard in self.filtered('l10n_latam_check_id'):
wizard.currency_id = wizard.l10n_latam_check_id.currency_id
for wizard in self.filtered(lambda x: x._is_latam_check_payment(check_subtype='move_check')):
if wizard.l10n_latam_move_check_ids:
wizard.currency_id = wizard.l10n_latam_move_check_ids[0].currency_id
@api.onchange('l10n_latam_check_number')
def _onchange_l10n_latam_check_number(self):
for rec in self.filtered(lambda x: x.journal_id.company_id.country_id.code == "AR" and x.l10n_latam_check_number
and x.l10n_latam_check_number.isdecimal()):
rec.l10n_latam_check_number = '%08d' % int(rec.l10n_latam_check_number)
@api.onchange('payment_method_line_id', 'journal_id')
def _onchange_to_reset_check_ids(self):
# If any of these fields change, the domain of the selectable checks could change
self.l10n_latam_check_id = False
def _is_latam_check_payment(self, check_subtype=False):
if check_subtype == 'move_check':
codes = ['in_third_party_checks', 'out_third_party_checks', 'return_third_party_checks']
elif check_subtype == 'new_check':
codes = ['new_third_party_checks', 'own_checks']
else:
codes = ['in_third_party_checks', 'out_third_party_checks', 'return_third_party_checks', 'new_third_party_checks', 'own_checks']
return self.payment_method_code in codes
def _create_payment_vals_from_wizard(self, batch_result):
vals = super()._create_payment_vals_from_wizard(batch_result)
vals.update({
'l10n_latam_check_id': self.l10n_latam_check_id.id,
'l10n_latam_check_bank_id': self.l10n_latam_check_bank_id.id,
'l10n_latam_check_issuer_vat': self.l10n_latam_check_issuer_vat,
'check_number': self.l10n_latam_check_number,
'l10n_latam_check_payment_date': self.l10n_latam_check_payment_date,
})
if self.l10n_latam_new_check_ids:
vals.update({'l10n_latam_new_check_ids': [Command.create({
'name': x.name,
'bank_id': x.bank_id.id,
'issuer_vat': x.issuer_vat,
'payment_date': x.payment_date,
'amount': x.amount}) for x in self.l10n_latam_new_check_ids
]})
if self.l10n_latam_move_check_ids:
vals.update({
'l10n_latam_move_check_ids': [Command.link(x.id) for x in self.l10n_latam_move_check_ids]
})
return vals
def action_create_payments(self):
if self._is_latam_check_payment(check_subtype="move_check"):
latam_check_currencies = self.l10n_latam_move_check_ids.mapped("currency_id")
if latam_check_currencies and (len(latam_check_currencies) > 1 or latam_check_currencies != self.currency_id):
raise ValidationError(_(
"You can't mix checks of different currencies in one payment, "
"and you can't change the payment's currency if checks are already created in that currency.\n"
"Please create separate payments for each currency."
))
return super().action_create_payments()

View file

@ -6,41 +6,47 @@
<field name="model">account.payment.register</field>
<field name="inherit_id" ref="account.view_account_payment_register_form"/>
<field name="arch" type="xml">
<field name="payment_method_line_id" position="after">
<field name="l10n_latam_manual_checks" invisible="1"/>
<field name="payment_method_code" invisible="1"/>
<field name="l10n_latam_check_number"
attrs="{
'invisible': [('payment_method_code', '!=', 'new_third_party_checks'), '|', ('l10n_latam_manual_checks', '=', False), ('payment_method_code', '!=', 'check_printing')],
'required': [
'|', '&amp;', ('payment_method_code', '=', 'check_printing'), ('l10n_latam_manual_checks', '!=', False), ('payment_method_code', '=', 'new_third_party_checks'),
]}"/>
<div class="o_row"
attrs="{'invisible': ['|', ('can_edit_wizard', '=', False), '&amp;', ('can_group_payments', '=', True), ('group_payment', '=', False)]}" colspan="2">
<group>
<field name="l10n_latam_check_id"
attrs="{
'invisible': [('payment_method_code', 'not in', ['in_third_party_checks', 'out_third_party_checks'])],
'required': [('payment_method_code', 'in', ['in_third_party_checks', 'out_third_party_checks'])]}"
domain="
[('payment_method_code', '=', 'new_third_party_checks'), ('l10n_latam_check_current_journal_id', '=', journal_id), ('state', '=', 'posted')]
if payment_type == 'outbound' else
[('payment_method_code', '=', 'new_third_party_checks'), ('l10n_latam_check_current_journal_id', '=', False), ('state', '=', 'posted')]"
options="{'no_create': True}"/>
<field name="l10n_latam_check_payment_date"
attrs="{'invisible': [('payment_method_code', '!=', 'new_third_party_checks'), '|', ('l10n_latam_manual_checks', '=', False), ('payment_method_code', '!=', 'check_printing')]}"/>
<field name="l10n_latam_check_bank_id" string="Check Bank"
attrs="{'invisible': [('payment_method_code', '!=', 'new_third_party_checks')]}"/>
<field name="l10n_latam_check_issuer_vat" string="Check Issuer Vat"
attrs="{'invisible': [('payment_method_code', '!=', 'new_third_party_checks')]}"/>
</group>
<group>
<notebook invisible="not can_edit_wizard or (can_group_payments and not group_payment)">
<page name="latam_checks_page" string="Checks" invisible="payment_method_code not in ['in_third_party_checks', 'out_third_party_checks', 'return_third_party_checks', 'new_third_party_checks', 'own_checks']">
<group name="latam_checks" colspan="2">
<field name="l10n_latam_new_check_ids" invisible="payment_method_code not in ['new_third_party_checks', 'own_checks']" nolabel="1" colspan="2" >
<list editable="bottom">
<field name="company_id" column_invisible="True"/>
<field name="currency_id" column_invisible="True"/>
<field name="name" />
<field name="bank_id" column_invisible="parent.payment_method_code == 'own_checks'"/>
<field name="issuer_vat" column_invisible="parent.payment_method_code == 'own_checks'"/>
<field name="payment_date"/>
<field name="amount" />
</list>
</field>
<field name="l10n_latam_move_check_ids" invisible="payment_method_code not in ['in_third_party_checks', 'out_third_party_checks', 'return_third_party_checks']"
domain="
[('payment_method_code', '=', 'new_third_party_checks'), ('current_journal_id', '=', journal_id), ('company_id', '=', company_id)]
if payment_type == 'outbound' else
[('payment_method_code', '=', 'new_third_party_checks'), ('current_journal_id', '=', False), ('company_id', '=', company_id)]" options="{'no_create': True}"
nolabel="1" colspan="2">
<list name="existing_checks">
<field name="company_id" column_invisible="True"/>
<field name="currency_id" column_invisible="True"/>
<field name="name" />
<field name="bank_id" optional="hide"/>
<field name="issuer_vat" optional="hide"/>
<field name="payment_date" optional="show"/>
<field name="amount"/>
</list>
</field>
</group>
</page>
</notebook>
</group>
<div role="alert" position="after">
<div role="alert" class="alert alert-info"
invisible="payment_method_code not in ['new_third_party_checks', 'in_third_party_checks', 'out_third_party_checks', 'return_third_party_checks', 'own_checks'] or can_edit_wizard and (not can_group_payments or can_group_payments and group_payment)">
<p>You can't use checks when paying invoices of different partners or same partner without grouping</p>
</div>
<div colspan="2" class="o_row"
attrs="{'invisible': ['|', ('payment_method_code', 'not in', ['new_third_party_checks', 'in_third_party_checks', 'out_third_party_checks']), '&amp;', ('can_edit_wizard', '=', True), '|', ('can_group_payments', '=', False), '&amp;', ('can_group_payments', '=', True), ('group_payment', '=', True)]}">
<p class="alert alert-warning" role="alert">You can't use checks when paying invoices of different partners or same partner without grouping</p>
</div>
</field>
</div>
</field>
</record>

View file

@ -1,12 +1,13 @@
# -*- coding: utf-8 -*-
from odoo import models, api, fields, _
from odoo import models, api, fields, _, Command
from odoo.exceptions import UserError
class L10nLatamPaymentMassTransfer(models.TransientModel):
class L10n_LatamPaymentMassTransfer(models.TransientModel):
_name = 'l10n_latam.payment.mass.transfer'
_description = 'Checks Mass Transfers'
_check_company_auto = True
payment_date = fields.Date(
string="Payment Date",
@ -16,13 +17,13 @@ class L10nLatamPaymentMassTransfer(models.TransientModel):
destination_journal_id = fields.Many2one(
comodel_name='account.journal',
string='Destination Journal',
domain="[('type', 'in', ('bank', 'cash')), ('company_id', '=', company_id), ('id', '!=', journal_id)]",
)
communication = fields.Char(
string="Memo",
check_company=True,
domain="[('type', 'in', ('bank', 'cash')), ('id', '!=', journal_id)]",
)
communication = fields.Char(string="Memo")
journal_id = fields.Many2one(
'account.journal',
check_company=True,
compute='_compute_journal_company'
)
company_id = fields.Many2one(
@ -30,31 +31,34 @@ class L10nLatamPaymentMassTransfer(models.TransientModel):
compute="_compute_journal_company"
)
check_ids = fields.Many2many(
'account.payment',
'l10n_latam.check', 'latam_tranfer_check_rel'
'transfer_id', 'check_id', check_company=True,
)
@api.depends('check_ids')
def _compute_journal_company(self):
# use ._origin because if not a NewId for the checks is used and the returned
# value for l10n_latam_check_current_journal_id is wrong
journal = self.check_ids._origin.mapped("l10n_latam_check_current_journal_id")
if len(journal) != 1 or not journal.inbound_payment_method_line_ids.filtered(
lambda x: x.code == 'in_third_party_checks'):
# value for current_journal_id is wrong
journal = self.check_ids._origin.mapped("current_journal_id")
if len(journal) != 1:
raise UserError(_("All selected checks must be on the same journal and on hand"))
self.journal_id = journal
self.company_id = journal.company_id.id
@api.model
def default_get(self, fields_list):
res = super().default_get(fields_list)
if 'check_ids' in fields_list and 'check_ids' not in res:
if self._context.get('active_model') != 'account.payment':
def default_get(self, fields):
res = super().default_get(fields)
if 'check_ids' in fields and 'check_ids' not in res:
if self.env.context.get('active_model') != 'l10n_latam.check':
raise UserError(_("The register payment wizard should only be called on account.payment records."))
checks = self.env['account.payment'].browse(self._context.get('active_ids', []))
checks = self.env['l10n_latam.check'].browse(self.env.context.get('active_ids', []))
if checks.filtered(lambda x: x.payment_method_line_id.code != 'new_third_party_checks'):
raise 'You have select some payments that are not checks. Please call this action from the Third Party Checks menu'
elif not all(check.state == 'posted' for check in checks):
raise UserError(_('You have selected payments which are not checks. Please call this action from the Third Party Checks menu'))
elif not all(check.payment_id.state not in ('draft', 'canceled') for check in checks):
raise UserError(_("All the selected checks must be posted"))
currency_ids = checks.mapped('currency_id')
if any(x != currency_ids[0] for x in currency_ids):
raise UserError(_("All the selected checks must use the same currency"))
res['check_ids'] = checks.ids
return res
@ -62,28 +66,60 @@ class L10nLatamPaymentMassTransfer(models.TransientModel):
""" This is nedeed because we would like to create a payment of type internal transfer for each check with the
counterpart journal and then, when posting a second payment will be created automatically """
self.ensure_one()
checks = self.check_ids.filtered(lambda x: x.payment_method_line_id.code == 'new_third_party_checks')
payment_vals_list = []
checks = self.check_ids.filtered(lambda x: x.payment_method_line_id.code == 'new_third_party_checks' and x.currency_id == self.check_ids[0].currency_id)
currency_id = self.check_ids[0].currency_id
pay_method_line = self.journal_id._get_available_payment_method_lines('outbound').filtered(
lambda x: x.code == 'out_third_party_checks')
lambda x: x.code in ('out_third_party_checks', 'return_third_party_checks')
)[:1]
for check in checks:
payment_vals_list.append({
'date': self.payment_date,
'l10n_latam_check_id': check.id,
'amount': check.amount,
'payment_type': 'outbound',
'ref': self.communication,
'journal_id': self.journal_id.id,
'currency_id': check.currency_id.id,
'is_internal_transfer': True,
'payment_method_line_id': pay_method_line.id,
'destination_journal_id': self.destination_journal_id.id,
})
payments = self.env['account.payment'].create(payment_vals_list)
payments.action_post()
return payments
outbound_payment = self.env['account.payment'].create({
'date': self.payment_date,
'amount': sum(checks.mapped('amount')),
'partner_id': self.env.company.partner_id.id,
'payment_type': 'outbound',
'memo': self.communication,
'journal_id': self.journal_id.id,
'currency_id': currency_id.id,
'payment_method_line_id': pay_method_line.id if pay_method_line else False,
'l10n_latam_move_check_ids': [Command.link(x.id) for x in checks],
})
outbound_payment.action_post()
inbound_payment = self.env['account.payment'].create({
'date': self.payment_date,
'amount': sum(checks.mapped('amount')),
'partner_id': self.env.company.partner_id.id,
'payment_type': 'inbound',
'memo': self.communication,
'journal_id': self.destination_journal_id.id,
'currency_id': currency_id.id,
'l10n_latam_move_check_ids': [Command.link(x.id) for x in checks],
})
dest_payment_method = self.destination_journal_id.inbound_payment_method_line_ids.filtered(
lambda x: x.code == 'in_third_party_checks'
)
if dest_payment_method:
inbound_payment.payment_method_line_id = dest_payment_method
inbound_payment.action_post()
else:
# In case the journal is not part of the third party check, when posting the move we remove the checks
# when the payment method line is not for checks, but in this case, we don't want to remove it so that
# the operation_ids is filled with the two payments
inbound_payment.with_context(l10n_ar_skip_remove_check=True).action_post()
body_inbound = _("This payment has been created from: ") + outbound_payment._get_html_link()
inbound_payment.message_post(body=body_inbound)
body_outbound = _("A second payment has been created: ") + inbound_payment._get_html_link()
outbound_payment.message_post(body=body_outbound)
(outbound_payment.move_id.line_ids + inbound_payment.move_id.line_ids).filtered(
lambda l:
l.account_id == outbound_payment.destination_account_id and not l.reconciled
).reconcile()
return outbound_payment
def action_create_payments(self):
payments = self._create_payments()
@ -101,7 +137,7 @@ class L10nLatamPaymentMassTransfer(models.TransientModel):
})
else:
action.update({
'view_mode': 'tree,form',
'view_mode': 'list,form',
'domain': [('id', 'in', payments.ids)],
})
return action

View file

@ -26,7 +26,7 @@
<button string="Cancel"
class="btn btn-secondary"
special="cancel"
data-hotkey="z"/>
data-hotkey="x"/>
</footer>
</form>
</field>

View file

@ -0,0 +1,54 @@
# pylint: disable=protected-access
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import logging
from odoo import models, fields, api
import stdnum
_logger = logging.getLogger(__name__)
class L10n_LatamPaymentRegisterCheck(models.TransientModel):
_name = 'l10n_latam.payment.register.check'
_description = 'Payment register check'
_check_company_auto = True
payment_register_id = fields.Many2one('account.payment.register', required=True, ondelete='cascade')
company_id = fields.Many2one(related='payment_register_id.company_id')
currency_id = fields.Many2one(related='payment_register_id.currency_id')
name = fields.Char(string='Number')
bank_id = fields.Many2one(
comodel_name='res.bank',
compute='_compute_bank_id', store=True, readonly=False,
)
issuer_vat = fields.Char(
compute='_compute_issuer_vat', store=True, readonly=False,
)
payment_date = fields.Date(readonly=False, required=True)
amount = fields.Monetary()
@api.onchange('name')
def _onchange_name(self):
if self.name:
self.name = self.name.zfill(8)
@api.depends('payment_register_id.payment_method_line_id.code', 'payment_register_id.partner_id')
def _compute_bank_id(self):
new_third_party_checks = self.filtered(lambda x: x.payment_register_id.payment_method_line_id.code == 'new_third_party_checks')
for rec in new_third_party_checks:
rec.bank_id = rec.payment_register_id.partner_id.bank_ids[:1].bank_id
(self - new_third_party_checks).bank_id = False
@api.depends('payment_register_id.payment_method_line_id.code', 'payment_register_id.partner_id')
def _compute_issuer_vat(self):
new_third_party_checks = self.filtered(lambda x: x.payment_register_id.payment_method_line_id.code == 'new_third_party_checks')
for rec in new_third_party_checks:
rec.issuer_vat = rec.payment_register_id.partner_id.vat
(self - new_third_party_checks).issuer_vat = False
@api.onchange('issuer_vat')
def _clean_issuer_vat(self):
for rec in self.filtered(lambda x: x.issuer_vat and x.company_id.country_id.code):
stdnum_vat = stdnum.util.get_cc_module(rec.company_id.country_id.code, 'vat')
if hasattr(stdnum_vat, 'compact'):
rec.issuer_vat = stdnum_vat.compact(rec.issuer_vat)

View file

@ -1,13 +1,15 @@
[project]
name = "odoo-bringout-oca-ocb-l10n_latam_check"
version = "16.0.0"
description = "Third Party and Deferred/Electronic Checks Management - Checks Management"
description = "Third Party and Deferred/Electronic Checks Management -
Checks Management
"
authors = [
{ name = "Ernad Husremovic", email = "hernad@bring.out.ba" }
]
dependencies = [
"odoo-bringout-oca-ocb-account_check_printing>=16.0.0",
"odoo-bringout-oca-ocb-base_vat>=16.0.0",
"odoo-bringout-oca-ocb-account>=19.0.0",
"odoo-bringout-oca-ocb-base_vat>=19.0.0",
"requests>=2.25.1"
]
readme = "README.md"
@ -17,7 +19,7 @@ classifiers = [
"Intended Audience :: Developers",
"License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Topic :: Office/Business",
]