From f846d926583941ac8580f46541974b7d07cd1266 Mon Sep 17 00:00:00 2001 From: Matthieu Dietrich Date: Wed, 13 Apr 2016 14:12:40 +0200 Subject: [PATCH 01/19] Merge and migrate account_easy_reconcile and account_advanced_reconcile --- account_mass_reconcile/README.rst | 85 +++ account_mass_reconcile/__init__.py | 3 + account_mass_reconcile/__openerp__.py | 23 + .../i18n/account_easy_reconcile.pot | 602 +++++++++++++++++ account_mass_reconcile/i18n/en.po | 603 +++++++++++++++++ account_mass_reconcile/i18n/es.po | 611 ++++++++++++++++++ account_mass_reconcile/i18n/fr.po | 610 +++++++++++++++++ account_mass_reconcile/i18n/sl.po | 584 +++++++++++++++++ account_mass_reconcile/models/__init__.py | 9 + .../models/advanced_reconciliation.py | 105 +++ .../models/base_advanced_reconciliation.py | 276 ++++++++ .../models/base_reconciliation.py | 185 ++++++ .../models/mass_reconcile.py | 307 +++++++++ .../models/mass_reconcile_history.py | 82 +++ account_mass_reconcile/models/res_config.py | 26 + .../models/simple_reconciliation.py | 97 +++ .../security/ir.model.access.csv | 9 + account_mass_reconcile/security/ir_rule.xml | 25 + account_mass_reconcile/tests/__init__.py | 8 + .../tests/test_onchange_company.py | 44 ++ .../tests/test_reconcile.py | 69 ++ .../tests/test_reconcile_history.py | 42 ++ .../tests/test_scenario_reconcile.py | 231 +++++++ .../views/mass_reconcile.xml | 163 +++++ .../views/mass_reconcile_history_view.xml | 87 +++ .../views/res_config_view.xml | 22 + 26 files changed, 4908 insertions(+) create mode 100644 account_mass_reconcile/README.rst create mode 100755 account_mass_reconcile/__init__.py create mode 100644 account_mass_reconcile/__openerp__.py create mode 100644 account_mass_reconcile/i18n/account_easy_reconcile.pot create mode 100644 account_mass_reconcile/i18n/en.po create mode 100644 account_mass_reconcile/i18n/es.po create mode 100644 account_mass_reconcile/i18n/fr.po create mode 100644 account_mass_reconcile/i18n/sl.po create mode 100755 account_mass_reconcile/models/__init__.py create mode 100644 account_mass_reconcile/models/advanced_reconciliation.py create mode 100644 account_mass_reconcile/models/base_advanced_reconciliation.py create mode 100644 account_mass_reconcile/models/base_reconciliation.py create mode 100644 account_mass_reconcile/models/mass_reconcile.py create mode 100644 account_mass_reconcile/models/mass_reconcile_history.py create mode 100644 account_mass_reconcile/models/res_config.py create mode 100644 account_mass_reconcile/models/simple_reconciliation.py create mode 100644 account_mass_reconcile/security/ir.model.access.csv create mode 100644 account_mass_reconcile/security/ir_rule.xml create mode 100644 account_mass_reconcile/tests/__init__.py create mode 100644 account_mass_reconcile/tests/test_onchange_company.py create mode 100644 account_mass_reconcile/tests/test_reconcile.py create mode 100644 account_mass_reconcile/tests/test_reconcile_history.py create mode 100644 account_mass_reconcile/tests/test_scenario_reconcile.py create mode 100644 account_mass_reconcile/views/mass_reconcile.xml create mode 100644 account_mass_reconcile/views/mass_reconcile_history_view.xml create mode 100644 account_mass_reconcile/views/res_config_view.xml diff --git a/account_mass_reconcile/README.rst b/account_mass_reconcile/README.rst new file mode 100644 index 00000000..d11d7f7d --- /dev/null +++ b/account_mass_reconcile/README.rst @@ -0,0 +1,85 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + +============== +Mass Reconcile +============== + +This is a shared work between Akretion and Camptocamp +in order to provide: +- reconciliation facilities for big volume of transactions +- setup different profiles of reconciliation by account +- each profile can use many methods of reconciliation +- this module is also a base to create others +reconciliation methods which can plug in the profiles +- a profile a reconciliation can be run manually +or by a cron +- monitoring of reconciliation runs with an history +which keep track of the reconciled Journal items + +2 simple reconciliation methods are integrated +in this module, the simple reconciliations works +on 2 lines (1 debit / 1 credit) and do not allow +partial reconcilation, they also match on 1 key, +partner or Journal item name. + +This module combines both the ``account_easy_reconcile`` +and the``account_advanced_reconcile`` modules +from previous versions. + +Usage +===== + +Go to 'Invoicing/Periodic Processing/Reconciliation/Mass Automatic Reconcile' to start a +new mass reconcile. + +.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas + :alt: Try me on Runbot + :target: https://runbot.odoo-community.org/runbot/98/8.0 + + +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 smashing it by providing a detailed and welcomed feedback. + + +Credits +======= + +Contributors +------------ +* Sébastien Beau +* Guewen Baconnier +* Vincent Renaville +* Alexandre Fayolle +* Joël Grand-Guillaume +* Nicolas Bessis +* Pedro M.Baeza +* Matthieu Dietrich +* Leonardo Pistone +* Ecino +* Yannick Vaucher +* Rudolf Schnapka +* Florian Dacosta +* Laetitia Gangloff +* Frédéric Clémenti +* Damien Crier + +Maintainer +---------- + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +This module is maintained by the OCA. + +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. + +To contribute to this module, please visit https://odoo-community.org. diff --git a/account_mass_reconcile/__init__.py b/account_mass_reconcile/__init__.py new file mode 100755 index 00000000..cde864ba --- /dev/null +++ b/account_mass_reconcile/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +from . import models diff --git a/account_mass_reconcile/__openerp__.py b/account_mass_reconcile/__openerp__.py new file mode 100644 index 00000000..598548bf --- /dev/null +++ b/account_mass_reconcile/__openerp__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +# © 2012-2016 Camptocamp SA (Guewen Baconnier, Damien Crier, Matthieu Dietrich) +# © 2010 Sébastien Beau +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "Mass Reconcile", + "version": "9.0.1.0.0", + "depends": ["account", "account_full_reconcile"], + "author": "Akretion,Camptocamp,Odoo Community Association (OCA)", + "website": "http://www.akretion.com/", + "category": "Finance", + "data": ["views/mass_reconcile.xml", + "views/mass_reconcile_history_view.xml", + "security/ir_rule.xml", + "security/ir.model.access.csv", + "views/res_config_view.xml", + ], + 'license': 'AGPL-3', + "auto_install": False, + 'installable': True, + +} diff --git a/account_mass_reconcile/i18n/account_easy_reconcile.pot b/account_mass_reconcile/i18n/account_easy_reconcile.pot new file mode 100644 index 00000000..4c7c81dc --- /dev/null +++ b/account_mass_reconcile/i18n/account_easy_reconcile.pot @@ -0,0 +1,602 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_mass_reconcile +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-06-12 14:08+0000\n" +"PO-Revision-Date: 2015-06-12 14:08+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: account_mass_reconcile +#: view:mass.reconcile.history:account_mass_reconcile.view_mass_reconcile_history_search +msgid "7 Days" +msgstr "" + +#. module: account_mass_reconcile +#: model:ir.actions.act_window,help:account_mass_reconcile.action_account_mass_reconcile +msgid "

\n" +" Click to add a reconciliation profile.\n" +"

\n" +" A reconciliation profile specifies, for one account, how\n" +" the entries should be reconciled.\n" +" You can select one or many reconciliation methods which will\n" +" be run sequentially to match the entries between them.\n" +"

\n" +" " +msgstr "" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,account:0 +#: field:mass.reconcile.advanced,account_id:0 +#: field:mass.reconcile.advanced.ref,account_id:0 +#: field:mass.reconcile.base,account_id:0 +#: field:mass.reconcile.simple,account_id:0 +#: field:mass.reconcile.simple.name,account_id:0 +#: field:mass.reconcile.simple.partner,account_id:0 +#: field:mass.reconcile.simple.reference,account_id:0 +msgid "Account" +msgstr "" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,account_lost_id:0 +#: field:mass.reconcile.advanced,account_lost_id:0 +#: field:mass.reconcile.advanced.ref,account_lost_id:0 +#: field:mass.reconcile.base,account_lost_id:0 +#: field:mass.reconcile.options,account_lost_id:0 +#: field:mass.reconcile.simple,account_lost_id:0 +#: field:mass.reconcile.simple.name,account_lost_id:0 +#: field:mass.reconcile.simple.partner,account_lost_id:0 +#: field:mass.reconcile.simple.reference,account_lost_id:0 +msgid "Account Lost" +msgstr "" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,account_profit_id:0 +#: field:mass.reconcile.advanced,account_profit_id:0 +#: field:mass.reconcile.advanced.ref,account_profit_id:0 +#: field:mass.reconcile.base,account_profit_id:0 +#: field:mass.reconcile.options,account_profit_id:0 +#: field:mass.reconcile.simple,account_profit_id:0 +#: field:mass.reconcile.simple.name,account_profit_id:0 +#: field:mass.reconcile.simple.partner,account_profit_id:0 +#: field:mass.reconcile.simple.reference,account_profit_id:0 +msgid "Account Profit" +msgstr "" + +#. module: account_mass_reconcile +#: help:account.mass.reconcile.method,analytic_account_id:0 +#: help:mass.reconcile.base,analytic_account_id:0 +#: help:mass.reconcile.options,analytic_account_id:0 +#: help:mass.reconcile.simple,analytic_account_id:0 +#: help:mass.reconcile.simple.name,analytic_account_id:0 +#: help:mass.reconcile.simple.partner,analytic_account_id:0 +#: help:mass.reconcile.simple.reference,analytic_account_id:0 +msgid "Analytic accountfor the write-off" +msgstr "" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,analytic_account_id:0 +#: field:mass.reconcile.base,analytic_account_id:0 +#: field:mass.reconcile.options,analytic_account_id:0 +#: field:mass.reconcile.simple,analytic_account_id:0 +#: field:mass.reconcile.simple.name,analytic_account_id:0 +#: field:mass.reconcile.simple.partner,analytic_account_id:0 +#: field:mass.reconcile.simple.reference,analytic_account_id:0 +msgid "Analytic_account" +msgstr "" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_tree +msgid "Automatic Mass Reconcile" +msgstr "" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +#: view:mass.reconcile.history:account_mass_reconcile.mass_reconcile_history_form +#: view:mass.reconcile.history:account_mass_reconcile.mass_reconcile_history_tree +#: view:mass.reconcile.history:account_mass_reconcile.view_mass_reconcile_history_search +msgid "Automatic Mass Reconcile History" +msgstr "" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile.method:account_mass_reconcile.account_mass_reconcile_method_form +#: view:account.mass.reconcile.method:account_mass_reconcile.account_mass_reconcile_method_tree +msgid "Automatic Mass Reconcile Method" +msgstr "" + +#. module: account_mass_reconcile +#: model:ir.model,name:account_mass_reconcile.model_res_company +msgid "Companies" +msgstr "" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,company_id:0 +#: field:account.mass.reconcile.method,company_id:0 +#: field:mass.reconcile.history,company_id:0 +msgid "Company" +msgstr "" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "Configuration" +msgstr "" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,create_uid:0 +#: field:account.mass.reconcile.method,create_uid:0 +#: field:mass.reconcile.history,create_uid:0 +#: field:mass.reconcile.simple.name,create_uid:0 +#: field:mass.reconcile.simple.partner,create_uid:0 +#: field:mass.reconcile.simple.reference,create_uid:0 +msgid "Created by" +msgstr "" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,create_date:0 +#: field:account.mass.reconcile.method,create_date:0 +#: field:mass.reconcile.history,create_date:0 +#: field:mass.reconcile.simple.name,create_date:0 +#: field:mass.reconcile.simple.partner,create_date:0 +#: field:mass.reconcile.simple.reference,create_date:0 +msgid "Created on" +msgstr "" + +#. module: account_mass_reconcile +#: view:mass.reconcile.history:account_mass_reconcile.view_mass_reconcile_history_search +msgid "Date" +msgstr "" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,date_base_on:0 +#: field:mass.reconcile.advanced,date_base_on:0 +#: field:mass.reconcile.advanced.ref,date_base_on:0 +#: field:mass.reconcile.base,date_base_on:0 +#: field:mass.reconcile.options,date_base_on:0 +#: field:mass.reconcile.simple,date_base_on:0 +#: field:mass.reconcile.simple.name,date_base_on:0 +#: field:mass.reconcile.simple.partner,date_base_on:0 +#: field:mass.reconcile.simple.reference,date_base_on:0 +msgid "Date of reconciliation" +msgstr "" + +#. module: account_mass_reconcile +#: help:account.mass.reconcile,message_last_post:0 +msgid "Date of the last message posted on the record." +msgstr "" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_tree +msgid "Display items partially reconciled on the last run" +msgstr "" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_tree +msgid "Display items reconciled on the last run" +msgstr "" + +#. module: account_mass_reconcile +#: model:ir.actions.act_window,name:account_mass_reconcile.action_account_mass_reconcile +#: model:ir.ui.menu,name:account_mass_reconcile.menu_mass_reconcile +msgid "Mass Automatic Reconcile" +msgstr "" + +#. module: account_mass_reconcile +#: model:ir.actions.act_window,name:account_mass_reconcile.action_mass_reconcile_history +msgid "Mass Automatic Reconcile History" +msgstr "" + +#. module: account_mass_reconcile +#: code:addons/account_mass_reconcile/mass_reconcile.py:329 +#, python-format +msgid "Error" +msgstr "" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,filter:0 +#: field:mass.reconcile.advanced,filter:0 +#: field:mass.reconcile.advanced.ref,filter:0 +#: field:mass.reconcile.base,filter:0 +#: field:mass.reconcile.options,filter:0 +#: field:mass.reconcile.simple,filter:0 +#: field:mass.reconcile.simple.name,filter:0 +#: field:mass.reconcile.simple.partner,filter:0 +#: field:mass.reconcile.simple.reference,filter:0 +msgid "Filter" +msgstr "" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,message_follower_ids:0 +msgid "Followers" +msgstr "" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,income_exchange_account_id:0 +#: field:mass.reconcile.base,income_exchange_account_id:0 +#: field:mass.reconcile.options,income_exchange_account_id:0 +#: field:mass.reconcile.simple,income_exchange_account_id:0 +#: field:mass.reconcile.simple.name,income_exchange_account_id:0 +#: field:mass.reconcile.simple.partner,income_exchange_account_id:0 +#: field:mass.reconcile.simple.reference,income_exchange_account_id:0 +msgid "Gain ExchangeRate Account" +msgstr "" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "Go to partial reconciled items" +msgstr "" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +#: view:mass.reconcile.history:account_mass_reconcile.mass_reconcile_history_form +#: view:mass.reconcile.history:account_mass_reconcile.mass_reconcile_history_tree +msgid "Go to partially reconciled items" +msgstr "" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +#: view:mass.reconcile.history:account_mass_reconcile.mass_reconcile_history_form +#: view:mass.reconcile.history:account_mass_reconcile.mass_reconcile_history_tree +msgid "Go to reconciled items" +msgstr "" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "Go to unreconciled items" +msgstr "" + +#. module: account_mass_reconcile +#: view:mass.reconcile.history:account_mass_reconcile.view_mass_reconcile_history_search +msgid "Group By..." +msgstr "" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +#: field:account.mass.reconcile,history_ids:0 +msgid "History" +msgstr "" + +#. module: account_mass_reconcile +#: model:ir.actions.act_window,name:account_mass_reconcile.act_mass_reconcile_to_history +msgid "History Details" +msgstr "" + +#. module: account_mass_reconcile +#: help:account.mass.reconcile,message_summary:0 +msgid "Holds the Chatter summary (number of messages, ...). This summary is directly in html format in order to be inserted in kanban views." +msgstr "" + +#. module: account_mass_reconcile +#: field:res.company,reconciliation_commit_every:0 +msgid "How often to commit when performing automaticreconciliation." +msgstr "" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,id:0 +#: field:account.mass.reconcile.method,id:0 +#: field:mass.reconcile.base,id:0 +#: field:mass.reconcile.history,id:0 +#: field:mass.reconcile.options,id:0 +#: field:mass.reconcile.simple,id:0 +#: field:mass.reconcile.simple.name,id:0 +#: field:mass.reconcile.simple.partner,id:0 +#: field:mass.reconcile.simple.reference,id:0 +msgid "ID" +msgstr "" + +#. module: account_mass_reconcile +#: help:account.mass.reconcile,message_unread:0 +msgid "If checked new messages require your attention." +msgstr "" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "Information" +msgstr "" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,message_is_follower:0 +msgid "Is a Follower" +msgstr "" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,journal_id:0 +#: field:mass.reconcile.advanced,journal_id:0 +#: field:mass.reconcile.advanced.ref,journal_id:0 +#: field:mass.reconcile.base,journal_id:0 +#: field:mass.reconcile.options,journal_id:0 +#: field:mass.reconcile.simple,journal_id:0 +#: field:mass.reconcile.simple.name,journal_id:0 +#: field:mass.reconcile.simple.partner,journal_id:0 +#: field:mass.reconcile.simple.reference,journal_id:0 +msgid "Journal" +msgstr "" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,message_last_post:0 +msgid "Last Message Date" +msgstr "" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,write_uid:0 +#: field:account.mass.reconcile.method,write_uid:0 +#: field:mass.reconcile.history,write_uid:0 +#: field:mass.reconcile.simple.name,write_uid:0 +#: field:mass.reconcile.simple.partner,write_uid:0 +#: field:mass.reconcile.simple.reference,write_uid:0 +msgid "Last Updated by" +msgstr "" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,write_date:0 +#: field:account.mass.reconcile.method,write_date:0 +#: field:mass.reconcile.history,write_date:0 +#: field:mass.reconcile.simple.name,write_date:0 +#: field:mass.reconcile.simple.partner,write_date:0 +#: field:mass.reconcile.simple.reference,write_date:0 +msgid "Last Updated on" +msgstr "" + +#. module: account_mass_reconcile +#: help:res.company,reconciliation_commit_every:0 +msgid "Leave zero to commit only at the end of the process." +msgstr "" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,expense_exchange_account_id:0 +#: field:mass.reconcile.base,expense_exchange_account_id:0 +#: field:mass.reconcile.options,expense_exchange_account_id:0 +#: field:mass.reconcile.simple,expense_exchange_account_id:0 +#: field:mass.reconcile.simple.name,expense_exchange_account_id:0 +#: field:mass.reconcile.simple.partner,expense_exchange_account_id:0 +#: field:mass.reconcile.simple.reference,expense_exchange_account_id:0 +msgid "Loss ExchangeRate Account" +msgstr "" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "Match one debit line vs one credit line. Do not allow partial reconciliation. The lines should have the same amount (with the write-off) and the same name to be reconciled." +msgstr "" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "Match one debit line vs one credit line. Do not allow partial reconciliation. The lines should have the same amount (with the write-off) and the same partner to be reconciled." +msgstr "" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "Match one debit line vs one credit line. Do not allow partial reconciliation. The lines should have the same amount (with the write-off) and the same reference to be reconciled." +msgstr "" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,message_ids:0 +msgid "Messages" +msgstr "" + +#. module: account_mass_reconcile +#: help:account.mass.reconcile,message_ids:0 +msgid "Messages and communication history" +msgstr "" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,reconcile_method:0 +msgid "Method" +msgstr "" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,name:0 +msgid "Name" +msgstr "" + +#. module: account_mass_reconcile +#: view:account.config.settings:account_mass_reconcile.view_account_config +msgid "Options" +msgstr "" + +#. module: account_mass_reconcile +#: code:addons/account_mass_reconcile/mass_reconcile_history.py:108 +#: view:mass.reconcile.history:account_mass_reconcile.mass_reconcile_history_form +#: field:mass.reconcile.history,reconcile_ids:0 +#: field:mass.reconcile.history,reconcile_partial_ids:0 +#, python-format +msgid "Partial Reconciliations" +msgstr "" + +#. module: account_mass_reconcile +#: code:addons/account_mass_reconcile/mass_reconcile.py:368 +#, python-format +msgid "Partial reconciled items" +msgstr "" + +#. module: account_mass_reconcile +#: field:mass.reconcile.history,partial_line_ids:0 +msgid "Partially Reconciled Items" +msgstr "" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "Profile Information" +msgstr "" + +#. module: account_mass_reconcile +#: field:mass.reconcile.history,mass_reconcile_id:0 +msgid "Reconcile Profile" +msgstr "" + +#. module: account_mass_reconcile +#: field:mass.reconcile.history,reconcile_line_ids:0 +msgid "Reconciled Items" +msgstr "" + +#. module: account_mass_reconcile +#: view:account.config.settings:account_mass_reconcile.view_account_config +msgid "Reconciliation" +msgstr "" + +#. module: account_mass_reconcile +#: view:mass.reconcile.history:account_mass_reconcile.view_mass_reconcile_history_search +msgid "Reconciliation Profile" +msgstr "" + +#. module: account_mass_reconcile +#: code:addons/account_mass_reconcile/mass_reconcile_history.py:105 +#: view:mass.reconcile.history:account_mass_reconcile.mass_reconcile_history_form +#, python-format +msgid "Reconciliations" +msgstr "" + +#. module: account_mass_reconcile +#: view:mass.reconcile.history:account_mass_reconcile.view_mass_reconcile_history_search +msgid "Reconciliations of last 7 days" +msgstr "" + +#. module: account_mass_reconcile +#: field:mass.reconcile.advanced,partner_ids:0 +#: field:mass.reconcile.advanced.ref,partner_ids:0 +#: field:mass.reconcile.base,partner_ids:0 +#: field:mass.reconcile.simple,partner_ids:0 +#: field:mass.reconcile.simple.name,partner_ids:0 +#: field:mass.reconcile.simple.partner,partner_ids:0 +#: field:mass.reconcile.simple.reference,partner_ids:0 +msgid "Restrict on partners" +msgstr "" + +#. module: account_mass_reconcile +#: field:mass.reconcile.history,date:0 +msgid "Run date" +msgstr "" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,sequence:0 +msgid "Sequence" +msgstr "" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "Simple. Amount and Name" +msgstr "" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "Simple. Amount and Partner" +msgstr "" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "Simple. Amount and Reference" +msgstr "" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_tree +msgid "Start Auto Reconcilation" +msgstr "" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "Start Auto Reconciliation" +msgstr "" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,message_summary:0 +msgid "Summary" +msgstr "" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,task_id:0 +msgid "Task" +msgstr "" + +#. module: account_mass_reconcile +#: help:account.mass.reconcile.method,sequence:0 +msgid "The sequence field is used to order the reconcile method" +msgstr "" + +#. module: account_mass_reconcile +#: code:addons/account_mass_reconcile/mass_reconcile.py:330 +#, python-format +msgid "There is no history of reconciled items on the task: %s." +msgstr "" + +#. module: account_mass_reconcile +#: view:mass.reconcile.history:account_mass_reconcile.view_mass_reconcile_history_search +msgid "Today" +msgstr "" + +#. module: account_mass_reconcile +#: view:mass.reconcile.history:account_mass_reconcile.view_mass_reconcile_history_search +msgid "Todays' Reconcilations" +msgstr "" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,name:0 +msgid "Type" +msgstr "" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,message_unread:0 +msgid "Unread Messages" +msgstr "" + +#. module: account_mass_reconcile +#: code:addons/account_mass_reconcile/mass_reconcile.py:356 +#, python-format +msgid "Unreconciled items" +msgstr "" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,write_off:0 +#: field:mass.reconcile.advanced,write_off:0 +#: field:mass.reconcile.advanced.ref,write_off:0 +#: field:mass.reconcile.base,write_off:0 +#: field:mass.reconcile.options,write_off:0 +#: field:mass.reconcile.simple,write_off:0 +#: field:mass.reconcile.simple.name,write_off:0 +#: field:mass.reconcile.simple.partner,write_off:0 +#: field:mass.reconcile.simple.reference,write_off:0 +msgid "Write off allowed" +msgstr "" + +#. module: account_mass_reconcile +#: model:ir.model,name:account_mass_reconcile.model_account_mass_reconcile +msgid "account mass reconcile" +msgstr "" + +#. module: account_mass_reconcile +#: view:account.config.settings:account_mass_reconcile.view_account_config +msgid "eInvoicing & Payments" +msgstr "" + +#. module: account_mass_reconcile +#: model:ir.model,name:account_mass_reconcile.model_account_mass_reconcile_method +msgid "reconcile method for account_mass_reconcile" +msgstr "" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:0 +msgid "Match multiple debit vs multiple credit entries. Allow partial reconciliation. The lines should have the partner, the credit entry ref. is matched vs the debit entry ref. or name." +msgstr "" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:0 +msgid "Advanced. Partner and Ref" +msgstr "" + +#. module: account_mass_reconcile +#: model:ir.model,name:account_mass_reconcile.model_mass_reconcile_advanced +msgid "mass.reconcile.advanced" +msgstr "mass.reconcile.advanced" + +#. module: account_mass_reconcile +#: model:ir.model,name:account_mass_reconcile.model_mass_reconcile_advanced_ref +msgid "mass.reconcile.advanced.ref" +msgstr "mass.reconcile.advanced.ref" diff --git a/account_mass_reconcile/i18n/en.po b/account_mass_reconcile/i18n/en.po new file mode 100644 index 00000000..ab7f52af --- /dev/null +++ b/account_mass_reconcile/i18n/en.po @@ -0,0 +1,603 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_mass_reconcile +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: bank-statement-reconcile (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-09-11 12:09+0000\n" +"PO-Revision-Date: 2015-09-10 11:31+0000\n" +"Last-Translator: OCA Transbot \n" +"Language-Team: English (http://www.transifex.com/oca/OCA-bank-statement-reconcile-8-0/language/en/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: en\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: account_mass_reconcile +#: view:mass.reconcile.history:account_mass_reconcile.view_mass_reconcile_history_search +msgid "7 Days" +msgstr "7 Days" + +#. module: account_mass_reconcile +#: model:ir.actions.act_window,help:account_mass_reconcile.action_account_mass_reconcile +msgid "" +"

