From a8804cdf5924a26fb1542f2273b204b9f044508f Mon Sep 17 00:00:00 2001 From: Ernad Husremovic Date: Sat, 25 Oct 2025 10:34:41 +0200 Subject: [PATCH] account_reconcile_oca --- .../README.md | 33 + .../account_reconcile_oca/README.rst | 124 ++ .../account_reconcile_oca/__init__.py | 2 + .../account_reconcile_oca/__manifest__.py | 45 + .../account_reconcile_oca/demo/demo.xml | 7 + .../account_reconcile_oca/hooks.py | 8 + .../i18n/account_reconcile_oca.pot | 743 +++++++++ .../account_reconcile_oca/i18n/ca.po | 755 +++++++++ .../account_reconcile_oca/i18n/de.po | 744 +++++++++ .../account_reconcile_oca/i18n/es.po | 764 +++++++++ .../account_reconcile_oca/i18n/fr.po | 763 +++++++++ .../account_reconcile_oca/i18n/hr.po | 750 +++++++++ .../account_reconcile_oca/i18n/it.po | 760 +++++++++ .../account_reconcile_oca/i18n/nl.po | 755 +++++++++ .../account_reconcile_oca/i18n/pt.po | 749 +++++++++ .../account_reconcile_oca/i18n/pt_BR.po | 765 +++++++++ .../account_reconcile_oca/i18n/sv.po | 757 +++++++++ .../account_reconcile_oca/i18n/tr.po | 760 +++++++++ .../migrations/16.0.1.2.0/pre-migration.py | 23 + .../account_reconcile_oca/models/__init__.py | 8 + .../models/account_account_reconcile.py | 215 +++ .../models/account_bank_statement.py | 30 + .../models/account_bank_statement_line.py | 1324 +++++++++++++++ .../models/account_journal.py | 45 + .../models/account_move_line.py | 34 + .../models/account_reconcile_abstract.py | 130 ++ .../models/res_company.py | 39 + .../models/res_config_settings.py | 12 + .../readme/CONTRIBUTORS.rst | 1 + .../account_reconcile_oca/readme/CREDITS.rst | 1 + .../readme/DESCRIPTION.rst | 1 + .../account_reconcile_oca/readme/ROADMAP.rst | 3 + .../account_reconcile_oca/readme/USAGE.rst | 19 + .../security/ir.model.access.csv | 3 + .../security/security.xml | 8 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 467 ++++++ .../description/reconcile-model-full.png | Bin 0 -> 135838 bytes .../description/reconcile-model-partial.png | Bin 0 -> 137158 bytes .../js/reconcile/reconcile_controller.esm.js | 144 ++ .../reconcile/reconcile_kanban_record.esm.js | 14 + .../js/reconcile/reconcile_renderer.esm.js | 64 + .../src/js/reconcile/reconcile_view.esm.js | 16 + .../reconcile_form_controller.esm.js | 45 + .../reconcile_form_notebook.esm.js | 32 + .../reconcile_form_renderer.esm.js | 11 + .../reconcile_form/reconcile_form_view.esm.js | 14 + .../reconcile_manual_controller.esm.js | 30 + .../reconcile_manual_view.esm.js | 12 + .../reconcile_move_line_controller.esm.js | 27 + .../reconcile_move_line_renderer.esm.js | 22 + .../reconcile_move_line_view.esm.js | 16 + .../js/widgets/reconcile_chatter_field.esm.js | 15 + .../js/widgets/reconcile_data_widget.esm.js | 126 ++ .../widgets/reconcile_move_line_widget.esm.js | 52 + .../js/widgets/selection_badge_uncheck.esm.js | 29 + .../static/src/scss/reconcile.scss | 100 ++ .../static/src/xml/reconcile.xml | 223 +++ .../account_reconcile_oca/tests/__init__.py | 2 + .../tests/test_account_reconcile.py | 304 ++++ .../tests/test_bank_account_reconcile.py | 1465 +++++++++++++++++ .../views/account_account.xml | 23 + .../views/account_account_reconcile.xml | 169 ++ .../views/account_bank_statement.xml | 61 + .../views/account_bank_statement_line.xml | 426 +++++ .../views/account_journal.xml | 78 + .../views/account_move.xml | 27 + .../views/account_move_line.xml | 114 ++ .../views/res_config_settings.xml | 38 + .../pyproject.toml | 44 + .../README.md | 32 + .../account_statement_base/README.rst | 103 ++ .../account_statement_base/__init__.py | 1 + .../account_statement_base/__manifest__.py | 21 + .../i18n/account_statement_base.pot | 119 ++ .../account_statement_base/i18n/es.po | 122 ++ .../account_statement_base/i18n/fr.po | 122 ++ .../account_statement_base/i18n/it.po | 122 ++ .../account_statement_base/i18n/pt.po | 122 ++ .../account_statement_base/i18n/pt_BR.po | 123 ++ .../account_statement_base/i18n/sv.po | 122 ++ .../account_statement_base/i18n/tr.po | 122 ++ .../account_statement_base/models/__init__.py | 3 + .../models/account_bank_statement.py | 53 + .../models/account_bank_statement_line.py | 20 + .../models/account_journal_dashboard.py | 16 + .../readme/CONTRIBUTORS.rst | 12 + .../readme/DESCRIPTION.rst | 5 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 450 +++++ .../account_statement_base/tests/__init__.py | 1 + .../tests/test_account_statement_base.py | 90 + .../views/account_bank_statement.xml | 121 ++ .../views/account_bank_statement_line.xml | 207 +++ .../pyproject.toml | 42 + 95 files changed, 17541 insertions(+) create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/README.md create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/README.rst create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/__init__.py create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/__manifest__.py create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/demo/demo.xml create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/hooks.py create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/i18n/account_reconcile_oca.pot create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/i18n/ca.po create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/i18n/de.po create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/i18n/es.po create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/i18n/fr.po create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/i18n/hr.po create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/i18n/it.po create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/i18n/nl.po create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/i18n/pt.po create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/i18n/pt_BR.po create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/i18n/sv.po create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/i18n/tr.po create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/migrations/16.0.1.2.0/pre-migration.py create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/models/__init__.py create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/models/account_account_reconcile.py create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/models/account_bank_statement.py create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/models/account_bank_statement_line.py create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/models/account_journal.py create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/models/account_move_line.py create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/models/account_reconcile_abstract.py create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/models/res_company.py create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/models/res_config_settings.py create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/readme/CONTRIBUTORS.rst create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/readme/CREDITS.rst create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/readme/DESCRIPTION.rst create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/readme/ROADMAP.rst create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/readme/USAGE.rst create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/security/ir.model.access.csv create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/security/security.xml create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/description/icon.png create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/description/index.html create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/description/reconcile-model-full.png create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/description/reconcile-model-partial.png create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/reconcile/reconcile_controller.esm.js create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/reconcile/reconcile_kanban_record.esm.js create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/reconcile/reconcile_renderer.esm.js create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/reconcile/reconcile_view.esm.js create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/reconcile_form/reconcile_form_controller.esm.js create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/reconcile_form/reconcile_form_notebook.esm.js create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/reconcile_form/reconcile_form_renderer.esm.js create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/reconcile_form/reconcile_form_view.esm.js create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/reconcile_manual/reconcile_manual_controller.esm.js create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/reconcile_manual/reconcile_manual_view.esm.js create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/reconcile_move_line/reconcile_move_line_controller.esm.js create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/reconcile_move_line/reconcile_move_line_renderer.esm.js create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/reconcile_move_line/reconcile_move_line_view.esm.js create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/widgets/reconcile_chatter_field.esm.js create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/widgets/reconcile_data_widget.esm.js create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/widgets/reconcile_move_line_widget.esm.js create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/widgets/selection_badge_uncheck.esm.js create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/scss/reconcile.scss create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/xml/reconcile.xml create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/tests/__init__.py create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/tests/test_account_reconcile.py create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/tests/test_bank_account_reconcile.py create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/views/account_account.xml create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/views/account_account_reconcile.xml create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/views/account_bank_statement.xml create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/views/account_bank_statement_line.xml create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/views/account_journal.xml create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/views/account_move.xml create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/views/account_move_line.xml create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/views/res_config_settings.xml create mode 100644 odoo-bringout-oca-ocb-account_reconcile_oca/pyproject.toml create mode 100644 odoo-bringout-oca-ocb-account_statement_base/README.md create mode 100644 odoo-bringout-oca-ocb-account_statement_base/account_statement_base/README.rst create mode 100644 odoo-bringout-oca-ocb-account_statement_base/account_statement_base/__init__.py create mode 100644 odoo-bringout-oca-ocb-account_statement_base/account_statement_base/__manifest__.py create mode 100644 odoo-bringout-oca-ocb-account_statement_base/account_statement_base/i18n/account_statement_base.pot create mode 100644 odoo-bringout-oca-ocb-account_statement_base/account_statement_base/i18n/es.po create mode 100644 odoo-bringout-oca-ocb-account_statement_base/account_statement_base/i18n/fr.po create mode 100644 odoo-bringout-oca-ocb-account_statement_base/account_statement_base/i18n/it.po create mode 100644 odoo-bringout-oca-ocb-account_statement_base/account_statement_base/i18n/pt.po create mode 100644 odoo-bringout-oca-ocb-account_statement_base/account_statement_base/i18n/pt_BR.po create mode 100644 odoo-bringout-oca-ocb-account_statement_base/account_statement_base/i18n/sv.po create mode 100644 odoo-bringout-oca-ocb-account_statement_base/account_statement_base/i18n/tr.po create mode 100644 odoo-bringout-oca-ocb-account_statement_base/account_statement_base/models/__init__.py create mode 100644 odoo-bringout-oca-ocb-account_statement_base/account_statement_base/models/account_bank_statement.py create mode 100644 odoo-bringout-oca-ocb-account_statement_base/account_statement_base/models/account_bank_statement_line.py create mode 100644 odoo-bringout-oca-ocb-account_statement_base/account_statement_base/models/account_journal_dashboard.py create mode 100644 odoo-bringout-oca-ocb-account_statement_base/account_statement_base/readme/CONTRIBUTORS.rst create mode 100644 odoo-bringout-oca-ocb-account_statement_base/account_statement_base/readme/DESCRIPTION.rst create mode 100644 odoo-bringout-oca-ocb-account_statement_base/account_statement_base/static/description/icon.png create mode 100644 odoo-bringout-oca-ocb-account_statement_base/account_statement_base/static/description/index.html create mode 100644 odoo-bringout-oca-ocb-account_statement_base/account_statement_base/tests/__init__.py create mode 100644 odoo-bringout-oca-ocb-account_statement_base/account_statement_base/tests/test_account_statement_base.py create mode 100644 odoo-bringout-oca-ocb-account_statement_base/account_statement_base/views/account_bank_statement.xml create mode 100644 odoo-bringout-oca-ocb-account_statement_base/account_statement_base/views/account_bank_statement_line.xml create mode 100644 odoo-bringout-oca-ocb-account_statement_base/pyproject.toml diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/README.md b/odoo-bringout-oca-ocb-account_reconcile_oca/README.md new file mode 100644 index 0000000..4cc11b4 --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/README.md @@ -0,0 +1,33 @@ +# Account Reconcile OCA + +Odoo addon: account_reconcile_oca + +## Installation + +```bash +pip install odoo-bringout-oca-ocb-account_reconcile_oca +``` + +## Dependencies + +This addon depends on: +- account_statement_base +- base_sparse_field + +## Manifest Information + +- **Name**: Account Reconcile OCA +- **Version**: 16.0.2.4.9 +- **Category**: N/A +- **License**: AGPL-3 +- **Installable**: False + +## Source + +- Repository: https://github.com/OCA/OCB +- Branch: 16.0 +- Path: addons/account_reconcile_oca + +## License + +This package maintains the original AGPL-3 license from the upstream Odoo project. diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/README.rst b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/README.rst new file mode 100644 index 0000000..ccca787 --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/README.rst @@ -0,0 +1,124 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + +===================== +Account Reconcile OCA +===================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:f26494d38bbcd8158332ee518f6cf80c8a16f94c0043fc30645ea8f625ea1ce2 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Faccount--reconcile-lightgray.png?logo=github + :target: https://github.com/OCA/account-reconcile/tree/16.0/account_reconcile_oca + :alt: OCA/account-reconcile +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/account-reconcile-16-0/account-reconcile-16-0-account_reconcile_oca + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/account-reconcile&target_branch=16.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This addon allows to reconcile bank statements and account marked as `reconcile`. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +Bank reconcile +~~~~~~~~~~~~~~ + +Access `Invoicing / Dashboard` with a user with Full Acounting capabilities. +Select reconcile on the journal of your choice. + +Account reconcile +~~~~~~~~~~~~~~~~~ + +Access `Invoicing / Accounting / Actions / Reconcile` +All the possible reconcile options will show and you will be able to reconcile properly. +You can access the same widget from accounts and Partners. + + +Note : in case this module is installed on a migrated database, the reconciliation models will not be set by default. So they need to be set manually. + +![Reconciliation model : full payment](../static/description/reconcile-model-full.png) + +![Reconciliation model : partial payment](../static/description/reconcile-model-partial.png) + +Known issues / Roadmap +====================== + +The following bugs are already detected: + +* Creation of activities on the chatter do show automatically + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* CreuBlanca +* Dixmit + +Contributors +~~~~~~~~~~~~ + +* Enric Tobella + +Other credits +~~~~~~~~~~~~~ + +The system has been improved to handle currency amounts more effectively with the financial support of Sygel Technology. + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +.. |maintainer-etobella| image:: https://github.com/etobella.png?size=40px + :target: https://github.com/etobella + :alt: etobella + +Current `maintainer `__: + +|maintainer-etobella| + +This module is part of the `OCA/account-reconcile `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/__init__.py b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/__init__.py new file mode 100644 index 0000000..cc6b635 --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/__init__.py @@ -0,0 +1,2 @@ +from . import models +from .hooks import post_init_hook diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/__manifest__.py b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/__manifest__.py new file mode 100644 index 0000000..1fc7e94 --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/__manifest__.py @@ -0,0 +1,45 @@ +# Copyright 2023 Dixmit +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +{ + "name": "Account Reconcile OCA", + "summary": """ + Reconcile addons for Odoo CE accounting""", + "version": "16.0.2.4.9", + "license": "AGPL-3", + "author": "CreuBlanca,Dixmit,Odoo Community Association (OCA)", + "maintainers": ["etobella"], + "website": "https://github.com/OCA/account-reconcile", + "depends": [ + "account_statement_base", + "base_sparse_field", + ], + "data": [ + "views/res_config_settings.xml", + "security/ir.model.access.csv", + "security/security.xml", + "views/account_account_reconcile.xml", + "views/account_bank_statement_line.xml", + "views/account_move_line.xml", + "views/account_journal.xml", + "views/account_move.xml", + "views/account_account.xml", + "views/account_bank_statement.xml", + ], + "demo": ["demo/demo.xml"], + "post_init_hook": "post_init_hook", + "assets": { + "web.assets_backend": [ + "account_reconcile_oca/static/src/js/widgets/reconcile_data_widget.esm.js", + "account_reconcile_oca/static/src/js/widgets/reconcile_chatter_field.esm.js", + "account_reconcile_oca/static/src/js/widgets/selection_badge_uncheck.esm.js", + "account_reconcile_oca/static/src/js/widgets/reconcile_move_line_widget.esm.js", + "account_reconcile_oca/static/src/js/reconcile_move_line/*.esm.js", + "account_reconcile_oca/static/src/js/reconcile_form/*.esm.js", + "account_reconcile_oca/static/src/js/reconcile_manual/*.esm.js", + "account_reconcile_oca/static/src/js/reconcile/*.esm.js", + "account_reconcile_oca/static/src/xml/reconcile.xml", + "account_reconcile_oca/static/src/scss/reconcile.scss", + ], + }, +} diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/demo/demo.xml b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/demo/demo.xml new file mode 100644 index 0000000..a27a51e --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/demo/demo.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/hooks.py b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/hooks.py new file mode 100644 index 0000000..dd1094e --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/hooks.py @@ -0,0 +1,8 @@ +def post_init_hook(cr, registry): + cr.execute( + """ + UPDATE account_bank_statement_line + SET reconcile_mode = 'edit' + WHERE is_reconciled + """ + ) diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/i18n/account_reconcile_oca.pot b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/i18n/account_reconcile_oca.pot new file mode 100644 index 0000000..0108ef9 --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/i18n/account_reconcile_oca.pot @@ -0,0 +1,743 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_reconcile_oca +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \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: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "" +".\n" +"
\n" +" You might want to set the invoice as" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__account_id +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +#, python-format +msgid "Account" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_account_reconcile +msgid "Account Account Reconcile" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_reconcile_abstract +msgid "Account Reconcile Abstract" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__active +msgid "Active" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__add_account_move_line_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__add_account_move_line_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__add_account_move_line_id +msgid "Add Account Move Line" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_create +msgid "Add Bank Statement Line" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Add all" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__aggregate_id +msgid "Aggregate" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__aggregate_name +msgid "Aggregate Name" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,help:account_reconcile_oca.field_account_journal__reconcile_aggregate +msgid "Aggregation to use on reconcile view" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Amount" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Amount in Currency" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Amount in currency" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__analytic_distribution +msgid "Analytic Distribution" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__analytic_precision +msgid "Analytic Precision" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Are you sure that the move should be unreconciled?" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Bank" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_bank_statement +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_bank_statement_form_edit +msgid "Bank Statement" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_bank_statement_line +msgid "Bank Statement Line" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_form_view +msgid "Bank reconcile" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__can_reconcile +msgid "Can Reconcile" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_add_view +msgid "Cancel" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Cash" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Chatter" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_account_reconcile_form_view +msgid "Clean" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_res_company +msgid "Companies" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__company_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__company_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__company_id +msgid "Company" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__company_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__company_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_journal__company_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__company_currency_id +msgid "Company Currency" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,help:account_reconcile_oca.field_account_bank_statement_line__company_id +msgid "Company related to this journal" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Create" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__create_uid +msgid "Created by" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__create_date +msgid "Created on" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Credit" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__currency_id +msgid "Currency" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__data +msgid "Data" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Date" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_aggregate__day +msgid "Day" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Debit" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__display_name +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__display_name +msgid "Display Name" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.account_bank_statement_action_edit +msgid "Edit Bank Statement" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_mode__edit +msgid "Edit Move" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__statement_balance_end_real +msgid "Ending Balance" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__foreign_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__foreign_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__foreign_currency_id +msgid "Foreign Currency" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "From Trade Payable accounts" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "From Trade Receivable accounts" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Global Balance" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__id +msgid "ID" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Invoice" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__statement_complete +msgid "Is Complete" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_in_currency +msgid "Is Manual in Currency?" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__is_reconciled +msgid "Is Reconciled" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__statement_valid +msgid "Is Valid" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_journal_dashboard_kanban_view +msgid "Items" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_journal +msgid "Journal" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__currency_id +msgid "Journal Currency" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Journal Entry" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_move_line +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Journal Item" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_mode__keep +msgid "Keep Suspense Accounts" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Label" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile____last_update +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data____last_update +msgid "Last Modified on" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__write_date +msgid "Last Updated on" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_account_id +msgid "Manual Account" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_amount +msgid "Manual Amount" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_amount_in_currency +msgid "Manual Amount In Currency" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_currency_id +msgid "Manual Currency" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__manual_delete +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_delete +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__manual_delete +msgid "Manual Delete" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_exchange_counterpart +msgid "Manual Exchange Counterpart" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_in_currency_id +msgid "Manual In Currency" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_kind +msgid "Manual Kind" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_line_id +msgid "Manual Line" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_model_id +msgid "Manual Model" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_move_id +msgid "Manual Move" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_move_type +msgid "Manual Move Type" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_name +msgid "Manual Name" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_original_amount +msgid "Manual Original Amount" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_partner_id +msgid "Manual Partner" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__manual_reference +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_reference +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__manual_reference +msgid "Manual Reference" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Manual operation" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Miscellaneous" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_aggregate__month +msgid "Month" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__name +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Name" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Narration" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_bank_statement_line.py:0 +#, python-format +msgid "No supense lines are allowed when reconciling" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.actions.act_window,help:account_reconcile_oca.action_bank_statement_line_reconcile_to_check +msgid "Nothing to check" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.actions.act_window,help:account_reconcile_oca.action_bank_statement_line_move_view_reconcile +#: model_terms:ir.actions.act_window,help:account_reconcile_oca.action_bank_statement_line_reconcile +#: model_terms:ir.actions.act_window,help:account_reconcile_oca.action_bank_statement_line_reconcile_all +msgid "Nothing to reconcile" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Open Balance" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__partner_id +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +#, python-format +msgid "Partner" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Payable" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__previous_manual_amount_in_currency +msgid "Previous Manual Amount In Currency" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Purchases" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Receivable" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.account_account_account_account_reconcile_act_window +#: model:ir.actions.act_window,name:account_reconcile_oca.account_account_reconcile_act_window +#: model:ir.actions.act_window,name:account_reconcile_oca.res_partner_account_account_reconcile_act_window +#: model:ir.actions.server,name:account_reconcile_oca.action_reconcile +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__reconcile_id +#: model:ir.ui.menu,name:account_reconcile_oca.account_account_reconcile_menu +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_account_reconcile_form_view +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_journal_dashboard_kanban_view +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.view_account_list +msgid "Reconcile" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__reconcile_aggregate +#: model:ir.model.fields,field_description:account_reconcile_oca.field_res_company__reconcile_aggregate +#: model:ir.model.fields,field_description:account_reconcile_oca.field_res_config_settings__reconcile_aggregate +msgid "Reconcile Aggregate" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__reconcile_data +msgid "Reconcile Data" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__reconcile_data_info +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__reconcile_data_info +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__reconcile_data_info +msgid "Reconcile Data Info" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__reconcile_mode +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_journal__reconcile_mode +msgid "Reconcile Mode" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_journal__reconcile_aggregate +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.res_config_settings_form_view +msgid "Reconcile aggregation" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_move_view_reconcile +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_reconcile_all +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_reconcile_to_check +msgid "Reconcile bank statement lines" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_account_reconcile_data +msgid "Reconcile data model to store user info" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_reconcile_view +msgid "Reconciled" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Reset reconciliation" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_bank_statement_line.py:0 +#, python-format +msgid "Reversal of: %s" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Sales" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_add_view +msgid "Save" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Search Journal Items" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Set as Checked" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.res_config_settings_form_view +msgid "Standard aggregation to use on bank reconciliation" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_aggregate__statement +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_reconcile_view +msgid "Statement" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__statement_name +msgid "Statement Name" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_reconcile +msgid "Statement lines" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,help:account_reconcile_oca.field_account_bank_statement_line__foreign_currency_id +msgid "The optional other currency if it is a multi-currency entry." +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "To Check" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_reconcile_view +msgid "To check" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_journal_dashboard_kanban_view +msgid "Transactions" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_bank_statement_line.py:0 +#, python-format +msgid "Undefined" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Unreconcile" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__user_id +msgid "User" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Validate" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_tree_reconcile_view +msgid "View" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "View move" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_aggregate__week +msgid "Week" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_journal.py:0 +#, python-format +msgid "Well done! Everything has been reconciled" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_move_line.py:0 +#, python-format +msgid "You can only reconcile journal items belonging to the same account." +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "fully paid" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_journal_dashboard_kanban_view +msgid "to check" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "will be reduced by" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "with an open amount" +msgstr "" diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/i18n/ca.po b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/i18n/ca.po new file mode 100644 index 0000000..4e7b387 --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/i18n/ca.po @@ -0,0 +1,755 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_reconcile_oca +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-11-20 17:34+0000\n" +"Last-Translator: Enric Tobella \n" +"Language-Team: none\n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "" +".\n" +"
\n" +" You might want to set the invoice as" +msgstr "" +".\n" +"
\n" +" Potser vols definir la factura com" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__account_id +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +#, python-format +msgid "Account" +msgstr "Compte" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_account_reconcile +msgid "Account Account Reconcile" +msgstr "Conciliació de compte comptable" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_reconcile_abstract +msgid "Account Reconcile Abstract" +msgstr "Conciliació de Compte abstracte" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__active +msgid "Active" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__add_account_move_line_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__add_account_move_line_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__add_account_move_line_id +msgid "Add Account Move Line" +msgstr "Afegir un apunt comptable" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_create +msgid "Add Bank Statement Line" +msgstr "Afegir una línea d'extracte bancari" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Add all" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__aggregate_id +msgid "Aggregate" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__aggregate_name +msgid "Aggregate Name" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,help:account_reconcile_oca.field_account_journal__reconcile_aggregate +msgid "Aggregation to use on reconcile view" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Amount" +msgstr "Import" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Amount in Currency" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Amount in currency" +msgstr "Import en divisa" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__analytic_distribution +msgid "Analytic Distribution" +msgstr "Dsitribució analítica" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__analytic_precision +msgid "Analytic Precision" +msgstr "Precisió analítica" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Are you sure that the move should be unreconciled?" +msgstr "Estas segur que vols desconciliar aquest apunt?" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Bank" +msgstr "Banc" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_bank_statement +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_bank_statement_form_edit +msgid "Bank Statement" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_bank_statement_line +msgid "Bank Statement Line" +msgstr "Línea d'extracte bancari" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_form_view +msgid "Bank reconcile" +msgstr "Concilicació bancària" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__can_reconcile +msgid "Can Reconcile" +msgstr "Es pot conciliar" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_add_view +msgid "Cancel" +msgstr "Cancel·la" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Cash" +msgstr "Efectiu" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Chatter" +msgstr "Missatges" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_account_reconcile_form_view +msgid "Clean" +msgstr "Neteja" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_res_company +msgid "Companies" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__company_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__company_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__company_id +msgid "Company" +msgstr "Companyia" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__company_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__company_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_journal__company_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__company_currency_id +msgid "Company Currency" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,help:account_reconcile_oca.field_account_bank_statement_line__company_id +msgid "Company related to this journal" +msgstr "Companyia relacionada amb el diari" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Create" +msgstr "Crea" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__create_uid +msgid "Created by" +msgstr "Creat per" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__create_date +msgid "Created on" +msgstr "Creat el" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Credit" +msgstr "Crèdit" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__currency_id +msgid "Currency" +msgstr "Moneda" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__data +msgid "Data" +msgstr "Dades" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Date" +msgstr "Data" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_aggregate__day +msgid "Day" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Debit" +msgstr "Dèbit" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__display_name +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__display_name +msgid "Display Name" +msgstr "Nóm a mostrar" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.account_bank_statement_action_edit +msgid "Edit Bank Statement" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_mode__edit +msgid "Edit Move" +msgstr "Edita moviment" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__statement_balance_end_real +msgid "Ending Balance" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__foreign_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__foreign_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__foreign_currency_id +msgid "Foreign Currency" +msgstr "Moneda extrangera" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "From Trade Payable accounts" +msgstr "De comptes a pagar" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "From Trade Receivable accounts" +msgstr "De comptes a cobrar" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Global Balance" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__id +msgid "ID" +msgstr "ID" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Invoice" +msgstr "Factura" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__statement_complete +msgid "Is Complete" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_in_currency +msgid "Is Manual in Currency?" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__is_reconciled +msgid "Is Reconciled" +msgstr "Conciliat" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__statement_valid +msgid "Is Valid" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_journal_dashboard_kanban_view +msgid "Items" +msgstr "Elements" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_journal +msgid "Journal" +msgstr "Diari" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__currency_id +msgid "Journal Currency" +msgstr "Divisa del diari" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Journal Entry" +msgstr "Entrada del diari" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_move_line +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Journal Item" +msgstr "Element del diari" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_mode__keep +msgid "Keep Suspense Accounts" +msgstr "Mantenir comptes transitoris" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Label" +msgstr "Etiqueta" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile____last_update +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data____last_update +msgid "Last Modified on" +msgstr "Última modificació el" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__write_uid +msgid "Last Updated by" +msgstr "Última actualització per" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__write_date +msgid "Last Updated on" +msgstr "Última actualització per" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_account_id +msgid "Manual Account" +msgstr "Compte manual" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_amount +msgid "Manual Amount" +msgstr "Import manual" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_amount_in_currency +msgid "Manual Amount In Currency" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_currency_id +msgid "Manual Currency" +msgstr "Divisa manual" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__manual_delete +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_delete +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__manual_delete +msgid "Manual Delete" +msgstr "Esborrat manual" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_exchange_counterpart +msgid "Manual Exchange Counterpart" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_in_currency_id +msgid "Manual In Currency" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_kind +msgid "Manual Kind" +msgstr "Tipus manual" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_line_id +msgid "Manual Line" +msgstr "Línea manual" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_model_id +msgid "Manual Model" +msgstr "Model manual" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_move_id +msgid "Manual Move" +msgstr "Assentament manual" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_move_type +msgid "Manual Move Type" +msgstr "Tipus d'assentament manual" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_name +msgid "Manual Name" +msgstr "Nom manual" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_original_amount +msgid "Manual Original Amount" +msgstr "Import original manual" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_partner_id +msgid "Manual Partner" +msgstr "Contacte manual" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__manual_reference +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_reference +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__manual_reference +msgid "Manual Reference" +msgstr "Referencia manual" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Manual operation" +msgstr "Operació manual" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Miscellaneous" +msgstr "Variat" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_aggregate__month +msgid "Month" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__name +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Name" +msgstr "Nom" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Narration" +msgstr "Narració" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_bank_statement_line.py:0 +#, python-format +msgid "No supense lines are allowed when reconciling" +msgstr "No està permés usar líneas transitòries" + +#. module: account_reconcile_oca +#: model_terms:ir.actions.act_window,help:account_reconcile_oca.action_bank_statement_line_reconcile_to_check +msgid "Nothing to check" +msgstr "Res a comprobar" + +#. module: account_reconcile_oca +#: model_terms:ir.actions.act_window,help:account_reconcile_oca.action_bank_statement_line_move_view_reconcile +#: model_terms:ir.actions.act_window,help:account_reconcile_oca.action_bank_statement_line_reconcile +#: model_terms:ir.actions.act_window,help:account_reconcile_oca.action_bank_statement_line_reconcile_all +msgid "Nothing to reconcile" +msgstr "Res a conciliar" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Open Balance" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__partner_id +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +#, python-format +msgid "Partner" +msgstr "Empresa" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Payable" +msgstr "A pagar" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__previous_manual_amount_in_currency +msgid "Previous Manual Amount In Currency" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Purchases" +msgstr "Compres" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Receivable" +msgstr "A cobrar" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.account_account_account_account_reconcile_act_window +#: model:ir.actions.act_window,name:account_reconcile_oca.account_account_reconcile_act_window +#: model:ir.actions.act_window,name:account_reconcile_oca.res_partner_account_account_reconcile_act_window +#: model:ir.actions.server,name:account_reconcile_oca.action_reconcile +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__reconcile_id +#: model:ir.ui.menu,name:account_reconcile_oca.account_account_reconcile_menu +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_account_reconcile_form_view +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_journal_dashboard_kanban_view +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.view_account_list +msgid "Reconcile" +msgstr "Conciliar" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__reconcile_aggregate +#: model:ir.model.fields,field_description:account_reconcile_oca.field_res_company__reconcile_aggregate +#: model:ir.model.fields,field_description:account_reconcile_oca.field_res_config_settings__reconcile_aggregate +msgid "Reconcile Aggregate" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__reconcile_data +msgid "Reconcile Data" +msgstr "Data de concilicació" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__reconcile_data_info +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__reconcile_data_info +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__reconcile_data_info +msgid "Reconcile Data Info" +msgstr "Informació de conciliació" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__reconcile_mode +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_journal__reconcile_mode +msgid "Reconcile Mode" +msgstr "Mode de concilicació" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_journal__reconcile_aggregate +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.res_config_settings_form_view +msgid "Reconcile aggregation" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_move_view_reconcile +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_reconcile_all +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_reconcile_to_check +msgid "Reconcile bank statement lines" +msgstr "Conciliar líneas d'extracte bancari" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_account_reconcile_data +msgid "Reconcile data model to store user info" +msgstr "" +"Model de dades per emmagatzemar dades de concilicació a nivell d'usuari" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_reconcile_view +msgid "Reconciled" +msgstr "Conciliat" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Reset reconciliation" +msgstr "Restablir concilicació" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_bank_statement_line.py:0 +#, python-format +msgid "Reversal of: %s" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Sales" +msgstr "Ventes" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_add_view +msgid "Save" +msgstr "Guardar" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Search Journal Items" +msgstr "Buscar apunts comptables" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Set as Checked" +msgstr "Marcar com revisat" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.res_config_settings_form_view +msgid "Standard aggregation to use on bank reconciliation" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_aggregate__statement +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_reconcile_view +msgid "Statement" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__statement_name +msgid "Statement Name" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_reconcile +msgid "Statement lines" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,help:account_reconcile_oca.field_account_bank_statement_line__foreign_currency_id +msgid "The optional other currency if it is a multi-currency entry." +msgstr "L'altra divisa opcional si es tracta d'una entrada multidivisa." + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "To Check" +msgstr "A revisar" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_reconcile_view +msgid "To check" +msgstr "A revisar" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_journal_dashboard_kanban_view +msgid "Transactions" +msgstr "Transaccions" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_bank_statement_line.py:0 +#, python-format +msgid "Undefined" +msgstr "Indefinit" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Unreconcile" +msgstr "Desconciliar" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__user_id +msgid "User" +msgstr "Usuari" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Validate" +msgstr "Validar" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_tree_reconcile_view +msgid "View" +msgstr "Veure" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "View move" +msgstr "Veure assentament" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_aggregate__week +msgid "Week" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_journal.py:0 +#, python-format +msgid "Well done! Everything has been reconciled" +msgstr "Ben fet! Tot s'ha conciliat" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_move_line.py:0 +#, python-format +msgid "You can only reconcile journal items belonging to the same account." +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "fully paid" +msgstr "Completament pagat" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_journal_dashboard_kanban_view +msgid "to check" +msgstr "a revisar" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "will be reduced by" +msgstr "será reduit en" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "with an open amount" +msgstr "amb un import pendent" + +#, python-format +#~ msgid "Keep suspense move lines mode cannot be unreconciled" +#~ msgstr "" +#~ "La modalitat mantenir els comptes transitoris no permet desconciliar" diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/i18n/de.po b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/i18n/de.po new file mode 100644 index 0000000..c3030b2 --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/i18n/de.po @@ -0,0 +1,744 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_reconcile_oca +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "" +".\n" +"
\n" +" You might want to set the invoice as" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__account_id +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +#, python-format +msgid "Account" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_account_reconcile +msgid "Account Account Reconcile" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_reconcile_abstract +msgid "Account Reconcile Abstract" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__active +msgid "Active" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__add_account_move_line_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__add_account_move_line_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__add_account_move_line_id +msgid "Add Account Move Line" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_create +msgid "Add Bank Statement Line" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Add all" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__aggregate_id +msgid "Aggregate" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__aggregate_name +msgid "Aggregate Name" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,help:account_reconcile_oca.field_account_journal__reconcile_aggregate +msgid "Aggregation to use on reconcile view" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Amount" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Amount in Currency" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Amount in currency" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__analytic_distribution +msgid "Analytic Distribution" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__analytic_precision +msgid "Analytic Precision" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Are you sure that the move should be unreconciled?" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Bank" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_bank_statement +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_bank_statement_form_edit +msgid "Bank Statement" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_bank_statement_line +msgid "Bank Statement Line" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_form_view +msgid "Bank reconcile" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__can_reconcile +msgid "Can Reconcile" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_add_view +msgid "Cancel" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Cash" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Chatter" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_account_reconcile_form_view +msgid "Clean" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_res_company +msgid "Companies" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__company_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__company_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__company_id +msgid "Company" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__company_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__company_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_journal__company_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__company_currency_id +msgid "Company Currency" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,help:account_reconcile_oca.field_account_bank_statement_line__company_id +msgid "Company related to this journal" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Create" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__create_uid +msgid "Created by" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__create_date +msgid "Created on" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Credit" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__currency_id +msgid "Currency" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__data +msgid "Data" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Date" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_aggregate__day +msgid "Day" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Debit" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__display_name +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__display_name +msgid "Display Name" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.account_bank_statement_action_edit +msgid "Edit Bank Statement" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_mode__edit +msgid "Edit Move" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__statement_balance_end_real +msgid "Ending Balance" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__foreign_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__foreign_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__foreign_currency_id +msgid "Foreign Currency" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "From Trade Payable accounts" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "From Trade Receivable accounts" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Global Balance" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__id +msgid "ID" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Invoice" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__statement_complete +msgid "Is Complete" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_in_currency +msgid "Is Manual in Currency?" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__is_reconciled +msgid "Is Reconciled" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__statement_valid +msgid "Is Valid" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_journal_dashboard_kanban_view +msgid "Items" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_journal +msgid "Journal" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__currency_id +msgid "Journal Currency" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Journal Entry" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_move_line +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Journal Item" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_mode__keep +msgid "Keep Suspense Accounts" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Label" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile____last_update +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data____last_update +msgid "Last Modified on" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__write_date +msgid "Last Updated on" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_account_id +msgid "Manual Account" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_amount +msgid "Manual Amount" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_amount_in_currency +msgid "Manual Amount In Currency" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_currency_id +msgid "Manual Currency" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__manual_delete +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_delete +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__manual_delete +msgid "Manual Delete" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_exchange_counterpart +msgid "Manual Exchange Counterpart" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_in_currency_id +msgid "Manual In Currency" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_kind +msgid "Manual Kind" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_line_id +msgid "Manual Line" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_model_id +msgid "Manual Model" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_move_id +msgid "Manual Move" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_move_type +msgid "Manual Move Type" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_name +msgid "Manual Name" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_original_amount +msgid "Manual Original Amount" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_partner_id +msgid "Manual Partner" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__manual_reference +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_reference +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__manual_reference +msgid "Manual Reference" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Manual operation" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Miscellaneous" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_aggregate__month +msgid "Month" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__name +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Name" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Narration" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_bank_statement_line.py:0 +#, python-format +msgid "No supense lines are allowed when reconciling" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.actions.act_window,help:account_reconcile_oca.action_bank_statement_line_reconcile_to_check +msgid "Nothing to check" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.actions.act_window,help:account_reconcile_oca.action_bank_statement_line_move_view_reconcile +#: model_terms:ir.actions.act_window,help:account_reconcile_oca.action_bank_statement_line_reconcile +#: model_terms:ir.actions.act_window,help:account_reconcile_oca.action_bank_statement_line_reconcile_all +msgid "Nothing to reconcile" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Open Balance" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__partner_id +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +#, python-format +msgid "Partner" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Payable" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__previous_manual_amount_in_currency +msgid "Previous Manual Amount In Currency" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Purchases" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Receivable" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.account_account_account_account_reconcile_act_window +#: model:ir.actions.act_window,name:account_reconcile_oca.account_account_reconcile_act_window +#: model:ir.actions.act_window,name:account_reconcile_oca.res_partner_account_account_reconcile_act_window +#: model:ir.actions.server,name:account_reconcile_oca.action_reconcile +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__reconcile_id +#: model:ir.ui.menu,name:account_reconcile_oca.account_account_reconcile_menu +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_account_reconcile_form_view +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_journal_dashboard_kanban_view +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.view_account_list +msgid "Reconcile" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__reconcile_aggregate +#: model:ir.model.fields,field_description:account_reconcile_oca.field_res_company__reconcile_aggregate +#: model:ir.model.fields,field_description:account_reconcile_oca.field_res_config_settings__reconcile_aggregate +msgid "Reconcile Aggregate" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__reconcile_data +msgid "Reconcile Data" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__reconcile_data_info +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__reconcile_data_info +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__reconcile_data_info +msgid "Reconcile Data Info" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__reconcile_mode +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_journal__reconcile_mode +msgid "Reconcile Mode" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_journal__reconcile_aggregate +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.res_config_settings_form_view +msgid "Reconcile aggregation" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_move_view_reconcile +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_reconcile_all +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_reconcile_to_check +msgid "Reconcile bank statement lines" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_account_reconcile_data +msgid "Reconcile data model to store user info" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_reconcile_view +msgid "Reconciled" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Reset reconciliation" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_bank_statement_line.py:0 +#, python-format +msgid "Reversal of: %s" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Sales" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_add_view +msgid "Save" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Search Journal Items" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Set as Checked" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.res_config_settings_form_view +msgid "Standard aggregation to use on bank reconciliation" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_aggregate__statement +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_reconcile_view +msgid "Statement" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__statement_name +msgid "Statement Name" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_reconcile +msgid "Statement lines" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,help:account_reconcile_oca.field_account_bank_statement_line__foreign_currency_id +msgid "The optional other currency if it is a multi-currency entry." +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "To Check" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_reconcile_view +msgid "To check" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_journal_dashboard_kanban_view +msgid "Transactions" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_bank_statement_line.py:0 +#, python-format +msgid "Undefined" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Unreconcile" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__user_id +msgid "User" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Validate" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_tree_reconcile_view +msgid "View" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "View move" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_aggregate__week +msgid "Week" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_journal.py:0 +#, python-format +msgid "Well done! Everything has been reconciled" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_move_line.py:0 +#, python-format +msgid "You can only reconcile journal items belonging to the same account." +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "fully paid" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_journal_dashboard_kanban_view +msgid "to check" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "will be reduced by" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "with an open amount" +msgstr "" diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/i18n/es.po b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/i18n/es.po new file mode 100644 index 0000000..caefd2a --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/i18n/es.po @@ -0,0 +1,764 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_reconcile_oca +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2025-04-16 19:11+0000\n" +"Last-Translator: \"Pedro M. Baeza\" \n" +"Language-Team: none\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.10.4\n" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "" +".\n" +"
\n" +" You might want to set the invoice as" +msgstr "" +".\n" +"
\n" +" Podría querer establecer la factura como" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__account_id +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +#, python-format +msgid "Account" +msgstr "Cuenta" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_account_reconcile +msgid "Account Account Reconcile" +msgstr "Conciliación de cuenta contable" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_reconcile_abstract +msgid "Account Reconcile Abstract" +msgstr "Resumen de conciliación de cuenta" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__active +msgid "Active" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__add_account_move_line_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__add_account_move_line_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__add_account_move_line_id +msgid "Add Account Move Line" +msgstr "Añadir apunte contable" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_create +msgid "Add Bank Statement Line" +msgstr "Añadir línea de extracto bancario" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Add all" +msgstr "Añadir todo" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__aggregate_id +msgid "Aggregate" +msgstr "Agregado" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__aggregate_name +msgid "Aggregate Name" +msgstr "Nombre del agregado" + +#. module: account_reconcile_oca +#: model:ir.model.fields,help:account_reconcile_oca.field_account_journal__reconcile_aggregate +msgid "Aggregation to use on reconcile view" +msgstr "Agregación a usar en la vista de conciliación" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Amount" +msgstr "Importe" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Amount in Currency" +msgstr "Importe en moneda" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Amount in currency" +msgstr "Importe en moneda" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__analytic_distribution +msgid "Analytic Distribution" +msgstr "Distribución analítica" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__analytic_precision +msgid "Analytic Precision" +msgstr "Precisión analítica" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Are you sure that the move should be unreconciled?" +msgstr "¿Está seguro de que el apunte se debería desconciliar?" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Bank" +msgstr "Banco" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_bank_statement +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_bank_statement_form_edit +msgid "Bank Statement" +msgstr "Extracto bancario" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_bank_statement_line +msgid "Bank Statement Line" +msgstr "Línea de extracto bancario" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_form_view +msgid "Bank reconcile" +msgstr "Conciliación bancaria" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__can_reconcile +msgid "Can Reconcile" +msgstr "Se puede conciliar" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_add_view +msgid "Cancel" +msgstr "Cancelar" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Cash" +msgstr "Efectivo" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Chatter" +msgstr "Charla" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_account_reconcile_form_view +msgid "Clean" +msgstr "Limpiar" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_res_company +msgid "Companies" +msgstr "Compañías" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__company_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__company_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__company_id +msgid "Company" +msgstr "Compañía" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__company_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__company_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_journal__company_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__company_currency_id +msgid "Company Currency" +msgstr "Moneda de la compañía" + +#. module: account_reconcile_oca +#: model:ir.model.fields,help:account_reconcile_oca.field_account_bank_statement_line__company_id +msgid "Company related to this journal" +msgstr "Compañía del diario" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_res_config_settings +msgid "Config Settings" +msgstr "Opciones de configuración" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Create" +msgstr "Crear" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__create_date +msgid "Created on" +msgstr "Creado en" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Credit" +msgstr "Haber" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__currency_id +msgid "Currency" +msgstr "Moneda" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__data +msgid "Data" +msgstr "Datos" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Date" +msgstr "Fecha" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_aggregate__day +msgid "Day" +msgstr "Día" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Debit" +msgstr "Debe" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__display_name +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__display_name +msgid "Display Name" +msgstr "Nombre mostrado" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.account_bank_statement_action_edit +msgid "Edit Bank Statement" +msgstr "Editar extracto bancario" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_mode__edit +msgid "Edit Move" +msgstr "Editar movimiento" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__statement_balance_end_real +msgid "Ending Balance" +msgstr "Balance final" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__foreign_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__foreign_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__foreign_currency_id +msgid "Foreign Currency" +msgstr "Moneda extranjera" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "From Trade Payable accounts" +msgstr "De cuentas comerciales por pagar" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "From Trade Receivable accounts" +msgstr "De cuentas comerciales por cobrar" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Global Balance" +msgstr "Balance global" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__id +msgid "ID" +msgstr "ID" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Invoice" +msgstr "Factura" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__statement_complete +msgid "Is Complete" +msgstr "Está completo" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_in_currency +msgid "Is Manual in Currency?" +msgstr "¿Es manual en la moneda?" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__is_reconciled +msgid "Is Reconciled" +msgstr "Conciliado" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__statement_valid +msgid "Is Valid" +msgstr "Es válido" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_journal_dashboard_kanban_view +msgid "Items" +msgstr "Elementos" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_journal +msgid "Journal" +msgstr "Diario" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__currency_id +msgid "Journal Currency" +msgstr "Moneda del diario" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Journal Entry" +msgstr "Asiento contable" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_move_line +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Journal Item" +msgstr "Apunte contable" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_mode__keep +msgid "Keep Suspense Accounts" +msgstr "Mantener cuentas transitorias" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Label" +msgstr "Etiqueta" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile____last_update +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data____last_update +msgid "Last Modified on" +msgstr "Última modificación en" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__write_uid +msgid "Last Updated by" +msgstr "Última modificación por" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__write_date +msgid "Last Updated on" +msgstr "Última actualización el" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_account_id +msgid "Manual Account" +msgstr "Cuenta manual" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_amount +msgid "Manual Amount" +msgstr "Importe manual" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_amount_in_currency +msgid "Manual Amount In Currency" +msgstr "Importe manuel en moneda" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_currency_id +msgid "Manual Currency" +msgstr "Moneda manual" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__manual_delete +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_delete +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__manual_delete +msgid "Manual Delete" +msgstr "Borrado manual" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_exchange_counterpart +msgid "Manual Exchange Counterpart" +msgstr "Contrapartida de cambio manual" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_in_currency_id +msgid "Manual In Currency" +msgstr "En moneda manual" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_kind +msgid "Manual Kind" +msgstr "Tipo manual" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_line_id +msgid "Manual Line" +msgstr "Línea manual" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_model_id +msgid "Manual Model" +msgstr "Modelo manual" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_move_id +msgid "Manual Move" +msgstr "Asiento manual" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_move_type +msgid "Manual Move Type" +msgstr "Tipo de asiento manual" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_name +msgid "Manual Name" +msgstr "Nombre manual" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_original_amount +msgid "Manual Original Amount" +msgstr "Importe original manual" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_partner_id +msgid "Manual Partner" +msgstr "Empresa manual" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__manual_reference +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_reference +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__manual_reference +msgid "Manual Reference" +msgstr "Referencia manual" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Manual operation" +msgstr "Operación manual" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Miscellaneous" +msgstr "Varios" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_aggregate__month +msgid "Month" +msgstr "Mes" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__name +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Name" +msgstr "Nombre" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Narration" +msgstr "Narración" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_bank_statement_line.py:0 +#, python-format +msgid "No supense lines are allowed when reconciling" +msgstr "No se permiten líneas en suspenso al conciliar" + +#. module: account_reconcile_oca +#: model_terms:ir.actions.act_window,help:account_reconcile_oca.action_bank_statement_line_reconcile_to_check +msgid "Nothing to check" +msgstr "Nada que comprobar" + +#. module: account_reconcile_oca +#: model_terms:ir.actions.act_window,help:account_reconcile_oca.action_bank_statement_line_move_view_reconcile +#: model_terms:ir.actions.act_window,help:account_reconcile_oca.action_bank_statement_line_reconcile +#: model_terms:ir.actions.act_window,help:account_reconcile_oca.action_bank_statement_line_reconcile_all +msgid "Nothing to reconcile" +msgstr "Nada para conciliar" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Open Balance" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__partner_id +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +#, python-format +msgid "Partner" +msgstr "Empresa" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Payable" +msgstr "A pagar" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__previous_manual_amount_in_currency +msgid "Previous Manual Amount In Currency" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Purchases" +msgstr "Compras" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Receivable" +msgstr "A cobrar" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.account_account_account_account_reconcile_act_window +#: model:ir.actions.act_window,name:account_reconcile_oca.account_account_reconcile_act_window +#: model:ir.actions.act_window,name:account_reconcile_oca.res_partner_account_account_reconcile_act_window +#: model:ir.actions.server,name:account_reconcile_oca.action_reconcile +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__reconcile_id +#: model:ir.ui.menu,name:account_reconcile_oca.account_account_reconcile_menu +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_account_reconcile_form_view +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_journal_dashboard_kanban_view +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.view_account_list +msgid "Reconcile" +msgstr "Conciliar" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__reconcile_aggregate +#: model:ir.model.fields,field_description:account_reconcile_oca.field_res_company__reconcile_aggregate +#: model:ir.model.fields,field_description:account_reconcile_oca.field_res_config_settings__reconcile_aggregate +msgid "Reconcile Aggregate" +msgstr "Agregación de conciliación" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__reconcile_data +msgid "Reconcile Data" +msgstr "Datos de conciliación" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__reconcile_data_info +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__reconcile_data_info +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__reconcile_data_info +msgid "Reconcile Data Info" +msgstr "Información de conciliación" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__reconcile_mode +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_journal__reconcile_mode +msgid "Reconcile Mode" +msgstr "Modo de conciliación" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_journal__reconcile_aggregate +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.res_config_settings_form_view +msgid "Reconcile aggregation" +msgstr "Agregación de conciliación" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_move_view_reconcile +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_reconcile_all +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_reconcile_to_check +msgid "Reconcile bank statement lines" +msgstr "Conciliar líneas de extracto bancario" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_account_reconcile_data +msgid "Reconcile data model to store user info" +msgstr "Modelo de datos de conciliación para almacenar información de usuario" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_reconcile_view +msgid "Reconciled" +msgstr "Conciliado" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Reset reconciliation" +msgstr "Restablecer conciliación" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_bank_statement_line.py:0 +#, python-format +msgid "Reversal of: %s" +msgstr "Reversión de: %s" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Sales" +msgstr "Ventas" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_add_view +msgid "Save" +msgstr "Guardar" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Search Journal Items" +msgstr "Buscar apuntes" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Set as Checked" +msgstr "Marcar como revisado" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.res_config_settings_form_view +msgid "Standard aggregation to use on bank reconciliation" +msgstr "Agregación estándar a usar en la conciliación bancaria" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_aggregate__statement +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_reconcile_view +msgid "Statement" +msgstr "Extracto" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__statement_name +msgid "Statement Name" +msgstr "Nombre del extracto" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_reconcile +msgid "Statement lines" +msgstr "Líneas de extracto bancario" + +#. module: account_reconcile_oca +#: model:ir.model.fields,help:account_reconcile_oca.field_account_bank_statement_line__foreign_currency_id +msgid "The optional other currency if it is a multi-currency entry." +msgstr "La otra moneda opcional si se trata de una entrada multi-moneda." + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "To Check" +msgstr "A revisar" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_reconcile_view +msgid "To check" +msgstr "A revisar" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_journal_dashboard_kanban_view +msgid "Transactions" +msgstr "Transacciones" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_bank_statement_line.py:0 +#, python-format +msgid "Undefined" +msgstr "Indefinido" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Unreconcile" +msgstr "Desconciliar" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__user_id +msgid "User" +msgstr "Usuario" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Validate" +msgstr "Validar" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_tree_reconcile_view +msgid "View" +msgstr "Ver" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "View move" +msgstr "Ver asiento" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_aggregate__week +msgid "Week" +msgstr "Semana" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_journal.py:0 +#, python-format +msgid "Well done! Everything has been reconciled" +msgstr "¡Bien hecho! Todo ha sido conciliado" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_move_line.py:0 +#, python-format +msgid "You can only reconcile journal items belonging to the same account." +msgstr "Sólo se pueden conciliar asientos que pertenezcan a la misma cuenta." + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "fully paid" +msgstr "totalmente pagado" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_journal_dashboard_kanban_view +msgid "to check" +msgstr "a revisar" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "will be reduced by" +msgstr "será disminuido por" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "with an open amount" +msgstr "con un importe pendiente de" + +#, python-format +#~ msgid "Keep suspense move lines mode cannot be unreconciled" +#~ msgstr "" +#~ "Mantener en modo suspenso las líneas que no pueden ser desconciliadas" + +#~ msgid "Due Date" +#~ msgstr "Fecha de Vencimiento" + +#, python-format +#~ msgid "You must reconcile information on the same partner" +#~ msgstr "Debe conciliar la información sobre el mismo socio" + +#~ msgid "Reset" +#~ msgstr "Restablecer" diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/i18n/fr.po b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/i18n/fr.po new file mode 100644 index 0000000..368eac5 --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/i18n/fr.po @@ -0,0 +1,763 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_reconcile_oca +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-10-09 15:28+0000\n" +"Last-Translator: Guillaume Masson \n" +"Language-Team: none\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.6.2\n" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "" +".\n" +"
\n" +" You might want to set the invoice as" +msgstr "" +".\n" +"
\n" +" Vous pouvez définir la facture comme" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__account_id +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +#, python-format +msgid "Account" +msgstr "Compte" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_account_reconcile +msgid "Account Account Reconcile" +msgstr "Lettrage comptable" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_reconcile_abstract +msgid "Account Reconcile Abstract" +msgstr "Résumé de lettrage des comptes" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__active +msgid "Active" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__add_account_move_line_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__add_account_move_line_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__add_account_move_line_id +msgid "Add Account Move Line" +msgstr "Ajouter une ligne de pièce" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_create +msgid "Add Bank Statement Line" +msgstr "Ajouter une ligne de relevé bancaire" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Add all" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__aggregate_id +msgid "Aggregate" +msgstr "Agrégat" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__aggregate_name +msgid "Aggregate Name" +msgstr "Nom de l'agrégat" + +#. module: account_reconcile_oca +#: model:ir.model.fields,help:account_reconcile_oca.field_account_journal__reconcile_aggregate +msgid "Aggregation to use on reconcile view" +msgstr "Agrégation à utiliser dans la vue de rapprochement" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Amount" +msgstr "Montant" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Amount in Currency" +msgstr "Montant en devise" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Amount in currency" +msgstr "Montant en devise" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__analytic_distribution +msgid "Analytic Distribution" +msgstr "Distribution analytique" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__analytic_precision +msgid "Analytic Precision" +msgstr "Précision analytique" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Are you sure that the move should be unreconciled?" +msgstr "Êtes-vous sûr que la pièce doit être non réconciliée ?" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Bank" +msgstr "Banque" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_bank_statement +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_bank_statement_form_edit +msgid "Bank Statement" +msgstr "Relevé bancaire" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_bank_statement_line +msgid "Bank Statement Line" +msgstr "Ligne de relevé bancaire" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_form_view +msgid "Bank reconcile" +msgstr "Réconciliation bancaire" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__can_reconcile +msgid "Can Reconcile" +msgstr "Peut être réconciliée" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_add_view +msgid "Cancel" +msgstr "Annuler" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Cash" +msgstr "Espèces" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Chatter" +msgstr "Chatter" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_account_reconcile_form_view +msgid "Clean" +msgstr "Nettoyer" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_res_company +msgid "Companies" +msgstr "Sociétés" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__company_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__company_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__company_id +msgid "Company" +msgstr "Société" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__company_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__company_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_journal__company_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__company_currency_id +msgid "Company Currency" +msgstr "Devise de la société" + +#. module: account_reconcile_oca +#: model:ir.model.fields,help:account_reconcile_oca.field_account_bank_statement_line__company_id +msgid "Company related to this journal" +msgstr "Société liée à ce journal" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_res_config_settings +msgid "Config Settings" +msgstr "Paramètres de configuration" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Create" +msgstr "Créer" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__create_uid +msgid "Created by" +msgstr "Créé par" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__create_date +msgid "Created on" +msgstr "Créé le" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Credit" +msgstr "Crédit" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__currency_id +msgid "Currency" +msgstr "Devise" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__data +msgid "Data" +msgstr "Données" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Date" +msgstr "Date" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_aggregate__day +msgid "Day" +msgstr "Jour" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Debit" +msgstr "Débit" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__display_name +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__display_name +msgid "Display Name" +msgstr "Nom affiché" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.account_bank_statement_action_edit +msgid "Edit Bank Statement" +msgstr "Modifier le relevé bancaire" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_mode__edit +msgid "Edit Move" +msgstr "Modifier la pièce" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__statement_balance_end_real +msgid "Ending Balance" +msgstr "Solde de clôture" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__foreign_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__foreign_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__foreign_currency_id +msgid "Foreign Currency" +msgstr "Devise étrangère" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "From Trade Payable accounts" +msgstr "Depuis les comptes fournisseurs" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "From Trade Receivable accounts" +msgstr "Depuis les comptes client" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Global Balance" +msgstr "Solde global" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__id +msgid "ID" +msgstr "ID" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Invoice" +msgstr "Facture" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__statement_complete +msgid "Is Complete" +msgstr "Est terminé" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_in_currency +msgid "Is Manual in Currency?" +msgstr "La réconciliation manuelle est-elle en devise ?" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__is_reconciled +msgid "Is Reconciled" +msgstr "Est lettré" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__statement_valid +msgid "Is Valid" +msgstr "Est valide" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_journal_dashboard_kanban_view +msgid "Items" +msgstr "Transactions" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_journal +msgid "Journal" +msgstr "Journal" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__currency_id +msgid "Journal Currency" +msgstr "Devise du journal" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Journal Entry" +msgstr "Pièce comptable" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_move_line +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Journal Item" +msgstr "Écriture comptable" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_mode__keep +msgid "Keep Suspense Accounts" +msgstr "Conserver les comptes d'attente" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Label" +msgstr "Libellé" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile____last_update +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data____last_update +msgid "Last Modified on" +msgstr "Dernière modification le" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__write_uid +msgid "Last Updated by" +msgstr "Dernière mise à jour par" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__write_date +msgid "Last Updated on" +msgstr "Dernière mise à jour le" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_account_id +msgid "Manual Account" +msgstr "Compte manuel" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_amount +msgid "Manual Amount" +msgstr "Montant manuel" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_amount_in_currency +msgid "Manual Amount In Currency" +msgstr "Montant de réconciliation manuelle en devise" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_currency_id +msgid "Manual Currency" +msgstr "Devise manuelle" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__manual_delete +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_delete +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__manual_delete +msgid "Manual Delete" +msgstr "Suppression manuelle" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_exchange_counterpart +msgid "Manual Exchange Counterpart" +msgstr "Contrepartie de change manuelle" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_in_currency_id +msgid "Manual In Currency" +msgstr "Devise de l'entrée manuelle" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_kind +msgid "Manual Kind" +msgstr "Type manuel" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_line_id +msgid "Manual Line" +msgstr "Écriture manuelle" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_model_id +msgid "Manual Model" +msgstr "Modèle manuel" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_move_id +msgid "Manual Move" +msgstr "Pièce manuelle" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_move_type +msgid "Manual Move Type" +msgstr "Type de pièce manuelle" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_name +msgid "Manual Name" +msgstr "Nom manuel" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_original_amount +msgid "Manual Original Amount" +msgstr "Montant original manuel" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_partner_id +msgid "Manual Partner" +msgstr "Partenaire manuel" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__manual_reference +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_reference +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__manual_reference +msgid "Manual Reference" +msgstr "Référence manuelle" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Manual operation" +msgstr "Opération manuelle" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Miscellaneous" +msgstr "Divers" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_aggregate__month +msgid "Month" +msgstr "Mois" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__name +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Name" +msgstr "Nom" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Narration" +msgstr "Commentaire" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_bank_statement_line.py:0 +#, python-format +msgid "No supense lines are allowed when reconciling" +msgstr "" +"Aucune ligne d'attente n'est autorisée lors de la réconciliation bancaire" + +#. module: account_reconcile_oca +#: model_terms:ir.actions.act_window,help:account_reconcile_oca.action_bank_statement_line_reconcile_to_check +msgid "Nothing to check" +msgstr "Rien à vérifier" + +#. module: account_reconcile_oca +#: model_terms:ir.actions.act_window,help:account_reconcile_oca.action_bank_statement_line_move_view_reconcile +#: model_terms:ir.actions.act_window,help:account_reconcile_oca.action_bank_statement_line_reconcile +#: model_terms:ir.actions.act_window,help:account_reconcile_oca.action_bank_statement_line_reconcile_all +msgid "Nothing to reconcile" +msgstr "Rien à réconcilier" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Open Balance" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__partner_id +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +#, python-format +msgid "Partner" +msgstr "Partenaire" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Payable" +msgstr "Compte fournisseur" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__previous_manual_amount_in_currency +msgid "Previous Manual Amount In Currency" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Purchases" +msgstr "Achats" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Receivable" +msgstr "Compte client" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.account_account_account_account_reconcile_act_window +#: model:ir.actions.act_window,name:account_reconcile_oca.account_account_reconcile_act_window +#: model:ir.actions.act_window,name:account_reconcile_oca.res_partner_account_account_reconcile_act_window +#: model:ir.actions.server,name:account_reconcile_oca.action_reconcile +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__reconcile_id +#: model:ir.ui.menu,name:account_reconcile_oca.account_account_reconcile_menu +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_account_reconcile_form_view +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_journal_dashboard_kanban_view +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.view_account_list +msgid "Reconcile" +msgstr "Réconcilier" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__reconcile_aggregate +#: model:ir.model.fields,field_description:account_reconcile_oca.field_res_company__reconcile_aggregate +#: model:ir.model.fields,field_description:account_reconcile_oca.field_res_config_settings__reconcile_aggregate +msgid "Reconcile Aggregate" +msgstr "Agrégat de réconciliation bancaire" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__reconcile_data +msgid "Reconcile Data" +msgstr "Données de réconciliation bancaire" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__reconcile_data_info +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__reconcile_data_info +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__reconcile_data_info +msgid "Reconcile Data Info" +msgstr "Informations sur les données de réconciliation bancaire" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__reconcile_mode +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_journal__reconcile_mode +msgid "Reconcile Mode" +msgstr "Mode de réconciliation bancaire" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_journal__reconcile_aggregate +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.res_config_settings_form_view +msgid "Reconcile aggregation" +msgstr "Agrégation de réconciliation bancaire" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_move_view_reconcile +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_reconcile_all +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_reconcile_to_check +msgid "Reconcile bank statement lines" +msgstr "Réconcilier les lignes des relevés bancaires" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_account_reconcile_data +msgid "Reconcile data model to store user info" +msgstr "" +"Modèle de données pour stocker les informations de réconciliation bancaire " +"des utilisateurs" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_reconcile_view +msgid "Reconciled" +msgstr "Réconcilié" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Reset reconciliation" +msgstr "Réinitialiser la réconciliation" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_bank_statement_line.py:0 +#, python-format +msgid "Reversal of: %s" +msgstr "Annulation de : %s" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Sales" +msgstr "Ventes" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_add_view +msgid "Save" +msgstr "Sauvegarder" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Search Journal Items" +msgstr "Rechercher des écritures comptables" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Set as Checked" +msgstr "Marquer comme vérifié" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.res_config_settings_form_view +msgid "Standard aggregation to use on bank reconciliation" +msgstr "Agrégation standard à utiliser pour la réconciliation bancaire" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_aggregate__statement +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_reconcile_view +msgid "Statement" +msgstr "Relevé" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__statement_name +msgid "Statement Name" +msgstr "Nom du relevé" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_reconcile +msgid "Statement lines" +msgstr "Lignes de relevé" + +#. module: account_reconcile_oca +#: model:ir.model.fields,help:account_reconcile_oca.field_account_bank_statement_line__foreign_currency_id +msgid "The optional other currency if it is a multi-currency entry." +msgstr "L'autre devise facultative s'il s'agit d'une entrée multidevise." + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "To Check" +msgstr "À vérifier" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_reconcile_view +msgid "To check" +msgstr "À vérifier" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_journal_dashboard_kanban_view +msgid "Transactions" +msgstr "Transactions" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_bank_statement_line.py:0 +#, python-format +msgid "Undefined" +msgstr "Non défini" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Unreconcile" +msgstr "Déconcilier" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__user_id +msgid "User" +msgstr "Utilisateur" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Validate" +msgstr "Valider" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_tree_reconcile_view +msgid "View" +msgstr "Voir" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "View move" +msgstr "Voir la pièce" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_aggregate__week +msgid "Week" +msgstr "Semaine" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_journal.py:0 +#, python-format +msgid "Well done! Everything has been reconciled" +msgstr "Bien joué ! Tout a été réconcilié" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_move_line.py:0 +#, python-format +msgid "You can only reconcile journal items belonging to the same account." +msgstr "" +"Vous pouvez uniquement lettrer les écritures comptables appartenant au même " +"compte." + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "fully paid" +msgstr "entièrement payé" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_journal_dashboard_kanban_view +msgid "to check" +msgstr "à vérifier" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "will be reduced by" +msgstr "sera réduite de" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "with an open amount" +msgstr "avec un montant ouvert" + +#, python-format +#~ msgid "Keep suspense move lines mode cannot be unreconciled" +#~ msgstr "" +#~ "Conserver les comptes d'attente sur les écritures qui ne peuvent être " +#~ "délettrées" + +#~ msgid "Reset" +#~ msgstr "Réinitialiser" diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/i18n/hr.po b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/i18n/hr.po new file mode 100644 index 0000000..273ef4f --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/i18n/hr.po @@ -0,0 +1,750 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_reconcile_oca +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-05-25 13:09+0000\n" +"Last-Translator: Bole \n" +"Language-Team: none\n" +"Language: hr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 4.17\n" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "" +".\n" +"
\n" +" You might want to set the invoice as" +msgstr "" +".\n" +"
\n" +" Možda želite postaviti račun kao" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__account_id +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +#, python-format +msgid "Account" +msgstr "Konto" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_account_reconcile +msgid "Account Account Reconcile" +msgstr "Zatvaranje konta" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_reconcile_abstract +msgid "Account Reconcile Abstract" +msgstr "Apstraktno zatvaranje konta" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__active +msgid "Active" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__add_account_move_line_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__add_account_move_line_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__add_account_move_line_id +msgid "Add Account Move Line" +msgstr "Dodaj stavku temeljnice" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_create +msgid "Add Bank Statement Line" +msgstr "Dodaj stavku izvoda" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Add all" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__aggregate_id +msgid "Aggregate" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__aggregate_name +msgid "Aggregate Name" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,help:account_reconcile_oca.field_account_journal__reconcile_aggregate +msgid "Aggregation to use on reconcile view" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Amount" +msgstr "Iznos" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Amount in Currency" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Amount in currency" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__analytic_distribution +msgid "Analytic Distribution" +msgstr "Analitička distribucija" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__analytic_precision +msgid "Analytic Precision" +msgstr "Preciznost analitike" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Are you sure that the move should be unreconciled?" +msgstr "Jeste li sigurni da temeljnica treba biti rastvorena?" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Bank" +msgstr "Banka" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_bank_statement +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_bank_statement_form_edit +msgid "Bank Statement" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_bank_statement_line +msgid "Bank Statement Line" +msgstr "Stavka izvoda banke" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_form_view +msgid "Bank reconcile" +msgstr "Zatvaranje banke" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__can_reconcile +msgid "Can Reconcile" +msgstr "Može zatvoriti" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_add_view +msgid "Cancel" +msgstr "Otkaži" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Cash" +msgstr "Gotovina" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Chatter" +msgstr "Razgovor" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_account_reconcile_form_view +msgid "Clean" +msgstr "Očisti" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_res_company +msgid "Companies" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__company_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__company_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__company_id +msgid "Company" +msgstr "Tvrtka" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__company_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__company_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_journal__company_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__company_currency_id +msgid "Company Currency" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,help:account_reconcile_oca.field_account_bank_statement_line__company_id +msgid "Company related to this journal" +msgstr "Tvrtka povezana sa ovim dnevnikom" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Create" +msgstr "Kreiraj" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__create_uid +msgid "Created by" +msgstr "Kreirao" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__create_date +msgid "Created on" +msgstr "Kreirano" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Credit" +msgstr "Potražuje" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__currency_id +msgid "Currency" +msgstr "Valuta" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__data +msgid "Data" +msgstr "Podaci" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Date" +msgstr "Datum" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_aggregate__day +msgid "Day" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Debit" +msgstr "Duguje" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__display_name +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__display_name +msgid "Display Name" +msgstr "Prikazani naziv" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.account_bank_statement_action_edit +msgid "Edit Bank Statement" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_mode__edit +msgid "Edit Move" +msgstr "Uredi temeljnicu" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__statement_balance_end_real +msgid "Ending Balance" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__foreign_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__foreign_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__foreign_currency_id +msgid "Foreign Currency" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "From Trade Payable accounts" +msgstr "Iz konta dugovanja" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "From Trade Receivable accounts" +msgstr "Iz konta potraživanja" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Global Balance" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__id +msgid "ID" +msgstr "ID" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Invoice" +msgstr "Račun" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__statement_complete +msgid "Is Complete" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_in_currency +msgid "Is Manual in Currency?" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__is_reconciled +msgid "Is Reconciled" +msgstr "Je zatvoren" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__statement_valid +msgid "Is Valid" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_journal_dashboard_kanban_view +msgid "Items" +msgstr "Stavke" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_journal +msgid "Journal" +msgstr "Dnevnik" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__currency_id +msgid "Journal Currency" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Journal Entry" +msgstr "Zapis dnevnika" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_move_line +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Journal Item" +msgstr "Stavka dnevnika" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_mode__keep +msgid "Keep Suspense Accounts" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Label" +msgstr "Natpis" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile____last_update +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data____last_update +msgid "Last Modified on" +msgstr "Zadnje modificirano" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__write_uid +msgid "Last Updated by" +msgstr "Zadnji ažurirao" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__write_date +msgid "Last Updated on" +msgstr "Zadnje ažuriranje" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_account_id +msgid "Manual Account" +msgstr "Ručni konto" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_amount +msgid "Manual Amount" +msgstr "Ručni iznos" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_amount_in_currency +msgid "Manual Amount In Currency" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_currency_id +msgid "Manual Currency" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__manual_delete +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_delete +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__manual_delete +msgid "Manual Delete" +msgstr "Ručno brisanje" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_exchange_counterpart +msgid "Manual Exchange Counterpart" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_in_currency_id +msgid "Manual In Currency" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_kind +msgid "Manual Kind" +msgstr "Vrsta ručne obrade" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_line_id +msgid "Manual Line" +msgstr "Stavka ručne obrade" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_model_id +msgid "Manual Model" +msgstr "Model ručne obrade" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_move_id +msgid "Manual Move" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_move_type +msgid "Manual Move Type" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_name +msgid "Manual Name" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_original_amount +msgid "Manual Original Amount" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_partner_id +msgid "Manual Partner" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__manual_reference +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_reference +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__manual_reference +msgid "Manual Reference" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Manual operation" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Miscellaneous" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_aggregate__month +msgid "Month" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__name +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Name" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Narration" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_bank_statement_line.py:0 +#, python-format +msgid "No supense lines are allowed when reconciling" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.actions.act_window,help:account_reconcile_oca.action_bank_statement_line_reconcile_to_check +msgid "Nothing to check" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.actions.act_window,help:account_reconcile_oca.action_bank_statement_line_move_view_reconcile +#: model_terms:ir.actions.act_window,help:account_reconcile_oca.action_bank_statement_line_reconcile +#: model_terms:ir.actions.act_window,help:account_reconcile_oca.action_bank_statement_line_reconcile_all +msgid "Nothing to reconcile" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Open Balance" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__partner_id +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +#, python-format +msgid "Partner" +msgstr "Partner" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Payable" +msgstr "Za plaćanje" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__previous_manual_amount_in_currency +msgid "Previous Manual Amount In Currency" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Purchases" +msgstr "Nabave" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Receivable" +msgstr "Za naplatu" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.account_account_account_account_reconcile_act_window +#: model:ir.actions.act_window,name:account_reconcile_oca.account_account_reconcile_act_window +#: model:ir.actions.act_window,name:account_reconcile_oca.res_partner_account_account_reconcile_act_window +#: model:ir.actions.server,name:account_reconcile_oca.action_reconcile +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__reconcile_id +#: model:ir.ui.menu,name:account_reconcile_oca.account_account_reconcile_menu +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_account_reconcile_form_view +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_journal_dashboard_kanban_view +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.view_account_list +msgid "Reconcile" +msgstr "Zatvori" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__reconcile_aggregate +#: model:ir.model.fields,field_description:account_reconcile_oca.field_res_company__reconcile_aggregate +#: model:ir.model.fields,field_description:account_reconcile_oca.field_res_config_settings__reconcile_aggregate +msgid "Reconcile Aggregate" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__reconcile_data +msgid "Reconcile Data" +msgstr "Podaci zatvaranja" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__reconcile_data_info +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__reconcile_data_info +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__reconcile_data_info +msgid "Reconcile Data Info" +msgstr "Info podataka o zatvaranju" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__reconcile_mode +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_journal__reconcile_mode +msgid "Reconcile Mode" +msgstr "Način zatvaranja" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_journal__reconcile_aggregate +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.res_config_settings_form_view +msgid "Reconcile aggregation" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_move_view_reconcile +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_reconcile_all +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_reconcile_to_check +msgid "Reconcile bank statement lines" +msgstr "Zatvori stavke izvoda" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_account_reconcile_data +msgid "Reconcile data model to store user info" +msgstr "Model podataka o zatvaranju za pohranu korisničkih informacija" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_reconcile_view +msgid "Reconciled" +msgstr "Zatvoreno" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Reset reconciliation" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_bank_statement_line.py:0 +#, python-format +msgid "Reversal of: %s" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Sales" +msgstr "Prodaje" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_add_view +msgid "Save" +msgstr "Spremi" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Search Journal Items" +msgstr "Pretraži stavke dnevnika" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Set as Checked" +msgstr "Postavi kao Provjereno" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.res_config_settings_form_view +msgid "Standard aggregation to use on bank reconciliation" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_aggregate__statement +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_reconcile_view +msgid "Statement" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__statement_name +msgid "Statement Name" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_reconcile +msgid "Statement lines" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,help:account_reconcile_oca.field_account_bank_statement_line__foreign_currency_id +msgid "The optional other currency if it is a multi-currency entry." +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "To Check" +msgstr "Za provjeru" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_reconcile_view +msgid "To check" +msgstr "Za provjeru" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_journal_dashboard_kanban_view +msgid "Transactions" +msgstr "Transakcije" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_bank_statement_line.py:0 +#, python-format +msgid "Undefined" +msgstr "Nedefinirano" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Unreconcile" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__user_id +msgid "User" +msgstr "Korisnik" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Validate" +msgstr "Potvrdi" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_tree_reconcile_view +msgid "View" +msgstr "Pogled" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "View move" +msgstr "Pregledaj temeljnicu" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_aggregate__week +msgid "Week" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_journal.py:0 +#, python-format +msgid "Well done! Everything has been reconciled" +msgstr "Odlično! Sve je pozatvarano" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_move_line.py:0 +#, python-format +msgid "You can only reconcile journal items belonging to the same account." +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "fully paid" +msgstr "potpuno plaćeno" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_journal_dashboard_kanban_view +msgid "to check" +msgstr "za provjeru" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "will be reduced by" +msgstr "će biti umanjeno za" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "with an open amount" +msgstr "pa početnim iznosom" diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/i18n/it.po b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/i18n/it.po new file mode 100644 index 0000000..42128b3 --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/i18n/it.po @@ -0,0 +1,760 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_reconcile_oca +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2025-10-02 22:42+0000\n" +"Last-Translator: mymage \n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.10.4\n" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "" +".\n" +"
\n" +" You might want to set the invoice as" +msgstr "" +".\n" +"
\n" +" Potrest voler impostare la fattura come" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__account_id +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +#, python-format +msgid "Account" +msgstr "Conto" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_account_reconcile +msgid "Account Account Reconcile" +msgstr "Conto riconciliazione contabile" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_reconcile_abstract +msgid "Account Reconcile Abstract" +msgstr "Sintesi riconciliazione contabile" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__active +msgid "Active" +msgstr "Attivo" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__add_account_move_line_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__add_account_move_line_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__add_account_move_line_id +msgid "Add Account Move Line" +msgstr "Aggiungi riga movimento contabile" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_create +msgid "Add Bank Statement Line" +msgstr "Aggiungi riga estratto conto" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Add all" +msgstr "Aggiungi tutto" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__aggregate_id +msgid "Aggregate" +msgstr "Aggrega" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__aggregate_name +msgid "Aggregate Name" +msgstr "Aggrega nome" + +#. module: account_reconcile_oca +#: model:ir.model.fields,help:account_reconcile_oca.field_account_journal__reconcile_aggregate +msgid "Aggregation to use on reconcile view" +msgstr "Aggregazione da utilizzare nella vista riconciliazione" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Amount" +msgstr "Importo" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Amount in Currency" +msgstr "Importo in valuta" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Amount in currency" +msgstr "Importo in valuta" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__analytic_distribution +msgid "Analytic Distribution" +msgstr "Distribuzione analitica" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__analytic_precision +msgid "Analytic Precision" +msgstr "Precisione analitica" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Are you sure that the move should be unreconciled?" +msgstr "Si è sicuri che la riconciliazione del movimento sia da annullare?" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Bank" +msgstr "Banca" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_bank_statement +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_bank_statement_form_edit +msgid "Bank Statement" +msgstr "Estratto conto bancario" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_bank_statement_line +msgid "Bank Statement Line" +msgstr "Riga estratto conto" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_form_view +msgid "Bank reconcile" +msgstr "Riconcilia banca" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__can_reconcile +msgid "Can Reconcile" +msgstr "Può rinconciliare" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_add_view +msgid "Cancel" +msgstr "Annulla" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Cash" +msgstr "Contanti" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Chatter" +msgstr "Elenco messaggi" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_account_reconcile_form_view +msgid "Clean" +msgstr "Pulisci" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_res_company +msgid "Companies" +msgstr "Aziende" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__company_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__company_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__company_id +msgid "Company" +msgstr "Azienda" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__company_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__company_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_journal__company_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__company_currency_id +msgid "Company Currency" +msgstr "Valuta aziendale" + +#. module: account_reconcile_oca +#: model:ir.model.fields,help:account_reconcile_oca.field_account_bank_statement_line__company_id +msgid "Company related to this journal" +msgstr "Azienda collegata a questo registro" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_res_config_settings +msgid "Config Settings" +msgstr "Impostazioni configurazione" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Create" +msgstr "Crea" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__create_uid +msgid "Created by" +msgstr "Creato da" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__create_date +msgid "Created on" +msgstr "Creato il" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Credit" +msgstr "Avere" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__currency_id +msgid "Currency" +msgstr "Valuta" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__data +msgid "Data" +msgstr "Dati" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Date" +msgstr "Data" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_aggregate__day +msgid "Day" +msgstr "Giorno" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Debit" +msgstr "Dare" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__display_name +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__display_name +msgid "Display Name" +msgstr "Nome visualizzato" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.account_bank_statement_action_edit +msgid "Edit Bank Statement" +msgstr "Modifica estratto conto" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_mode__edit +msgid "Edit Move" +msgstr "Modifica movimento" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__statement_balance_end_real +msgid "Ending Balance" +msgstr "Saldo finale" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__foreign_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__foreign_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__foreign_currency_id +msgid "Foreign Currency" +msgstr "Valuta estera" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "From Trade Payable accounts" +msgstr "Da conti debiti commerciali" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "From Trade Receivable accounts" +msgstr "Da conti crediti commerciali" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Global Balance" +msgstr "Saldo globale" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__id +msgid "ID" +msgstr "ID" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Invoice" +msgstr "Fattura" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__statement_complete +msgid "Is Complete" +msgstr "È completo" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_in_currency +msgid "Is Manual in Currency?" +msgstr "Il manuale è in valuta?" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__is_reconciled +msgid "Is Reconciled" +msgstr "È riconciliato" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__statement_valid +msgid "Is Valid" +msgstr "È valido" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_journal_dashboard_kanban_view +msgid "Items" +msgstr "Elementi" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_journal +msgid "Journal" +msgstr "Registro" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__currency_id +msgid "Journal Currency" +msgstr "Valuta registro" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Journal Entry" +msgstr "Registrazione contabile" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_move_line +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Journal Item" +msgstr "Movimento contabile" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_mode__keep +msgid "Keep Suspense Accounts" +msgstr "Mantiene conti sospesi" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Label" +msgstr "Etichetta" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile____last_update +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data____last_update +msgid "Last Modified on" +msgstr "Ultima modifica il" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__write_uid +msgid "Last Updated by" +msgstr "Ultimo aggiornamento di" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__write_date +msgid "Last Updated on" +msgstr "Ultimo aggiornamento il" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_account_id +msgid "Manual Account" +msgstr "Conto Manuale" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_amount +msgid "Manual Amount" +msgstr "Importo manuale" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_amount_in_currency +msgid "Manual Amount In Currency" +msgstr "Acconto manuale in valuta" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_currency_id +msgid "Manual Currency" +msgstr "Valuta manuale" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__manual_delete +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_delete +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__manual_delete +msgid "Manual Delete" +msgstr "Cancellazione manuale" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_exchange_counterpart +msgid "Manual Exchange Counterpart" +msgstr "Controparte scambio manuale" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_in_currency_id +msgid "Manual In Currency" +msgstr "Manuale in valuta" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_kind +msgid "Manual Kind" +msgstr "Tipologia manuale" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_line_id +msgid "Manual Line" +msgstr "Riga manuale" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_model_id +msgid "Manual Model" +msgstr "Modello manuale" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_move_id +msgid "Manual Move" +msgstr "Movimento manuale" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_move_type +msgid "Manual Move Type" +msgstr "Tipo movimento manuale" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_name +msgid "Manual Name" +msgstr "Nome manuale" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_original_amount +msgid "Manual Original Amount" +msgstr "Importo originale manuale" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_partner_id +msgid "Manual Partner" +msgstr "Partner manuale" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__manual_reference +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_reference +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__manual_reference +msgid "Manual Reference" +msgstr "Riferimento manuale" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Manual operation" +msgstr "Operazione manuale" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Miscellaneous" +msgstr "Varie" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_aggregate__month +msgid "Month" +msgstr "Mese" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__name +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Name" +msgstr "Nome" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Narration" +msgstr "Note" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_bank_statement_line.py:0 +#, python-format +msgid "No supense lines are allowed when reconciling" +msgstr "Non sono consentite righe sospese durante la riconciliazione" + +#. module: account_reconcile_oca +#: model_terms:ir.actions.act_window,help:account_reconcile_oca.action_bank_statement_line_reconcile_to_check +msgid "Nothing to check" +msgstr "Niente da controllare" + +#. module: account_reconcile_oca +#: model_terms:ir.actions.act_window,help:account_reconcile_oca.action_bank_statement_line_move_view_reconcile +#: model_terms:ir.actions.act_window,help:account_reconcile_oca.action_bank_statement_line_reconcile +#: model_terms:ir.actions.act_window,help:account_reconcile_oca.action_bank_statement_line_reconcile_all +msgid "Nothing to reconcile" +msgstr "Niente da riconciliare" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Open Balance" +msgstr "Apri saldo" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__partner_id +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +#, python-format +msgid "Partner" +msgstr "Partner" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Payable" +msgstr "Pagabile" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__previous_manual_amount_in_currency +msgid "Previous Manual Amount In Currency" +msgstr "Valore manuale precedente in valuta" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Purchases" +msgstr "Acquisti" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Receivable" +msgstr "Credito" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.account_account_account_account_reconcile_act_window +#: model:ir.actions.act_window,name:account_reconcile_oca.account_account_reconcile_act_window +#: model:ir.actions.act_window,name:account_reconcile_oca.res_partner_account_account_reconcile_act_window +#: model:ir.actions.server,name:account_reconcile_oca.action_reconcile +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__reconcile_id +#: model:ir.ui.menu,name:account_reconcile_oca.account_account_reconcile_menu +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_account_reconcile_form_view +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_journal_dashboard_kanban_view +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.view_account_list +msgid "Reconcile" +msgstr "Riconcilia" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__reconcile_aggregate +#: model:ir.model.fields,field_description:account_reconcile_oca.field_res_company__reconcile_aggregate +#: model:ir.model.fields,field_description:account_reconcile_oca.field_res_config_settings__reconcile_aggregate +msgid "Reconcile Aggregate" +msgstr "Aggregato riconciliazione" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__reconcile_data +msgid "Reconcile Data" +msgstr "Dati riconciliazione" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__reconcile_data_info +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__reconcile_data_info +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__reconcile_data_info +msgid "Reconcile Data Info" +msgstr "Info dati riconciliazione" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__reconcile_mode +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_journal__reconcile_mode +msgid "Reconcile Mode" +msgstr "Modalità riconciliazione" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_journal__reconcile_aggregate +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.res_config_settings_form_view +msgid "Reconcile aggregation" +msgstr "Aggregazione riconciliazione" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_move_view_reconcile +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_reconcile_all +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_reconcile_to_check +msgid "Reconcile bank statement lines" +msgstr "Riconcilia righe estratto conto" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_account_reconcile_data +msgid "Reconcile data model to store user info" +msgstr "Modello dati riconciliazione per registrare info utente" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_reconcile_view +msgid "Reconciled" +msgstr "Riconciliato" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Reset reconciliation" +msgstr "Annulla riconciliazione" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_bank_statement_line.py:0 +#, python-format +msgid "Reversal of: %s" +msgstr "Inverso di: %s" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Sales" +msgstr "Vendite" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_add_view +msgid "Save" +msgstr "Salva" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Search Journal Items" +msgstr "Ricerca movimenti contabili" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Set as Checked" +msgstr "Imposta come controllato" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.res_config_settings_form_view +msgid "Standard aggregation to use on bank reconciliation" +msgstr "Aggregazione standard da utilizzare nella riconciliazione bancaria" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_aggregate__statement +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_reconcile_view +msgid "Statement" +msgstr "Dichiarazione" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__statement_name +msgid "Statement Name" +msgstr "Nome dichiarazione" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_reconcile +msgid "Statement lines" +msgstr "Righe dichiarazione" + +#. module: account_reconcile_oca +#: model:ir.model.fields,help:account_reconcile_oca.field_account_bank_statement_line__foreign_currency_id +msgid "The optional other currency if it is a multi-currency entry." +msgstr "L'altra valuta opzionale se è un elemento multi-valuta." + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "To Check" +msgstr "Da controllare" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_reconcile_view +msgid "To check" +msgstr "Da controllare" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_journal_dashboard_kanban_view +msgid "Transactions" +msgstr "Transazioni" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_bank_statement_line.py:0 +#, python-format +msgid "Undefined" +msgstr "Non definito" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Unreconcile" +msgstr "Annulla riconciliazione" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__user_id +msgid "User" +msgstr "Utente" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Validate" +msgstr "Valida" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_tree_reconcile_view +msgid "View" +msgstr "Vista" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "View move" +msgstr "Vedi movimento" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_aggregate__week +msgid "Week" +msgstr "Settimana" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_journal.py:0 +#, python-format +msgid "Well done! Everything has been reconciled" +msgstr "Ben fatto! Tutto è stato riconciliato" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_move_line.py:0 +#, python-format +msgid "You can only reconcile journal items belonging to the same account." +msgstr "" +"Si possono riconciliare solo registrazioni contabili che appartengono allo " +"stesso conto." + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "fully paid" +msgstr "pagato interamente" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_journal_dashboard_kanban_view +msgid "to check" +msgstr "da controllare" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "will be reduced by" +msgstr "sarà ridotto di" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "with an open amount" +msgstr "con un importo aperto" + +#, python-format +#~ msgid "Keep suspense move lines mode cannot be unreconciled" +#~ msgstr "" +#~ "Con la modalità mantieni le righe sospese non si può annullare la " +#~ "riconciliazione" + +#~ msgid "Due Date" +#~ msgstr "Scadenza" diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/i18n/nl.po b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/i18n/nl.po new file mode 100644 index 0000000..042b569 --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/i18n/nl.po @@ -0,0 +1,755 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_reconcile_oca +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-11-28 17:34+0000\n" +"Last-Translator: Yung-Wa \n" +"Language-Team: none\n" +"Language: nl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "" +".\n" +"
\n" +" You might want to set the invoice as" +msgstr "" +".\n" +"
\n" +" Je kunt de factuur instellen als" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__account_id +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +#, python-format +msgid "Account" +msgstr "Rekening" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_account_reconcile +msgid "Account Account Reconcile" +msgstr "Boekhouding Rekening Aflettering" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_reconcile_abstract +msgid "Account Reconcile Abstract" +msgstr "Rekening Aflettering Samenvatting" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__active +msgid "Active" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__add_account_move_line_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__add_account_move_line_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__add_account_move_line_id +msgid "Add Account Move Line" +msgstr "Toevoegen Boekingsregel" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_create +msgid "Add Bank Statement Line" +msgstr "Toevoegen Bankafschriftregel" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Add all" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__aggregate_id +msgid "Aggregate" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__aggregate_name +msgid "Aggregate Name" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,help:account_reconcile_oca.field_account_journal__reconcile_aggregate +msgid "Aggregation to use on reconcile view" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Amount" +msgstr "Bedrag" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Amount in Currency" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Amount in currency" +msgstr "Valutabedrag" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__analytic_distribution +msgid "Analytic Distribution" +msgstr "Analytische Verdeling" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__analytic_precision +msgid "Analytic Precision" +msgstr "Analytische Precisie" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Are you sure that the move should be unreconciled?" +msgstr "Weet je zeker dat de boeking niet moet worden afgeletterd?" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Bank" +msgstr "Bank" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_bank_statement +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_bank_statement_form_edit +msgid "Bank Statement" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_bank_statement_line +msgid "Bank Statement Line" +msgstr "Bankafschriftregel" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_form_view +msgid "Bank reconcile" +msgstr "Bank aflettering" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__can_reconcile +msgid "Can Reconcile" +msgstr "Kan Afletteren" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_add_view +msgid "Cancel" +msgstr "Annuleer" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Cash" +msgstr "Contant" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Chatter" +msgstr "Logging" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_account_reconcile_form_view +msgid "Clean" +msgstr "Opschonen" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_res_company +msgid "Companies" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__company_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__company_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__company_id +msgid "Company" +msgstr "Bedrijf" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__company_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__company_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_journal__company_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__company_currency_id +msgid "Company Currency" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,help:account_reconcile_oca.field_account_bank_statement_line__company_id +msgid "Company related to this journal" +msgstr "Bedrijf gerelateerd aan dit dagboek" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Create" +msgstr "Aanmaken" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__create_uid +msgid "Created by" +msgstr "Aangemaakt door" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__create_date +msgid "Created on" +msgstr "Aangemaakt op" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Credit" +msgstr "Credit" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__currency_id +msgid "Currency" +msgstr "Valuta" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__data +msgid "Data" +msgstr "Data" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Date" +msgstr "Datum" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_aggregate__day +msgid "Day" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Debit" +msgstr "Debet" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__display_name +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__display_name +msgid "Display Name" +msgstr "Weergavenaam" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.account_bank_statement_action_edit +msgid "Edit Bank Statement" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_mode__edit +msgid "Edit Move" +msgstr "Bewerk Boeking" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__statement_balance_end_real +msgid "Ending Balance" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__foreign_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__foreign_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__foreign_currency_id +msgid "Foreign Currency" +msgstr "Vreemde valuta" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "From Trade Payable accounts" +msgstr "Van Crediteurenrekeningen" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "From Trade Receivable accounts" +msgstr "Van debiteurenrekeningen" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Global Balance" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__id +msgid "ID" +msgstr "ID" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Invoice" +msgstr "Factuur" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__statement_complete +msgid "Is Complete" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_in_currency +msgid "Is Manual in Currency?" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__is_reconciled +msgid "Is Reconciled" +msgstr "Is Afgeletterd" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__statement_valid +msgid "Is Valid" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_journal_dashboard_kanban_view +msgid "Items" +msgstr "Regels" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_journal +msgid "Journal" +msgstr "Dagboek" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__currency_id +msgid "Journal Currency" +msgstr "Dagboek Valuta" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Journal Entry" +msgstr "Boeking" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_move_line +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Journal Item" +msgstr "Boekingsregel" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_mode__keep +msgid "Keep Suspense Accounts" +msgstr "Tussenrekeningen aanhouden" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Label" +msgstr "Label" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile____last_update +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data____last_update +msgid "Last Modified on" +msgstr "Laatst gewijzigd op" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__write_uid +msgid "Last Updated by" +msgstr "Laatst gewijzigd door" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__write_date +msgid "Last Updated on" +msgstr "Laatst gewijzigd op" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_account_id +msgid "Manual Account" +msgstr "Handmatige Rekening" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_amount +msgid "Manual Amount" +msgstr "Handmatige Bedrag" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_amount_in_currency +msgid "Manual Amount In Currency" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_currency_id +msgid "Manual Currency" +msgstr "Handmatige Valuta" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__manual_delete +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_delete +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__manual_delete +msgid "Manual Delete" +msgstr "Handmatig Verwijderen" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_exchange_counterpart +msgid "Manual Exchange Counterpart" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_in_currency_id +msgid "Manual In Currency" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_kind +msgid "Manual Kind" +msgstr "Handmatige Soort" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_line_id +msgid "Manual Line" +msgstr "Handmatige Regel" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_model_id +msgid "Manual Model" +msgstr "Handmatige Model" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_move_id +msgid "Manual Move" +msgstr "Handmatige Boeking" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_move_type +msgid "Manual Move Type" +msgstr "Handmatige Boekingstype" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_name +msgid "Manual Name" +msgstr "Handmatige Naam" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_original_amount +msgid "Manual Original Amount" +msgstr "Handmatige Origineel Bedrag" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_partner_id +msgid "Manual Partner" +msgstr "Handmatige Partner" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__manual_reference +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_reference +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__manual_reference +msgid "Manual Reference" +msgstr "Handmatige Referentie" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Manual operation" +msgstr "Handmatige Verwerking" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Miscellaneous" +msgstr "Diverse" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_aggregate__month +msgid "Month" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__name +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Name" +msgstr "Naam" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Narration" +msgstr "Notitie" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_bank_statement_line.py:0 +#, python-format +msgid "No supense lines are allowed when reconciling" +msgstr "Bij aflettering zijn tussenrekening regels niet toegestaan" + +#. module: account_reconcile_oca +#: model_terms:ir.actions.act_window,help:account_reconcile_oca.action_bank_statement_line_reconcile_to_check +msgid "Nothing to check" +msgstr "Niets te controleren" + +#. module: account_reconcile_oca +#: model_terms:ir.actions.act_window,help:account_reconcile_oca.action_bank_statement_line_move_view_reconcile +#: model_terms:ir.actions.act_window,help:account_reconcile_oca.action_bank_statement_line_reconcile +#: model_terms:ir.actions.act_window,help:account_reconcile_oca.action_bank_statement_line_reconcile_all +msgid "Nothing to reconcile" +msgstr "Niet af te letteren" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Open Balance" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__partner_id +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +#, python-format +msgid "Partner" +msgstr "Partner" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Payable" +msgstr "Crediteuren" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__previous_manual_amount_in_currency +msgid "Previous Manual Amount In Currency" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Purchases" +msgstr "Inkopen" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Receivable" +msgstr "Debiteuren" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.account_account_account_account_reconcile_act_window +#: model:ir.actions.act_window,name:account_reconcile_oca.account_account_reconcile_act_window +#: model:ir.actions.act_window,name:account_reconcile_oca.res_partner_account_account_reconcile_act_window +#: model:ir.actions.server,name:account_reconcile_oca.action_reconcile +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__reconcile_id +#: model:ir.ui.menu,name:account_reconcile_oca.account_account_reconcile_menu +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_account_reconcile_form_view +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_journal_dashboard_kanban_view +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.view_account_list +msgid "Reconcile" +msgstr "Afletteren" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__reconcile_aggregate +#: model:ir.model.fields,field_description:account_reconcile_oca.field_res_company__reconcile_aggregate +#: model:ir.model.fields,field_description:account_reconcile_oca.field_res_config_settings__reconcile_aggregate +msgid "Reconcile Aggregate" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__reconcile_data +msgid "Reconcile Data" +msgstr "Afletteringsdata" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__reconcile_data_info +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__reconcile_data_info +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__reconcile_data_info +msgid "Reconcile Data Info" +msgstr "Afletteringsdata informatie" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__reconcile_mode +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_journal__reconcile_mode +msgid "Reconcile Mode" +msgstr "Afletteringsmodus" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_journal__reconcile_aggregate +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.res_config_settings_form_view +msgid "Reconcile aggregation" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_move_view_reconcile +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_reconcile_all +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_reconcile_to_check +msgid "Reconcile bank statement lines" +msgstr "Bankafschriftregels afletteren" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_account_reconcile_data +msgid "Reconcile data model to store user info" +msgstr "Afletteringsmodel aanpassen om gebruikersinfo op te slaan" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_reconcile_view +msgid "Reconciled" +msgstr "Afgeletterd" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Reset reconciliation" +msgstr "Herstel aflettering" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_bank_statement_line.py:0 +#, python-format +msgid "Reversal of: %s" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Sales" +msgstr "Verkoop" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_add_view +msgid "Save" +msgstr "Opslaan" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Search Journal Items" +msgstr "Zoek in boekingsregels" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Set as Checked" +msgstr "Stel in als Gecontroleerd" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.res_config_settings_form_view +msgid "Standard aggregation to use on bank reconciliation" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_aggregate__statement +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_reconcile_view +msgid "Statement" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__statement_name +msgid "Statement Name" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_reconcile +msgid "Statement lines" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,help:account_reconcile_oca.field_account_bank_statement_line__foreign_currency_id +msgid "The optional other currency if it is a multi-currency entry." +msgstr "De optionele andere valuta als het invoer in meerdere valuta is." + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "To Check" +msgstr "Te Controleren" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_reconcile_view +msgid "To check" +msgstr "Te controleren" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_journal_dashboard_kanban_view +msgid "Transactions" +msgstr "Transacties" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_bank_statement_line.py:0 +#, python-format +msgid "Undefined" +msgstr "Ongedefinieerd" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Unreconcile" +msgstr "Afletteren ongedaan maken" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__user_id +msgid "User" +msgstr "Gebruiker" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Validate" +msgstr "Bevestig" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_tree_reconcile_view +msgid "View" +msgstr "Weergave" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "View move" +msgstr "Boeking weergeven" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_aggregate__week +msgid "Week" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_journal.py:0 +#, python-format +msgid "Well done! Everything has been reconciled" +msgstr "Goed gedaan! Alles is afgeletterd" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_move_line.py:0 +#, python-format +msgid "You can only reconcile journal items belonging to the same account." +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "fully paid" +msgstr "volledig betaald" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_journal_dashboard_kanban_view +msgid "to check" +msgstr "Te controleren" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "will be reduced by" +msgstr "wordt verminderd met" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "with an open amount" +msgstr "met een open bedrag" + +#, python-format +#~ msgid "Keep suspense move lines mode cannot be unreconciled" +#~ msgstr "" +#~ "De modes, houd tussenrekening boekingsregels, kan niet ongedaan worden " +#~ "gemaakt" diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/i18n/pt.po b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/i18n/pt.po new file mode 100644 index 0000000..eaa4c17 --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/i18n/pt.po @@ -0,0 +1,749 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_reconcile_oca +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-08-27 19:40+0000\n" +"Last-Translator: Peter Romão \n" +"Language-Team: none\n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.6.2\n" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "" +".\n" +"
\n" +" You might want to set the invoice as" +msgstr "" +".\n" +"
\n" +" Poderá querer marcar a fatura como" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__account_id +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +#, python-format +msgid "Account" +msgstr "Conta" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_account_reconcile +msgid "Account Account Reconcile" +msgstr "Reconciliação de Contas" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_reconcile_abstract +msgid "Account Reconcile Abstract" +msgstr "Resumo de Reconciliação de Contas" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__active +msgid "Active" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__add_account_move_line_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__add_account_move_line_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__add_account_move_line_id +msgid "Add Account Move Line" +msgstr "Adicionar Linha de Movimento de Conta" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_create +msgid "Add Bank Statement Line" +msgstr "Adicionar Linha de Extrato Bancário" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Add all" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__aggregate_id +msgid "Aggregate" +msgstr "Agregado" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__aggregate_name +msgid "Aggregate Name" +msgstr "Nome Agregado" + +#. module: account_reconcile_oca +#: model:ir.model.fields,help:account_reconcile_oca.field_account_journal__reconcile_aggregate +msgid "Aggregation to use on reconcile view" +msgstr "Agregação a ser usada na vista de reconciliação" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Amount" +msgstr "Valor" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Amount in Currency" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Amount in currency" +msgstr "Valor na moeda" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__analytic_distribution +msgid "Analytic Distribution" +msgstr "Distribuição Analítica" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__analytic_precision +msgid "Analytic Precision" +msgstr "Precisão Analítica" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Are you sure that the move should be unreconciled?" +msgstr "Tem certeza de que o movimento não deve ficar reconciliado?" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Bank" +msgstr "Banco" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_bank_statement +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_bank_statement_form_edit +msgid "Bank Statement" +msgstr "Extrato Bancário" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_bank_statement_line +msgid "Bank Statement Line" +msgstr "Linha de Extrato Bancário" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_form_view +msgid "Bank reconcile" +msgstr "Reconciliação bancária" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__can_reconcile +msgid "Can Reconcile" +msgstr "Pode Reconciliar" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_add_view +msgid "Cancel" +msgstr "Cancelar" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Cash" +msgstr "Numerário" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Chatter" +msgstr "Discussões" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_account_reconcile_form_view +msgid "Clean" +msgstr "Limpar" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_res_company +msgid "Companies" +msgstr "Empresas" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__company_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__company_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__company_id +msgid "Company" +msgstr "Empresa" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__company_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__company_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_journal__company_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__company_currency_id +msgid "Company Currency" +msgstr "Moeda da Empresa" + +#. module: account_reconcile_oca +#: model:ir.model.fields,help:account_reconcile_oca.field_account_bank_statement_line__company_id +msgid "Company related to this journal" +msgstr "Empresa relacionada com este diário" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_res_config_settings +msgid "Config Settings" +msgstr "Configurações" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Create" +msgstr "Criar" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__create_uid +msgid "Created by" +msgstr "Criado por" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__create_date +msgid "Created on" +msgstr "Criado em" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Credit" +msgstr "Crédito" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__currency_id +msgid "Currency" +msgstr "Moeda" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__data +msgid "Data" +msgstr "Dados" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Date" +msgstr "Data" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_aggregate__day +msgid "Day" +msgstr "Dia" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Debit" +msgstr "Débito" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__display_name +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__display_name +msgid "Display Name" +msgstr "Nome Apresentado" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.account_bank_statement_action_edit +msgid "Edit Bank Statement" +msgstr "Editar Extrato Bancário" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_mode__edit +msgid "Edit Move" +msgstr "Editar Movimento" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__statement_balance_end_real +msgid "Ending Balance" +msgstr "Saldo Final" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__foreign_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__foreign_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__foreign_currency_id +msgid "Foreign Currency" +msgstr "Moeda Estrangeira" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "From Trade Payable accounts" +msgstr "Das contas A Pagar" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "From Trade Receivable accounts" +msgstr "Das contas A Receber" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Global Balance" +msgstr "Saldo Global" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__id +msgid "ID" +msgstr "ID" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Invoice" +msgstr "Fatura" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__statement_complete +msgid "Is Complete" +msgstr "Está Completo" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_in_currency +msgid "Is Manual in Currency?" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__is_reconciled +msgid "Is Reconciled" +msgstr "Está Reconciliado" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__statement_valid +msgid "Is Valid" +msgstr "É válido" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_journal_dashboard_kanban_view +msgid "Items" +msgstr "Itens" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_journal +msgid "Journal" +msgstr "Diário" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__currency_id +msgid "Journal Currency" +msgstr "Moeda do Diário" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Journal Entry" +msgstr "Lançamento no Diário" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_move_line +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Journal Item" +msgstr "Item do Diário" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_mode__keep +msgid "Keep Suspense Accounts" +msgstr "Manter Contas Transitórias" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Label" +msgstr "Descrição" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile____last_update +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data____last_update +msgid "Last Modified on" +msgstr "Última Modificação em" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__write_uid +msgid "Last Updated by" +msgstr "Última Atualização por" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__write_date +msgid "Last Updated on" +msgstr "Última Atualização em" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_account_id +msgid "Manual Account" +msgstr "Conta Manual" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_amount +msgid "Manual Amount" +msgstr "Valor Manual" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_amount_in_currency +msgid "Manual Amount In Currency" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_currency_id +msgid "Manual Currency" +msgstr "Moeda Manual" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__manual_delete +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_delete +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__manual_delete +msgid "Manual Delete" +msgstr "Eliminar Manualmente" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_exchange_counterpart +msgid "Manual Exchange Counterpart" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_in_currency_id +msgid "Manual In Currency" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_kind +msgid "Manual Kind" +msgstr "Tipo Manual" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_line_id +msgid "Manual Line" +msgstr "Linha Manual" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_model_id +msgid "Manual Model" +msgstr "Modelo Manual" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_move_id +msgid "Manual Move" +msgstr "Movimento Manual" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_move_type +msgid "Manual Move Type" +msgstr "Tipo de Movimento Manual" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_name +msgid "Manual Name" +msgstr "Nome Manual" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_original_amount +msgid "Manual Original Amount" +msgstr "VAlor Original Manual" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_partner_id +msgid "Manual Partner" +msgstr "Parceiro Manual" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__manual_reference +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_reference +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__manual_reference +msgid "Manual Reference" +msgstr "Referência Manual" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Manual operation" +msgstr "Operação Manual" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Miscellaneous" +msgstr "Diversos" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_aggregate__month +msgid "Month" +msgstr "Mês" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__name +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Name" +msgstr "Nome" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Narration" +msgstr "Notas" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_bank_statement_line.py:0 +#, python-format +msgid "No supense lines are allowed when reconciling" +msgstr "Nenhuma linha de transitória é permitida durante a reconciliação" + +#. module: account_reconcile_oca +#: model_terms:ir.actions.act_window,help:account_reconcile_oca.action_bank_statement_line_reconcile_to_check +msgid "Nothing to check" +msgstr "Nada para verificar" + +#. module: account_reconcile_oca +#: model_terms:ir.actions.act_window,help:account_reconcile_oca.action_bank_statement_line_move_view_reconcile +#: model_terms:ir.actions.act_window,help:account_reconcile_oca.action_bank_statement_line_reconcile +#: model_terms:ir.actions.act_window,help:account_reconcile_oca.action_bank_statement_line_reconcile_all +msgid "Nothing to reconcile" +msgstr "Nada para reconciliar" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Open Balance" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__partner_id +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +#, python-format +msgid "Partner" +msgstr "Parceiro" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Payable" +msgstr "A Pagar" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__previous_manual_amount_in_currency +msgid "Previous Manual Amount In Currency" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Purchases" +msgstr "Compras" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Receivable" +msgstr "A Receber" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.account_account_account_account_reconcile_act_window +#: model:ir.actions.act_window,name:account_reconcile_oca.account_account_reconcile_act_window +#: model:ir.actions.act_window,name:account_reconcile_oca.res_partner_account_account_reconcile_act_window +#: model:ir.actions.server,name:account_reconcile_oca.action_reconcile +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__reconcile_id +#: model:ir.ui.menu,name:account_reconcile_oca.account_account_reconcile_menu +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_account_reconcile_form_view +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_journal_dashboard_kanban_view +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.view_account_list +msgid "Reconcile" +msgstr "Reconciliar" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__reconcile_aggregate +#: model:ir.model.fields,field_description:account_reconcile_oca.field_res_company__reconcile_aggregate +#: model:ir.model.fields,field_description:account_reconcile_oca.field_res_config_settings__reconcile_aggregate +msgid "Reconcile Aggregate" +msgstr "Reconciliação Agregada" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__reconcile_data +msgid "Reconcile Data" +msgstr "Reconciliação de Dados" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__reconcile_data_info +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__reconcile_data_info +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__reconcile_data_info +msgid "Reconcile Data Info" +msgstr "Informação de Reconciliação de Dados" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__reconcile_mode +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_journal__reconcile_mode +msgid "Reconcile Mode" +msgstr "Modo de Reconciliação" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_journal__reconcile_aggregate +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.res_config_settings_form_view +msgid "Reconcile aggregation" +msgstr "Reconciliação de Agregação" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_move_view_reconcile +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_reconcile_all +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_reconcile_to_check +msgid "Reconcile bank statement lines" +msgstr "Reconciliar linhas do extrato bancário" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_account_reconcile_data +msgid "Reconcile data model to store user info" +msgstr "Reconciliar o modelo de dados para armazenar informações do utilizador" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_reconcile_view +msgid "Reconciled" +msgstr "Reconciliado" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Reset reconciliation" +msgstr "Reiniciar Reconciliação" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_bank_statement_line.py:0 +#, python-format +msgid "Reversal of: %s" +msgstr "Reversão de: %s" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Sales" +msgstr "Vendas" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_add_view +msgid "Save" +msgstr "Guardar" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Search Journal Items" +msgstr "Pesquisar Itens do Diário" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Set as Checked" +msgstr "Definir como Verificado" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.res_config_settings_form_view +msgid "Standard aggregation to use on bank reconciliation" +msgstr "Agregação padrão a utilizar na reconciliação bancária" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_aggregate__statement +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_reconcile_view +msgid "Statement" +msgstr "Extrato" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__statement_name +msgid "Statement Name" +msgstr "Nome do Extrato" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_reconcile +msgid "Statement lines" +msgstr "Linhas de Extrato" + +#. module: account_reconcile_oca +#: model:ir.model.fields,help:account_reconcile_oca.field_account_bank_statement_line__foreign_currency_id +msgid "The optional other currency if it is a multi-currency entry." +msgstr "A outra moeda opcional, se se tratar de um movimento multi-moeda." + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "To Check" +msgstr "Para Verificação" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_reconcile_view +msgid "To check" +msgstr "Para verificação" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_journal_dashboard_kanban_view +msgid "Transactions" +msgstr "Transações" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_bank_statement_line.py:0 +#, python-format +msgid "Undefined" +msgstr "Indefinido" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Unreconcile" +msgstr "Desconciliar" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__user_id +msgid "User" +msgstr "Utilizador" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Validate" +msgstr "Validar" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_tree_reconcile_view +msgid "View" +msgstr "Ver" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "View move" +msgstr "Ver movimento" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_aggregate__week +msgid "Week" +msgstr "Semana" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_journal.py:0 +#, python-format +msgid "Well done! Everything has been reconciled" +msgstr "Muito bem! Está tudo reconciliado" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_move_line.py:0 +#, python-format +msgid "You can only reconcile journal items belonging to the same account." +msgstr "Só pode reconciliar itens de diário pertencentes à mesma conta." + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "fully paid" +msgstr "totalmente pago" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_journal_dashboard_kanban_view +msgid "to check" +msgstr "por verificar" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "will be reduced by" +msgstr "será reduzido em" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "with an open amount" +msgstr "com um valor em aberto" diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/i18n/pt_BR.po b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/i18n/pt_BR.po new file mode 100644 index 0000000..70a3db4 --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/i18n/pt_BR.po @@ -0,0 +1,765 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_reconcile_oca +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-11-13 16:06+0000\n" +"Last-Translator: Rodrigo Sottomaior Macedo " +"\n" +"Language-Team: none\n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.6.2\n" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "" +".\n" +"
\n" +" You might want to set the invoice as" +msgstr "" +".\n" +"
\n" +" Voce pode querer definir a fatura como" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__account_id +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +#, python-format +msgid "Account" +msgstr "Conta" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_account_reconcile +msgid "Account Account Reconcile" +msgstr "Reconciliação de conta" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_reconcile_abstract +msgid "Account Reconcile Abstract" +msgstr "Resumo de reconciliação de conta" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__active +msgid "Active" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__add_account_move_line_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__add_account_move_line_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__add_account_move_line_id +msgid "Add Account Move Line" +msgstr "Add Linha de Movimentação da Conta" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_create +msgid "Add Bank Statement Line" +msgstr "Add Linha Extrato Bancário" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Add all" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__aggregate_id +msgid "Aggregate" +msgstr "Agregar" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__aggregate_name +msgid "Aggregate Name" +msgstr "Nome agregado" + +#. module: account_reconcile_oca +#: model:ir.model.fields,help:account_reconcile_oca.field_account_journal__reconcile_aggregate +msgid "Aggregation to use on reconcile view" +msgstr "Agregação a ser usada na visualização de reconciliação" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Amount" +msgstr "Valor" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Amount in Currency" +msgstr "Valor na Moeda" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Amount in currency" +msgstr "Valor na moeda" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__analytic_distribution +msgid "Analytic Distribution" +msgstr "Distribuição Analítica" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__analytic_precision +msgid "Analytic Precision" +msgstr "Precisão Analítica" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Are you sure that the move should be unreconciled?" +msgstr "Tem certeza de que a mudança deve ser irreconciliável?" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Bank" +msgstr "Banco" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_bank_statement +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_bank_statement_form_edit +msgid "Bank Statement" +msgstr "Extrato bancário" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_bank_statement_line +msgid "Bank Statement Line" +msgstr "Linha Extrato Banco" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_form_view +msgid "Bank reconcile" +msgstr "Reconciliar Banco" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__can_reconcile +msgid "Can Reconcile" +msgstr "Pode Reconciliar" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_add_view +msgid "Cancel" +msgstr "Cancelar" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Cash" +msgstr "Dinheiro" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Chatter" +msgstr "Conversa" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_account_reconcile_form_view +msgid "Clean" +msgstr "Limpar" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_res_company +msgid "Companies" +msgstr "Empresas" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__company_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__company_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__company_id +msgid "Company" +msgstr "Empresa" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__company_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__company_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_journal__company_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__company_currency_id +msgid "Company Currency" +msgstr "Moeda da empresa" + +#. module: account_reconcile_oca +#: model:ir.model.fields,help:account_reconcile_oca.field_account_bank_statement_line__company_id +msgid "Company related to this journal" +msgstr "Empresa relacionada a este diário" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_res_config_settings +msgid "Config Settings" +msgstr "Configuração" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Create" +msgstr "Criar" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__create_uid +msgid "Created by" +msgstr "Criado por" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__create_date +msgid "Created on" +msgstr "Criado em" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Credit" +msgstr "Crédito" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__currency_id +msgid "Currency" +msgstr "Moeda" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__data +msgid "Data" +msgstr "Dados" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Date" +msgstr "Data" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_aggregate__day +msgid "Day" +msgstr "Dia" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Debit" +msgstr "Débito" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__display_name +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__display_name +msgid "Display Name" +msgstr "Exibir Nome" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.account_bank_statement_action_edit +msgid "Edit Bank Statement" +msgstr "Editar extrato bancário" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_mode__edit +msgid "Edit Move" +msgstr "Editar Movimento" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__statement_balance_end_real +msgid "Ending Balance" +msgstr "Balanço final" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__foreign_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__foreign_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__foreign_currency_id +msgid "Foreign Currency" +msgstr "Moeda Estrangeira" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "From Trade Payable accounts" +msgstr "De contas a Pagar comerciais" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "From Trade Receivable accounts" +msgstr "De contas a Receber comerciais" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Global Balance" +msgstr "Saldo Global" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__id +msgid "ID" +msgstr "ID" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Invoice" +msgstr "Fatura" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__statement_complete +msgid "Is Complete" +msgstr "Está completo" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_in_currency +msgid "Is Manual in Currency?" +msgstr "O Manual está em circulação?" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__is_reconciled +msgid "Is Reconciled" +msgstr "Reconciliado" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__statement_valid +msgid "Is Valid" +msgstr "É válido" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_journal_dashboard_kanban_view +msgid "Items" +msgstr "Itens" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_journal +msgid "Journal" +msgstr "Diário" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__currency_id +msgid "Journal Currency" +msgstr "Moeda Diário" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Journal Entry" +msgstr "Entrada Diário" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_move_line +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Journal Item" +msgstr "Item Diário" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_mode__keep +msgid "Keep Suspense Accounts" +msgstr "Manter contas suspensas" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Label" +msgstr "Rótulo" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile____last_update +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data____last_update +msgid "Last Modified on" +msgstr "Última modificação em" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__write_uid +msgid "Last Updated by" +msgstr "Última atualização por" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__write_date +msgid "Last Updated on" +msgstr "Última atualização em" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_account_id +msgid "Manual Account" +msgstr "Conta Manual" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_amount +msgid "Manual Amount" +msgstr "Valor Manual" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_amount_in_currency +msgid "Manual Amount In Currency" +msgstr "Valor manual em moeda" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_currency_id +msgid "Manual Currency" +msgstr "Moeda Manual" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__manual_delete +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_delete +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__manual_delete +msgid "Manual Delete" +msgstr "Exclusão Manual" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_exchange_counterpart +msgid "Manual Exchange Counterpart" +msgstr "Troca manual de contraparte" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_in_currency_id +msgid "Manual In Currency" +msgstr "Manual em moeda" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_kind +msgid "Manual Kind" +msgstr "Tipo Manual" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_line_id +msgid "Manual Line" +msgstr "Linha Manual" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_model_id +msgid "Manual Model" +msgstr "Modelo Manual" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_move_id +msgid "Manual Move" +msgstr "Movimento Manual" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_move_type +msgid "Manual Move Type" +msgstr "Tipo Movimento Manual" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_name +msgid "Manual Name" +msgstr "Nome Manual" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_original_amount +msgid "Manual Original Amount" +msgstr "Valor Original Manual" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_partner_id +msgid "Manual Partner" +msgstr "Parceiro Manual" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__manual_reference +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_reference +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__manual_reference +msgid "Manual Reference" +msgstr "Referencia Manual" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Manual operation" +msgstr "Operação Manual" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Miscellaneous" +msgstr "Outros" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_aggregate__month +msgid "Month" +msgstr "Mês" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__name +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Name" +msgstr "Nome" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Narration" +msgstr "Narração" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_bank_statement_line.py:0 +#, python-format +msgid "No supense lines are allowed when reconciling" +msgstr "Nenhuma linha supensa é permitida ao reconciliar" + +#. module: account_reconcile_oca +#: model_terms:ir.actions.act_window,help:account_reconcile_oca.action_bank_statement_line_reconcile_to_check +msgid "Nothing to check" +msgstr "Nada para verificar" + +#. module: account_reconcile_oca +#: model_terms:ir.actions.act_window,help:account_reconcile_oca.action_bank_statement_line_move_view_reconcile +#: model_terms:ir.actions.act_window,help:account_reconcile_oca.action_bank_statement_line_reconcile +#: model_terms:ir.actions.act_window,help:account_reconcile_oca.action_bank_statement_line_reconcile_all +msgid "Nothing to reconcile" +msgstr "Nada para Reconciliar" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Open Balance" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__partner_id +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +#, python-format +msgid "Partner" +msgstr "Parceiro" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Payable" +msgstr "Pagavel" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__previous_manual_amount_in_currency +msgid "Previous Manual Amount In Currency" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Purchases" +msgstr "Compras" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Receivable" +msgstr "Recebíveis" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.account_account_account_account_reconcile_act_window +#: model:ir.actions.act_window,name:account_reconcile_oca.account_account_reconcile_act_window +#: model:ir.actions.act_window,name:account_reconcile_oca.res_partner_account_account_reconcile_act_window +#: model:ir.actions.server,name:account_reconcile_oca.action_reconcile +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__reconcile_id +#: model:ir.ui.menu,name:account_reconcile_oca.account_account_reconcile_menu +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_account_reconcile_form_view +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_journal_dashboard_kanban_view +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.view_account_list +msgid "Reconcile" +msgstr "Reconciliar" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__reconcile_aggregate +#: model:ir.model.fields,field_description:account_reconcile_oca.field_res_company__reconcile_aggregate +#: model:ir.model.fields,field_description:account_reconcile_oca.field_res_config_settings__reconcile_aggregate +msgid "Reconcile Aggregate" +msgstr "Reconciliar Agregado" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__reconcile_data +msgid "Reconcile Data" +msgstr "Reconciliar dados" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__reconcile_data_info +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__reconcile_data_info +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__reconcile_data_info +msgid "Reconcile Data Info" +msgstr "Reconciliar Informações dos Dados" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__reconcile_mode +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_journal__reconcile_mode +msgid "Reconcile Mode" +msgstr "Modo de reconciliação" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_journal__reconcile_aggregate +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.res_config_settings_form_view +msgid "Reconcile aggregation" +msgstr "Reconciliar agregação" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_move_view_reconcile +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_reconcile_all +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_reconcile_to_check +msgid "Reconcile bank statement lines" +msgstr "Reconciliar linhas de extrato bancário" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_account_reconcile_data +msgid "Reconcile data model to store user info" +msgstr "Reconciliar modelo de dados para armazenar informações do usuário" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_reconcile_view +msgid "Reconciled" +msgstr "Reconciliado" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Reset reconciliation" +msgstr "Redefinir Reconciliação" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_bank_statement_line.py:0 +#, python-format +msgid "Reversal of: %s" +msgstr "Reversão de: %s" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Sales" +msgstr "Vendas" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_add_view +msgid "Save" +msgstr "Salvar" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Search Journal Items" +msgstr "Procurar Itens do Diário" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Set as Checked" +msgstr "Def. como Verificado" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.res_config_settings_form_view +msgid "Standard aggregation to use on bank reconciliation" +msgstr "Agregação padrão para usar na reconciliação bancária" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_aggregate__statement +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_reconcile_view +msgid "Statement" +msgstr "Declaração" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__statement_name +msgid "Statement Name" +msgstr "Nome da declaração" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_reconcile +msgid "Statement lines" +msgstr "Linhas de declaração" + +#. module: account_reconcile_oca +#: model:ir.model.fields,help:account_reconcile_oca.field_account_bank_statement_line__foreign_currency_id +msgid "The optional other currency if it is a multi-currency entry." +msgstr "A outra moeda opcional se for uma entrada em várias moedas." + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "To Check" +msgstr "Para Verificar" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_reconcile_view +msgid "To check" +msgstr "Para Verificar" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_journal_dashboard_kanban_view +msgid "Transactions" +msgstr "Transações" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_bank_statement_line.py:0 +#, python-format +msgid "Undefined" +msgstr "Indefinido" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Unreconcile" +msgstr "Desconciliar" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__user_id +msgid "User" +msgstr "Usuário" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Validate" +msgstr "Validar" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_tree_reconcile_view +msgid "View" +msgstr "Ver" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "View move" +msgstr "Ver movimento" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_aggregate__week +msgid "Week" +msgstr "Semana" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_journal.py:0 +#, python-format +msgid "Well done! Everything has been reconciled" +msgstr "Bom trabalho! Tudo foi reconciliado" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_move_line.py:0 +#, python-format +msgid "You can only reconcile journal items belonging to the same account." +msgstr "Você só pode reconciliar itens de diário pertencentes à mesma conta." + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "fully paid" +msgstr "totalmente pago" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_journal_dashboard_kanban_view +msgid "to check" +msgstr "para verificar" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "will be reduced by" +msgstr "será reduzido em" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "with an open amount" +msgstr "com um valor em aberto" + +#, python-format +#~ msgid "Keep suspense move lines mode cannot be unreconciled" +#~ msgstr "" +#~ "O modo Manter suspenso linhas de movimento não pode ser irreconciliado" + +#~ msgid "Due Date" +#~ msgstr "Data de vencimento" + +#, python-format +#~ msgid "You must reconcile information on the same partner" +#~ msgstr "Você deve reconciliar informações sobre o mesmo parceiro" + +#~ msgid "Reset" +#~ msgstr "Reiniciar" diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/i18n/sv.po b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/i18n/sv.po new file mode 100644 index 0000000..3316f3b --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/i18n/sv.po @@ -0,0 +1,757 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_reconcile_oca +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-06-18 17:35+0000\n" +"Last-Translator: jakobkrabbe \n" +"Language-Team: none\n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "" +".\n" +"
\n" +" You might want to set the invoice as" +msgstr "" +".\n" +"
\n" +" Du kanske vill ställa in fakturan som" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__account_id +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +#, python-format +msgid "Account" +msgstr "Konto" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_account_reconcile +msgid "Account Account Reconcile" +msgstr "Kontoavstämning" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_reconcile_abstract +msgid "Account Reconcile Abstract" +msgstr "Sammanfattning av kontoavstämning" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__active +msgid "Active" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__add_account_move_line_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__add_account_move_line_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__add_account_move_line_id +msgid "Add Account Move Line" +msgstr "Lägg till transaktion" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_create +msgid "Add Bank Statement Line" +msgstr "Lägg till kontoutdragsrad" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Add all" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__aggregate_id +msgid "Aggregate" +msgstr "Sammanslagna" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__aggregate_name +msgid "Aggregate Name" +msgstr "Aggregatets namn" + +#. module: account_reconcile_oca +#: model:ir.model.fields,help:account_reconcile_oca.field_account_journal__reconcile_aggregate +msgid "Aggregation to use on reconcile view" +msgstr "Aggregering som ska användas i avstämningsvyn" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Amount" +msgstr "Belopp" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Amount in Currency" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Amount in currency" +msgstr "Belopp i valuta" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__analytic_distribution +msgid "Analytic Distribution" +msgstr "Objektfördelning" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__analytic_precision +msgid "Analytic Precision" +msgstr "Objektkontoprecision" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Are you sure that the move should be unreconciled?" +msgstr "Är du säker på att verifikatet ska vara oavstämnt?" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Bank" +msgstr "Bank" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_bank_statement +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_bank_statement_form_edit +msgid "Bank Statement" +msgstr "Kontoutdrag från bank" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_bank_statement_line +msgid "Bank Statement Line" +msgstr "Bankkontoutdragsrad" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_form_view +msgid "Bank reconcile" +msgstr "Bankavstämning" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__can_reconcile +msgid "Can Reconcile" +msgstr "Kan avstämmas" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_add_view +msgid "Cancel" +msgstr "Avbryt" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Cash" +msgstr "Kontant" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Chatter" +msgstr "Logg" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_account_reconcile_form_view +msgid "Clean" +msgstr "Rensa" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_res_company +msgid "Companies" +msgstr "Företag" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__company_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__company_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__company_id +msgid "Company" +msgstr "Bolag" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__company_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__company_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_journal__company_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__company_currency_id +msgid "Company Currency" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,help:account_reconcile_oca.field_account_bank_statement_line__company_id +msgid "Company related to this journal" +msgstr "Bolag relaterad till denna journalen" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_res_config_settings +msgid "Config Settings" +msgstr "Konfigureringsinställningar" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Create" +msgstr "Skapa" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__create_uid +msgid "Created by" +msgstr "Skapad av" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__create_date +msgid "Created on" +msgstr "Skapad den" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Credit" +msgstr "Kreditera" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__currency_id +msgid "Currency" +msgstr "Valuta" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__data +msgid "Data" +msgstr "Data" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Date" +msgstr "Datum" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_aggregate__day +msgid "Day" +msgstr "Dag" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Debit" +msgstr "Debitera" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__display_name +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__display_name +msgid "Display Name" +msgstr "Visningsnamn" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.account_bank_statement_action_edit +msgid "Edit Bank Statement" +msgstr "Redigera kontoutdrag" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_mode__edit +msgid "Edit Move" +msgstr "Redigera verifikat" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__statement_balance_end_real +msgid "Ending Balance" +msgstr "Utgående balans" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__foreign_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__foreign_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__foreign_currency_id +msgid "Foreign Currency" +msgstr "Utländsk valuta" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "From Trade Payable accounts" +msgstr "Från leverantörsskulder" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "From Trade Receivable accounts" +msgstr "Från kundfordringar" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Global Balance" +msgstr "Global balans" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__id +msgid "ID" +msgstr "ID" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Invoice" +msgstr "Faktura" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__statement_complete +msgid "Is Complete" +msgstr "Är komplett" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_in_currency +msgid "Is Manual in Currency?" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__is_reconciled +msgid "Is Reconciled" +msgstr "Är försonad" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__statement_valid +msgid "Is Valid" +msgstr "Är giltig" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_journal_dashboard_kanban_view +msgid "Items" +msgstr "Transaktioner" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_journal +#, fuzzy +msgid "Journal" +msgstr "Journal" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__currency_id +msgid "Journal Currency" +msgstr "Journalvaluta" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Journal Entry" +msgstr "Verifikat" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_move_line +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Journal Item" +msgstr "Transaktioner" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_mode__keep +msgid "Keep Suspense Accounts" +msgstr "Behåll observationskonto" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Label" +msgstr "Etikett" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile____last_update +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data____last_update +msgid "Last Modified on" +msgstr "Senast ändrad den" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__write_uid +msgid "Last Updated by" +msgstr "Senast uppdaterad den" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__write_date +msgid "Last Updated on" +msgstr "Senast uppdaterad på" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_account_id +msgid "Manual Account" +msgstr "Manuellt konto" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_amount +msgid "Manual Amount" +msgstr "Manuellt belopp" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_amount_in_currency +msgid "Manual Amount In Currency" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_currency_id +msgid "Manual Currency" +msgstr "Manuell valuta" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__manual_delete +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_delete +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__manual_delete +msgid "Manual Delete" +msgstr "Manuell radering" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_exchange_counterpart +msgid "Manual Exchange Counterpart" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_in_currency_id +msgid "Manual In Currency" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_kind +msgid "Manual Kind" +msgstr "Manuell typ" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_line_id +msgid "Manual Line" +msgstr "Manuell rad" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_model_id +msgid "Manual Model" +msgstr "Manuell modell" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_move_id +msgid "Manual Move" +msgstr "Manuellt verifikat" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_move_type +msgid "Manual Move Type" +msgstr "Manuell verifikattyp" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_name +msgid "Manual Name" +msgstr "Manuellt namn" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_original_amount +msgid "Manual Original Amount" +msgstr "Manuell ursprunglig summa" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_partner_id +msgid "Manual Partner" +msgstr "Manuell kontakt" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__manual_reference +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_reference +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__manual_reference +msgid "Manual Reference" +msgstr "Manuell referens" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Manual operation" +msgstr "Manuell operation" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Miscellaneous" +msgstr "Diverse" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_aggregate__month +msgid "Month" +msgstr "Månad" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__name +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Name" +msgstr "Namn" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Narration" +msgstr "Beskrivning" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_bank_statement_line.py:0 +#, python-format +msgid "No supense lines are allowed when reconciling" +msgstr "Inga observationsrader är tillåtna vid avstämning" + +#. module: account_reconcile_oca +#: model_terms:ir.actions.act_window,help:account_reconcile_oca.action_bank_statement_line_reconcile_to_check +msgid "Nothing to check" +msgstr "Inget att kontrollera" + +#. module: account_reconcile_oca +#: model_terms:ir.actions.act_window,help:account_reconcile_oca.action_bank_statement_line_move_view_reconcile +#: model_terms:ir.actions.act_window,help:account_reconcile_oca.action_bank_statement_line_reconcile +#: model_terms:ir.actions.act_window,help:account_reconcile_oca.action_bank_statement_line_reconcile_all +msgid "Nothing to reconcile" +msgstr "Inget att stämma av" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Open Balance" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__partner_id +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +#, python-format +msgid "Partner" +msgstr "Kontakt" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Payable" +msgstr "Betalbar" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__previous_manual_amount_in_currency +msgid "Previous Manual Amount In Currency" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Purchases" +msgstr "Inköp" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Receivable" +msgstr "Kundfordringar" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.account_account_account_account_reconcile_act_window +#: model:ir.actions.act_window,name:account_reconcile_oca.account_account_reconcile_act_window +#: model:ir.actions.act_window,name:account_reconcile_oca.res_partner_account_account_reconcile_act_window +#: model:ir.actions.server,name:account_reconcile_oca.action_reconcile +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__reconcile_id +#: model:ir.ui.menu,name:account_reconcile_oca.account_account_reconcile_menu +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_account_reconcile_form_view +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_journal_dashboard_kanban_view +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.view_account_list +msgid "Reconcile" +msgstr "Stämma av" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__reconcile_aggregate +#: model:ir.model.fields,field_description:account_reconcile_oca.field_res_company__reconcile_aggregate +#: model:ir.model.fields,field_description:account_reconcile_oca.field_res_config_settings__reconcile_aggregate +msgid "Reconcile Aggregate" +msgstr "Avstämning Aggregat" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__reconcile_data +msgid "Reconcile Data" +msgstr "Avstämning av data" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__reconcile_data_info +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__reconcile_data_info +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__reconcile_data_info +msgid "Reconcile Data Info" +msgstr "Avstämma datainfo" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__reconcile_mode +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_journal__reconcile_mode +msgid "Reconcile Mode" +msgstr "Avstämningsläge" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_journal__reconcile_aggregate +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.res_config_settings_form_view +msgid "Reconcile aggregation" +msgstr "Avstämning av aggregering" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_move_view_reconcile +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_reconcile_all +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_reconcile_to_check +msgid "Reconcile bank statement lines" +msgstr "Stämma av kontoutdragsrader" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_account_reconcile_data +msgid "Reconcile data model to store user info" +msgstr "Datamodell för att lagra avstämd användarinformation" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_reconcile_view +msgid "Reconciled" +msgstr "Avstämnd" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Reset reconciliation" +msgstr "Återställ avstämning" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_bank_statement_line.py:0 +#, python-format +msgid "Reversal of: %s" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Sales" +msgstr "Försäljning" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_add_view +msgid "Save" +msgstr "Spara" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Search Journal Items" +msgstr "Sök transaktion" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Set as Checked" +msgstr "Ställ in som markerad" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.res_config_settings_form_view +msgid "Standard aggregation to use on bank reconciliation" +msgstr "Standardaggregat att använda vid bankavstämning" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_aggregate__statement +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_reconcile_view +msgid "Statement" +msgstr "Uttalande" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__statement_name +msgid "Statement Name" +msgstr "Utlåtande Namn" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_reconcile +msgid "Statement lines" +msgstr "Utlåtande linjer" + +#. module: account_reconcile_oca +#: model:ir.model.fields,help:account_reconcile_oca.field_account_bank_statement_line__foreign_currency_id +msgid "The optional other currency if it is a multi-currency entry." +msgstr "Den valfria andra valutan om det är en post i flera valutor." + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "To Check" +msgstr "Att kontrollera" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_reconcile_view +msgid "To check" +msgstr "Att kontrollera" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_journal_dashboard_kanban_view +msgid "Transactions" +msgstr "Transaktioner" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_bank_statement_line.py:0 +#, python-format +msgid "Undefined" +msgstr "Odefinierad" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Unreconcile" +msgstr "Oavstämnd" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__user_id +msgid "User" +msgstr "Användare" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Validate" +msgstr "Bekräfta" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_tree_reconcile_view +msgid "View" +msgstr "Vy" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "View move" +msgstr "Visa verifikat" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_aggregate__week +msgid "Week" +msgstr "Veckan" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_journal.py:0 +#, python-format +msgid "Well done! Everything has been reconciled" +msgstr "Bra gjort! Allt har blivit avstämmt" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_move_line.py:0 +#, python-format +msgid "You can only reconcile journal items belonging to the same account." +msgstr "Du kan bara stämma av transaktioner som hör till samma konto." + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "fully paid" +msgstr "fullt betald" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_journal_dashboard_kanban_view +msgid "to check" +msgstr "att kontrollera" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "will be reduced by" +msgstr "kommer att reduceras med" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "with an open amount" +msgstr "med ett valfritt belopp" + +#, python-format +#~ msgid "Keep suspense move lines mode cannot be unreconciled" +#~ msgstr "Behåll observationstransaktioner, läge kan inte vara oavstämd" + +#~ msgid "Due Date" +#~ msgstr "Förfallodatum" diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/i18n/tr.po b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/i18n/tr.po new file mode 100644 index 0000000..6d46b6a --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/i18n/tr.po @@ -0,0 +1,760 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_reconcile_oca +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2025-01-30 08:06+0000\n" +"Last-Translator: Ahmet Yiğit Budak \n" +"Language-Team: none\n" +"Language: tr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.6.2\n" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "" +".\n" +"
\n" +" You might want to set the invoice as" +msgstr "" +".\n" +"
\n" +" Faturayı şu şekilde ayarlamak " +"isteyebilirsiniz" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__account_id +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +#, python-format +msgid "Account" +msgstr "Hesap" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_account_reconcile +msgid "Account Account Reconcile" +msgstr "Hesap Hesap Mutabakatı" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_reconcile_abstract +msgid "Account Reconcile Abstract" +msgstr "Hesap Mutabakat Özeti" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__active +msgid "Active" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__add_account_move_line_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__add_account_move_line_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__add_account_move_line_id +msgid "Add Account Move Line" +msgstr "Yeni Yevmiye Kalemi Ekle" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_create +msgid "Add Bank Statement Line" +msgstr "Hesap Ekstresi Satırları Ekle" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Add all" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__aggregate_id +#, fuzzy +msgid "Aggregate" +msgstr "Derle" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__aggregate_name +msgid "Aggregate Name" +msgstr "Toplu Ad" + +#. module: account_reconcile_oca +#: model:ir.model.fields,help:account_reconcile_oca.field_account_journal__reconcile_aggregate +msgid "Aggregation to use on reconcile view" +msgstr "Uzlaştırma görünümünde kullanılacak toplama yöntemi" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Amount" +msgstr "Tutar" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Amount in Currency" +msgstr "Para Birimi Tutarı" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Amount in currency" +msgstr "Para birimi tutarı" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__analytic_distribution +msgid "Analytic Distribution" +msgstr "Analitik Dağıtım" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__analytic_precision +msgid "Analytic Precision" +msgstr "Analitik Hassasiyet" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Are you sure that the move should be unreconciled?" +msgstr "Hareketin uzlaşmasız olması gerektiğinden emin misiniz?" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Bank" +msgstr "Banka" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_bank_statement +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_bank_statement_form_edit +msgid "Bank Statement" +msgstr "Banka Ektresi" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_bank_statement_line +msgid "Bank Statement Line" +msgstr "Banka Ekstre Satırı" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_form_view +msgid "Bank reconcile" +msgstr "Banka Uzlaştırma" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__can_reconcile +msgid "Can Reconcile" +msgstr "Uzlaşabilir" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_add_view +msgid "Cancel" +msgstr "İptal" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Cash" +msgstr "Nakit" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Chatter" +msgstr "Mesajlaşma" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_account_reconcile_form_view +msgid "Clean" +msgstr "Temizle" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_res_company +msgid "Companies" +msgstr "Şirketler" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__company_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__company_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__company_id +msgid "Company" +msgstr "Firma" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__company_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__company_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_journal__company_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__company_currency_id +msgid "Company Currency" +msgstr "Şirket Para Birimi" + +#. module: account_reconcile_oca +#: model:ir.model.fields,help:account_reconcile_oca.field_account_bank_statement_line__company_id +msgid "Company related to this journal" +msgstr "Yevmiyenin ait olduğu şirket" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_res_config_settings +msgid "Config Settings" +msgstr "Yapılandırma Ayarları" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Create" +msgstr "Oluştur" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__create_uid +msgid "Created by" +msgstr "Oluşturan" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__create_date +msgid "Created on" +msgstr "Oluşturuldu" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Credit" +msgstr "Alacak" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__currency_id +msgid "Currency" +msgstr "Para Birimi" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__data +msgid "Data" +msgstr "Veri" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Date" +msgstr "Tarih" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_aggregate__day +msgid "Day" +msgstr "Gün" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Debit" +msgstr "Borç" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__display_name +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__display_name +msgid "Display Name" +msgstr "Görünüm Adı" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.account_bank_statement_action_edit +msgid "Edit Bank Statement" +msgstr "Banka Ektresi Düzenleme" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_mode__edit +msgid "Edit Move" +msgstr "Hareketi Düzenle" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__statement_balance_end_real +msgid "Ending Balance" +msgstr "Kapanış Bakiyesi" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__foreign_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__foreign_currency_id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__foreign_currency_id +msgid "Foreign Currency" +msgstr "Yabancı Para Birimi" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "From Trade Payable accounts" +msgstr "Ticari Borç hesaplarından" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "From Trade Receivable accounts" +msgstr "Ticari Alacak hesaplarından" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Global Balance" +msgstr "Genel Bakiye" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__id +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__id +msgid "ID" +msgstr "ID" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Invoice" +msgstr "Fatura" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__statement_complete +msgid "Is Complete" +msgstr "Tamamlandı" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_in_currency +msgid "Is Manual in Currency?" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__is_reconciled +msgid "Is Reconciled" +msgstr "Uzlaştırıldı mı" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__statement_valid +msgid "Is Valid" +msgstr "Onaylandı" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_journal_dashboard_kanban_view +msgid "Items" +msgstr "Öğe" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_journal +msgid "Journal" +msgstr "Yevmiye" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__currency_id +msgid "Journal Currency" +msgstr "Yevmiye Para Birimi" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Journal Entry" +msgstr "Yevmiye Kalemi" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_move_line +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Journal Item" +msgstr "Yevmiye Kalemi" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_mode__keep +msgid "Keep Suspense Accounts" +msgstr "Askı Hesapları Tutun" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Label" +msgstr "Etiket" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile____last_update +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data____last_update +msgid "Last Modified on" +msgstr "Son Değiştirilme" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__write_uid +msgid "Last Updated by" +msgstr "Son Güncelleyen" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__write_date +msgid "Last Updated on" +msgstr "Son Güncelleme" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_account_id +msgid "Manual Account" +msgstr "Manuel Hesap" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_amount +msgid "Manual Amount" +msgstr "Manuel Tutar" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_amount_in_currency +msgid "Manual Amount In Currency" +msgstr "Manuel Para Birimi Tutarı" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_currency_id +msgid "Manual Currency" +msgstr "Manuel Para Birimi" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__manual_delete +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_delete +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__manual_delete +msgid "Manual Delete" +msgstr "Manuel Silme" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_exchange_counterpart +msgid "Manual Exchange Counterpart" +msgstr "Manuel Döviz Karşılığı" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_in_currency_id +msgid "Manual In Currency" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_kind +msgid "Manual Kind" +msgstr "Manuel Tür" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_line_id +msgid "Manual Line" +msgstr "Manuel Satır" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_model_id +msgid "Manual Model" +msgstr "Manuel Model" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_move_id +msgid "Manual Move" +msgstr "Manuel Hareket" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_move_type +msgid "Manual Move Type" +msgstr "Manuel Hareket Türü" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_name +msgid "Manual Name" +msgstr "Manuel Adı" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_original_amount +msgid "Manual Original Amount" +msgstr "Manuel Orijinal Miktarı" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_partner_id +msgid "Manual Partner" +msgstr "Manuel İş Ortağı" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__manual_reference +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_reference +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__manual_reference +msgid "Manual Reference" +msgstr "Manuel Referans" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Manual operation" +msgstr "Manuel İşlem" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Miscellaneous" +msgstr "Çeşitli" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_aggregate__month +msgid "Month" +msgstr "Ay" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__name +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Name" +msgstr "Adı" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Narration" +msgstr "Notlar" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_bank_statement_line.py:0 +#, python-format +msgid "No supense lines are allowed when reconciling" +msgstr "Uzlaştırma yapılırken bekleyen satırlara izin verilmez" + +#. module: account_reconcile_oca +#: model_terms:ir.actions.act_window,help:account_reconcile_oca.action_bank_statement_line_reconcile_to_check +msgid "Nothing to check" +msgstr "Kontrol edilecek bir şey yok" + +#. module: account_reconcile_oca +#: model_terms:ir.actions.act_window,help:account_reconcile_oca.action_bank_statement_line_move_view_reconcile +#: model_terms:ir.actions.act_window,help:account_reconcile_oca.action_bank_statement_line_reconcile +#: model_terms:ir.actions.act_window,help:account_reconcile_oca.action_bank_statement_line_reconcile_all +msgid "Nothing to reconcile" +msgstr "Uzlaştırılacak bir şey yok" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#, python-format +msgid "Open Balance" +msgstr "" + +#. module: account_reconcile_oca +#. odoo-javascript +#: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__partner_id +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +#, python-format +msgid "Partner" +msgstr "İş Ortağı" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Payable" +msgstr "Borç" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__previous_manual_amount_in_currency +msgid "Previous Manual Amount In Currency" +msgstr "" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Purchases" +msgstr "Satınalma" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Receivable" +msgstr "Alacak" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.account_account_account_account_reconcile_act_window +#: model:ir.actions.act_window,name:account_reconcile_oca.account_account_reconcile_act_window +#: model:ir.actions.act_window,name:account_reconcile_oca.res_partner_account_account_reconcile_act_window +#: model:ir.actions.server,name:account_reconcile_oca.action_reconcile +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__reconcile_id +#: model:ir.ui.menu,name:account_reconcile_oca.account_account_reconcile_menu +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_account_reconcile_form_view +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_journal_dashboard_kanban_view +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.view_account_list +msgid "Reconcile" +msgstr "Uzlaştırma" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__reconcile_aggregate +#: model:ir.model.fields,field_description:account_reconcile_oca.field_res_company__reconcile_aggregate +#: model:ir.model.fields,field_description:account_reconcile_oca.field_res_config_settings__reconcile_aggregate +msgid "Reconcile Aggregate" +msgstr "Toplu Uzlaştırma" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__reconcile_data +msgid "Reconcile Data" +msgstr "Uzlaştırma Verisi" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile__reconcile_data_info +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__reconcile_data_info +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_reconcile_abstract__reconcile_data_info +msgid "Reconcile Data Info" +msgstr "Uzlaştırma Veri Bilgisi" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__reconcile_mode +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_journal__reconcile_mode +msgid "Reconcile Mode" +msgstr "Uzlaştırma Modu" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_journal__reconcile_aggregate +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.res_config_settings_form_view +msgid "Reconcile aggregation" +msgstr "Toplam Uzlaştırma" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_move_view_reconcile +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_reconcile_all +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_reconcile_to_check +msgid "Reconcile bank statement lines" +msgstr "Banka ekstresi satırlarını uzlaştırma" + +#. module: account_reconcile_oca +#: model:ir.model,name:account_reconcile_oca.model_account_account_reconcile_data +msgid "Reconcile data model to store user info" +msgstr "Kullanıcı bilgilerini depolamak için veri modelini uzlaştırın" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_reconcile_view +msgid "Reconciled" +msgstr "Uzlaştırıldı" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Reset reconciliation" +msgstr "Uzlaşmayı Sıfırla" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_bank_statement_line.py:0 +#, python-format +msgid "Reversal of: %s" +msgstr "Ters Kayıt: %s" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Sales" +msgstr "Satış" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_add_view +msgid "Save" +msgstr "Kaydet" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_search_reconcile_view +msgid "Search Journal Items" +msgstr "Yemiye Kalemlerini Ara" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Set as Checked" +msgstr "Kontrol Edildi Olarak İşaretle" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.res_config_settings_form_view +msgid "Standard aggregation to use on bank reconciliation" +msgstr "Banka uzlaştırmada kullanılacak standart toplama yöntemi" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_aggregate__statement +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_reconcile_view +msgid "Statement" +msgstr "Hesap Ektresi" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__statement_name +msgid "Statement Name" +msgstr "Hesap Ektresi Adı" + +#. module: account_reconcile_oca +#: model:ir.actions.act_window,name:account_reconcile_oca.action_bank_statement_line_reconcile +msgid "Statement lines" +msgstr "Hesap ektresi satırı" + +#. module: account_reconcile_oca +#: model:ir.model.fields,help:account_reconcile_oca.field_account_bank_statement_line__foreign_currency_id +msgid "The optional other currency if it is a multi-currency entry." +msgstr "Çoklu para birimi girişi ise isteğe bağlı diğer para birimi." + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "To Check" +msgstr "Kontrol Edilecek" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_reconcile_view +msgid "To check" +msgstr "Kontrol edilecek" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_journal_dashboard_kanban_view +msgid "Transactions" +msgstr "İşlemler" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_bank_statement_line.py:0 +#, python-format +msgid "Undefined" +msgstr "Tanımsız" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Unreconcile" +msgstr "Uzlaştırmayı Kaldır" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_account_reconcile_data__user_id +msgid "User" +msgstr "Kullanıcı" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Validate" +msgstr "Doğrulama" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_move_line_tree_reconcile_view +msgid "View" +msgstr "Görüntüle" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "View move" +msgstr "Hareketi görüntüle" + +#. module: account_reconcile_oca +#: model:ir.model.fields.selection,name:account_reconcile_oca.selection__account_journal__reconcile_aggregate__week +msgid "Week" +msgstr "Hafta" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_journal.py:0 +#, python-format +msgid "Well done! Everything has been reconciled" +msgstr "Tebrikler! Her şey uzlaştırıldı" + +#. module: account_reconcile_oca +#. odoo-python +#: code:addons/account_reconcile_oca/models/account_move_line.py:0 +#, python-format +msgid "You can only reconcile journal items belonging to the same account." +msgstr "" +"Yalnızca aynı hesaba ait olan yevmiye kalemlerinin uzlaşmasını " +"yapabilirsiniz." + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "fully paid" +msgstr "tamamen ödenmiş" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.account_journal_dashboard_kanban_view +msgid "to check" +msgstr "kontrol edilecek" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "will be reduced by" +msgstr "kadar azaltılacak" + +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "with an open amount" +msgstr "açık bir miktarla" + +#, python-format +#~ msgid "Keep suspense move lines mode cannot be unreconciled" +#~ msgstr "Beklemedeki hareket satırları modu uzlaştırılamaz durumda olamaz" + +#~ msgid "Reset" +#~ msgstr "Sıfırla" diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/migrations/16.0.1.2.0/pre-migration.py b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/migrations/16.0.1.2.0/pre-migration.py new file mode 100644 index 0000000..e1cda49 --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/migrations/16.0.1.2.0/pre-migration.py @@ -0,0 +1,23 @@ +from openupgradelib import openupgrade + + +@openupgrade.migrate() +def migrate(env, version): + if not openupgrade.column_exists( + env.cr, "account_bank_statement_line", "reconcile_data" + ): + return # coming directly from v15, so reconcile_data doesn't exist + # Due to the big change we did, we need to loose how data is stored + openupgrade.logged_query( + env.cr, + """ + UPDATE account_bank_statement_line + SET reconcile_data = NULL + """, + ) + openupgrade.logged_query( + env.cr, + """ + DELETE FROM account_account_reconcile_data + """, + ) diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/models/__init__.py b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/models/__init__.py new file mode 100644 index 0000000..da04aa8 --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/models/__init__.py @@ -0,0 +1,8 @@ +from . import account_reconcile_abstract +from . import account_journal +from . import account_bank_statement_line +from . import account_bank_statement +from . import account_account_reconcile +from . import account_move_line +from . import res_company +from . import res_config_settings diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/models/account_account_reconcile.py b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/models/account_account_reconcile.py new file mode 100644 index 0000000..51370cf --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/models/account_account_reconcile.py @@ -0,0 +1,215 @@ +# Copyright 2023 Dixmit +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class CharId(fields.Id): + type = "string" + column_type = ("varchar", fields.pg_varchar()) + + +class AccountAccountReconcile(models.Model): + _name = "account.account.reconcile" + _description = "Account Account Reconcile" + _inherit = "account.reconcile.abstract" + _auto = False + + reconcile_data_info = fields.Serialized(inverse="_inverse_reconcile_data_info") + + partner_id = fields.Many2one("res.partner", readonly=True) + account_id = fields.Many2one("account.account", readonly=True) + name = fields.Char(readonly=True) + is_reconciled = fields.Boolean(readonly=True) + active = fields.Boolean(default=True) + + @property + def _table_query(self): + return "%s %s %s %s %s" % ( + self._select(), + self._from(), + self._where(), + self._groupby(), + self._having(), + ) + + def _select(self): + account_account_name_field = ( + self.env["ir.model.fields"] + .sudo() + .search([("model", "=", "account.account"), ("name", "=", "name")]) + ) + account_name = ( + f"a.name ->> '{self.env.user.lang}'" + if account_account_name_field.translate + else "a.name" + ) + return f""" + SELECT + min(aml.id) as id, + MAX({account_name}) as name, + CASE + WHEN a.account_type in ('asset_receivable', 'liability_payable') + THEN aml.partner_id + ELSE NULL + END as partner_id, + a.id as account_id, + FALSE as is_reconciled, + aml.currency_id as currency_id, + a.company_id, + false as foreign_currency_id, + ( + SUM( + CASE WHEN aml.amount_residual > 0 + THEN aml.amount_residual + ELSE 0 END + ) > 0 + AND SUM( + CASE WHEN aml.amount_residual < 0 + THEN -aml.amount_residual + ELSE 0 END + ) > 0 + ) as active + """ + + def _from(self): + return """ + FROM + account_account a + INNER JOIN account_move_line aml ON aml.account_id = a.id + INNER JOIN account_move am ON am.id = aml.move_id + """ + + def _where(self): + return """ + WHERE a.reconcile + AND am.state = 'posted' + """ + + def _groupby(self): + return """ + GROUP BY + a.id, + CASE + WHEN a.account_type in ('asset_receivable', 'liability_payable') + THEN aml.partner_id + ELSE NULL + END, + aml.currency_id, + a.company_id + """ + + def _having(self): + return """ + """ + + def _compute_reconcile_data_info(self): + data_obj = self.env["account.account.reconcile.data"] + for record in self: + if self.env.context.get("default_account_move_lines"): + data = { + "data": [], + "counterparts": self.env.context.get("default_account_move_lines"), + } + record.reconcile_data_info = self._recompute_data(data) + continue + data_record = data_obj.search( + [("user_id", "=", self.env.user.id), ("reconcile_id", "=", record.id)] + ) + if data_record: + record.reconcile_data_info = data_record.data + else: + record.reconcile_data_info = {"data": [], "counterparts": []} + + def _inverse_reconcile_data_info(self): + data_obj = self.env["account.account.reconcile.data"] + for record in self: + data_record = data_obj.search( + [("user_id", "=", self.env.user.id), ("reconcile_id", "=", record.id)] + ) + if data_record: + data_record.data = record.reconcile_data_info + else: + data_obj.create( + { + "reconcile_id": record.id, + "user_id": self.env.user.id, + "data": record.reconcile_data_info, + } + ) + + @api.onchange("add_account_move_line_id") + def _onchange_add_account_move_line(self): + if self.add_account_move_line_id: + self._add_account_move_line(self.add_account_move_line_id) + self.add_account_move_line_id = False + + def _add_account_move_line(self, move_line, keep_current=False): + data = self.reconcile_data_info + if move_line.id not in data["counterparts"]: + data["counterparts"].append(move_line.id) + elif not keep_current: + del data["counterparts"][data["counterparts"].index(move_line.id)] + self.reconcile_data_info = self._recompute_data(data) + + @api.onchange("manual_reference", "manual_delete") + def _onchange_manual_reconcile_reference(self): + self.ensure_one() + data = self.reconcile_data_info + counterparts = [] + for line in data["data"]: + if line["reference"] == self.manual_reference: + if self.manual_delete: + continue + counterparts.append(line["id"]) + data["counterparts"] = counterparts + self.reconcile_data_info = self._recompute_data(data) + self.manual_delete = False + self.manual_reference = False + + def _recompute_data(self, data): + new_data = {"data": [], "counterparts": data["counterparts"]} + counterparts = data["counterparts"] + amount = 0.0 + for line_id in counterparts: + max_amount = amount if line_id == counterparts[-1] else 0 + lines = self._get_reconcile_line( + self.env["account.move.line"].browse(line_id), + "other", + is_counterpart=True, + max_amount=max_amount, + move=True, + ) + new_data["data"] += lines + amount += sum(line["amount"] for line in lines) + return new_data + + def clean_reconcile(self): + self.ensure_one() + self.reconcile_data_info = {"data": [], "counterparts": []} + + def reconcile(self): + lines = self.env["account.move.line"].browse( + self.reconcile_data_info["counterparts"] + ) + lines.reconcile() + data_record = self.env["account.account.reconcile.data"].search( + [("user_id", "=", self.env.user.id), ("reconcile_id", "=", self.id)] + ) + data_record.unlink() + + def add_multiple_lines(self, domain): + res = super().add_multiple_lines(domain) + lines = self.env["account.move.line"].search(domain) + for line in lines: + self._add_account_move_line(line, keep_current=True) + return res + + +class AccountAccountReconcileData(models.TransientModel): + _name = "account.account.reconcile.data" + _description = "Reconcile data model to store user info" + + user_id = fields.Many2one("res.users", required=True) + reconcile_id = fields.Integer(required=True) + data = fields.Serialized() diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/models/account_bank_statement.py b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/models/account_bank_statement.py new file mode 100644 index 0000000..8ad1c39 --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/models/account_bank_statement.py @@ -0,0 +1,30 @@ +# Copyright 2024 Dixmit +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo import models +from odoo.tools.safe_eval import safe_eval + + +class AccountBankStatement(models.Model): + _inherit = "account.bank.statement" + + def action_open_statement(self): + self.ensure_one() + action = self.env["ir.actions.act_window"]._for_xml_id( + "account_reconcile_oca.account_bank_statement_action_edit" + ) + action["res_id"] = self.id + return action + + def action_open_statement_lines(self): + """Open in reconciling view directly""" + self.ensure_one() + if not self: + return {} + action = self.env["ir.actions.act_window"]._for_xml_id( + "account_reconcile_oca.action_bank_statement_line_reconcile" + ) + action["domain"] = [("statement_id", "=", self.id)] + action["context"] = safe_eval( + action["context"], locals_dict={"active_id": self._context.get("active_id")} + ) + return action diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/models/account_bank_statement_line.py b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/models/account_bank_statement_line.py new file mode 100644 index 0000000..ef450a4 --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/models/account_bank_statement_line.py @@ -0,0 +1,1324 @@ +# Copyright 2023 Dixmit +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from collections import defaultdict +from datetime import timedelta + +from dateutil import rrule +from dateutil.relativedelta import relativedelta + +from odoo import Command, _, api, fields, models +from odoo.exceptions import UserError +from odoo.fields import first +from odoo.tools import float_compare, float_is_zero + + +class AccountBankStatementLine(models.Model): + _name = "account.bank.statement.line" + _inherit = ["account.bank.statement.line", "account.reconcile.abstract"] + + reconcile_data_info = fields.Serialized(inverse="_inverse_reconcile_data_info") + reconcile_mode = fields.Selection( + selection=lambda self: self.env["account.journal"] + ._fields["reconcile_mode"] + .selection + ) + company_id = fields.Many2one(related="journal_id.company_id") + reconcile_data = fields.Serialized() + manual_line_id = fields.Many2one( + "account.move.line", + store=False, + default=False, + prefetch=False, + ) + manual_kind = fields.Char( + store=False, + default=False, + prefetch=False, + ) + manual_account_id = fields.Many2one( + "account.account", + check_company=True, + store=False, + default=False, + prefetch=False, + ) + manual_partner_id = fields.Many2one( + "res.partner", + domain=[("parent_id", "=", False)], + check_company=True, + store=False, + default=False, + prefetch=False, + ) + analytic_distribution = fields.Json( + store=False, + default=False, + prefetch=False, + ) + analytic_precision = fields.Integer( + store=False, + default=lambda self: self.env["decimal.precision"].precision_get( + "Percentage Analytic" + ), + ) + manual_in_currency = fields.Boolean( + string="Is Manual in Currency?", + readonly=True, + store=False, + prefetch=False, + ) + manual_in_currency_id = fields.Many2one( + comodel_name="res.currency", + string="Manual In Currency", + readonly=True, + store=False, + prefetch=False, + ) + manual_amount_in_currency = fields.Monetary( + store=False, + default=False, + prefetch=False, + currency_field="manual_in_currency_id", + ) + previous_manual_amount_in_currency = fields.Monetary( + store=False, + default=False, + prefetch=False, + currency_field="manual_in_currency_id", + ) + manual_exchange_counterpart = fields.Boolean( + store=False, + ) + manual_model_id = fields.Many2one( + "account.reconcile.model", + check_company=True, + store=False, + default=False, + prefetch=False, + domain=""" + [('rule_type', '=', 'writeoff_button'), + ('company_id', '=', company_id), + '|', + ('match_journal_ids', '=', False), ('match_journal_ids', '=', journal_id)] + """, + ) + manual_name = fields.Char(store=False, default=False, prefetch=False) + manual_amount = fields.Monetary( + store=False, default=False, prefetch=False, currency_field="manual_currency_id" + ) + manual_currency_id = fields.Many2one( + "res.currency", readonly=True, store=False, prefetch=False + ) + manual_original_amount = fields.Monetary( + default=False, store=False, prefetch=False, readonly=True + ) + manual_move_type = fields.Selection( + lambda r: r.env["account.move"]._fields["move_type"].selection, + default=False, + store=False, + prefetch=False, + readonly=True, + ) + manual_move_id = fields.Many2one( + "account.move", default=False, store=False, prefetch=False, readonly=True + ) + can_reconcile = fields.Boolean(sparse="reconcile_data_info") + statement_complete = fields.Boolean( + related="statement_id.is_complete", + ) + statement_valid = fields.Boolean( + related="statement_id.is_valid", + ) + statement_balance_end_real = fields.Monetary( + related="statement_id.balance_end_real", + ) + statement_name = fields.Char( + string="Statement Name", + related="statement_id.name", + ) + reconcile_aggregate = fields.Char(compute="_compute_reconcile_aggregate") + aggregate_id = fields.Integer(compute="_compute_reconcile_aggregate") + aggregate_name = fields.Char(compute="_compute_reconcile_aggregate") + + @api.model + def _reconcile_aggregate_map(self): + lang = self.env["res.lang"]._lang_get(self.env.user.lang) + week_start = rrule.weekday(int(lang.week_start) - 1) + return { + False: lambda s: (False, False), + "statement": lambda s: (s.statement_id.id, s.statement_id.name), + "day": lambda s: (s.date.toordinal(), s.date.strftime(lang.date_format)), + "week": lambda s: ( + (s.date + relativedelta(weekday=week_start(-1))).toordinal(), + (s.date + relativedelta(weekday=week_start(-1))).strftime( + lang.date_format + ), + ), + "month": lambda s: ( + s.date.replace(day=1).toordinal(), + s.date.replace(day=1).strftime(lang.date_format), + ), + } + + @api.depends("company_id", "journal_id") + def _compute_reconcile_aggregate(self): + reconcile_aggregate_map = self._reconcile_aggregate_map() + for record in self: + reconcile_aggregate = ( + record.journal_id.reconcile_aggregate + or record.company_id.reconcile_aggregate + ) + record.reconcile_aggregate = reconcile_aggregate + record.aggregate_id, record.aggregate_name = reconcile_aggregate_map[ + reconcile_aggregate + ](record) + + def save(self): + return {"type": "ir.actions.act_window_close"} + + @api.model + def action_new_line(self): + action = self.env["ir.actions.act_window"]._for_xml_id( + "account_reconcile_oca.action_bank_statement_line_create" + ) + action["context"] = self.env.context + return action + + @api.onchange("manual_model_id") + def _onchange_manual_model_id(self): + if self.manual_model_id: + data = [] + for line in self.reconcile_data_info.get("data", []): + if line.get("kind") != "suspense": + data.append(line) + self.reconcile_data_info = self._recompute_suspense_line( + *self._reconcile_data_by_model( + data, + self.manual_model_id, + self.reconcile_data_info["reconcile_auxiliary_id"], + ), + self.manual_reference, + ) + else: + # Refreshing data + self.reconcile_data_info = self.browse( + self.id.origin + )._default_reconcile_data() + self.can_reconcile = self.reconcile_data_info.get("can_reconcile", False) + + def _get_amount_currency(self, line, dest_curr): + if line["line_currency_id"] == dest_curr.id: + amount = line["currency_amount"] + else: + amount = self.company_id.currency_id._convert( + line["amount"], + dest_curr, + self.company_id, + self.date, + ) + return amount + + @api.onchange("add_account_move_line_id") + def _onchange_add_account_move_line_id(self): + if self.add_account_move_line_id: + self._add_account_move_line(self.add_account_move_line_id) + self.add_account_move_line_id = False + + def _add_account_move_line(self, move_line, keep_current=False): + data = self.reconcile_data_info["data"] + new_data = [] + is_new_line = True + pending_amount = 0.0 + currency = self._get_reconcile_currency() + for line in data: + if line["kind"] != "suspense": + pending_amount += self._get_amount_currency(line, currency) + if move_line.id in line.get("counterpart_line_ids", []): + is_new_line = False + if keep_current: + new_data.append(line) + else: + new_data.append(line) + if is_new_line: + reconcile_auxiliary_id, lines = self._get_reconcile_line( + move_line, + "other", + is_counterpart=True, + max_amount=currency.round(pending_amount), + move=True, + ) + new_data += lines + self.reconcile_data_info = self._recompute_suspense_line( + new_data, + self.reconcile_data_info["reconcile_auxiliary_id"], + self.manual_reference, + ) + self.can_reconcile = self.reconcile_data_info.get("can_reconcile", False) + + def _recompute_suspense_line(self, data, reconcile_auxiliary_id, manual_reference): + can_reconcile = True + total_amount = 0 + currency_amount = 0 + new_data = [] + suspense_line = False + counterparts = [] + suspense_currency = self.foreign_currency_id or self.currency_id + for line in data: + if line.get("counterpart_line_ids"): + counterparts += line["counterpart_line_ids"] + if ( + line["account_id"][0] == self.journal_id.suspense_account_id.id + or not line["account_id"][0] + ) and line["kind"] != "suspense": + can_reconcile = False + if line["kind"] != "suspense": + new_data.append(line) + total_amount += line["amount"] + if not line.get("is_exchange_counterpart"): + # case of statement line with foreign_currency + if ( + line["kind"] == "liquidity" + and line["line_currency_id"] != suspense_currency.id + ): + currency_amount += self.amount_currency + elif ( + line.get("currency_amount") + and line.get("line_currency_id") == suspense_currency.id + ): + currency_amount += line.get("currency_amount") + else: + currency_amount += self.company_id.currency_id._convert( + line["amount"], + suspense_currency, + self.company_id, + self.date, + ) + else: + suspense_line = line + if not float_is_zero( + total_amount, precision_digits=self.company_id.currency_id.decimal_places + ): + can_reconcile = False + if suspense_line: + suspense_line.update( + { + "amount": -total_amount, + "credit": total_amount if total_amount > 0 else 0.0, + "debit": -total_amount if total_amount < 0 else 0.0, + "currency_amount": -currency_amount, + } + ) + else: + + suspense_line = { + "reference": "reconcile_auxiliary;%s" % reconcile_auxiliary_id, + "id": False, + "account_id": self.journal_id.suspense_account_id.name_get()[0], + "partner_id": self.partner_id + and self.partner_id.name_get()[0] + or (False, self.partner_name), + "date": fields.Date.to_string(self.date), + "name": self.payment_ref or self.name, + "amount": -total_amount, + "credit": total_amount if total_amount > 0 else 0.0, + "debit": -total_amount if total_amount < 0 else 0.0, + "kind": "suspense", + "currency_id": self.company_id.currency_id.id, + "line_currency_id": suspense_currency.id, + "currency_amount": -currency_amount, + } + reconcile_auxiliary_id += 1 + new_data.append(suspense_line) + return { + "data": new_data, + "counterparts": counterparts, + "reconcile_auxiliary_id": reconcile_auxiliary_id, + "can_reconcile": can_reconcile, + "manual_reference": manual_reference, + } + + def _check_line_changed(self, line): + return ( + not float_is_zero( + self.manual_amount - line["amount"], + precision_digits=self.company_id.currency_id.decimal_places, + ) + or self.manual_account_id.id != line["account_id"][0] + or self.manual_name != line["name"] + or ( + self.manual_partner_id + and self.manual_partner_id.name_get()[0] + or [False, False] + ) + != line.get("partner_id") + or self.analytic_distribution != line.get("analytic_distribution", False) + ) + + def _check_reconcile_data_changed(self): + self.ensure_one() + data = self.reconcile_data_info.get("data", []) + liquidity_lines, _suspense_lines, _other_lines = self._seek_for_lines() + move_amount_cur = sum(liquidity_lines.mapped("amount_currency")) + move_credit = sum(liquidity_lines.mapped("credit")) + move_debit = sum(liquidity_lines.mapped("debit")) + stmt_amount_curr = stmt_debit = stmt_credit = 0.0 + for line_data in data: + if line_data["kind"] != "liquidity": + continue + stmt_amount_curr += line_data["currency_amount"] + stmt_debit += line_data["debit"] + stmt_credit += line_data["credit"] + prec = self.currency_id.rounding + return ( + float_compare(move_amount_cur, move_amount_cur, precision_rounding=prec) + != 0 + or float_compare(move_credit, stmt_credit, precision_rounding=prec) != 0 + or float_compare(move_debit, stmt_debit, precision_rounding=prec) != 0 + ) + + def _get_manual_delete_vals(self): + return { + "manual_reference": False, + "manual_account_id": False, + "manual_amount": False, + "manual_exchange_counterpart": False, + "manual_in_currency_id": False, + "manual_in_currency": False, + "manual_name": False, + "manual_partner_id": False, + "manual_line_id": False, + "manual_move_id": False, + "manual_move_type": False, + "manual_kind": False, + "manual_original_amount": False, + "manual_currency_id": False, + "analytic_distribution": False, + } + + def _process_manual_reconcile_from_line(self, line): + self.manual_account_id = line["account_id"][0] + self.manual_amount = line["amount"] + self.manual_currency_id = line["currency_id"] + self.manual_in_currency_id = line.get("line_currency_id") + self.manual_in_currency = line.get("line_currency_id") and line[ + "currency_id" + ] != line.get("line_currency_id") + self.manual_amount_in_currency = line.get("currency_amount") + self.previous_manual_amount_in_currency = line.get("currency_amount") + self.manual_name = line["name"] + self.manual_exchange_counterpart = line.get("is_exchange_counterpart", False) + self.manual_partner_id = line.get("partner_id") and line["partner_id"][0] + manual_line = self.env["account.move.line"].browse(line["id"]).exists() + self.manual_line_id = manual_line + self.analytic_distribution = line.get("analytic_distribution", {}) + if self.manual_line_id: + self.manual_move_id = self.manual_line_id.move_id + self.manual_move_type = self.manual_line_id.move_id.move_type + self.manual_kind = line["kind"] + self.manual_original_amount = line.get("original_amount", 0.0) + + @api.onchange("manual_reference", "manual_delete") + def _onchange_manual_reconcile_reference(self): + self.ensure_one() + data = self.reconcile_data_info.get("data", []) + new_data = [] + related_move_line_id = False + for line in data: + if ( + self.manual_delete + and related_move_line_id + and line.get("original_exchange_line_id") == related_move_line_id + ): + # We should remove the related exchange rate line + continue + if line["reference"] == self.manual_reference: + if self.manual_delete: + self.update(self._get_manual_delete_vals()) + continue + else: + self._process_manual_reconcile_from_line(line) + new_data.append(line) + self.update({"manual_delete": False}) + self.reconcile_data_info = self._recompute_suspense_line( + new_data, + self.reconcile_data_info["reconcile_auxiliary_id"], + self.manual_reference, + ) + self.can_reconcile = self.reconcile_data_info.get("can_reconcile", False) + + def _get_manual_reconcile_vals(self): + vals = { + "name": self.manual_name, + "partner_id": self.manual_partner_id + and self.manual_partner_id.name_get()[0] + or (False, self.partner_name), + "account_id": self.manual_account_id.name_get()[0] + if self.manual_account_id + else [False, _("Undefined")], + "amount": self.manual_amount, + "credit": -self.manual_amount if self.manual_amount < 0 else 0.0, + "debit": self.manual_amount if self.manual_amount > 0 else 0.0, + "analytic_distribution": self.analytic_distribution, + "currency_amount": self.manual_amount_in_currency, + } + liquidity_lines, _suspense_lines, _other_lines = self._seek_for_lines() + if self.manual_line_id and self.manual_line_id.id not in liquidity_lines.ids: + vals.update( + { + "currency_amount": self.manual_currency_id._convert( + self.manual_amount, + self.manual_in_currency_id, + self.company_id, + self.manual_line_id.date, + ), + } + ) + return vals + + @api.onchange( + "manual_account_id", + "manual_partner_id", + "manual_name", + "manual_amount", + "analytic_distribution", + "manual_amount_in_currency", + ) + def _onchange_manual_reconcile_vals(self): + self.ensure_one() + data = self.reconcile_data_info.get("data", []) + new_data = [] + if ( + self.manual_in_currency_id + and float_compare( + self.manual_amount_in_currency, + self.previous_manual_amount_in_currency, + precision_rounding=self.manual_in_currency_id.rounding, + ) + != 0 + ): + in_currency_date = self.date + if ( + self.manual_line_id.exists() + and self.manual_line_id + and self.manual_kind != "liquidity" + ): + in_currency_date = self.manual_line_id.date + self.manual_amount = self.manual_in_currency_id._convert( + self.manual_amount_in_currency, + self.manual_currency_id, + self.company_id, + in_currency_date, + ) + self.previous_manual_amount_in_currency = self.manual_amount_in_currency + for line in data: + if line["reference"] == self.manual_reference: + if self._check_line_changed(line): + line_vals = self._get_manual_reconcile_vals() + line_vals["kind"] = ( + line["kind"] if line["kind"] != "suspense" else "other" + ) + line.update(line_vals) + if line["kind"] == "liquidity": + self._update_move_partner() + if self.manual_line_id and self.manual_line_id.id == line.get( + "original_exchange_line_id" + ): + # Now, we should edit the amount of the exchange rate + amount = self._get_exchange_rate_amount( + self.manual_amount, + self.manual_amount_in_currency, + self.manual_line_id.currency_id, + self.manual_line_id, + ) + line.update( + { + "currency_amount": self.manual_amount_in_currency, + "amount": amount, + "credit": -amount if amount < 0 else 0.0, + "debit": amount if amount > 0 else 0.0, + } + ) + new_data.append(line) + self.reconcile_data_info = self._recompute_suspense_line( + new_data, + self.reconcile_data_info["reconcile_auxiliary_id"], + self.manual_reference, + ) + self.can_reconcile = self.reconcile_data_info.get("can_reconcile", False) + + def _update_move_partner(self): + if self.partner_id == self.manual_partner_id: + return + self.partner_id = self.manual_partner_id + + @api.depends("reconcile_data", "is_reconciled") + def _compute_reconcile_data_info(self): + for record in self: + if record.reconcile_data and not record.is_reconciled: + record.reconcile_data_info = record.reconcile_data + else: + record.reconcile_data_info = record._default_reconcile_data( + from_unreconcile=record.is_reconciled + ) + record.can_reconcile = record.reconcile_data_info.get( + "can_reconcile", False + ) + + def action_show_move(self): + self.ensure_one() + action = self.env["ir.actions.act_window"]._for_xml_id( + "account.action_move_journal_line" + ) + action.update( + {"res_id": self.move_id.id, "views": [[False, "form"]], "view_mode": "form"} + ) + return action + + def _inverse_reconcile_data_info(self): + for record in self: + record.reconcile_data = record.reconcile_data_info + + def _reconcile_data_by_model(self, data, reconcile_model, reconcile_auxiliary_id): + new_data = [] + liquidity_amount = 0.0 + currency = self._get_reconcile_currency() + currency_amount = False + default_name = "" + for line_data in data: + if line_data["kind"] == "suspense": + continue + new_data.append(line_data) + liquidity_amount += line_data["amount"] + if line_data["kind"] == "liquidity": + default_name = line_data["name"] + partner = ( + reconcile_model._get_partner_from_mapping(self) or self._retrieve_partner() + ) + for line in reconcile_model._get_write_off_move_lines_dict( + -liquidity_amount, partner.id + ): + new_line = line.copy() + new_line["name"] = new_line.get("name") or default_name + new_line["partner_id"] = partner and partner.name_get()[0] or False + amount = line.get("balance") + if self.foreign_currency_id: + amount = self.foreign_currency_id.compute( + amount, self.journal_id.currency_id or self.company_currency_id + ) + if currency != self.company_id.currency_id: + currency_amount = self.company_id.currency_id._convert( + amount, + currency, + self.company_id, + self.date, + ) + new_line.update( + { + "reference": "reconcile_auxiliary;%s" % reconcile_auxiliary_id, + "id": False, + "amount": amount, + "debit": amount if amount > 0 else 0, + "credit": -amount if amount < 0 else 0, + "kind": "other", + "account_id": self.env["account.account"] + .browse(line["account_id"]) + .name_get()[0], + "date": fields.Date.to_string(self.date), + "line_currency_id": currency.id, + "currency_id": self.company_id.currency_id.id, + "currency_amount": currency_amount or amount, + "name": line.get("name") or self.payment_ref, + } + ) + reconcile_auxiliary_id += 1 + if line.get("partner_id"): + new_line["partner_id"] = ( + self.env["res.partner"].browse(line["partner_id"]).name_get()[0] + ) + elif self.partner_id: + new_line["partner_id"] = self.partner_id.name_get()[0] + new_data.append(new_line) + return new_data, reconcile_auxiliary_id + + def _default_reconcile_data(self, from_unreconcile=False): + liquidity_lines, suspense_lines, other_lines = self._seek_for_lines() + data = [] + reconcile_auxiliary_id = 1 + for line in liquidity_lines: + reconcile_auxiliary_id, lines = self._get_reconcile_line( + line, + "liquidity", + reconcile_auxiliary_id=reconcile_auxiliary_id, + move=True, + ) + data += lines + if not from_unreconcile: + res = ( + self.env["account.reconcile.model"] + .search( + [ + ( + "rule_type", + "in", + ["invoice_matching", "writeoff_suggestion"], + ), + ("company_id", "=", self.company_id.id), + ] + ) + ._apply_rules(self, self._retrieve_partner()) + ) + if res and res.get("status", "") == "write_off": + return self._recompute_suspense_line( + *self._reconcile_data_by_model( + data, res["model"], reconcile_auxiliary_id + ), + self.manual_reference, + ) + elif res and res.get("amls"): + # TODO should be signed in currency get_reconcile_currency + amount = self.amount_total_signed + for line in res.get("amls", []): + reconcile_auxiliary_id, line_data = self._get_reconcile_line( + line, + "other", + is_counterpart=True, + max_amount=amount, + reconcile_auxiliary_id=reconcile_auxiliary_id, + move=True, + ) + amount -= sum(line.get("amount") for line in line_data) + data += line_data + if res.get("auto_reconcile") and self.reconcile_data_info: + self.reconcile_bank_line() + return self._recompute_suspense_line( + data, + reconcile_auxiliary_id, + self.manual_reference, + ) + for line in other_lines: + partial_lines = self._all_partials_lines(line) if from_unreconcile else [] + if partial_lines: + for reconciled_line in ( + partial_lines.debit_move_id + partial_lines.credit_move_id - line + ): + if ( + reconciled_line.move_id.journal_id + == self.company_id.currency_exchange_journal_id + ): + for rl_item in ( + reconciled_line.move_id.line_ids - reconciled_line + ): + reconcile_auxiliary_id, lines = self._get_reconcile_line( + rl_item, + "other", + from_unreconcile=False, + move=True, + is_reconciled=self.is_reconciled, + ) + data += lines + continue + partial = partial_lines.filtered( + lambda r: r.debit_move_id == reconciled_line + or r.credit_move_id == reconciled_line + ) + partial_amount = sum( + partial.filtered( + lambda r: r.credit_move_id == reconciled_line + ).mapped("amount") + ) - sum( + partial.filtered( + lambda r: r.debit_move_id == reconciled_line + ).mapped("amount") + ) + reconcile_auxiliary_id, lines = self._get_reconcile_line( + reconciled_line, + "other", + from_unreconcile={ + "amount": partial_amount, + "credit": partial_amount > 0 and partial_amount, + "debit": partial_amount < 0 and -partial_amount, + "currency_amount": sum( + partial.filtered( + lambda r: r.credit_move_id == reconciled_line + ).mapped("credit_amount_currency") + ) + - sum( + partial.filtered( + lambda r: r.debit_move_id == reconciled_line + ).mapped("debit_amount_currency") + ), + }, + move=True, + ) + data += lines + else: + reconcile_auxiliary_id, lines = self._get_reconcile_line( + line, + "other", + from_unreconcile=False, + is_reconciled=self.is_reconciled, + ) + data += lines + + return self._recompute_suspense_line( + data, + reconcile_auxiliary_id, + self.manual_reference, + ) + + def _all_partials_lines(self, lines): + reconciliation_lines = lines.filtered( + lambda x: x.account_id.reconcile + or x.account_id.account_type in ("asset_cash", "liability_credit_card") + ) + current_lines = reconciliation_lines + current_partials = self.env["account.partial.reconcile"] + partials = self.env["account.partial.reconcile"] + while current_lines: + current_partials = ( + current_lines.matched_debit_ids + current_lines.matched_credit_ids + ) - current_partials + current_lines = ( + current_partials.debit_move_id + current_partials.credit_move_id + ) - current_lines + partials += current_partials + return partials + + def clean_reconcile(self): + self.reconcile_data_info = self._default_reconcile_data() + self.can_reconcile = self.reconcile_data_info.get("can_reconcile", False) + + def reconcile_bank_line(self): + self.ensure_one() + self.reconcile_mode = self.journal_id.reconcile_mode + result = getattr(self, "_reconcile_bank_line_%s" % self.reconcile_mode)( + self._prepare_reconcile_line_data(self.reconcile_data_info["data"]) + ) + self.reconcile_data = False + return result + + def _reconcile_bank_line_edit(self, data): + _liquidity_lines, suspense_lines, other_lines = self._seek_for_lines() + lines_to_remove = [(2, line.id) for line in suspense_lines + other_lines] + + # Cleanup previous lines. + move = self.move_id + container = {"records": move, "self": move} + to_reconcile = [] + with move._check_balanced(container): + move.with_context( + skip_account_move_synchronization=True, + force_delete=True, + skip_invoice_sync=True, + ).write( + { + "line_ids": lines_to_remove, + } + ) + for line_vals in data: + if line_vals["kind"] == "liquidity": + continue + line = ( + self.env["account.move.line"] + .with_context( + check_move_validity=False, + skip_sync_invoice=True, + skip_invoice_sync=True, + ) + .create(self._reconcile_move_line_vals(line_vals)) + ) + if line_vals.get("counterpart_line_ids"): + to_reconcile.append( + self.env["account.move.line"].browse( + line_vals.get("counterpart_line_ids") + ) + + line + ) + for reconcile_items in to_reconcile: + reconcile_items.reconcile() + + def _reconcile_bank_line_keep_move_vals(self): + return { + "journal_id": self.journal_id.id, + "date": self._get_reconciled_move_date(), + } + + def _reconcile_bank_line_keep(self, data): + move = ( + self.env["account.move"] + .with_context(skip_invoice_sync=True) + .create(self._reconcile_bank_line_keep_move_vals()) + ) + _liquidity_lines, suspense_lines, other_lines = self._seek_for_lines() + container = {"records": move, "self": move} + to_reconcile = defaultdict(lambda: self.env["account.move.line"]) + with move._check_balanced(container): + for line in suspense_lines | other_lines: + to_reconcile[line.account_id.id] |= line + line_data = line.with_context( + active_test=False, + include_business_fields=True, + ).copy_data({"move_id": move.id})[0] + to_reconcile[line.account_id.id] |= ( + self.env["account.move.line"] + .with_context( + check_move_validity=False, + skip_sync_invoice=True, + skip_invoice_sync=True, + ) + .create(line_data) + ) + move.write( + { + "line_ids": [ + Command.update( + line.id, + { + "balance": -line.balance, + "amount_currency": -line.amount_currency, + }, + ) + for line in move.line_ids + if line.move_id.move_type == "entry" + or line.display_type == "cogs" + ] + } + ) + for line_vals in data: + if line_vals["kind"] == "liquidity": + continue + if line_vals["kind"] == "suspense": + raise UserError(_("No supense lines are allowed when reconciling")) + line = ( + self.env["account.move.line"] + .with_context(check_move_validity=False, skip_invoice_sync=True) + .create(self._reconcile_move_line_vals(line_vals, move.id)) + ) + if line_vals.get("counterpart_line_ids") and line.account_id.reconcile: + to_reconcile[line.account_id.id] |= ( + self.env["account.move.line"].browse( + line_vals.get("counterpart_line_ids") + ) + | line + ) + move.invalidate_recordset() + move._post(soft=False) + for _account, lines in to_reconcile.items(): + lines.reconcile() + + def unreconcile_bank_line(self): + self.ensure_one() + return getattr( + self, "_unreconcile_bank_line_%s" % (self.reconcile_mode or "edit") + )() + + def _unreconcile_bank_line_edit(self): + self.reconcile_data_info = self._default_reconcile_data(from_unreconcile=True) + self.action_undo_reconciliation() + + def _unreconcile_bank_line_keep(self): + self.reconcile_data_info = self._default_reconcile_data(from_unreconcile=True) + # Reverse reconciled journal entry + to_reverse = ( + self.line_ids._all_reconciled_lines() + .filtered( + lambda line: line.move_id != self.move_id + and (line.matched_debit_ids or line.matched_credit_ids) + ) + .mapped("move_id") + ) + if to_reverse: + default_values_list = [ + { + "date": move.date, + "ref": _("Reversal of: %s", move.name), + } + for move in to_reverse + ] + to_reverse._reverse_moves(default_values_list, cancel=True) + + def _get_reconciled_move_date(self): + """Get the date of the move to reconcile, considering the lock + dates defined in the company (user defined and tax dates). + so that the date proposed is the lock date +1 day if there's a lock date, + and the move date otherwise.""" + locks = [] + user_lock_date = self.move_id.company_id._get_user_fiscal_lock_date() + if user_lock_date: + locks.append(user_lock_date) + if self.move_id._affect_tax_report() and self.move_id.company_id.tax_lock_date: + locks.append(self.tax_lock_date) + lock_date = max(locks) + if lock_date and self.move_id.date <= lock_date: + return lock_date + timedelta(days=1) + else: + return self.move_id.date + + def _reconcile_move_line_vals(self, line, move_id=False): + vals = { + "move_id": move_id or self.move_id.id, + "account_id": line["account_id"][0], + "partner_id": line.get("partner_id") and line["partner_id"][0], + "credit": line["credit"], + "debit": line["debit"], + "currency_id": line.get("line_currency_id", self.company_id.currency_id.id), + "tax_ids": line.get("tax_ids", []), + "tax_tag_ids": line.get("tax_tag_ids", []), + "group_tax_id": line.get("group_tax_id"), + "tax_repartition_line_id": line.get("tax_repartition_line_id"), + "analytic_distribution": line.get("analytic_distribution"), + "name": line.get("name"), + "reconcile_model_id": line.get("reconcile_model_id"), + } + if line.get("line_currency_id") and line["currency_id"] != line.get( + "line_currency_id" + ): + vals["amount_currency"] = line["currency_amount"] + return vals + + @api.model_create_multi + def create(self, mvals): + result = super().create(mvals) + models = self.env["account.reconcile.model"].search( + [ + ("rule_type", "in", ["invoice_matching", "writeoff_suggestion"]), + ("company_id", "in", result.company_id.ids), + ("auto_reconcile", "=", True), + ] + ) + for record in result: + res = models._apply_rules(record, record._retrieve_partner()) + if not res: + continue + liquidity_lines, suspense_lines, other_lines = record._seek_for_lines() + data = [] + for line in liquidity_lines: + reconcile_auxiliary_id, lines = record._get_reconcile_line( + line, + "liquidity", + move=True, + ) + data += lines + reconcile_auxiliary_id = 1 + if res.get("status", "") == "write_off": + data = record._recompute_suspense_line( + *record._reconcile_data_by_model( + data, res["model"], reconcile_auxiliary_id + ), + self.manual_reference, + ) + elif res.get("amls"): + amount = self.amount_currency or self.amount + for line in res.get("amls", []): + reconcile_auxiliary_id, line_datas = record._get_reconcile_line( + line, "other", is_counterpart=True, max_amount=amount, move=True + ) + amount -= sum(line_data.get("amount") for line_data in line_datas) + data += line_datas + data = record._recompute_suspense_line( + data, + reconcile_auxiliary_id, + self.manual_reference, + ) + if not data.get("can_reconcile"): + continue + getattr( + record, "_reconcile_bank_line_%s" % record.journal_id.reconcile_mode + )(self._prepare_reconcile_line_data(data["data"])) + return result + + def _synchronize_to_moves(self, changed_fields): + """We want to avoid to change stuff (mainly amounts ) in accounting entries + when some changes happen in the reconciliation widget. The only change + (among the fields triggering the synchronization) possible from the + reconciliation widget is the partner_id field. + + So, in case of change on partner_id field we do not call super but make + only the required change (relative to partner) on accounting entries. + + And if something else changes, we then re-define reconcile_data_info to + make the data consistent (for example, if debit/credit has changed by + applying a different rate or even if there was a correction on statement + line amount). + """ + if self._context.get("skip_account_move_synchronization"): + return + if "partner_id" in changed_fields and not any( + field_name in changed_fields + for field_name in ( + "payment_ref", + "amount", + "amount_currency", + "foreign_currency_id", + "currency_id", + ) + ): + for st_line in self.with_context(skip_account_move_synchronization=True): + + ( + liquidity_lines, + suspense_lines, + _other_lines, + ) = st_line._seek_for_lines() + line_vals = {"partner_id": st_line.partner_id} + line_ids_commands = [(1, liquidity_lines.id, line_vals)] + if suspense_lines: + line_ids_commands.append((1, suspense_lines.id, line_vals)) + st_line_vals = {"line_ids": line_ids_commands} + if st_line.move_id.partner_id != st_line.partner_id: + st_line_vals["partner_id"] = st_line.partner_id.id + st_line.move_id.write(st_line_vals) + else: + super()._synchronize_to_moves(changed_fields=changed_fields) + + if not any( + field_name in changed_fields + for field_name in ( + "payment_ref", + "amount", + "amount_currency", + "foreign_currency_id", + "currency_id", + "partner_id", + ) + ): + return + # reset reconcile_data_info if amounts are not consistent anymore with the + # amounts of the accounting entries + for st_line in self: + if st_line._check_reconcile_data_changed(): + st_line.reconcile_data_info = st_line._default_reconcile_data() + + def _prepare_reconcile_line_data(self, lines): + new_lines = [] + reverse_lines = {} + for line in lines: + if not line.get("id") and not line.get("original_exchange_line_id"): + new_lines.append(line) + elif not line.get("original_exchange_line_id"): + reverse_lines[line["id"]] = line + for line in lines: + if line.get("original_exchange_line_id"): + reverse_lines[line["original_exchange_line_id"]].update( + { + "amount": reverse_lines[line["original_exchange_line_id"]][ + "amount" + ] + + line["amount"], + "credit": reverse_lines[line["original_exchange_line_id"]][ + "credit" + ] + + line["credit"], + "debit": reverse_lines[line["original_exchange_line_id"]][ + "debit" + ] + + line["debit"], + } + ) + return new_lines + list(reverse_lines.values()) + + def button_manual_reference_full_paid(self): + self.ensure_one() + if not self.reconcile_data_info["manual_reference"]: + return + manual_reference = self.reconcile_data_info["manual_reference"] + data = self.reconcile_data_info.get("data", []) + new_data = [] + reconcile_auxiliary_id = self.reconcile_data_info["reconcile_auxiliary_id"] + for line in data: + if line["reference"] == manual_reference and line.get("id"): + total_amount = -line["amount"] + line["original_amount_unsigned"] + original_amount = line["original_amount_unsigned"] + reconcile_auxiliary_id, lines = self._get_reconcile_line( + self.env["account.move.line"].browse(line["id"]), + "other", + is_counterpart=True, + reconcile_auxiliary_id=reconcile_auxiliary_id, + max_amount=original_amount, + move=True, + ) + new_data += lines + new_data.append( + { + "reference": "reconcile_auxiliary;%s" % reconcile_auxiliary_id, + "id": False, + "account_id": line["account_id"], + "partner_id": line.get("partner_id"), + "date": line["date"], + "name": line["name"], + "amount": -total_amount, + "credit": total_amount if total_amount > 0 else 0.0, + "debit": -total_amount if total_amount < 0 else 0.0, + "kind": "other", + "currency_id": line["currency_id"], + "line_currency_id": line["currency_id"], + "currency_amount": -total_amount, + } + ) + reconcile_auxiliary_id += 1 + else: + new_data.append(line) + self.reconcile_data_info = self._recompute_suspense_line( + new_data, + reconcile_auxiliary_id, + self.manual_reference, + ) + self.can_reconcile = self.reconcile_data_info.get("can_reconcile", False) + + def action_to_check(self): + self.ensure_one() + self.move_id.to_check = True + if self.can_reconcile and self.journal_id.reconcile_mode == "edit": + self.reconcile_bank_line() + + def action_checked(self): + self.ensure_one() + self.move_id.to_check = False + + def _get_reconcile_line( + self, + line, + kind, + is_counterpart=False, + max_amount=False, + from_unreconcile=False, + reconcile_auxiliary_id=False, + move=False, + is_reconciled=False, + ): + new_vals = super()._get_reconcile_line( + line, + kind, + is_counterpart=is_counterpart, + max_amount=max_amount, + from_unreconcile=from_unreconcile, + move=move, + is_reconciled=is_reconciled, + ) + rates = [] + for vals in new_vals: + rate = False + if vals["partner_id"] is False: + vals["partner_id"] = (False, self.partner_name) + if vals.get("kind") not in ("suspense", "liquidity"): + reconcile_auxiliary_id, rate = self._compute_exchange_rate( + vals, line, reconcile_auxiliary_id + ) + if rate: + rates.append(rate) + new_vals += rates + return reconcile_auxiliary_id, new_vals + + def _get_exchange_rate_amount(self, amount, currency_amount, currency, line): + if self.foreign_currency_id == currency: + # take real rate of statement line to compute the exchange rate gain/loss + real_rate = self.amount / self.amount_currency + to_amount_journal_currency = currency_amount * real_rate + to_amount_company_currency = self.currency_id._convert( + to_amount_journal_currency, + self.company_id.currency_id, + self.company_id, + self.date, + ) + to_amount = self.company_id.currency_id.round(to_amount_company_currency) + elif self.currency_id == currency and not self.foreign_currency_id: + liquidity_lines, _suspense_lines, _other_lines = self._seek_for_lines() + real_rate = ( + first(liquidity_lines).balance / first(liquidity_lines).amount_currency + ) + to_amount = self.company_id.currency_id.round(currency_amount * real_rate) + else: + to_amount = currency._convert( + currency_amount, + self.company_id.currency_id, + self.company_id, + self.date, + ) + return self.company_id.currency_id.round(to_amount - amount) + + def _compute_exchange_rate( + self, + vals, + line, + reconcile_auxiliary_id, + ): + foreign_currency = ( + self.currency_id != self.company_id.currency_id + or self.foreign_currency_id + or vals["currency_id"] != vals["line_currency_id"] + ) + if not foreign_currency or self.is_reconciled: + return reconcile_auxiliary_id, False + currency = self.env["res.currency"].browse(vals["line_currency_id"]) + amount = self._get_exchange_rate_amount( + vals.get("amount", 0), vals.get("currency_amount", 0), currency, line + ) + if currency.is_zero(amount): + return reconcile_auxiliary_id, False + account = self.company_id.expense_currency_exchange_account_id + if amount < 0: + account = self.company_id.income_currency_exchange_account_id + data = { + "is_exchange_counterpart": True, + "original_exchange_line_id": line.id, + "reference": "reconcile_auxiliary;%s" % reconcile_auxiliary_id, + "id": False, + "account_id": account.name_get()[0], + "partner_id": False, + "date": fields.Date.to_string(self.date), + "name": self.payment_ref or self.name, + "amount": amount, + "net_amount": amount, + "credit": -amount if amount < 0 else 0.0, + "debit": amount if amount > 0 else 0.0, + "kind": "other", + "currency_id": self.company_id.currency_id.id, + "line_currency_id": currency.id, + "currency_amount": 0, + } + reconcile_auxiliary_id += 1 + return reconcile_auxiliary_id, data + + def add_statement(self): + self.ensure_one() + action = self.env["ir.actions.act_window"]._for_xml_id( + "account_reconcile_oca.account_bank_statement_action_edit" + ) + previous_line_with_statement = self.env["account.bank.statement.line"].search( + [ + ("internal_index", "<", self.internal_index), + ("journal_id", "=", self.journal_id.id), + ("state", "=", "posted"), + ("statement_id", "!=", self.statement_id.id), + ("statement_id", "!=", False), + ], + limit=1, + ) + action["context"] = { + "default_journal_id": self.journal_id.id, + "default_balance_start": previous_line_with_statement.statement_id.balance_end_real, + "split_line_id": self.id, + } + return action + + def _get_reconcile_currency(self): + return ( + self.foreign_currency_id + or self.journal_id.currency_id + or self.company_id.currency_id + ) + + def add_multiple_lines(self, domain): + res = super().add_multiple_lines(domain) + lines = self.env["account.move.line"].search(domain) + for line in lines: + self._add_account_move_line(line, keep_current=True) + return res + + def _retrieve_partner(self): + if self.env.context.get("skip_retrieve_partner"): + # This hook can be used, for example, when importing files. + # With large databases, we already have the information, moreover, + # the data might be preloaded, so it has no sense to import it again + return self.partner_id + return super()._retrieve_partner() diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/models/account_journal.py b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/models/account_journal.py new file mode 100644 index 0000000..fc9c75a --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/models/account_journal.py @@ -0,0 +1,45 @@ +# Copyright 2023 Dixmit +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import _, fields, models + + +class AccountJournal(models.Model): + _inherit = "account.journal" + + reconcile_mode = fields.Selection( + [("edit", "Edit Move"), ("keep", "Keep Suspense Accounts")], + default="edit", + required=True, + ) + company_currency_id = fields.Many2one( + related="company_id.currency_id", string="Company Currency" + ) + reconcile_aggregate = fields.Selection( + [ + ("statement", "Statement"), + ("day", "Day"), + ("week", "Week"), + ("month", "Month"), + ], + string="Reconcile aggregation", + help="Aggregation to use on reconcile view", + ) + + def get_rainbowman_message(self): + self.ensure_one() + if self.get_journal_dashboard_datas()["number_to_reconcile"] > 0: + return False + return _("Well done! Everything has been reconciled") + + def open_action(self): + """ + Return OCA *Reconcile All* when core *Bank Statements* tree is requested; + leave other actions unchanged. + """ + action = super().open_action() + if action.get("xml_id") == "account.action_bank_statement_tree": + action = self.env["ir.actions.actions"]._for_xml_id( + "account_reconcile_oca.action_bank_statement_line_reconcile_all" + ) + return action diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/models/account_move_line.py b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/models/account_move_line.py new file mode 100644 index 0000000..8c50bfd --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/models/account_move_line.py @@ -0,0 +1,34 @@ +# Copyright 2023 Dixmit +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import _, models +from odoo.exceptions import ValidationError + + +class AccountMoveLine(models.Model): + + _inherit = "account.move.line" + + def action_reconcile_manually(self): + if not self: + return {} + accounts = self.mapped("account_id") + if len(accounts) > 1: + raise ValidationError( + _("You can only reconcile journal items belonging to the same account.") + ) + partner = self.mapped("partner_id") + action = self.env["ir.actions.act_window"]._for_xml_id( + "account_reconcile_oca.account_account_reconcile_act_window" + ) + action["domain"] = [("account_id", "=", self.mapped("account_id").id)] + if len(partner) == 1 and self.account_id.account_type in [ + "asset_receivable", + "liability_payable", + ]: + action["domain"] += [("partner_id", "=", partner.id)] + action["context"] = self.env.context.copy() + action["context"]["default_account_move_lines"] = self.filtered( + lambda r: not r.reconciled + ).ids + return action diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/models/account_reconcile_abstract.py b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/models/account_reconcile_abstract.py new file mode 100644 index 0000000..7884a1f --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/models/account_reconcile_abstract.py @@ -0,0 +1,130 @@ +# Copyright 2023 Dixmit +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import fields, models +from odoo.tools import float_is_zero + + +class AccountReconcileAbstract(models.AbstractModel): + _name = "account.reconcile.abstract" + _description = "Account Reconcile Abstract" + + reconcile_data_info = fields.Serialized( + compute="_compute_reconcile_data_info", + prefetch=False, + ) + company_id = fields.Many2one("res.company") + add_account_move_line_id = fields.Many2one( + "account.move.line", + check_company=True, + store=False, + default=False, + prefetch=False, + ) + manual_reference = fields.Char(store=False, default=False, prefetch=False) + manual_delete = fields.Boolean( + store=False, + default=False, + prefetch=False, + ) + currency_id = fields.Many2one("res.currency", readonly=True) + foreign_currency_id = fields.Many2one("res.currency") + company_currency_id = fields.Many2one( + related="company_id.currency_id", string="Company Currency" + ) + + def _get_reconcile_currency(self): + return self.currency_id or self.company_id._currency_id + + def _get_reconcile_line( + self, + line, + kind, + is_counterpart=False, + max_amount=False, + from_unreconcile=False, + move=False, + is_reconciled=False, + ): + date = self.date if "date" in self._fields else line.date + original_amount = amount = net_amount = line.debit - line.credit + line_currency = line.currency_id + if is_counterpart: + currency_amount = -line.amount_residual_currency or line.amount_residual + amount = -line.amount_residual + currency = line.currency_id or line.company_id.currency_id + original_amount = net_amount = -line.amount_residual + if max_amount: + dest_currency = self._get_reconcile_currency() + if currency == dest_currency: + real_currency_amount = currency_amount + elif self.company_id.currency_id == dest_currency: + real_currency_amount = amount + else: + real_currency_amount = self.company_id.currency_id._convert( + amount, + dest_currency, + self.company_id, + date, + ) + if ( + -real_currency_amount > max_amount > 0 + or -real_currency_amount < max_amount < 0 + ): + currency_max_amount = self._get_reconcile_currency()._convert( + max_amount, currency, self.company_id, date + ) + amount = currency_max_amount + net_amount = -max_amount + currency_amount = -amount + amount = currency._convert( + currency_amount, + self.company_id.currency_id, + self.company_id, + date, + ) + elif is_reconciled: + currency_amount = line.amount_currency + else: + currency_amount = self.amount_currency or self.amount + line_currency = self._get_reconcile_currency() + vals = { + "move_id": move and line.move_id.id, + "move": move and line.move_id.name, + "reference": "account.move.line;%s" % line.id, + "id": line.id, + "account_id": line.account_id.name_get()[0], + "partner_id": line.partner_id and line.partner_id.name_get()[0] or False, + "date": fields.Date.to_string(line.date), + "name": line.name or line.move_id.name, + "debit": amount if amount > 0 else 0.0, + "credit": -amount if amount < 0 else 0.0, + "amount": amount, + "net_amount": amount - net_amount, + "currency_id": self.company_id.currency_id.id, + "line_currency_id": line_currency.id, + "currency_amount": currency_amount, + "analytic_distribution": line.analytic_distribution, + "kind": kind, + } + if from_unreconcile: + vals.update( + { + "credit": vals["debit"] and from_unreconcile["debit"], + "debit": vals["credit"] and from_unreconcile["credit"], + "amount": from_unreconcile["amount"], + "net_amount": from_unreconcile["amount"], + "currency_amount": from_unreconcile["currency_amount"], + } + ) + if not float_is_zero( + amount - original_amount, precision_digits=line.currency_id.decimal_places + ): + vals["original_amount"] = abs(original_amount) + vals["original_amount_unsigned"] = original_amount + if is_counterpart: + vals["counterpart_line_ids"] = line.ids + return [vals] + + def add_multiple_lines(self, domain): + self.ensure_one() diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/models/res_company.py b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/models/res_company.py new file mode 100644 index 0000000..a0b0a07 --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/models/res_company.py @@ -0,0 +1,39 @@ +# Copyright 2024 Dixmit +# Copyright 2025 Tecnativa - Víctor Martínez +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class ResCompany(models.Model): + _inherit = "res.company" + + reconcile_aggregate = fields.Selection( + selection=lambda self: self.env["account.journal"] + ._fields["reconcile_aggregate"] + .selection + ) + + def _get_fiscalyear_lock_statement_lines_redirect_action( + self, unreconciled_statement_lines + ): + """Define the appropriate views that this method will have, by default the + account module does not add any. + """ + action = super()._get_fiscalyear_lock_statement_lines_redirect_action( + unreconciled_statement_lines + ) + if len(unreconciled_statement_lines) == 1: + custom_action = self.env["ir.actions.actions"]._for_xml_id( + "account_reconcile_oca.action_bank_statement_line_create" + ) + action.update(views=custom_action["views"]) + else: + custom_action = self.env["ir.actions.actions"]._for_xml_id( + "account_reconcile_oca.action_bank_statement_line_reconcile_all" + ) + action.update( + view_mode=custom_action["view_mode"], + views=custom_action["views"], + ) + return action diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/models/res_config_settings.py b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/models/res_config_settings.py new file mode 100644 index 0000000..8bcc218 --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/models/res_config_settings.py @@ -0,0 +1,12 @@ +# Copyright 2024 Dixmit +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class ResConfigSettings(models.TransientModel): + _inherit = "res.config.settings" + + reconcile_aggregate = fields.Selection( + related="company_id.reconcile_aggregate", readonly=False + ) diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/readme/CONTRIBUTORS.rst b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000..8500476 --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Enric Tobella diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/readme/CREDITS.rst b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/readme/CREDITS.rst new file mode 100644 index 0000000..96d0d85 --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/readme/CREDITS.rst @@ -0,0 +1 @@ +The system has been improved to handle currency amounts more effectively with the financial support of Sygel Technology. diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/readme/DESCRIPTION.rst b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/readme/DESCRIPTION.rst new file mode 100644 index 0000000..e50452f --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +This addon allows to reconcile bank statements and account marked as `reconcile`. diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/readme/ROADMAP.rst b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/readme/ROADMAP.rst new file mode 100644 index 0000000..24e9bc5 --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/readme/ROADMAP.rst @@ -0,0 +1,3 @@ +The following bugs are already detected: + +* Creation of activities on the chatter do show automatically diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/readme/USAGE.rst b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/readme/USAGE.rst new file mode 100644 index 0000000..ca7c27e --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/readme/USAGE.rst @@ -0,0 +1,19 @@ +Bank reconcile +~~~~~~~~~~~~~~ + +Access `Invoicing / Dashboard` with a user with Full Acounting capabilities. +Select reconcile on the journal of your choice. + +Account reconcile +~~~~~~~~~~~~~~~~~ + +Access `Invoicing / Accounting / Actions / Reconcile` +All the possible reconcile options will show and you will be able to reconcile properly. +You can access the same widget from accounts and Partners. + + +Note : in case this module is installed on a migrated database, the reconciliation models will not be set by default. So they need to be set manually. + +![Reconciliation model : full payment](../static/description/reconcile-model-full.png) + +![Reconciliation model : partial payment](../static/description/reconcile-model-partial.png) diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/security/ir.model.access.csv b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/security/ir.model.access.csv new file mode 100644 index 0000000..d73fa14 --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_account_account_reconcile,account.account.reconcile,model_account_account_reconcile,account.group_account_user,1,1,0,0 +access_account_account_reconcile_data,account.account.reconcile,model_account_account_reconcile_data,account.group_account_user,1,1,1,1 diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/security/security.xml b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/security/security.xml new file mode 100644 index 0000000..41130af --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/security/security.xml @@ -0,0 +1,8 @@ + + + + account.account.reconcile multi-company + + [('company_id','in',company_ids)] + + diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/description/icon.png b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 Q3=9kmp00i_>zopr09!l7U;qFB literal 0 HcmV?d00001 diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/description/index.html b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/description/index.html new file mode 100644 index 0000000..c676fc2 --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/description/index.html @@ -0,0 +1,467 @@ + + + + + +README.rst + + + +
+ + + +Odoo Community Association + +
+