\n" +" Click to add a reconciliation profile.\n" +"

\n" +" A reconciliation profile specifies, for one account, how\n" +" the entries should be reconciled.\n" +" You can select one or many reconciliation methods which will\n" +" be run sequentially to match the entries between them.\n" +"

\n" +" " +msgstr "

\n Click to add a reconciliation profile.\n

\n A reconciliation profile specifies, for one account, how\n the entries should be reconciled.\n You can select one or many reconciliation methods which will\n be run sequentially to match the entries between them.\n

\n " + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,account:0 +#: field:mass.reconcile.advanced,account_id:0 +#: field:mass.reconcile.advanced.ref,account_id:0 +#: field:mass.reconcile.base,account_id:0 +#: field:mass.reconcile.simple,account_id:0 +#: field:mass.reconcile.simple.name,account_id:0 +#: field:mass.reconcile.simple.partner,account_id:0 +#: field:mass.reconcile.simple.reference,account_id:0 +msgid "Account" +msgstr "Account" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,account_lost_id:0 +#: field:mass.reconcile.advanced,account_lost_id:0 +#: field:mass.reconcile.advanced.ref,account_lost_id:0 +#: field:mass.reconcile.base,account_lost_id:0 +#: field:mass.reconcile.options,account_lost_id:0 +#: field:mass.reconcile.simple,account_lost_id:0 +#: field:mass.reconcile.simple.name,account_lost_id:0 +#: field:mass.reconcile.simple.partner,account_lost_id:0 +#: field:mass.reconcile.simple.reference,account_lost_id:0 +msgid "Account Lost" +msgstr "Account Lost" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,account_profit_id:0 +#: field:mass.reconcile.advanced,account_profit_id:0 +#: field:mass.reconcile.advanced.ref,account_profit_id:0 +#: field:mass.reconcile.base,account_profit_id:0 +#: field:mass.reconcile.options,account_profit_id:0 +#: field:mass.reconcile.simple,account_profit_id:0 +#: field:mass.reconcile.simple.name,account_profit_id:0 +#: field:mass.reconcile.simple.partner,account_profit_id:0 +#: field:mass.reconcile.simple.reference,account_profit_id:0 +msgid "Account Profit" +msgstr "Account Profit" + +#. module: account_mass_reconcile +#: help:account.mass.reconcile.method,analytic_account_id:0 +#: help:mass.reconcile.base,analytic_account_id:0 +#: help:mass.reconcile.options,analytic_account_id:0 +#: help:mass.reconcile.simple,analytic_account_id:0 +#: help:mass.reconcile.simple.name,analytic_account_id:0 +#: help:mass.reconcile.simple.partner,analytic_account_id:0 +#: help:mass.reconcile.simple.reference,analytic_account_id:0 +msgid "Analytic account for the write-off" +msgstr "Analytic account for the write-off" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,analytic_account_id:0 +#: field:mass.reconcile.base,analytic_account_id:0 +#: field:mass.reconcile.options,analytic_account_id:0 +#: field:mass.reconcile.simple,analytic_account_id:0 +#: field:mass.reconcile.simple.name,analytic_account_id:0 +#: field:mass.reconcile.simple.partner,analytic_account_id:0 +#: field:mass.reconcile.simple.reference,analytic_account_id:0 +msgid "Analytic_account" +msgstr "Analytic_account" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_tree +msgid "Automatic Mass Reconcile" +msgstr "Automatic Mass Reconcile" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +#: view:mass.reconcile.history:account_mass_reconcile.mass_reconcile_history_form +#: view:mass.reconcile.history:account_mass_reconcile.mass_reconcile_history_tree +#: view:mass.reconcile.history:account_mass_reconcile.view_mass_reconcile_history_search +msgid "Automatic Mass Reconcile History" +msgstr "Automatic Mass Reconcile History" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile.method:account_mass_reconcile.account_mass_reconcile_method_form +#: view:account.mass.reconcile.method:account_mass_reconcile.account_mass_reconcile_method_tree +msgid "Automatic Mass Reconcile Method" +msgstr "Automatic Mass Reconcile Method" + +#. module: account_mass_reconcile +#: model:ir.model,name:account_mass_reconcile.model_res_company +msgid "Companies" +msgstr "Companies" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,company_id:0 +#: field:account.mass.reconcile.method,company_id:0 +#: field:mass.reconcile.history,company_id:0 +msgid "Company" +msgstr "Company" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "Configuration" +msgstr "Configuration" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,create_uid:0 +#: field:account.mass.reconcile.method,create_uid:0 +#: field:mass.reconcile.history,create_uid:0 +#: field:mass.reconcile.simple.name,create_uid:0 +#: field:mass.reconcile.simple.partner,create_uid:0 +#: field:mass.reconcile.simple.reference,create_uid:0 +msgid "Created by" +msgstr "Created by" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,create_date:0 +#: field:account.mass.reconcile.method,create_date:0 +#: field:mass.reconcile.history,create_date:0 +#: field:mass.reconcile.simple.name,create_date:0 +#: field:mass.reconcile.simple.partner,create_date:0 +#: field:mass.reconcile.simple.reference,create_date:0 +msgid "Created on" +msgstr "Created on" + +#. module: account_mass_reconcile +#: view:mass.reconcile.history:account_mass_reconcile.view_mass_reconcile_history_search +msgid "Date" +msgstr "Date" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,date_base_on:0 +#: field:mass.reconcile.advanced,date_base_on:0 +#: field:mass.reconcile.advanced.ref,date_base_on:0 +#: field:mass.reconcile.base,date_base_on:0 +#: field:mass.reconcile.options,date_base_on:0 +#: field:mass.reconcile.simple,date_base_on:0 +#: field:mass.reconcile.simple.name,date_base_on:0 +#: field:mass.reconcile.simple.partner,date_base_on:0 +#: field:mass.reconcile.simple.reference,date_base_on:0 +msgid "Date of reconciliation" +msgstr "Date of reconciliation" + +#. module: account_mass_reconcile +#: help:account.mass.reconcile,message_last_post:0 +msgid "Date of the last message posted on the record." +msgstr "Date of the last message posted on the record." + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_tree +msgid "Display items partially reconciled on the last run" +msgstr "Display items partially reconciled on the last run" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_tree +msgid "Display items reconciled on the last run" +msgstr "Display items reconciled on the last run" + +#. module: account_mass_reconcile +#: model:ir.actions.act_window,name:account_mass_reconcile.action_account_mass_reconcile +#: model:ir.ui.menu,name:account_mass_reconcile.menu_mass_reconcile +msgid "Mass Automatic Reconcile" +msgstr "Mass Automatic Reconcile" + +#. module: account_mass_reconcile +#: model:ir.actions.act_window,name:account_mass_reconcile.action_mass_reconcile_history +msgid "Mass Automatic Reconcile History" +msgstr "Mass Automatic Reconcile History" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,filter:0 +#: field:mass.reconcile.advanced,filter:0 +#: field:mass.reconcile.advanced.ref,filter:0 +#: field:mass.reconcile.base,filter:0 +#: field:mass.reconcile.options,filter:0 +#: field:mass.reconcile.simple,filter:0 +#: field:mass.reconcile.simple.name,filter:0 +#: field:mass.reconcile.simple.partner,filter:0 +#: field:mass.reconcile.simple.reference,filter:0 +msgid "Filter" +msgstr "Filter" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,message_follower_ids:0 +msgid "Followers" +msgstr "Followers" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,income_exchange_account_id:0 +#: field:mass.reconcile.base,income_exchange_account_id:0 +#: field:mass.reconcile.options,income_exchange_account_id:0 +#: field:mass.reconcile.simple,income_exchange_account_id:0 +#: field:mass.reconcile.simple.name,income_exchange_account_id:0 +#: field:mass.reconcile.simple.partner,income_exchange_account_id:0 +#: field:mass.reconcile.simple.reference,income_exchange_account_id:0 +msgid "Gain Exchange Rate Account" +msgstr "Gain Exchange Rate Account" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "Go to partial reconciled items" +msgstr "Go to partial reconciled items" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +#: view:mass.reconcile.history:account_mass_reconcile.mass_reconcile_history_form +#: view:mass.reconcile.history:account_mass_reconcile.mass_reconcile_history_tree +msgid "Go to partially reconciled items" +msgstr "Go to partially reconciled items" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +#: view:mass.reconcile.history:account_mass_reconcile.mass_reconcile_history_form +#: view:mass.reconcile.history:account_mass_reconcile.mass_reconcile_history_tree +msgid "Go to reconciled items" +msgstr "Go to reconciled items" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "Go to unreconciled items" +msgstr "Go to unreconciled items" + +#. module: account_mass_reconcile +#: view:mass.reconcile.history:account_mass_reconcile.view_mass_reconcile_history_search +msgid "Group By..." +msgstr "Group By..." + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +#: field:account.mass.reconcile,history_ids:0 +msgid "History" +msgstr "History" + +#. module: account_mass_reconcile +#: model:ir.actions.act_window,name:account_mass_reconcile.act_mass_reconcile_to_history +msgid "History Details" +msgstr "History Details" + +#. module: account_mass_reconcile +#: help:account.mass.reconcile,message_summary:0 +msgid "" +"Holds the Chatter summary (number of messages, ...). This summary is " +"directly in html format in order to be inserted in kanban views." +msgstr "Holds the Chatter summary (number of messages, ...). This summary is directly in html format in order to be inserted in kanban views." + +#. module: account_mass_reconcile +#: field:res.company,reconciliation_commit_every:0 +msgid "How often to commit when performing automatic reconciliation." +msgstr "How often to commit when performing automatic reconciliation." + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,id:0 field:account.mass.reconcile.method,id:0 +#: field:mass.reconcile.base,id:0 field:mass.reconcile.history,id:0 +#: field:mass.reconcile.options,id:0 field:mass.reconcile.simple,id:0 +#: field:mass.reconcile.simple.name,id:0 +#: field:mass.reconcile.simple.partner,id:0 +#: field:mass.reconcile.simple.reference,id:0 +msgid "ID" +msgstr "ID" + +#. module: account_mass_reconcile +#: help:account.mass.reconcile,message_unread:0 +msgid "If checked new messages require your attention." +msgstr "If checked new messages require your attention." + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "Information" +msgstr "Information" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,message_is_follower:0 +msgid "Is a Follower" +msgstr "Is a Follower" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,journal_id:0 +#: field:mass.reconcile.advanced,journal_id:0 +#: field:mass.reconcile.advanced.ref,journal_id:0 +#: field:mass.reconcile.base,journal_id:0 +#: field:mass.reconcile.options,journal_id:0 +#: field:mass.reconcile.simple,journal_id:0 +#: field:mass.reconcile.simple.name,journal_id:0 +#: field:mass.reconcile.simple.partner,journal_id:0 +#: field:mass.reconcile.simple.reference,journal_id:0 +msgid "Journal" +msgstr "Journal" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,message_last_post:0 +msgid "Last Message Date" +msgstr "Last Message Date" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,write_uid:0 +#: field:account.mass.reconcile.method,write_uid:0 +#: field:mass.reconcile.history,write_uid:0 +#: field:mass.reconcile.simple.name,write_uid:0 +#: field:mass.reconcile.simple.partner,write_uid:0 +#: field:mass.reconcile.simple.reference,write_uid:0 +msgid "Last Updated by" +msgstr "Last Updated by" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,write_date:0 +#: field:account.mass.reconcile.method,write_date:0 +#: field:mass.reconcile.history,write_date:0 +#: field:mass.reconcile.simple.name,write_date:0 +#: field:mass.reconcile.simple.partner,write_date:0 +#: field:mass.reconcile.simple.reference,write_date:0 +msgid "Last Updated on" +msgstr "Last Updated on" + +#. module: account_mass_reconcile +#: help:res.company,reconciliation_commit_every:0 +msgid "Leave zero to commit only at the end of the process." +msgstr "Leave zero to commit only at the end of the process." + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,expense_exchange_account_id:0 +#: field:mass.reconcile.base,expense_exchange_account_id:0 +#: field:mass.reconcile.options,expense_exchange_account_id:0 +#: field:mass.reconcile.simple,expense_exchange_account_id:0 +#: field:mass.reconcile.simple.name,expense_exchange_account_id:0 +#: field:mass.reconcile.simple.partner,expense_exchange_account_id:0 +#: field:mass.reconcile.simple.reference,expense_exchange_account_id:0 +msgid "Loss Exchange Rate Account" +msgstr "Loss Exchange Rate Account" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "" +"Match one debit line vs one credit line. Do not allow partial " +"reconciliation. The lines should have the same amount (with the write-off) " +"and the same name to be reconciled." +msgstr "Match one debit line vs one credit line. Do not allow partial reconciliation. The lines should have the same amount (with the write-off) and the same name to be reconciled." + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "" +"Match one debit line vs one credit line. Do not allow partial " +"reconciliation. The lines should have the same amount (with the write-off) " +"and the same partner to be reconciled." +msgstr "Match one debit line vs one credit line. Do not allow partial reconciliation. The lines should have the same amount (with the write-off) and the same partner to be reconciled." + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "" +"Match one debit line vs one credit line. Do not allow partial " +"reconciliation. The lines should have the same amount (with the write-off) " +"and the same reference to be reconciled." +msgstr "Match one debit line vs one credit line. Do not allow partial reconciliation. The lines should have the same amount (with the write-off) and the same reference to be reconciled." + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,message_ids:0 +msgid "Messages" +msgstr "Messages" + +#. module: account_mass_reconcile +#: help:account.mass.reconcile,message_ids:0 +msgid "Messages and communication history" +msgstr "Messages and communication history" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,reconcile_method:0 +msgid "Method" +msgstr "Method" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,name:0 +msgid "Name" +msgstr "Name" + +#. module: account_mass_reconcile +#: view:account.config.settings:account_mass_reconcile.view_account_config +msgid "Options" +msgstr "Options" + +#. module: account_mass_reconcile +#: code:addons/account_mass_reconcile/mass_reconcile_history.py:104 +#: view:mass.reconcile.history:account_mass_reconcile.mass_reconcile_history_form +#: field:mass.reconcile.history,reconcile_ids:0 +#: field:mass.reconcile.history,reconcile_partial_ids:0 +#, python-format +msgid "Partial Reconciliations" +msgstr "Partial Reconciliations" + +#. module: account_mass_reconcile +#: code:addons/account_mass_reconcile/mass_reconcile.py:334 +#, python-format +msgid "Partial reconciled items" +msgstr "Partial reconciled items" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "Profile Information" +msgstr "Profile Information" + +#. module: account_mass_reconcile +#: field:mass.reconcile.history,mass_reconcile_id:0 +msgid "Reconcile Profile" +msgstr "Reconcile Profile" + +#. module: account_mass_reconcile +#: view:account.config.settings:account_mass_reconcile.view_account_config +msgid "Reconciliation" +msgstr "Reconciliation" + +#. module: account_mass_reconcile +#: view:mass.reconcile.history:account_mass_reconcile.view_mass_reconcile_history_search +msgid "Reconciliation Profile" +msgstr "Reconciliation Profile" + +#. module: account_mass_reconcile +#: code:addons/account_mass_reconcile/mass_reconcile_history.py:100 +#: view:mass.reconcile.history:account_mass_reconcile.mass_reconcile_history_form +#, python-format +msgid "Reconciliations" +msgstr "Reconciliations" + +#. module: account_mass_reconcile +#: view:mass.reconcile.history:account_mass_reconcile.view_mass_reconcile_history_search +msgid "Reconciliations of last 7 days" +msgstr "Reconciliations of last 7 days" + +#. module: account_mass_reconcile +#: field:mass.reconcile.advanced,partner_ids:0 +#: field:mass.reconcile.advanced.ref,partner_ids:0 +#: field:mass.reconcile.base,partner_ids:0 +#: field:mass.reconcile.simple,partner_ids:0 +#: field:mass.reconcile.simple.name,partner_ids:0 +#: field:mass.reconcile.simple.partner,partner_ids:0 +#: field:mass.reconcile.simple.reference,partner_ids:0 +msgid "Restrict on partners" +msgstr "Restrict on partners" + +#. module: account_mass_reconcile +#: field:mass.reconcile.history,date:0 +msgid "Run date" +msgstr "Run date" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,sequence:0 +msgid "Sequence" +msgstr "Sequence" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "Simple. Amount and Name" +msgstr "Simple. Amount and Name" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "Simple. Amount and Partner" +msgstr "Simple. Amount and Partner" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "Simple. Amount and Reference" +msgstr "Simple. Amount and Reference" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_tree +msgid "Start Auto Reconcilation" +msgstr "Start Auto Reconcilation" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "Start Auto Reconciliation" +msgstr "Start Auto Reconciliation" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,message_summary:0 +msgid "Summary" +msgstr "Summary" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,task_id:0 +msgid "Task" +msgstr "Task" + +#. module: account_mass_reconcile +#: help:account.mass.reconcile.method,sequence:0 +msgid "The sequence field is used to order the reconcile method" +msgstr "The sequence field is used to order the reconcile method" + +#. module: account_mass_reconcile +#: code:addons/account_mass_reconcile/mass_reconcile.py:294 +#, python-format +msgid "There is no history of reconciled items on the task: %s." +msgstr "There is no history of reconciled items on the task: %s." + +#. module: account_mass_reconcile +#: code:addons/account_mass_reconcile/mass_reconcile.py:269 +#, python-format +msgid "There was an error during reconciliation : %s" +msgstr "There was an error during reconciliation : %s" + +#. module: account_mass_reconcile +#: view:mass.reconcile.history:account_mass_reconcile.view_mass_reconcile_history_search +msgid "Today" +msgstr "Today" + +#. module: account_mass_reconcile +#: view:mass.reconcile.history:account_mass_reconcile.view_mass_reconcile_history_search +msgid "Todays' Reconcilations" +msgstr "Todays' Reconcilations" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,name:0 +msgid "Type" +msgstr "Type" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,message_unread:0 +msgid "Unread Messages" +msgstr "Unread Messages" + +#. module: account_mass_reconcile +#: code:addons/account_mass_reconcile/mass_reconcile.py:321 +#, python-format +msgid "Unreconciled items" +msgstr "Unreconciled items" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,write_off:0 +#: field:mass.reconcile.advanced,write_off:0 +#: field:mass.reconcile.advanced.ref,write_off:0 +#: field:mass.reconcile.base,write_off:0 +#: field:mass.reconcile.options,write_off:0 +#: field:mass.reconcile.simple,write_off:0 +#: field:mass.reconcile.simple.name,write_off:0 +#: field:mass.reconcile.simple.partner,write_off:0 +#: field:mass.reconcile.simple.reference,write_off:0 +msgid "Write off allowed" +msgstr "Write off allowed" + +#. module: account_mass_reconcile +#: model:ir.model,name:account_mass_reconcile.model_account_mass_reconcile +msgid "account mass reconcile" +msgstr "account mass reconcile" + +#. module: account_mass_reconcile +#: view:account.config.settings:account_mass_reconcile.view_account_config +msgid "eInvoicing & Payments" +msgstr "eInvoicing & Payments" + +#. module: account_mass_reconcile +#: model:ir.model,name:account_mass_reconcile.model_account_mass_reconcile_method +msgid "reconcile method for account_mass_reconcile" +msgstr "reconcile method for account_mass_reconcile" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:0 +msgid "Match multiple debit vs multiple credit entries. Allow partial reconciliation. The lines should have the partner, the credit entry ref. is matched vs the debit entry ref. or name." +msgstr "Match multiple debit vs multiple credit entries. Allow partial reconciliation. The lines should have the partner, the credit entry ref. is matched vs the debit entry ref. or name." + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:0 +msgid "Advanced. Partner and Ref" +msgstr "Advanced. Partner and Ref" + +#. module: account_mass_reconcile +#: model:ir.model,name:account_mass_reconcile.model_mass_reconcile_advanced +msgid "mass.reconcile.advanced" +msgstr "mass.reconcile.advanced" + +#. module: account_mass_reconcile +#: model:ir.model,name:account_mass_reconcile.model_mass_reconcile_advanced_ref +msgid "mass.reconcile.advanced.ref" +msgstr "mass.reconcile.advanced.ref" diff --git a/account_mass_reconcile/i18n/es.po b/account_mass_reconcile/i18n/es.po new file mode 100644 index 00000000..f545b76c --- /dev/null +++ b/account_mass_reconcile/i18n/es.po @@ -0,0 +1,611 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_mass_reconcile +# +# Translators: +# FIRST AUTHOR , 2014 +msgid "" +msgstr "" +"Project-Id-Version: bank-statement-reconcile (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-09-11 12:09+0000\n" +"PO-Revision-Date: 2015-09-10 11:31+0000\n" +"Last-Translator: OCA Transbot \n" +"Language-Team: Spanish (http://www.transifex.com/oca/OCA-bank-statement-reconcile-8-0/language/es/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: es\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: account_mass_reconcile +#: view:mass.reconcile.history:account_mass_reconcile.view_mass_reconcile_history_search +msgid "7 Days" +msgstr "7 días" + +#. module: account_mass_reconcile +#: model:ir.actions.act_window,help:account_mass_reconcile.action_account_mass_reconcile +msgid "" +"

\n" +" Click to add a reconciliation profile.\n" +"

\n" +" A reconciliation profile specifies, for one account, how\n" +" the entries should be reconciled.\n" +" You can select one or many reconciliation methods which will\n" +" be run sequentially to match the entries between them.\n" +"

\n" +" " +msgstr "

\nPulse para añadir un pefil de conciliación.\n

\nUn perfil de conciliación especifica, para una cuenta, como\nlos apuntes deben ser conciliados.\nPuede seleccionar uno o varios métodos de conciliación que\nserán ejecutados secuencialmente para casar los apuntes\nentre ellos.\n

\n " + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,account:0 +#: field:mass.reconcile.advanced,account_id:0 +#: field:mass.reconcile.advanced.ref,account_id:0 +#: field:mass.reconcile.base,account_id:0 +#: field:mass.reconcile.simple,account_id:0 +#: field:mass.reconcile.simple.name,account_id:0 +#: field:mass.reconcile.simple.partner,account_id:0 +#: field:mass.reconcile.simple.reference,account_id:0 +msgid "Account" +msgstr "Cuenta" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,account_lost_id:0 +#: field:mass.reconcile.advanced,account_lost_id:0 +#: field:mass.reconcile.advanced.ref,account_lost_id:0 +#: field:mass.reconcile.base,account_lost_id:0 +#: field:mass.reconcile.options,account_lost_id:0 +#: field:mass.reconcile.simple,account_lost_id:0 +#: field:mass.reconcile.simple.name,account_lost_id:0 +#: field:mass.reconcile.simple.partner,account_lost_id:0 +#: field:mass.reconcile.simple.reference,account_lost_id:0 +msgid "Account Lost" +msgstr "Cuenta de pérdidas" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,account_profit_id:0 +#: field:mass.reconcile.advanced,account_profit_id:0 +#: field:mass.reconcile.advanced.ref,account_profit_id:0 +#: field:mass.reconcile.base,account_profit_id:0 +#: field:mass.reconcile.options,account_profit_id:0 +#: field:mass.reconcile.simple,account_profit_id:0 +#: field:mass.reconcile.simple.name,account_profit_id:0 +#: field:mass.reconcile.simple.partner,account_profit_id:0 +#: field:mass.reconcile.simple.reference,account_profit_id:0 +msgid "Account Profit" +msgstr "Cuenta de ganancias" + +#. module: account_mass_reconcile +#: help:account.mass.reconcile.method,analytic_account_id:0 +#: help:mass.reconcile.base,analytic_account_id:0 +#: help:mass.reconcile.options,analytic_account_id:0 +#: help:mass.reconcile.simple,analytic_account_id:0 +#: help:mass.reconcile.simple.name,analytic_account_id:0 +#: help:mass.reconcile.simple.partner,analytic_account_id:0 +#: help:mass.reconcile.simple.reference,analytic_account_id:0 +msgid "Analytic account for the write-off" +msgstr "" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,analytic_account_id:0 +#: field:mass.reconcile.base,analytic_account_id:0 +#: field:mass.reconcile.options,analytic_account_id:0 +#: field:mass.reconcile.simple,analytic_account_id:0 +#: field:mass.reconcile.simple.name,analytic_account_id:0 +#: field:mass.reconcile.simple.partner,analytic_account_id:0 +#: field:mass.reconcile.simple.reference,analytic_account_id:0 +msgid "Analytic_account" +msgstr "" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_tree +msgid "Automatic Mass Reconcile" +msgstr "Conciliación automática sencilla" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +#: view:mass.reconcile.history:account_mass_reconcile.mass_reconcile_history_form +#: view:mass.reconcile.history:account_mass_reconcile.mass_reconcile_history_tree +#: view:mass.reconcile.history:account_mass_reconcile.view_mass_reconcile_history_search +msgid "Automatic Mass Reconcile History" +msgstr "Historial de conciliación automática sencilla" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile.method:account_mass_reconcile.account_mass_reconcile_method_form +#: view:account.mass.reconcile.method:account_mass_reconcile.account_mass_reconcile_method_tree +msgid "Automatic Mass Reconcile Method" +msgstr "Método de conciliación automática sencilla" + +#. module: account_mass_reconcile +#: model:ir.model,name:account_mass_reconcile.model_res_company +msgid "Companies" +msgstr "" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,company_id:0 +#: field:account.mass.reconcile.method,company_id:0 +#: field:mass.reconcile.history,company_id:0 +msgid "Company" +msgstr "Compañía" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "Configuration" +msgstr "Configuración" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,create_uid:0 +#: field:account.mass.reconcile.method,create_uid:0 +#: field:mass.reconcile.history,create_uid:0 +#: field:mass.reconcile.simple.name,create_uid:0 +#: field:mass.reconcile.simple.partner,create_uid:0 +#: field:mass.reconcile.simple.reference,create_uid:0 +msgid "Created by" +msgstr "" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,create_date:0 +#: field:account.mass.reconcile.method,create_date:0 +#: field:mass.reconcile.history,create_date:0 +#: field:mass.reconcile.simple.name,create_date:0 +#: field:mass.reconcile.simple.partner,create_date:0 +#: field:mass.reconcile.simple.reference,create_date:0 +msgid "Created on" +msgstr "" + +#. module: account_mass_reconcile +#: view:mass.reconcile.history:account_mass_reconcile.view_mass_reconcile_history_search +msgid "Date" +msgstr "Fecha" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,date_base_on:0 +#: field:mass.reconcile.advanced,date_base_on:0 +#: field:mass.reconcile.advanced.ref,date_base_on:0 +#: field:mass.reconcile.base,date_base_on:0 +#: field:mass.reconcile.options,date_base_on:0 +#: field:mass.reconcile.simple,date_base_on:0 +#: field:mass.reconcile.simple.name,date_base_on:0 +#: field:mass.reconcile.simple.partner,date_base_on:0 +#: field:mass.reconcile.simple.reference,date_base_on:0 +msgid "Date of reconciliation" +msgstr "Fecha de conciliación" + +#. module: account_mass_reconcile +#: help:account.mass.reconcile,message_last_post:0 +msgid "Date of the last message posted on the record." +msgstr "" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_tree +msgid "Display items partially reconciled on the last run" +msgstr "Mostrar elementos conciliados parcialmente en la última ejecucción" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_tree +msgid "Display items reconciled on the last run" +msgstr "Mostrar elementos conciliados en la última ejecucción" + +#. module: account_mass_reconcile +#: model:ir.actions.act_window,name:account_mass_reconcile.action_account_mass_reconcile +#: model:ir.ui.menu,name:account_mass_reconcile.menu_mass_reconcile +msgid "Mass Automatic Reconcile" +msgstr "Conciliación automática simple" + +#. module: account_mass_reconcile +#: model:ir.actions.act_window,name:account_mass_reconcile.action_mass_reconcile_history +msgid "Mass Automatic Reconcile History" +msgstr "Historial de la conciliación automática sencilla" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,filter:0 +#: field:mass.reconcile.advanced,filter:0 +#: field:mass.reconcile.advanced.ref,filter:0 +#: field:mass.reconcile.base,filter:0 +#: field:mass.reconcile.options,filter:0 +#: field:mass.reconcile.simple,filter:0 +#: field:mass.reconcile.simple.name,filter:0 +#: field:mass.reconcile.simple.partner,filter:0 +#: field:mass.reconcile.simple.reference,filter:0 +msgid "Filter" +msgstr "Filtro" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,message_follower_ids:0 +msgid "Followers" +msgstr "" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,income_exchange_account_id:0 +#: field:mass.reconcile.base,income_exchange_account_id:0 +#: field:mass.reconcile.options,income_exchange_account_id:0 +#: field:mass.reconcile.simple,income_exchange_account_id:0 +#: field:mass.reconcile.simple.name,income_exchange_account_id:0 +#: field:mass.reconcile.simple.partner,income_exchange_account_id:0 +#: field:mass.reconcile.simple.reference,income_exchange_account_id:0 +msgid "Gain Exchange Rate Account" +msgstr "" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "Go to partial reconciled items" +msgstr "" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +#: view:mass.reconcile.history:account_mass_reconcile.mass_reconcile_history_form +#: view:mass.reconcile.history:account_mass_reconcile.mass_reconcile_history_tree +msgid "Go to partially reconciled items" +msgstr "Ir a los elementos parcialmente conciliados" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +#: view:mass.reconcile.history:account_mass_reconcile.mass_reconcile_history_form +#: view:mass.reconcile.history:account_mass_reconcile.mass_reconcile_history_tree +msgid "Go to reconciled items" +msgstr "Ir a los elementos conciliados" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "Go to unreconciled items" +msgstr "" + +#. module: account_mass_reconcile +#: view:mass.reconcile.history:account_mass_reconcile.view_mass_reconcile_history_search +msgid "Group By..." +msgstr "Agrupar por..." + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +#: field:account.mass.reconcile,history_ids:0 +msgid "History" +msgstr "Historial" + +#. module: account_mass_reconcile +#: model:ir.actions.act_window,name:account_mass_reconcile.act_mass_reconcile_to_history +msgid "History Details" +msgstr "Detalles del historial" + +#. module: account_mass_reconcile +#: help:account.mass.reconcile,message_summary:0 +msgid "" +"Holds the Chatter summary (number of messages, ...). This summary is " +"directly in html format in order to be inserted in kanban views." +msgstr "" + +#. module: account_mass_reconcile +#: field:res.company,reconciliation_commit_every:0 +msgid "How often to commit when performing automatic reconciliation." +msgstr "" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,id:0 field:account.mass.reconcile.method,id:0 +#: field:mass.reconcile.base,id:0 field:mass.reconcile.history,id:0 +#: field:mass.reconcile.options,id:0 field:mass.reconcile.simple,id:0 +#: field:mass.reconcile.simple.name,id:0 +#: field:mass.reconcile.simple.partner,id:0 +#: field:mass.reconcile.simple.reference,id:0 +msgid "ID" +msgstr "" + +#. module: account_mass_reconcile +#: help:account.mass.reconcile,message_unread:0 +msgid "If checked new messages require your attention." +msgstr "" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "Information" +msgstr "Información" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,message_is_follower:0 +msgid "Is a Follower" +msgstr "" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,journal_id:0 +#: field:mass.reconcile.advanced,journal_id:0 +#: field:mass.reconcile.advanced.ref,journal_id:0 +#: field:mass.reconcile.base,journal_id:0 +#: field:mass.reconcile.options,journal_id:0 +#: field:mass.reconcile.simple,journal_id:0 +#: field:mass.reconcile.simple.name,journal_id:0 +#: field:mass.reconcile.simple.partner,journal_id:0 +#: field:mass.reconcile.simple.reference,journal_id:0 +msgid "Journal" +msgstr "Diario" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,message_last_post:0 +msgid "Last Message Date" +msgstr "" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,write_uid:0 +#: field:account.mass.reconcile.method,write_uid:0 +#: field:mass.reconcile.history,write_uid:0 +#: field:mass.reconcile.simple.name,write_uid:0 +#: field:mass.reconcile.simple.partner,write_uid:0 +#: field:mass.reconcile.simple.reference,write_uid:0 +msgid "Last Updated by" +msgstr "" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,write_date:0 +#: field:account.mass.reconcile.method,write_date:0 +#: field:mass.reconcile.history,write_date:0 +#: field:mass.reconcile.simple.name,write_date:0 +#: field:mass.reconcile.simple.partner,write_date:0 +#: field:mass.reconcile.simple.reference,write_date:0 +msgid "Last Updated on" +msgstr "" + +#. module: account_mass_reconcile +#: help:res.company,reconciliation_commit_every:0 +msgid "Leave zero to commit only at the end of the process." +msgstr "" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,expense_exchange_account_id:0 +#: field:mass.reconcile.base,expense_exchange_account_id:0 +#: field:mass.reconcile.options,expense_exchange_account_id:0 +#: field:mass.reconcile.simple,expense_exchange_account_id:0 +#: field:mass.reconcile.simple.name,expense_exchange_account_id:0 +#: field:mass.reconcile.simple.partner,expense_exchange_account_id:0 +#: field:mass.reconcile.simple.reference,expense_exchange_account_id:0 +msgid "Loss Exchange Rate Account" +msgstr "" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "" +"Match one debit line vs one credit line. Do not allow partial " +"reconciliation. The lines should have the same amount (with the write-off) " +"and the same name to be reconciled." +msgstr "Casa una línea del debe con una línea del haber. No permite conciliación parcial. Las líneas deben tener el mismo importe (con el desajuste) y el mismo nombre para ser conciliadas." + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "" +"Match one debit line vs one credit line. Do not allow partial " +"reconciliation. The lines should have the same amount (with the write-off) " +"and the same partner to be reconciled." +msgstr "Casa una línea del debe con una línea del haber. No permite conciliación parcial. Las líneas deben tener el mismo importe (con el desajuste) y la misma empresa para ser conciliadas." + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "" +"Match one debit line vs one credit line. Do not allow partial " +"reconciliation. The lines should have the same amount (with the write-off) " +"and the same reference to be reconciled." +msgstr "Casa una línea del debe con una línea del haber. No permite conciliación parcial. Las líneas deben tener el mismo importe (con el desajuste) y la misma referencia para ser conciliadas." + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,message_ids:0 +msgid "Messages" +msgstr "" + +#. module: account_mass_reconcile +#: help:account.mass.reconcile,message_ids:0 +msgid "Messages and communication history" +msgstr "" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,reconcile_method:0 +msgid "Method" +msgstr "Método" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,name:0 +msgid "Name" +msgstr "Nombre" + +#. module: account_mass_reconcile +#: view:account.config.settings:account_mass_reconcile.view_account_config +msgid "Options" +msgstr "" + +#. module: account_mass_reconcile +#: code:addons/account_mass_reconcile/mass_reconcile_history.py:104 +#: view:mass.reconcile.history:account_mass_reconcile.mass_reconcile_history_form +#: field:mass.reconcile.history,reconcile_ids:0 +#: field:mass.reconcile.history,reconcile_partial_ids:0 +#, python-format +msgid "Partial Reconciliations" +msgstr "Conciliaciones parciales" + +#. module: account_mass_reconcile +#: code:addons/account_mass_reconcile/mass_reconcile.py:334 +#, python-format +msgid "Partial reconciled items" +msgstr "" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "Profile Information" +msgstr "Información del perfil" + +#. module: account_mass_reconcile +#: field:mass.reconcile.history,mass_reconcile_id:0 +msgid "Reconcile Profile" +msgstr "Perfil de conciliación" + +#. module: account_mass_reconcile +#: view:account.config.settings:account_mass_reconcile.view_account_config +msgid "Reconciliation" +msgstr "" + +#. module: account_mass_reconcile +#: view:mass.reconcile.history:account_mass_reconcile.view_mass_reconcile_history_search +msgid "Reconciliation Profile" +msgstr "Perfil de conciliación" + +#. module: account_mass_reconcile +#: code:addons/account_mass_reconcile/mass_reconcile_history.py:100 +#: view:mass.reconcile.history:account_mass_reconcile.mass_reconcile_history_form +#, python-format +msgid "Reconciliations" +msgstr "Conciliaciones" + +#. module: account_mass_reconcile +#: view:mass.reconcile.history:account_mass_reconcile.view_mass_reconcile_history_search +msgid "Reconciliations of last 7 days" +msgstr "Conciliaciones de los últimos 7 días" + +#. module: account_mass_reconcile +#: field:mass.reconcile.advanced,partner_ids:0 +#: field:mass.reconcile.advanced.ref,partner_ids:0 +#: field:mass.reconcile.base,partner_ids:0 +#: field:mass.reconcile.simple,partner_ids:0 +#: field:mass.reconcile.simple.name,partner_ids:0 +#: field:mass.reconcile.simple.partner,partner_ids:0 +#: field:mass.reconcile.simple.reference,partner_ids:0 +msgid "Restrict on partners" +msgstr "Restringir en las empresas" + +#. module: account_mass_reconcile +#: field:mass.reconcile.history,date:0 +msgid "Run date" +msgstr "Fecha ejecucción" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,sequence:0 +msgid "Sequence" +msgstr "Secuencia" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "Simple. Amount and Name" +msgstr "Simple. Cantidad y nombre" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "Simple. Amount and Partner" +msgstr "Simple. Cantidad y empresa" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "Simple. Amount and Reference" +msgstr "Simple. Cantidad y referencia" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_tree +msgid "Start Auto Reconcilation" +msgstr "Iniciar conciliación automática" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "Start Auto Reconciliation" +msgstr "Iniciar auto-conciliación" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,message_summary:0 +msgid "Summary" +msgstr "" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,task_id:0 +msgid "Task" +msgstr "Tarea" + +#. module: account_mass_reconcile +#: help:account.mass.reconcile.method,sequence:0 +msgid "The sequence field is used to order the reconcile method" +msgstr "El campo de secuencia se usa para ordenar los métodos de conciliación" + +#. module: account_mass_reconcile +#: code:addons/account_mass_reconcile/mass_reconcile.py:294 +#, python-format +msgid "There is no history of reconciled items on the task: %s." +msgstr "No hay histórico de elementos conciliados en la tarea: %s" + +#. module: account_mass_reconcile +#: code:addons/account_mass_reconcile/mass_reconcile.py:269 +#, python-format +msgid "There was an error during reconciliation : %s" +msgstr "" + +#. module: account_mass_reconcile +#: view:mass.reconcile.history:account_mass_reconcile.view_mass_reconcile_history_search +msgid "Today" +msgstr "Hoy" + +#. module: account_mass_reconcile +#: view:mass.reconcile.history:account_mass_reconcile.view_mass_reconcile_history_search +msgid "Todays' Reconcilations" +msgstr "Conciliaciones de hoy" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,name:0 +msgid "Type" +msgstr "Tipo" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,message_unread:0 +msgid "Unread Messages" +msgstr "" + +#. module: account_mass_reconcile +#: code:addons/account_mass_reconcile/mass_reconcile.py:321 +#, python-format +msgid "Unreconciled items" +msgstr "" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,write_off:0 +#: field:mass.reconcile.advanced,write_off:0 +#: field:mass.reconcile.advanced.ref,write_off:0 +#: field:mass.reconcile.base,write_off:0 +#: field:mass.reconcile.options,write_off:0 +#: field:mass.reconcile.simple,write_off:0 +#: field:mass.reconcile.simple.name,write_off:0 +#: field:mass.reconcile.simple.partner,write_off:0 +#: field:mass.reconcile.simple.reference,write_off:0 +msgid "Write off allowed" +msgstr "Desajuste permitido" + +#. module: account_mass_reconcile +#: model:ir.model,name:account_mass_reconcile.model_account_mass_reconcile +msgid "account mass reconcile" +msgstr "account mass reconcile" + +#. module: account_mass_reconcile +#: view:account.config.settings:account_mass_reconcile.view_account_config +msgid "eInvoicing & Payments" +msgstr "" + +#. module: account_mass_reconcile +#: model:ir.model,name:account_mass_reconcile.model_account_mass_reconcile_method +msgid "reconcile method for account_mass_reconcile" +msgstr "Método de conciliación para account_mass_reconcile" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:0 +msgid "" +"Match multiple debit vs multiple credit entries. Allow partial " +"reconciliation. The lines should have the partner, the credit entry ref. is " +"matched vs the debit entry ref. or name." +msgstr "" +"Casa múltiples líneas del debe con múltiples líneas del haber. Permite " +"conciliación parcial. Las líneas deben tener la empresa, la referencia de la " +"línea del haber se casa contra la referencia de la línea del debe o el " +"nombre." + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:0 +msgid "Advanced. Partner and Ref" +msgstr "Avanzado. Empresa y referencia" + +#. module: account_mass_reconcile +#: model:ir.model,name:account_mass_reconcile.model_mass_reconcile_advanced +msgid "mass.reconcile.advanced" +msgstr "mass.reconcile.advanced" + +#. module: account_mass_reconcile +#: model:ir.model,name:account_mass_reconcile.model_mass_reconcile_advanced_ref +msgid "mass.reconcile.advanced.ref" +msgstr "mass.reconcile.advanced.ref" diff --git a/account_mass_reconcile/i18n/fr.po b/account_mass_reconcile/i18n/fr.po new file mode 100644 index 00000000..fe2739e7 --- /dev/null +++ b/account_mass_reconcile/i18n/fr.po @@ -0,0 +1,610 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_mass_reconcile +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: bank-statement-reconcile (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-09-11 12:09+0000\n" +"PO-Revision-Date: 2015-09-10 11:31+0000\n" +"Last-Translator: OCA Transbot \n" +"Language-Team: French (http://www.transifex.com/oca/OCA-bank-statement-reconcile-8-0/language/fr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: fr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: account_mass_reconcile +#: view:mass.reconcile.history:account_mass_reconcile.view_mass_reconcile_history_search +msgid "7 Days" +msgstr "7 jours" + +#. module: account_mass_reconcile +#: model:ir.actions.act_window,help:account_mass_reconcile.action_account_mass_reconcile +msgid "" +"

\n" +" Click to add a reconciliation profile.\n" +"

\n" +" A reconciliation profile specifies, for one account, how\n" +" the entries should be reconciled.\n" +" You can select one or many reconciliation methods which will\n" +" be run sequentially to match the entries between them.\n" +"

\n" +" " +msgstr "

\n Cliquez pour ajouter un profil de lettrage.\n

\n Un profil de lettrage spécifie, pour un compte, comment\n les écritures doivent être lettrées.\n Vous pouvez sélectionner une ou plusieurs méthodes de lettrage\n qui seront lancées successivement pour identifier les écritures\n devant être lettrées.

\n " + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,account:0 +#: field:mass.reconcile.advanced,account_id:0 +#: field:mass.reconcile.advanced.ref,account_id:0 +#: field:mass.reconcile.base,account_id:0 +#: field:mass.reconcile.simple,account_id:0 +#: field:mass.reconcile.simple.name,account_id:0 +#: field:mass.reconcile.simple.partner,account_id:0 +#: field:mass.reconcile.simple.reference,account_id:0 +msgid "Account" +msgstr "Compte" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,account_lost_id:0 +#: field:mass.reconcile.advanced,account_lost_id:0 +#: field:mass.reconcile.advanced.ref,account_lost_id:0 +#: field:mass.reconcile.base,account_lost_id:0 +#: field:mass.reconcile.options,account_lost_id:0 +#: field:mass.reconcile.simple,account_lost_id:0 +#: field:mass.reconcile.simple.name,account_lost_id:0 +#: field:mass.reconcile.simple.partner,account_lost_id:0 +#: field:mass.reconcile.simple.reference,account_lost_id:0 +msgid "Account Lost" +msgstr "Compte de pertes" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,account_profit_id:0 +#: field:mass.reconcile.advanced,account_profit_id:0 +#: field:mass.reconcile.advanced.ref,account_profit_id:0 +#: field:mass.reconcile.base,account_profit_id:0 +#: field:mass.reconcile.options,account_profit_id:0 +#: field:mass.reconcile.simple,account_profit_id:0 +#: field:mass.reconcile.simple.name,account_profit_id:0 +#: field:mass.reconcile.simple.partner,account_profit_id:0 +#: field:mass.reconcile.simple.reference,account_profit_id:0 +msgid "Account Profit" +msgstr "Compte de profits" + +#. module: account_mass_reconcile +#: help:account.mass.reconcile.method,analytic_account_id:0 +#: help:mass.reconcile.base,analytic_account_id:0 +#: help:mass.reconcile.options,analytic_account_id:0 +#: help:mass.reconcile.simple,analytic_account_id:0 +#: help:mass.reconcile.simple.name,analytic_account_id:0 +#: help:mass.reconcile.simple.partner,analytic_account_id:0 +#: help:mass.reconcile.simple.reference,analytic_account_id:0 +msgid "Analytic account for the write-off" +msgstr "" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,analytic_account_id:0 +#: field:mass.reconcile.base,analytic_account_id:0 +#: field:mass.reconcile.options,analytic_account_id:0 +#: field:mass.reconcile.simple,analytic_account_id:0 +#: field:mass.reconcile.simple.name,analytic_account_id:0 +#: field:mass.reconcile.simple.partner,analytic_account_id:0 +#: field:mass.reconcile.simple.reference,analytic_account_id:0 +msgid "Analytic_account" +msgstr "" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_tree +msgid "Automatic Mass Reconcile" +msgstr "Lettrage automatisé" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +#: view:mass.reconcile.history:account_mass_reconcile.mass_reconcile_history_form +#: view:mass.reconcile.history:account_mass_reconcile.mass_reconcile_history_tree +#: view:mass.reconcile.history:account_mass_reconcile.view_mass_reconcile_history_search +msgid "Automatic Mass Reconcile History" +msgstr "Historique des lettrages automatisés" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile.method:account_mass_reconcile.account_mass_reconcile_method_form +#: view:account.mass.reconcile.method:account_mass_reconcile.account_mass_reconcile_method_tree +msgid "Automatic Mass Reconcile Method" +msgstr "Méthode de lettrage automatisé" + +#. module: account_mass_reconcile +#: model:ir.model,name:account_mass_reconcile.model_res_company +msgid "Companies" +msgstr "" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,company_id:0 +#: field:account.mass.reconcile.method,company_id:0 +#: field:mass.reconcile.history,company_id:0 +msgid "Company" +msgstr "Société" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "Configuration" +msgstr "Configuration" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,create_uid:0 +#: field:account.mass.reconcile.method,create_uid:0 +#: field:mass.reconcile.history,create_uid:0 +#: field:mass.reconcile.simple.name,create_uid:0 +#: field:mass.reconcile.simple.partner,create_uid:0 +#: field:mass.reconcile.simple.reference,create_uid:0 +msgid "Created by" +msgstr "" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,create_date:0 +#: field:account.mass.reconcile.method,create_date:0 +#: field:mass.reconcile.history,create_date:0 +#: field:mass.reconcile.simple.name,create_date:0 +#: field:mass.reconcile.simple.partner,create_date:0 +#: field:mass.reconcile.simple.reference,create_date:0 +msgid "Created on" +msgstr "" + +#. module: account_mass_reconcile +#: view:mass.reconcile.history:account_mass_reconcile.view_mass_reconcile_history_search +msgid "Date" +msgstr "Date" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,date_base_on:0 +#: field:mass.reconcile.advanced,date_base_on:0 +#: field:mass.reconcile.advanced.ref,date_base_on:0 +#: field:mass.reconcile.base,date_base_on:0 +#: field:mass.reconcile.options,date_base_on:0 +#: field:mass.reconcile.simple,date_base_on:0 +#: field:mass.reconcile.simple.name,date_base_on:0 +#: field:mass.reconcile.simple.partner,date_base_on:0 +#: field:mass.reconcile.simple.reference,date_base_on:0 +msgid "Date of reconciliation" +msgstr "Date de lettrage" + +#. module: account_mass_reconcile +#: help:account.mass.reconcile,message_last_post:0 +msgid "Date of the last message posted on the record." +msgstr "" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_tree +msgid "Display items partially reconciled on the last run" +msgstr "Afficher les entrées partiellement lettrées au dernier lettrage" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_tree +msgid "Display items reconciled on the last run" +msgstr "Voir les entrées lettrées au dernier lettrage" + +#. module: account_mass_reconcile +#: model:ir.actions.act_window,name:account_mass_reconcile.action_account_mass_reconcile +#: model:ir.ui.menu,name:account_mass_reconcile.menu_mass_reconcile +msgid "Mass Automatic Reconcile" +msgstr "Lettrage automatisé" + +#. module: account_mass_reconcile +#: model:ir.actions.act_window,name:account_mass_reconcile.action_mass_reconcile_history +msgid "Mass Automatic Reconcile History" +msgstr "Lettrage automatisé" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,filter:0 +#: field:mass.reconcile.advanced,filter:0 +#: field:mass.reconcile.advanced.ref,filter:0 +#: field:mass.reconcile.base,filter:0 +#: field:mass.reconcile.options,filter:0 +#: field:mass.reconcile.simple,filter:0 +#: field:mass.reconcile.simple.name,filter:0 +#: field:mass.reconcile.simple.partner,filter:0 +#: field:mass.reconcile.simple.reference,filter:0 +msgid "Filter" +msgstr "Filtre" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,message_follower_ids:0 +msgid "Followers" +msgstr "" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,income_exchange_account_id:0 +#: field:mass.reconcile.base,income_exchange_account_id:0 +#: field:mass.reconcile.options,income_exchange_account_id:0 +#: field:mass.reconcile.simple,income_exchange_account_id:0 +#: field:mass.reconcile.simple.name,income_exchange_account_id:0 +#: field:mass.reconcile.simple.partner,income_exchange_account_id:0 +#: field:mass.reconcile.simple.reference,income_exchange_account_id:0 +msgid "Gain Exchange Rate Account" +msgstr "Compte de gain de change" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "Go to partial reconciled items" +msgstr "" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +#: view:mass.reconcile.history:account_mass_reconcile.mass_reconcile_history_form +#: view:mass.reconcile.history:account_mass_reconcile.mass_reconcile_history_tree +msgid "Go to partially reconciled items" +msgstr "Voir les entrées partiellement lettrées" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +#: view:mass.reconcile.history:account_mass_reconcile.mass_reconcile_history_form +#: view:mass.reconcile.history:account_mass_reconcile.mass_reconcile_history_tree +msgid "Go to reconciled items" +msgstr "Voir les entrées lettrées" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "Go to unreconciled items" +msgstr "" + +#. module: account_mass_reconcile +#: view:mass.reconcile.history:account_mass_reconcile.view_mass_reconcile_history_search +msgid "Group By..." +msgstr "Grouper par..." + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +#: field:account.mass.reconcile,history_ids:0 +msgid "History" +msgstr "Historique" + +#. module: account_mass_reconcile +#: model:ir.actions.act_window,name:account_mass_reconcile.act_mass_reconcile_to_history +msgid "History Details" +msgstr "Détails de l'historique" + +#. module: account_mass_reconcile +#: help:account.mass.reconcile,message_summary:0 +msgid "" +"Holds the Chatter summary (number of messages, ...). This summary is " +"directly in html format in order to be inserted in kanban views." +msgstr "" + +#. module: account_mass_reconcile +#: field:res.company,reconciliation_commit_every:0 +msgid "How often to commit when performing automatic reconciliation." +msgstr "" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,id:0 field:account.mass.reconcile.method,id:0 +#: field:mass.reconcile.base,id:0 field:mass.reconcile.history,id:0 +#: field:mass.reconcile.options,id:0 field:mass.reconcile.simple,id:0 +#: field:mass.reconcile.simple.name,id:0 +#: field:mass.reconcile.simple.partner,id:0 +#: field:mass.reconcile.simple.reference,id:0 +msgid "ID" +msgstr "" + +#. module: account_mass_reconcile +#: help:account.mass.reconcile,message_unread:0 +msgid "If checked new messages require your attention." +msgstr "" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "Information" +msgstr "Information" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,message_is_follower:0 +msgid "Is a Follower" +msgstr "" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,journal_id:0 +#: field:mass.reconcile.advanced,journal_id:0 +#: field:mass.reconcile.advanced.ref,journal_id:0 +#: field:mass.reconcile.base,journal_id:0 +#: field:mass.reconcile.options,journal_id:0 +#: field:mass.reconcile.simple,journal_id:0 +#: field:mass.reconcile.simple.name,journal_id:0 +#: field:mass.reconcile.simple.partner,journal_id:0 +#: field:mass.reconcile.simple.reference,journal_id:0 +msgid "Journal" +msgstr "Journal" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,message_last_post:0 +msgid "Last Message Date" +msgstr "" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,write_uid:0 +#: field:account.mass.reconcile.method,write_uid:0 +#: field:mass.reconcile.history,write_uid:0 +#: field:mass.reconcile.simple.name,write_uid:0 +#: field:mass.reconcile.simple.partner,write_uid:0 +#: field:mass.reconcile.simple.reference,write_uid:0 +msgid "Last Updated by" +msgstr "" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,write_date:0 +#: field:account.mass.reconcile.method,write_date:0 +#: field:mass.reconcile.history,write_date:0 +#: field:mass.reconcile.simple.name,write_date:0 +#: field:mass.reconcile.simple.partner,write_date:0 +#: field:mass.reconcile.simple.reference,write_date:0 +msgid "Last Updated on" +msgstr "" + +#. module: account_mass_reconcile +#: help:res.company,reconciliation_commit_every:0 +msgid "Leave zero to commit only at the end of the process." +msgstr "" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,expense_exchange_account_id:0 +#: field:mass.reconcile.base,expense_exchange_account_id:0 +#: field:mass.reconcile.options,expense_exchange_account_id:0 +#: field:mass.reconcile.simple,expense_exchange_account_id:0 +#: field:mass.reconcile.simple.name,expense_exchange_account_id:0 +#: field:mass.reconcile.simple.partner,expense_exchange_account_id:0 +#: field:mass.reconcile.simple.reference,expense_exchange_account_id:0 +msgid "Loss Exchange Rate Account" +msgstr "Compte de perte de change" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "" +"Match one debit line vs one credit line. Do not allow partial " +"reconciliation. The lines should have the same amount (with the write-off) " +"and the same name to be reconciled." +msgstr "Lettre un débit avec un crédit ayant le même montant et la même description. Le lettrage ne peut être partiel (écriture d'ajustement en cas d'écart)." + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "" +"Match one debit line vs one credit line. Do not allow partial " +"reconciliation. The lines should have the same amount (with the write-off) " +"and the same partner to be reconciled." +msgstr "Lettre un débit avec un crédit ayant le même montant et le même partenaire. Le lettrage ne peut être partiel (écriture d'ajustement en cas d'écart)." + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "" +"Match one debit line vs one credit line. Do not allow partial " +"reconciliation. The lines should have the same amount (with the write-off) " +"and the same reference to be reconciled." +msgstr "Lettre un débit avec un crédit ayant le même montant et la même référence. Le lettrage ne peut être partiel (écriture d'ajustement en cas d'écart)." + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,message_ids:0 +msgid "Messages" +msgstr "" + +#. module: account_mass_reconcile +#: help:account.mass.reconcile,message_ids:0 +msgid "Messages and communication history" +msgstr "" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,reconcile_method:0 +msgid "Method" +msgstr "Méthode" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,name:0 +msgid "Name" +msgstr "Nom" + +#. module: account_mass_reconcile +#: view:account.config.settings:account_mass_reconcile.view_account_config +msgid "Options" +msgstr "" + +#. module: account_mass_reconcile +#: code:addons/account_mass_reconcile/mass_reconcile_history.py:104 +#: view:mass.reconcile.history:account_mass_reconcile.mass_reconcile_history_form +#: field:mass.reconcile.history,reconcile_ids:0 +#: field:mass.reconcile.history,reconcile_partial_ids:0 +#, python-format +msgid "Partial Reconciliations" +msgstr "Lettrages partiels" + +#. module: account_mass_reconcile +#: code:addons/account_mass_reconcile/mass_reconcile.py:334 +#, python-format +msgid "Partial reconciled items" +msgstr "" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "Profile Information" +msgstr "Information sur le profil" + +#. module: account_mass_reconcile +#: field:mass.reconcile.history,mass_reconcile_id:0 +msgid "Reconcile Profile" +msgstr "Profil de réconciliation" + +#. module: account_mass_reconcile +#: view:account.config.settings:account_mass_reconcile.view_account_config +msgid "Reconciliation" +msgstr "" + +#. module: account_mass_reconcile +#: view:mass.reconcile.history:account_mass_reconcile.view_mass_reconcile_history_search +msgid "Reconciliation Profile" +msgstr "Profil de réconciliation" + +#. module: account_mass_reconcile +#: code:addons/account_mass_reconcile/mass_reconcile_history.py:100 +#: view:mass.reconcile.history:account_mass_reconcile.mass_reconcile_history_form +#, python-format +msgid "Reconciliations" +msgstr "Lettrages" + +#. module: account_mass_reconcile +#: view:mass.reconcile.history:account_mass_reconcile.view_mass_reconcile_history_search +msgid "Reconciliations of last 7 days" +msgstr "Lettrages des 7 derniers jours" + +#. module: account_mass_reconcile +#: field:mass.reconcile.advanced,partner_ids:0 +#: field:mass.reconcile.advanced.ref,partner_ids:0 +#: field:mass.reconcile.base,partner_ids:0 +#: field:mass.reconcile.simple,partner_ids:0 +#: field:mass.reconcile.simple.name,partner_ids:0 +#: field:mass.reconcile.simple.partner,partner_ids:0 +#: field:mass.reconcile.simple.reference,partner_ids:0 +msgid "Restrict on partners" +msgstr "Filtrer sur des partenaires" + +#. module: account_mass_reconcile +#: field:mass.reconcile.history,date:0 +msgid "Run date" +msgstr "Date de lancement" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,sequence:0 +msgid "Sequence" +msgstr "Séquence" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "Simple. Amount and Name" +msgstr "Simple. Montant et description" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "Simple. Amount and Partner" +msgstr "Simple. Montant et partenaire" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "Simple. Amount and Reference" +msgstr "Simple. Montant et référence" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_tree +msgid "Start Auto Reconcilation" +msgstr "Lancer le lettrage automatisé" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "Start Auto Reconciliation" +msgstr "Lancer le lettrage automatisé" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,message_summary:0 +msgid "Summary" +msgstr "" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,task_id:0 +msgid "Task" +msgstr "Tâche" + +#. module: account_mass_reconcile +#: help:account.mass.reconcile.method,sequence:0 +msgid "The sequence field is used to order the reconcile method" +msgstr "La séquence détermine l'ordre des méthodes de lettrage" + +#. module: account_mass_reconcile +#: code:addons/account_mass_reconcile/mass_reconcile.py:294 +#, python-format +msgid "There is no history of reconciled items on the task: %s." +msgstr "Il n'y a pas d'historique d'écritures lettrées sur la tâche: %s." + +#. module: account_mass_reconcile +#: code:addons/account_mass_reconcile/mass_reconcile.py:269 +#, python-format +msgid "There was an error during reconciliation : %s" +msgstr "" + +#. module: account_mass_reconcile +#: view:mass.reconcile.history:account_mass_reconcile.view_mass_reconcile_history_search +msgid "Today" +msgstr "Aujourd'hui" + +#. module: account_mass_reconcile +#: view:mass.reconcile.history:account_mass_reconcile.view_mass_reconcile_history_search +msgid "Todays' Reconcilations" +msgstr "Lettrages du jour" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,name:0 +msgid "Type" +msgstr "Type" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,message_unread:0 +msgid "Unread Messages" +msgstr "" + +#. module: account_mass_reconcile +#: code:addons/account_mass_reconcile/mass_reconcile.py:321 +#, python-format +msgid "Unreconciled items" +msgstr "" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,write_off:0 +#: field:mass.reconcile.advanced,write_off:0 +#: field:mass.reconcile.advanced.ref,write_off:0 +#: field:mass.reconcile.base,write_off:0 +#: field:mass.reconcile.options,write_off:0 +#: field:mass.reconcile.simple,write_off:0 +#: field:mass.reconcile.simple.name,write_off:0 +#: field:mass.reconcile.simple.partner,write_off:0 +#: field:mass.reconcile.simple.reference,write_off:0 +msgid "Write off allowed" +msgstr "Écart autorisé" + +#. module: account_mass_reconcile +#: model:ir.model,name:account_mass_reconcile.model_account_mass_reconcile +msgid "account mass reconcile" +msgstr "Lettrage automatisé" + +#. module: account_mass_reconcile +#: view:account.config.settings:account_mass_reconcile.view_account_config +msgid "eInvoicing & Payments" +msgstr "" + +#. module: account_mass_reconcile +#: model:ir.model,name:account_mass_reconcile.model_account_mass_reconcile_method +msgid "reconcile method for account_mass_reconcile" +msgstr "Méthode de lettrage" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:0 +msgid "" +"Match multiple debit vs multiple credit entries. Allow partial " +"reconciliation. The lines should have the partner, the credit entry ref. is " +"matched vs the debit entry ref. or name." +msgstr "" +"Le Lettrage peut s'effectuer sur plusieurs écritures de débit et crédit. Le " +"Lettrage partiel est autorisé. Les écritures doivent avoir le même " +"partenaire et la référence sur les écritures de crédit doit se retrouver " +"dans la référence ou la description sur les écritures de débit." + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:0 +msgid "Advanced. Partner and Ref" +msgstr "Avancé. Partenaire et Réf." + +#. module: account_mass_reconcile +#: model:ir.model,name:account_mass_reconcile.model_mass_reconcile_advanced +msgid "mass.reconcile.advanced" +msgstr "mass.reconcile.advanced" + +#. module: account_mass_reconcile +#: model:ir.model,name:account_mass_reconcile.model_mass_reconcile_advanced_ref +msgid "mass.reconcile.advanced.ref" +msgstr "mass.reconcile.advanced.ref" diff --git a/account_mass_reconcile/i18n/sl.po b/account_mass_reconcile/i18n/sl.po new file mode 100644 index 00000000..c7d8a5d5 --- /dev/null +++ b/account_mass_reconcile/i18n/sl.po @@ -0,0 +1,584 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_mass_reconcile +# +# Translators: +# Matjaž Mozetič , 2015 +msgid "" +msgstr "" +"Project-Id-Version: bank-statement-reconcile (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-09-23 15:49+0000\n" +"PO-Revision-Date: 2015-09-29 05:22+0000\n" +"Last-Translator: Matjaž Mozetič \n" +"Language-Team: Slovenian (http://www.transifex.com/oca/OCA-bank-statement-reconcile-8-0/language/sl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: sl\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" + +#. module: account_mass_reconcile +#: view:mass.reconcile.history:account_mass_reconcile.view_mass_reconcile_history_search +msgid "7 Days" +msgstr "7 dni" + +#. module: account_mass_reconcile +#: model:ir.actions.act_window,help:account_mass_reconcile.action_account_mass_reconcile +msgid "" +"

\n" +" Click to add a reconciliation profile.\n" +"

\n" +" A reconciliation profile specifies, for one account, how\n" +" the entries should be reconciled.\n" +" You can select one or many reconciliation methods which will\n" +" be run sequentially to match the entries between them.\n" +"

\n" +" " +msgstr "

\n Dodaj profil za uskladitev kontov.\n

\n Uskladitveni profil določa, kako naj se\n vnosi konta usklajujejo.\n Izberete lahko eno ali več usklajevalnih metod, ki bodo\n zagnane zapovrstjo za medsebojno primerjavo vnosov.\n

\n " + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,account:0 +#: field:mass.reconcile.advanced,account_id:0 +#: field:mass.reconcile.advanced.ref,account_id:0 +#: field:mass.reconcile.base,account_id:0 +#: field:mass.reconcile.simple,account_id:0 +#: field:mass.reconcile.simple.name,account_id:0 +#: field:mass.reconcile.simple.partner,account_id:0 +#: field:mass.reconcile.simple.reference,account_id:0 +msgid "Account" +msgstr "Konto" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,account_lost_id:0 +#: field:mass.reconcile.advanced,account_lost_id:0 +#: field:mass.reconcile.advanced.ref,account_lost_id:0 +#: field:mass.reconcile.base,account_lost_id:0 +#: field:mass.reconcile.options,account_lost_id:0 +#: field:mass.reconcile.simple,account_lost_id:0 +#: field:mass.reconcile.simple.name,account_lost_id:0 +#: field:mass.reconcile.simple.partner,account_lost_id:0 +#: field:mass.reconcile.simple.reference,account_lost_id:0 +msgid "Account Lost" +msgstr "Konto izgube" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,account_profit_id:0 +#: field:mass.reconcile.advanced,account_profit_id:0 +#: field:mass.reconcile.advanced.ref,account_profit_id:0 +#: field:mass.reconcile.base,account_profit_id:0 +#: field:mass.reconcile.options,account_profit_id:0 +#: field:mass.reconcile.simple,account_profit_id:0 +#: field:mass.reconcile.simple.name,account_profit_id:0 +#: field:mass.reconcile.simple.partner,account_profit_id:0 +#: field:mass.reconcile.simple.reference,account_profit_id:0 +msgid "Account Profit" +msgstr "Konto dobička" + +#. module: account_mass_reconcile +#: help:account.mass.reconcile.method,analytic_account_id:0 +#: help:mass.reconcile.base,analytic_account_id:0 +#: help:mass.reconcile.options,analytic_account_id:0 +#: help:mass.reconcile.simple,analytic_account_id:0 +#: help:mass.reconcile.simple.name,analytic_account_id:0 +#: help:mass.reconcile.simple.partner,analytic_account_id:0 +#: help:mass.reconcile.simple.reference,analytic_account_id:0 +msgid "Analytic account for the write-off" +msgstr "Konto odpisov" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,analytic_account_id:0 +#: field:mass.reconcile.base,analytic_account_id:0 +#: field:mass.reconcile.options,analytic_account_id:0 +#: field:mass.reconcile.simple,analytic_account_id:0 +#: field:mass.reconcile.simple.name,analytic_account_id:0 +#: field:mass.reconcile.simple.partner,analytic_account_id:0 +#: field:mass.reconcile.simple.reference,analytic_account_id:0 +msgid "Analytic_account" +msgstr "Analitični konto" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_tree +msgid "Automatic Mass Reconcile" +msgstr "Samodejno preprosto usklajevanje" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +#: view:mass.reconcile.history:account_mass_reconcile.mass_reconcile_history_form +#: view:mass.reconcile.history:account_mass_reconcile.mass_reconcile_history_tree +#: view:mass.reconcile.history:account_mass_reconcile.view_mass_reconcile_history_search +msgid "Automatic Mass Reconcile History" +msgstr "Zgodovina samodejnih preprostih usklajevanj" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile.method:account_mass_reconcile.account_mass_reconcile_method_form +#: view:account.mass.reconcile.method:account_mass_reconcile.account_mass_reconcile_method_tree +msgid "Automatic Mass Reconcile Method" +msgstr "Metoda samodejne preproste uskladitve" + +#. module: account_mass_reconcile +#: model:ir.model,name:account_mass_reconcile.model_res_company +msgid "Companies" +msgstr "Družbe" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,company_id:0 +#: field:account.mass.reconcile.method,company_id:0 +#: field:mass.reconcile.history,company_id:0 +msgid "Company" +msgstr "Družba" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "Configuration" +msgstr "Nastavitve" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,create_uid:0 +#: field:account.mass.reconcile.method,create_uid:0 +#: field:mass.reconcile.history,create_uid:0 +#: field:mass.reconcile.simple.name,create_uid:0 +#: field:mass.reconcile.simple.partner,create_uid:0 +#: field:mass.reconcile.simple.reference,create_uid:0 +msgid "Created by" +msgstr "Ustvaril" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,create_date:0 +#: field:account.mass.reconcile.method,create_date:0 +#: field:mass.reconcile.history,create_date:0 +#: field:mass.reconcile.simple.name,create_date:0 +#: field:mass.reconcile.simple.partner,create_date:0 +#: field:mass.reconcile.simple.reference,create_date:0 +msgid "Created on" +msgstr "Ustvarjeno" + +#. module: account_mass_reconcile +#: view:mass.reconcile.history:account_mass_reconcile.view_mass_reconcile_history_search +msgid "Date" +msgstr "Datum" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,date_base_on:0 +#: field:mass.reconcile.advanced,date_base_on:0 +#: field:mass.reconcile.advanced.ref,date_base_on:0 +#: field:mass.reconcile.base,date_base_on:0 +#: field:mass.reconcile.options,date_base_on:0 +#: field:mass.reconcile.simple,date_base_on:0 +#: field:mass.reconcile.simple.name,date_base_on:0 +#: field:mass.reconcile.simple.partner,date_base_on:0 +#: field:mass.reconcile.simple.reference,date_base_on:0 +msgid "Date of reconciliation" +msgstr "Datum uskladitve" + +#. module: account_mass_reconcile +#: help:account.mass.reconcile,message_last_post:0 +msgid "Date of the last message posted on the record." +msgstr "Datum zadnjega objavljenega sporočila na zapisu." + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_tree +msgid "Display items partially reconciled on the last run" +msgstr "Prikaz delno usklajenih postavk po zadnjem zagonu" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_tree +msgid "Display items reconciled on the last run" +msgstr "Prikaz usklajenih postavk po zadnjem zagonu" + +#. module: account_mass_reconcile +#: model:ir.actions.act_window,name:account_mass_reconcile.action_account_mass_reconcile +#: model:ir.ui.menu,name:account_mass_reconcile.menu_mass_reconcile +msgid "Mass Automatic Reconcile" +msgstr "Samodejno preprosto usklajevanje" + +#. module: account_mass_reconcile +#: model:ir.actions.act_window,name:account_mass_reconcile.action_mass_reconcile_history +msgid "Mass Automatic Reconcile History" +msgstr "Zgodovina samodejnih preprostih usklajevanj" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,filter:0 +#: field:mass.reconcile.advanced,filter:0 +#: field:mass.reconcile.advanced.ref,filter:0 +#: field:mass.reconcile.base,filter:0 +#: field:mass.reconcile.options,filter:0 +#: field:mass.reconcile.simple,filter:0 +#: field:mass.reconcile.simple.name,filter:0 +#: field:mass.reconcile.simple.partner,filter:0 +#: field:mass.reconcile.simple.reference,filter:0 +msgid "Filter" +msgstr "Filter" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,message_follower_ids:0 +msgid "Followers" +msgstr "Sledilci" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,income_exchange_account_id:0 +#: field:mass.reconcile.base,income_exchange_account_id:0 +#: field:mass.reconcile.options,income_exchange_account_id:0 +#: field:mass.reconcile.simple,income_exchange_account_id:0 +#: field:mass.reconcile.simple.name,income_exchange_account_id:0 +#: field:mass.reconcile.simple.partner,income_exchange_account_id:0 +#: field:mass.reconcile.simple.reference,income_exchange_account_id:0 +msgid "Gain Exchange Rate Account" +msgstr "Konto menjalnega tečaja dobička" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "Go to partial reconciled items" +msgstr "Pojdi na delno usklajene postavke" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +#: view:mass.reconcile.history:account_mass_reconcile.mass_reconcile_history_form +#: view:mass.reconcile.history:account_mass_reconcile.mass_reconcile_history_tree +msgid "Go to partially reconciled items" +msgstr "Pojdi na delno usklajene postavke" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +#: view:mass.reconcile.history:account_mass_reconcile.mass_reconcile_history_form +#: view:mass.reconcile.history:account_mass_reconcile.mass_reconcile_history_tree +msgid "Go to reconciled items" +msgstr "Pojdi na usklajene postavke" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "Go to unreconciled items" +msgstr "Pojdi na neusklajene postavke" + +#. module: account_mass_reconcile +#: view:mass.reconcile.history:account_mass_reconcile.view_mass_reconcile_history_search +msgid "Group By..." +msgstr "Združi po..." + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +#: field:account.mass.reconcile,history_ids:0 +msgid "History" +msgstr "Zgodovina" + +#. module: account_mass_reconcile +#: model:ir.actions.act_window,name:account_mass_reconcile.act_mass_reconcile_to_history +msgid "History Details" +msgstr "Podrobnosti o zgodovini" + +#. module: account_mass_reconcile +#: help:account.mass.reconcile,message_summary:0 +msgid "" +"Holds the Chatter summary (number of messages, ...). This summary is " +"directly in html format in order to be inserted in kanban views." +msgstr "Povzetek sporočanja (število sporočil, ...) neposredno v html formatu, da se lahko vstavlja v kanban prikaze." + +#. module: account_mass_reconcile +#: field:res.company,reconciliation_commit_every:0 +msgid "How often to commit when performing automatic reconciliation." +msgstr "Pogostost knjiženja ob samodejnem usklajevanju." + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,id:0 field:account.mass.reconcile.method,id:0 +#: field:mass.reconcile.base,id:0 field:mass.reconcile.history,id:0 +#: field:mass.reconcile.options,id:0 field:mass.reconcile.simple,id:0 +#: field:mass.reconcile.simple.name,id:0 +#: field:mass.reconcile.simple.partner,id:0 +#: field:mass.reconcile.simple.reference,id:0 +msgid "ID" +msgstr "ID" + +#. module: account_mass_reconcile +#: help:account.mass.reconcile,message_unread:0 +msgid "If checked new messages require your attention." +msgstr "Označeno pomeni, da nova sporočila zahtevajo vašo pozornost." + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "Information" +msgstr "Informacije" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,message_is_follower:0 +msgid "Is a Follower" +msgstr "Je sledilec" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,journal_id:0 +#: field:mass.reconcile.advanced,journal_id:0 +#: field:mass.reconcile.advanced.ref,journal_id:0 +#: field:mass.reconcile.base,journal_id:0 +#: field:mass.reconcile.options,journal_id:0 +#: field:mass.reconcile.simple,journal_id:0 +#: field:mass.reconcile.simple.name,journal_id:0 +#: field:mass.reconcile.simple.partner,journal_id:0 +#: field:mass.reconcile.simple.reference,journal_id:0 +msgid "Journal" +msgstr "Dnevnik" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,message_last_post:0 +msgid "Last Message Date" +msgstr "Datum zadnjega sporočila" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,write_uid:0 +#: field:account.mass.reconcile.method,write_uid:0 +#: field:mass.reconcile.history,write_uid:0 +#: field:mass.reconcile.simple.name,write_uid:0 +#: field:mass.reconcile.simple.partner,write_uid:0 +#: field:mass.reconcile.simple.reference,write_uid:0 +msgid "Last Updated by" +msgstr "Zadnji posodobil" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,write_date:0 +#: field:account.mass.reconcile.method,write_date:0 +#: field:mass.reconcile.history,write_date:0 +#: field:mass.reconcile.simple.name,write_date:0 +#: field:mass.reconcile.simple.partner,write_date:0 +#: field:mass.reconcile.simple.reference,write_date:0 +msgid "Last Updated on" +msgstr "Zadnjič posodobljeno" + +#. module: account_mass_reconcile +#: help:res.company,reconciliation_commit_every:0 +msgid "Leave zero to commit only at the end of the process." +msgstr "Za knjiženje le ob koncu procesa pustite prazno." + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,expense_exchange_account_id:0 +#: field:mass.reconcile.base,expense_exchange_account_id:0 +#: field:mass.reconcile.options,expense_exchange_account_id:0 +#: field:mass.reconcile.simple,expense_exchange_account_id:0 +#: field:mass.reconcile.simple.name,expense_exchange_account_id:0 +#: field:mass.reconcile.simple.partner,expense_exchange_account_id:0 +#: field:mass.reconcile.simple.reference,expense_exchange_account_id:0 +msgid "Loss Exchange Rate Account" +msgstr "Konto menjalnega tečaja izgube" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "" +"Match one debit line vs one credit line. Do not allow partial " +"reconciliation. The lines should have the same amount (with the write-off) " +"and the same name to be reconciled." +msgstr "Primerjanje ene postavke v breme z eno postavko v dobro. Ne dovoli delnega usklajevanja. Da bi se lahko uskladile, morajo imeti postavke isti znesek (z odpisom) in isti naziv." + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "" +"Match one debit line vs one credit line. Do not allow partial " +"reconciliation. The lines should have the same amount (with the write-off) " +"and the same partner to be reconciled." +msgstr "Primerjanje ene postavke v breme z eno postavko v dobro. Ne dovoli delnega usklajevanja. Da bi se lahko uskladile, morajo imeti postavke isti znesek (z odpisom) in istega partnerja." + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "" +"Match one debit line vs one credit line. Do not allow partial " +"reconciliation. The lines should have the same amount (with the write-off) " +"and the same reference to be reconciled." +msgstr "Primerjanje ene postavke v breme z eno postavko v dobro. Ne dovoli delnega usklajevanja. Da bi se lahko uskladile, morajo imeti postavke isti znesek (z odpisom) in isti sklic." + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,message_ids:0 +msgid "Messages" +msgstr "Sporočila" + +#. module: account_mass_reconcile +#: help:account.mass.reconcile,message_ids:0 +msgid "Messages and communication history" +msgstr "Kronologija sporočil in komunikacij" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,reconcile_method:0 +msgid "Method" +msgstr "Metoda" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,name:0 +msgid "Name" +msgstr "Naziv" + +#. module: account_mass_reconcile +#: view:account.config.settings:account_mass_reconcile.view_account_config +msgid "Options" +msgstr "Opcije" + +#. module: account_mass_reconcile +#: code:addons/account_mass_reconcile/mass_reconcile_history.py:104 +#: view:mass.reconcile.history:account_mass_reconcile.mass_reconcile_history_form +#: field:mass.reconcile.history,reconcile_ids:0 +#: field:mass.reconcile.history,reconcile_partial_ids:0 +#, python-format +msgid "Partial Reconciliations" +msgstr "Delne uskladitve" + +#. module: account_mass_reconcile +#: code:addons/account_mass_reconcile/mass_reconcile.py:334 +#, python-format +msgid "Partial reconciled items" +msgstr "Delno usklajene postavke" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "Profile Information" +msgstr "Podatki o profilu" + +#. module: account_mass_reconcile +#: field:mass.reconcile.history,mass_reconcile_id:0 +msgid "Reconcile Profile" +msgstr "Usklajevalni profil" + +#. module: account_mass_reconcile +#: view:account.config.settings:account_mass_reconcile.view_account_config +msgid "Reconciliation" +msgstr "Uskladitev" + +#. module: account_mass_reconcile +#: view:mass.reconcile.history:account_mass_reconcile.view_mass_reconcile_history_search +msgid "Reconciliation Profile" +msgstr "Usklajevalni profil" + +#. module: account_mass_reconcile +#: code:addons/account_mass_reconcile/mass_reconcile_history.py:100 +#: view:mass.reconcile.history:account_mass_reconcile.mass_reconcile_history_form +#, python-format +msgid "Reconciliations" +msgstr "Uskladitve" + +#. module: account_mass_reconcile +#: view:mass.reconcile.history:account_mass_reconcile.view_mass_reconcile_history_search +msgid "Reconciliations of last 7 days" +msgstr "Uskladitve v zadnjih 7 dneh" + +#. module: account_mass_reconcile +#: field:mass.reconcile.advanced,partner_ids:0 +#: field:mass.reconcile.advanced.ref,partner_ids:0 +#: field:mass.reconcile.base,partner_ids:0 +#: field:mass.reconcile.simple,partner_ids:0 +#: field:mass.reconcile.simple.name,partner_ids:0 +#: field:mass.reconcile.simple.partner,partner_ids:0 +#: field:mass.reconcile.simple.reference,partner_ids:0 +msgid "Restrict on partners" +msgstr "Omejitev na partnerjih" + +#. module: account_mass_reconcile +#: field:mass.reconcile.history,date:0 +msgid "Run date" +msgstr "Datum zagona" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,sequence:0 +msgid "Sequence" +msgstr "Zaporedje" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "Simple. Amount and Name" +msgstr "Preprosto. Znesek in naziv" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "Simple. Amount and Partner" +msgstr "Preprosto. Znesek in partner" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "Simple. Amount and Reference" +msgstr "Preprosto. Znesek in sklic" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_tree +msgid "Start Auto Reconcilation" +msgstr "Zagon samodejnega usklajevanja" + +#. module: account_mass_reconcile +#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form +msgid "Start Auto Reconciliation" +msgstr "Zagon samodejnega usklajevanja" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,message_summary:0 +msgid "Summary" +msgstr "Povzetek" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,task_id:0 +msgid "Task" +msgstr "Opravilo" + +#. module: account_mass_reconcile +#: help:account.mass.reconcile.method,sequence:0 +msgid "The sequence field is used to order the reconcile method" +msgstr "Polje zaporedja za razporejanje metod usklajevanja" + +#. module: account_mass_reconcile +#: code:addons/account_mass_reconcile/mass_reconcile.py:294 +#, python-format +msgid "There is no history of reconciled items on the task: %s." +msgstr "Usklajene postavke na opravilu: %s nimajo zgodovine." + +#. module: account_mass_reconcile +#: code:addons/account_mass_reconcile/mass_reconcile.py:269 +#, python-format +msgid "There was an error during reconciliation : %s" +msgstr "Napaka med usklajevanjem: %s" + +#. module: account_mass_reconcile +#: view:mass.reconcile.history:account_mass_reconcile.view_mass_reconcile_history_search +msgid "Today" +msgstr "Danes" + +#. module: account_mass_reconcile +#: view:mass.reconcile.history:account_mass_reconcile.view_mass_reconcile_history_search +msgid "Todays' Reconcilations" +msgstr "Današnja usklajevanja" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,name:0 +msgid "Type" +msgstr "Tip" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile,message_unread:0 +msgid "Unread Messages" +msgstr "Neprebrana sporočila" + +#. module: account_mass_reconcile +#: code:addons/account_mass_reconcile/mass_reconcile.py:321 +#, python-format +msgid "Unreconciled items" +msgstr "Neusklajene postavke" + +#. module: account_mass_reconcile +#: field:account.mass.reconcile.method,write_off:0 +#: field:mass.reconcile.advanced,write_off:0 +#: field:mass.reconcile.advanced.ref,write_off:0 +#: field:mass.reconcile.base,write_off:0 +#: field:mass.reconcile.options,write_off:0 +#: field:mass.reconcile.simple,write_off:0 +#: field:mass.reconcile.simple.name,write_off:0 +#: field:mass.reconcile.simple.partner,write_off:0 +#: field:mass.reconcile.simple.reference,write_off:0 +msgid "Write off allowed" +msgstr "Dovoljen odpis" + +#. module: account_mass_reconcile +#: model:ir.model,name:account_mass_reconcile.model_account_mass_reconcile +msgid "account mass reconcile" +msgstr "preprosto usklajevanje konta" + +#. module: account_mass_reconcile +#: view:account.config.settings:account_mass_reconcile.view_account_config +msgid "eInvoicing & Payments" +msgstr "Obračun in plačila" + +#. module: account_mass_reconcile +#: model:ir.model,name:account_mass_reconcile.model_account_mass_reconcile_method +msgid "reconcile method for account_mass_reconcile" +msgstr "metoda usklajevanja za preprosto usklajevanje konta" diff --git a/account_mass_reconcile/models/__init__.py b/account_mass_reconcile/models/__init__.py new file mode 100755 index 00000000..ca86d6b4 --- /dev/null +++ b/account_mass_reconcile/models/__init__.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- + +from . import mass_reconcile +from . import base_reconciliation +from . import base_advanced_reconciliation +from . import simple_reconciliation +from . import advanced_reconciliation +from . import mass_reconcile_history +from . import res_config diff --git a/account_mass_reconcile/models/advanced_reconciliation.py b/account_mass_reconcile/models/advanced_reconciliation.py new file mode 100644 index 00000000..8d6585c1 --- /dev/null +++ b/account_mass_reconcile/models/advanced_reconciliation.py @@ -0,0 +1,105 @@ +# -*- coding: utf-8 -*- +# © 2012-2016 Camptocamp SA (Guewen Baconnier, Damien Crier, Matthieu Dietrich) +# © 2010 Sébastien Beau +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from openerp import models, api + + +class MassReconcileAdvancedRef(models.TransientModel): + + _name = 'mass.reconcile.advanced.ref' + _inherit = 'mass.reconcile.advanced' + + @api.multi + def _skip_line(self, move_line): + """ + When True is returned on some conditions, the credit move line + will be skipped for reconciliation. Can be inherited to + skip on some conditions. ie: ref or partner_id is empty. + """ + return not (move_line.get('ref') and move_line.get('partner_id')) + + @api.multi + def _matchers(self, move_line): + """ + Return the values used as matchers to find the opposite lines + + All the matcher keys in the dict must have their equivalent in + the `_opposite_matchers`. + + The values of each matcher key will be searched in the + one returned by the `_opposite_matchers` + + Must be inherited to implement the matchers for one method + + For instance, it can return: + return ('ref', move_line['rec']) + + or + return (('partner_id', move_line['partner_id']), + ('ref', "prefix_%s" % move_line['rec'])) + + All the matchers have to be found in the opposite lines + to consider them as "opposite" + + The matchers will be evaluated in the same order as declared + vs the the opposite matchers, so you can gain performance by + declaring first the partners with the less computation. + + All matchers should match with their opposite to be considered + as "matching". + So with the previous example, partner_id and ref have to be + equals on the opposite line matchers. + + :return: tuple of tuples (key, value) where the keys are + the matchers keys + (must be the same than `_opposite_matchers` returns, + and their values to match in the opposite lines. + A matching key can have multiples values. + """ + return (('partner_id', move_line['partner_id']), + ('ref', move_line['ref'].lower().strip())) + + @api.multi + def _opposite_matchers(self, move_line): + """ + Return the values of the opposite line used as matchers + so the line is matched + + Must be inherited to implement the matchers for one method + It can be inherited to apply some formatting of fields + (strip(), lower() and so on) + + This method is the counterpart of the `_matchers()` method. + + Each matcher has to yield its value respecting the order + of the `_matchers()`. + + When a matcher does not correspond, the next matchers won't + be evaluated so the ones which need the less computation + have to be executed first. + + If the `_matchers()` returns: + (('partner_id', move_line['partner_id']), + ('ref', move_line['ref'])) + + Here, you should yield : + yield ('partner_id', move_line['partner_id']) + yield ('ref', move_line['ref']) + + Note that a matcher can contain multiple values, as instance, + if for a move line, you want to search from its `ref` in the + `ref` or `name` fields of the opposite move lines, you have to + yield ('partner_id', move_line['partner_id']) + yield ('ref', (move_line['ref'], move_line['name']) + + An OR is used between the values for the same key. + An AND is used between the differents keys. + + :param dict move_line: values of the move_line + :yield: matchers as tuple ('matcher key', value(s)) + """ + yield ('partner_id', move_line['partner_id']) + yield ('ref', ((move_line['ref'] or '').lower().strip(), + move_line['name'].lower().strip())) diff --git a/account_mass_reconcile/models/base_advanced_reconciliation.py b/account_mass_reconcile/models/base_advanced_reconciliation.py new file mode 100644 index 00000000..2049d7da --- /dev/null +++ b/account_mass_reconcile/models/base_advanced_reconciliation.py @@ -0,0 +1,276 @@ +# -*- coding: utf-8 -*- +# © 2012-2016 Camptocamp SA (Guewen Baconnier, Damien Crier, Matthieu Dietrich) +# © 2010 Sébastien Beau +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +import logging + +from openerp import models, api +from itertools import product +from openerp.tools.translate import _ + +_logger = logging.getLogger(__name__) + + +class MassReconcileAdvanced(models.AbstractModel): + _name = 'mass.reconcile.advanced' + _inherit = 'mass.reconcile.base' + + @api.multi + def _query_debit(self): + """Select all move (debit>0) as candidate. """ + select = self._select() + sql_from = self._from() + where, params = self._where() + where += " AND account_move_line.debit > 0 " + where2, params2 = self._get_filter() + query = ' '.join((select, sql_from, where, where2)) + self.env.cr.execute(query, params + params2) + return self.env.cr.dictfetchall() + + def _query_credit(self): + """Select all move (credit>0) as candidate. """ + select = self._select() + sql_from = self._from() + where, params = self._where() + where += " AND account_move_line.credit > 0 " + where2, params2 = self._get_filter() + query = ' '.join((select, sql_from, where, where2)) + self.env.cr.execute(query, params + params2) + return self.env.cr.dictfetchall() + + @api.multi + def _matchers(self, move_line): + """ + Return the values used as matchers to find the opposite lines + + All the matcher keys in the dict must have their equivalent in + the `_opposite_matchers`. + + The values of each matcher key will be searched in the + one returned by the `_opposite_matchers` + + Must be inherited to implement the matchers for one method + + As instance, it can return: + return ('ref', move_line['rec']) + + or + return (('partner_id', move_line['partner_id']), + ('ref', "prefix_%s" % move_line['rec'])) + + All the matchers have to be found in the opposite lines + to consider them as "opposite" + + The matchers will be evaluated in the same order as declared + vs the the opposite matchers, so you can gain performance by + declaring first the partners with the less computation. + + All matchers should match with their opposite to be considered + as "matching". + So with the previous example, partner_id and ref have to be + equals on the opposite line matchers. + + :return: tuple of tuples (key, value) where the keys are + the matchers keys + (must be the same than `_opposite_matchers` returns, + and their values to match in the opposite lines. + A matching key can have multiples values. + """ + raise NotImplementedError + + @api.multi + def _opposite_matchers(self, move_line): + """ + Return the values of the opposite line used as matchers + so the line is matched + + Must be inherited to implement the matchers for one method + It can be inherited to apply some formatting of fields + (strip(), lower() and so on) + + This method is the counterpart of the `_matchers()` method. + + Each matcher has to yield its value respecting the order + of the `_matchers()`. + + When a matcher does not correspond, the next matchers won't + be evaluated so the ones which need the less computation + have to be executed first. + + If the `_matchers()` returns: + (('partner_id', move_line['partner_id']), + ('ref', move_line['ref'])) + + Here, you should yield : + yield ('partner_id', move_line['partner_id']) + yield ('ref', move_line['ref']) + + Note that a matcher can contain multiple values, as instance, + if for a move line, you want to search from its `ref` in the + `ref` or `name` fields of the opposite move lines, you have to + yield ('partner_id', move_line['partner_id']) + yield ('ref', (move_line['ref'], move_line['name']) + + An OR is used between the values for the same key. + An AND is used between the differents keys. + + :param dict move_line: values of the move_line + :yield: matchers as tuple ('matcher key', value(s)) + """ + raise NotImplementedError + + @staticmethod + def _compare_values(key, value, opposite_value): + """Can be inherited to modify the equality condition + specifically according to the matcher key (maybe using + a like operator instead of equality on 'ref' as instance) + """ + # consider that empty vals are not valid matchers + # it can still be inherited for some special cases + # where it would be allowed + if not (value and opposite_value): + return False + + if value == opposite_value: + return True + return False + + @staticmethod + def _compare_matcher_values(key, values, opposite_values): + """ Compare every values from a matcher vs an opposite matcher + and return True if it matches + """ + for value, ovalue in product(values, opposite_values): + # we do not need to compare all values, if one matches + # we are done + if MassReconcileAdvanced._compare_values(key, value, ovalue): + return True + return False + + @staticmethod + def _compare_matchers(matcher, opposite_matcher): + """ + Prepare and check the matchers to compare + """ + mkey, mvalue = matcher + omkey, omvalue = opposite_matcher + assert mkey == omkey, \ + (_("A matcher %s is compared with a matcher %s, the _matchers and " + "_opposite_matchers are probably wrong") % (mkey, omkey)) + if not isinstance(mvalue, (list, tuple)): + mvalue = mvalue, + if not isinstance(omvalue, (list, tuple)): + omvalue = omvalue, + return MassReconcileAdvanced._compare_matcher_values(mkey, mvalue, + omvalue) + + @api.multi + def _compare_opposite(self, move_line, opposite_move_line, matchers): + """ Iterate over the matchers of the move lines vs opposite move lines + and if they all match, return True. + + If all the matchers match for a move line and an opposite move line, + they are candidate for a reconciliation. + """ + opp_matchers = self._opposite_matchers(opposite_move_line) + for matcher in matchers: + try: + opp_matcher = opp_matchers.next() + except StopIteration: + # if you fall here, you probably missed to put a `yield` + # in `_opposite_matchers()` + raise ValueError("Missing _opposite_matcher: %s" % matcher[0]) + + if not self._compare_matchers(matcher, opp_matcher): + # if any of the matcher fails, the opposite line + # is not a valid counterpart + # directly returns so the next yield of _opposite_matchers + # are not evaluated + return False + + return True + + @api.multi + def _search_opposites(self, move_line, opposite_move_lines): + """Search the opposite move lines for a move line + + :param dict move_line: the move line for which we search opposites + :param list opposite_move_lines: list of dict of move lines values, + the move lines we want to search for + :return: list of matching lines + """ + matchers = self._matchers(move_line) + return [op for op in opposite_move_lines if + self._compare_opposite(move_line, op, matchers)] + + def _action_rec(self): + credit_lines = self._query_credit() + debit_lines = self._query_debit() + result = self._rec_auto_lines_advanced(credit_lines, debit_lines) + return result + + @api.multi + def _skip_line(self, move_line): + """ + When True is returned on some conditions, the credit move line + will be skipped for reconciliation. Can be inherited to + skip on some conditions. ie: ref or partner_id is empty. + """ + return False + + @api.multi + def _rec_auto_lines_advanced(self, credit_lines, debit_lines): + """ Advanced reconciliation main loop """ + reconciled_ids = [] + for rec in self: + reconcile_groups = [] + ctx = self.env.context.copy() + ctx['commit_every'] = ( + rec.account_id.company_id.reconciliation_commit_every + ) + _logger.info("%d credit lines to reconcile", len(credit_lines)) + for idx, credit_line in enumerate(credit_lines, start=1): + if idx % 50 == 0: + _logger.info("... %d/%d credit lines inspected ...", idx, + len(credit_lines)) + if self._skip_line(credit_line): + continue + opposite_lines = self._search_opposites(credit_line, + debit_lines) + if not opposite_lines: + continue + opposite_ids = [l['id'] for l in opposite_lines] + line_ids = opposite_ids + [credit_line['id']] + for group in reconcile_groups: + if any([lid in group for lid in opposite_ids]): + _logger.debug("New lines %s matched with an existing " + "group %s", line_ids, group) + group.update(line_ids) + break + else: + _logger.debug("New group of lines matched %s", line_ids) + reconcile_groups.append(set(line_ids)) + lines_by_id = dict([(l['id'], l) + for l in credit_lines + debit_lines]) + _logger.info("Found %d groups to reconcile", + len(reconcile_groups)) + for group_count, reconcile_group_ids \ + in enumerate(reconcile_groups, start=1): + _logger.debug("Reconciling group %d/%d with ids %s", + group_count, len(reconcile_groups), + reconcile_group_ids) + group_lines = [lines_by_id[lid] + for lid in reconcile_group_ids] + reconciled, full = self._reconcile_lines(group_lines, + allow_partial=True) + if reconciled and full: + reconciled_ids += reconcile_group_ids + + if (ctx['commit_every'] and + group_count % ctx['commit_every'] == 0): + self.env.cr.commit() + _logger.info("Commit the reconciliations after %d groups", + group_count) + _logger.info("Reconciliation is over") + return reconciled_ids diff --git a/account_mass_reconcile/models/base_reconciliation.py b/account_mass_reconcile/models/base_reconciliation.py new file mode 100644 index 00000000..e954e520 --- /dev/null +++ b/account_mass_reconcile/models/base_reconciliation.py @@ -0,0 +1,185 @@ +# -*- coding: utf-8 -*- +# © 2012-2016 Camptocamp SA (Guewen Baconnier, Damien Crier, Matthieu Dietrich) +# © 2010 Sébastien Beau +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from openerp import models, api, fields +from openerp.tools.safe_eval import safe_eval +from operator import itemgetter + + +class MassReconcileBase(models.AbstractModel): + + """Abstract Model for reconciliation methods""" + + _name = 'mass.reconcile.base' + + _inherit = 'mass.reconcile.options' + + account_id = fields.Many2one( + 'account.account', + string='Account', + required=True + ) + partner_ids = fields.Many2many( + comodel_name='res.partner', + string='Restrict on partners', + ) + # other fields are inherited from mass.reconcile.options + + @api.multi + def automatic_reconcile(self): + """ Reconciliation method called from the view. + + :return: list of reconciled ids + """ + self.ensure_one() + return self._action_rec() + + @api.multi + def _action_rec(self): + """ Must be inherited to implement the reconciliation + + :return: list of reconciled ids + """ + raise NotImplementedError + + def _base_columns(self): + """ Mandatory columns for move lines queries + An extra column aliased as ``key`` should be defined + in each query.""" + aml_cols = ( + 'id', + 'debit', + 'credit', + 'date', + 'ref', + 'name', + 'partner_id', + 'account_id', + 'reconciled', + 'move_id') + return ["account_move_line.%s" % col for col in aml_cols] + + @api.multi + def _select(self, *args, **kwargs): + return "SELECT %s" % ', '.join(self._base_columns()) + + @api.multi + def _from(self, *args, **kwargs): + return ("FROM account_move_line ") + + @api.multi + def _where(self, *args, **kwargs): + where = ("WHERE account_move_line.account_id = %s " + "AND NOT account_move_line.reconciled") + # it would be great to use dict for params + # but as we use _where_calc in _get_filter + # which returns a list, we have to + # accomodate with that + params = [self.account_id.id] + if self.partner_ids: + where += " AND account_move_line.partner_id IN %s" + params.append(tuple([l.id for l in self.partner_ids])) + return where, params + + @api.multi + def _get_filter(self): + ml_obj = self.env['account.move.line'] + where = '' + params = [] + if self.filter: + dummy, where, params = ml_obj._where_calc( + safe_eval(self.filter)).get_sql() + if where: + where = " AND %s" % where + return where, params + + @api.multi + def _below_writeoff_limit(self, lines, writeoff_limit): + self.ensure_one() + precision = self.env['decimal.precision'].precision_get('Account') + keys = ('debit', 'credit') + sums = reduce( + lambda line, memo: + dict((key, value + memo[key]) + for key, value + in line.iteritems() + if key in keys), lines) + debit, credit = sums['debit'], sums['credit'] + writeoff_amount = round(debit - credit, precision) + return bool(writeoff_limit >= abs(writeoff_amount)), debit, credit + + @api.multi + def _get_rec_date(self, lines, based_on='end_period_last_credit'): + self.ensure_one() + + def last_date(mlines): + return max(mlines, key=itemgetter('date')) + + def credit(mlines): + return [l for l in mlines if l['credit'] > 0] + + def debit(mlines): + return [l for l in mlines if l['debit'] > 0] + + if based_on == 'newest': + return last_date(lines)['date'] + elif based_on == 'newest_credit': + return last_date(credit(lines))['date'] + elif based_on == 'newest_debit': + return last_date(debit(lines))['date'] + # reconcilation date will be today + # when date is None + return None + + @api.multi + def _reconcile_lines(self, lines, allow_partial=False): + """ Try to reconcile given lines + + :param list lines: list of dict of move lines, they must at least + contain values for : id, debit, credit + :param boolean allow_partial: if True, partial reconciliation will be + created, otherwise only Full + reconciliation will be created + :return: tuple of boolean values, first item is wether the items + have been reconciled or not, + the second is wether the reconciliation is full (True) + or partial (False) + """ + self.ensure_one() + ml_obj = self.env['account.move.line'] + line_ids = [l['id'] for l in lines] + below_writeoff, sum_debit, sum_credit = self._below_writeoff_limit( + lines, self.write_off + ) + if below_writeoff: + if sum_credit > sum_debit: + writeoff_account_id = self.account_profit_id.id + else: + writeoff_account_id = self.account_lost_id.id + line_rs = ml_obj.browse(line_ids) + line_rs.reconcile( + writeoff_acc_id=writeoff_account_id, + writeoff_journal_id=self.journal_id.id + ) + return True, True + elif allow_partial: + # We need to give a writeoff_acc_id + # in case we have a multi currency lines + # to reconcile. + # If amount in currency is equal between + # lines to reconcile + # it will do a full reconcile instead of a partial reconcile + # and make a write-off for exchange + if sum_credit > sum_debit: + writeoff_account_id = self.income_exchange_account_id.id + else: + writeoff_account_id = self.expense_exchange_account_id.id + line_rs = ml_obj.browse(line_ids) + line_rs.reconcile( + writeoff_acc_id=writeoff_account_id, + writeoff_journal_id=self.journal_id.id + ) + return True, False + return False, False diff --git a/account_mass_reconcile/models/mass_reconcile.py b/account_mass_reconcile/models/mass_reconcile.py new file mode 100644 index 00000000..42e1c53b --- /dev/null +++ b/account_mass_reconcile/models/mass_reconcile.py @@ -0,0 +1,307 @@ +# -*- coding: utf-8 -*- +# © 2012-2016 Camptocamp SA (Guewen Baconnier, Damien Crier, Matthieu Dietrich) +# © 2010 Sébastien Beau +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from datetime import datetime +from openerp import models, api, fields, _ +from openerp.exceptions import Warning as UserError +from openerp import sql_db + +import logging +_logger = logging.getLogger(__name__) + + +class MassReconcileOptions(models.AbstractModel): + """Options of a reconciliation profile + + Columns shared by the configuration of methods + and by the reconciliation wizards. + This allows decoupling of the methods and the + wizards and allows to launch the wizards alone + """ + + _name = 'mass.reconcile.options' + + @api.model + def _get_rec_base_date(self): + return [ + ('newest', 'Most recent move line'), + ('actual', 'Today'), + ] + + write_off = fields.Float('Write off allowed', default=0.) + account_lost_id = fields.Many2one('account.account', + string="Account Lost") + account_profit_id = fields.Many2one('account.account', + string="Account Profit") + journal_id = fields.Many2one('account.journal', + string="Journal") + date_base_on = fields.Selection('_get_rec_base_date', + required=True, + string='Date of reconciliation', + default='newest') + filter = fields.Char(string='Filter') + income_exchange_account_id = fields.Many2one('account.account', + string='Gain Exchange ' + 'Rate Account') + expense_exchange_account_id = fields.Many2one('account.account', + string='Loss Exchange ' + 'Rate Account') + + +class AccountMassReconcileMethod(models.Model): + _name = 'account.mass.reconcile.method' + _description = 'reconcile method for account_mass_reconcile' + _inherit = 'mass.reconcile.options' + _order = 'sequence' + + @api.model + def _get_all_rec_method(self): + return [ + ('mass.reconcile.simple.name', 'Simple. Amount and Name'), + ('mass.reconcile.simple.partner', 'Simple. Amount and Partner'), + ('mass.reconcile.simple.reference', + 'Simple. Amount and Reference'), + ('mass.reconcile.advanced.ref', + 'Advanced. Partner and Ref.'), + ] + + @api.model + def _get_rec_method(self): + return self._get_all_rec_method() + + name = fields.Selection('_get_rec_method', string='Type', required=True) + sequence = fields.Integer(string='Sequence', + default=1, + required=True, + help="The sequence field is used to order " + "the reconcile method" + ) + task_id = fields.Many2one('account.mass.reconcile', + string='Task', + required=True, + ondelete='cascade' + ) + company_id = fields.Many2one('res.company', + string='Company', + related="task_id.company_id", + store=True, + readonly=True + ) + + +class AccountMassReconcile(models.Model): + + _name = 'account.mass.reconcile' + _inherit = ['mail.thread'] + _description = 'account mass reconcile' + + @api.multi + @api.depends('account') + def _get_total_unrec(self): + obj_move_line = self.env['account.move.line'] + for rec in self: + rec.unreconciled_count = obj_move_line.search_count( + [('account_id', '=', rec.account.id), + ('reconciled', '=', False)]) + + @api.multi + @api.depends('history_ids') + def _last_history(self): + # do a search() for retrieving the latest history line, + # as a read() will badly split the list of ids with 'date desc' + # and return the wrong result. + history_obj = self.env['mass.reconcile.history'] + for rec in self: + last_history_rs = history_obj.search( + [('mass_reconcile_id', '=', rec.id)], + limit=1, order='date desc' + ) + rec.last_history = last_history_rs or False + + name = fields.Char(string='Name', required=True) + account = fields.Many2one('account.account', + string='Account', + required=True, + ) + reconcile_method = fields.One2many('account.mass.reconcile.method', + 'task_id', + string='Method' + ) + unreconciled_count = fields.Integer(string='Unreconciled Items', + compute='_get_total_unrec' + ) + history_ids = fields.One2many('mass.reconcile.history', + 'mass_reconcile_id', + string='History', + readonly=True + ) + last_history = fields.Many2one('mass.reconcile.history', + string='Last history', readonly=True, + compute='_last_history', + ) + company_id = fields.Many2one('res.company', string='Company') + + @api.model + def _prepare_run_transient(self, rec_method): + return {'account_id': rec_method.task_id.account.id, + 'write_off': rec_method.write_off, + 'account_lost_id': (rec_method.account_lost_id.id), + 'account_profit_id': (rec_method.account_profit_id.id), + 'income_exchange_account_id': + (rec_method.income_exchange_account_id.id), + 'expense_exchange_account_id': + (rec_method.income_exchange_account_id.id), + 'journal_id': (rec_method.journal_id.id), + 'date_base_on': rec_method.date_base_on, + 'filter': rec_method.filter} + + @api.multi + def run_reconcile(self): + def find_reconcile_ids(fieldname, move_line_ids): + if not move_line_ids: + return [] + sql = ("SELECT DISTINCT " + fieldname + + " FROM account_move_line " + " WHERE id in %s " + " AND " + fieldname + " IS NOT NULL") + self.env.cr.execute(sql, (tuple(move_line_ids),)) + res = self.env.cr.fetchall() + return [row[0] for row in res] + + # we use a new cursor to be able to commit the reconciliation + # often. We have to create it here and not later to avoid problems + # where the new cursor sees the lines as reconciles but the old one + # does not. + + for rec in self: + ctx = self.env.context.copy() + ctx['commit_every'] = ( + rec.account.company_id.reconciliation_commit_every + ) + if ctx['commit_every']: + new_cr = sql_db.db_connect(self.env.cr.dbname).cursor() + else: + new_cr = self.env.cr + + try: + all_ml_rec_ids = [] + + for method in rec.reconcile_method: + rec_model = self.env[method.name] + auto_rec_id = rec_model.create( + self._prepare_run_transient(method) + ) + + ml_rec_ids = auto_rec_id.automatic_reconcile() + + all_ml_rec_ids += ml_rec_ids + + reconcile_ids = find_reconcile_ids( + 'full_reconcile_id', + all_ml_rec_ids + ) + self.env['mass.reconcile.history'].create( + { + 'mass_reconcile_id': rec.id, + 'date': fields.Datetime.now(), + 'reconcile_ids': [ + (4, rid) for rid in reconcile_ids + ], + }) + except Exception as e: + # In case of error, we log it in the mail thread, log the + # stack trace and create an empty history line; otherwise, + # the cron will just loop on this reconcile task. + _logger.exception( + "The reconcile task %s had an exception: %s", + rec.name, e.message + ) + message = _("There was an error during reconciliation : %s") \ + % e.message + rec.message_post(body=message) + self.env['mass.reconcile.history'].create( + { + 'mass_reconcile_id': rec.id, + 'date': fields.Datetime.now(), + 'reconcile_ids': [], + } + ) + finally: + if ctx['commit_every']: + new_cr.commit() + new_cr.close() + + return True + + @api.multi + def _no_history(self): + """ Raise an `orm.except_orm` error, supposed to + be called when there is no history on the reconciliation + task. + """ + raise UserError( + _('There is no history of reconciled ' + 'items on the task: %s.') % self.name + ) + + @api.model + def _open_move_line_list(self, move_line_ids, name): + return { + 'name': name, + 'view_mode': 'tree,form', + 'view_id': False, + 'view_type': 'form', + 'res_model': 'account.move.line', + 'type': 'ir.actions.act_window', + 'nodestroy': True, + 'target': 'current', + 'domain': unicode([('id', 'in', move_line_ids)]), + } + + @api.multi + def open_unreconcile(self): + """ Open the view of move line with the unreconciled move lines""" + self.ensure_one() + obj_move_line = self.env['account.move.line'] + lines = obj_move_line.search( + [('account_id', '=', self.account.id), + ('reconciled', '=', False)]) + name = _('Unreconciled items') + return self._open_move_line_list(lines.ids or [], name) + + @api.multi + def last_history_reconcile(self): + """ Get the last history record for this reconciliation profile + and return the action which opens move lines reconciled + """ + if not self.last_history: + self._no_history() + return self.last_history.open_reconcile() + + @api.model + def run_scheduler(self, run_all=None): + """ Launch the reconcile with the oldest run + This function is mostly here to be used with cron task + + :param run_all: if set it will ingore lookup and launch + all reconciliation + :returns: True in case of success or raises an exception + + """ + def _get_date(reconcile): + if reconcile.last_history.date: + return fields.Datetime.from_string(reconcile.last_history.date) + else: + return datetime.min + + reconciles = self.search([]) + assert reconciles.ids, "No mass reconcile available" + if run_all: + reconciles.run_reconcile() + return True + reconciles.sorted(key=_get_date) + older = reconciles[0] + older.run_reconcile() + return True diff --git a/account_mass_reconcile/models/mass_reconcile_history.py b/account_mass_reconcile/models/mass_reconcile_history.py new file mode 100644 index 00000000..028c6087 --- /dev/null +++ b/account_mass_reconcile/models/mass_reconcile_history.py @@ -0,0 +1,82 @@ +# -*- coding: utf-8 -*- +# © 2012-2016 Camptocamp SA (Guewen Baconnier, Damien Crier, Matthieu Dietrich) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from openerp import models, api, fields, _ + + +class MassReconcileHistory(models.Model): + """ Store an history of the runs per profile + Each history stores the list of reconciliations done""" + + _name = 'mass.reconcile.history' + _rec_name = 'mass_reconcile_id' + _order = 'date DESC' + + @api.multi + @api.depends('reconcile_ids') + def _get_reconcile_line_ids(self): + for rec in self: + rec.reconcile_line_ids = rec.mapped( + 'reconcile_ids.reconciled_line_ids' + ).ids + + mass_reconcile_id = fields.Many2one( + 'account.mass.reconcile', + string='Reconcile Profile', + readonly=True + ) + date = fields.Datetime(string='Run date', readonly=True, required=True) + reconcile_ids = fields.Many2many( + comodel_name='account.full.reconcile', + relation='account_full_reconcile_history_rel', + string='Full Reconciliations', + readonly=True + ) + reconcile_line_ids = fields.Many2many( + comodel_name='account.move.line', + relation='account_move_line_history_rel', + string='Reconciled Items', + compute='_get_reconcile_line_ids' + ) + company_id = fields.Many2one( + 'res.company', + string='Company', + store=True, + readonly=True, + related='mass_reconcile_id.company_id' + ) + + @api.multi + def _open_move_lines(self): + """ For an history record, open the view of move line with + the reconciled move lines + + :param history_id: id of the history + :return: action to open the move lines + """ + move_line_ids = self.mapped('reconcile_ids.reconciled_line_ids').ids + name = _('Reconciliations') + return { + 'name': name, + 'view_mode': 'tree,form', + 'view_id': False, + 'view_type': 'form', + 'res_model': 'account.move.line', + 'type': 'ir.actions.act_window', + 'nodestroy': True, + 'target': 'current', + 'domain': unicode([('id', 'in', move_line_ids)]), + } + + @api.multi + def open_reconcile(self): + """ For an history record, open the view of move line + with the reconciled move lines + + :param history_ids: id of the record as int or long + Accept a list with 1 id too to be + used from the client. + """ + self.ensure_one() + return self._open_move_lines() diff --git a/account_mass_reconcile/models/res_config.py b/account_mass_reconcile/models/res_config.py new file mode 100644 index 00000000..a1089a36 --- /dev/null +++ b/account_mass_reconcile/models/res_config.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# © 2014-2016 Camptocamp SA (Leonardo Pistone, Damien Crier, Matthieu Dietrich) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from openerp import models, fields + + +class AccountConfigSettings(models.TransientModel): + _inherit = 'account.config.settings' + + reconciliation_commit_every = fields.Integer( + related="company_id.reconciliation_commit_every", + string="How often to commit when performing automatic " + "reconciliation.", + help="Leave zero to commit only at the end of the process." + ) + + +class Company(models.Model): + _inherit = "res.company" + + reconciliation_commit_every = fields.Integer( + string="How often to commit when performing automatic " + "reconciliation.", + help="Leave zero to commit only at the end of the process." + ) diff --git a/account_mass_reconcile/models/simple_reconciliation.py b/account_mass_reconcile/models/simple_reconciliation.py new file mode 100644 index 00000000..e4a7703a --- /dev/null +++ b/account_mass_reconcile/models/simple_reconciliation.py @@ -0,0 +1,97 @@ +# -*- coding: utf-8 -*- +# © 2012-2016 Camptocamp SA (Guewen Baconnier, Damien Crier, Matthieu Dietrich) +# © 2010 Sébastien Beau +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from openerp import models, api + + +class MassReconcileSimple(models.AbstractModel): + _name = 'mass.reconcile.simple' + _inherit = 'mass.reconcile.base' + + # has to be subclassed + # field name used as key for matching the move lines + _key_field = None + + @api.multi + def rec_auto_lines_simple(self, lines): + if self._key_field is None: + raise ValueError("_key_field has to be defined") + count = 0 + res = [] + while (count < len(lines)): + for i in xrange(count + 1, len(lines)): + if lines[count][self._key_field] != lines[i][self._key_field]: + break + check = False + if lines[count]['credit'] > 0 and lines[i]['debit'] > 0: + credit_line = lines[count] + debit_line = lines[i] + check = True + elif lines[i]['credit'] > 0 and lines[count]['debit'] > 0: + credit_line = lines[i] + debit_line = lines[count] + check = True + if not check: + continue + reconciled, dummy = self._reconcile_lines( + [credit_line, debit_line], + allow_partial=False + ) + if reconciled: + res += [credit_line['id'], debit_line['id']] + del lines[i] + break + count += 1 + return res + + @api.multi + def _simple_order(self, *args, **kwargs): + return "ORDER BY account_move_line.%s" % self._key_field + + @api.multi + def _action_rec(self): + """Match only 2 move lines, do not allow partial reconcile""" + select = self._select() + select += ", account_move_line.%s " % self._key_field + where, params = self._where() + where += " AND account_move_line.%s IS NOT NULL " % self._key_field + + where2, params2 = self._get_filter() + query = ' '.join(( + select, + self._from(), + where, where2, + self._simple_order())) + + self.env.cr.execute(query, params + params2) + lines = self.env.cr.dictfetchall() + return self.rec_auto_lines_simple(lines) + + +class MassReconcileSimpleName(models.TransientModel): + _name = 'mass.reconcile.simple.name' + _inherit = 'mass.reconcile.simple' + + # has to be subclassed + # field name used as key for matching the move lines + _key_field = 'name' + + +class MassReconcileSimplePartner(models.TransientModel): + _name = 'mass.reconcile.simple.partner' + _inherit = 'mass.reconcile.simple' + + # has to be subclassed + # field name used as key for matching the move lines + _key_field = 'partner_id' + + +class MassReconcileSimpleReference(models.TransientModel): + _name = 'mass.reconcile.simple.reference' + _inherit = 'mass.reconcile.simple' + + # has to be subclassed + # field name used as key for matching the move lines + _key_field = 'ref' diff --git a/account_mass_reconcile/security/ir.model.access.csv b/account_mass_reconcile/security/ir.model.access.csv new file mode 100644 index 00000000..fb696697 --- /dev/null +++ b/account_mass_reconcile/security/ir.model.access.csv @@ -0,0 +1,9 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_mass_reconcile_options_acc_user,mass.reconcile.options,model_mass_reconcile_options,account.group_account_user,1,0,0,0 +access_account_mass_reconcile_method_acc_user,account.mass.reconcile.method,model_account_mass_reconcile_method,account.group_account_user,1,0,0,0 +access_account_mass_reconcile_acc_user,account.mass.reconcile,model_account_mass_reconcile,account.group_account_user,1,1,0,0 +access_mass_reconcile_options_acc_mgr,mass.reconcile.options,model_mass_reconcile_options,account.group_account_manager,1,0,0,0 +access_account_mass_reconcile_method_acc_mgr,account.mass.reconcile.method,model_account_mass_reconcile_method,account.group_account_manager,1,1,1,1 +access_account_mass_reconcile_acc_mgr,account.mass.reconcile,model_account_mass_reconcile,account.group_account_manager,1,1,1,1 +access_mass_reconcile_history_acc_user,mass.reconcile.history,model_mass_reconcile_history,account.group_account_user,1,1,1,0 +access_mass_reconcile_history_acc_mgr,mass.reconcile.history,model_mass_reconcile_history,account.group_account_manager,1,1,1,1 diff --git a/account_mass_reconcile/security/ir_rule.xml b/account_mass_reconcile/security/ir_rule.xml new file mode 100644 index 00000000..5ad4cc08 --- /dev/null +++ b/account_mass_reconcile/security/ir_rule.xml @@ -0,0 +1,25 @@ + + + + + Mass reconcile multi-company + + + ['|', ('company_id', '=', False), ('company_id', 'child_of', [user.company_id.id])] + + + + Mass reconcile history multi-company + + + ['|', ('company_id', '=', False), ('company_id', 'child_of', [user.company_id.id])] + + + + Mass reconcile method multi-company + + + ['|', ('company_id', '=', False), ('company_id', 'child_of', [user.company_id.id])] + + + diff --git a/account_mass_reconcile/tests/__init__.py b/account_mass_reconcile/tests/__init__.py new file mode 100644 index 00000000..9f9b96e4 --- /dev/null +++ b/account_mass_reconcile/tests/__init__.py @@ -0,0 +1,8 @@ +# -*- coding: utf-8 -*- +# © 2014-2016 Camptocamp SA (Damien Crier) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import test_onchange_company +from . import test_reconcile_history +from . import test_reconcile +from . import test_scenario_reconcile diff --git a/account_mass_reconcile/tests/test_onchange_company.py b/account_mass_reconcile/tests/test_onchange_company.py new file mode 100644 index 00000000..8a1e029c --- /dev/null +++ b/account_mass_reconcile/tests/test_onchange_company.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- +# © 2014-2016 Camptocamp SA (Damien Crier) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from openerp.tests import common +from openerp import tools +from openerp.modules import get_module_resource + + +class TestOnChange(common.TransactionCase): + + def setUp(self): + super(TestOnChange, self).setUp() + tools.convert_file(self.cr, 'account', + get_module_resource('account', 'test', + 'account_minimal_test.xml'), + {}, 'init', False, 'test') + acc_setting = self.env['account.config.settings'] + self.acc_setting_obj = acc_setting.create({}) + self.company_obj = self.env['res.company'] + # analytic defaults account creation + self.main_company = self.env.ref('base.main_company') + self.sec_company = self.company_obj.create( + { + 'name': 'Second company', + 'reconciliation_commit_every': 80 + } + ) + + def test_retrieve_analytic_account(self): + sec_company_commit = self.sec_company.reconciliation_commit_every + main_company_commit = self.main_company.reconciliation_commit_every + + self.acc_setting_obj.company_id = self.sec_company + + self.assertEqual(sec_company_commit, + self.acc_setting_obj.reconciliation_commit_every, + False) + + self.acc_setting_obj.company_id = self.main_company + + self.assertEqual(main_company_commit, + self.acc_setting_obj.reconciliation_commit_every, + False) diff --git a/account_mass_reconcile/tests/test_reconcile.py b/account_mass_reconcile/tests/test_reconcile.py new file mode 100644 index 00000000..b7697bed --- /dev/null +++ b/account_mass_reconcile/tests/test_reconcile.py @@ -0,0 +1,69 @@ +# -*- coding: utf-8 -*- +# © 2014-2016 Camptocamp SA (Damien Crier) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from openerp.tests import common +from openerp import fields, exceptions, tools +from openerp.modules import get_module_resource + + +class TestReconcile(common.TransactionCase): + + def setUp(self): + super(TestReconcile, self).setUp() + tools.convert_file(self.cr, 'account', + get_module_resource('account', 'test', + 'account_minimal_test.xml'), + {}, 'init', False, 'test') + self.rec_history_obj = self.env['mass.reconcile.history'] + self.mass_rec_obj = self.env['account.mass.reconcile'] + self.mass_rec_method_obj = ( + self.env['account.mass.reconcile.method'] + ) + self.mass_rec = self.mass_rec_obj.create( + { + 'name': 'AER2', + 'account': self.ref('account.a_salary_expense'), + } + ) + self.mass_rec_method = self.mass_rec_method_obj.create( + { + 'name': 'mass.reconcile.simple.name', + 'sequence': '10', + 'task_id': self.mass_rec.id, + } + ) + self.mass_rec_no_history = self.mass_rec_obj.create( + { + 'name': 'AER3', + 'account': self.ref('account.a_salary_expense'), + + } + ) + self.rec_history = self.rec_history_obj.create( + { + 'mass_reconcile_id': self.mass_rec.id, + 'date': fields.Datetime.now(), + } + ) + + def test_last_history(self): + mass_rec_last_hist = self.mass_rec.last_history + self.assertEqual(self.rec_history, mass_rec_last_hist) + + def test_last_history_empty(self): + mass_rec_last_hist = self.mass_rec_no_history.last_history.id + self.assertEqual(False, mass_rec_last_hist) + + def test_last_history_full_no_history(self): + with self.assertRaises(exceptions.Warning): + self.mass_rec_no_history.last_history_reconcile() + + def test_open_unreconcile(self): + res = self.mass_rec.open_unreconcile() + self.assertEqual(unicode([('id', 'in', [])]), res.get('domain', [])) + + def test_prepare_run_transient(self): + res = self.mass_rec._prepare_run_transient(self.mass_rec_method) + self.assertEqual(self.ref('account.a_salary_expense'), + res.get('account_id', 0)) diff --git a/account_mass_reconcile/tests/test_reconcile_history.py b/account_mass_reconcile/tests/test_reconcile_history.py new file mode 100644 index 00000000..74f28dee --- /dev/null +++ b/account_mass_reconcile/tests/test_reconcile_history.py @@ -0,0 +1,42 @@ +# -*- coding: utf-8 -*- +# © 2014-2016 Camptocamp SA (Damien Crier) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from openerp.tests import common +from openerp import fields, tools +from openerp.modules import get_module_resource + + +class TestReconcileHistory(common.TransactionCase): + + def setUp(self): + super(TestReconcileHistory, self).setUp() + tools.convert_file(self.cr, 'account', + get_module_resource('account', 'test', + 'account_minimal_test.xml'), + {}, 'init', False, 'test') + self.rec_history_obj = self.env['mass.reconcile.history'] + self.mass_rec_obj = self.env['account.mass.reconcile'] + self.mass_rec = self.mass_rec_obj.create( + { + 'name': 'AER1', + 'account': self.ref('account.a_expense'), + + } + ) + self.rec_history = self.rec_history_obj.create( + { + 'mass_reconcile_id': self.mass_rec.id, + 'date': fields.Datetime.now(), + } + ) + + def test_open_full_empty(self): + res = self.rec_history._open_move_lines() + self.assertEqual(unicode([('id', 'in', [])]), res.get( + 'domain', [])) + + def test_open_full_empty_from_method(self): + res = self.rec_history.open_reconcile() + self.assertEqual(unicode([('id', 'in', [])]), res.get( + 'domain', [])) diff --git a/account_mass_reconcile/tests/test_scenario_reconcile.py b/account_mass_reconcile/tests/test_scenario_reconcile.py new file mode 100644 index 00000000..9c2062e9 --- /dev/null +++ b/account_mass_reconcile/tests/test_scenario_reconcile.py @@ -0,0 +1,231 @@ +# -*- coding: utf-8 -*- +# © 2014-2016 Camptocamp SA (Damien Crier) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from openerp.tests import common +from openerp import fields, tools +from openerp.modules import get_module_resource + + +class TestScenarioReconcile(common.TransactionCase): + + def setUp(self): + super(TestScenarioReconcile, self).setUp() + tools.convert_file(self.cr, 'account', + get_module_resource('account', 'test', + 'account_minimal_test.xml'), + {}, 'init', False, 'test') + self.rec_history_obj = self.env['mass.reconcile.history'] + self.mass_rec_obj = self.env['account.mass.reconcile'] + self.invoice_obj = self.env['account.invoice'] + self.bk_stmt_obj = self.env['account.bank.statement'] + self.bk_stmt_line_obj = self.env['account.bank.statement.line'] + self.acc_move_line_obj = self.env['account.move.line'] + self.mass_rec_method_obj = ( + self.env['account.mass.reconcile.method'] + ) + self.account_fx_income_id = self.ref("account.income_fx_income") + self.account_fx_expense_id = self.ref("account.income_fx_expense") + self.acs_model = self.env['account.config.settings'] + + acs_ids = self.acs_model.search( + [('company_id', '=', self.ref("base.main_company"))] + ) + + values = {'group_multi_currency': True, + 'currency_id': self.ref('base.EUR')} + + if acs_ids: + acs_ids.write(values) + else: + default_vals = self.acs_model.default_get([]) + default_vals.update(values) + acs_ids = self.acs_model.create(default_vals) + + def test_scenario_reconcile(self): + # create invoice + invoice = self.invoice_obj.create( + { + 'type': 'out_invoice', + 'account_id': self.ref('account.a_recv'), + 'company_id': self.ref('base.main_company'), + 'journal_id': self.ref('account.sales_journal'), + 'partner_id': self.ref('base.res_partner_12'), + 'invoice_line_ids': [ + (0, 0, { + 'name': '[PCSC234] PC Assemble SC234', + 'account_id': self.ref('account.a_sale'), + 'price_unit': 1000.0, + 'quantity': 1.0, + 'product_id': self.ref('product.product_product_3'), + } + ) + ] + } + ) + # validate invoice + invoice.signal_workflow('invoice_open') + self.assertEqual('open', invoice.state) + + # create bank_statement + statement = self.bk_stmt_obj.create( + { + 'balance_end_real': 0.0, + 'balance_start': 0.0, + 'date': fields.Date.today(), + 'journal_id': self.ref('account.bank_journal'), + 'line_ids': [ + (0, 0, { + 'amount': 1000.0, + 'partner_id': self.ref('base.res_partner_12'), + 'name': invoice.number, + 'ref': invoice.number, + } + ) + ] + } + ) + + # reconcile + line_id = None + for l in invoice.move_id.line_ids: + if l.account_id.id == self.ref('account.a_recv'): + line_id = l + break + + for statement_line in statement.line_ids: + statement_line.process_reconciliation( + [ + { + 'move_line': line_id, + 'credit': 1000.0, + 'debit': 0.0, + 'name': invoice.number, + } + ] + ) + + # unreconcile journal item created by previous reconciliation + lines_to_unreconcile = self.acc_move_line_obj.search( + [('reconciled', '=', True), + ('statement_id', '=', statement.id)] + ) + lines_to_unreconcile.remove_move_reconcile() + + # create the mass reconcile record + mass_rec = self.mass_rec_obj.create( + { + 'name': 'mass_reconcile_1', + 'account': self.ref('account.a_recv'), + 'reconcile_method': [ + (0, 0, { + 'name': 'mass.reconcile.simple.partner', + } + ) + ] + } + ) + # call the automatic reconcilation method + mass_rec.run_reconcile() + self.assertEqual( + 'paid', + invoice.state + ) + + def test_scenario_reconcile_currency(self): + # create currency rate + self.env['res.currency.rate'].create({ + 'name': fields.Date.today() + ' 00:00:00', + 'currency_id': self.ref('base.USD'), + 'rate': 1.5, + }) + # create invoice + invoice = self.invoice_obj.create( + { + 'type': 'out_invoice', + 'account_id': self.ref('account.a_recv'), + 'company_id': self.ref('base.main_company'), + 'currency_id': self.ref('base.USD'), + 'journal_id': self.ref('account.bank_journal_usd'), + 'partner_id': self.ref('base.res_partner_12'), + 'invoice_line_ids': [ + (0, 0, { + 'name': '[PCSC234] PC Assemble SC234', + 'account_id': self.ref('account.a_sale'), + 'price_unit': 1000.0, + 'quantity': 1.0, + 'product_id': self.ref('product.product_product_3'), + } + ) + ] + } + ) + # validate invoice + invoice.signal_workflow('invoice_open') + self.assertEqual('open', invoice.state) + + # create bank_statement + statement = self.bk_stmt_obj.create( + { + 'balance_end_real': 0.0, + 'balance_start': 0.0, + 'date': fields.Date.today(), + 'journal_id': self.ref('account.bank_journal_usd'), + 'currency_id': self.ref('base.USD'), + 'line_ids': [ + (0, 0, { + 'amount': 1000.0, + 'amount_currency': 1500.0, + 'partner_id': self.ref('base.res_partner_12'), + 'name': invoice.number, + 'ref': invoice.number, + } + ) + ] + } + ) + + # reconcile + line_id = None + for l in invoice.move_id.line_ids: + if l.account_id.id == self.ref('account.a_recv'): + line_id = l + break + + for statement_line in statement.line_ids: + statement_line.process_reconciliation( + [ + { + 'move_line': line_id, + 'credit': 1000.0, + 'debit': 0.0, + 'name': invoice.number, + } + ] + ) + # unreconcile journal item created by previous reconciliation + lines_to_unreconcile = self.acc_move_line_obj.search( + [('reconciled', '=', True), + ('statement_id', '=', statement.id)] + ) + lines_to_unreconcile.remove_move_reconcile() + + # create the mass reconcile record + mass_rec = self.mass_rec_obj.create( + { + 'name': 'mass_reconcile_1', + 'account': self.ref('account.a_recv'), + 'reconcile_method': [ + (0, 0, { + 'name': 'mass.reconcile.simple.partner', + } + ) + ] + } + ) + # call the automatic reconcilation method + mass_rec.run_reconcile() + self.assertEqual( + 'paid', + invoice.state + ) diff --git a/account_mass_reconcile/views/mass_reconcile.xml b/account_mass_reconcile/views/mass_reconcile.xml new file mode 100644 index 00000000..e641b534 --- /dev/null +++ b/account_mass_reconcile/views/mass_reconcile.xml @@ -0,0 +1,163 @@ + + + + + + + account.mass.reconcile.form + 20 + account.mass.reconcile + +
+
+
+ + + + + + + + + + + +