Account Reconcile OCA

+ +

Beta License: AGPL-3 OCA/account-reconcile Translate me on Weblate Try me on Runboat

+

This addon allows to reconcile bank statements and account marked as reconcile.

+

Table of contents

+ +
+

Usage

+
+

Bank reconcile

+

Access Invoicing / Dashboard with a user with Full Acounting capabilities. +Select reconcile on the journal of your choice.

+
+
+

Account reconcile

+

Access Invoicing / Accounting / Actions / Reconcile +All the possible reconcile options will show and you will be able to reconcile properly. +You can access the same widget from accounts and Partners.

+

Note : in case this module is installed on a migrated database, the reconciliation models will not be set by default. So they need to be set manually.

+

![Reconciliation model : full payment](../static/description/reconcile-model-full.png)

+

![Reconciliation model : partial payment](../static/description/reconcile-model-partial.png)

+
+
+
+

Known issues / Roadmap

+

The following bugs are already detected:

+
    +
  • Creation of activities on the chatter do show automatically
  • +
+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

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

+
+
+

Credits

+
+

Authors

+
    +
  • CreuBlanca
  • +
  • Dixmit
  • +
+
+
+

Contributors

+
    +
  • Enric Tobella
  • +
+
+
+

Other credits

+

The system has been improved to handle currency amounts more effectively with the financial support of Sygel Technology.

+
+
+

Maintainers

+

This module is maintained by the OCA.

+ +Odoo Community Association + +

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

+

Current maintainer:

+

etobella

+

This module is part of the OCA/account-reconcile project on GitHub.

+

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

+
+
+
+
+ + diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/description/reconcile-model-full.png b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/description/reconcile-model-full.png new file mode 100644 index 0000000000000000000000000000000000000000..4aeff03c21753a1a74b74c4baa17773231890452 GIT binary patch literal 135838 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

(t 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 literal 0 HcmV?d00001 diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/description/reconcile-model-partial.png b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/description/reconcile-model-partial.png new file mode 100644 index 0000000000000000000000000000000000000000..7454c0426b6292a35b6365a760dc3a5a271daac6 GIT binary patch literal 137158 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 z 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%0Dch1ME{)O!!ou5mNI07N=!#ih1sVn5T*R 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 E0PgX6^#A|> literal 0 HcmV?d00001 diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/reconcile/reconcile_controller.esm.js b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/reconcile/reconcile_controller.esm.js new file mode 100644 index 0000000..34ea33e --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/reconcile/reconcile_controller.esm.js @@ -0,0 +1,144 @@ +/** @odoo-module */ +const {onMounted, onWillStart, useState, useSubEnv} = owl; +import {KanbanController} from "@web/views/kanban/kanban_controller"; +import {View} from "@web/views/view"; +import {formatMonetary} from "@web/views/fields/formatters"; +import {useService} from "@web/core/utils/hooks"; + +export class ReconcileController extends KanbanController { + async setup() { + super.setup(); + this.state = useState({ + selectedRecordId: null, + journalBalance: 0, + currency: false, + }); + useSubEnv({ + parentController: this, + exposeController: this.exposeController.bind(this), + }); + this.effect = useService("effect"); + this.orm = useService("orm"); + this.action = useService("action"); + this.router = useService("router"); + this.activeActions = this.props.archInfo.activeActions; + this.model.addEventListener("update", () => this.selectRecord(), {once: true}); + onWillStart(() => { + this.updateJournalInfo(); + }); + onMounted(() => { + this.selectRecord(); + }); + } + get journalId() { + if (this.props.context.active_model === "account.journal") { + return this.props.context.active_id; + } + return false; + } + async updateJournalInfo() { + var journalId = this.journalId; + if (!journalId) { + return; + } + var result = await this.orm.call("account.journal", "read", [ + [journalId], + ["current_statement_balance", "currency_id", "company_currency_id"], + ]); + this.state.journalBalance = result[0].current_statement_balance; + this.state.currency = (result[0].currency_id || + result[0].company_currency_id)[0]; + } + get journalBalanceStr() { + if (!this.state.journalBalance) { + return ""; + } + return formatMonetary(this.state.journalBalance, { + currencyId: this.state.currency, + }); + } + exposeController(controller) { + this.form_controller = controller; + } + async onClickNewButton() { + const action = await this.orm.call(this.props.resModel, "action_new_line", [], { + context: this.props.context, + }); + this.action.doAction(action, { + onClose: async () => { + await this.model.root.load(); + await this.updateJournalInfo(); + this.render(true); + }, + }); + } + async setRainbowMan(message) { + this.effect.add({ + message, + type: "rainbow_man", + }); + } + get viewReconcileInfo() { + return { + resId: this.state.selectedRecordId, + type: "form", + noBreadcrumbs: true, + context: { + ...(this.props.context || {}), + form_view_ref: this.props.context.view_ref, + }, + display: {controlPanel: false}, + mode: this.props.mode || "edit", + resModel: this.props.resModel, + }; + } + async selectRecord(record) { + var resId = undefined; + if (record === undefined && this.props.resId) { + resId = this.props.resId; + } else if (record === undefined) { + var records = this.model.root.records.filter( + (modelRecord) => + !modelRecord.data.is_reconciled || modelRecord.data.to_check + ); + if (records.length === 0) { + records = this.model.root.records; + if (records.length === 0) { + this.state.selectedRecordId = false; + return; + } + } + resId = records[0].resId; + } else { + resId = record.resId; + } + if (this.state.selectedRecordId && this.state.selectedRecordId !== resId) { + if (this.form_controller && this.form_controller.model.root.isDirty) { + await this.form_controller.model.root.save({ + noReload: true, + stayInEdition: true, + useSaveErrorDialog: true, + }); + await this.model.root.load(); + await this.render(true); + } + } + if (!this.state.selectedRecordId || this.state.selectedRecordId !== resId) { + this.state.selectedRecordId = resId; + } + this.updateURL(resId); + } + async openRecord(record) { + this.selectRecord(record); + } + updateURL(resId) { + this.router.pushState({id: resId}); + } +} +ReconcileController.components = { + ...ReconcileController.components, + View, +}; + +ReconcileController.template = "account_reconcile_oca.ReconcileController"; +ReconcileController.defaultProps = {}; diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/reconcile/reconcile_kanban_record.esm.js b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/reconcile/reconcile_kanban_record.esm.js new file mode 100644 index 0000000..a97c525 --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/reconcile/reconcile_kanban_record.esm.js @@ -0,0 +1,14 @@ +/** @odoo-module */ + +import {KanbanRecord} from "@web/views/kanban/kanban_record"; + +export class ReconcileKanbanRecord extends KanbanRecord { + getRecordClasses() { + var result = super.getRecordClasses(); + if (this.props.selectedRecordId === this.props.record.resId) { + result += " o_kanban_record_reconcile_oca_selected"; + } + return result; + } +} +ReconcileKanbanRecord.props = [...KanbanRecord.props, "selectedRecordId?"]; diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/reconcile/reconcile_renderer.esm.js b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/reconcile/reconcile_renderer.esm.js new file mode 100644 index 0000000..44b662c --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/reconcile/reconcile_renderer.esm.js @@ -0,0 +1,64 @@ +/** @odoo-module */ + +import {KanbanRenderer} from "@web/views/kanban/kanban_renderer"; +import {ReconcileKanbanRecord} from "./reconcile_kanban_record.esm.js"; +import {formatMonetary} from "@web/views/fields/formatters"; +import {useService} from "@web/core/utils/hooks"; + +export class ReconcileRenderer extends KanbanRenderer { + setup() { + super.setup(); + this.action = useService("action"); + this.orm = useService("orm"); + } + getAggregates() { + if ( + this.env.parentController.props.resModel !== "account.bank.statement.line" + ) { + return []; + } + const {list} = this.props; + const aggregates = []; + for (const record of list.records) { + const aggregateId = record.data.aggregate_id && record.data.aggregate_id; + if ( + aggregateId && + (!aggregates.length || + aggregates[aggregates.length - 1].id !== aggregateId) + ) { + aggregates.push({ + id: aggregateId, + name: record.data.aggregate_name, + balance: record.data.statement_balance_end_real, + balanceStr: formatMonetary(record.data.statement_balance_end_real, { + currencyId: record.data.currency_id[0], + }), + }); + } + } + return aggregates; + } + async onClickStatement(statementId) { + const action = await this.orm.call( + "account.bank.statement", + "action_open_statement", + [[statementId]], + { + context: this.props.context, + } + ); + const model = this.props.list.model; + this.action.doAction(action, { + async onClose() { + model.root.load(); + }, + }); + } +} + +ReconcileRenderer.components = { + ...KanbanRenderer.components, + KanbanRecord: ReconcileKanbanRecord, +}; +ReconcileRenderer.template = "account_reconcile_oca.ReconcileRenderer"; +ReconcileRenderer.props = [...KanbanRenderer.props, "selectedRecordId?"]; diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/reconcile/reconcile_view.esm.js b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/reconcile/reconcile_view.esm.js new file mode 100644 index 0000000..4bcb8ad --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/reconcile/reconcile_view.esm.js @@ -0,0 +1,16 @@ +/** @odoo-module */ + +import {ReconcileController} from "./reconcile_controller.esm.js"; +import {ReconcileRenderer} from "./reconcile_renderer.esm.js"; +import {kanbanView} from "@web/views/kanban/kanban_view"; +import {registry} from "@web/core/registry"; + +export const reconcileView = { + ...kanbanView, + Renderer: ReconcileRenderer, + Controller: ReconcileController, + buttonTemplate: "account_reconcile.ReconcileView.Buttons", + searchMenuTypes: ["filter"], +}; + +registry.category("views").add("reconcile", reconcileView); diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/reconcile_form/reconcile_form_controller.esm.js b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/reconcile_form/reconcile_form_controller.esm.js new file mode 100644 index 0000000..ae5640d --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/reconcile_form/reconcile_form_controller.esm.js @@ -0,0 +1,45 @@ +/** @odoo-module */ + +import {FormController} from "@web/views/form/form_controller"; +import {useService} from "@web/core/utils/hooks"; +import {useViewButtons} from "@web/views/view_button/view_button_hook"; +const {useRef} = owl; + +export class ReconcileFormController extends FormController { + setup() { + super.setup(...arguments); + this.env.exposeController(this); + this.orm = useService("orm"); + const rootRef = useRef("root"); + useViewButtons(this.model, rootRef, { + reload: this.reloadFormController.bind(this), + beforeExecuteAction: this.beforeExecuteActionButton.bind(this), + afterExecuteAction: this.afterExecuteActionButton.bind(this), + }); + } + displayName() { + return this.env.config.getDisplayName(); + } + async reloadFormController() { + var is_reconciled = this.model.root.data.is_reconciled; + await this.model.root.load(); + if (this.env.parentController) { + // We will update the parent controller every time we reload the form. + await this.env.parentController.model.root.load(); + await this.env.parentController.render(true); + if (!is_reconciled && this.model.root.data.is_reconciled) { + // This only happens when we press the reconcile button for showing rainbow man + const message = await this.orm.call( + "account.journal", + "get_rainbowman_message", + [[this.model.root.data.journal_id[0]]] + ); + if (message) { + this.env.parentController.setRainbowMan(message); + } + // Refreshing + this.env.parentController.selectRecord(); + } + } + } +} diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/reconcile_form/reconcile_form_notebook.esm.js b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/reconcile_form/reconcile_form_notebook.esm.js new file mode 100644 index 0000000..1a89716 --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/reconcile_form/reconcile_form_notebook.esm.js @@ -0,0 +1,32 @@ +/** @odoo-module */ +import {Notebook} from "@web/core/notebook/notebook"; +import {onWillDestroy} from "@odoo/owl"; + +export class ReconcileFormNotebook extends Notebook { + setup() { + super.setup(...arguments); + const onPageNavigate = this.onPageNavigate.bind(this); + this.env.bus.addEventListener("RECONCILE_PAGE_NAVIGATE", onPageNavigate); + + onWillDestroy(() => { + this.env.bus.removeEventListener("RECONCILE_PAGE_NAVIGATE", onPageNavigate); + }); + } + onPageNavigate(ev) { + for (const page of this.pages) { + if ( + ev.detail.detail.name === page[1].name && + this.state.currentPage !== page[0] + ) { + ev.preventDefault(); + ev.detail.detail.originalEv.preventDefault(); + this.state.currentPage = page[0]; + return; + } + } + } +} + +ReconcileFormNotebook.props = { + ...Notebook.props, +}; diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/reconcile_form/reconcile_form_renderer.esm.js b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/reconcile_form/reconcile_form_renderer.esm.js new file mode 100644 index 0000000..c0a0d13 --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/reconcile_form/reconcile_form_renderer.esm.js @@ -0,0 +1,11 @@ +/** @odoo-module */ + +import {FormRenderer} from "@web/views/form/form_renderer"; +import {ReconcileFormNotebook} from "./reconcile_form_notebook.esm.js"; + +export class ReconcileFormRenderer extends FormRenderer {} + +ReconcileFormRenderer.components = { + ...ReconcileFormRenderer.components, + Notebook: ReconcileFormNotebook, +}; diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/reconcile_form/reconcile_form_view.esm.js b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/reconcile_form/reconcile_form_view.esm.js new file mode 100644 index 0000000..3a2b031 --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/reconcile_form/reconcile_form_view.esm.js @@ -0,0 +1,14 @@ +/** @odoo-module */ + +import {ReconcileFormController} from "./reconcile_form_controller.esm.js"; +import {ReconcileFormRenderer} from "./reconcile_form_renderer.esm.js"; +import {formView} from "@web/views/form/form_view"; +import {registry} from "@web/core/registry"; + +export const ReconcileFormView = { + ...formView, + Controller: ReconcileFormController, + Renderer: ReconcileFormRenderer, +}; + +registry.category("views").add("reconcile_form", ReconcileFormView); diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/reconcile_manual/reconcile_manual_controller.esm.js b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/reconcile_manual/reconcile_manual_controller.esm.js new file mode 100644 index 0000000..ea49dbd --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/reconcile_manual/reconcile_manual_controller.esm.js @@ -0,0 +1,30 @@ +/** @odoo-module */ + +import {FormController} from "@web/views/form/form_controller"; +import {useViewButtons} from "@web/views/view_button/view_button_hook"; +const {useRef} = owl; + +export class ReconcileManualController extends FormController { + setup() { + super.setup(...arguments); + this.env.exposeController(this); + const rootRef = useRef("root"); + useViewButtons(this.model, rootRef, { + reload: this.reloadFormController.bind(this), + beforeExecuteAction: this.beforeExecuteActionButton.bind(this), + afterExecuteAction: this.afterExecuteActionButton.bind(this), + }); + } + async reloadFormController() { + try { + await this.model.root.load(); + } catch (error) { + // This should happen when we reconcile a line (no more possible data...) + if (this.env.parentController) { + await this.env.parentController.model.root.load(); + await this.env.parentController.render(true); + this.env.parentController.selectRecord(); + } + } + } +} diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/reconcile_manual/reconcile_manual_view.esm.js b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/reconcile_manual/reconcile_manual_view.esm.js new file mode 100644 index 0000000..36b974a --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/reconcile_manual/reconcile_manual_view.esm.js @@ -0,0 +1,12 @@ +/** @odoo-module */ + +import {ReconcileManualController} from "./reconcile_manual_controller.esm.js"; +import {formView} from "@web/views/form/form_view"; +import {registry} from "@web/core/registry"; + +export const FormManualReconcileView = { + ...formView, + Controller: ReconcileManualController, +}; + +registry.category("views").add("reconcile_manual", FormManualReconcileView); diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/reconcile_move_line/reconcile_move_line_controller.esm.js b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/reconcile_move_line/reconcile_move_line_controller.esm.js new file mode 100644 index 0000000..82ab8cb --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/reconcile_move_line/reconcile_move_line_controller.esm.js @@ -0,0 +1,27 @@ +/** @odoo-module */ + +import {ListController} from "@web/views/list/list_controller"; + +export class ReconcileMoveLineController extends ListController { + async openRecord(record) { + var data = {}; + data[this.props.parentField] = [record.resId, record.display_name]; + this.props.parentRecord.update(data); + } + async clickAddAll() { + await this.props.parentRecord.save(); + await this.orm.call(this.props.parentRecord.resModel, "add_multiple_lines", [ + this.props.parentRecord.resIds, + this.model.root.domain, + ]); + await this.props.parentRecord.load(); + this.props.parentRecord.model.notify(); + } +} + +ReconcileMoveLineController.template = `account_reconcile_oca.ReconcileMoveLineController`; +ReconcileMoveLineController.props = { + ...ListController.props, + parentRecord: {type: Object, optional: true}, + parentField: {type: String, optional: true}, +}; diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/reconcile_move_line/reconcile_move_line_renderer.esm.js b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/reconcile_move_line/reconcile_move_line_renderer.esm.js new file mode 100644 index 0000000..10958e4 --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/reconcile_move_line/reconcile_move_line_renderer.esm.js @@ -0,0 +1,22 @@ +/** @odoo-module */ + +import {ListRenderer} from "@web/views/list/list_renderer"; + +export class ReconcileMoveLineRenderer extends ListRenderer { + getRowClass(record) { + var classes = super.getRowClass(record); + if ( + this.props.parentRecord.data.reconcile_data_info.counterparts.includes( + record.resId + ) + ) { + classes += " o_field_account_reconcile_oca_move_line_selected"; + } + return classes; + } +} +ReconcileMoveLineRenderer.props = [ + ...ListRenderer.props, + "parentRecord", + "parentField", +]; diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/reconcile_move_line/reconcile_move_line_view.esm.js b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/reconcile_move_line/reconcile_move_line_view.esm.js new file mode 100644 index 0000000..979570b --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/reconcile_move_line/reconcile_move_line_view.esm.js @@ -0,0 +1,16 @@ +/** @odoo-module */ + +import {ReconcileMoveLineController} from "./reconcile_move_line_controller.esm.js"; +import {ReconcileMoveLineRenderer} from "./reconcile_move_line_renderer.esm.js"; + +import {listView} from "@web/views/list/list_view"; +import {registry} from "@web/core/registry"; + +export const ReconcileMoveLineView = { + ...listView, + Controller: ReconcileMoveLineController, + Renderer: ReconcileMoveLineRenderer, + buttonTemplate: "reconcile_move_line.ListView.Buttons", +}; + +registry.category("views").add("reconcile_move_line", ReconcileMoveLineView); diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/widgets/reconcile_chatter_field.esm.js b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/widgets/reconcile_chatter_field.esm.js new file mode 100644 index 0000000..e53a0b0 --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/widgets/reconcile_chatter_field.esm.js @@ -0,0 +1,15 @@ +/** @odoo-module **/ + +import {ChatterContainer} from "@mail/components/chatter_container/chatter_container"; +import {registry} from "@web/core/registry"; + +const {Component} = owl; + +export class AccountReconcileChatterWidget extends Component {} +AccountReconcileChatterWidget.template = + "account_reconcile_oca.AccountReconcileChatterWidget"; +AccountReconcileChatterWidget.components = {...Component.components, ChatterContainer}; + +registry + .category("fields") + .add("account_reconcile_oca_chatter", AccountReconcileChatterWidget); diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/widgets/reconcile_data_widget.esm.js b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/widgets/reconcile_data_widget.esm.js new file mode 100644 index 0000000..c67e796 --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/widgets/reconcile_data_widget.esm.js @@ -0,0 +1,126 @@ +/** @odoo-module **/ + +import fieldUtils from "web.field_utils"; +import {float_is_zero} from "web.utils"; +import {registry} from "@web/core/registry"; +import session from "web.session"; +import {useService} from "@web/core/utils/hooks"; + +const {Component} = owl; + +export class AccountReconcileDataWidget extends Component { + setup() { + super.setup(...arguments); + this.orm = useService("orm"); + this.action = useService("action"); + this.foreignCurrency = + this.props && + this.props.record && + (this.props.record.data.foreign_currency_id || + this.props.record.data.currency_id[0] !== + this.props.record.data.company_currency_id[0] || + this.props.record.data[this.props.name].data.some( + (item) => item.line_currency_id !== item.currency_id + )); + } + getReconcileLines() { + var data = this.props.record.data[this.props.name].data; + const totals = {debit: 0, credit: 0}; + if (!data || !data.length) { + return {lines: [], totals}; + } + for (var line in data) { + data[line].amount_format = fieldUtils.format.monetary( + data[line].amount, + undefined, + { + currency: session.get_currency(data[line].currency_id), + } + ); + data[line].debit_format = fieldUtils.format.monetary( + data[line].debit, + undefined, + { + currency: session.get_currency(data[line].currency_id), + } + ); + data[line].credit_format = fieldUtils.format.monetary( + data[line].credit, + undefined, + { + currency: session.get_currency(data[line].currency_id), + } + ); + data[line].amount_currency_format = fieldUtils.format.monetary( + data[line].currency_amount, + undefined, + { + currency: session.get_currency(data[line].line_currency_id), + } + ); + if (data[line].original_amount) { + data[line].original_amount_format = fieldUtils.format.monetary( + data[line].original_amount, + { + currency: session.get_currency(data[line].currency_id), + } + ); + } + data[line].date_format = fieldUtils.format.date( + fieldUtils.parse.date(data[line].date, undefined, {isUTC: true}) + ); + totals.debit += data[line].debit || 0; + totals.credit += data[line].credit || 0; + } + totals.balance = totals.debit - totals.credit; + const firstLine = Object.values(data)[0] || {}; + const currency = session.get_currency(firstLine.currency_id); + const decimals = currency.digits[1]; + const hasOpenBalance = !float_is_zero(totals.balance, decimals); + let openDebitFmt = null; + let openCreditFmt = null; + if (totals.balance < 0) { + openDebitFmt = fieldUtils.format.monetary(Math.abs(totals.balance), { + currency: currency, + }); + } else { + openCreditFmt = fieldUtils.format.monetary(totals.balance, { + currency: currency, + }); + } + return {lines: data, hasOpenBalance, openDebitFmt, openCreditFmt}; + } + onTrashLine(ev, line) { + ev.stopPropagation(); + this.props.record.update({ + manual_reference: line.reference, + manual_delete: true, + }); + } + selectReconcileLine(ev, line) { + this.props.record.update({ + manual_reference: line.reference, + }); + const triggerEv = new CustomEvent("reconcile-page-navigate", { + detail: { + name: "manual", + originalEv: ev, + }, + }); + this.env.bus.trigger("RECONCILE_PAGE_NAVIGATE", triggerEv); + } + async openMove(ev, moveId) { + ev.preventDefault(); + ev.stopPropagation(); + console.log(moveId); + const action = await this.orm.call("account.move", "get_formview_action", [ + [moveId], + ]); + this.action.doAction(action); + } +} +AccountReconcileDataWidget.template = "account_reconcile_oca.ReconcileDataWidget"; + +registry + .category("fields") + .add("account_reconcile_oca_data", AccountReconcileDataWidget); diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/widgets/reconcile_move_line_widget.esm.js b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/widgets/reconcile_move_line_widget.esm.js new file mode 100644 index 0000000..eef0808 --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/widgets/reconcile_move_line_widget.esm.js @@ -0,0 +1,52 @@ +/** @odoo-module **/ + +import {View} from "@web/views/view"; +import {registry} from "@web/core/registry"; + +const {Component, useSubEnv} = owl; + +export class AccountReconcileMatchWidget extends Component { + setup() { + // Necessary in order to avoid a loop + super.setup(...arguments); + useSubEnv({ + config: {}, + parentController: this.env.parentController, + }); + } + get listViewProperties() { + return { + type: "list", + display: { + controlPanel: { + // Hiding the control panel buttons + "top-left": false, + "bottom-left": true, + }, + }, + resModel: this.props.record.fields[this.props.name].relation, + searchMenuTypes: ["filter"], + domain: this.props.record.getFieldDomain(this.props.name).toList(), + context: { + ...this.props.record.getFieldContext(this.props.name), + }, + // Disables de selector + allowSelectors: false, + // We need to force the search view in order to show the right one + searchViewId: false, + parentRecord: this.props.record, + parentField: this.props.name, + showButtons: false, + }; + } +} +AccountReconcileMatchWidget.template = "account_reconcile_oca.ReconcileMatchWidget"; + +AccountReconcileMatchWidget.components = { + ...AccountReconcileMatchWidget.components, + View, +}; + +registry + .category("fields") + .add("account_reconcile_oca_match", AccountReconcileMatchWidget); diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/widgets/selection_badge_uncheck.esm.js b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/widgets/selection_badge_uncheck.esm.js new file mode 100644 index 0000000..8d238cc --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/js/widgets/selection_badge_uncheck.esm.js @@ -0,0 +1,29 @@ +/** @odoo-module **/ +import { + BadgeSelectionField, + preloadSelection, +} from "@web/views/fields/badge_selection/badge_selection_field"; +import {registry} from "@web/core/registry"; + +export class FieldSelectionBadgeUncheck extends BadgeSelectionField { + async onChange(value) { + var old_value = this.props.value; + if (this.props.type === "many2one") { + old_value = old_value[0]; + } + if (value === old_value) { + this.props.update(false); + return; + } + super.onChange(...arguments); + } +} + +FieldSelectionBadgeUncheck.supportedTypes = ["many2one", "selection"]; +FieldSelectionBadgeUncheck.additionalClasses = ["o_field_selection_badge"]; +registry.category("fields").add("selection_badge_uncheck", FieldSelectionBadgeUncheck); + +registry.category("preloadedData").add("selection_badge_uncheck", { + loadOnTypes: ["many2one"], + preload: preloadSelection, +}); diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/scss/reconcile.scss b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/scss/reconcile.scss new file mode 100644 index 0000000..350e90c --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/scss/reconcile.scss @@ -0,0 +1,100 @@ +.o_account_reconcile_oca { + display: -webkit-box; + display: -webkit-flex; + display: flex; + -webkit-flex-flow: row wrap; + flex-flow: row wrap; + height: 100%; + .o_kanban_renderer.o_kanban_ungrouped .o_kanban_record { + &:hover { + .o_reconcile_create_statement { + opacity: 100; + } + } + .row { + // We need to add this in order to make remove horizontal scroll + margin: 0; + } + margin: 0 0 0; + min-width: fit-content; + width: 100%; + .o_reconcile_create_statement { + position: absolute; + height: 0px; + margin: 0; + padding: 0 0 0 0; + border: 0; + top: -14px; + opacity: 0; + } + > div { + border-right: thick solid rgba(0, 0, 0, 0); + } + &.o_kanban_record_reconcile_oca_selected > div { + border-right: thick solid $o-brand-primary; + } + } + .o_account_reconcile_oca_selector { + width: 30%; + height: 100%; + padding: 0; + position: relative; + border-right: 1px solid $o-gray-300; + overflow: auto; + } + .o_account_reconcile_oca_info { + width: 70%; + height: 100%; + overflow: auto; + } + .o_form_view { + .btn-info:not(.dropdown-toggle):not(.dropdown-item) { + text-transform: uppercase; + } + .o_form_statusbar.o_account_reconcile_oca_statusbar { + .btn:not(.dropdown-toggle):not(.dropdown-item) { + text-transform: uppercase; + } + height: 40px; + > .o_statusbar_buttons { + height: 100%; + > .btn { + margin: 0; + height: 100%; + padding: 10px; + border-radius: 0; + } + } + } + .o_field_account_reconcile_oca_data { + .o_field_account_reconcile_oca_balance_float { + .o_field_account_reconcile_oca_balance_original_float { + text-decoration: line-through; + } + } + } + .o_field_widget.o_field_account_reconcile_oca_match { + display: inline; + } + .o_field_account_reconcile_oca_move_line_selected { + background-color: rgba($o-brand-primary, 0.2); + color: #000; + } + .o_reconcile_widget_table { + .o_reconcile_widget_line { + &.liquidity { + font-weight: bold; + } + &.selected { + background-color: rgba($o-brand-primary, 0.2); + } + &.suspense { + color: $o-gray-500; + } + } + } + } +} +.o_field_account_reconcile_oca_chatter { + width: 100%; +} diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/xml/reconcile.xml b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/xml/reconcile.xml new file mode 100644 index 0000000..d6b8d35 --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/static/src/xml/reconcile.xml @@ -0,0 +1,223 @@ + + + + +

+ + + + + +
+ + + +
+
+
+ + + + + + props.selectedRecordId + +
+ + + + state.selectedRecordId + + + model.useSampleModel ? 'o_view_sample_data o_account_reconcile_oca' : 'o_account_reconcile_oca' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AccountPartnerDateLabel + Amount in currency + DebitCredit +
+
+
+ + + +
+
+ + + + + +
Open Balance + + +
+
+ + + + + + props.parentRecord + props.parentField + + + + + + + + diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/tests/__init__.py b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/tests/__init__.py new file mode 100644 index 0000000..17f193e --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/tests/__init__.py @@ -0,0 +1,2 @@ +from . import test_bank_account_reconcile +from . import test_account_reconcile diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/tests/test_account_reconcile.py b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/tests/test_account_reconcile.py new file mode 100644 index 0000000..f68265b --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/tests/test_account_reconcile.py @@ -0,0 +1,304 @@ +from odoo.tests import Form, tagged + +from odoo.addons.account.tests.common import TestAccountReconciliationCommon + + +@tagged("post_install", "-at_install") +class TestReconciliationWidget(TestAccountReconciliationCommon): + @classmethod + def setUpClass(cls, chart_template_ref=None): + super().setUpClass(chart_template_ref=chart_template_ref) + + cls.acc_bank_stmt_model = cls.env["account.bank.statement"] + cls.acc_bank_stmt_line_model = cls.env["account.bank.statement.line"] + cls.bank_journal_usd.suspense_account_id = ( + cls.company.account_journal_suspense_account_id + ) + cls.bank_journal_euro.suspense_account_id = ( + cls.company.account_journal_suspense_account_id + ) + cls.current_assets_account = ( + cls.env["account.account"] + .search( + [ + ("account_type", "=", "asset_current"), + ("company_id", "=", cls.company.id), + ], + limit=1, + ) + .copy() + ) + cls.current_assets_account.reconcile = True + cls.asset_receivable_account = ( + cls.env["account.account"] + .search( + [ + ("account_type", "=", "asset_receivable"), + ("company_id", "=", cls.company.id), + ], + limit=1, + ) + .copy() + ) + cls.asset_receivable_account.reconcile = True + cls.equity_account = ( + cls.env["account.account"] + .search( + [ + ("account_type", "=", "equity"), + ("company_id", "=", cls.company.id), + ], + limit=1, + ) + .copy() + ) + cls.non_current_assets_account = ( + cls.env["account.account"] + .search( + [ + ("account_type", "=", "asset_non_current"), + ("company_id", "=", cls.company.id), + ], + limit=1, + ) + .copy() + ) + cls.non_current_assets_account.reconcile = True + cls.move_1 = cls.env["account.move"].create( + { + "line_ids": [ + ( + 0, + 0, + { + "account_id": cls.current_assets_account.id, + "name": "DEMO", + "credit": 100, + }, + ), + ( + 0, + 0, + { + "account_id": cls.non_current_assets_account.id, + "name": "DEMO", + "debit": 100, + }, + ), + ] + } + ) + cls.move_1.action_post() + cls.move_2 = cls.env["account.move"].create( + { + "line_ids": [ + ( + 0, + 0, + { + "account_id": cls.non_current_assets_account.id, + "name": "DEMO", + "credit": 50, + }, + ), + ( + 0, + 0, + { + "account_id": cls.equity_account.id, + "name": "DEMO", + "debit": 50, + }, + ), + ] + } + ) + cls.move_2.action_post() + cls.move_3 = cls.env["account.move"].create( + { + "line_ids": [ + ( + 0, + 0, + { + "account_id": cls.non_current_assets_account.id, + "name": "DEMO", + "credit": 50, + }, + ), + ( + 0, + 0, + { + "account_id": cls.equity_account.id, + "name": "DEMO", + "debit": 50, + }, + ), + ] + } + ) + cls.move_3.action_post() + + def test_reconcile(self): + account = self.non_current_assets_account + reconcile_account = self.env["account.account.reconcile"].search( + [("account_id", "=", account.id)] + ) + self.assertTrue(reconcile_account) + with Form(reconcile_account) as f: + f.add_account_move_line_id = self.move_1.line_ids.filtered( + lambda r: r.account_id == account + ) + f.add_account_move_line_id = self.move_2.line_ids.filtered( + lambda r: r.account_id == account + ) + reconcile_account.reconcile() + reconcile_account = self.env["account.account.reconcile"].search( + [("account_id", "=", account.id)] + ) + self.assertTrue(reconcile_account) + with Form(reconcile_account) as f: + f.add_account_move_line_id = self.move_1.line_ids.filtered( + lambda r: r.account_id == account + ) + f.add_account_move_line_id = self.move_3.line_ids.filtered( + lambda r: r.account_id == account + ) + reconcile_account.reconcile() + reconcile_account = self.env["account.account.reconcile"].search( + [("account_id", "=", account.id)] + ) + self.assertFalse(reconcile_account) + + def test_clean_reconcile(self): + account = self.non_current_assets_account + reconcile_account = self.env["account.account.reconcile"].search( + [("account_id", "=", account.id)] + ) + self.assertTrue(reconcile_account) + with Form(reconcile_account) as f: + f.add_account_move_line_id = self.move_1.line_ids.filtered( + lambda r: r.account_id == account + ) + f.add_account_move_line_id = self.move_2.line_ids.filtered( + lambda r: r.account_id == account + ) + self.assertTrue(reconcile_account.reconcile_data_info.get("counterparts")) + reconcile_account.clean_reconcile() + self.assertFalse(reconcile_account.reconcile_data_info.get("counterparts")) + + def test_cannot_reconcile(self): + """ + There is not enough records to reconcile for this account + """ + reconcile_account = self.env["account.account.reconcile"].search( + [("account_id", "=", self.current_assets_account.id)] + ) + self.assertFalse(reconcile_account) + + def test_cannot_reconcile_different_partners(self): + """ + We can only reconcile lines with the same account and partner. + """ + reconcile_account = self.env["account.account.reconcile"].search( + [ + ("account_id", "=", self.asset_receivable_account.id), + ] + ) + self.assertFalse(reconcile_account) + move_1 = self.env["account.move"].create( + { + "line_ids": [ + ( + 0, + 0, + { + "account_id": self.current_assets_account.id, + "name": "DEMO", + "credit": 100, + }, + ), + ( + 0, + 0, + { + "account_id": self.asset_receivable_account.id, + "partner_id": self.env.user.partner_id.id, + "name": "DEMO", + "debit": 100, + }, + ), + ] + } + ) + move_1.action_post() + self.env.flush_all() + move_2 = self.env["account.move"].create( + { + "line_ids": [ + ( + 0, + 0, + { + "account_id": self.current_assets_account.id, + "name": "DEMO", + "debit": 100, + }, + ), + ( + 0, + 0, + { + "account_id": self.asset_receivable_account.id, + "partner_id": self.company.partner_id.id, + "name": "DEMO", + "credit": 100, + }, + ), + ] + } + ) + move_2.action_post() + self.env.flush_all() + reconcile_account = self.env["account.account.reconcile"].search( + [ + ("account_id", "=", self.asset_receivable_account.id), + ] + ) + self.assertFalse(reconcile_account) + + move_3 = self.env["account.move"].create( + { + "line_ids": [ + ( + 0, + 0, + { + "account_id": self.current_assets_account.id, + "name": "DEMO", + "debit": 100, + }, + ), + ( + 0, + 0, + { + "account_id": self.asset_receivable_account.id, + "partner_id": self.env.user.partner_id.id, + "name": "DEMO", + "credit": 100, + }, + ), + ] + } + ) + move_3.action_post() + self.env.flush_all() + reconcile_account = self.env["account.account.reconcile"].search( + [ + ("account_id", "=", self.asset_receivable_account.id), + ] + ) + self.assertTrue(reconcile_account) + self.assertEqual(reconcile_account.partner_id, self.env.user.partner_id) diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/tests/test_bank_account_reconcile.py b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/tests/test_bank_account_reconcile.py new file mode 100644 index 0000000..c0dcc61 --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/tests/test_bank_account_reconcile.py @@ -0,0 +1,1465 @@ +import time + +from odoo.tests import Form, tagged + +from odoo.addons.account.tests.common import TestAccountReconciliationCommon + + +@tagged("post_install", "-at_install") +class TestReconciliationWidget(TestAccountReconciliationCommon): + @classmethod + def setUpClass(cls, chart_template_ref=None): + super().setUpClass(chart_template_ref=chart_template_ref) + # Auto-disable reconciliation model created automatically with + # generate_account_reconcile_model() to avoid side effects in tests + cls.invoice_matching_models = cls.env["account.reconcile.model"].search( + [ + ("rule_type", "=", "invoice_matching"), + ("auto_reconcile", "=", True), + ("company_id", "=", cls.company.id), + ] + ) + cls.invoice_matching_models.active = False + + cls.acc_bank_stmt_model = cls.env["account.bank.statement"] + cls.acc_bank_stmt_line_model = cls.env["account.bank.statement.line"] + cls.bank_journal_usd.suspense_account_id = ( + cls.company.account_journal_suspense_account_id + ) + cls.bank_journal_euro.suspense_account_id = ( + cls.company.account_journal_suspense_account_id + ) + cls.current_assets_account = cls.env["account.account"].search( + [ + ("account_type", "=", "asset_current"), + ("company_id", "=", cls.company.id), + ], + limit=1, + ) + cls.current_assets_account.reconcile = True + + cls.rule = cls.env["account.reconcile.model"].create( + { + "name": "write-off model", + "rule_type": "writeoff_button", + "match_partner": True, + "match_partner_ids": [], + "line_ids": [(0, 0, {"account_id": cls.current_assets_account.id})], + } + ) + cls.tax_10 = cls.env["account.tax"].create( + { + "name": "tax_10", + "amount_type": "percent", + "amount": 10.0, + } + ) + # We need to make some fields visible in order to make the tests work + cls.env["ir.ui.view"].create( + { + "name": "DEMO Account bank statement", + "model": "account.bank.statement.line", + "inherit_id": cls.env.ref( + "account_reconcile_oca.bank_statement_line_form_reconcile_view" + ).id, + "arch": """ + + + 0 + + + 0 + + + 0 + + + """, + } + ) + + # Testing reconcile action + + def test_reconcile_invoice_currency(self): + inv1 = self.create_invoice(currency_id=self.currency_usd_id, invoice_amount=100) + bank_stmt = self.acc_bank_stmt_model.create( + { + "journal_id": self.bank_journal_euro.id, + "date": time.strftime("%Y-07-15"), + "name": "test", + } + ) + bank_stmt_line = self.acc_bank_stmt_line_model.create( + { + "name": "testLine", + "journal_id": self.bank_journal_euro.id, + "statement_id": bank_stmt.id, + "amount": 50, + "amount_currency": 100, + "foreign_currency_id": self.currency_usd_id, + "date": time.strftime("%Y-07-15"), + } + ) + with Form( + bank_stmt_line, + view="account_reconcile_oca.bank_statement_line_form_reconcile_view", + ) as f: + self.assertFalse(f.can_reconcile) + f.add_account_move_line_id = inv1.line_ids.filtered( + lambda l: l.account_id.account_type == "asset_receivable" + ) + self.assertFalse(f.add_account_move_line_id) + self.assertTrue(f.can_reconcile) + + def test_manual_line_with_currency(self): + bank_stmt = self.acc_bank_stmt_model.create( + { + "journal_id": self.bank_journal_euro.id, + "date": time.strftime("%Y-07-15"), + "name": "test", + } + ) + bank_stmt_line = self.acc_bank_stmt_line_model.create( + { + "name": "testLine", + "journal_id": self.bank_journal_euro.id, + "statement_id": bank_stmt.id, + "amount": 50, + "amount_currency": 100, + "foreign_currency_id": self.currency_usd_id, + "date": time.strftime("%Y-07-15"), + } + ) + receivable_acc = self.company_data["default_account_receivable"] + with Form( + bank_stmt_line, + view="account_reconcile_oca.bank_statement_line_form_reconcile_view", + ) as f: + self.assertFalse(f.can_reconcile) + f.manual_reference = "reconcile_auxiliary;1" + f.manual_account_id = receivable_acc + self.assertTrue(f.can_reconcile) + bank_stmt_line.reconcile_bank_line() + receivable_line = bank_stmt_line.line_ids.filtered( + lambda line: line.account_id == receivable_acc + ) + self.assertEqual(receivable_line.currency_id.id, self.currency_usd_id) + self.assertEqual(receivable_line.amount_currency, -100) + self.assertEqual(receivable_line.balance, -50) + + def test_two_manual_lines_with_currency(self): + """We want to test the reconcile widget for bank statements + on manual lines with foreign currency. + We enforce the currency rate to be sure that the amounts are correct + """ + self.env["res.currency.rate"].create( + { + "currency_id": self.env.ref("base.USD").id, + "name": time.strftime("%Y-07-15"), + "rate": 2, + } + ) + bank_stmt = self.acc_bank_stmt_model.create( + { + "journal_id": self.bank_journal_euro.id, + "date": time.strftime("%Y-07-15"), + "name": "test", + } + ) + bank_stmt_line = self.acc_bank_stmt_line_model.create( + { + "name": "testLine", + "journal_id": self.bank_journal_euro.id, + "statement_id": bank_stmt.id, + "amount": 50, + "amount_currency": 100, + "foreign_currency_id": self.currency_usd_id, + "date": time.strftime("%Y-07-15"), + } + ) + receivable_acc = self.company_data["default_account_receivable"] + expense_acc = self.company_data["default_account_expense"] + with Form( + bank_stmt_line, + view="account_reconcile_oca.bank_statement_line_form_reconcile_view", + ) as f: + self.assertFalse(f.can_reconcile) + f.manual_reference = "reconcile_auxiliary;1" + f.manual_account_id = receivable_acc + f.manual_amount_in_currency = -40 + self.assertFalse(f.can_reconcile) + f.manual_reference = "reconcile_auxiliary;2" + f.manual_account_id = expense_acc + self.assertTrue(f.can_reconcile) + bank_stmt_line.reconcile_bank_line() + receivable_line = bank_stmt_line.line_ids.filtered( + lambda line: line.account_id == receivable_acc + ) + self.assertEqual(receivable_line.currency_id.id, self.currency_usd_id) + self.assertEqual(receivable_line.amount_currency, -40) + self.assertEqual(receivable_line.balance, -20) + matched_line = False + for line in bank_stmt_line.reconcile_data_info["data"]: + if line["id"] == receivable_line.id: + matched_line = True + self.assertEqual(line["currency_amount"], -40) + self.assertEqual(line["amount"], -20) + break + self.assertEqual(matched_line, True) + + def test_reconcile_invoice_reconcile_full(self): + """ + We want to test the reconcile widget for bank statements on invoices. + As we use edit mode by default, we will also check what happens when + we press unreconcile + """ + inv1 = self.create_invoice( + currency_id=self.currency_euro_id, invoice_amount=100 + ) + bank_stmt = self.acc_bank_stmt_model.create( + { + "journal_id": self.bank_journal_euro.id, + "date": time.strftime("%Y-07-15"), + "name": "test", + } + ) + bank_stmt_line = self.acc_bank_stmt_line_model.create( + { + "name": "testLine", + "journal_id": self.bank_journal_euro.id, + "statement_id": bank_stmt.id, + "amount": 50, + "date": time.strftime("%Y-07-15"), + } + ) + receivable1 = inv1.line_ids.filtered( + lambda l: l.account_id.account_type == "asset_receivable" + ) + with Form( + bank_stmt_line, + view="account_reconcile_oca.bank_statement_line_form_reconcile_view", + ) as f: + self.assertFalse(f.can_reconcile) + f.add_account_move_line_id = receivable1 + self.assertFalse(f.add_account_move_line_id) + self.assertTrue(f.can_reconcile) + f.manual_reference = "account.move.line;%s" % receivable1.id + self.assertEqual(-50, f.manual_amount) + self.assertEqual(2, len(bank_stmt_line.reconcile_data_info["data"])) + bank_stmt_line.button_manual_reference_full_paid() + self.assertEqual(3, len(bank_stmt_line.reconcile_data_info["data"])) + with Form( + bank_stmt_line, + view="account_reconcile_oca.bank_statement_line_form_reconcile_view", + ) as f: + f.manual_reference = "account.move.line;%s" % receivable1.id + self.assertEqual(-100, f.manual_amount) + + def test_reconcile_invoice_unreconcile(self): + """ + We want to test the reconcile widget for bank statements on invoices. + As we use edit mode by default, we will also check what happens when + we press unreconcile + """ + inv1 = self.create_invoice( + currency_id=self.currency_euro_id, invoice_amount=100 + ) + bank_stmt = self.acc_bank_stmt_model.create( + { + "journal_id": self.bank_journal_euro.id, + "date": time.strftime("%Y-07-15"), + "name": "test", + } + ) + bank_stmt_line = self.acc_bank_stmt_line_model.create( + { + "name": "testLine", + "journal_id": self.bank_journal_euro.id, + "statement_id": bank_stmt.id, + "amount": 100, + "date": time.strftime("%Y-07-15"), + } + ) + with Form( + bank_stmt_line, + view="account_reconcile_oca.bank_statement_line_form_reconcile_view", + ) as f: + self.assertFalse(f.can_reconcile) + f.add_account_move_line_id = inv1.line_ids.filtered( + lambda l: l.account_id.account_type == "asset_receivable" + ) + self.assertFalse(f.add_account_move_line_id) + self.assertTrue(f.can_reconcile) + self.assertFalse(bank_stmt_line.is_reconciled) + self.assertTrue( + bank_stmt_line.move_id.line_ids.filtered( + lambda r: r.account_id == self.bank_journal_euro.suspense_account_id + ) + ) + number_of_lines = len(bank_stmt_line.reconcile_data_info["data"]) + bank_stmt_line.reconcile_bank_line() + self.assertEqual( + number_of_lines, len(bank_stmt_line.reconcile_data_info["data"]) + ) + self.assertTrue(bank_stmt_line.is_reconciled) + self.assertFalse( + bank_stmt_line.move_id.line_ids.filtered( + lambda r: r.account_id == self.bank_journal_euro.suspense_account_id + ) + ) + bank_stmt_line.unreconcile_bank_line() + self.assertFalse(bank_stmt_line.is_reconciled) + self.assertTrue( + bank_stmt_line.move_id.line_ids.filtered( + lambda r: r.account_id == self.bank_journal_euro.suspense_account_id + ) + ) + + def test_reconcile_invoice_partial(self): + """ + We want to partially reconcile two invoices from a single payment. + As a result, both invoices must be partially reconciled + """ + inv1 = self.create_invoice( + currency_id=self.currency_euro_id, invoice_amount=100 + ) + inv2 = self.create_invoice( + currency_id=self.currency_euro_id, invoice_amount=100 + ) + bank_stmt = self.acc_bank_stmt_model.create( + { + "journal_id": self.bank_journal_euro.id, + "date": time.strftime("%Y-07-15"), + "name": "test", + } + ) + bank_stmt_line = self.acc_bank_stmt_line_model.create( + { + "name": "testLine", + "journal_id": self.bank_journal_euro.id, + "statement_id": bank_stmt.id, + "amount": 100, + "date": time.strftime("%Y-07-15"), + } + ) + receivable1 = inv1.line_ids.filtered( + lambda l: l.account_id.account_type == "asset_receivable" + ) + receivable2 = inv2.line_ids.filtered( + lambda l: l.account_id.account_type == "asset_receivable" + ) + with Form( + bank_stmt_line, + view="account_reconcile_oca.bank_statement_line_form_reconcile_view", + ) as f: + self.assertFalse(f.can_reconcile) + f.add_account_move_line_id = receivable1 + self.assertFalse(f.add_account_move_line_id) + self.assertTrue(f.can_reconcile) + f.manual_reference = "account.move.line;%s" % receivable1.id + self.assertEqual(f.manual_amount, -100) + f.manual_amount = -70 + self.assertFalse(f.can_reconcile) + f.add_account_move_line_id = receivable2 + f.manual_reference = "account.move.line;%s" % receivable2.id + self.assertEqual(f.manual_amount, -30) + self.assertTrue(f.can_reconcile) + self.assertEqual(inv1.amount_residual_signed, 100) + self.assertEqual(inv2.amount_residual_signed, 100) + number_of_lines = len(bank_stmt_line.reconcile_data_info["data"]) + bank_stmt_line.reconcile_bank_line() + self.assertEqual( + number_of_lines, len(bank_stmt_line.reconcile_data_info["data"]) + ) + self.assertEqual(inv1.amount_residual_signed, 30) + self.assertEqual(inv2.amount_residual_signed, 70) + + def test_reconcile_invoice_partial_supplier(self): + """ + We want to partially reconcile two invoices from a single payment. + As a result, both invoices must be partially reconciled + """ + inv1 = self.create_invoice( + currency_id=self.currency_euro_id, + invoice_amount=100, + move_type="in_invoice", + ) + inv2 = self.create_invoice( + currency_id=self.currency_euro_id, + invoice_amount=100, + move_type="in_invoice", + ) + bank_stmt = self.acc_bank_stmt_model.create( + { + "journal_id": self.bank_journal_euro.id, + "date": time.strftime("%Y-07-15"), + "name": "test", + } + ) + bank_stmt_line = self.acc_bank_stmt_line_model.create( + { + "name": "testLine", + "journal_id": self.bank_journal_euro.id, + "statement_id": bank_stmt.id, + "amount": -100, + "date": time.strftime("%Y-07-15"), + } + ) + receivable1 = inv1.line_ids.filtered( + lambda l: l.account_id.account_type == "liability_payable" + ) + receivable2 = inv2.line_ids.filtered( + lambda l: l.account_id.account_type == "liability_payable" + ) + with Form( + bank_stmt_line, + view="account_reconcile_oca.bank_statement_line_form_reconcile_view", + ) as f: + self.assertFalse(f.can_reconcile) + f.add_account_move_line_id = receivable1 + self.assertFalse(f.add_account_move_line_id) + self.assertTrue(f.can_reconcile) + f.manual_reference = "account.move.line;%s" % receivable1.id + self.assertEqual(f.manual_amount, 100) + f.manual_amount = 70 + self.assertFalse(f.can_reconcile) + f.add_account_move_line_id = receivable2 + f.manual_reference = "account.move.line;%s" % receivable2.id + self.assertEqual(f.manual_amount, 30) + self.assertTrue(f.can_reconcile) + self.assertEqual(inv1.amount_residual_signed, -100) + self.assertEqual(inv2.amount_residual_signed, -100) + number_of_lines = len(bank_stmt_line.reconcile_data_info["data"]) + bank_stmt_line.reconcile_bank_line() + self.assertEqual( + number_of_lines, len(bank_stmt_line.reconcile_data_info["data"]) + ) + self.assertEqual(inv1.amount_residual_signed, -30) + self.assertEqual(inv2.amount_residual_signed, -70) + + def test_reconcile_model(self): + """ + We want to test what happens when we select an reconcile model to fill a + bank statement. + """ + bank_stmt = self.acc_bank_stmt_model.create( + { + "journal_id": self.bank_journal_euro.id, + "date": time.strftime("%Y-07-15"), + "name": "test", + } + ) + bank_stmt_line = self.acc_bank_stmt_line_model.create( + { + "name": "testLine", + "journal_id": self.bank_journal_euro.id, + "statement_id": bank_stmt.id, + "amount": 100, + "date": time.strftime("%Y-07-15"), + } + ) + with Form( + bank_stmt_line, + view="account_reconcile_oca.bank_statement_line_form_reconcile_view", + ) as f: + self.assertFalse(f.can_reconcile) + f.manual_model_id = self.rule + self.assertTrue(f.can_reconcile) + number_of_lines = len(bank_stmt_line.reconcile_data_info["data"]) + bank_stmt_line.reconcile_bank_line() + self.assertEqual( + number_of_lines, len(bank_stmt_line.reconcile_data_info["data"]) + ) + self.assertEqual(2, len(bank_stmt_line.move_id.line_ids)) + self.assertTrue( + bank_stmt_line.move_id.line_ids.filtered( + lambda r: r.account_id == self.current_assets_account + ) + ) + + def test_reconcile_model_tax_included(self): + """ + We want to test what happens when we select an reconcile model to fill a + bank statement. + """ + self.rule.line_ids.write( + {"tax_ids": [(4, self.tax_10.id)], "force_tax_included": True} + ) + bank_stmt = self.acc_bank_stmt_model.create( + { + "journal_id": self.bank_journal_euro.id, + "date": time.strftime("%Y-07-15"), + "name": "test", + } + ) + bank_stmt_line = self.acc_bank_stmt_line_model.create( + { + "name": "testLine", + "journal_id": self.bank_journal_euro.id, + "statement_id": bank_stmt.id, + "amount": 100, + "date": time.strftime("%Y-07-15"), + } + ) + with Form( + bank_stmt_line, + view="account_reconcile_oca.bank_statement_line_form_reconcile_view", + ) as f: + self.assertFalse(f.can_reconcile) + f.manual_model_id = self.rule + self.assertTrue(f.can_reconcile) + number_of_lines = len(bank_stmt_line.reconcile_data_info["data"]) + bank_stmt_line.reconcile_bank_line() + self.assertEqual( + number_of_lines, len(bank_stmt_line.reconcile_data_info["data"]) + ) + self.assertEqual(3, len(bank_stmt_line.move_id.line_ids)) + self.assertTrue( + bank_stmt_line.move_id.line_ids.filtered( + lambda r: r.account_id == self.current_assets_account + and r.tax_ids == self.tax_10 + ) + ) + self.assertTrue( + bank_stmt_line.move_id.line_ids.filtered( + lambda r: r.tax_line_id == self.tax_10 + ) + ) + + def test_reconcile_invoice_model(self): + """ + We want to test what happens when we select a reconcile model to fill a + bank statement prefilled with an invoice. + + The result should be the reconcile of the invoice, and the rest set to the model + """ + + inv1 = self.create_invoice(currency_id=self.currency_euro_id) + + receivable1 = inv1.line_ids.filtered( + lambda l: l.account_id.account_type == "asset_receivable" + ) + bank_stmt = self.acc_bank_stmt_model.create( + { + "journal_id": self.bank_journal_euro.id, + "date": time.strftime("%Y-07-15"), + "name": "test", + } + ) + bank_stmt_line = self.acc_bank_stmt_line_model.create( + { + "name": "testLine", + "journal_id": self.bank_journal_euro.id, + "statement_id": bank_stmt.id, + "amount": 100, + "date": time.strftime("%Y-07-15"), + } + ) + with Form( + bank_stmt_line, + view="account_reconcile_oca.bank_statement_line_form_reconcile_view", + ) as f: + self.assertFalse(f.can_reconcile) + f.add_account_move_line_id = receivable1 + self.assertFalse(f.can_reconcile) + f.manual_model_id = self.rule + self.assertTrue(f.can_reconcile) + number_of_lines = len(bank_stmt_line.reconcile_data_info["data"]) + bank_stmt_line.reconcile_bank_line() + self.assertEqual( + number_of_lines, len(bank_stmt_line.reconcile_data_info["data"]) + ) + self.assertNotEqual(self.current_assets_account, receivable1.account_id) + self.assertTrue( + bank_stmt_line.move_id.line_ids.filtered( + lambda r: r.account_id == self.current_assets_account + ) + ) + self.assertTrue( + bank_stmt_line.move_id.line_ids.filtered( + lambda r: r.account_id == receivable1.account_id + ) + ) + self.assertEqual(0, inv1.amount_residual) + + def test_reconcile_rule_on_create(self): + """ + Testing the fill of the bank statment line with + writeoff suggestion reconcile model with auto_reconcile + """ + self.env["account.reconcile.model"].create( + { + "name": "write-off model suggestion", + "rule_type": "writeoff_suggestion", + "match_label": "contains", + "match_label_param": "DEMO WRITEOFF", + "auto_reconcile": True, + "line_ids": [(0, 0, {"account_id": self.current_assets_account.id})], + } + ) + + bank_stmt = self.acc_bank_stmt_model.create( + { + "journal_id": self.bank_journal_euro.id, + "date": time.strftime("%Y-07-15"), + "name": "test", + } + ) + bank_stmt_line = self.acc_bank_stmt_line_model.create( + { + "name": "DEMO WRITEOFF", + "payment_ref": "DEMO WRITEOFF", + "journal_id": self.bank_journal_euro.id, + "statement_id": bank_stmt.id, + "amount": 100, + "date": time.strftime("%Y-07-15"), + } + ) + self.assertTrue(bank_stmt_line.is_reconciled) + + def test_reconcile_invoice_keep(self): + """ + We want to test how the keep mode works, keeping the original move lines. + When unreconciling, the entry created for the reconciliation is reversed. + """ + self.bank_journal_euro.reconcile_mode = "keep" + self.bank_journal_euro.suspense_account_id.reconcile = True + inv1 = self.create_invoice( + currency_id=self.currency_euro_id, invoice_amount=100 + ) + bank_stmt = self.acc_bank_stmt_model.create( + { + "journal_id": self.bank_journal_euro.id, + "date": time.strftime("%Y-07-15"), + "name": "test", + } + ) + bank_stmt_line = self.acc_bank_stmt_line_model.create( + { + "name": "testLine", + "journal_id": self.bank_journal_euro.id, + "statement_id": bank_stmt.id, + "amount": 100, + "date": time.strftime("%Y-07-15"), + } + ) + receivable1 = inv1.line_ids.filtered( + lambda l: l.account_id.account_type == "asset_receivable" + ) + with Form( + bank_stmt_line, + view="account_reconcile_oca.bank_statement_line_form_reconcile_view", + ) as f: + self.assertFalse(f.can_reconcile) + f.add_account_move_line_id = receivable1 + self.assertFalse(f.add_account_move_line_id) + self.assertTrue(bank_stmt_line.can_reconcile) + number_of_lines = len(bank_stmt_line.reconcile_data_info["data"]) + bank_stmt_line.reconcile_bank_line() + self.assertEqual( + number_of_lines, len(bank_stmt_line.reconcile_data_info["data"]) + ) + self.assertIn( + self.bank_journal_euro.suspense_account_id, + bank_stmt_line.mapped("move_id.line_ids.account_id"), + ) + reconcile_move = ( + bank_stmt_line.line_ids._all_reconciled_lines() + .filtered(lambda line: line.move_id != bank_stmt_line.move_id) + .move_id + ) + self.assertEqual(reconcile_move.date, bank_stmt_line.date) + # Reset reconciliation + bank_stmt_line.unreconcile_bank_line() + self.assertTrue(reconcile_move.reversal_move_id) + self.assertEqual(reconcile_move.reversal_move_id.date, bank_stmt_line.date) + self.assertFalse(bank_stmt_line.is_reconciled) + + def test_reconcile_invoice_keep_with_lock_date(self): + """ + We want to test how the keep mode works, keeping the original move lines, + and now considering that we have set a lock date. + """ + self.bank_journal_euro.reconcile_mode = "keep" + self.bank_journal_euro.suspense_account_id.reconcile = True + inv1 = self.create_invoice( + currency_id=self.currency_euro_id, invoice_amount=100 + ) + bank_stmt = self.acc_bank_stmt_model.create( + { + "journal_id": self.bank_journal_euro.id, + "date": time.strftime("%Y-07-15"), + "name": "test", + } + ) + bank_stmt_line = self.acc_bank_stmt_line_model.create( + { + "name": "testLine", + "journal_id": self.bank_journal_euro.id, + "statement_id": bank_stmt.id, + "amount": 100, + "date": time.strftime("%Y-07-15"), + } + ) + # Set a period lock date in the company + self.env.user.groups_id -= self.env.ref("account.group_account_manager") + self.bank_journal_euro.company_id.period_lock_date = time.strftime("%Y-07-16") + receivable1 = inv1.line_ids.filtered( + lambda l: l.account_id.account_type == "asset_receivable" + ) + with Form( + bank_stmt_line, + view="account_reconcile_oca.bank_statement_line_form_reconcile_view", + ) as f: + self.assertFalse(f.can_reconcile) + f.add_account_move_line_id = receivable1 + self.assertFalse(f.add_account_move_line_id) + self.assertTrue(bank_stmt_line.can_reconcile) + number_of_lines = len(bank_stmt_line.reconcile_data_info["data"]) + bank_stmt_line.reconcile_bank_line() + self.assertEqual( + number_of_lines, len(bank_stmt_line.reconcile_data_info["data"]) + ) + self.assertIn( + self.bank_journal_euro.suspense_account_id, + bank_stmt_line.mapped("move_id.line_ids.account_id"), + ) + reconcile_move = ( + bank_stmt_line.line_ids._all_reconciled_lines() + .filtered(lambda line: line.move_id != bank_stmt_line.move_id) + .move_id + ) + self.assertEqual(str(reconcile_move.date), time.strftime("%Y-07-17")) + # Reset reconciliation + bank_stmt_line.unreconcile_bank_line() + self.assertTrue(reconcile_move.reversal_move_id) + self.assertEqual( + str(reconcile_move.reversal_move_id.date), time.strftime("%Y-07-17") + ) + self.assertFalse(bank_stmt_line.is_reconciled) + + def test_reconcile_model_with_foreign_currency(self): + """ + We want to test what happens when we select a reconcile model to fill a + bank statement with a foreign currency. + """ + bank_stmt = self.acc_bank_stmt_model.create( + { + "journal_id": self.bank_journal_usd.id, + "date": time.strftime("%Y-07-15"), + "name": "test", + } + ) + bank_stmt_line = self.acc_bank_stmt_line_model.create( + { + "name": "testLine", + "journal_id": self.bank_journal_usd.id, + "statement_id": bank_stmt.id, + "amount": 100, + "date": time.strftime("%Y-07-15"), + } + ) + with Form( + bank_stmt_line, + view="account_reconcile_oca.bank_statement_line_form_reconcile_view", + ) as f: + self.assertFalse(f.can_reconcile) + f.manual_model_id = self.rule + self.assertTrue(f.can_reconcile) + number_of_lines = len(bank_stmt_line.reconcile_data_info["data"]) + bank_stmt_line.reconcile_bank_line() + self.assertEqual( + number_of_lines, len(bank_stmt_line.reconcile_data_info["data"]) + ) + self.assertEqual(2, len(bank_stmt_line.move_id.line_ids)) + self.assertTrue( + bank_stmt_line.move_id.line_ids.filtered( + lambda r: r.account_id == self.current_assets_account + ) + ) + expected_amount = bank_stmt_line._get_reconcile_currency()._convert( + bank_stmt_line.amount, + bank_stmt_line.company_id.currency_id, + bank_stmt_line.company_id, + bank_stmt_line.date, + ) + self.assertEqual( + bank_stmt_line.move_id.line_ids[0].amount_currency, bank_stmt_line.amount + ) + self.assertEqual(bank_stmt_line.move_id.line_ids[0].debit, expected_amount) + self.assertEqual(bank_stmt_line.move_id.line_ids[1].credit, expected_amount) + + # Testing to check functionality + + def test_reconcile_invoice_to_check_reconciled(self): + """ + We want to test the reconcile widget for bank statements on invoices. + As we use edit mode by default, we will also check what happens when + we press unreconcile + """ + inv1 = self.create_invoice( + currency_id=self.currency_euro_id, invoice_amount=100 + ) + bank_stmt = self.acc_bank_stmt_model.create( + { + "journal_id": self.bank_journal_euro.id, + "date": time.strftime("%Y-07-15"), + "name": "test", + } + ) + bank_stmt_line = self.acc_bank_stmt_line_model.create( + { + "name": "testLine", + "journal_id": self.bank_journal_euro.id, + "statement_id": bank_stmt.id, + "amount": 100, + "date": time.strftime("%Y-07-15"), + } + ) + receivable1 = inv1.line_ids.filtered( + lambda l: l.account_id.account_type == "asset_receivable" + ) + with Form( + bank_stmt_line, + view="account_reconcile_oca.bank_statement_line_form_reconcile_view", + ) as f: + self.assertFalse(f.can_reconcile) + f.add_account_move_line_id = receivable1 + self.assertTrue(f.can_reconcile) + self.assertFalse(bank_stmt_line.is_reconciled) + self.assertFalse(bank_stmt_line.to_check) + bank_stmt_line.action_to_check() + self.assertTrue(bank_stmt_line.is_reconciled) + self.assertTrue(bank_stmt_line.to_check) + bank_stmt_line.action_checked() + self.assertTrue(bank_stmt_line.is_reconciled) + self.assertFalse(bank_stmt_line.to_check) + + def test_reconcile_invoice_to_check_not_reconciled(self): + """ + We want to test the reconcile widget for bank statements on invoices. + As we use edit mode by default, we will also check what happens when + we press unreconcile + """ + bank_stmt = self.acc_bank_stmt_model.create( + { + "journal_id": self.bank_journal_euro.id, + "date": time.strftime("%Y-07-15"), + "name": "test", + } + ) + bank_stmt_line = self.acc_bank_stmt_line_model.create( + { + "name": "testLine", + "journal_id": self.bank_journal_euro.id, + "statement_id": bank_stmt.id, + "amount": 100, + "date": time.strftime("%Y-07-15"), + } + ) + self.assertFalse(bank_stmt_line.is_reconciled) + self.assertFalse(bank_stmt_line.to_check) + bank_stmt_line.action_to_check() + self.assertFalse(bank_stmt_line.is_reconciled) + self.assertTrue(bank_stmt_line.to_check) + bank_stmt_line.action_checked() + self.assertFalse(bank_stmt_line.is_reconciled) + self.assertFalse(bank_stmt_line.to_check) + + # Testing widget + + def test_widget_invoice_clean(self): + """ + We want to test how the clean works on an already defined bank statement + """ + inv1 = self.create_invoice( + currency_id=self.currency_euro_id, invoice_amount=100 + ) + bank_stmt = self.acc_bank_stmt_model.create( + { + "journal_id": self.bank_journal_euro.id, + "date": time.strftime("%Y-07-15"), + "name": "test", + } + ) + bank_stmt_line = self.acc_bank_stmt_line_model.create( + { + "name": "testLine", + "journal_id": self.bank_journal_euro.id, + "statement_id": bank_stmt.id, + "amount": 100, + "date": time.strftime("%Y-07-15"), + } + ) + receivable1 = inv1.line_ids.filtered( + lambda l: l.account_id.account_type == "asset_receivable" + ) + with Form( + bank_stmt_line, + view="account_reconcile_oca.bank_statement_line_form_reconcile_view", + ) as f: + self.assertFalse(f.can_reconcile) + f.add_account_move_line_id = receivable1 + self.assertFalse(f.add_account_move_line_id) + self.assertTrue(bank_stmt_line.can_reconcile) + bank_stmt_line.clean_reconcile() + self.assertFalse(bank_stmt_line.can_reconcile) + + def test_widget_invoice_delete(self): + """ + We need to test the possibility to remove a line from the reconcile widget + """ + inv1 = self.create_invoice( + currency_id=self.currency_euro_id, invoice_amount=100 + ) + bank_stmt = self.acc_bank_stmt_model.create( + { + "journal_id": self.bank_journal_euro.id, + "date": time.strftime("%Y-07-15"), + "name": "test", + } + ) + bank_stmt_line = self.acc_bank_stmt_line_model.create( + { + "name": "testLine", + "journal_id": self.bank_journal_euro.id, + "statement_id": bank_stmt.id, + "amount": 100, + "date": time.strftime("%Y-07-15"), + } + ) + receivable1 = inv1.line_ids.filtered( + lambda l: l.account_id.account_type == "asset_receivable" + ) + with Form( + bank_stmt_line, + view="account_reconcile_oca.bank_statement_line_form_reconcile_view", + ) as f: + self.assertFalse(f.can_reconcile) + f.add_account_move_line_id = receivable1 + self.assertFalse(f.add_account_move_line_id) + self.assertTrue(f.can_reconcile) + f.manual_reference = "account.move.line;%s" % receivable1.id + self.assertEqual(f.manual_amount, -100) + f.manual_delete = True + self.assertFalse(f.can_reconcile) + + def test_widget_invoice_unselect(self): + """ + We want to test how selection and unselection of an account move lines is managed + by the system. + """ + inv1 = self.create_invoice( + currency_id=self.currency_euro_id, invoice_amount=100 + ) + bank_stmt = self.acc_bank_stmt_model.create( + { + "journal_id": self.bank_journal_euro.id, + "date": time.strftime("%Y-07-15"), + "name": "test", + } + ) + bank_stmt_line = self.acc_bank_stmt_line_model.create( + { + "name": "testLine", + "journal_id": self.bank_journal_euro.id, + "statement_id": bank_stmt.id, + "amount": 100, + "date": time.strftime("%Y-07-15"), + } + ) + with Form( + bank_stmt_line, + view="account_reconcile_oca.bank_statement_line_form_reconcile_view", + ) as f: + self.assertFalse(f.can_reconcile) + f.add_account_move_line_id = inv1.line_ids.filtered( + lambda l: l.account_id.account_type == "asset_receivable" + ) + self.assertFalse(f.add_account_move_line_id) + self.assertTrue(f.can_reconcile) + f.add_account_move_line_id = inv1.line_ids.filtered( + lambda l: l.account_id.account_type == "asset_receivable" + ) + self.assertFalse(f.add_account_move_line_id) + self.assertFalse(f.can_reconcile) + + def test_widget_invoice_change_partner(self): + """ + We want to know how the change of partner of + a bank statement line is managed + """ + inv1 = self.create_invoice( + currency_id=self.currency_euro_id, invoice_amount=100 + ) + bank_stmt = self.acc_bank_stmt_model.create( + { + "journal_id": self.bank_journal_euro.id, + "date": time.strftime("%Y-07-15"), + "name": "test", + } + ) + bank_stmt_line = self.acc_bank_stmt_line_model.create( + { + "name": "testLine", + "journal_id": self.bank_journal_euro.id, + "statement_id": bank_stmt.id, + "amount": 100, + "date": time.strftime("%Y-07-15"), + } + ) + liquidity_lines, suspense_lines, other_lines = bank_stmt_line._seek_for_lines() + with Form( + bank_stmt_line, + view="account_reconcile_oca.bank_statement_line_form_reconcile_view", + ) as f: + self.assertFalse(f.can_reconcile) + self.assertFalse(f.partner_id) + f.manual_reference = "account.move.line;%s" % liquidity_lines.id + f.manual_partner_id = inv1.partner_id + f.save() + self.assertEqual(f.partner_id, inv1.partner_id) + bank_stmt_line.clean_reconcile() + # As we have a set a partner, the cleaning should assign the invoice automatically + self.assertTrue(bank_stmt_line.can_reconcile) + + def test_widget_model_clean(self): + """ + We want to test what happens when we select an reconcile model to fill a + bank statement. + """ + bank_stmt = self.acc_bank_stmt_model.create( + { + "journal_id": self.bank_journal_euro.id, + "date": time.strftime("%Y-07-15"), + "name": "test", + } + ) + bank_stmt_line = self.acc_bank_stmt_line_model.create( + { + "name": "testLine", + "journal_id": self.bank_journal_euro.id, + "statement_id": bank_stmt.id, + "amount": 100, + "date": time.strftime("%Y-07-15"), + } + ) + with Form( + bank_stmt_line, + view="account_reconcile_oca.bank_statement_line_form_reconcile_view", + ) as f: + self.assertFalse(f.can_reconcile) + f.manual_model_id = self.rule + self.assertTrue(f.can_reconcile) + # We need to check what happens when we uncheck it too + f.manual_model_id = self.env["account.reconcile.model"] + self.assertFalse(f.can_reconcile) + f.manual_model_id = self.rule + self.assertTrue(f.can_reconcile) + + # Testing actions + + def test_bank_statement_rainbowman(self): + message = self.bank_journal_euro.get_rainbowman_message() + self.assertTrue(message) + self.acc_bank_stmt_line_model.create( + { + "name": "testLine", + "journal_id": self.bank_journal_euro.id, + "amount": 100, + "date": time.strftime("%Y-07-15"), + } + ) + self.env.flush_all() + message = self.bank_journal_euro.get_rainbowman_message() + self.assertFalse(message) + + def test_bank_statement_line_actions(self): + """ + Testing the actions of bank statement + """ + bank_stmt = self.acc_bank_stmt_model.create( + { + "journal_id": self.bank_journal_euro.id, + "date": time.strftime("%Y-07-15"), + "name": "test", + } + ) + bank_stmt_line = self.acc_bank_stmt_line_model.create( + { + "name": "testLine", + "journal_id": self.bank_journal_euro.id, + "statement_id": bank_stmt.id, + "amount": 100, + "date": time.strftime("%Y-07-15"), + } + ) + move_action = bank_stmt_line.action_show_move() + self.assertEqual( + bank_stmt_line.move_id, + self.env[move_action["res_model"]].browse(move_action["res_id"]), + ) + + # Testing filters + + def test_filter_partner(self): + """ + When a partner is set, the system might try to define an existent + invoice automatically + """ + inv1 = self.create_invoice(currency_id=self.currency_euro_id) + inv2 = self.create_invoice(currency_id=self.currency_euro_id) + partner = inv1.partner_id + + receivable1 = inv1.line_ids.filtered( + lambda l: l.account_id.account_type == "asset_receivable" + ) + self.assertTrue(receivable1) + receivable2 = inv2.line_ids.filtered( + lambda l: l.account_id.account_type == "asset_receivable" + ) + self.assertTrue(receivable2) + + bank_stmt = self.acc_bank_stmt_model.create( + { + "journal_id": self.bank_journal_euro.id, + "date": time.strftime("%Y-07-15"), + "name": "test", + } + ) + + bank_stmt_line = self.acc_bank_stmt_line_model.create( + { + "name": "testLine", + "journal_id": self.bank_journal_euro.id, + "statement_id": bank_stmt.id, + "amount": 100, + "date": time.strftime("%Y-07-15"), + } + ) + + # Without a partner set, No default data + + bkstmt_data = bank_stmt_line.reconcile_data_info + mv_lines_ids = bkstmt_data["counterparts"] + self.assertNotIn(receivable1.id, mv_lines_ids) + self.assertNotIn(receivable2.id, mv_lines_ids) + + # This is like input a partner in the widget + + bank_stmt_line.partner_id = partner + bank_stmt_line.flush_recordset() + bank_stmt_line.invalidate_recordset() + bkstmt_data = bank_stmt_line.reconcile_data_info + mv_lines_ids = bkstmt_data["counterparts"] + + self.assertIn(receivable1.id, mv_lines_ids) + self.assertIn(receivable2.id, mv_lines_ids) + + # With a partner set, type the invoice reference in the filter + bank_stmt_line.payment_ref = inv1.payment_reference + bank_stmt_line.flush_recordset() + bank_stmt_line.invalidate_recordset() + bkstmt_data = bank_stmt_line.reconcile_data_info + mv_lines_ids = bkstmt_data["counterparts"] + + self.assertIn(receivable1.id, mv_lines_ids) + self.assertNotIn(receivable2.id, mv_lines_ids) + + def test_partner_name_with_parent(self): + parent_partner = self.env["res.partner"].create( + { + "name": "test", + } + ) + child_partner = self.env["res.partner"].create( + { + "name": "test", + "parent_id": parent_partner.id, + "type": "delivery", + } + ) + self.create_invoice_partner( + currency_id=self.currency_euro_id, partner_id=child_partner.id + ) + + bank_stmt = self.acc_bank_stmt_model.create( + { + "journal_id": self.bank_journal_euro.id, + "date": time.strftime("%Y-07-15"), + "name": "test", + } + ) + + self.invoice_matching_models.active = True + self.invoice_matching_models.match_text_location_label = False + bank_stmt_line = self.acc_bank_stmt_line_model.create( + { + "name": "testLine", + "statement_id": bank_stmt.id, + "journal_id": self.bank_journal_euro.id, + "amount": 100, + "date": time.strftime("%Y-07-15"), + "payment_ref": "test", + "partner_name": "test", + } + ) + + bkstmt_data = bank_stmt_line.reconcile_data_info + self.assertEqual(len(bkstmt_data["counterparts"]), 1) + self.assertEqual( + self.env["account.move.line"] + .browse(bkstmt_data["counterparts"]) + .partner_id, + parent_partner, + ) + + def test_journal_foreign_currency(self): + inv1 = self.create_invoice(currency_id=self.currency_usd_id, invoice_amount=100) + bank_stmt = self.acc_bank_stmt_model.create( + { + "journal_id": self.bank_journal_usd.id, + "date": time.strftime("%Y-07-15"), + "name": "test", + } + ) + bank_stmt_line = self.acc_bank_stmt_line_model.create( + { + "name": "testLine", + "journal_id": self.bank_journal_usd.id, + "statement_id": bank_stmt.id, + "amount": 100, + "date": time.strftime("%Y-07-15"), + } + ) + with Form( + bank_stmt_line, + view="account_reconcile_oca.bank_statement_line_form_reconcile_view", + ) as f: + self.assertFalse(f.can_reconcile) + f.add_account_move_line_id = inv1.line_ids.filtered( + lambda l: l.account_id.account_type == "asset_receivable" + ) + self.assertFalse(f.add_account_move_line_id) + self.assertTrue(f.can_reconcile) + self.assertTrue(bank_stmt_line.can_reconcile) + number_of_lines = len(bank_stmt_line.reconcile_data_info["data"]) + bank_stmt_line.reconcile_bank_line() + self.assertEqual( + number_of_lines, len(bank_stmt_line.reconcile_data_info["data"]) + ) + self.assertEqual(0, inv1.amount_residual) + self.assertTrue( + inv1.line_ids.filtered( + lambda line: line.account_id.account_type == "asset_receivable" + ).full_reconcile_id + ) + + def test_journal_foreign_currency_change(self): + cny = self.env.ref("base.CNY") + cny.write({"active": True}) + cny_journal = self.env["account.journal"].create( + { + "name": "Bank CNY", + "type": "bank", + "currency_id": cny.id, + } + ) + self.env["res.currency.rate"].create( + { + "name": time.strftime("%Y-09-10"), + "currency_id": cny.id, + "inverse_company_rate": 0.125989013758, + } + ) + self.env["res.currency.rate"].create( + { + "name": time.strftime("%Y-09-09"), + "currency_id": cny.id, + "inverse_company_rate": 0.126225969731, + } + ) + bank_stmt = self.acc_bank_stmt_model.create( + { + "journal_id": cny_journal.id, + "date": time.strftime("%Y-09-10"), + "name": "test", + } + ) + bank_stmt_line = self.acc_bank_stmt_line_model.create( + { + "name": "testLine", + "journal_id": cny_journal.id, + "statement_id": bank_stmt.id, + "amount": 259200, + "date": time.strftime("%Y-09-10"), + } + ) + inv1 = self._create_invoice( + currency_id=cny.id, + invoice_amount=259200, + date_invoice=time.strftime("%Y-09-09"), + auto_validate=True, + ) + with Form( + bank_stmt_line, + view="account_reconcile_oca.bank_statement_line_form_reconcile_view", + ) as f: + line = f.reconcile_data_info["data"][0] + self.assertEqual( + line["currency_amount"], + 259200, + ) + f.add_account_move_line_id = inv1.line_ids.filtered( + lambda l: l.account_id.account_type == "asset_receivable" + ) + self.assertTrue(f.can_reconcile) + self.assertEqual(len(bank_stmt_line.reconcile_data_info["data"]), 3) + exchange_line = bank_stmt_line.reconcile_data_info["data"][-1] + self.assertEqual(exchange_line["amount"], 61.42) + self.assertEqual(exchange_line["currency_amount"], 0) + bank_stmt_line.reconcile_bank_line() + self.assertEqual(inv1.payment_state, "paid") + exchange_line = bank_stmt_line.reconcile_data_info["data"][-1] + self.assertEqual(exchange_line["amount"], 61.42) + self.assertEqual(exchange_line["currency_amount"], 0) + + def test_invoice_foreign_currency_change(self): + self.env["res.currency.rate"].create( + { + "currency_id": self.env.ref("base.EUR").id, + "name": time.strftime("%Y-07-14"), + "rate": 1.15, + } + ) + self.env["res.currency.rate"].create( + { + "currency_id": self.env.ref("base.EUR").id, + "name": time.strftime("%Y-07-15"), + "rate": 1.2, + } + ) + inv1 = self._create_invoice( + currency_id=self.currency_usd_id, + invoice_amount=100, + date_invoice="2021-07-14", + auto_validate=True, + ) + bank_stmt = self.acc_bank_stmt_model.create( + { + "journal_id": self.bank_journal_usd.id, + "date": time.strftime("%Y-07-15"), + "name": "test", + } + ) + bank_stmt_line = self.acc_bank_stmt_line_model.create( + { + "name": "testLine", + "journal_id": self.bank_journal_usd.id, + "statement_id": bank_stmt.id, + "amount": 100, + "date": time.strftime("%Y-07-15"), + } + ) + with Form( + bank_stmt_line, + view="account_reconcile_oca.bank_statement_line_form_reconcile_view", + ) as f: + line = f.reconcile_data_info["data"][0] + self.assertEqual( + line["currency_amount"], + 100, + ) + f.add_account_move_line_id = inv1.line_ids.filtered( + lambda l: l.account_id.account_type == "asset_receivable" + ) + self.assertFalse(f.add_account_move_line_id) + self.assertTrue(f.can_reconcile) + self.assertEqual(3, len(f.reconcile_data_info["data"])) + + def test_invoice_foreign_currency_late_change_of_rate(self): + # Test we can reconcile lines in foreign currency even if the rate was updated + # late in odoo, meaning the statement line was created and the rate was updated + # in odoo after that. + self.env["res.currency.rate"].create( + { + "currency_id": self.env.ref("base.USD").id, + "name": time.strftime("%Y-07-14"), + "rate": 1.15, + } + ) + self.env["res.currency.rate"].create( + { + "currency_id": self.env.ref("base.USD").id, + "name": time.strftime("%Y-07-15"), + "rate": 1.2, + } + ) + inv1 = self._create_invoice( + currency_id=self.currency_usd_id, + invoice_amount=100, + date_invoice=time.strftime("%Y-07-14"), + auto_validate=True, + ) + bank_stmt = self.acc_bank_stmt_model.create( + { + "journal_id": self.bank_journal_usd.id, + "date": time.strftime("%Y-07-15"), + "name": "test", + } + ) + bank_stmt_line = self.acc_bank_stmt_line_model.create( + { + "name": "testLine", + "journal_id": self.bank_journal_usd.id, + "statement_id": bank_stmt.id, + "amount": 100, + "date": time.strftime("%Y-07-16"), + } + ) + # rate of 07-16 is create after the statement line, meaning the rate of the + # statement line is the one of the 07-15 + self.env["res.currency.rate"].create( + { + "currency_id": self.env.ref("base.USD").id, + "name": time.strftime("%Y-07-16"), + "rate": 1.25, + } + ) + liquidity_lines, suspense_lines, other_lines = bank_stmt_line._seek_for_lines() + with Form( + bank_stmt_line, + view="account_reconcile_oca.bank_statement_line_form_reconcile_view", + ) as f: + line = f.reconcile_data_info["data"][0] + self.assertEqual( + line["currency_amount"], + 100, + ) + self.assertEqual( + line["amount"], + 83.33, + ) + # check that adding a partner does not recompute the amounts on accounting + # entries, but is still synchronized with accounting entries + f.manual_reference = "account.move.line;%s" % liquidity_lines.id + f.manual_partner_id = inv1.partner_id + self.assertEqual(f.partner_id, inv1.partner_id) + self.assertEqual(liquidity_lines.debit, 83.33) + f.save() + # check liquidity line did not recompute debit with the new rate with + # partner change + self.assertEqual(liquidity_lines.debit, 83.33) + self.assertEqual(liquidity_lines.partner_id, inv1.partner_id) + f.manual_reference = "account.move.line;%s" % line["id"] + # simulate click on statement line, check amount does not recompute + f.manual_partner_id = inv1.partner_id + self.assertEqual(f.manual_amount, 83.33) + # check currency amount is still fine + self.assertEqual(f.reconcile_data_info["data"][0]["currency_amount"], 100) + f.add_account_move_line_id = inv1.line_ids.filtered( + lambda l: l.account_id.account_type == "asset_receivable" + ) + self.assertEqual(3, len(f.reconcile_data_info["data"])) + self.assertTrue(f.can_reconcile) + self.assertEqual(f.reconcile_data_info["data"][-1]["amount"], 3.63) diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/views/account_account.xml b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/views/account_account.xml new file mode 100644 index 0000000..02b5f48 --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/views/account_account.xml @@ -0,0 +1,23 @@ + + + + + + account.account.tree (in account_reconcile_oca) + account.account + + + + + + + diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/views/account_account_reconcile.xml b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/views/account_account_reconcile.xml new file mode 100644 index 0000000..c648ec6 --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/views/account_account_reconcile.xml @@ -0,0 +1,169 @@ + + + + + + account.account.reconcile.form (in account_reconcile_oca) + account.account.reconcile + +
+ + + + + + + + + + + + + + + + + + + + + + + +
+ + + account.account.reconcile.search (in account_reconcile_oca) + account.account.reconcile + + + + + + + + + + account.account.reconcile.tree (in account_reconcile_oca) + account.account.reconcile + + + + + + + + + + + + account.account.reconcile.kanban (in account_reconcile_oca) + account.account.reconcile + + + + +
+
+ +
+
+ +
+
+
+
+
+
+
+ + + Reconcile + account.account.reconcile + kanban + [] + {'view_ref': 'account_reconcile_oca.account_account_reconcile_form_view'} + + + Reconcile + account.account.reconcile + kanban + [("partner_id", "=", active_id)] + {'view_ref': 'account_reconcile_oca.account_account_reconcile_form_view'} + + form + + + + Reconcile + account.account.reconcile + kanban + [("account_id", "=", active_id)] + {'view_ref': 'account_reconcile_oca.account_account_reconcile_form_view'} + + form + + + + Reconcile + + + + + +
diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/views/account_bank_statement.xml b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/views/account_bank_statement.xml new file mode 100644 index 0000000..615ed9b --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/views/account_bank_statement.xml @@ -0,0 +1,61 @@ + + + + + + Edit Bank statement + account.bank.statement + 99 + +
+ + + + + + + + + + + +
+
+
+ + account.bank.statement + + + + object + action_open_statement_lines + + + + + Edit Bank Statement + account.bank.statement + form + + new + +
diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/views/account_bank_statement_line.xml b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/views/account_bank_statement_line.xml new file mode 100644 index 0000000..84b89a1 --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/views/account_bank_statement_line.xml @@ -0,0 +1,426 @@ + + + + + + account.bank.statement.line.reconcile + account.bank.statement.line + + + + + + + + + + + + + + +
+
+
+ +
+
+ + +
+ +
+
+ +
+
+
+ +
+
+
+ To check +
+
+ Reconciled +
+
+
+
+ + + + + + + + Simple form view to manually create an account.bank.statement.line + account.bank.statement.line + 99 + +
+ + + + + + + + + + + + + + + + + + +
+
+
+
+
+ + + account.bank.statement.line.reconcile + account.bank.statement.line + 99 + +
+ + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + Statement lines + account.bank.statement.line + [('journal_id', '=', active_id)] + {'default_journal_id': active_id, 'search_default_not_reconciled': True, 'view_ref': 'account_reconcile_oca.bank_statement_line_form_reconcile_view'} + kanban,tree + + +

+ Nothing to reconcile +

+
+
+ + Reconcile bank statement lines + account.bank.statement.line + [('journal_id', '=', active_id)] + {'default_journal_id': active_id, 'view_ref': 'account_reconcile_oca.bank_statement_line_form_reconcile_view'} + kanban,tree + + +

+ Nothing to reconcile +

+
+
+ + Reconcile bank statement lines + account.bank.statement.line + [('journal_id', '=', active_id)] + {'default_journal_id': active_id, 'search_default_to_check': True, 'view_ref': 'account_reconcile_oca.bank_statement_line_form_reconcile_view'} + tree + + +

+ Nothing to check +

+
+
+ + + Reconcile bank statement lines + account.bank.statement.line + {'search_default_move_id': active_id} + tree + + +

+ Nothing to reconcile +

+
+
+ + Add Bank Statement Line + account.bank.statement.line + form + + new + + diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/views/account_journal.xml b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/views/account_journal.xml new file mode 100644 index 0000000..bb62ccb --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/views/account_journal.xml @@ -0,0 +1,78 @@ + + + + + + account.journal.inherit.dashboard.kanban + account.journal + + + + + + + + + + account.journal.inherit.dashboard.kanban + account.journal + + + + + + + + + +
+ +
+ + + +
+
+
+
+ + + + +
+
+
diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/views/account_move.xml b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/views/account_move.xml new file mode 100644 index 0000000..d781c97 --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/views/account_move.xml @@ -0,0 +1,27 @@ + + + + + + account.move.form (in account_reconcile_oca) + account.move + + +
+
+
+
+ + + +
diff --git a/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/views/account_move_line.xml b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/views/account_move_line.xml new file mode 100644 index 0000000..e1cb290 --- /dev/null +++ b/odoo-bringout-oca-ocb-account_reconcile_oca/account_reconcile_oca/views/account_move_line.xml @@ -0,0 +1,114 @@ + + + + + + account.move.line.tree.reconcile + account.move.line + 99 + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + +
+ + + + + + + + + account.bank.statement + tree,form,pivot,graph + + + tree,form,pivot,graph + + + + account.bank.statement.tree + account.bank.statement + + + + true + + +