From 6f32255412b737280a23437f26c6fe3d3d796fe3 Mon Sep 17 00:00:00 2001
From: sebastien beau
Date: Tue, 22 May 2012 19:09:03 +0200
Subject: [PATCH 01/52] [INIT] add a new module account_easy_reconcile.
For reconciling entries automatically (lp:account-extra-addons rev 22)
---
account_easy_reconcile/__init__.py | 21 +++
account_easy_reconcile/__openerp__.py | 35 ++++
account_easy_reconcile/easy_reconcile.py | 216 ++++++++++++++++++++++
account_easy_reconcile/easy_reconcile.xml | 121 ++++++++++++
4 files changed, 393 insertions(+)
create mode 100755 account_easy_reconcile/__init__.py
create mode 100755 account_easy_reconcile/__openerp__.py
create mode 100644 account_easy_reconcile/easy_reconcile.py
create mode 100644 account_easy_reconcile/easy_reconcile.xml
diff --git a/account_easy_reconcile/__init__.py b/account_easy_reconcile/__init__.py
new file mode 100755
index 00000000..8b179243
--- /dev/null
+++ b/account_easy_reconcile/__init__.py
@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+#########################################################################
+# #
+# Copyright (C) 2010 Sébastien Beau #
+# #
+#This program is free software: you can redistribute it and/or modify #
+#it under the terms of the GNU General Public License as published by #
+#the Free Software Foundation, either version 3 of the License, or #
+#(at your option) any later version. #
+# #
+#This program is distributed in the hope that it will be useful, #
+#but WITHOUT ANY WARRANTY; without even the implied warranty of #
+#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
+#GNU General Public License for more details. #
+# #
+#You should have received a copy of the GNU General Public License #
+#along with this program. If not, see . #
+#########################################################################
+
+import easy_reconcile
+
diff --git a/account_easy_reconcile/__openerp__.py b/account_easy_reconcile/__openerp__.py
new file mode 100755
index 00000000..d3143a5c
--- /dev/null
+++ b/account_easy_reconcile/__openerp__.py
@@ -0,0 +1,35 @@
+# -*- coding: utf-8 -*-
+#########################################################################
+# #
+# Copyright (C) 2010 Sébastien Beau #
+# #
+#This program is free software: you can redistribute it and/or modify #
+#it under the terms of the GNU General Public License as published by #
+#the Free Software Foundation, either version 3 of the License, or #
+#(at your option) any later version. #
+# #
+#This program is distributed in the hope that it will be useful, #
+#but WITHOUT ANY WARRANTY; without even the implied warranty of #
+#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
+#GNU General Public License for more details. #
+# #
+#You should have received a copy of the GNU General Public License #
+#along with this program. If not, see . #
+#########################################################################
+{
+ "name" : "Easy Reconcile",
+ "version" : "1.0",
+ "depends" : ["account", "base_scheduler_creator"
+ ],
+ "author" : "Sébastien Beau",
+ "description": """A new view to reconcile easily your account
+""",
+ "website" : "http://www.akretion.com/",
+ "category" : "Customer Modules",
+ "init_xml" : [],
+ "demo_xml" : [],
+ "update_xml" : ["easy_reconcile.xml"],
+ "active": False,
+ "installable": True,
+
+}
diff --git a/account_easy_reconcile/easy_reconcile.py b/account_easy_reconcile/easy_reconcile.py
new file mode 100644
index 00000000..1d348e68
--- /dev/null
+++ b/account_easy_reconcile/easy_reconcile.py
@@ -0,0 +1,216 @@
+# -*- encoding: utf-8 -*-
+#########################################################################
+# #
+# Copyright (C) 2010 Sébastien Beau #
+# #
+#This program is free software: you can redistribute it and/or modify #
+#it under the terms of the GNU General Public License as published by #
+#the Free Software Foundation, either version 3 of the License, or #
+#(at your option) any later version. #
+# #
+#This program is distributed in the hope that it will be useful, #
+#but WITHOUT ANY WARRANTY; without even the implied warranty of #
+#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
+#GNU General Public License for more details. #
+# #
+#You should have received a copy of the GNU General Public License #
+#along with this program. If not, see . #
+#########################################################################
+
+from osv import fields,osv
+from tools.translate import _
+import time
+import string
+
+
+class account_easy_reconcile_method(osv.osv):
+ _name = 'account.easy.reconcile.method'
+ _description = 'reconcile method for account_easy_reconcile'
+
+ def onchange_name(self, cr, uid, id, name, write_off, context=None):
+ if name in ['action_rec_auto_name', 'action_rec_auto_partner']:
+ if write_off>0:
+ return {'value' : {'require_write_off' : True, 'require_account_id' : True, 'require_journal_id' : True}}
+ return {'value' : {'require_write_off' : True}}
+ return {}
+
+ def onchange_write_off(self, cr, uid, id, name, write_off, context=None):
+ if name in ['action_rec_auto_name', 'action_rec_auto_partner']:
+ if write_off>0:
+ return {'value' : {'require_account_id' : True, 'require_journal_id' : True}}
+ else:
+ return {'value' : {'require_account_id' : False, 'require_journal_id' : False}}
+ return {}
+
+ def _get_all_rec_method(self, cr, uid, context=None):
+ return [
+ ('action_rec_auto_name', 'Simple method based on amount and name'),
+ ('action_rec_auto_partner', 'Simple method based on amount and partner'),
+ ]
+
+ def _get_rec_method(self, cr, uid, context=None):
+ return self._get_all_rec_method(cr, uid, context=None)
+
+ _columns = {
+ 'name': fields.selection(_get_rec_method, 'Type', size=128, required=True),
+ 'sequence': fields.integer('Sequence', required=True, help="The sequence field is used to order the reconcile method"),
+ 'write_off': fields.float('Write off Value'),
+ 'account_lost_id': fields.many2one('account.account', 'Account Lost'),
+ 'account_profit_id': fields.many2one('account.account', 'Account Profit'),
+ 'journal_id': fields.many2one('account.journal', 'Journal'),
+ 'require_write_off' : fields.boolean('Require Write-off'),
+ 'require_account_id' : fields.boolean('Require Account'),
+ 'require_journal_id' : fields.boolean('Require Journal'),
+ 'date_base_on': fields.selection([('newest', 'the most recent'), ('actual', 'today'), ('credit_line', 'credit line date'), ('debit_line', 'debit line date')], 'Date Base On'),
+ 'filter' : fields.char('Filter', size=128),
+ }
+
+ _defaults = {
+ 'write_off': lambda *a: 0,
+ }
+
+ _order = 'sequence'
+
+account_easy_reconcile_method()
+
+
+class account_easy_reconcile(osv.osv):
+ _name = 'account.easy.reconcile'
+ _description = 'account easy reconcile'
+
+ def _get_unrec_number(self, cr, uid, ids, name, arg, context=None):
+ obj_move_line = self.pool.get('account.move.line')
+ res={}
+ for task in self.read(cr, uid, ids, ['account'], context=context):
+ res[task['id']] = len(obj_move_line.search(cr, uid, [('account_id', '=', task['account'][0]), ('reconcile_id', '=', False)], context=context))
+ return res
+
+ _columns = {
+ 'name': fields.char('Name', size=64, required=True),
+ 'account': fields.many2one('account.account', 'Account', required=True),
+ 'reconcile_method': fields.one2many('account.easy.reconcile.method', 'task_id', 'Method'),
+ 'scheduler': fields.many2one('ir.cron', 'scheduler', readonly=True),
+ 'rec_log': fields.text('log', readonly=True),
+ 'unreconcile_entry_number': fields.function(_get_unrec_number, method=True, type='integer', string='Unreconcile Entries'),
+ }
+
+ def rec_auto_lines_simple(self, cr, uid, lines, context=None):
+ if not context:
+ context={}
+ count=0
+ res=0
+ max = context.get('write_off', 0) + 0.001
+ while (count 0 and lines[i][2] > 0:
+ credit_line = lines[count]
+ debit_line = lines[i]
+ check =True
+ elif lines[i][1] > 0 and lines[count][2] > 0:
+ credit_line = lines[i]
+ debit_line = lines[count]
+ check=True
+
+ if check and abs(credit_line[1] - debit_line[2]) <= max:
+ if context.get('write_off', 0) > 0 and abs(credit_line[1] - debit_line[2]) > 0.001:
+ if credit_line[1] < debit_line[2]:
+ writeoff_account_id = context.get('account_profit_id',False)
+ else:
+ writeoff_account_id = context.get('account_lost_id',False)
+
+ #context['date_base_on'] = 'credit_line'
+ context['comment'] = _('Write-Off %s')%credit_line[0]
+
+ if context.get('date_base_on', False) == 'credit_line':
+ date = credit_line[4]
+ elif context.get('date_base_on', False) == 'debit_line':
+ date = debit_line[4]
+ elif context.get('date_base_on', False) == 'newest':
+ date = (credit_line[4] > debit_line[4]) and credit_line[4] or debit_line[4]
+ else:
+ date = None
+
+ context['date_p'] = date
+ period_id = self.pool.get('account.period').find(cr, uid, dt=date, context=context)[0]
+
+ self.pool.get('account.move.line').reconcile(cr, uid, [lines[count][3], lines[i][3]], writeoff_acc_id=writeoff_account_id, writeoff_period_id=period_id, writeoff_journal_id=context.get('journal_id'), context=context)
+ del lines[i]
+ res+=2
+ break
+ count+=1
+ return res
+
+ def get_params(self, cr, uid, account_id, context):
+ if context.get('filter'):
+ (from_clause, where_clause, where_clause_params) = self.pool.get('account.move.line')._where_calc(cr, uid, context['filter'], context=context).get_sql()
+ if where_clause:
+ where_clause = " AND %s"%where_clause
+ where_clause_params = (account_id,) + tuple(where_clause_params)
+ else:
+ print 'id', account_id
+ where_clause = ''
+ where_clause_params = (account_id,)
+ return where_clause, where_clause_params
+
+ def action_rec_auto_name(self, cr, uid, account_id, context):
+ (qu1, qu2) = self.get_params(cr, uid, account_id, context)
+ cr.execute("""
+ SELECT name, credit, debit, id, date
+ FROM account_move_line
+ WHERE account_id=%s
+ AND reconcile_id IS NULL
+ AND name IS NOT NULL""" + qu1 + " ORDER BY name",
+ qu2)
+ lines = cr.fetchall()
+ return self.rec_auto_lines_simple(cr, uid, lines, context)
+
+ def action_rec_auto_partner(self, cr, uid, account_id, context):
+ (qu1, qu2) = self.get_params(cr, uid, account_id, context)
+ cr.execute("""
+ SELECT partner_id, credit, debit, id, date
+ FROM account_move_line
+ WHERE account_id=%s
+ AND reconcile_id IS NULL
+ AND partner_id IS NOT NULL""" + qu1 + " ORDER BY partner_id",
+ qu2)
+ lines = cr.fetchall()
+ return self.rec_auto_lines_simple(cr, uid, lines, context)
+
+ def action_rec_auto(self, cr, uid, ids, context=None):
+ if not context:
+ context={}
+ for id in ids:
+ easy_rec = self.browse(cr, uid, id, context)
+ total_rec=0
+ details = ''
+ count = 0
+ for method in easy_rec.reconcile_method:
+ count += 1
+ context.update({'date_base_on' : method.date_base_on, 'filter' : eval(method.filter or '[]'), 'write_off': (method.write_off>0 and method.write_off) or 0, 'account_lost_id':method.account_lost_id.id, 'account_profit_id':method.account_profit_id.id, 'journal_id':method.journal_id.id})
+ res = eval('self.'+ str(method.name) +'(cr, uid, ' + str(easy_rec.account.id) +', context)')
+ details += _(' method ') + str(count) + ' : ' + str(res) + _(' lines') +' |'
+ log = self.read(cr, uid, id, ['rec_log'], context=context)['rec_log']
+ log_line = log and log.split("\n") or []
+ log_line[0:0] = [time.strftime('%Y-%m-%d %H:%M:%S') + ' : ' + str(total_rec) + _(' lines have been reconciled ('+ details[0:-2] + ')')]
+ log = "\n".join(log_line)
+ self.write(cr, uid, id, {'rec_log' : log}, context=context)
+ return True
+
+account_easy_reconcile()
+
+
+class account_easy_reconcile_method(osv.osv):
+
+ _inherit = 'account.easy.reconcile.method'
+
+ _columns = {
+ 'task_id' : fields.many2one('account.easy.reconcile', 'Task', required=True, ondelete='cascade'),
+ }
+
+account_easy_reconcile_method()
+
diff --git a/account_easy_reconcile/easy_reconcile.xml b/account_easy_reconcile/easy_reconcile.xml
new file mode 100644
index 00000000..f3371679
--- /dev/null
+++ b/account_easy_reconcile/easy_reconcile.xml
@@ -0,0 +1,121 @@
+
+
+
+
+
+
+
+
+ account.easy.reconcile.form
+ 20
+ account.easy.reconcile
+ form
+
+
+
+
+
+
+ account.easy.reconcile.tree
+ 20
+ account.easy.reconcile
+ tree
+
+
+
+
+
+
+
+
+
+
+
+
+ account easy reconcile
+ ir.actions.act_window
+ account.easy.reconcile
+ form
+ tree,form
+ {'wizard_object' : 'account.easy.reconcile', 'function' : 'action_rec_auto', 'object_link' : 'account.easy.reconcile' }
+
+
+
+
+
+
+ account.easy.reconcile.method.form
+ 20
+ account.easy.reconcile.method
+ form
+
+
+
+
+
+
+ account.easy.reconcile.method.tree
+ 20
+ account.easy.reconcile.method
+ tree
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ client_action_multi
+ account.easy.reconcile
+ Create a Scheduler
+
+
+
+
+
+
+
+
+
From c769d391c5b3e20bad42bd5370597dc155ac29f3 Mon Sep 17 00:00:00 2001
From: "@" <@>
Date: Mon, 18 Jun 2012 14:55:16 +0200
Subject: [PATCH 02/52] [MRG] account_statement_reconcile,renamed
account_advanced_reconcile
based on account_easy_reconcile (lp:c2c-financial-addons/6.1 rev 24.1.20)
---
account_advanced_reconcile/__init__.py | 24 ++
account_advanced_reconcile/__openerp__.py | 90 ++++++
.../advanced_reconciliation.py | 120 ++++++++
.../base_advanced_reconciliation.py | 274 ++++++++++++++++++
account_advanced_reconcile/easy_reconcile.py | 37 +++
.../easy_reconcile_view.xml | 20 ++
6 files changed, 565 insertions(+)
create mode 100644 account_advanced_reconcile/__init__.py
create mode 100644 account_advanced_reconcile/__openerp__.py
create mode 100644 account_advanced_reconcile/advanced_reconciliation.py
create mode 100644 account_advanced_reconcile/base_advanced_reconciliation.py
create mode 100644 account_advanced_reconcile/easy_reconcile.py
create mode 100644 account_advanced_reconcile/easy_reconcile_view.xml
diff --git a/account_advanced_reconcile/__init__.py b/account_advanced_reconcile/__init__.py
new file mode 100644
index 00000000..1c643cae
--- /dev/null
+++ b/account_advanced_reconcile/__init__.py
@@ -0,0 +1,24 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Author: Guewen Baconnier
+# Copyright 2012 Camptocamp SA
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+import easy_reconcile
+import base_advanced_reconciliation
+import advanced_reconciliation
diff --git a/account_advanced_reconcile/__openerp__.py b/account_advanced_reconcile/__openerp__.py
new file mode 100644
index 00000000..5ca17767
--- /dev/null
+++ b/account_advanced_reconcile/__openerp__.py
@@ -0,0 +1,90 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Author: Guewen Baconnier
+# Copyright 2012 Camptocamp SA
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+{'name': "Advanced Reconcile",
+ 'version': '1.0',
+ 'author': 'Camptocamp',
+ 'maintainer': 'Camptocamp',
+ 'category': 'Finance',
+ 'complexity': 'normal',
+ 'depends': ['account_easy_reconcile'],
+ 'description': """
+Advanced reconciliation methods for the module account_easy_reconcile.
+
+account_easy_reconcile, which is a dependency, is available in the branch:
+lp:~openerp-community-committers/+junk/account-extra-addons
+This branch is temporary and will soon be merged with the Akretion master
+branch, but the master branch does not already exist. Sorry for the
+inconvenience.
+
+In addition to the features implemented in account_easy_reconcile, which are:
+ - 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 reconcilation runs with a few logs
+
+It implements a basis to created advanced reconciliation methods in a few lines
+of code.
+
+Typically, such a method can be:
+ - Reconcile entries if the partner and the ref are equal
+ - Reconcile entries if the partner is equal and the ref is the same than ref
+ or name
+ - Reconcile entries if the partner is equal and the ref match with a pattern
+
+And they allows:
+ - Reconciliations with multiple credit / multiple debit lines
+ - Partial reconciliations
+ - Write-off amount as well
+
+A method is already implemented in this module, it matches on entries:
+ * Partner
+ * Ref on credit move lines should be case insensitive equals to the ref or
+ the name of the debit move line
+
+The base class to find the reconciliations is built to be as efficient as
+possible.
+
+
+So basically, if you have an invoice with 3 payments (one per month), the first
+month, it will partial reconcile the debit move line with the first payment, the second
+month, it will partial reconcile the debit move line with 2 first payments,
+the third month, it will make the full reconciliation.
+
+This module is perfectly adapted for E-Commerce business where a big volume of
+move lines and so, reconciliations, are involved and payments often come from
+many offices.
+
+ """,
+ 'website': 'http://www.camptocamp.com',
+ 'init_xml': [],
+ 'update_xml': ['easy_reconcile_view.xml'],
+ 'demo_xml': [],
+ 'test': [],
+ 'images': [],
+ 'installable': True,
+ 'auto_install': False,
+ 'license': 'AGPL-3',
+ 'application': True,
+}
diff --git a/account_advanced_reconcile/advanced_reconciliation.py b/account_advanced_reconcile/advanced_reconciliation.py
new file mode 100644
index 00000000..dfdb8883
--- /dev/null
+++ b/account_advanced_reconcile/advanced_reconciliation.py
@@ -0,0 +1,120 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Author: Guewen Baconnier
+# Copyright 2012 Camptocamp SA
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+from openerp.osv.orm import TransientModel
+
+
+class easy_reconcile_advanced_ref(TransientModel):
+
+ _name = 'easy.reconcile.advanced.ref'
+ _inherit = 'easy.reconcile.advanced'
+ _auto = True # False when inherited from AbstractModel
+
+ def _skip_line(self, cr, uid, rec, move_line, context=None):
+ """
+ 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'))
+
+ def _matchers(self, cr, uid, rec, move_line, context=None):
+ """
+ Return the values used as matchers to found 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 returns:
+ 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 than 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()))
+
+ def _opposite_matchers(self, cr, uid, rec, move_line, context=None):
+ """
+ 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 have to yield its value respecting the orders
+ 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'].lower().strip(),
+ move_line['name'].lower().strip()))
+
diff --git a/account_advanced_reconcile/base_advanced_reconciliation.py b/account_advanced_reconcile/base_advanced_reconciliation.py
new file mode 100644
index 00000000..df26708c
--- /dev/null
+++ b/account_advanced_reconcile/base_advanced_reconciliation.py
@@ -0,0 +1,274 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Author: Guewen Baconnier
+# Copyright 2012 Camptocamp SA
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+from itertools import groupby, product
+from operator import itemgetter
+from openerp.osv.orm import Model, AbstractModel, TransientModel
+from openerp.osv import fields
+
+
+class easy_reconcile_advanced(AbstractModel):
+
+ _name = 'easy.reconcile.advanced'
+ _inherit = 'easy.reconcile.base'
+
+ def _query_debit(self, cr, uid, rec, context=None):
+ """Select all move (debit>0) as candidate. Optional choice on invoice
+ will filter with an inner join on the related moves.
+ """
+ select = self._select(rec)
+ sql_from = self._from(rec)
+ where, params = self._where(rec)
+ where += " AND account_move_line.debit > 0 "
+
+ where2, params2 = self._get_filter(cr, uid, rec, context=context)
+
+ query = ' '.join((select, sql_from, where, where2))
+
+ cr.execute(query, params + params2)
+ return cr.dictfetchall()
+
+ def _query_credit(self, cr, uid, rec, context=None):
+ """Select all move (credit>0) as candidate. Optional choice on invoice
+ will filter with an inner join on the related moves.
+ """
+ select = self._select(rec)
+ sql_from = self._from(rec)
+ where, params = self._where(rec)
+ where += " AND account_move_line.credit > 0 "
+
+ where2, params2 = self._get_filter(cr, uid, rec, context=context)
+
+ query = ' '.join((select, sql_from, where, where2))
+
+ cr.execute(query, params + params2)
+ return cr.dictfetchall()
+
+ def _matchers(self, cr, uid, rec, move_line, context=None):
+ """
+ Return the values used as matchers to found 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 returns:
+ 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 than 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
+
+ def _opposite_matchers(self, cr, uid, rec, move_line, context=None):
+ """
+ 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 have to yield its value respecting the orders
+ 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 easy_reconcile_advanced._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 easy_reconcile_advanced._compare_matcher_values(mkey, mvalue, omvalue)
+
+ def _compare_opposite(self, cr, uid, rec, move_line, opposite_move_line,
+ matchers, context=None):
+ opp_matchers = self._opposite_matchers(cr, uid, rec, opposite_move_line,
+ context=context)
+ 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
+
+ def _search_opposites(self, cr, uid, rec, move_line, opposite_move_lines, context=None):
+ """
+ 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(cr, uid, rec, move_line, context=context)
+ return [op for op in opposite_move_lines if \
+ self._compare_opposite(cr, uid, rec, move_line, op, matchers, context=context)]
+
+ def _action_rec(self, cr, uid, rec, context=None):
+ credit_lines = self._query_credit(cr, uid, rec, context=context)
+ debit_lines = self._query_debit(cr, uid, rec, context=context)
+ return self._rec_auto_lines_advanced(
+ cr, uid, rec, credit_lines, debit_lines, context=context)
+
+ def _skip_line(self, cr, uid, rec, move_line, context=None):
+ """
+ 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
+
+ def _rec_auto_lines_advanced(self, cr, uid, rec, credit_lines, debit_lines, context=None):
+ if context is None:
+ context = {}
+
+ reconciled_ids = []
+ partial_reconciled_ids = []
+ reconcile_groups = []
+
+ for credit_line in credit_lines:
+ if self._skip_line(cr, uid, rec, credit_line, context=context):
+ continue
+
+ opposite_lines = self._search_opposites(
+ cr, uid, rec, credit_line, debit_lines, context=context)
+
+ 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]):
+ group.update(line_ids)
+ break
+ else:
+ reconcile_groups.append(set(line_ids))
+
+ lines_by_id = dict([(l['id'], l) for l in credit_lines + debit_lines])
+ for reconcile_group_ids in reconcile_groups:
+ group_lines = [lines_by_id[lid] for lid in reconcile_group_ids]
+ reconciled, full = self._reconcile_lines(
+ cr, uid, rec, group_lines, allow_partial=True, context=context)
+ if reconciled and full:
+ reconciled_ids += reconcile_group_ids
+ elif reconciled:
+ partial_reconciled_ids += reconcile_group_ids
+
+ return reconciled_ids, partial_reconciled_ids
+
diff --git a/account_advanced_reconcile/easy_reconcile.py b/account_advanced_reconcile/easy_reconcile.py
new file mode 100644
index 00000000..747a2e3c
--- /dev/null
+++ b/account_advanced_reconcile/easy_reconcile.py
@@ -0,0 +1,37 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Author: Guewen Baconnier
+# Copyright 2012 Camptocamp SA
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+from openerp.osv.orm import Model
+
+
+class account_easy_reconcile_method(Model):
+
+ _inherit = 'account.easy.reconcile.method'
+
+ def _get_all_rec_method(self, cr, uid, context=None):
+ methods = super(account_easy_reconcile_method, self).\
+ _get_all_rec_method(cr, uid, context=context)
+ methods += [
+ ('easy.reconcile.advanced.ref',
+ 'Advanced. Partner and Ref.'),
+ ]
+ return methods
+
diff --git a/account_advanced_reconcile/easy_reconcile_view.xml b/account_advanced_reconcile/easy_reconcile_view.xml
new file mode 100644
index 00000000..961add68
--- /dev/null
+++ b/account_advanced_reconcile/easy_reconcile_view.xml
@@ -0,0 +1,20 @@
+
+
+
+
+ account.easy.reconcile.form
+ account.easy.reconcile
+ form
+
+
+
+
+
+
+
+
+
+
+
+
From 78f7fdf92971a89697bcfc08e1e8f1674fd694c0 Mon Sep 17 00:00:00 2001
From: "@" <@>
Date: Tue, 12 Jun 2012 22:41:47 +0200
Subject: [PATCH 03/52] [REF] refactoring of account_advanced_reconcile
using account_easy_reconcile (lp:c2c-financial-addons/6.1 rev 24.2.1)
---
account_advanced_reconcile/__init__.py | 8 +-
account_advanced_reconcile/__openerp__.py | 67 +---
.../advanced_reconciliation.py | 120 -------
.../base_advanced_reconciliation.py | 274 --------------
account_advanced_reconcile/easy_reconcile.py | 37 --
.../easy_reconcile_view.xml | 20 --
account_advanced_reconcile/wizard/__init__.py | 20 ++
.../wizard/statement_auto_reconcile.py | 338 ++++++++++++++++++
.../wizard/statement_auto_reconcile_view.xml | 72 ++++
9 files changed, 446 insertions(+), 510 deletions(-)
delete mode 100644 account_advanced_reconcile/advanced_reconciliation.py
delete mode 100644 account_advanced_reconcile/base_advanced_reconciliation.py
delete mode 100644 account_advanced_reconcile/easy_reconcile.py
delete mode 100644 account_advanced_reconcile/easy_reconcile_view.xml
create mode 100644 account_advanced_reconcile/wizard/__init__.py
create mode 100644 account_advanced_reconcile/wizard/statement_auto_reconcile.py
create mode 100644 account_advanced_reconcile/wizard/statement_auto_reconcile_view.xml
diff --git a/account_advanced_reconcile/__init__.py b/account_advanced_reconcile/__init__.py
index 1c643cae..d79c35ef 100644
--- a/account_advanced_reconcile/__init__.py
+++ b/account_advanced_reconcile/__init__.py
@@ -1,8 +1,8 @@
# -*- coding: utf-8 -*-
##############################################################################
#
-# Author: Guewen Baconnier
-# Copyright 2012 Camptocamp SA
+# Author: Nicolas Bessi
+# Copyright 2011-2012 Camptocamp SA
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
@@ -19,6 +19,4 @@
#
##############################################################################
-import easy_reconcile
-import base_advanced_reconciliation
-import advanced_reconciliation
+import reconcile_method
diff --git a/account_advanced_reconcile/__openerp__.py b/account_advanced_reconcile/__openerp__.py
index 5ca17767..26e63b61 100644
--- a/account_advanced_reconcile/__openerp__.py
+++ b/account_advanced_reconcile/__openerp__.py
@@ -1,8 +1,7 @@
-# -*- coding: utf-8 -*-
-##############################################################################
+# -*- coding: utf-8 -*- ##############################################################################
#
-# Author: Guewen Baconnier
-# Copyright 2012 Camptocamp SA
+# Author: Nicolas Bessi, Joel Grand-Guillaume
+# Copyright 2011-2012 Camptocamp SA
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
@@ -25,66 +24,26 @@
'maintainer': 'Camptocamp',
'category': 'Finance',
'complexity': 'normal',
- 'depends': ['account_easy_reconcile'],
+ 'depends': ['base_transaction_id', 'account_easy_reconcile'],
'description': """
-Advanced reconciliation methods for the module account_easy_reconcile.
+This module allows you auto reconcile entries with payment.
+It is mostly used in E-Commerce, but could also be useful in other cases.
-account_easy_reconcile, which is a dependency, is available in the branch:
-lp:~openerp-community-committers/+junk/account-extra-addons
-This branch is temporary and will soon be merged with the Akretion master
-branch, but the master branch does not already exist. Sorry for the
-inconvenience.
-
-In addition to the features implemented in account_easy_reconcile, which are:
- - 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 reconcilation runs with a few logs
-
-It implements a basis to created advanced reconciliation methods in a few lines
-of code.
-
-Typically, such a method can be:
- - Reconcile entries if the partner and the ref are equal
- - Reconcile entries if the partner is equal and the ref is the same than ref
- or name
- - Reconcile entries if the partner is equal and the ref match with a pattern
-
-And they allows:
- - Reconciliations with multiple credit / multiple debit lines
- - Partial reconciliations
- - Write-off amount as well
-
-A method is already implemented in this module, it matches on entries:
- * Partner
- * Ref on credit move lines should be case insensitive equals to the ref or
- the name of the debit move line
-
-The base class to find the reconciliations is built to be as efficient as
-possible.
-
-
-So basically, if you have an invoice with 3 payments (one per month), the first
-month, it will partial reconcile the debit move line with the first payment, the second
-month, it will partial reconcile the debit move line with 2 first payments,
-the third month, it will make the full reconciliation.
-
-This module is perfectly adapted for E-Commerce business where a big volume of
-move lines and so, reconciliations, are involved and payments often come from
-many offices.
+The automatic reconciliation matches a transaction ID, if available, propagated from the Sale Order.
+It can also search for the sale order name in the origin or description of the move line.
+Basically, this module will match account move line with a matching reference on a same account.
+It will make a partial reconciliation if more than one move has the same reference (like 3x payments)
+Once all payment will be there, it will make a full reconciliation.
+You can choose a write-off amount as well.
""",
'website': 'http://www.camptocamp.com',
'init_xml': [],
- 'update_xml': ['easy_reconcile_view.xml'],
+ 'update_xml': [],
'demo_xml': [],
'test': [],
'images': [],
'installable': True,
'auto_install': False,
'license': 'AGPL-3',
- 'application': True,
}
diff --git a/account_advanced_reconcile/advanced_reconciliation.py b/account_advanced_reconcile/advanced_reconciliation.py
deleted file mode 100644
index dfdb8883..00000000
--- a/account_advanced_reconcile/advanced_reconciliation.py
+++ /dev/null
@@ -1,120 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# Author: Guewen Baconnier
-# Copyright 2012 Camptocamp SA
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-
-from openerp.osv.orm import TransientModel
-
-
-class easy_reconcile_advanced_ref(TransientModel):
-
- _name = 'easy.reconcile.advanced.ref'
- _inherit = 'easy.reconcile.advanced'
- _auto = True # False when inherited from AbstractModel
-
- def _skip_line(self, cr, uid, rec, move_line, context=None):
- """
- 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'))
-
- def _matchers(self, cr, uid, rec, move_line, context=None):
- """
- Return the values used as matchers to found 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 returns:
- 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 than 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()))
-
- def _opposite_matchers(self, cr, uid, rec, move_line, context=None):
- """
- 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 have to yield its value respecting the orders
- 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'].lower().strip(),
- move_line['name'].lower().strip()))
-
diff --git a/account_advanced_reconcile/base_advanced_reconciliation.py b/account_advanced_reconcile/base_advanced_reconciliation.py
deleted file mode 100644
index df26708c..00000000
--- a/account_advanced_reconcile/base_advanced_reconciliation.py
+++ /dev/null
@@ -1,274 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# Author: Guewen Baconnier
-# Copyright 2012 Camptocamp SA
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-
-from itertools import groupby, product
-from operator import itemgetter
-from openerp.osv.orm import Model, AbstractModel, TransientModel
-from openerp.osv import fields
-
-
-class easy_reconcile_advanced(AbstractModel):
-
- _name = 'easy.reconcile.advanced'
- _inherit = 'easy.reconcile.base'
-
- def _query_debit(self, cr, uid, rec, context=None):
- """Select all move (debit>0) as candidate. Optional choice on invoice
- will filter with an inner join on the related moves.
- """
- select = self._select(rec)
- sql_from = self._from(rec)
- where, params = self._where(rec)
- where += " AND account_move_line.debit > 0 "
-
- where2, params2 = self._get_filter(cr, uid, rec, context=context)
-
- query = ' '.join((select, sql_from, where, where2))
-
- cr.execute(query, params + params2)
- return cr.dictfetchall()
-
- def _query_credit(self, cr, uid, rec, context=None):
- """Select all move (credit>0) as candidate. Optional choice on invoice
- will filter with an inner join on the related moves.
- """
- select = self._select(rec)
- sql_from = self._from(rec)
- where, params = self._where(rec)
- where += " AND account_move_line.credit > 0 "
-
- where2, params2 = self._get_filter(cr, uid, rec, context=context)
-
- query = ' '.join((select, sql_from, where, where2))
-
- cr.execute(query, params + params2)
- return cr.dictfetchall()
-
- def _matchers(self, cr, uid, rec, move_line, context=None):
- """
- Return the values used as matchers to found 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 returns:
- 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 than 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
-
- def _opposite_matchers(self, cr, uid, rec, move_line, context=None):
- """
- 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 have to yield its value respecting the orders
- 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 easy_reconcile_advanced._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 easy_reconcile_advanced._compare_matcher_values(mkey, mvalue, omvalue)
-
- def _compare_opposite(self, cr, uid, rec, move_line, opposite_move_line,
- matchers, context=None):
- opp_matchers = self._opposite_matchers(cr, uid, rec, opposite_move_line,
- context=context)
- 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
-
- def _search_opposites(self, cr, uid, rec, move_line, opposite_move_lines, context=None):
- """
- 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(cr, uid, rec, move_line, context=context)
- return [op for op in opposite_move_lines if \
- self._compare_opposite(cr, uid, rec, move_line, op, matchers, context=context)]
-
- def _action_rec(self, cr, uid, rec, context=None):
- credit_lines = self._query_credit(cr, uid, rec, context=context)
- debit_lines = self._query_debit(cr, uid, rec, context=context)
- return self._rec_auto_lines_advanced(
- cr, uid, rec, credit_lines, debit_lines, context=context)
-
- def _skip_line(self, cr, uid, rec, move_line, context=None):
- """
- 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
-
- def _rec_auto_lines_advanced(self, cr, uid, rec, credit_lines, debit_lines, context=None):
- if context is None:
- context = {}
-
- reconciled_ids = []
- partial_reconciled_ids = []
- reconcile_groups = []
-
- for credit_line in credit_lines:
- if self._skip_line(cr, uid, rec, credit_line, context=context):
- continue
-
- opposite_lines = self._search_opposites(
- cr, uid, rec, credit_line, debit_lines, context=context)
-
- 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]):
- group.update(line_ids)
- break
- else:
- reconcile_groups.append(set(line_ids))
-
- lines_by_id = dict([(l['id'], l) for l in credit_lines + debit_lines])
- for reconcile_group_ids in reconcile_groups:
- group_lines = [lines_by_id[lid] for lid in reconcile_group_ids]
- reconciled, full = self._reconcile_lines(
- cr, uid, rec, group_lines, allow_partial=True, context=context)
- if reconciled and full:
- reconciled_ids += reconcile_group_ids
- elif reconciled:
- partial_reconciled_ids += reconcile_group_ids
-
- return reconciled_ids, partial_reconciled_ids
-
diff --git a/account_advanced_reconcile/easy_reconcile.py b/account_advanced_reconcile/easy_reconcile.py
deleted file mode 100644
index 747a2e3c..00000000
--- a/account_advanced_reconcile/easy_reconcile.py
+++ /dev/null
@@ -1,37 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# Author: Guewen Baconnier
-# Copyright 2012 Camptocamp SA
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-
-from openerp.osv.orm import Model
-
-
-class account_easy_reconcile_method(Model):
-
- _inherit = 'account.easy.reconcile.method'
-
- def _get_all_rec_method(self, cr, uid, context=None):
- methods = super(account_easy_reconcile_method, self).\
- _get_all_rec_method(cr, uid, context=context)
- methods += [
- ('easy.reconcile.advanced.ref',
- 'Advanced. Partner and Ref.'),
- ]
- return methods
-
diff --git a/account_advanced_reconcile/easy_reconcile_view.xml b/account_advanced_reconcile/easy_reconcile_view.xml
deleted file mode 100644
index 961add68..00000000
--- a/account_advanced_reconcile/easy_reconcile_view.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-
-
- account.easy.reconcile.form
- account.easy.reconcile
- form
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/account_advanced_reconcile/wizard/__init__.py b/account_advanced_reconcile/wizard/__init__.py
new file mode 100644
index 00000000..f72fd976
--- /dev/null
+++ b/account_advanced_reconcile/wizard/__init__.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Author Nicolas Bessi. Copyright Camptocamp SA
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+import statement_auto_reconcile
diff --git a/account_advanced_reconcile/wizard/statement_auto_reconcile.py b/account_advanced_reconcile/wizard/statement_auto_reconcile.py
new file mode 100644
index 00000000..732d5b55
--- /dev/null
+++ b/account_advanced_reconcile/wizard/statement_auto_reconcile.py
@@ -0,0 +1,338 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Author: Nicolas Bessi, Guewen Baconnier
+# Copyright 2011-2012 Camptocamp SA
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+import netsvc
+
+from osv import osv, fields
+from tools.translate import _
+from operator import itemgetter, attrgetter
+from itertools import groupby
+import logging
+logger = logging.getLogger('account.statement.reconcile')
+
+class AccountsStatementAutoReconcile(osv.osv_memory):
+ _name = 'account.statement.import.automatic.reconcile'
+ _description = 'Automatic Reconcile'
+
+ _columns = {
+ 'account_ids': fields.many2many('account.account',
+ 'statement_reconcile_account_rel',
+ 'reconcile_id',
+ 'account_id',
+ 'Accounts to Reconcile',
+ domain=[('reconcile', '=', True)]),
+ 'partner_ids': fields.many2many('res.partner',
+ 'statement_reconcile_res_partner_rel',
+ 'reconcile_id',
+ 'res_partner_id',
+ 'Partners to Reconcile'),
+ 'invoice_ids': fields.many2many('account.invoice',
+ 'statement_account_invoice_rel',
+ 'reconcile_id',
+ 'invoice_id',
+ 'Invoices to Reconcile',
+ domain = [('type','=','out_invoice')]),
+ 'writeoff_acc_id': fields.many2one('account.account', 'Account'),
+ 'writeoff_amount_limit': fields.float('Max amount allowed for write off'),
+ 'journal_id': fields.many2one('account.journal', 'Journal'),
+ 'reconciled': fields.integer('Reconciled transactions', readonly=True),
+ 'allow_write_off': fields.boolean('Allow write off'),
+ }
+
+ def _get_reconciled(self, cr, uid, context=None):
+ if context is None:
+ context = {}
+ return context.get('reconciled', 0)
+
+ _defaults = {
+ 'reconciled': _get_reconciled,
+ }
+
+ def return_stats(self, cr, uid, reconciled, context=None):
+ obj_model = self.pool.get('ir.model.data')
+ context = context or {}
+ context.update({'reconciled': reconciled})
+ model_data_ids = obj_model.search(
+ cr, uid,
+ [('model','=','ir.ui.view'),
+ ('name','=','stat_account_automatic_reconcile_view1')]
+ )
+ resource_id = obj_model.read(
+ cr, uid, model_data_ids, fields=['res_id'])[0]['res_id']
+ return {
+ 'view_type': 'form',
+ 'view_mode': 'form',
+ 'res_model': 'account.statement.import.automatic.reconcile',
+ 'views': [(resource_id,'form')],
+ 'type': 'ir.actions.act_window',
+ 'target': 'new',
+ 'context': context,
+ }
+
+ def _below_write_off_limit(self, cr, uid, lines,
+ writeoff_limit, context=None):
+
+ keys = ('debit', 'credit')
+ sums = reduce(lambda x, y:
+ dict((k, v + y[k]) for k, v in x.iteritems() if k in keys),
+ lines)
+ debit, credit = sums['debit'], sums['credit']
+ writeoff_amount = debit - credit
+ return bool(writeoff_limit >= abs(writeoff_amount))
+
+ def _query_moves(self, cr, uid, form, context=None):
+ """Select all move (debit>0) as candidate. Optionnal choice on invoice
+ will filter with an inner join on the related moves.
+ """
+ sql_params=[]
+ select_sql = ("SELECT "
+ "l.account_id, "
+ "l.ref as transaction_id, "
+ "l.name as origin, "
+ "l.id as invoice_id, "
+ "l.move_id as move_id, "
+ "l.id as move_line_id, "
+ "l.debit, l.credit, "
+ "l.partner_id "
+ "FROM account_move_line l "
+ "INNER JOIN account_move m "
+ "ON m.id = l.move_id ")
+ where_sql = (
+ "WHERE "
+ # "AND l.move_id NOT IN %(invoice_move_ids)s "
+ "l.reconcile_id IS NULL "
+ # "AND NOT EXISTS (select id FROM account_invoice i WHERE i.move_id = m.id) "
+ "AND l.debit > 0 ")
+ if form.account_ids:
+ account_ids = [str(x.id) for x in form.account_ids]
+ sql_params = {'account_ids': tuple(account_ids)}
+ where_sql += "AND l.account_id in %(account_ids)s "
+ if form.invoice_ids:
+ invoice_ids = [str(x.id) for x in form.invoice_ids]
+ where_sql += "AND i.id IN %(invoice_ids)s "
+ select_sql += "INNER JOIN account_invoice i ON m.id = i.move_id "
+ sql_params['invoice_ids'] = tuple(invoice_ids)
+ if form.partner_ids:
+ partner_ids = [str(x.id) for x in form.partner_ids]
+ where_sql += "AND l.partner_id IN %(partner_ids)s "
+ sql_params['partner_ids'] = tuple(partner_ids)
+ sql = select_sql + where_sql
+ cr.execute(sql, sql_params)
+ return cr.dictfetchall()
+
+ def _query_payments(self, cr, uid, account_id, invoice_move_ids, context=None):
+ sql_params = {'account_id': account_id,
+ 'invoice_move_ids': tuple(invoice_move_ids)}
+ sql = ("SELECT l.id, l.move_id, "
+ "l.ref, l.name, "
+ "l.debit, l.credit, "
+ "l.period_id as period_id, "
+ "l.partner_id "
+ "FROM account_move_line l "
+ "INNER JOIN account_move m "
+ "ON m.id = l.move_id "
+ "WHERE l.account_id = %(account_id)s "
+ "AND l.move_id NOT IN %(invoice_move_ids)s "
+ "AND l.reconcile_id IS NULL "
+ "AND NOT EXISTS (select id FROM account_invoice i WHERE i.move_id = m.id) "
+ "AND l.credit > 0")
+ cr.execute(sql, sql_params)
+ return cr.dictfetchall()
+
+ @staticmethod
+ def _groupby_keys(keys, lines):
+ res = {}
+ key = keys.pop(0)
+ sorted_lines = sorted(lines, key=itemgetter(key))
+
+ for reference, iter_lines in groupby(sorted_lines, itemgetter(key)):
+ group_lines = list(iter_lines)
+
+ if keys:
+ group_lines = (AccountsStatementAutoReconcile.
+ _groupby_keys(keys[:], group_lines))
+ else:
+ # as we sort on all the keys, the last list
+ # is perforce alone in the list
+ group_lines = group_lines[0]
+ res[reference] = group_lines
+
+ return res
+
+ def _search_payment_ref(self, cr, uid, all_payments,
+ reference_key, reference, context=None):
+ def compare_key(payment, key, reference_patterns):
+ if not payment.get(key):
+ return False
+ if payment.get(key).lower() in reference_patterns:
+ return True
+
+ res = []
+ if not reference:
+ return res
+
+ lref = reference.lower()
+ reference_patterns = (lref, 'tid_' + lref, 'tid_mag_' + lref)
+ res_append = res.append
+ for payment in all_payments:
+ if (compare_key(payment, 'ref', reference_patterns) or
+ compare_key(payment, 'name', reference_patterns)):
+ res_append(payment)
+ # remove payment from all_payments?
+
+# if res:
+# print '----------------------------------'
+# print 'ref: ' + reference
+# for l in res:
+# print (l.get('ref','') or '') + ' ' + (l.get('name','') or '')
+ return res
+
+ def _search_payments(self, cr, uid, all_payments,
+ references, context=None):
+ payments = []
+ for field_reference in references:
+ ref_key, reference = field_reference
+ payments = self._search_payment_ref(
+ cr, uid, all_payments, ref_key, reference, context=context)
+ # if match is found for one reference (transaction_id or origin)
+ # we have found our payments, don't need to search for the order
+ # reference
+ if payments:
+ break
+ return payments
+
+ def reconcile(self, cr, uid, form_id, context=None):
+ context = context or {}
+ move_line_obj = self.pool.get('account.move.line')
+ period_obj = self.pool.get('account.period')
+
+ if isinstance(form_id, list):
+ form_id = form_id[0]
+
+ form = self.browse(cr, uid, form_id)
+
+ allow_write_off = form.allow_write_off
+
+ if not form.account_ids :
+ raise osv.except_osv(_('UserError'),
+ _('You must select accounts to reconcile'))
+
+ # returns a list with a dict per line :
+ # [{'account_id': 5,'reference': 'A', 'move_id': 1, 'move_line_id': 1},
+ # {'account_id': 5,'reference': 'A', 'move_id': 1, 'move_line_id': 2},
+ # {'account_id': 6,'reference': 'B', 'move_id': 3, 'move_line_id': 3}],
+ moves = self._query_moves(cr, uid, form, context=context)
+ if not moves:
+ return False
+ # returns a tree :
+ # { 5: {1: {1: {'reference': 'A', 'move_id': 1, 'move_line_id': 1}},
+ # {2: {'reference': 'A', 'move_id': 1, 'move_line_id': 2}}}},
+ # 6: {3: {3: {'reference': 'B', 'move_id': 3, 'move_line_id': 3}}}}}
+ moves_tree = self._groupby_keys(['account_id',
+ 'move_id',
+ 'move_line_id'],
+ moves)
+
+ reconciled = 0
+ details = ""
+ for account_id, account_tree in moves_tree.iteritems():
+ # [0] because one move id per invoice
+ account_move_ids = [move_tree.keys() for
+ move_tree in account_tree.values()]
+
+ account_payments = self._query_payments(cr, uid,
+ account_id,
+ account_move_ids[0],
+ context=context)
+
+ for move_id, move_tree in account_tree.iteritems():
+
+ # in any case one invoice = one move
+ # move_id, move_tree = invoice_tree.items()[0]
+
+ move_line_ids = []
+ move_lines = []
+ move_lines_ids_append = move_line_ids.append
+ move_lines_append = move_lines.append
+ for move_line_id, vals in move_tree.iteritems():
+ move_lines_ids_append(move_line_id)
+ move_lines_append(vals)
+
+ # take the first one because the reference
+ # is the same everywhere for an invoice
+ transaction_id = move_lines[0]['transaction_id']
+ origin = move_lines[0]['origin']
+ partner_id = move_lines[0]['partner_id']
+
+ references = (('transaction_id', transaction_id),
+ ('origin', origin))
+
+ partner_payments = [p for p in account_payments if \
+ p['partner_id'] == partner_id]
+ payments = self._search_payments(
+ cr, uid, partner_payments, references, context=context)
+
+ if not payments:
+ continue
+
+ payment_ids = [p['id'] for p in payments]
+ # take the period of the payment last move line
+ # it will be used as the reconciliation date
+ # and for the write off date
+ period_ids = [ml['period_id'] for ml in payments]
+ periods = period_obj.browse(
+ cr, uid, period_ids, context=context)
+ last_period = max(periods, key=attrgetter('date_stop'))
+
+ reconcile_ids = move_line_ids + payment_ids
+ do_write_off = (allow_write_off and
+ self._below_write_off_limit(
+ cr, uid, move_lines + payments,
+ form.writeoff_amount_limit,
+ context=context))
+ # date of reconciliation
+ rec_ctx = dict(context, date_p=last_period.date_stop)
+ try:
+ if do_write_off:
+ r_id = move_line_obj.reconcile(cr,
+ uid,
+ reconcile_ids,
+ 'auto',
+ form.writeoff_acc_id.id,
+ # period of the write-off
+ last_period.id,
+ form.journal_id.id,
+ context=rec_ctx)
+ logger.info("Auto statement reconcile: Reconciled with write-off move id %s" % (move_id,))
+ else:
+ r_id = move_line_obj.reconcile_partial(cr,
+ uid,
+ reconcile_ids,
+ 'manual',
+ context=rec_ctx)
+ logger.info("Auto statement reconcile: Partial Reconciled move id %s" % (move_id,))
+ except Exception, exc:
+ logger.error("Auto statement reconcile: Can't reconcile move id %s because: %s" % (move_id, exc,))
+ reconciled += 1
+ cr.commit()
+ return self.return_stats(cr, uid, reconciled, context)
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/account_advanced_reconcile/wizard/statement_auto_reconcile_view.xml b/account_advanced_reconcile/wizard/statement_auto_reconcile_view.xml
new file mode 100644
index 00000000..12c9855e
--- /dev/null
+++ b/account_advanced_reconcile/wizard/statement_auto_reconcile_view.xml
@@ -0,0 +1,72 @@
+
+
+
+
+
+ Account Automatic Reconcile
+ account.statement.import.automatic.reconcile
+ form
+
+
+
+
+
+
+ Account Automatic Reconcile
+ account.statement.import.automatic.reconcile
+ ir.actions.act_window
+ form
+ tree,form
+
+ new
+
+
+
+
+
+ Automatic reconcile unreconcile
+ account.statement.import.automatic.reconcile
+ form
+
+
+
+
+
+
+
From 446540bb4db350772f6e2725598515fdd22b3689 Mon Sep 17 00:00:00 2001
From: "@" <@>
Date: Thu, 14 Jun 2012 16:48:17 +0200
Subject: [PATCH 04/52] [ADD] account_advanced_reconcile: intermediate commit
for a big piece of code
which have still to be exectuted, not sure if it will runs or just miserably crash
(lp:c2c-financial-addons/6.1 rev 24.2.2)
---
account_advanced_reconcile/__init__.py | 2 +-
account_advanced_reconcile/__openerp__.py | 37 +-
.../advanced_reconcile.py | 494 ++++++++++++++++++
3 files changed, 524 insertions(+), 9 deletions(-)
create mode 100644 account_advanced_reconcile/advanced_reconcile.py
diff --git a/account_advanced_reconcile/__init__.py b/account_advanced_reconcile/__init__.py
index d79c35ef..603a86ee 100644
--- a/account_advanced_reconcile/__init__.py
+++ b/account_advanced_reconcile/__init__.py
@@ -19,4 +19,4 @@
#
##############################################################################
-import reconcile_method
+import advanced_reconcile
diff --git a/account_advanced_reconcile/__openerp__.py b/account_advanced_reconcile/__openerp__.py
index 26e63b61..4b1f8e81 100644
--- a/account_advanced_reconcile/__openerp__.py
+++ b/account_advanced_reconcile/__openerp__.py
@@ -24,18 +24,39 @@
'maintainer': 'Camptocamp',
'category': 'Finance',
'complexity': 'normal',
- 'depends': ['base_transaction_id', 'account_easy_reconcile'],
+ 'depends': ['account_easy_reconcile'],
'description': """
-This module allows you auto reconcile entries with payment.
-It is mostly used in E-Commerce, but could also be useful in other cases.
+Advanced reconciliation methods for the module account_easy_reconcile.
-The automatic reconciliation matches a transaction ID, if available, propagated from the Sale Order.
-It can also search for the sale order name in the origin or description of the move line.
+It implements a basis to created advanced reconciliation methods in a few lines
+of code.
-Basically, this module will match account move line with a matching reference on a same account.
-It will make a partial reconciliation if more than one move has the same reference (like 3x payments)
-Once all payment will be there, it will make a full reconciliation.
+Typically, such a method can be:
+ - Reconcile entries if the partner and the ref are equal
+ - Reconcile entries if the partner is equal and the ref is the same than ref
+ or name
+ - Reconcile entries if the partner is equal and the ref match with a pattern
+
+A method is already implemented in this module, it matches on entries:
+ * Partner
+ * Ref on credit move lines should be case insensitive equals to the ref or
+ the name of the debit move line
+
+The base class to find the reconciliations is built to be as efficient as
+possible.
+
+Reconciliations with multiple credit / debit lines is possible.
+Partial reconciliation are generated.
You can choose a write-off amount as well.
+
+So basically, if you have an invoice with 3 payments (one per month), the first
+month, it will partial reconcile the debit move line with the first payment, the second
+month, it will partial reconcile the debit move line with 2 first payments,
+the third month, it will make the full reconciliation.
+
+This module is perfectly adapted for E-Commerce business where a big volume of
+move lines and so, reconciliations, is involved and payments often come from
+many offices.
""",
'website': 'http://www.camptocamp.com',
'init_xml': [],
diff --git a/account_advanced_reconcile/advanced_reconcile.py b/account_advanced_reconcile/advanced_reconcile.py
new file mode 100644
index 00000000..e117525d
--- /dev/null
+++ b/account_advanced_reconcile/advanced_reconcile.py
@@ -0,0 +1,494 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Author: Guewen Baconnier
+# Copyright 2012 Camptocamp SA
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+from itertools import groupby, product
+from operator import itemgetter
+from openerp.osv.orm import Model, AbstractModel, TransientModel
+from openerp.osv import fields
+
+
+class account_easy_reconcile_method(Model):
+
+ _inherit = 'account.easy.reconcile.method'
+
+ def _get_all_rec_method(self, cr, uid, context=None):
+ methods = super(account_easy_reconcile_method, self).\
+ _get_all_rec_method(cr, uid, context=context)
+ methods += [
+ ('easy.reconcile.advanced.ref',
+ 'Advanced method, payment ref matches with ref or name'),
+ ('easy.reconcile.advanced.tid',
+ 'Advanced method, payment Transaction ID matches with ref or name')
+ ]
+ return methods
+
+
+class easy_reconcile_advanced(AbstractModel):
+
+ _name = 'easy.reconcile.advanced'
+ _inherit = 'easy.reconcile.base'
+
+ def _query_debit(self, cr, uid, rec, context=None):
+ """Select all move (debit>0) as candidate. Optional choice on invoice
+ will filter with an inner join on the related moves.
+ """
+ select = self._select(rec)
+ sql_from = self._from(rec)
+ where, params = self._where(rec)
+ where += " AND account_move_line.debit > 0 "
+
+ where2, params2 = self._get_filter(cr, uid, rec, context=context)
+
+ query = ' '.join((select, sql_from, where, where2))
+
+ cr.execute(query, params + params2)
+ return cr.dictfetchall()
+
+ def _query_credit(self, cr, uid, rec, context=None):
+ """Select all move (credit>0) as candidate. Optional choice on invoice
+ will filter with an inner join on the related moves.
+ """
+ select = self._select(rec)
+ sql_from = self._from(rec)
+ where, params = self._where(rec)
+ where += " AND account_move_line.credit > 0 "
+
+ where2, params2 = self._get_filter(cr, uid, rec, context=context)
+
+ query = ' '.join((select, sql_from, where, where2))
+
+ cr.execute(query, params + params2)
+ return cr.dictfetchall()
+
+ def _matchers(self, cr, uid, rec, move_line, context=None):
+ """
+ Return the values used as matchers to found 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 returns:
+ 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 than 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
+
+ def _opposite_matchers(self, cr, uid, rec, move_line, context=None):
+ """
+ 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 have to yield its value respecting the orders
+ 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 easy_reconcile_advanced._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 easy_reconcile_advanced._compare_matcher_values(mkey, mvalue, omvalue)
+
+ def _compare_opposite(self, cr, uid, rec, move_line, opposite_move_line,
+ matchers, context=None):
+ opp_matchers = self._opposite_matchers(cr, uid, rec, opposite_move_line,
+ context=context)
+ 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
+
+ def _search_opposites(self, cr, uid, rec, move_line, opposite_move_lines, context=None):
+ """
+ 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(cr, uid, rec, move_line, context=context)
+ return [op for op in opposite_move_lines if \
+ self._compare_opposite(cr, uid, rec, move_line, op, matchers, context=context)]
+
+ def _action_rec(self, cr, uid, rec, context=None):
+ credit_lines = self._query_credit(cr, uid, rec, context=context)
+ debit_lines = self._query_debit(cr, uid, rec, context=context)
+ return self._rec_auto_lines_advanced(
+ cr, uid, rec, credit_lines, debit_lines, context=context)
+
+ def _skip_line(self, cr, uid, rec, move_line, context=None):
+ """
+ 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
+
+ def _rec_auto_lines_advanced(self, cr, uid, rec, credit_lines, debit_lines, context=None):
+ if context is None:
+ context = {}
+
+ reconciled_ids = []
+ partial_reconciled_ids = []
+ reconcile_groups = []
+
+ for credit_line in credit_lines:
+ if self._skip_line(cr, uid, rec, credit_line, context=context):
+ continue
+
+ opposite_lines = self._search_opposites(
+ cr, uid, rec, credit_line, debit_lines, context=context)
+
+ 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]):
+ group.update(line_ids)
+ break
+ else:
+ reconcile_groups.append(set(line_ids))
+
+ lines_by_id = dict([(l['id'], l) for l in credit_lines + debit_lines])
+ for reconcile_group_ids in reconcile_groups:
+ group_lines = [lines_by_id[lid] for lid in reconcile_group_ids]
+ reconciled, partial = self._reconcile_lines(
+ cr, uid, rec, group_lines, allow_partial=True, context=context)
+ if reconciled and partial:
+ reconciled_ids += reconcile_group_ids
+ elif partial:
+ partial_reconciled_ids += reconcile_group_ids
+
+ return reconciled_ids, partial_reconciled_ids
+
+
+class easy_reconcile_advanced_ref(TransientModel):
+
+ _name = 'easy.reconcile.advanced.ref'
+ _inherit = 'easy.reconcile.advanced'
+ _auto = True # False when inherited from AbstractModel
+
+ def _skip_line(self, cr, uid, rec, move_line, context=None):
+ """
+ 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'))
+
+ def _matchers(self, cr, uid, rec, move_line, context=None):
+ """
+ Return the values used as matchers to found 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 returns:
+ 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 than 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()))
+
+ def _opposite_matchers(self, cr, uid, rec, move_line, context=None):
+ """
+ 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 have to yield its value respecting the orders
+ 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'].lower().strip(),
+ move_line['name'].lower().strip()))
+
+
+class easy_reconcile_advanced_tid(TransientModel):
+
+ # tid means for transaction_id
+ _name = 'easy.reconcile.advanced.tid'
+ _inherit = 'easy.reconcile.advanced'
+ _auto = True # False when inherited from AbstractModel
+
+ def _skip_line(self, cr, uid, rec, move_line, context=None):
+ """
+ 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'))
+
+ def _matchers(self, cr, uid, rec, move_line, context=None):
+ """
+ Return the values used as matchers to found 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 returns:
+ 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 than 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()))
+
+ def _opposite_matchers(self, cr, uid, rec, move_line, context=None):
+ """
+ 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 have to yield its value respecting the orders
+ 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'])
+
+ prefixes = ('tid_', 'tid_mag_')
+ refs = []
+ if move_line.get('ref'):
+ lref = move_line['ref'].lower().strip()
+ refs.append(lref)
+ refs += ["%s%s" % (s, lref) for s in prefixes]
+
+ if move_line.get('name'):
+ refs.append(move_line['name'].lower().strip())
+ yield ('ref', refs)
+
From f3497101d78f0376e4f55e061b5e020eeffbb269 Mon Sep 17 00:00:00 2001
From: "@" <@>
Date: Mon, 18 Jun 2012 12:33:28 +0200
Subject: [PATCH 05/52] [REF] account_advanced_reconcile: moved file
(lp:c2c-financial-addons/6.1 rev 24.2.6)
---
account_advanced_reconcile/__init__.py | 7 ++++---
...vanced_reconcile.py => base_advanced_reconciliation.py} | 0
2 files changed, 4 insertions(+), 3 deletions(-)
rename account_advanced_reconcile/{advanced_reconcile.py => base_advanced_reconciliation.py} (100%)
diff --git a/account_advanced_reconcile/__init__.py b/account_advanced_reconcile/__init__.py
index 603a86ee..263cb053 100644
--- a/account_advanced_reconcile/__init__.py
+++ b/account_advanced_reconcile/__init__.py
@@ -1,8 +1,9 @@
# -*- coding: utf-8 -*-
+# -*- coding: utf-8 -*-
##############################################################################
#
-# Author: Nicolas Bessi
-# Copyright 2011-2012 Camptocamp SA
+# Author: Guewen Baconnier
+# Copyright 2012 Camptocamp SA
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
@@ -19,4 +20,4 @@
#
##############################################################################
-import advanced_reconcile
+import base_advanced_reconciliation
diff --git a/account_advanced_reconcile/advanced_reconcile.py b/account_advanced_reconcile/base_advanced_reconciliation.py
similarity index 100%
rename from account_advanced_reconcile/advanced_reconcile.py
rename to account_advanced_reconcile/base_advanced_reconciliation.py
From 941c7522a72566de373c675e07cff9f2f00bbd19 Mon Sep 17 00:00:00 2001
From: "@" <@>
Date: Mon, 18 Jun 2012 13:25:49 +0200
Subject: [PATCH 06/52] [REF] account_advanced_reconcile: arrange files
(lp:c2c-financial-addons/6.1 rev 24.2.7)
---
account_advanced_reconcile/__init__.py | 3 +-
account_advanced_reconcile/__openerp__.py | 36 +-
.../advanced_reconciliation.py | 120 +++++++
.../base_advanced_reconciliation.py | 226 +-----------
account_advanced_reconcile/easy_reconcile.py | 37 ++
.../easy_reconcile_view.xml | 20 ++
account_advanced_reconcile/wizard/__init__.py | 20 --
.../wizard/statement_auto_reconcile.py | 338 ------------------
.../wizard/statement_auto_reconcile_view.xml | 72 ----
9 files changed, 210 insertions(+), 662 deletions(-)
create mode 100644 account_advanced_reconcile/advanced_reconciliation.py
create mode 100644 account_advanced_reconcile/easy_reconcile.py
create mode 100644 account_advanced_reconcile/easy_reconcile_view.xml
delete mode 100644 account_advanced_reconcile/wizard/__init__.py
delete mode 100644 account_advanced_reconcile/wizard/statement_auto_reconcile.py
delete mode 100644 account_advanced_reconcile/wizard/statement_auto_reconcile_view.xml
diff --git a/account_advanced_reconcile/__init__.py b/account_advanced_reconcile/__init__.py
index 263cb053..1c643cae 100644
--- a/account_advanced_reconcile/__init__.py
+++ b/account_advanced_reconcile/__init__.py
@@ -1,5 +1,4 @@
# -*- coding: utf-8 -*-
-# -*- coding: utf-8 -*-
##############################################################################
#
# Author: Guewen Baconnier
@@ -20,4 +19,6 @@
#
##############################################################################
+import easy_reconcile
import base_advanced_reconciliation
+import advanced_reconciliation
diff --git a/account_advanced_reconcile/__openerp__.py b/account_advanced_reconcile/__openerp__.py
index 4b1f8e81..5ca17767 100644
--- a/account_advanced_reconcile/__openerp__.py
+++ b/account_advanced_reconcile/__openerp__.py
@@ -1,7 +1,8 @@
-# -*- coding: utf-8 -*- ##############################################################################
+# -*- coding: utf-8 -*-
+##############################################################################
#
-# Author: Nicolas Bessi, Joel Grand-Guillaume
-# Copyright 2011-2012 Camptocamp SA
+# Author: Guewen Baconnier
+# Copyright 2012 Camptocamp SA
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
@@ -28,6 +29,21 @@
'description': """
Advanced reconciliation methods for the module account_easy_reconcile.
+account_easy_reconcile, which is a dependency, is available in the branch:
+lp:~openerp-community-committers/+junk/account-extra-addons
+This branch is temporary and will soon be merged with the Akretion master
+branch, but the master branch does not already exist. Sorry for the
+inconvenience.
+
+In addition to the features implemented in account_easy_reconcile, which are:
+ - 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 reconcilation runs with a few logs
+
It implements a basis to created advanced reconciliation methods in a few lines
of code.
@@ -37,6 +53,11 @@ Typically, such a method can be:
or name
- Reconcile entries if the partner is equal and the ref match with a pattern
+And they allows:
+ - Reconciliations with multiple credit / multiple debit lines
+ - Partial reconciliations
+ - Write-off amount as well
+
A method is already implemented in this module, it matches on entries:
* Partner
* Ref on credit move lines should be case insensitive equals to the ref or
@@ -45,9 +66,6 @@ A method is already implemented in this module, it matches on entries:
The base class to find the reconciliations is built to be as efficient as
possible.
-Reconciliations with multiple credit / debit lines is possible.
-Partial reconciliation are generated.
-You can choose a write-off amount as well.
So basically, if you have an invoice with 3 payments (one per month), the first
month, it will partial reconcile the debit move line with the first payment, the second
@@ -55,16 +73,18 @@ month, it will partial reconcile the debit move line with 2 first payments,
the third month, it will make the full reconciliation.
This module is perfectly adapted for E-Commerce business where a big volume of
-move lines and so, reconciliations, is involved and payments often come from
+move lines and so, reconciliations, are involved and payments often come from
many offices.
+
""",
'website': 'http://www.camptocamp.com',
'init_xml': [],
- 'update_xml': [],
+ 'update_xml': ['easy_reconcile_view.xml'],
'demo_xml': [],
'test': [],
'images': [],
'installable': True,
'auto_install': False,
'license': 'AGPL-3',
+ 'application': True,
}
diff --git a/account_advanced_reconcile/advanced_reconciliation.py b/account_advanced_reconcile/advanced_reconciliation.py
new file mode 100644
index 00000000..dfdb8883
--- /dev/null
+++ b/account_advanced_reconcile/advanced_reconciliation.py
@@ -0,0 +1,120 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Author: Guewen Baconnier
+# Copyright 2012 Camptocamp SA
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+from openerp.osv.orm import TransientModel
+
+
+class easy_reconcile_advanced_ref(TransientModel):
+
+ _name = 'easy.reconcile.advanced.ref'
+ _inherit = 'easy.reconcile.advanced'
+ _auto = True # False when inherited from AbstractModel
+
+ def _skip_line(self, cr, uid, rec, move_line, context=None):
+ """
+ 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'))
+
+ def _matchers(self, cr, uid, rec, move_line, context=None):
+ """
+ Return the values used as matchers to found 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 returns:
+ 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 than 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()))
+
+ def _opposite_matchers(self, cr, uid, rec, move_line, context=None):
+ """
+ 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 have to yield its value respecting the orders
+ 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'].lower().strip(),
+ move_line['name'].lower().strip()))
+
diff --git a/account_advanced_reconcile/base_advanced_reconciliation.py b/account_advanced_reconcile/base_advanced_reconciliation.py
index e117525d..df26708c 100644
--- a/account_advanced_reconcile/base_advanced_reconciliation.py
+++ b/account_advanced_reconcile/base_advanced_reconciliation.py
@@ -25,22 +25,6 @@ from openerp.osv.orm import Model, AbstractModel, TransientModel
from openerp.osv import fields
-class account_easy_reconcile_method(Model):
-
- _inherit = 'account.easy.reconcile.method'
-
- def _get_all_rec_method(self, cr, uid, context=None):
- methods = super(account_easy_reconcile_method, self).\
- _get_all_rec_method(cr, uid, context=context)
- methods += [
- ('easy.reconcile.advanced.ref',
- 'Advanced method, payment ref matches with ref or name'),
- ('easy.reconcile.advanced.tid',
- 'Advanced method, payment Transaction ID matches with ref or name')
- ]
- return methods
-
-
class easy_reconcile_advanced(AbstractModel):
_name = 'easy.reconcile.advanced'
@@ -279,216 +263,12 @@ class easy_reconcile_advanced(AbstractModel):
lines_by_id = dict([(l['id'], l) for l in credit_lines + debit_lines])
for reconcile_group_ids in reconcile_groups:
group_lines = [lines_by_id[lid] for lid in reconcile_group_ids]
- reconciled, partial = self._reconcile_lines(
+ reconciled, full = self._reconcile_lines(
cr, uid, rec, group_lines, allow_partial=True, context=context)
- if reconciled and partial:
+ if reconciled and full:
reconciled_ids += reconcile_group_ids
- elif partial:
+ elif reconciled:
partial_reconciled_ids += reconcile_group_ids
return reconciled_ids, partial_reconciled_ids
-
-class easy_reconcile_advanced_ref(TransientModel):
-
- _name = 'easy.reconcile.advanced.ref'
- _inherit = 'easy.reconcile.advanced'
- _auto = True # False when inherited from AbstractModel
-
- def _skip_line(self, cr, uid, rec, move_line, context=None):
- """
- 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'))
-
- def _matchers(self, cr, uid, rec, move_line, context=None):
- """
- Return the values used as matchers to found 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 returns:
- 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 than 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()))
-
- def _opposite_matchers(self, cr, uid, rec, move_line, context=None):
- """
- 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 have to yield its value respecting the orders
- 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'].lower().strip(),
- move_line['name'].lower().strip()))
-
-
-class easy_reconcile_advanced_tid(TransientModel):
-
- # tid means for transaction_id
- _name = 'easy.reconcile.advanced.tid'
- _inherit = 'easy.reconcile.advanced'
- _auto = True # False when inherited from AbstractModel
-
- def _skip_line(self, cr, uid, rec, move_line, context=None):
- """
- 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'))
-
- def _matchers(self, cr, uid, rec, move_line, context=None):
- """
- Return the values used as matchers to found 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 returns:
- 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 than 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()))
-
- def _opposite_matchers(self, cr, uid, rec, move_line, context=None):
- """
- 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 have to yield its value respecting the orders
- 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'])
-
- prefixes = ('tid_', 'tid_mag_')
- refs = []
- if move_line.get('ref'):
- lref = move_line['ref'].lower().strip()
- refs.append(lref)
- refs += ["%s%s" % (s, lref) for s in prefixes]
-
- if move_line.get('name'):
- refs.append(move_line['name'].lower().strip())
- yield ('ref', refs)
-
diff --git a/account_advanced_reconcile/easy_reconcile.py b/account_advanced_reconcile/easy_reconcile.py
new file mode 100644
index 00000000..747a2e3c
--- /dev/null
+++ b/account_advanced_reconcile/easy_reconcile.py
@@ -0,0 +1,37 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Author: Guewen Baconnier
+# Copyright 2012 Camptocamp SA
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+from openerp.osv.orm import Model
+
+
+class account_easy_reconcile_method(Model):
+
+ _inherit = 'account.easy.reconcile.method'
+
+ def _get_all_rec_method(self, cr, uid, context=None):
+ methods = super(account_easy_reconcile_method, self).\
+ _get_all_rec_method(cr, uid, context=context)
+ methods += [
+ ('easy.reconcile.advanced.ref',
+ 'Advanced. Partner and Ref.'),
+ ]
+ return methods
+
diff --git a/account_advanced_reconcile/easy_reconcile_view.xml b/account_advanced_reconcile/easy_reconcile_view.xml
new file mode 100644
index 00000000..961add68
--- /dev/null
+++ b/account_advanced_reconcile/easy_reconcile_view.xml
@@ -0,0 +1,20 @@
+
+
+
+
+ account.easy.reconcile.form
+ account.easy.reconcile
+ form
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/account_advanced_reconcile/wizard/__init__.py b/account_advanced_reconcile/wizard/__init__.py
deleted file mode 100644
index f72fd976..00000000
--- a/account_advanced_reconcile/wizard/__init__.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# Author Nicolas Bessi. Copyright Camptocamp SA
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-import statement_auto_reconcile
diff --git a/account_advanced_reconcile/wizard/statement_auto_reconcile.py b/account_advanced_reconcile/wizard/statement_auto_reconcile.py
deleted file mode 100644
index 732d5b55..00000000
--- a/account_advanced_reconcile/wizard/statement_auto_reconcile.py
+++ /dev/null
@@ -1,338 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# Author: Nicolas Bessi, Guewen Baconnier
-# Copyright 2011-2012 Camptocamp SA
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-
-import netsvc
-
-from osv import osv, fields
-from tools.translate import _
-from operator import itemgetter, attrgetter
-from itertools import groupby
-import logging
-logger = logging.getLogger('account.statement.reconcile')
-
-class AccountsStatementAutoReconcile(osv.osv_memory):
- _name = 'account.statement.import.automatic.reconcile'
- _description = 'Automatic Reconcile'
-
- _columns = {
- 'account_ids': fields.many2many('account.account',
- 'statement_reconcile_account_rel',
- 'reconcile_id',
- 'account_id',
- 'Accounts to Reconcile',
- domain=[('reconcile', '=', True)]),
- 'partner_ids': fields.many2many('res.partner',
- 'statement_reconcile_res_partner_rel',
- 'reconcile_id',
- 'res_partner_id',
- 'Partners to Reconcile'),
- 'invoice_ids': fields.many2many('account.invoice',
- 'statement_account_invoice_rel',
- 'reconcile_id',
- 'invoice_id',
- 'Invoices to Reconcile',
- domain = [('type','=','out_invoice')]),
- 'writeoff_acc_id': fields.many2one('account.account', 'Account'),
- 'writeoff_amount_limit': fields.float('Max amount allowed for write off'),
- 'journal_id': fields.many2one('account.journal', 'Journal'),
- 'reconciled': fields.integer('Reconciled transactions', readonly=True),
- 'allow_write_off': fields.boolean('Allow write off'),
- }
-
- def _get_reconciled(self, cr, uid, context=None):
- if context is None:
- context = {}
- return context.get('reconciled', 0)
-
- _defaults = {
- 'reconciled': _get_reconciled,
- }
-
- def return_stats(self, cr, uid, reconciled, context=None):
- obj_model = self.pool.get('ir.model.data')
- context = context or {}
- context.update({'reconciled': reconciled})
- model_data_ids = obj_model.search(
- cr, uid,
- [('model','=','ir.ui.view'),
- ('name','=','stat_account_automatic_reconcile_view1')]
- )
- resource_id = obj_model.read(
- cr, uid, model_data_ids, fields=['res_id'])[0]['res_id']
- return {
- 'view_type': 'form',
- 'view_mode': 'form',
- 'res_model': 'account.statement.import.automatic.reconcile',
- 'views': [(resource_id,'form')],
- 'type': 'ir.actions.act_window',
- 'target': 'new',
- 'context': context,
- }
-
- def _below_write_off_limit(self, cr, uid, lines,
- writeoff_limit, context=None):
-
- keys = ('debit', 'credit')
- sums = reduce(lambda x, y:
- dict((k, v + y[k]) for k, v in x.iteritems() if k in keys),
- lines)
- debit, credit = sums['debit'], sums['credit']
- writeoff_amount = debit - credit
- return bool(writeoff_limit >= abs(writeoff_amount))
-
- def _query_moves(self, cr, uid, form, context=None):
- """Select all move (debit>0) as candidate. Optionnal choice on invoice
- will filter with an inner join on the related moves.
- """
- sql_params=[]
- select_sql = ("SELECT "
- "l.account_id, "
- "l.ref as transaction_id, "
- "l.name as origin, "
- "l.id as invoice_id, "
- "l.move_id as move_id, "
- "l.id as move_line_id, "
- "l.debit, l.credit, "
- "l.partner_id "
- "FROM account_move_line l "
- "INNER JOIN account_move m "
- "ON m.id = l.move_id ")
- where_sql = (
- "WHERE "
- # "AND l.move_id NOT IN %(invoice_move_ids)s "
- "l.reconcile_id IS NULL "
- # "AND NOT EXISTS (select id FROM account_invoice i WHERE i.move_id = m.id) "
- "AND l.debit > 0 ")
- if form.account_ids:
- account_ids = [str(x.id) for x in form.account_ids]
- sql_params = {'account_ids': tuple(account_ids)}
- where_sql += "AND l.account_id in %(account_ids)s "
- if form.invoice_ids:
- invoice_ids = [str(x.id) for x in form.invoice_ids]
- where_sql += "AND i.id IN %(invoice_ids)s "
- select_sql += "INNER JOIN account_invoice i ON m.id = i.move_id "
- sql_params['invoice_ids'] = tuple(invoice_ids)
- if form.partner_ids:
- partner_ids = [str(x.id) for x in form.partner_ids]
- where_sql += "AND l.partner_id IN %(partner_ids)s "
- sql_params['partner_ids'] = tuple(partner_ids)
- sql = select_sql + where_sql
- cr.execute(sql, sql_params)
- return cr.dictfetchall()
-
- def _query_payments(self, cr, uid, account_id, invoice_move_ids, context=None):
- sql_params = {'account_id': account_id,
- 'invoice_move_ids': tuple(invoice_move_ids)}
- sql = ("SELECT l.id, l.move_id, "
- "l.ref, l.name, "
- "l.debit, l.credit, "
- "l.period_id as period_id, "
- "l.partner_id "
- "FROM account_move_line l "
- "INNER JOIN account_move m "
- "ON m.id = l.move_id "
- "WHERE l.account_id = %(account_id)s "
- "AND l.move_id NOT IN %(invoice_move_ids)s "
- "AND l.reconcile_id IS NULL "
- "AND NOT EXISTS (select id FROM account_invoice i WHERE i.move_id = m.id) "
- "AND l.credit > 0")
- cr.execute(sql, sql_params)
- return cr.dictfetchall()
-
- @staticmethod
- def _groupby_keys(keys, lines):
- res = {}
- key = keys.pop(0)
- sorted_lines = sorted(lines, key=itemgetter(key))
-
- for reference, iter_lines in groupby(sorted_lines, itemgetter(key)):
- group_lines = list(iter_lines)
-
- if keys:
- group_lines = (AccountsStatementAutoReconcile.
- _groupby_keys(keys[:], group_lines))
- else:
- # as we sort on all the keys, the last list
- # is perforce alone in the list
- group_lines = group_lines[0]
- res[reference] = group_lines
-
- return res
-
- def _search_payment_ref(self, cr, uid, all_payments,
- reference_key, reference, context=None):
- def compare_key(payment, key, reference_patterns):
- if not payment.get(key):
- return False
- if payment.get(key).lower() in reference_patterns:
- return True
-
- res = []
- if not reference:
- return res
-
- lref = reference.lower()
- reference_patterns = (lref, 'tid_' + lref, 'tid_mag_' + lref)
- res_append = res.append
- for payment in all_payments:
- if (compare_key(payment, 'ref', reference_patterns) or
- compare_key(payment, 'name', reference_patterns)):
- res_append(payment)
- # remove payment from all_payments?
-
-# if res:
-# print '----------------------------------'
-# print 'ref: ' + reference
-# for l in res:
-# print (l.get('ref','') or '') + ' ' + (l.get('name','') or '')
- return res
-
- def _search_payments(self, cr, uid, all_payments,
- references, context=None):
- payments = []
- for field_reference in references:
- ref_key, reference = field_reference
- payments = self._search_payment_ref(
- cr, uid, all_payments, ref_key, reference, context=context)
- # if match is found for one reference (transaction_id or origin)
- # we have found our payments, don't need to search for the order
- # reference
- if payments:
- break
- return payments
-
- def reconcile(self, cr, uid, form_id, context=None):
- context = context or {}
- move_line_obj = self.pool.get('account.move.line')
- period_obj = self.pool.get('account.period')
-
- if isinstance(form_id, list):
- form_id = form_id[0]
-
- form = self.browse(cr, uid, form_id)
-
- allow_write_off = form.allow_write_off
-
- if not form.account_ids :
- raise osv.except_osv(_('UserError'),
- _('You must select accounts to reconcile'))
-
- # returns a list with a dict per line :
- # [{'account_id': 5,'reference': 'A', 'move_id': 1, 'move_line_id': 1},
- # {'account_id': 5,'reference': 'A', 'move_id': 1, 'move_line_id': 2},
- # {'account_id': 6,'reference': 'B', 'move_id': 3, 'move_line_id': 3}],
- moves = self._query_moves(cr, uid, form, context=context)
- if not moves:
- return False
- # returns a tree :
- # { 5: {1: {1: {'reference': 'A', 'move_id': 1, 'move_line_id': 1}},
- # {2: {'reference': 'A', 'move_id': 1, 'move_line_id': 2}}}},
- # 6: {3: {3: {'reference': 'B', 'move_id': 3, 'move_line_id': 3}}}}}
- moves_tree = self._groupby_keys(['account_id',
- 'move_id',
- 'move_line_id'],
- moves)
-
- reconciled = 0
- details = ""
- for account_id, account_tree in moves_tree.iteritems():
- # [0] because one move id per invoice
- account_move_ids = [move_tree.keys() for
- move_tree in account_tree.values()]
-
- account_payments = self._query_payments(cr, uid,
- account_id,
- account_move_ids[0],
- context=context)
-
- for move_id, move_tree in account_tree.iteritems():
-
- # in any case one invoice = one move
- # move_id, move_tree = invoice_tree.items()[0]
-
- move_line_ids = []
- move_lines = []
- move_lines_ids_append = move_line_ids.append
- move_lines_append = move_lines.append
- for move_line_id, vals in move_tree.iteritems():
- move_lines_ids_append(move_line_id)
- move_lines_append(vals)
-
- # take the first one because the reference
- # is the same everywhere for an invoice
- transaction_id = move_lines[0]['transaction_id']
- origin = move_lines[0]['origin']
- partner_id = move_lines[0]['partner_id']
-
- references = (('transaction_id', transaction_id),
- ('origin', origin))
-
- partner_payments = [p for p in account_payments if \
- p['partner_id'] == partner_id]
- payments = self._search_payments(
- cr, uid, partner_payments, references, context=context)
-
- if not payments:
- continue
-
- payment_ids = [p['id'] for p in payments]
- # take the period of the payment last move line
- # it will be used as the reconciliation date
- # and for the write off date
- period_ids = [ml['period_id'] for ml in payments]
- periods = period_obj.browse(
- cr, uid, period_ids, context=context)
- last_period = max(periods, key=attrgetter('date_stop'))
-
- reconcile_ids = move_line_ids + payment_ids
- do_write_off = (allow_write_off and
- self._below_write_off_limit(
- cr, uid, move_lines + payments,
- form.writeoff_amount_limit,
- context=context))
- # date of reconciliation
- rec_ctx = dict(context, date_p=last_period.date_stop)
- try:
- if do_write_off:
- r_id = move_line_obj.reconcile(cr,
- uid,
- reconcile_ids,
- 'auto',
- form.writeoff_acc_id.id,
- # period of the write-off
- last_period.id,
- form.journal_id.id,
- context=rec_ctx)
- logger.info("Auto statement reconcile: Reconciled with write-off move id %s" % (move_id,))
- else:
- r_id = move_line_obj.reconcile_partial(cr,
- uid,
- reconcile_ids,
- 'manual',
- context=rec_ctx)
- logger.info("Auto statement reconcile: Partial Reconciled move id %s" % (move_id,))
- except Exception, exc:
- logger.error("Auto statement reconcile: Can't reconcile move id %s because: %s" % (move_id, exc,))
- reconciled += 1
- cr.commit()
- return self.return_stats(cr, uid, reconciled, context)
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/account_advanced_reconcile/wizard/statement_auto_reconcile_view.xml b/account_advanced_reconcile/wizard/statement_auto_reconcile_view.xml
deleted file mode 100644
index 12c9855e..00000000
--- a/account_advanced_reconcile/wizard/statement_auto_reconcile_view.xml
+++ /dev/null
@@ -1,72 +0,0 @@
-
-
-
-
-
- Account Automatic Reconcile
- account.statement.import.automatic.reconcile
- form
-
-
-
-
-
-
- Account Automatic Reconcile
- account.statement.import.automatic.reconcile
- ir.actions.act_window
- form
- tree,form
-
- new
-
-
-
-
-
- Automatic reconcile unreconcile
- account.statement.import.automatic.reconcile
- form
-
-
-
-
-
-
-
From 40f8cca85faf1702419e5b11193a2e2f37b0af4a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jo=C3=ABl=20Grand-Guillaume?=
Date: Wed, 6 Jun 2012 16:27:25 +0200
Subject: [PATCH 07/52] [MRG] account_advanced_reconcile: From customer branch
(lp:c2c-financial-addons/6.1 rev 58)
---
account_advanced_reconcile/__init__.py | 24 --
account_advanced_reconcile/__openerp__.py | 90 ------
.../advanced_reconciliation.py | 120 --------
.../base_advanced_reconciliation.py | 274 ------------------
account_advanced_reconcile/easy_reconcile.py | 37 ---
.../easy_reconcile_view.xml | 20 --
6 files changed, 565 deletions(-)
delete mode 100644 account_advanced_reconcile/__init__.py
delete mode 100644 account_advanced_reconcile/__openerp__.py
delete mode 100644 account_advanced_reconcile/advanced_reconciliation.py
delete mode 100644 account_advanced_reconcile/base_advanced_reconciliation.py
delete mode 100644 account_advanced_reconcile/easy_reconcile.py
delete mode 100644 account_advanced_reconcile/easy_reconcile_view.xml
diff --git a/account_advanced_reconcile/__init__.py b/account_advanced_reconcile/__init__.py
deleted file mode 100644
index 1c643cae..00000000
--- a/account_advanced_reconcile/__init__.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# Author: Guewen Baconnier
-# Copyright 2012 Camptocamp SA
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-
-import easy_reconcile
-import base_advanced_reconciliation
-import advanced_reconciliation
diff --git a/account_advanced_reconcile/__openerp__.py b/account_advanced_reconcile/__openerp__.py
deleted file mode 100644
index 5ca17767..00000000
--- a/account_advanced_reconcile/__openerp__.py
+++ /dev/null
@@ -1,90 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# Author: Guewen Baconnier
-# Copyright 2012 Camptocamp SA
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-
-{'name': "Advanced Reconcile",
- 'version': '1.0',
- 'author': 'Camptocamp',
- 'maintainer': 'Camptocamp',
- 'category': 'Finance',
- 'complexity': 'normal',
- 'depends': ['account_easy_reconcile'],
- 'description': """
-Advanced reconciliation methods for the module account_easy_reconcile.
-
-account_easy_reconcile, which is a dependency, is available in the branch:
-lp:~openerp-community-committers/+junk/account-extra-addons
-This branch is temporary and will soon be merged with the Akretion master
-branch, but the master branch does not already exist. Sorry for the
-inconvenience.
-
-In addition to the features implemented in account_easy_reconcile, which are:
- - 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 reconcilation runs with a few logs
-
-It implements a basis to created advanced reconciliation methods in a few lines
-of code.
-
-Typically, such a method can be:
- - Reconcile entries if the partner and the ref are equal
- - Reconcile entries if the partner is equal and the ref is the same than ref
- or name
- - Reconcile entries if the partner is equal and the ref match with a pattern
-
-And they allows:
- - Reconciliations with multiple credit / multiple debit lines
- - Partial reconciliations
- - Write-off amount as well
-
-A method is already implemented in this module, it matches on entries:
- * Partner
- * Ref on credit move lines should be case insensitive equals to the ref or
- the name of the debit move line
-
-The base class to find the reconciliations is built to be as efficient as
-possible.
-
-
-So basically, if you have an invoice with 3 payments (one per month), the first
-month, it will partial reconcile the debit move line with the first payment, the second
-month, it will partial reconcile the debit move line with 2 first payments,
-the third month, it will make the full reconciliation.
-
-This module is perfectly adapted for E-Commerce business where a big volume of
-move lines and so, reconciliations, are involved and payments often come from
-many offices.
-
- """,
- 'website': 'http://www.camptocamp.com',
- 'init_xml': [],
- 'update_xml': ['easy_reconcile_view.xml'],
- 'demo_xml': [],
- 'test': [],
- 'images': [],
- 'installable': True,
- 'auto_install': False,
- 'license': 'AGPL-3',
- 'application': True,
-}
diff --git a/account_advanced_reconcile/advanced_reconciliation.py b/account_advanced_reconcile/advanced_reconciliation.py
deleted file mode 100644
index dfdb8883..00000000
--- a/account_advanced_reconcile/advanced_reconciliation.py
+++ /dev/null
@@ -1,120 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# Author: Guewen Baconnier
-# Copyright 2012 Camptocamp SA
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-
-from openerp.osv.orm import TransientModel
-
-
-class easy_reconcile_advanced_ref(TransientModel):
-
- _name = 'easy.reconcile.advanced.ref'
- _inherit = 'easy.reconcile.advanced'
- _auto = True # False when inherited from AbstractModel
-
- def _skip_line(self, cr, uid, rec, move_line, context=None):
- """
- 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'))
-
- def _matchers(self, cr, uid, rec, move_line, context=None):
- """
- Return the values used as matchers to found 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 returns:
- 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 than 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()))
-
- def _opposite_matchers(self, cr, uid, rec, move_line, context=None):
- """
- 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 have to yield its value respecting the orders
- 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'].lower().strip(),
- move_line['name'].lower().strip()))
-
diff --git a/account_advanced_reconcile/base_advanced_reconciliation.py b/account_advanced_reconcile/base_advanced_reconciliation.py
deleted file mode 100644
index df26708c..00000000
--- a/account_advanced_reconcile/base_advanced_reconciliation.py
+++ /dev/null
@@ -1,274 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# Author: Guewen Baconnier
-# Copyright 2012 Camptocamp SA
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-
-from itertools import groupby, product
-from operator import itemgetter
-from openerp.osv.orm import Model, AbstractModel, TransientModel
-from openerp.osv import fields
-
-
-class easy_reconcile_advanced(AbstractModel):
-
- _name = 'easy.reconcile.advanced'
- _inherit = 'easy.reconcile.base'
-
- def _query_debit(self, cr, uid, rec, context=None):
- """Select all move (debit>0) as candidate. Optional choice on invoice
- will filter with an inner join on the related moves.
- """
- select = self._select(rec)
- sql_from = self._from(rec)
- where, params = self._where(rec)
- where += " AND account_move_line.debit > 0 "
-
- where2, params2 = self._get_filter(cr, uid, rec, context=context)
-
- query = ' '.join((select, sql_from, where, where2))
-
- cr.execute(query, params + params2)
- return cr.dictfetchall()
-
- def _query_credit(self, cr, uid, rec, context=None):
- """Select all move (credit>0) as candidate. Optional choice on invoice
- will filter with an inner join on the related moves.
- """
- select = self._select(rec)
- sql_from = self._from(rec)
- where, params = self._where(rec)
- where += " AND account_move_line.credit > 0 "
-
- where2, params2 = self._get_filter(cr, uid, rec, context=context)
-
- query = ' '.join((select, sql_from, where, where2))
-
- cr.execute(query, params + params2)
- return cr.dictfetchall()
-
- def _matchers(self, cr, uid, rec, move_line, context=None):
- """
- Return the values used as matchers to found 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 returns:
- 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 than 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
-
- def _opposite_matchers(self, cr, uid, rec, move_line, context=None):
- """
- 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 have to yield its value respecting the orders
- 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 easy_reconcile_advanced._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 easy_reconcile_advanced._compare_matcher_values(mkey, mvalue, omvalue)
-
- def _compare_opposite(self, cr, uid, rec, move_line, opposite_move_line,
- matchers, context=None):
- opp_matchers = self._opposite_matchers(cr, uid, rec, opposite_move_line,
- context=context)
- 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
-
- def _search_opposites(self, cr, uid, rec, move_line, opposite_move_lines, context=None):
- """
- 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(cr, uid, rec, move_line, context=context)
- return [op for op in opposite_move_lines if \
- self._compare_opposite(cr, uid, rec, move_line, op, matchers, context=context)]
-
- def _action_rec(self, cr, uid, rec, context=None):
- credit_lines = self._query_credit(cr, uid, rec, context=context)
- debit_lines = self._query_debit(cr, uid, rec, context=context)
- return self._rec_auto_lines_advanced(
- cr, uid, rec, credit_lines, debit_lines, context=context)
-
- def _skip_line(self, cr, uid, rec, move_line, context=None):
- """
- 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
-
- def _rec_auto_lines_advanced(self, cr, uid, rec, credit_lines, debit_lines, context=None):
- if context is None:
- context = {}
-
- reconciled_ids = []
- partial_reconciled_ids = []
- reconcile_groups = []
-
- for credit_line in credit_lines:
- if self._skip_line(cr, uid, rec, credit_line, context=context):
- continue
-
- opposite_lines = self._search_opposites(
- cr, uid, rec, credit_line, debit_lines, context=context)
-
- 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]):
- group.update(line_ids)
- break
- else:
- reconcile_groups.append(set(line_ids))
-
- lines_by_id = dict([(l['id'], l) for l in credit_lines + debit_lines])
- for reconcile_group_ids in reconcile_groups:
- group_lines = [lines_by_id[lid] for lid in reconcile_group_ids]
- reconciled, full = self._reconcile_lines(
- cr, uid, rec, group_lines, allow_partial=True, context=context)
- if reconciled and full:
- reconciled_ids += reconcile_group_ids
- elif reconciled:
- partial_reconciled_ids += reconcile_group_ids
-
- return reconciled_ids, partial_reconciled_ids
-
diff --git a/account_advanced_reconcile/easy_reconcile.py b/account_advanced_reconcile/easy_reconcile.py
deleted file mode 100644
index 747a2e3c..00000000
--- a/account_advanced_reconcile/easy_reconcile.py
+++ /dev/null
@@ -1,37 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# Author: Guewen Baconnier
-# Copyright 2012 Camptocamp SA
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-
-from openerp.osv.orm import Model
-
-
-class account_easy_reconcile_method(Model):
-
- _inherit = 'account.easy.reconcile.method'
-
- def _get_all_rec_method(self, cr, uid, context=None):
- methods = super(account_easy_reconcile_method, self).\
- _get_all_rec_method(cr, uid, context=context)
- methods += [
- ('easy.reconcile.advanced.ref',
- 'Advanced. Partner and Ref.'),
- ]
- return methods
-
diff --git a/account_advanced_reconcile/easy_reconcile_view.xml b/account_advanced_reconcile/easy_reconcile_view.xml
deleted file mode 100644
index 961add68..00000000
--- a/account_advanced_reconcile/easy_reconcile_view.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-
-
- account.easy.reconcile.form
- account.easy.reconcile
- form
-
-
-
-
-
-
-
-
-
-
-
-
From c7297532724dee8d553fc17ad1fc09a28467d2b5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jo=C3=ABl=20Grand-Guillaume?=
Date: Wed, 20 Jun 2012 16:10:01 +0200
Subject: [PATCH 08/52] [MRG] account_advanced_reconcile: Add all the bank
statement improvements that we made.
This is mostly based on :
account_statement_ext -> provide profile per bank statement, remove period, choose to use balance check or not,...
account_statement_base_completion -> provide a completion rule system to fullfill the bank statement (partner, account,...)
account_statement_base_import -> provide a base to create your own file parser for each bank/office and link it to a profile
account_statement_transactionid_completion and account_statement_transactionid_import to use the transaction ID recorded in th SO
account_advanced_reconcile -> An advanced way to setup reconciliation rules on every account
account_financial_report_webkit -> some little fixes
(lp:c2c-financial-addons/6.1 rev 63)
---
account_advanced_reconcile/__init__.py | 24 ++
account_advanced_reconcile/__openerp__.py | 87 ++++++
.../advanced_reconciliation.py | 120 ++++++++
.../base_advanced_reconciliation.py | 274 ++++++++++++++++++
account_advanced_reconcile/easy_reconcile.py | 37 +++
.../easy_reconcile_view.xml | 20 ++
6 files changed, 562 insertions(+)
create mode 100644 account_advanced_reconcile/__init__.py
create mode 100644 account_advanced_reconcile/__openerp__.py
create mode 100644 account_advanced_reconcile/advanced_reconciliation.py
create mode 100644 account_advanced_reconcile/base_advanced_reconciliation.py
create mode 100644 account_advanced_reconcile/easy_reconcile.py
create mode 100644 account_advanced_reconcile/easy_reconcile_view.xml
diff --git a/account_advanced_reconcile/__init__.py b/account_advanced_reconcile/__init__.py
new file mode 100644
index 00000000..1c643cae
--- /dev/null
+++ b/account_advanced_reconcile/__init__.py
@@ -0,0 +1,24 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Author: Guewen Baconnier
+# Copyright 2012 Camptocamp SA
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+import easy_reconcile
+import base_advanced_reconciliation
+import advanced_reconciliation
diff --git a/account_advanced_reconcile/__openerp__.py b/account_advanced_reconcile/__openerp__.py
new file mode 100644
index 00000000..344da635
--- /dev/null
+++ b/account_advanced_reconcile/__openerp__.py
@@ -0,0 +1,87 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Author: Guewen Baconnier
+# Copyright 2012 Camptocamp SA
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+{'name': "Advanced Reconcile",
+ 'version': '1.0',
+ 'author': 'Camptocamp',
+ 'maintainer': 'Camptocamp',
+ 'category': 'Finance',
+ 'complexity': 'normal',
+ 'depends': ['account_easy_reconcile', # this comes from lp:account-extra-addons
+ ],
+ 'description': """
+Advanced reconciliation methods for the module account_easy_reconcile.
+
+account_easy_reconcile, which is a dependency, is available in the branch: lp:account-extra-addons
+
+In addition to the features implemented in account_easy_reconcile, which are:
+ - 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 reconcilation runs with a few logs
+
+It implements a basis to created advanced reconciliation methods in a few lines
+of code.
+
+Typically, such a method can be:
+ - Reconcile entries if the partner and the ref are equal
+ - Reconcile entries if the partner is equal and the ref is the same than ref
+ or name
+ - Reconcile entries if the partner is equal and the ref match with a pattern
+
+And they allows:
+ - Reconciliations with multiple credit / multiple debit lines
+ - Partial reconciliations
+ - Write-off amount as well
+
+A method is already implemented in this module, it matches on entries:
+ * Partner
+ * Ref on credit move lines should be case insensitive equals to the ref or
+ the name of the debit move line
+
+The base class to find the reconciliations is built to be as efficient as
+possible.
+
+
+So basically, if you have an invoice with 3 payments (one per month), the first
+month, it will partial reconcile the debit move line with the first payment, the second
+month, it will partial reconcile the debit move line with 2 first payments,
+the third month, it will make the full reconciliation.
+
+This module is perfectly adapted for E-Commerce business where a big volume of
+move lines and so, reconciliations, are involved and payments often come from
+many offices.
+
+ """,
+ 'website': 'http://www.camptocamp.com',
+ 'init_xml': [],
+ 'update_xml': ['easy_reconcile_view.xml'],
+ 'demo_xml': [],
+ 'test': [],
+ 'images': [],
+ 'installable': True,
+ 'auto_install': False,
+ 'license': 'AGPL-3',
+ 'application': True,
+}
diff --git a/account_advanced_reconcile/advanced_reconciliation.py b/account_advanced_reconcile/advanced_reconciliation.py
new file mode 100644
index 00000000..3ea3239d
--- /dev/null
+++ b/account_advanced_reconcile/advanced_reconciliation.py
@@ -0,0 +1,120 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Author: Guewen Baconnier
+# Copyright 2012 Camptocamp SA
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+from openerp.osv.orm import TransientModel
+
+
+class easy_reconcile_advanced_ref(TransientModel):
+
+ _name = 'easy.reconcile.advanced.ref'
+ _inherit = 'easy.reconcile.advanced'
+ _auto = True # False when inherited from AbstractModel
+
+ def _skip_line(self, cr, uid, rec, move_line, context=None):
+ """
+ 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'))
+
+ def _matchers(self, cr, uid, rec, move_line, context=None):
+ """
+ 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()))
+
+ def _opposite_matchers(self, cr, uid, rec, move_line, context=None):
+ """
+ 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'].lower().strip(),
+ move_line['name'].lower().strip()))
+
diff --git a/account_advanced_reconcile/base_advanced_reconciliation.py b/account_advanced_reconcile/base_advanced_reconciliation.py
new file mode 100644
index 00000000..ebb048f7
--- /dev/null
+++ b/account_advanced_reconcile/base_advanced_reconciliation.py
@@ -0,0 +1,274 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Author: Guewen Baconnier
+# Copyright 2012 Camptocamp SA
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+from itertools import groupby, product
+from operator import itemgetter
+from openerp.osv.orm import Model, AbstractModel, TransientModel
+from openerp.osv import fields
+
+
+class easy_reconcile_advanced(AbstractModel):
+
+ _name = 'easy.reconcile.advanced'
+ _inherit = 'easy.reconcile.base'
+
+ def _query_debit(self, cr, uid, rec, context=None):
+ """Select all move (debit>0) as candidate. Optional choice on invoice
+ will filter with an inner join on the related moves.
+ """
+ select = self._select(rec)
+ sql_from = self._from(rec)
+ where, params = self._where(rec)
+ where += " AND account_move_line.debit > 0 "
+
+ where2, params2 = self._get_filter(cr, uid, rec, context=context)
+
+ query = ' '.join((select, sql_from, where, where2))
+
+ cr.execute(query, params + params2)
+ return cr.dictfetchall()
+
+ def _query_credit(self, cr, uid, rec, context=None):
+ """Select all move (credit>0) as candidate. Optional choice on invoice
+ will filter with an inner join on the related moves.
+ """
+ select = self._select(rec)
+ sql_from = self._from(rec)
+ where, params = self._where(rec)
+ where += " AND account_move_line.credit > 0 "
+
+ where2, params2 = self._get_filter(cr, uid, rec, context=context)
+
+ query = ' '.join((select, sql_from, where, where2))
+
+ cr.execute(query, params + params2)
+ return cr.dictfetchall()
+
+ def _matchers(self, cr, uid, rec, move_line, context=None):
+ """
+ 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
+
+ def _opposite_matchers(self, cr, uid, rec, move_line, context=None):
+ """
+ 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 easy_reconcile_advanced._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 easy_reconcile_advanced._compare_matcher_values(mkey, mvalue, omvalue)
+
+ def _compare_opposite(self, cr, uid, rec, move_line, opposite_move_line,
+ matchers, context=None):
+ opp_matchers = self._opposite_matchers(cr, uid, rec, opposite_move_line,
+ context=context)
+ 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
+
+ def _search_opposites(self, cr, uid, rec, move_line, opposite_move_lines, context=None):
+ """
+ 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(cr, uid, rec, move_line, context=context)
+ return [op for op in opposite_move_lines if \
+ self._compare_opposite(cr, uid, rec, move_line, op, matchers, context=context)]
+
+ def _action_rec(self, cr, uid, rec, context=None):
+ credit_lines = self._query_credit(cr, uid, rec, context=context)
+ debit_lines = self._query_debit(cr, uid, rec, context=context)
+ return self._rec_auto_lines_advanced(
+ cr, uid, rec, credit_lines, debit_lines, context=context)
+
+ def _skip_line(self, cr, uid, rec, move_line, context=None):
+ """
+ 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
+
+ def _rec_auto_lines_advanced(self, cr, uid, rec, credit_lines, debit_lines, context=None):
+ if context is None:
+ context = {}
+
+ reconciled_ids = []
+ partial_reconciled_ids = []
+ reconcile_groups = []
+
+ for credit_line in credit_lines:
+ if self._skip_line(cr, uid, rec, credit_line, context=context):
+ continue
+
+ opposite_lines = self._search_opposites(
+ cr, uid, rec, credit_line, debit_lines, context=context)
+
+ 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]):
+ group.update(line_ids)
+ break
+ else:
+ reconcile_groups.append(set(line_ids))
+
+ lines_by_id = dict([(l['id'], l) for l in credit_lines + debit_lines])
+ for reconcile_group_ids in reconcile_groups:
+ group_lines = [lines_by_id[lid] for lid in reconcile_group_ids]
+ reconciled, full = self._reconcile_lines(
+ cr, uid, rec, group_lines, allow_partial=True, context=context)
+ if reconciled and full:
+ reconciled_ids += reconcile_group_ids
+ elif reconciled:
+ partial_reconciled_ids += reconcile_group_ids
+
+ return reconciled_ids, partial_reconciled_ids
+
diff --git a/account_advanced_reconcile/easy_reconcile.py b/account_advanced_reconcile/easy_reconcile.py
new file mode 100644
index 00000000..747a2e3c
--- /dev/null
+++ b/account_advanced_reconcile/easy_reconcile.py
@@ -0,0 +1,37 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Author: Guewen Baconnier
+# Copyright 2012 Camptocamp SA
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+from openerp.osv.orm import Model
+
+
+class account_easy_reconcile_method(Model):
+
+ _inherit = 'account.easy.reconcile.method'
+
+ def _get_all_rec_method(self, cr, uid, context=None):
+ methods = super(account_easy_reconcile_method, self).\
+ _get_all_rec_method(cr, uid, context=context)
+ methods += [
+ ('easy.reconcile.advanced.ref',
+ 'Advanced. Partner and Ref.'),
+ ]
+ return methods
+
diff --git a/account_advanced_reconcile/easy_reconcile_view.xml b/account_advanced_reconcile/easy_reconcile_view.xml
new file mode 100644
index 00000000..961add68
--- /dev/null
+++ b/account_advanced_reconcile/easy_reconcile_view.xml
@@ -0,0 +1,20 @@
+
+
+
+
+ account.easy.reconcile.form
+ account.easy.reconcile
+ form
+
+
+
+
+
+
+
+
+
+
+
+
From ec0368080990b989d28690154ffa5d5ef0fc4947 Mon Sep 17 00:00:00 2001
From: unknown
Date: Thu, 13 Dec 2012 13:41:10 +0100
Subject: [PATCH 09/52] [ADD] account_advanced_reconcile: fr po
---
account_advanced_reconcile/i18n/fr.po | 90 +++++++++++++++++++++++++++
1 file changed, 90 insertions(+)
create mode 100644 account_advanced_reconcile/i18n/fr.po
diff --git a/account_advanced_reconcile/i18n/fr.po b/account_advanced_reconcile/i18n/fr.po
new file mode 100644
index 00000000..b5f20627
--- /dev/null
+++ b/account_advanced_reconcile/i18n/fr.po
@@ -0,0 +1,90 @@
+# Translation of OpenERP Server.
+# This file contains the translation of the following modules:
+# * account_advanced_reconcile
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OpenERP Server 6.1\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-11-07 12:34+0000\n"
+"PO-Revision-Date: 2012-11-07 12:34+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_advanced_reconcile
+#: field:easy.reconcile.advanced,partner_ids:0
+#: field:easy.reconcile.advanced.ref,partner_ids:0
+msgid "Restrict on partners"
+msgstr "Restriction sur les partenaires"
+
+#. module: account_advanced_reconcile
+#: field:easy.reconcile.advanced,account_id:0
+#: field:easy.reconcile.advanced.ref,account_id:0
+msgid "Account"
+msgstr "Compte"
+
+#. module: account_advanced_reconcile
+#: model:ir.model,name:account_advanced_reconcile.model_account_easy_reconcile_method
+msgid "reconcile method for account_easy_reconcile"
+msgstr "Méthode de lettrage pour le module account_easy_reconcile"
+
+#. module: account_advanced_reconcile
+#: field:easy.reconcile.advanced,date_base_on:0
+#: field:easy.reconcile.advanced.ref,date_base_on:0
+msgid "Date of reconcilation"
+msgstr "Date de lettrage"
+
+#. module: account_advanced_reconcile
+#: field:easy.reconcile.advanced,journal_id:0
+#: field:easy.reconcile.advanced.ref,journal_id:0
+msgid "Journal"
+msgstr "Journal"
+
+#. module: account_advanced_reconcile
+#: field:easy.reconcile.advanced,account_profit_id:0
+#: field:easy.reconcile.advanced.ref,account_profit_id:0
+msgid "Account Profit"
+msgstr "Compte de produit"
+
+#. module: account_advanced_reconcile
+#: field:easy.reconcile.advanced,filter:0
+#: field:easy.reconcile.advanced.ref,filter:0
+msgid "Filter"
+msgstr "Filtre"
+
+#. module: account_advanced_reconcile
+#: view:account.easy.reconcile:0
+msgid "Advanced. Partner and Ref"
+msgstr "Avancé. Partenaire et Réf."
+
+#. module: account_advanced_reconcile
+#: view:account.easy.reconcile:0
+msgid "Match multiple debit vs multiple credit entries. Allow partial reconcilation. 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_advanced_reconcile
+#: model:ir.model,name:account_advanced_reconcile.model_easy_reconcile_advanced
+msgid "easy.reconcile.advanced"
+msgstr "easy.reconcile.advanced"
+
+#. module: account_advanced_reconcile
+#: field:easy.reconcile.advanced,account_lost_id:0
+#: field:easy.reconcile.advanced.ref,account_lost_id:0
+msgid "Account Lost"
+msgstr "Compte de charge"
+
+#. module: account_advanced_reconcile
+#: model:ir.model,name:account_advanced_reconcile.model_easy_reconcile_advanced_ref
+msgid "easy.reconcile.advanced.ref"
+msgstr "easy.reconcile.advanced.ref"
+
+#. module: account_advanced_reconcile
+#: field:easy.reconcile.advanced,write_off:0
+#: field:easy.reconcile.advanced.ref,write_off:0
+msgid "Write off allowed"
+msgstr "Écart autorisé"
+
From d25e595c7a4275f5788729f6b319a8b61538254f Mon Sep 17 00:00:00 2001
From: "@" <@>
Date: Tue, 12 Jun 2012 09:19:38 +0200
Subject: [PATCH 10/52] [IMP] account_easy_reconcile: better coding style
(lp:account-extra-addons rev 26.1.2)
---
account_easy_reconcile/easy_reconcile.py | 133 +++++++++++++----------
1 file changed, 74 insertions(+), 59 deletions(-)
diff --git a/account_easy_reconcile/easy_reconcile.py b/account_easy_reconcile/easy_reconcile.py
index 1d348e68..16b3cae8 100644
--- a/account_easy_reconcile/easy_reconcile.py
+++ b/account_easy_reconcile/easy_reconcile.py
@@ -17,10 +17,11 @@
#along with this program. If not, see . #
#########################################################################
-from osv import fields,osv
-from tools.translate import _
import time
import string
+from osv import fields, osv
+from tools.translate import _
+from tools import DEFAULT_SERVER_DATETIME_FORMAT
class account_easy_reconcile_method(osv.osv):
@@ -30,16 +31,16 @@ class account_easy_reconcile_method(osv.osv):
def onchange_name(self, cr, uid, id, name, write_off, context=None):
if name in ['action_rec_auto_name', 'action_rec_auto_partner']:
if write_off>0:
- return {'value' : {'require_write_off' : True, 'require_account_id' : True, 'require_journal_id' : True}}
- return {'value' : {'require_write_off' : True}}
+ return {'value': {'require_write_off': True, 'require_account_id': True, 'require_journal_id': True}}
+ return {'value': {'require_write_off': True}}
return {}
def onchange_write_off(self, cr, uid, id, name, write_off, context=None):
if name in ['action_rec_auto_name', 'action_rec_auto_partner']:
if write_off>0:
- return {'value' : {'require_account_id' : True, 'require_journal_id' : True}}
+ return {'value': {'require_account_id': True, 'require_journal_id': True}}
else:
- return {'value' : {'require_account_id' : False, 'require_journal_id' : False}}
+ return {'value': {'require_account_id': False, 'require_journal_id': False}}
return {}
def _get_all_rec_method(self, cr, uid, context=None):
@@ -58,11 +59,11 @@ class account_easy_reconcile_method(osv.osv):
'account_lost_id': fields.many2one('account.account', 'Account Lost'),
'account_profit_id': fields.many2one('account.account', 'Account Profit'),
'journal_id': fields.many2one('account.journal', 'Journal'),
- 'require_write_off' : fields.boolean('Require Write-off'),
- 'require_account_id' : fields.boolean('Require Account'),
- 'require_journal_id' : fields.boolean('Require Journal'),
+ 'require_write_off': fields.boolean('Require Write-off'),
+ 'require_account_id': fields.boolean('Require Account'),
+ 'require_journal_id': fields.boolean('Require Journal'),
'date_base_on': fields.selection([('newest', 'the most recent'), ('actual', 'today'), ('credit_line', 'credit line date'), ('debit_line', 'debit line date')], 'Date Base On'),
- 'filter' : fields.char('Filter', size=128),
+ 'filter': fields.char('Filter', size=128),
}
_defaults = {
@@ -97,108 +98,122 @@ class account_easy_reconcile(osv.osv):
def rec_auto_lines_simple(self, cr, uid, lines, context=None):
if not context:
context={}
- count=0
- res=0
- max = context.get('write_off', 0) + 0.001
- while (count 0 and lines[i][2] > 0:
+ if lines[count]['credit'] > 0 and lines[i]['debit'] > 0:
credit_line = lines[count]
debit_line = lines[i]
- check =True
- elif lines[i][1] > 0 and lines[count][2] > 0:
+ check = True
+ elif lines[i]['credit'] > 0 and lines[count]['debit'] > 0:
credit_line = lines[i]
debit_line = lines[count]
- check=True
+ check = True
+ if not check:
+ continue
- if check and abs(credit_line[1] - debit_line[2]) <= max:
- if context.get('write_off', 0) > 0 and abs(credit_line[1] - debit_line[2]) > 0.001:
- if credit_line[1] < debit_line[2]:
- writeoff_account_id = context.get('account_profit_id',False)
+ diff = round(abs(credit_line['credit'] - debit_line['debit']), precision)
+ if diff <= max_diff:
+ if context.get('write_off', 0) > 0 and diff:
+ if credit_line['credit'] < debit_line['debit']:
+ writeoff_account_id = context.get('account_profit_id', False)
else:
- writeoff_account_id = context.get('account_lost_id',False)
+ writeoff_account_id = context.get('account_lost_id', False)
- #context['date_base_on'] = 'credit_line'
- context['comment'] = _('Write-Off %s')%credit_line[0]
+ context['comment'] = _('Write-Off %s') % credit_line['key']
- if context.get('date_base_on', False) == 'credit_line':
- date = credit_line[4]
- elif context.get('date_base_on', False) == 'debit_line':
- date = debit_line[4]
- elif context.get('date_base_on', False) == 'newest':
- date = (credit_line[4] > debit_line[4]) and credit_line[4] or debit_line[4]
+ if context.get('date_base_on') == 'credit_line':
+ date = credit_line['date']
+ elif context.get('date_base_on') == 'debit_line':
+ date = debit_line['date']
+ elif context.get('date_base_on') == 'newest':
+ date = (credit_line['date'] > debit_line['date']) and credit_line['date'] or debit_line['date']
else:
date = None
context['date_p'] = date
period_id = self.pool.get('account.period').find(cr, uid, dt=date, context=context)[0]
- self.pool.get('account.move.line').reconcile(cr, uid, [lines[count][3], lines[i][3]], writeoff_acc_id=writeoff_account_id, writeoff_period_id=period_id, writeoff_journal_id=context.get('journal_id'), context=context)
+ self.pool.get('account.move.line').reconcile(cr, uid, [lines[count]['id'], lines[i]['id']], writeoff_acc_id=writeoff_account_id, writeoff_period_id=period_id, writeoff_journal_id=context.get('journal_id'), context=context)
del lines[i]
- res+=2
+ res += 2
break
- count+=1
+ count += 1
return res
def get_params(self, cr, uid, account_id, context):
if context.get('filter'):
(from_clause, where_clause, where_clause_params) = self.pool.get('account.move.line')._where_calc(cr, uid, context['filter'], context=context).get_sql()
if where_clause:
- where_clause = " AND %s"%where_clause
- where_clause_params = (account_id,) + tuple(where_clause_params)
+ where_clause = " AND %s" % where_clause
+ where_clause_params = account_id, + tuple(where_clause_params)
else:
- print 'id', account_id
where_clause = ''
- where_clause_params = (account_id,)
+ where_clause_params = account_id,
return where_clause, where_clause_params
def action_rec_auto_name(self, cr, uid, account_id, context):
(qu1, qu2) = self.get_params(cr, uid, account_id, context)
cr.execute("""
- SELECT name, credit, debit, id, date
+ SELECT name as key, credit, debit, id, date
FROM account_move_line
WHERE account_id=%s
AND reconcile_id IS NULL
AND name IS NOT NULL""" + qu1 + " ORDER BY name",
qu2)
- lines = cr.fetchall()
+ lines = cr.dictfetchall()
return self.rec_auto_lines_simple(cr, uid, lines, context)
def action_rec_auto_partner(self, cr, uid, account_id, context):
(qu1, qu2) = self.get_params(cr, uid, account_id, context)
cr.execute("""
- SELECT partner_id, credit, debit, id, date
+ SELECT partner_id as key, credit, debit, id, date
FROM account_move_line
WHERE account_id=%s
AND reconcile_id IS NULL
AND partner_id IS NOT NULL""" + qu1 + " ORDER BY partner_id",
qu2)
- lines = cr.fetchall()
+ lines = cr.dictfetchall()
return self.rec_auto_lines_simple(cr, uid, lines, context)
def action_rec_auto(self, cr, uid, ids, context=None):
- if not context:
- context={}
- for id in ids:
- easy_rec = self.browse(cr, uid, id, context)
- total_rec=0
+ if context is None:
+ context = {}
+ for rec_id in ids:
+ rec = self.browse(cr, uid, rec_id, context=context)
+ total_rec = 0
details = ''
count = 0
- for method in easy_rec.reconcile_method:
+ for method in rec.reconcile_method:
count += 1
- context.update({'date_base_on' : method.date_base_on, 'filter' : eval(method.filter or '[]'), 'write_off': (method.write_off>0 and method.write_off) or 0, 'account_lost_id':method.account_lost_id.id, 'account_profit_id':method.account_profit_id.id, 'journal_id':method.journal_id.id})
- res = eval('self.'+ str(method.name) +'(cr, uid, ' + str(easy_rec.account.id) +', context)')
- details += _(' method ') + str(count) + ' : ' + str(res) + _(' lines') +' |'
- log = self.read(cr, uid, id, ['rec_log'], context=context)['rec_log']
- log_line = log and log.split("\n") or []
- log_line[0:0] = [time.strftime('%Y-%m-%d %H:%M:%S') + ' : ' + str(total_rec) + _(' lines have been reconciled ('+ details[0:-2] + ')')]
- log = "\n".join(log_line)
- self.write(cr, uid, id, {'rec_log' : log}, context=context)
+ ctx = dict(
+ context,
+ date_base_on=method.date_base_on,
+ filter=eval(method.filter or '[]'),
+ write_off=(method.write_off > 0 and method.write_off) or 0,
+ account_lost_id=method.account_lost_id.id,
+ account_profit_id=method.account_profit_id.id,
+ journal_id=method.journal_id.id)
+
+ py_meth = getattr(self, method.name)
+ res = py_meth(cr, uid, rec.account.id, context=context)
+ details += _(' method %d : %d lines |') % (count, res)
+ log = self.read(cr, uid, rec_id, ['rec_log'], context=context)['rec_log']
+ log_lines = log and log.splitlines or []
+ log_lines[0:0] = [_('%s : %d lines have been reconciled (%s)') %
+ (time.strftime(DEFAULT_SERVER_DATETIME_FORMAT), total_rec, details[0:-2])]
+ log = "\n".join(log_lines)
+ self.write(cr, uid, rec_id, {'rec_log': log}, context=context)
return True
account_easy_reconcile()
@@ -209,7 +224,7 @@ class account_easy_reconcile_method(osv.osv):
_inherit = 'account.easy.reconcile.method'
_columns = {
- 'task_id' : fields.many2one('account.easy.reconcile', 'Task', required=True, ondelete='cascade'),
+ 'task_id': fields.many2one('account.easy.reconcile', 'Task', required=True, ondelete='cascade'),
}
account_easy_reconcile_method()
From b757a938141960d77136d2ff8122ca404685de2d Mon Sep 17 00:00:00 2001
From: "@" <@>
Date: Tue, 12 Jun 2012 22:41:27 +0200
Subject: [PATCH 11/52] [REF] account_easy_reconcile: refactoring of
easy_reconcile
(lp:account-extra-addons rev 26.1.8)
---
account_easy_reconcile/easy_reconcile.py | 238 +++++++++++++++++------
1 file changed, 176 insertions(+), 62 deletions(-)
diff --git a/account_easy_reconcile/easy_reconcile.py b/account_easy_reconcile/easy_reconcile.py
index 16b3cae8..99311307 100644
--- a/account_easy_reconcile/easy_reconcile.py
+++ b/account_easy_reconcile/easy_reconcile.py
@@ -22,6 +22,7 @@ import string
from osv import fields, osv
from tools.translate import _
from tools import DEFAULT_SERVER_DATETIME_FORMAT
+from operator import itemgetter, attrgetter
class account_easy_reconcile_method(osv.osv):
@@ -62,7 +63,14 @@ class account_easy_reconcile_method(osv.osv):
'require_write_off': fields.boolean('Require Write-off'),
'require_account_id': fields.boolean('Require Account'),
'require_journal_id': fields.boolean('Require Journal'),
- 'date_base_on': fields.selection([('newest', 'the most recent'), ('actual', 'today'), ('credit_line', 'credit line date'), ('debit_line', 'debit line date')], 'Date Base On'),
+ 'date_base_on': fields.selection(
+ [('newest', 'Most recent move line'),
+ ('actual', 'Today'),
+ ('end_period_last_credit', 'End of period of most recent credit'),
+ ('end_period', 'End of period of most recent move line'),
+ ('newest_credit', 'Date of most recent credit'),
+ ('newest_debit', 'Date of most recent debit')],
+ string='Date of reconcilation'),
'filter': fields.char('Filter', size=128),
}
@@ -95,15 +103,104 @@ class account_easy_reconcile(osv.osv):
'unreconcile_entry_number': fields.function(_get_unrec_number, method=True, type='integer', string='Unreconcile Entries'),
}
+ def _below_writeoff_limit(self, cr, uid, lines,
+ writeoff_limit, context=None):
+ precision = self.pool.get('decimal.precision').precision_get(
+ cr, uid, '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
+
+ def _get_rec_date(self, cr, uid, lines, based_on='end_period_last_credit', context=None):
+ period_obj = self.pool.get('account.period')
+
+ def last_period(mlines):
+ period_ids = [ml['period_id'] for ml in mlines]
+ periods = period_obj.browse(
+ cr, uid, period_ids, context=context)
+ return max(periods, key=attrgetter('date_stop'))
+
+ 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 == 'end_period_last_credit':
+ return last_period(credit(lines)).date_stop
+ if based_on == 'end_period':
+ return last_period(lines).date_stop
+ elif 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
+
+ def _reconcile_lines(self, cr, uid, lines, allow_partial=False, context=None):
+ if context is None:
+ context = {}
+
+ ml_obj = self.pool.get('account.move.line')
+ writeoff = context.get('write_off', 0.)
+
+ keys = ('debit', 'credit')
+
+ line_ids = [l['id'] for l in lines]
+ below_writeoff, sum_debit, sum_credit = self._below_writeoff_limit(
+ cr, uid, lines, writeoff, context=context)
+ date = self._get_rec_date(
+ cr, uid, lines, context.get('date_base_on'), context=context)
+
+ rec_ctx = dict(context, date_p=date)
+ if below_writeoff:
+ if sum_credit < sum_debit:
+ writeoff_account_id = context.get('account_profit_id', False)
+ else:
+ writeoff_account_id = context.get('account_lost_id', False)
+
+ period_id = self.pool.get('account.period').find(
+ cr, uid, dt=date, context=context)[0]
+
+ ml_obj.reconcile(
+ cr, uid,
+ line_ids,
+ type='auto',
+ writeoff_acc_id=writeoff_account_id,
+ writeoff_period_id=period_id,
+ writeoff_journal_id=context.get('journal_id'),
+ context=rec_ctx)
+ return True
+ elif allow_partial:
+ ml_obj.reconcile_partial(
+ cr, uid,
+ line_ids,
+ type='manual',
+ context=rec_ctx)
+ return True
+
+ return False
+
def rec_auto_lines_simple(self, cr, uid, lines, context=None):
- if not context:
- context={}
+ if context is None:
+ context = {}
count = 0
res = 0
- precision = self.pool.get('decimal.precision').precision_get(
- cr, uid, 'Account')
- max_diff = context.get('write_off', 0.)
while (count < len(lines)):
for i in range(count+1, len(lines)):
writeoff_account_id = False
@@ -122,69 +219,86 @@ class account_easy_reconcile(osv.osv):
if not check:
continue
- diff = round(abs(credit_line['credit'] - debit_line['debit']), precision)
- if diff <= max_diff:
- if context.get('write_off', 0) > 0 and diff:
- if credit_line['credit'] < debit_line['debit']:
- writeoff_account_id = context.get('account_profit_id', False)
- else:
- writeoff_account_id = context.get('account_lost_id', False)
-
- context['comment'] = _('Write-Off %s') % credit_line['key']
-
- if context.get('date_base_on') == 'credit_line':
- date = credit_line['date']
- elif context.get('date_base_on') == 'debit_line':
- date = debit_line['date']
- elif context.get('date_base_on') == 'newest':
- date = (credit_line['date'] > debit_line['date']) and credit_line['date'] or debit_line['date']
- else:
- date = None
-
- context['date_p'] = date
- period_id = self.pool.get('account.period').find(cr, uid, dt=date, context=context)[0]
-
- self.pool.get('account.move.line').reconcile(cr, uid, [lines[count]['id'], lines[i]['id']], writeoff_acc_id=writeoff_account_id, writeoff_period_id=period_id, writeoff_journal_id=context.get('journal_id'), context=context)
- del lines[i]
+ if self._reconcile_lines(cr, uid, [credit_line, debit_line],
+ allow_partial=False, context=context):
res += 2
+ del lines[i]
break
count += 1
return res
- def get_params(self, cr, uid, account_id, context):
+ def _get_filter(self, cr, uid, account_id, context):
+ ml_obj = self.pool.get('account.move.line')
+ where = ''
+ params = []
if context.get('filter'):
- (from_clause, where_clause, where_clause_params) = self.pool.get('account.move.line')._where_calc(cr, uid, context['filter'], context=context).get_sql()
- if where_clause:
- where_clause = " AND %s" % where_clause
- where_clause_params = account_id, + tuple(where_clause_params)
- else:
- where_clause = ''
- where_clause_params = account_id,
- return where_clause, where_clause_params
+ dummy, where, params = ml_obj._where_calc(
+ cr, uid, context['filter'], context=context).get_sql()
+ if where:
+ where = " AND %s" % where
+ return where, params
- def action_rec_auto_name(self, cr, uid, account_id, context):
- (qu1, qu2) = self.get_params(cr, uid, account_id, context)
- cr.execute("""
- SELECT name as key, credit, debit, id, date
- FROM account_move_line
- WHERE account_id=%s
- AND reconcile_id IS NULL
- AND name IS NOT NULL""" + qu1 + " ORDER BY name",
- qu2)
+ def _base_columns(self, easy_rec):
+ """Mandatory columns for move lines queries
+ An extra column aliased as `key` should be defined
+ in each query."""
+ aml_cols = (
+ 'id',
+ 'debit',
+ 'credit',
+ 'date',
+ 'period_id',
+ 'ref',
+ 'name',
+ 'partner_id',
+ 'account_id',
+ 'move_id')
+ return ["account_move_line.%s" % col for col in aml_cols]
+
+ def _base_select(self, easy_rec, *args, **kwargs):
+ return "SELECT %s" % ', '.join(self._base_columns(easy_rec))
+
+ def _base_from(self, easy_rec, *args, **kwargs):
+ return "FROM account_move_line"
+
+ def _base_where(self, easy_rec, *args, **kwargs):
+ where = ("WHERE account_move_line.account_id = %s "
+ "AND account_move_line.reconcile_id IS NULL ")
+ # 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 = [easy_rec.account.id]
+ return where, params
+
+ def _simple_order(self, easy_rec, key, *args, **kwargs):
+ return "ORDER BY account_move_line.%s" % key
+
+ def _action_rec_simple(self, cr, uid, easy_rec, key, context=None):
+ """Match only 2 move lines, do not allow partial reconcile"""
+ select = self._base_select(easy_rec)
+ select += ", account_move_line.%s as key " % key
+ where, params = self._base_where(easy_rec)
+ where += " AND account_move_line.%s IS NOT NULL " % key
+
+ where2, params2 = self._get_filter(cr, uid, easy_rec, context=context)
+ query = ' '.join((
+ select,
+ self._base_from(easy_rec),
+ where, where2,
+ self._simple_order(easy_rec, key)))
+
+ cr.execute(query, params + params2)
lines = cr.dictfetchall()
return self.rec_auto_lines_simple(cr, uid, lines, context)
- def action_rec_auto_partner(self, cr, uid, account_id, context):
- (qu1, qu2) = self.get_params(cr, uid, account_id, context)
- cr.execute("""
- SELECT partner_id as key, credit, debit, id, date
- FROM account_move_line
- WHERE account_id=%s
- AND reconcile_id IS NULL
- AND partner_id IS NOT NULL""" + qu1 + " ORDER BY partner_id",
- qu2)
- lines = cr.dictfetchall()
- return self.rec_auto_lines_simple(cr, uid, lines, context)
+ def _action_rec_auto_name(self, cr, uid, easy_rec, context):
+ return self._action_rec_simple(
+ cr, uid, easy_rec, 'name', context=context)
+
+ def _action_rec_auto_partner(self, cr, uid, easy_rec, context):
+ return self._action_rec_simple(
+ cr, uid, easy_rec, 'partner_id', context=context)
def action_rec_auto(self, cr, uid, ids, context=None):
if context is None:
@@ -205,11 +319,11 @@ class account_easy_reconcile(osv.osv):
account_profit_id=method.account_profit_id.id,
journal_id=method.journal_id.id)
- py_meth = getattr(self, method.name)
- res = py_meth(cr, uid, rec.account.id, context=context)
+ py_meth = getattr(self, "_%s" % method.name)
+ res = py_meth(cr, uid, rec, context=ctx)
details += _(' method %d : %d lines |') % (count, res)
log = self.read(cr, uid, rec_id, ['rec_log'], context=context)['rec_log']
- log_lines = log and log.splitlines or []
+ log_lines = log and log.splitlines() or []
log_lines[0:0] = [_('%s : %d lines have been reconciled (%s)') %
(time.strftime(DEFAULT_SERVER_DATETIME_FORMAT), total_rec, details[0:-2])]
log = "\n".join(log_lines)
From 9fe7de21bd3242bc8cf15715818546c9bf8bf4d9 Mon Sep 17 00:00:00 2001
From: "@" <@>
Date: Wed, 13 Jun 2012 16:28:32 +0200
Subject: [PATCH 12/52] [IMP] account_easy_reconcile: modularized
reconciliation methods
(lp:account-extra-addons rev 26.1.9)
---
account_easy_reconcile/easy_reconcile.py | 279 +++++++++++++---------
account_easy_reconcile/easy_reconcile.xml | 2 +-
2 files changed, 169 insertions(+), 112 deletions(-)
diff --git a/account_easy_reconcile/easy_reconcile.py b/account_easy_reconcile/easy_reconcile.py
index 99311307..eae444c8 100644
--- a/account_easy_reconcile/easy_reconcile.py
+++ b/account_easy_reconcile/easy_reconcile.py
@@ -1,7 +1,8 @@
-# -*- encoding: utf-8 -*-
+# -*- coding: utf-8 -*-
#########################################################################
# #
# Copyright (C) 2010 Sébastien Beau #
+# Copyright (C) 2012 Camptocamp SA (authored by Guewen Baconnier) #
# #
#This program is free software: you can redistribute it and/or modify #
#it under the terms of the GNU General Public License as published by #
@@ -19,25 +20,29 @@
import time
import string
-from osv import fields, osv
-from tools.translate import _
-from tools import DEFAULT_SERVER_DATETIME_FORMAT
from operator import itemgetter, attrgetter
+from openerp.osv.orm import Model, TransientModel, AbstractModel
+from openerp.osv import fields
+from openerp.tools.translate import _
+from openerp.tools import DEFAULT_SERVER_DATETIME_FORMAT
-class account_easy_reconcile_method(osv.osv):
+class account_easy_reconcile_method(Model):
+
_name = 'account.easy.reconcile.method'
_description = 'reconcile method for account_easy_reconcile'
def onchange_name(self, cr, uid, id, name, write_off, context=None):
- if name in ['action_rec_auto_name', 'action_rec_auto_partner']:
+ if name in ['easy.reconcile.simple.name',
+ 'easy.reconcile.simple.partner']:
if write_off>0:
return {'value': {'require_write_off': True, 'require_account_id': True, 'require_journal_id': True}}
return {'value': {'require_write_off': True}}
return {}
def onchange_write_off(self, cr, uid, id, name, write_off, context=None):
- if name in ['action_rec_auto_name', 'action_rec_auto_partner']:
+ if name in ['easy.reconcile.simple.name',
+ 'easy.reconcile.simple.partner']:
if write_off>0:
return {'value': {'require_account_id': True, 'require_journal_id': True}}
else:
@@ -46,8 +51,8 @@ class account_easy_reconcile_method(osv.osv):
def _get_all_rec_method(self, cr, uid, context=None):
return [
- ('action_rec_auto_name', 'Simple method based on amount and name'),
- ('action_rec_auto_partner', 'Simple method based on amount and partner'),
+ ('easy.reconcile.simple.name', 'Simple method based on amount and name'),
+ ('easy.reconcile.simple.partner', 'Simple method based on amount and partner'),
]
def _get_rec_method(self, cr, uid, context=None):
@@ -72,6 +77,7 @@ class account_easy_reconcile_method(osv.osv):
('newest_debit', 'Date of most recent debit')],
string='Date of reconcilation'),
'filter': fields.char('Filter', size=128),
+ 'task_id': fields.many2one('account.easy.reconcile', 'Task', required=True, ondelete='cascade'),
}
_defaults = {
@@ -80,10 +86,22 @@ class account_easy_reconcile_method(osv.osv):
_order = 'sequence'
-account_easy_reconcile_method()
+ def init(self, cr):
+ """ Migration stuff, name is not anymore methods names
+ but models name"""
+ cr.execute("""
+ UPDATE account_easy_reconcile_method
+ SET name = 'easy.reconcile.simple.partner'
+ WHERE name = 'action_rec_auto_partner'
+ """)
+ cr.execute("""
+ UPDATE account_easy_reconcile_method
+ SET name = 'easy.reconcile.simple.name'
+ WHERE name = 'action_rec_auto_name'
+ """)
+class account_easy_reconcile(Model):
-class account_easy_reconcile(osv.osv):
_name = 'account.easy.reconcile'
_description = 'account easy reconcile'
@@ -103,6 +121,98 @@ class account_easy_reconcile(osv.osv):
'unreconcile_entry_number': fields.function(_get_unrec_number, method=True, type='integer', string='Unreconcile Entries'),
}
+ def run_reconcile(self, cr, uid, ids, context=None):
+ if context is None:
+ context = {}
+ for rec_id in ids:
+ rec = self.browse(cr, uid, rec_id, context=context)
+ total_rec = 0
+ details = ''
+ count = 0
+
+ for method in rec.reconcile_method:
+ count += 1
+ ctx = dict(
+ context,
+ date_base_on=method.date_base_on,
+ filter=eval(method.filter or '[]'),
+ write_off=(method.write_off > 0 and method.write_off) or 0,
+ account_lost_id=method.account_lost_id.id,
+ account_profit_id=method.account_profit_id.id,
+ journal_id=method.journal_id.id)
+
+ rec_model = self.pool.get(method.name)
+ auto_rec_id = rec_model.create(
+ cr, uid, {'easy_reconcile_id': rec_id}, context=ctx)
+ res = rec_model.automatic_reconcile(cr, uid, auto_rec_id, context=ctx)
+
+ details += _(' method %d : %d lines |') % (count, res)
+ log = self.read(cr, uid, rec_id, ['rec_log'], context=context)['rec_log']
+ log_lines = log and log.splitlines() or []
+ log_lines[0:0] = [_('%s : %d lines have been reconciled (%s)') %
+ (time.strftime(DEFAULT_SERVER_DATETIME_FORMAT), total_rec, details[0:-2])]
+ log = "\n".join(log_lines)
+ self.write(cr, uid, rec_id, {'rec_log': log}, context=context)
+ return True
+
+
+class easy_reconcile_base(AbstractModel):
+ """Abstract Model for reconciliation methods"""
+
+ _name = 'easy.reconcile.base'
+
+ _columns = {
+ 'easy_reconcile_id': fields.many2one('account.easy.reconcile', string='Easy Reconcile')
+ }
+
+ def automatic_reconcile(self, cr, uid, ids, context=None):
+ """Must be inherited to implement the reconciliation"""
+ raise NotImplementedError
+
+ def _base_columns(self, rec):
+ """Mandatory columns for move lines queries
+ An extra column aliased as `key` should be defined
+ in each query."""
+ aml_cols = (
+ 'id',
+ 'debit',
+ 'credit',
+ 'date',
+ 'period_id',
+ 'ref',
+ 'name',
+ 'partner_id',
+ 'account_id',
+ 'move_id')
+ return ["account_move_line.%s" % col for col in aml_cols]
+
+ def _select(self, rec, *args, **kwargs):
+ return "SELECT %s" % ', '.join(self._base_columns(rec))
+
+ def _from(self, rec, *args, **kwargs):
+ return "FROM account_move_line"
+
+ def _where(self, rec, *args, **kwargs):
+ where = ("WHERE account_move_line.account_id = %s "
+ "AND account_move_line.reconcile_id IS NULL ")
+ # 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 = [rec.easy_reconcile_id.account.id]
+ return where, params
+
+ def _get_filter(self, cr, uid, rec, context):
+ ml_obj = self.pool.get('account.move.line')
+ where = ''
+ params = []
+ if context.get('filter'):
+ dummy, where, params = ml_obj._where_calc(
+ cr, uid, context['filter'], context=context).get_sql()
+ if where:
+ where = " AND %s" % where
+ return where, params
+
def _below_writeoff_limit(self, cr, uid, lines,
writeoff_limit, context=None):
precision = self.pool.get('decimal.precision').precision_get(
@@ -195,16 +305,29 @@ class account_easy_reconcile(osv.osv):
return False
+
+class easy_reconcile_simple(AbstractModel):
+
+ _name = 'easy.reconcile.simple'
+ _inherit = 'easy.reconcile.base'
+
+ # has to be subclassed
+ # field name used as key for matching the move lines
+ _key_field = None
+
def rec_auto_lines_simple(self, cr, uid, lines, context=None):
if context is None:
context = {}
+ if self._key_field is None:
+ raise ValueError("_key_field has to be defined")
+
count = 0
res = 0
while (count < len(lines)):
for i in range(count+1, len(lines)):
writeoff_account_id = False
- if lines[count]['key'] != lines[i]['key']:
+ if lines[count][self._key_field] != lines[i][self._key_field]:
break
check = False
@@ -227,119 +350,53 @@ class account_easy_reconcile(osv.osv):
count += 1
return res
- def _get_filter(self, cr, uid, account_id, context):
- ml_obj = self.pool.get('account.move.line')
- where = ''
- params = []
- if context.get('filter'):
- dummy, where, params = ml_obj._where_calc(
- cr, uid, context['filter'], context=context).get_sql()
- if where:
- where = " AND %s" % where
- return where, params
+ def _simple_order(self, rec, *args, **kwargs):
+ return "ORDER BY account_move_line.%s" % self._key_field
- def _base_columns(self, easy_rec):
- """Mandatory columns for move lines queries
- An extra column aliased as `key` should be defined
- in each query."""
- aml_cols = (
- 'id',
- 'debit',
- 'credit',
- 'date',
- 'period_id',
- 'ref',
- 'name',
- 'partner_id',
- 'account_id',
- 'move_id')
- return ["account_move_line.%s" % col for col in aml_cols]
-
- def _base_select(self, easy_rec, *args, **kwargs):
- return "SELECT %s" % ', '.join(self._base_columns(easy_rec))
-
- def _base_from(self, easy_rec, *args, **kwargs):
- return "FROM account_move_line"
-
- def _base_where(self, easy_rec, *args, **kwargs):
- where = ("WHERE account_move_line.account_id = %s "
- "AND account_move_line.reconcile_id IS NULL ")
- # 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 = [easy_rec.account.id]
- return where, params
-
- def _simple_order(self, easy_rec, key, *args, **kwargs):
- return "ORDER BY account_move_line.%s" % key
-
- def _action_rec_simple(self, cr, uid, easy_rec, key, context=None):
+ def _action_rec_simple(self, cr, uid, rec, context=None):
"""Match only 2 move lines, do not allow partial reconcile"""
- select = self._base_select(easy_rec)
- select += ", account_move_line.%s as key " % key
- where, params = self._base_where(easy_rec)
- where += " AND account_move_line.%s IS NOT NULL " % key
+ select = self._select(rec)
+ select += ", account_move_line.%s " % self._key_field
+ where, params = self._where(rec)
+ where += " AND account_move_line.%s IS NOT NULL " % self._key_field
- where2, params2 = self._get_filter(cr, uid, easy_rec, context=context)
+ where2, params2 = self._get_filter(cr, uid, rec, context=context)
query = ' '.join((
select,
- self._base_from(easy_rec),
+ self._from(rec),
where, where2,
- self._simple_order(easy_rec, key)))
+ self._simple_order(rec)))
cr.execute(query, params + params2)
lines = cr.dictfetchall()
return self.rec_auto_lines_simple(cr, uid, lines, context)
- def _action_rec_auto_name(self, cr, uid, easy_rec, context):
- return self._action_rec_simple(
- cr, uid, easy_rec, 'name', context=context)
-
- def _action_rec_auto_partner(self, cr, uid, easy_rec, context):
- return self._action_rec_simple(
- cr, uid, easy_rec, 'partner_id', context=context)
-
- def action_rec_auto(self, cr, uid, ids, context=None):
- if context is None:
- context = {}
- for rec_id in ids:
- rec = self.browse(cr, uid, rec_id, context=context)
- total_rec = 0
- details = ''
- count = 0
- for method in rec.reconcile_method:
- count += 1
- ctx = dict(
- context,
- date_base_on=method.date_base_on,
- filter=eval(method.filter or '[]'),
- write_off=(method.write_off > 0 and method.write_off) or 0,
- account_lost_id=method.account_lost_id.id,
- account_profit_id=method.account_profit_id.id,
- journal_id=method.journal_id.id)
-
- py_meth = getattr(self, "_%s" % method.name)
- res = py_meth(cr, uid, rec, context=ctx)
- details += _(' method %d : %d lines |') % (count, res)
- log = self.read(cr, uid, rec_id, ['rec_log'], context=context)['rec_log']
- log_lines = log and log.splitlines() or []
- log_lines[0:0] = [_('%s : %d lines have been reconciled (%s)') %
- (time.strftime(DEFAULT_SERVER_DATETIME_FORMAT), total_rec, details[0:-2])]
- log = "\n".join(log_lines)
- self.write(cr, uid, rec_id, {'rec_log': log}, context=context)
- return True
-
-account_easy_reconcile()
+ def automatic_reconcile(self, cr, uid, ids, context=None):
+ if isinstance(ids, (int, long)):
+ ids = [ids]
+ assert len(ids) == 1, "Has to be called on one id"
+ rec = self.browse(cr, uid, ids[0], context=context)
+ return self._action_rec_simple(cr, uid, rec, context=context)
-class account_easy_reconcile_method(osv.osv):
+class easy_reconcile_simple_name(TransientModel):
- _inherit = 'account.easy.reconcile.method'
+ _name = 'easy.reconcile.simple.name'
+ _inherit = 'easy.reconcile.simple'
+ _auto = True # False when inherited from AbstractModel
- _columns = {
- 'task_id': fields.many2one('account.easy.reconcile', 'Task', required=True, ondelete='cascade'),
- }
+ # has to be subclassed
+ # field name used as key for matching the move lines
+ _key_field = 'name'
-account_easy_reconcile_method()
+
+class easy_reconcile_simple_partner(TransientModel):
+
+ _name = 'easy.reconcile.simple.partner'
+ _inherit = 'easy.reconcile.simple'
+ _auto = True # False when inherited from AbstractModel
+
+ # has to be subclassed
+ # field name used as key for matching the move lines
+ _key_field = 'partner'
diff --git a/account_easy_reconcile/easy_reconcile.xml b/account_easy_reconcile/easy_reconcile.xml
index f3371679..58738641 100644
--- a/account_easy_reconcile/easy_reconcile.xml
+++ b/account_easy_reconcile/easy_reconcile.xml
@@ -19,7 +19,7 @@
-
+
From 1310d2f7ba0ac249d1fb6c60ab1b8d524c442936 Mon Sep 17 00:00:00 2001
From: "@" <@>
Date: Wed, 13 Jun 2012 16:35:52 +0200
Subject: [PATCH 13/52] [IMP] account_easy_reconcile: extracted classes in
modules
(lp:account-extra-addons rev 26.1.10)
---
account_easy_reconcile/__init__.py | 39 +-
account_easy_reconcile/__openerp__.py | 63 ++-
account_easy_reconcile/base_reconciliation.py | 207 ++++++++
account_easy_reconcile/easy_reconcile.py | 450 +++++-------------
account_easy_reconcile/easy_reconcile.xml | 211 ++++----
.../simple_reconciliation.py | 113 +++++
6 files changed, 617 insertions(+), 466 deletions(-)
create mode 100644 account_easy_reconcile/base_reconciliation.py
create mode 100644 account_easy_reconcile/simple_reconciliation.py
diff --git a/account_easy_reconcile/__init__.py b/account_easy_reconcile/__init__.py
index 8b179243..19e90a30 100755
--- a/account_easy_reconcile/__init__.py
+++ b/account_easy_reconcile/__init__.py
@@ -1,21 +1,24 @@
# -*- coding: utf-8 -*-
-#########################################################################
-# #
-# Copyright (C) 2010 Sébastien Beau #
-# #
-#This program is free software: you can redistribute it and/or modify #
-#it under the terms of the GNU General Public License as published by #
-#the Free Software Foundation, either version 3 of the License, or #
-#(at your option) any later version. #
-# #
-#This program is distributed in the hope that it will be useful, #
-#but WITHOUT ANY WARRANTY; without even the implied warranty of #
-#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
-#GNU General Public License for more details. #
-# #
-#You should have received a copy of the GNU General Public License #
-#along with this program. If not, see . #
-#########################################################################
+##############################################################################
+#
+# Copyright 2012 Camptocamp SA (Guewen Baconnier)
+# Copyright (C) 2010 Sébastien Beau
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
import easy_reconcile
-
+import base_reconciliation
+import simple_reconciliation
diff --git a/account_easy_reconcile/__openerp__.py b/account_easy_reconcile/__openerp__.py
index d3143a5c..a6dae87a 100755
--- a/account_easy_reconcile/__openerp__.py
+++ b/account_easy_reconcile/__openerp__.py
@@ -1,35 +1,56 @@
# -*- coding: utf-8 -*-
-#########################################################################
-# #
-# Copyright (C) 2010 Sébastien Beau #
-# #
-#This program is free software: you can redistribute it and/or modify #
-#it under the terms of the GNU General Public License as published by #
-#the Free Software Foundation, either version 3 of the License, or #
-#(at your option) any later version. #
-# #
-#This program is distributed in the hope that it will be useful, #
-#but WITHOUT ANY WARRANTY; without even the implied warranty of #
-#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
-#GNU General Public License for more details. #
-# #
-#You should have received a copy of the GNU General Public License #
-#along with this program. If not, see . #
-#########################################################################
+##############################################################################
+#
+# Copyright 2012 Camptocamp SA (Guewen Baconnier)
+# Copyright (C) 2010 Sébastien Beau
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
{
"name" : "Easy Reconcile",
"version" : "1.0",
"depends" : ["account", "base_scheduler_creator"
],
- "author" : "Sébastien Beau",
- "description": """A new view to reconcile easily your account
+ "author" : "Akretion,Camptocamp",
+ "description": """
+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 reconcilation runs with a few logs
+
+2 simple reconciliation methods are integrated in this module, the simple
+reconciliations works on 2 lines (1 debit / 1 credit) and do not allows
+partial reconcilation, they also match on 1 key, partner or entry name.
+
+You may be interested to install also the account_advanced_reconciliation
+module available at: https://code.launchpad.net/c2c-financial-addons
+This latter add more complex reconciliations, allows multiple lines and partial.
+
""",
"website" : "http://www.akretion.com/",
- "category" : "Customer Modules",
+ "category" : "Finance",
"init_xml" : [],
"demo_xml" : [],
"update_xml" : ["easy_reconcile.xml"],
- "active": False,
+ 'license': 'AGPL-3',
+ "auto_install": False,
"installable": True,
}
diff --git a/account_easy_reconcile/base_reconciliation.py b/account_easy_reconcile/base_reconciliation.py
new file mode 100644
index 00000000..b688e339
--- /dev/null
+++ b/account_easy_reconcile/base_reconciliation.py
@@ -0,0 +1,207 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Copyright 2012 Camptocamp SA (Guewen Baconnier)
+# Copyright (C) 2010 Sébastien Beau
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+from openerp.osv.orm import AbstractModel
+from openerp.osv import fields
+from operator import itemgetter, attrgetter
+
+
+class easy_reconcile_base(AbstractModel):
+ """Abstract Model for reconciliation methods"""
+
+ _name = 'easy.reconcile.base'
+
+ _inherit = 'easy.reconcile.options'
+ _auto = True # restore property set to False by AbstractModel
+
+ _columns = {
+ 'account_id': fields.many2one('account.account', 'Account', required=True),
+ 'partner_ids': fields.many2many('res.partner',
+ string="Restrict on partners"),
+ # other columns are inherited from easy.reconcile.options
+ }
+
+ def automatic_reconcile(self, cr, uid, ids, context=None):
+ """
+ :return: list of reconciled ids, list of partially reconciled entries
+ """
+ if isinstance(ids, (int, long)):
+ ids = [ids]
+ assert len(ids) == 1, "Has to be called on one id"
+ rec = self.browse(cr, uid, ids[0], context=context)
+ return self._action_rec(cr, uid, rec, context=context)
+
+ def _action_rec(self, cr, uid, rec, context=None):
+ """Must be inherited to implement the reconciliation
+ :return: list of reconciled ids
+ """
+ raise NotImplementedError
+
+ def _base_columns(self, rec):
+ """Mandatory columns for move lines queries
+ An extra column aliased as `key` should be defined
+ in each query."""
+ aml_cols = (
+ 'id',
+ 'debit',
+ 'credit',
+ 'date',
+ 'period_id',
+ 'ref',
+ 'name',
+ 'partner_id',
+ 'account_id',
+ 'move_id')
+ return ["account_move_line.%s" % col for col in aml_cols]
+
+ def _select(self, rec, *args, **kwargs):
+ return "SELECT %s" % ', '.join(self._base_columns(rec))
+
+ def _from(self, rec, *args, **kwargs):
+ return "FROM account_move_line"
+
+ def _where(self, rec, *args, **kwargs):
+ where = ("WHERE account_move_line.account_id = %s "
+ "AND account_move_line.reconcile_id IS NULL ")
+ # 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 = [rec.account_id.id]
+
+ if rec.partner_ids:
+ where += " AND account_move_line.partner_id IN %s"
+ params.append(tuple([l.id for l in rec.partner_ids]))
+ return where, params
+
+ def _get_filter(self, cr, uid, rec, context):
+ ml_obj = self.pool.get('account.move.line')
+ where = ''
+ params = []
+ if rec.filter:
+ dummy, where, params = ml_obj._where_calc(
+ cr, uid, rec.filter, context=context).get_sql()
+ if where:
+ where = " AND %s" % where
+ return where, params
+
+ def _below_writeoff_limit(self, cr, uid, rec, lines,
+ writeoff_limit, context=None):
+ precision = self.pool.get('decimal.precision').precision_get(
+ cr, uid, '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
+
+ def _get_rec_date(self, cr, uid, rec, lines, based_on='end_period_last_credit', context=None):
+ period_obj = self.pool.get('account.period')
+
+ def last_period(mlines):
+ period_ids = [ml['period_id'] for ml in mlines]
+ periods = period_obj.browse(
+ cr, uid, period_ids, context=context)
+ return max(periods, key=attrgetter('date_stop'))
+
+ 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 == 'end_period_last_credit':
+ return last_period(credit(lines)).date_stop
+ if based_on == 'end_period':
+ return last_period(lines).date_stop
+ elif 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
+
+ def _reconcile_lines(self, cr, uid, rec, lines, allow_partial=False, context=None):
+ """ 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 the entries
+ have been reconciled or not, the second is wether the reconciliation
+ is full (True) or partial (False)
+ """
+ if context is None:
+ context = {}
+
+ ml_obj = self.pool.get('account.move.line')
+ writeoff = rec.write_off
+
+ keys = ('debit', 'credit')
+
+ line_ids = [l['id'] for l in lines]
+ below_writeoff, sum_debit, sum_credit = self._below_writeoff_limit(
+ cr, uid, rec, lines, writeoff, context=context)
+ date = self._get_rec_date(
+ cr, uid, rec, lines, rec.date_base_on, context=context)
+
+ rec_ctx = dict(context, date_p=date)
+ if below_writeoff:
+ if sum_credit < sum_debit:
+ writeoff_account_id = rec.account_profit_id.id
+ else:
+ writeoff_account_id = rec.account_lost_id.id
+
+ period_id = self.pool.get('account.period').find(
+ cr, uid, dt=date, context=context)[0]
+
+ ml_obj.reconcile(
+ cr, uid,
+ line_ids,
+ type='auto',
+ writeoff_acc_id=writeoff_account_id,
+ writeoff_period_id=period_id,
+ writeoff_journal_id=rec.journal_id.id,
+ context=rec_ctx)
+ return True, True
+ elif allow_partial:
+ ml_obj.reconcile_partial(
+ cr, uid,
+ line_ids,
+ type='manual',
+ context=rec_ctx)
+ return True, False
+
+ return False, False
+
diff --git a/account_easy_reconcile/easy_reconcile.py b/account_easy_reconcile/easy_reconcile.py
index eae444c8..0c7b2372 100644
--- a/account_easy_reconcile/easy_reconcile.py
+++ b/account_easy_reconcile/easy_reconcile.py
@@ -1,58 +1,80 @@
# -*- coding: utf-8 -*-
-#########################################################################
-# #
-# Copyright (C) 2010 Sébastien Beau #
-# Copyright (C) 2012 Camptocamp SA (authored by Guewen Baconnier) #
-# #
-#This program is free software: you can redistribute it and/or modify #
-#it under the terms of the GNU General Public License as published by #
-#the Free Software Foundation, either version 3 of the License, or #
-#(at your option) any later version. #
-# #
-#This program is distributed in the hope that it will be useful, #
-#but WITHOUT ANY WARRANTY; without even the implied warranty of #
-#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
-#GNU General Public License for more details. #
-# #
-#You should have received a copy of the GNU General Public License #
-#along with this program. If not, see . #
-#########################################################################
+##############################################################################
+#
+# Copyright 2012 Camptocamp SA (Guewen Baconnier)
+# Copyright (C) 2010 Sébastien Beau
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
import time
-import string
-from operator import itemgetter, attrgetter
-from openerp.osv.orm import Model, TransientModel, AbstractModel
+from openerp.osv.orm import Model, AbstractModel
from openerp.osv import fields
from openerp.tools.translate import _
from openerp.tools import DEFAULT_SERVER_DATETIME_FORMAT
+class easy_reconcile_options(AbstractModel):
+ """Options of a reconciliation profile, columns
+ shared by the configuration of methods and by the
+ reconciliation wizards. This allows decoupling
+ of the methods with the wizards and allows to
+ launch the wizards alone
+ """
+
+ _name = 'easy.reconcile.options'
+
+ def _get_rec_base_date(self, cr, uid, context=None):
+ return [('end_period_last_credit', 'End of period of most recent credit'),
+ ('newest', 'Most recent move line'),
+ ('actual', 'Today'),
+ ('end_period', 'End of period of most recent move line'),
+ ('newest_credit', 'Date of most recent credit'),
+ ('newest_debit', 'Date of most recent debit')]
+
+ _columns = {
+ 'write_off': fields.float('Write off allowed'),
+ 'account_lost_id': fields.many2one('account.account', 'Account Lost'),
+ 'account_profit_id': fields.many2one('account.account', 'Account Profit'),
+ 'journal_id': fields.many2one('account.journal', 'Journal'),
+ 'date_base_on': fields.selection(_get_rec_base_date,
+ required=True,
+ string='Date of reconcilation'),
+ 'filter': fields.char('Filter', size=128),
+ }
+
+ _defaults = {
+ 'write_off': 0.,
+ 'date_base_on': 'end_period_last_credit',
+ }
+
+
class account_easy_reconcile_method(Model):
_name = 'account.easy.reconcile.method'
_description = 'reconcile method for account_easy_reconcile'
- def onchange_name(self, cr, uid, id, name, write_off, context=None):
- if name in ['easy.reconcile.simple.name',
- 'easy.reconcile.simple.partner']:
- if write_off>0:
- return {'value': {'require_write_off': True, 'require_account_id': True, 'require_journal_id': True}}
- return {'value': {'require_write_off': True}}
- return {}
+ _inherit = 'easy.reconcile.options'
+ _auto = True # restore property set to False by AbstractModel
- def onchange_write_off(self, cr, uid, id, name, write_off, context=None):
- if name in ['easy.reconcile.simple.name',
- 'easy.reconcile.simple.partner']:
- if write_off>0:
- return {'value': {'require_account_id': True, 'require_journal_id': True}}
- else:
- return {'value': {'require_account_id': False, 'require_journal_id': False}}
- return {}
+ _order = 'sequence'
def _get_all_rec_method(self, cr, uid, context=None):
return [
- ('easy.reconcile.simple.name', 'Simple method based on amount and name'),
- ('easy.reconcile.simple.partner', 'Simple method based on amount and partner'),
+ ('easy.reconcile.simple.name', 'Simple. Amount and Name'),
+ ('easy.reconcile.simple.partner', 'Simple. Amount and Partner'),
]
def _get_rec_method(self, cr, uid, context=None):
@@ -60,32 +82,16 @@ class account_easy_reconcile_method(Model):
_columns = {
'name': fields.selection(_get_rec_method, 'Type', size=128, required=True),
- 'sequence': fields.integer('Sequence', required=True, help="The sequence field is used to order the reconcile method"),
- 'write_off': fields.float('Write off Value'),
- 'account_lost_id': fields.many2one('account.account', 'Account Lost'),
- 'account_profit_id': fields.many2one('account.account', 'Account Profit'),
- 'journal_id': fields.many2one('account.journal', 'Journal'),
- 'require_write_off': fields.boolean('Require Write-off'),
- 'require_account_id': fields.boolean('Require Account'),
- 'require_journal_id': fields.boolean('Require Journal'),
- 'date_base_on': fields.selection(
- [('newest', 'Most recent move line'),
- ('actual', 'Today'),
- ('end_period_last_credit', 'End of period of most recent credit'),
- ('end_period', 'End of period of most recent move line'),
- ('newest_credit', 'Date of most recent credit'),
- ('newest_debit', 'Date of most recent debit')],
- string='Date of reconcilation'),
- 'filter': fields.char('Filter', size=128),
- 'task_id': fields.many2one('account.easy.reconcile', 'Task', required=True, ondelete='cascade'),
+ 'sequence': fields.integer('Sequence', required=True,
+ help="The sequence field is used to order the reconcile method"),
+ 'task_id': fields.many2one('account.easy.reconcile', 'Task',
+ required=True, ondelete='cascade'),
}
_defaults = {
- 'write_off': lambda *a: 0,
+ 'sequence': 1,
}
- _order = 'sequence'
-
def init(self, cr):
""" Migration stuff, name is not anymore methods names
but models name"""
@@ -100,16 +106,34 @@ class account_easy_reconcile_method(Model):
WHERE name = 'action_rec_auto_name'
""")
+
class account_easy_reconcile(Model):
_name = 'account.easy.reconcile'
_description = 'account easy reconcile'
- def _get_unrec_number(self, cr, uid, ids, name, arg, context=None):
+ def _get_total_unrec(self, cr, uid, ids, name, arg, context=None):
obj_move_line = self.pool.get('account.move.line')
- res={}
- for task in self.read(cr, uid, ids, ['account'], context=context):
- res[task['id']] = len(obj_move_line.search(cr, uid, [('account_id', '=', task['account'][0]), ('reconcile_id', '=', False)], context=context))
+ res = {}
+ for task in self.browse(cr, uid, ids, context=context):
+ res[task.id] = len(obj_move_line.search(
+ cr, uid,
+ [('account_id', '=', task.account.id),
+ ('reconcile_id', '=', False),
+ ('reconcile_partial_id', '=', False)],
+ context=context))
+ return res
+
+ def _get_partial_rec(self, cr, uid, ids, name, arg, context=None):
+ obj_move_line = self.pool.get('account.move.line')
+ res = {}
+ for task in self.browse(cr, uid, ids, context=context):
+ res[task.id] = len(obj_move_line.search(
+ cr, uid,
+ [('account_id', '=', task.account.id),
+ ('reconcile_id', '=', False),
+ ('reconcile_partial_id', '!=', False)],
+ context=context))
return res
_columns = {
@@ -118,285 +142,65 @@ class account_easy_reconcile(Model):
'reconcile_method': fields.one2many('account.easy.reconcile.method', 'task_id', 'Method'),
'scheduler': fields.many2one('ir.cron', 'scheduler', readonly=True),
'rec_log': fields.text('log', readonly=True),
- 'unreconcile_entry_number': fields.function(_get_unrec_number, method=True, type='integer', string='Unreconcile Entries'),
+ 'unreconciled_count': fields.function(_get_total_unrec,
+ type='integer', string='Fully Unreconciled Entries'),
+ 'reconciled_partial_count': fields.function(_get_partial_rec,
+ type='integer', string='Partially Reconciled Entries'),
}
+ def copy_data(self, cr, uid, id, default=None, context=None):
+ if default is None:
+ default = {}
+ default = dict(default, rec_log=False, scheduler=False)
+ return super(account_easy_reconcile, self).copy_data(
+ cr, uid, id, default=default, context=context)
+
+ def _prepare_run_transient(self, cr, uid, rec_method, context=None):
+ return {'account_id': rec_method.task_id.account.id,
+ 'write_off': rec_method.write_off,
+ 'account_lost_id': rec_method.account_lost_id and \
+ rec_method.account_lost_id.id,
+ 'account_profit_id': rec_method.account_profit_id and \
+ rec_method.account_profit_id.id,
+ 'journal_id': rec_method.journal_id and rec_method.journal_id.id,
+ 'date_base_on': rec_method.date_base_on,
+ 'filter': rec_method.filter}
+
def run_reconcile(self, cr, uid, ids, context=None):
if context is None:
context = {}
for rec_id in ids:
rec = self.browse(cr, uid, rec_id, context=context)
total_rec = 0
- details = ''
+ total_partial_rec = 0
+ details = []
count = 0
for method in rec.reconcile_method:
count += 1
- ctx = dict(
- context,
- date_base_on=method.date_base_on,
- filter=eval(method.filter or '[]'),
- write_off=(method.write_off > 0 and method.write_off) or 0,
- account_lost_id=method.account_lost_id.id,
- account_profit_id=method.account_profit_id.id,
- journal_id=method.journal_id.id)
rec_model = self.pool.get(method.name)
auto_rec_id = rec_model.create(
- cr, uid, {'easy_reconcile_id': rec_id}, context=ctx)
- res = rec_model.automatic_reconcile(cr, uid, auto_rec_id, context=ctx)
+ cr, uid,
+ self._prepare_run_transient(cr, uid, method, context=context),
+ context=context)
+
+ rec_ids, partial_ids = rec_model.automatic_reconcile(
+ cr, uid, auto_rec_id, context=context)
+
+ details.append(_('method %d : full: %d lines, partial: %d lines') % \
+ (count, len(rec_ids), len(partial_ids)))
+
+ total_rec += len(rec_ids)
+ total_partial_rec += len(partial_ids)
- details += _(' method %d : %d lines |') % (count, res)
log = self.read(cr, uid, rec_id, ['rec_log'], context=context)['rec_log']
log_lines = log and log.splitlines() or []
- log_lines[0:0] = [_('%s : %d lines have been reconciled (%s)') %
- (time.strftime(DEFAULT_SERVER_DATETIME_FORMAT), total_rec, details[0:-2])]
+ log_lines[0:0] = [_("%s : %d lines have been fully reconciled" \
+ " and %d lines have been partially reconciled (%s)") % \
+ (time.strftime(DEFAULT_SERVER_DATETIME_FORMAT), total_rec,
+ total_partial_rec, ' | '.join(details))]
log = "\n".join(log_lines)
self.write(cr, uid, rec_id, {'rec_log': log}, context=context)
return True
-
-class easy_reconcile_base(AbstractModel):
- """Abstract Model for reconciliation methods"""
-
- _name = 'easy.reconcile.base'
-
- _columns = {
- 'easy_reconcile_id': fields.many2one('account.easy.reconcile', string='Easy Reconcile')
- }
-
- def automatic_reconcile(self, cr, uid, ids, context=None):
- """Must be inherited to implement the reconciliation"""
- raise NotImplementedError
-
- def _base_columns(self, rec):
- """Mandatory columns for move lines queries
- An extra column aliased as `key` should be defined
- in each query."""
- aml_cols = (
- 'id',
- 'debit',
- 'credit',
- 'date',
- 'period_id',
- 'ref',
- 'name',
- 'partner_id',
- 'account_id',
- 'move_id')
- return ["account_move_line.%s" % col for col in aml_cols]
-
- def _select(self, rec, *args, **kwargs):
- return "SELECT %s" % ', '.join(self._base_columns(rec))
-
- def _from(self, rec, *args, **kwargs):
- return "FROM account_move_line"
-
- def _where(self, rec, *args, **kwargs):
- where = ("WHERE account_move_line.account_id = %s "
- "AND account_move_line.reconcile_id IS NULL ")
- # 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 = [rec.easy_reconcile_id.account.id]
- return where, params
-
- def _get_filter(self, cr, uid, rec, context):
- ml_obj = self.pool.get('account.move.line')
- where = ''
- params = []
- if context.get('filter'):
- dummy, where, params = ml_obj._where_calc(
- cr, uid, context['filter'], context=context).get_sql()
- if where:
- where = " AND %s" % where
- return where, params
-
- def _below_writeoff_limit(self, cr, uid, lines,
- writeoff_limit, context=None):
- precision = self.pool.get('decimal.precision').precision_get(
- cr, uid, '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
-
- def _get_rec_date(self, cr, uid, lines, based_on='end_period_last_credit', context=None):
- period_obj = self.pool.get('account.period')
-
- def last_period(mlines):
- period_ids = [ml['period_id'] for ml in mlines]
- periods = period_obj.browse(
- cr, uid, period_ids, context=context)
- return max(periods, key=attrgetter('date_stop'))
-
- 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 == 'end_period_last_credit':
- return last_period(credit(lines)).date_stop
- if based_on == 'end_period':
- return last_period(lines).date_stop
- elif 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
-
- def _reconcile_lines(self, cr, uid, lines, allow_partial=False, context=None):
- if context is None:
- context = {}
-
- ml_obj = self.pool.get('account.move.line')
- writeoff = context.get('write_off', 0.)
-
- keys = ('debit', 'credit')
-
- line_ids = [l['id'] for l in lines]
- below_writeoff, sum_debit, sum_credit = self._below_writeoff_limit(
- cr, uid, lines, writeoff, context=context)
- date = self._get_rec_date(
- cr, uid, lines, context.get('date_base_on'), context=context)
-
- rec_ctx = dict(context, date_p=date)
- if below_writeoff:
- if sum_credit < sum_debit:
- writeoff_account_id = context.get('account_profit_id', False)
- else:
- writeoff_account_id = context.get('account_lost_id', False)
-
- period_id = self.pool.get('account.period').find(
- cr, uid, dt=date, context=context)[0]
-
- ml_obj.reconcile(
- cr, uid,
- line_ids,
- type='auto',
- writeoff_acc_id=writeoff_account_id,
- writeoff_period_id=period_id,
- writeoff_journal_id=context.get('journal_id'),
- context=rec_ctx)
- return True
- elif allow_partial:
- ml_obj.reconcile_partial(
- cr, uid,
- line_ids,
- type='manual',
- context=rec_ctx)
- return True
-
- return False
-
-
-class easy_reconcile_simple(AbstractModel):
-
- _name = 'easy.reconcile.simple'
- _inherit = 'easy.reconcile.base'
-
- # has to be subclassed
- # field name used as key for matching the move lines
- _key_field = None
-
- def rec_auto_lines_simple(self, cr, uid, lines, context=None):
- if context is None:
- context = {}
-
- if self._key_field is None:
- raise ValueError("_key_field has to be defined")
-
- count = 0
- res = 0
- while (count < len(lines)):
- for i in range(count+1, len(lines)):
- writeoff_account_id = False
- 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
-
- if self._reconcile_lines(cr, uid, [credit_line, debit_line],
- allow_partial=False, context=context):
- res += 2
- del lines[i]
- break
- count += 1
- return res
-
- def _simple_order(self, rec, *args, **kwargs):
- return "ORDER BY account_move_line.%s" % self._key_field
-
- def _action_rec_simple(self, cr, uid, rec, context=None):
- """Match only 2 move lines, do not allow partial reconcile"""
- select = self._select(rec)
- select += ", account_move_line.%s " % self._key_field
- where, params = self._where(rec)
- where += " AND account_move_line.%s IS NOT NULL " % self._key_field
-
- where2, params2 = self._get_filter(cr, uid, rec, context=context)
- query = ' '.join((
- select,
- self._from(rec),
- where, where2,
- self._simple_order(rec)))
-
- cr.execute(query, params + params2)
- lines = cr.dictfetchall()
- return self.rec_auto_lines_simple(cr, uid, lines, context)
-
- def automatic_reconcile(self, cr, uid, ids, context=None):
- if isinstance(ids, (int, long)):
- ids = [ids]
- assert len(ids) == 1, "Has to be called on one id"
- rec = self.browse(cr, uid, ids[0], context=context)
- return self._action_rec_simple(cr, uid, rec, context=context)
-
-
-class easy_reconcile_simple_name(TransientModel):
-
- _name = 'easy.reconcile.simple.name'
- _inherit = 'easy.reconcile.simple'
- _auto = True # False when inherited from AbstractModel
-
- # has to be subclassed
- # field name used as key for matching the move lines
- _key_field = 'name'
-
-
-class easy_reconcile_simple_partner(TransientModel):
-
- _name = 'easy.reconcile.simple.partner'
- _inherit = 'easy.reconcile.simple'
- _auto = True # False when inherited from AbstractModel
-
- # has to be subclassed
- # field name used as key for matching the move lines
- _key_field = 'partner'
-
diff --git a/account_easy_reconcile/easy_reconcile.xml b/account_easy_reconcile/easy_reconcile.xml
index 58738641..1bd84c66 100644
--- a/account_easy_reconcile/easy_reconcile.xml
+++ b/account_easy_reconcile/easy_reconcile.xml
@@ -1,121 +1,124 @@
-
-
+
-
+
-
-
-
- account.easy.reconcile.form
- 20
- account.easy.reconcile
- form
-
-
+
+
+
+
+ account.easy.reconcile.tree
+ 20
+ account.easy.reconcile
+ tree
+
+
+
+
+
+
+
+
+
+
+
+
+ Easy Automatic Reconcile
+ ir.actions.act_window
+ account.easy.reconcile
+ form
+ tree,form
+ {'wizard_object' : 'account.easy.reconcile', 'function' : 'action_rec_auto', 'object_link' : 'account.easy.reconcile' }
+
-
- account.easy.reconcile.method.form
- 20
- account.easy.reconcile.method
- form
-
-
@@ -62,12 +74,10 @@ The lines should have the same amount (with the write-off) and the same partner
account.easy.reconcile.tree20account.easy.reconcile
- tree
- formtree,form
- {'wizard_object' : 'account.easy.reconcile', 'function' : 'action_rec_auto', 'object_link' : 'account.easy.reconcile' }
-
+
account.easy.reconcile.method.form20account.easy.reconcile.method
- form
@@ -107,7 +115,6 @@ The lines should have the same amount (with the write-off) and the same partner
-
@@ -116,8 +123,7 @@ The lines should have the same amount (with the write-off) and the same partner
account.easy.reconcile.method.tree20account.easy.reconcile.method
- tree
-
+
@@ -126,25 +132,15 @@ The lines should have the same amount (with the write-off) and the same partner
-
-
+
-
-
-
-
-
-
- client_action_multi
- account.easy.reconcile
- Create a Scheduler
-
-
-
+
diff --git a/account_easy_reconcile/easy_reconcile_history.py b/account_easy_reconcile/easy_reconcile_history.py
index 1da24ca0..76afa4e2 100644
--- a/account_easy_reconcile/easy_reconcile_history.py
+++ b/account_easy_reconcile/easy_reconcile_history.py
@@ -39,18 +39,16 @@ class easy_reconcile_history(orm.Model):
move_line_ids = []
for reconcile in history.reconcile_ids:
- move_line_ids.extend(
- [line.id
- for line
- in reconcile.line_id])
+ move_line_ids += [line.id
+ for line
+ in reconcile.line_id]
result[history.id]['reconcile_line_ids'] = move_line_ids
move_line_ids = []
for reconcile in history.reconcile_partial_ids:
- move_line_ids.extend(
- [line.id
- for line
- in reconcile.line_partial_ids])
+ move_line_ids += [line.id
+ for line
+ in reconcile.line_partial_ids]
result[history.id]['partial_line_ids'] = move_line_ids
return result
diff --git a/account_easy_reconcile/easy_reconcile_history_view.xml b/account_easy_reconcile/easy_reconcile_history_view.xml
index 29b484ae..04ed3978 100644
--- a/account_easy_reconcile/easy_reconcile_history_view.xml
+++ b/account_easy_reconcile/easy_reconcile_history_view.xml
@@ -5,7 +5,6 @@
easy.reconcile.history.searcheasy.reconcile.history
- searcheasy.reconcile.history.form
- 16easy.reconcile.history
- form
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
easy.reconcile.history.tree
- 16easy.reconcile.history
- tree
diff --git a/account_easy_reconcile/simple_reconciliation.py b/account_easy_reconcile/simple_reconciliation.py
index 37786551..14013cd5 100644
--- a/account_easy_reconcile/simple_reconciliation.py
+++ b/account_easy_reconcile/simple_reconciliation.py
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
##############################################################################
#
-# Copyright 2012 Camptocamp SA (Guewen Baconnier)
+# Copyright 2012-2013 Camptocamp SA (Guewen Baconnier)
# Copyright (C) 2010 Sébastien Beau
#
# This program is free software: you can redistribute it and/or modify
@@ -41,7 +41,7 @@ class easy_reconcile_simple(AbstractModel):
count = 0
res = []
while (count < len(lines)):
- for i in range(count+1, len(lines)):
+ for i in xrange(count+1, len(lines)):
writeoff_account_id = False
if lines[count][self._key_field] != lines[i][self._key_field]:
break
@@ -111,6 +111,7 @@ class easy_reconcile_simple_partner(TransientModel):
# field name used as key for matching the move lines
_key_field = 'partner_id'
+
class easy_reconcile_simple_reference(TransientModel):
_name = 'easy.reconcile.simple.reference'
From 461a41082eced5102ddfad95923a9481c2e6ab5f Mon Sep 17 00:00:00 2001
From: "@" <@>
Date: Thu, 20 Dec 2012 14:37:01 +0100
Subject: [PATCH 24/52] [FIX] account_advanced_reconcile: pep8, pylint,
eyeballing
---
account_advanced_reconcile/__openerp__.py | 9 +---
.../advanced_reconciliation.py | 6 +--
.../base_advanced_reconciliation.py | 42 +++++++++----------
account_advanced_reconcile/easy_reconcile.py | 7 ++--
.../easy_reconcile_view.xml | 3 +-
5 files changed, 28 insertions(+), 39 deletions(-)
diff --git a/account_advanced_reconcile/__openerp__.py b/account_advanced_reconcile/__openerp__.py
index 4212c3bc..795ec459 100644
--- a/account_advanced_reconcile/__openerp__.py
+++ b/account_advanced_reconcile/__openerp__.py
@@ -30,8 +30,6 @@
'description': """
Advanced reconciliation methods for the module account_easy_reconcile.
-account_easy_reconcile, which is a dependency, is available in the branch: lp:account-extra-addons
-
In addition to the features implemented in account_easy_reconcile, which are:
- reconciliation facilities for big volume of transactions
- setup different profiles of reconciliation by account
@@ -39,7 +37,7 @@ In addition to the features implemented in account_easy_reconcile, which are:
- 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 reconcilation runs with a few logs
+ - monitoring of reconcilation runs with an history
It implements a basis to created advanced reconciliation methods in a few lines
of code.
@@ -63,7 +61,6 @@ A method is already implemented in this module, it matches on entries:
The base class to find the reconciliations is built to be as efficient as
possible.
-
So basically, if you have an invoice with 3 payments (one per month), the first
month, it will partial reconcile the debit move line with the first payment, the second
month, it will partial reconcile the debit move line with 2 first payments,
@@ -75,9 +72,7 @@ many offices.
""",
'website': 'http://www.camptocamp.com',
- 'init_xml': [],
- 'update_xml': ['easy_reconcile_view.xml'],
- 'demo_xml': [],
+ 'data': ['easy_reconcile_view.xml'],
'test': [],
'images': [],
'installable': True,
diff --git a/account_advanced_reconcile/advanced_reconciliation.py b/account_advanced_reconcile/advanced_reconciliation.py
index 3ea3239d..92011a1d 100644
--- a/account_advanced_reconcile/advanced_reconciliation.py
+++ b/account_advanced_reconcile/advanced_reconciliation.py
@@ -19,14 +19,13 @@
#
##############################################################################
-from openerp.osv.orm import TransientModel
+from openerp.osv import orm
-class easy_reconcile_advanced_ref(TransientModel):
+class easy_reconcile_advanced_ref(orm.TransientModel):
_name = 'easy.reconcile.advanced.ref'
_inherit = 'easy.reconcile.advanced'
- _auto = True # False when inherited from AbstractModel
def _skip_line(self, cr, uid, rec, move_line, context=None):
"""
@@ -117,4 +116,3 @@ class easy_reconcile_advanced_ref(TransientModel):
yield ('partner_id', move_line['partner_id'])
yield ('ref', (move_line['ref'].lower().strip(),
move_line['name'].lower().strip()))
-
diff --git a/account_advanced_reconcile/base_advanced_reconciliation.py b/account_advanced_reconcile/base_advanced_reconciliation.py
index 4de33f09..14177f26 100644
--- a/account_advanced_reconcile/base_advanced_reconciliation.py
+++ b/account_advanced_reconcile/base_advanced_reconciliation.py
@@ -19,21 +19,17 @@
#
##############################################################################
-from itertools import groupby, product
-from operator import itemgetter
-from openerp.osv.orm import Model, AbstractModel, TransientModel
-from openerp.osv import fields, osv
+from itertools import product
+from openerp.osv import orm
-class easy_reconcile_advanced(AbstractModel):
+class easy_reconcile_advanced(orm.AbstractModel):
_name = 'easy.reconcile.advanced'
_inherit = 'easy.reconcile.base'
def _query_debit(self, cr, uid, rec, context=None):
- """Select all move (debit>0) as candidate. Optional choice on invoice
- will filter with an inner join on the related moves.
- """
+ """Select all move (debit>0) as candidate. """
select = self._select(rec)
sql_from = self._from(rec)
where, params = self._where(rec)
@@ -47,9 +43,7 @@ class easy_reconcile_advanced(AbstractModel):
return cr.dictfetchall()
def _query_credit(self, cr, uid, rec, context=None):
- """Select all move (credit>0) as candidate. Optional choice on invoice
- will filter with an inner join on the related moves.
- """
+ """Select all move (credit>0) as candidate. """
select = self._select(rec)
sql_from = self._from(rec)
where, params = self._where(rec)
@@ -176,9 +170,9 @@ class easy_reconcile_advanced(AbstractModel):
"""
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)
+ 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)):
@@ -186,7 +180,13 @@ class easy_reconcile_advanced(AbstractModel):
return easy_reconcile_advanced._compare_matcher_values(mkey, mvalue, omvalue)
def _compare_opposite(self, cr, uid, rec, move_line, opposite_move_line,
- matchers, context=None):
+ matchers, context=None):
+ """ 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(cr, uid, rec, opposite_move_line,
context=context)
for matcher in matchers:
@@ -216,14 +216,15 @@ class easy_reconcile_advanced(AbstractModel):
:return: list of matching lines
"""
matchers = self._matchers(cr, uid, rec, move_line, context=context)
- return [op for op in opposite_move_lines if \
- self._compare_opposite(cr, uid, rec, move_line, op, matchers, context=context)]
+ return [op for op in opposite_move_lines if
+ self._compare_opposite(
+ cr, uid, rec, move_line, op, matchers, context=context)]
def _action_rec(self, cr, uid, rec, context=None):
credit_lines = self._query_credit(cr, uid, rec, context=context)
debit_lines = self._query_debit(cr, uid, rec, context=context)
return self._rec_auto_lines_advanced(
- cr, uid, rec, credit_lines, debit_lines, context=context)
+ cr, uid, rec, credit_lines, debit_lines, context=context)
def _skip_line(self, cr, uid, rec, move_line, context=None):
"""
@@ -234,9 +235,7 @@ class easy_reconcile_advanced(AbstractModel):
return False
def _rec_auto_lines_advanced(self, cr, uid, rec, credit_lines, debit_lines, context=None):
- if context is None:
- context = {}
-
+ """ Advanced reconciliation main loop """
reconciled_ids = []
partial_reconciled_ids = []
reconcile_groups = []
@@ -271,4 +270,3 @@ class easy_reconcile_advanced(AbstractModel):
partial_reconciled_ids += reconcile_group_ids
return reconciled_ids, partial_reconciled_ids
-
diff --git a/account_advanced_reconcile/easy_reconcile.py b/account_advanced_reconcile/easy_reconcile.py
index 747a2e3c..5506917b 100644
--- a/account_advanced_reconcile/easy_reconcile.py
+++ b/account_advanced_reconcile/easy_reconcile.py
@@ -19,10 +19,10 @@
#
##############################################################################
-from openerp.osv.orm import Model
+from openerp.osv import orm
-class account_easy_reconcile_method(Model):
+class account_easy_reconcile_method(orm.Model):
_inherit = 'account.easy.reconcile.method'
@@ -31,7 +31,6 @@ class account_easy_reconcile_method(Model):
_get_all_rec_method(cr, uid, context=context)
methods += [
('easy.reconcile.advanced.ref',
- 'Advanced. Partner and Ref.'),
+ 'Advanced. Partner and Ref.'),
]
return methods
-
diff --git a/account_advanced_reconcile/easy_reconcile_view.xml b/account_advanced_reconcile/easy_reconcile_view.xml
index 961add68..7d35927d 100644
--- a/account_advanced_reconcile/easy_reconcile_view.xml
+++ b/account_advanced_reconcile/easy_reconcile_view.xml
@@ -4,13 +4,12 @@
account.easy.reconcile.formaccount.easy.reconcile
- form
-
From af37611b657bd2c4552334312352f2329852d578 Mon Sep 17 00:00:00 2001
From: Guewen Baconnier
Date: Thu, 3 Jan 2013 17:38:23 +0100
Subject: [PATCH 25/52] [FIX] account_easy_reconcile: remove _auto = True, bug
has been fixed
---
account_easy_reconcile/easy_reconcile.py | 3 ++-
account_easy_reconcile/easy_reconcile.xml | 2 --
account_easy_reconcile/easy_reconcile_history_view.xml | 4 ----
account_easy_reconcile/simple_reconciliation.py | 3 ---
4 files changed, 2 insertions(+), 10 deletions(-)
diff --git a/account_easy_reconcile/easy_reconcile.py b/account_easy_reconcile/easy_reconcile.py
index 204e7d18..688c6e7a 100644
--- a/account_easy_reconcile/easy_reconcile.py
+++ b/account_easy_reconcile/easy_reconcile.py
@@ -173,7 +173,8 @@ class account_easy_reconcile(orm.Model):
'history_ids': fields.one2many(
'easy.reconcile.history',
'easy_reconcile_id',
- string='History'),
+ string='History',
+ readonly=True),
'last_history':
fields.function(
_last_history,
diff --git a/account_easy_reconcile/easy_reconcile.xml b/account_easy_reconcile/easy_reconcile.xml
index 972fb9b0..404dcebc 100644
--- a/account_easy_reconcile/easy_reconcile.xml
+++ b/account_easy_reconcile/easy_reconcile.xml
@@ -41,10 +41,8 @@
-
-
diff --git a/account_easy_reconcile/easy_reconcile_history_view.xml b/account_easy_reconcile/easy_reconcile_history_view.xml
index 04ed3978..5f0fe77b 100644
--- a/account_easy_reconcile/easy_reconcile_history_view.xml
+++ b/account_easy_reconcile/easy_reconcile_history_view.xml
@@ -69,12 +69,8 @@
-
-
-
-
diff --git a/account_easy_reconcile/simple_reconciliation.py b/account_easy_reconcile/simple_reconciliation.py
index 14013cd5..0a1dcc8c 100644
--- a/account_easy_reconcile/simple_reconciliation.py
+++ b/account_easy_reconcile/simple_reconciliation.py
@@ -94,7 +94,6 @@ class easy_reconcile_simple_name(TransientModel):
_name = 'easy.reconcile.simple.name'
_inherit = 'easy.reconcile.simple'
- _auto = True # False when inherited from AbstractModel
# has to be subclassed
# field name used as key for matching the move lines
@@ -105,7 +104,6 @@ class easy_reconcile_simple_partner(TransientModel):
_name = 'easy.reconcile.simple.partner'
_inherit = 'easy.reconcile.simple'
- _auto = True # False when inherited from AbstractModel
# has to be subclassed
# field name used as key for matching the move lines
@@ -116,7 +114,6 @@ class easy_reconcile_simple_reference(TransientModel):
_name = 'easy.reconcile.simple.reference'
_inherit = 'easy.reconcile.simple'
- _auto = True # False when inherited from AbstractModel
# has to be subclassed
# field name used as key for matching the move lines
From 88039fdb92000d317536d158c20d0cc3d65241c6 Mon Sep 17 00:00:00 2001
From: Guewen Baconnier
Date: Fri, 4 Jan 2013 09:24:03 +0100
Subject: [PATCH 26/52] [IMP] account_easy_reconcile: add a help when no method
is created
---
account_easy_reconcile/easy_reconcile.xml | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/account_easy_reconcile/easy_reconcile.xml b/account_easy_reconcile/easy_reconcile.xml
index 404dcebc..25d60720 100644
--- a/account_easy_reconcile/easy_reconcile.xml
+++ b/account_easy_reconcile/easy_reconcile.xml
@@ -22,7 +22,7 @@
type="object"/>
-
+
@@ -95,6 +95,16 @@ The lines should have the same amount (with the write-off) and the same referenc
account.easy.reconcileformtree,form
+
+
+ Click to add a reconciliation profile.
+
+ A reconciliation profile specifies, for one account, how
+ the entries should be reconciled.
+ You can select one or many reconciliation methods which will
+ be run sequentially to match the entries between them.
+
+
From e68ee7d3f675286eda186d665b2a08dc17d20162 Mon Sep 17 00:00:00 2001
From: Guewen Baconnier
Date: Fri, 4 Jan 2013 09:39:10 +0100
Subject: [PATCH 27/52] [FIX] account_reconcile: reword entries to items
---
account_advanced_reconcile/__openerp__.py | 15 ++++++++-------
account_easy_reconcile/__openerp__.py | 13 +++++++------
account_easy_reconcile/base_reconciliation.py | 4 ++--
account_easy_reconcile/easy_reconcile.py | 6 +++---
4 files changed, 20 insertions(+), 18 deletions(-)
diff --git a/account_advanced_reconcile/__openerp__.py b/account_advanced_reconcile/__openerp__.py
index 795ec459..00ec44b4 100644
--- a/account_advanced_reconcile/__openerp__.py
+++ b/account_advanced_reconcile/__openerp__.py
@@ -43,19 +43,20 @@ It implements a basis to created advanced reconciliation methods in a few lines
of code.
Typically, such a method can be:
- - Reconcile entries if the partner and the ref are equal
- - Reconcile entries if the partner is equal and the ref is the same than ref
- or name
- - Reconcile entries if the partner is equal and the ref match with a pattern
+ - Reconcile Journal items if the partner and the ref are equal
+ - Reconcile Journal items if the partner is equal and the ref
+ is the same than ref or name
+ - Reconcile Journal items if the partner is equal and the ref
+ match with a pattern
And they allows:
- Reconciliations with multiple credit / multiple debit lines
- Partial reconciliations
- Write-off amount as well
-A method is already implemented in this module, it matches on entries:
- * Partner
- * Ref on credit move lines should be case insensitive equals to the ref or
+A method is already implemented in this module, it matches on items:
+ - Partner
+ - Ref on credit move lines should be case insensitive equals to the ref or
the name of the debit move line
The base class to find the reconciliations is built to be as efficient as
diff --git a/account_easy_reconcile/__openerp__.py b/account_easy_reconcile/__openerp__.py
index 3ec83f8f..eb8b1fc0 100755
--- a/account_easy_reconcile/__openerp__.py
+++ b/account_easy_reconcile/__openerp__.py
@@ -34,17 +34,18 @@ 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 entries
+ - 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 entry name.
+partner or Journal item name.
You may be interested to install also the
``account_advanced_reconciliation`` module.
diff --git a/account_easy_reconcile/base_reconciliation.py b/account_easy_reconcile/base_reconciliation.py
index 6707ff3a..b50c06b9 100644
--- a/account_easy_reconcile/base_reconciliation.py
+++ b/account_easy_reconcile/base_reconciliation.py
@@ -41,7 +41,7 @@ class easy_reconcile_base(orm.AbstractModel):
def automatic_reconcile(self, cr, uid, ids, context=None):
""" Reconciliation method called from the view.
- :return: list of reconciled ids, list of partially reconciled entries
+ :return: list of reconciled ids, list of partially reconciled items
"""
if isinstance(ids, (int, long)):
ids = [ids]
@@ -161,7 +161,7 @@ class easy_reconcile_base(orm.AbstractModel):
: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 the entries
+ :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)
diff --git a/account_easy_reconcile/easy_reconcile.py b/account_easy_reconcile/easy_reconcile.py
index 688c6e7a..ea4e894b 100644
--- a/account_easy_reconcile/easy_reconcile.py
+++ b/account_easy_reconcile/easy_reconcile.py
@@ -165,11 +165,11 @@ class account_easy_reconcile(orm.Model):
'reconcile_method': fields.one2many(
'account.easy.reconcile.method', 'task_id', 'Method'),
'unreconciled_count': fields.function(
- _get_total_unrec, type='integer', string='Unreconciled Entries'),
+ _get_total_unrec, type='integer', string='Unreconciled Items'),
'reconciled_partial_count': fields.function(
_get_partial_rec,
type='integer',
- string='Partially Reconciled Entries'),
+ string='Partially Reconciled Items'),
'history_ids': fields.one2many(
'easy.reconcile.history',
'easy_reconcile_id',
@@ -256,7 +256,7 @@ class account_easy_reconcile(orm.Model):
raise osv.except_osv(
_('Error'),
_('There is no history of reconciled '
- 'entries on the task: %s.') % rec.name)
+ 'items on the task: %s.') % rec.name)
def last_history_reconcile(self, cr, uid, rec_id, context=None):
""" Get the last history record for this reconciliation profile
From 130b446c0c45833ad0afc8f999b1ac9f4da498d5 Mon Sep 17 00:00:00 2001
From: Guewen Baconnier
Date: Fri, 4 Jan 2013 09:56:48 +0100
Subject: [PATCH 28/52] [IMP] account_reconcile: updated french translation
---
account_advanced_reconcile/i18n/fr.po | 29 +--
account_easy_reconcile/i18n/fr.po | 298 ++++++++++++++++++++++----
2 files changed, 266 insertions(+), 61 deletions(-)
diff --git a/account_advanced_reconcile/i18n/fr.po b/account_advanced_reconcile/i18n/fr.po
index b5f20627..4a32f6a7 100644
--- a/account_advanced_reconcile/i18n/fr.po
+++ b/account_advanced_reconcile/i18n/fr.po
@@ -1,18 +1,19 @@
# Translation of OpenERP Server.
# This file contains the translation of the following modules:
-# * account_advanced_reconcile
+# * account_advanced_reconcile
#
msgid ""
msgstr ""
"Project-Id-Version: OpenERP Server 6.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-11-07 12:34+0000\n"
-"PO-Revision-Date: 2012-11-07 12:34+0000\n"
-"Last-Translator: <>\n"
+"POT-Creation-Date: 2013-01-04 08:25+0000\n"
+"PO-Revision-Date: 2013-01-04 09:27+0100\n"
+"Last-Translator: Guewen Baconnier \n"
"Language-Team: \n"
+"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
+"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: \n"
#. module: account_advanced_reconcile
@@ -32,12 +33,6 @@ msgstr "Compte"
msgid "reconcile method for account_easy_reconcile"
msgstr "Méthode de lettrage pour le module account_easy_reconcile"
-#. module: account_advanced_reconcile
-#: field:easy.reconcile.advanced,date_base_on:0
-#: field:easy.reconcile.advanced.ref,date_base_on:0
-msgid "Date of reconcilation"
-msgstr "Date de lettrage"
-
#. module: account_advanced_reconcile
#: field:easy.reconcile.advanced,journal_id:0
#: field:easy.reconcile.advanced.ref,journal_id:0
@@ -50,6 +45,11 @@ msgstr "Journal"
msgid "Account Profit"
msgstr "Compte de produit"
+#. module: account_advanced_reconcile
+#: view:account.easy.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_advanced_reconcile
#: field:easy.reconcile.advanced,filter:0
#: field:easy.reconcile.advanced.ref,filter:0
@@ -62,9 +62,10 @@ msgid "Advanced. Partner and Ref"
msgstr "Avancé. Partenaire et Réf."
#. module: account_advanced_reconcile
-#: view:account.easy.reconcile:0
-msgid "Match multiple debit vs multiple credit entries. Allow partial reconcilation. 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."
+#: field:easy.reconcile.advanced,date_base_on:0
+#: field:easy.reconcile.advanced.ref,date_base_on:0
+msgid "Date of reconciliation"
+msgstr "Date de lettrage"
#. module: account_advanced_reconcile
#: model:ir.model,name:account_advanced_reconcile.model_easy_reconcile_advanced
diff --git a/account_easy_reconcile/i18n/fr.po b/account_easy_reconcile/i18n/fr.po
index c67c8eac..947cfbce 100644
--- a/account_easy_reconcile/i18n/fr.po
+++ b/account_easy_reconcile/i18n/fr.po
@@ -6,45 +6,73 @@ msgid ""
msgstr ""
"Project-Id-Version: OpenERP Server 6.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-12-20 08:54+0000\n"
-"PO-Revision-Date: 2012-11-07 12:59+0000\n"
-"Last-Translator: <>\n"
+"POT-Creation-Date: 2013-01-04 08:39+0000\n"
+"PO-Revision-Date: 2013-01-04 09:55+0100\n"
+"Last-Translator: Guewen Baconnier \n"
"Language-Team: \n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
+"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: \n"
#. module: account_easy_reconcile
-#: code:addons/account_easy_reconcile/easy_reconcile_history.py:103
+#: code:addons/account_easy_reconcile/easy_reconcile_history.py:101
+#: view:easy.reconcile.history:0
+#: field:easy.reconcile.history,reconcile_ids:0
+#, python-format
msgid "Reconciliations"
msgstr "Lettrages"
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+#: view:easy.reconcile.history:0
+msgid "Automatic Easy Reconcile History"
+msgstr "Historique des lettrages automatisés"
+
#. module: account_easy_reconcile
#: view:account.easy.reconcile:0
msgid "Information"
msgstr "Information"
#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0 view:easy.reconcile.history:0
-msgid "Automatic Easy Reconcile History"
-msgstr "Historique des lettrages automatisés"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0 view:easy.reconcile.history:0
+#: view:account.easy.reconcile:0
+#: view:easy.reconcile.history:0
msgid "Go to partially reconciled items"
msgstr "Voir les entrées partiellement lettrées"
+#. module: account_easy_reconcile
+#: help:account.easy.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_easy_reconcile
#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_history
msgid "easy.reconcile.history"
msgstr "easy.reconcile.history"
#. module: account_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_name
-msgid "easy.reconcile.simple.name"
-msgstr "easy.reconcile.simple.name"
+#: model:ir.actions.act_window,help:account_easy_reconcile.action_account_easy_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_easy_reconcile
#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_options
@@ -57,20 +85,25 @@ msgid "Group By..."
msgstr "Grouper par..."
#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Task Information"
-msgstr "Information sur la tâche"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Reconcile Method"
-msgstr "Méthode de lettrage"
+#: field:account.easy.reconcile,unreconciled_count:0
+msgid "Unreconciled Items"
+msgstr "Écritures non lettrées"
#. module: account_easy_reconcile
#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_base
msgid "easy.reconcile.base"
msgstr "easy.reconcile.base"
+#. module: account_easy_reconcile
+#: field:easy.reconcile.history,reconcile_line_ids:0
+msgid "Reconciled Items"
+msgstr "Écritures lettrées"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,reconcile_method:0
+msgid "Method"
+msgstr "Méthode"
+
#. module: account_easy_reconcile
#: view:easy.reconcile.history:0
msgid "7 Days"
@@ -82,19 +115,19 @@ msgid "Easy Automatic Reconcile History"
msgstr "Lettrage automatisé"
#. module: account_easy_reconcile
-#: model:ir.actions.act_window,name:account_easy_reconcile.act_easy_reconcile_to_history
-msgid "History Details"
-msgstr "Détails de l'historique"
+#: field:easy.reconcile.history,date:0
+msgid "Run date"
+msgstr "Date de lancement"
#. module: account_easy_reconcile
#: view:account.easy.reconcile:0
-msgid ""
-"Match one debit line vs one credit line. Do not allow partial reconcilation. "
-"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)."
+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_easy_reconcile
+#: model:ir.actions.act_window,name:account_easy_reconcile.act_easy_reconcile_to_history
+msgid "History Details"
+msgstr "Détails de l'historique"
#. module: account_easy_reconcile
#: view:account.easy.reconcile:0
@@ -102,9 +135,31 @@ msgid "Display items reconciled on the last run"
msgstr "Voir les entrées lettrées au dernier lettrage"
#. module: account_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile_method
-msgid "reconcile method for account_easy_reconcile"
-msgstr "Méthode de lettrage"
+#: field:account.easy.reconcile.method,name:0
+msgid "Type"
+msgstr "Type"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,journal_id:0
+#: field:easy.reconcile.base,journal_id:0
+#: field:easy.reconcile.options,journal_id:0
+#: field:easy.reconcile.simple,journal_id:0
+#: field:easy.reconcile.simple.name,journal_id:0
+#: field:easy.reconcile.simple.partner,journal_id:0
+#: field:easy.reconcile.simple.reference,journal_id:0
+msgid "Journal"
+msgstr "Journal"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,account_profit_id:0
+#: field:easy.reconcile.base,account_profit_id:0
+#: field:easy.reconcile.options,account_profit_id:0
+#: field:easy.reconcile.simple,account_profit_id:0
+#: field:easy.reconcile.simple.name,account_profit_id:0
+#: field:easy.reconcile.simple.partner,account_profit_id:0
+#: field:easy.reconcile.simple.reference,account_profit_id:0
+msgid "Account Profit"
+msgstr "Compte de profits"
#. module: account_easy_reconcile
#: view:easy.reconcile.history:0
@@ -116,6 +171,15 @@ msgstr "Lettrages du jour"
msgid "Simple. Amount and Name"
msgstr "Simple. Montant et description"
+#. module: account_easy_reconcile
+#: field:easy.reconcile.base,partner_ids:0
+#: field:easy.reconcile.simple,partner_ids:0
+#: field:easy.reconcile.simple.name,partner_ids:0
+#: field:easy.reconcile.simple.partner,partner_ids:0
+#: field:easy.reconcile.simple.reference,partner_ids:0
+msgid "Restrict on partners"
+msgstr "Filtrer sur des partenaires"
+
#. module: account_easy_reconcile
#: model:ir.actions.act_window,name:account_easy_reconcile.action_account_easy_reconcile
#: model:ir.ui.menu,name:account_easy_reconcile.menu_easy_reconcile
@@ -132,26 +196,132 @@ msgstr "Aujourd'hui"
msgid "Date"
msgstr "Date"
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,last_history:0
+msgid "Last History"
+msgstr "Dernier historique"
+
#. module: account_easy_reconcile
#: view:account.easy.reconcile:0
msgid "Configuration"
msgstr "Configuration"
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,reconciled_partial_count:0
+#: field:easy.reconcile.history,partial_line_ids:0
+msgid "Partially Reconciled Items"
+msgstr "Écritures partiellement lettrées"
+
#. module: account_easy_reconcile
#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_partner
msgid "easy.reconcile.simple.partner"
msgstr "easy.reconcile.simple.partner"
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,write_off:0
+#: field:easy.reconcile.base,write_off:0
+#: field:easy.reconcile.options,write_off:0
+#: field:easy.reconcile.simple,write_off:0
+#: field:easy.reconcile.simple.name,write_off:0
+#: field:easy.reconcile.simple.partner,write_off:0
+#: field:easy.reconcile.simple.reference,write_off:0
+msgid "Write off allowed"
+msgstr "Écart autorisé"
+
#. module: account_easy_reconcile
#: view:account.easy.reconcile:0
msgid "Automatic Easy Reconcile"
msgstr "Lettrage automatisé"
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,account:0
+#: field:easy.reconcile.base,account_id:0
+#: field:easy.reconcile.simple,account_id:0
+#: field:easy.reconcile.simple.name,account_id:0
+#: field:easy.reconcile.simple.partner,account_id:0
+#: field:easy.reconcile.simple.reference,account_id:0
+msgid "Account"
+msgstr "Compte"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,task_id:0
+msgid "Task"
+msgstr "Tâche"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,name:0
+msgid "Name"
+msgstr "Nom"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+msgid "Simple. Amount and Partner"
+msgstr "Simple. Montant et partenaire"
+
#. module: account_easy_reconcile
#: view:account.easy.reconcile:0
msgid "Start Auto Reconcilation"
msgstr "Lancer le lettrage automatisé"
+#. module: account_easy_reconcile
+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_name
+msgid "easy.reconcile.simple.name"
+msgstr "easy.reconcile.simple.name"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,filter:0
+#: field:easy.reconcile.base,filter:0
+#: field:easy.reconcile.options,filter:0
+#: field:easy.reconcile.simple,filter:0
+#: field:easy.reconcile.simple.name,filter:0
+#: field:easy.reconcile.simple.partner,filter:0
+#: field:easy.reconcile.simple.reference,filter:0
+msgid "Filter"
+msgstr "Filtre"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+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_easy_reconcile
+#: field:easy.reconcile.history,easy_reconcile_id:0
+msgid "Reconcile Profile"
+msgstr "Profil de réconciliation"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+msgid "Start Auto Reconciliation"
+msgstr "Lancer le lettrage automatisé"
+
+#. module: account_easy_reconcile
+#: code:addons/account_easy_reconcile/easy_reconcile.py:250
+#, python-format
+msgid "Error"
+msgstr "Erreur"
+
+#. module: account_easy_reconcile
+#: code:addons/account_easy_reconcile/easy_reconcile.py:251
+#, 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_easy_reconcile
+#: view:account.easy.reconcile:0
+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_easy_reconcile
+#: field:account.easy.reconcile.method,account_lost_id:0
+#: field:easy.reconcile.base,account_lost_id:0
+#: field:easy.reconcile.options,account_lost_id:0
+#: field:easy.reconcile.simple,account_lost_id:0
+#: field:easy.reconcile.simple.name,account_lost_id:0
+#: field:easy.reconcile.simple.partner,account_lost_id:0
+#: field:easy.reconcile.simple.reference,account_lost_id:0
+msgid "Account Lost"
+msgstr "Compte de pertes"
+
#. module: account_easy_reconcile
#: view:easy.reconcile.history:0
msgid "Reconciliation Profile"
@@ -159,14 +329,21 @@ msgstr "Profil de réconciliation"
#. module: account_easy_reconcile
#: view:account.easy.reconcile:0
+#: field:account.easy.reconcile,history_ids:0
msgid "History"
msgstr "Historique"
#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0 view:easy.reconcile.history:0
+#: view:account.easy.reconcile:0
+#: view:easy.reconcile.history:0
msgid "Go to reconciled items"
msgstr "Voir les entrées lettrées"
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+msgid "Profile Information"
+msgstr "Information sur le profil"
+
#. module: account_easy_reconcile
#: view:account.easy.reconcile.method:0
msgid "Automatic Easy Reconcile Method"
@@ -174,13 +351,8 @@ msgstr "Méthode de lettrage automatisé"
#. module: account_easy_reconcile
#: view:account.easy.reconcile:0
-msgid ""
-"Match one debit line vs one credit line. Do not allow partial reconcilation. "
-"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)."
+msgid "Simple. Amount and Reference"
+msgstr "Simple. Montant et référence"
#. module: account_easy_reconcile
#: view:account.easy.reconcile:0
@@ -188,9 +360,9 @@ msgid "Display items partially reconciled on the last run"
msgstr "Afficher les entrées partiellement lettrées au dernier lettrage"
#. module: account_easy_reconcile
-#: view:easy.reconcile.history:0
-msgid "Partial Reconcilations"
-msgstr "Lettrages partiels"
+#: field:account.easy.reconcile.method,sequence:0
+msgid "Sequence"
+msgstr "Séquence"
#. module: account_easy_reconcile
#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple
@@ -203,10 +375,29 @@ msgid "Reconciliations of last 7 days"
msgstr "Lettrages des 7 derniers jours"
#. module: account_easy_reconcile
-#: code:addons/account_easy_reconcile/easy_reconcile_history.py:106
+#: field:account.easy.reconcile.method,date_base_on:0
+#: field:easy.reconcile.base,date_base_on:0
+#: field:easy.reconcile.options,date_base_on:0
+#: field:easy.reconcile.simple,date_base_on:0
+#: field:easy.reconcile.simple.name,date_base_on:0
+#: field:easy.reconcile.simple.partner,date_base_on:0
+#: field:easy.reconcile.simple.reference,date_base_on:0
+msgid "Date of reconciliation"
+msgstr "Date de lettrage"
+
+#. module: account_easy_reconcile
+#: code:addons/account_easy_reconcile/easy_reconcile_history.py:104
+#: view:easy.reconcile.history:0
+#: field:easy.reconcile.history,reconcile_partial_ids:0
+#, python-format
msgid "Partial Reconciliations"
msgstr "Lettrages partiels"
+#. module: account_easy_reconcile
+#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile_method
+msgid "reconcile method for account_easy_reconcile"
+msgstr "Méthode de lettrage"
+
#. module: account_easy_reconcile
#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_reference
msgid "easy.reconcile.simple.reference"
@@ -217,5 +408,18 @@ msgstr "easy.reconcile.simple.reference"
msgid "account easy reconcile"
msgstr "Lettrage automatisé"
+#~ msgid "Unreconciled Entries"
+#~ msgstr "Écritures non lettrées"
+
+#, fuzzy
+#~ msgid "Partially Reconciled Entries"
+#~ msgstr "Lettrages partiels"
+
+#~ msgid "Task Information"
+#~ msgstr "Information sur la tâche"
+
+#~ msgid "Reconcile Method"
+#~ msgstr "Méthode de lettrage"
+
#~ msgid "Log"
#~ msgstr "Historique"
From f45bfbe3fe9c1b6945d5320b8c3b6b4ff711d86a Mon Sep 17 00:00:00 2001
From: unknown
Date: Tue, 5 Feb 2013 12:19:35 +0100
Subject: [PATCH 29/52] [FIX] account_easy_reconcile: security CSV file is not
loaded
---
account_easy_reconcile/__openerp__.py | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/account_easy_reconcile/__openerp__.py b/account_easy_reconcile/__openerp__.py
index eb8b1fc0..68e95695 100755
--- a/account_easy_reconcile/__openerp__.py
+++ b/account_easy_reconcile/__openerp__.py
@@ -55,12 +55,10 @@ allows multiple lines and partial.
""",
"website": "http://www.akretion.com/",
"category": "Finance",
- "init_xml": [],
"demo_xml": [],
- "update_xml": [
- "easy_reconcile.xml",
- "easy_reconcile_history_view.xml",
- ],
+ "data": ["easy_reconcile.xml",
+ "easy_reconcile_history_view.xml",
+ "security/ir.model.access.csv"],
'license': 'AGPL-3',
"auto_install": False,
"installable": True,
From e24fc8651f225c34847ec151ca92facf0f879206 Mon Sep 17 00:00:00 2001
From: unknown
Date: Wed, 13 Feb 2013 16:54:48 +0100
Subject: [PATCH 30/52] [ADD] account_easy_reconcile: easy-reconcile
multi-company support
---
account_easy_reconcile/__openerp__.py | 6 ++---
account_easy_reconcile/easy_reconcile.py | 7 ++++++
account_easy_reconcile/easy_reconcile.xml | 2 ++
.../easy_reconcile_history.py | 7 ++++++
.../easy_reconcile_history_view.xml | 1 +
account_easy_reconcile/security/ir_rule.xml | 25 +++++++++++++++++++
6 files changed, 45 insertions(+), 3 deletions(-)
create mode 100644 account_easy_reconcile/security/ir_rule.xml
diff --git a/account_easy_reconcile/__openerp__.py b/account_easy_reconcile/__openerp__.py
index 68e95695..a3f22d54 100755
--- a/account_easy_reconcile/__openerp__.py
+++ b/account_easy_reconcile/__openerp__.py
@@ -21,9 +21,8 @@
{
"name": "Easy Reconcile",
- "version": "1.1",
- "depends": ["account",
- ],
+ "version": "1.3.0",
+ "depends": ["account"],
"author": "Akretion,Camptocamp",
"description": """
Easy Reconcile
@@ -58,6 +57,7 @@ allows multiple lines and partial.
"demo_xml": [],
"data": ["easy_reconcile.xml",
"easy_reconcile_history_view.xml",
+ "security/ir_rule.xml",
"security/ir.model.access.csv"],
'license': 'AGPL-3',
"auto_install": False,
diff --git a/account_easy_reconcile/easy_reconcile.py b/account_easy_reconcile/easy_reconcile.py
index ea4e894b..29408eff 100644
--- a/account_easy_reconcile/easy_reconcile.py
+++ b/account_easy_reconcile/easy_reconcile.py
@@ -96,6 +96,12 @@ class account_easy_reconcile_method(orm.Model):
string='Task',
required=True,
ondelete='cascade'),
+ 'company_id': fields.related('task_id','company_id',
+ relation='res.company',
+ type='many2one',
+ string='Company',
+ store=True,
+ readonly=True),
}
_defaults = {
@@ -182,6 +188,7 @@ class account_easy_reconcile(orm.Model):
type='many2one',
relation='easy.reconcile.history',
readonly=True),
+ 'company_id': fields.many2one('res.company', 'Company'),
}
def copy_data(self, cr, uid, id, default=None, context=None):
diff --git a/account_easy_reconcile/easy_reconcile.xml b/account_easy_reconcile/easy_reconcile.xml
index 25d60720..2696419a 100644
--- a/account_easy_reconcile/easy_reconcile.xml
+++ b/account_easy_reconcile/easy_reconcile.xml
@@ -27,6 +27,7 @@
+
@@ -76,6 +77,7 @@ The lines should have the same amount (with the write-off) and the same referenc
+
diff --git a/account_easy_reconcile/security/ir_rule.xml b/account_easy_reconcile/security/ir_rule.xml
new file mode 100644
index 00000000..ec1de6d0
--- /dev/null
+++ b/account_easy_reconcile/security/ir_rule.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ Easy reconcile multi-company
+
+
+ ['|', ('company_id', '=', False), ('company_id', 'child_of', [user.company_id.id])]
+
+
+
+ Easy reconcile history multi-company
+
+
+ ['|', ('company_id', '=', False), ('company_id', 'child_of', [user.company_id.id])]
+
+
+
+ Easy reconcile method multi-company
+
+
+ ['|', ('company_id', '=', False), ('company_id', 'child_of', [user.company_id.id])]
+
+
+
From 3fe9aab5c0c4fb23f366a6d611579d28361c587a Mon Sep 17 00:00:00 2001
From: Vincent Renaville
Date: Fri, 7 Jun 2013 10:47:55 +0200
Subject: [PATCH 31/52] [FIX] account_advanced_reconcile: prevent crash if move
ref is null
---
account_advanced_reconcile/advanced_reconciliation.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/account_advanced_reconcile/advanced_reconciliation.py b/account_advanced_reconcile/advanced_reconciliation.py
index 92011a1d..5ac292c1 100644
--- a/account_advanced_reconcile/advanced_reconciliation.py
+++ b/account_advanced_reconcile/advanced_reconciliation.py
@@ -114,5 +114,5 @@ class easy_reconcile_advanced_ref(orm.TransientModel):
:yield: matchers as tuple ('matcher key', value(s))
"""
yield ('partner_id', move_line['partner_id'])
- yield ('ref', (move_line['ref'].lower().strip(),
+ yield ('ref', ((move_line['ref'] or '').lower().strip(),
move_line['name'].lower().strip()))
From d97cb167cc182592c3d30e7574c7b9f7e2f83260 Mon Sep 17 00:00:00 2001
From: Guewen Baconnier
Date: Thu, 16 Jan 2014 15:14:35 +0100
Subject: [PATCH 32/52] [IMP] account_easy_reconcile: use the 'handle' widget
to order the reconcile methods
---
account_easy_reconcile/easy_reconcile.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/account_easy_reconcile/easy_reconcile.xml b/account_easy_reconcile/easy_reconcile.xml
index 2696419a..cfe66a47 100644
--- a/account_easy_reconcile/easy_reconcile.xml
+++ b/account_easy_reconcile/easy_reconcile.xml
@@ -118,7 +118,7 @@ The lines should have the same amount (with the write-off) and the same referenc
account.easy.reconcile.method
-
+
@@ -135,7 +135,7 @@ The lines should have the same amount (with the write-off) and the same referenc
account.easy.reconcile.method
-
+
From f88df5127fdbd15239660b9c28e6685009dd7d9c Mon Sep 17 00:00:00 2001
From: "Pedro M. Baeza"
Date: Tue, 21 Jan 2014 13:07:34 +0100
Subject: [PATCH 33/52] [IMP] account_reconcile: Translation template files.
---
.../i18n/account_advanced_reconcile.pot | 90 ++++
.../i18n/account_easy_reconcile.pot | 406 ++++++++++++++++++
2 files changed, 496 insertions(+)
create mode 100644 account_advanced_reconcile/i18n/account_advanced_reconcile.pot
create mode 100644 account_easy_reconcile/i18n/account_easy_reconcile.pot
diff --git a/account_advanced_reconcile/i18n/account_advanced_reconcile.pot b/account_advanced_reconcile/i18n/account_advanced_reconcile.pot
new file mode 100644
index 00000000..98382751
--- /dev/null
+++ b/account_advanced_reconcile/i18n/account_advanced_reconcile.pot
@@ -0,0 +1,90 @@
+# Translation of OpenERP Server.
+# This file contains the translation of the following modules:
+# * account_advanced_reconcile
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OpenERP Server 7.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-01-21 11:54+0000\n"
+"PO-Revision-Date: 2014-01-21 11:54+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_advanced_reconcile
+#: field:easy.reconcile.advanced,partner_ids:0
+#: field:easy.reconcile.advanced.ref,partner_ids:0
+msgid "Restrict on partners"
+msgstr ""
+
+#. module: account_advanced_reconcile
+#: field:easy.reconcile.advanced,account_id:0
+#: field:easy.reconcile.advanced.ref,account_id:0
+msgid "Account"
+msgstr ""
+
+#. module: account_advanced_reconcile
+#: model:ir.model,name:account_advanced_reconcile.model_account_easy_reconcile_method
+msgid "reconcile method for account_easy_reconcile"
+msgstr ""
+
+#. module: account_advanced_reconcile
+#: field:easy.reconcile.advanced,journal_id:0
+#: field:easy.reconcile.advanced.ref,journal_id:0
+msgid "Journal"
+msgstr ""
+
+#. module: account_advanced_reconcile
+#: field:easy.reconcile.advanced,account_profit_id:0
+#: field:easy.reconcile.advanced.ref,account_profit_id:0
+msgid "Account Profit"
+msgstr ""
+
+#. module: account_advanced_reconcile
+#: view:account.easy.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_advanced_reconcile
+#: field:easy.reconcile.advanced,filter:0
+#: field:easy.reconcile.advanced.ref,filter:0
+msgid "Filter"
+msgstr ""
+
+#. module: account_advanced_reconcile
+#: view:account.easy.reconcile:0
+msgid "Advanced. Partner and Ref"
+msgstr ""
+
+#. module: account_advanced_reconcile
+#: field:easy.reconcile.advanced,date_base_on:0
+#: field:easy.reconcile.advanced.ref,date_base_on:0
+msgid "Date of reconciliation"
+msgstr ""
+
+#. module: account_advanced_reconcile
+#: model:ir.model,name:account_advanced_reconcile.model_easy_reconcile_advanced
+msgid "easy.reconcile.advanced"
+msgstr ""
+
+#. module: account_advanced_reconcile
+#: field:easy.reconcile.advanced,account_lost_id:0
+#: field:easy.reconcile.advanced.ref,account_lost_id:0
+msgid "Account Lost"
+msgstr ""
+
+#. module: account_advanced_reconcile
+#: model:ir.model,name:account_advanced_reconcile.model_easy_reconcile_advanced_ref
+msgid "easy.reconcile.advanced.ref"
+msgstr ""
+
+#. module: account_advanced_reconcile
+#: field:easy.reconcile.advanced,write_off:0
+#: field:easy.reconcile.advanced.ref,write_off:0
+msgid "Write off allowed"
+msgstr ""
+
diff --git a/account_easy_reconcile/i18n/account_easy_reconcile.pot b/account_easy_reconcile/i18n/account_easy_reconcile.pot
new file mode 100644
index 00000000..4f878273
--- /dev/null
+++ b/account_easy_reconcile/i18n/account_easy_reconcile.pot
@@ -0,0 +1,406 @@
+# Translation of OpenERP Server.
+# This file contains the translation of the following modules:
+# * account_easy_reconcile
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OpenERP Server 7.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-01-21 11:55+0000\n"
+"PO-Revision-Date: 2014-01-21 11:55+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_easy_reconcile
+#: code:addons/account_easy_reconcile/easy_reconcile_history.py:108
+#: view:easy.reconcile.history:0
+#: field:easy.reconcile.history,reconcile_ids:0
+#, python-format
+msgid "Reconciliations"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+#: view:easy.reconcile.history:0
+msgid "Automatic Easy Reconcile History"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+msgid "Information"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+#: view:easy.reconcile.history:0
+msgid "Go to partially reconciled items"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: help:account.easy.reconcile.method,sequence:0
+msgid "The sequence field is used to order the reconcile method"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_history
+msgid "easy.reconcile.history"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: model:ir.actions.act_window,help:account_easy_reconcile.action_account_easy_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_easy_reconcile
+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_options
+msgid "easy.reconcile.options"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:0
+msgid "Group By..."
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,unreconciled_count:0
+msgid "Unreconciled Items"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_base
+msgid "easy.reconcile.base"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:easy.reconcile.history,reconcile_line_ids:0
+msgid "Reconciled Items"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,reconcile_method:0
+msgid "Method"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:0
+msgid "7 Days"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: model:ir.actions.act_window,name:account_easy_reconcile.action_easy_reconcile_history
+msgid "Easy Automatic Reconcile History"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:easy.reconcile.history,date:0
+msgid "Run date"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+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_easy_reconcile
+#: model:ir.actions.act_window,name:account_easy_reconcile.act_easy_reconcile_to_history
+msgid "History Details"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+msgid "Display items reconciled on the last run"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,name:0
+msgid "Type"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,company_id:0
+#: field:account.easy.reconcile.method,company_id:0
+#: field:easy.reconcile.history,company_id:0
+msgid "Company"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,account_profit_id:0
+#: field:easy.reconcile.base,account_profit_id:0
+#: field:easy.reconcile.options,account_profit_id:0
+#: field:easy.reconcile.simple,account_profit_id:0
+#: field:easy.reconcile.simple.name,account_profit_id:0
+#: field:easy.reconcile.simple.partner,account_profit_id:0
+#: field:easy.reconcile.simple.reference,account_profit_id:0
+msgid "Account Profit"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:0
+msgid "Todays' Reconcilations"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+msgid "Simple. Amount and Name"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:easy.reconcile.base,partner_ids:0
+#: field:easy.reconcile.simple,partner_ids:0
+#: field:easy.reconcile.simple.name,partner_ids:0
+#: field:easy.reconcile.simple.partner,partner_ids:0
+#: field:easy.reconcile.simple.reference,partner_ids:0
+msgid "Restrict on partners"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: model:ir.actions.act_window,name:account_easy_reconcile.action_account_easy_reconcile
+#: model:ir.ui.menu,name:account_easy_reconcile.menu_easy_reconcile
+msgid "Easy Automatic Reconcile"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:0
+msgid "Today"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:0
+msgid "Date"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,last_history:0
+msgid "Last History"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+msgid "Configuration"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,reconciled_partial_count:0
+#: field:easy.reconcile.history,partial_line_ids:0
+msgid "Partially Reconciled Items"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_partner
+msgid "easy.reconcile.simple.partner"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,write_off:0
+#: field:easy.reconcile.base,write_off:0
+#: field:easy.reconcile.options,write_off:0
+#: field:easy.reconcile.simple,write_off:0
+#: field:easy.reconcile.simple.name,write_off:0
+#: field:easy.reconcile.simple.partner,write_off:0
+#: field:easy.reconcile.simple.reference,write_off:0
+msgid "Write off allowed"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+msgid "Automatic Easy Reconcile"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,account:0
+#: field:easy.reconcile.base,account_id:0
+#: field:easy.reconcile.simple,account_id:0
+#: field:easy.reconcile.simple.name,account_id:0
+#: field:easy.reconcile.simple.partner,account_id:0
+#: field:easy.reconcile.simple.reference,account_id:0
+msgid "Account"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,task_id:0
+msgid "Task"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,name:0
+msgid "Name"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+msgid "Simple. Amount and Partner"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+msgid "Start Auto Reconcilation"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_name
+msgid "easy.reconcile.simple.name"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,filter:0
+#: field:easy.reconcile.base,filter:0
+#: field:easy.reconcile.options,filter:0
+#: field:easy.reconcile.simple,filter:0
+#: field:easy.reconcile.simple.name,filter:0
+#: field:easy.reconcile.simple.partner,filter:0
+#: field:easy.reconcile.simple.reference,filter:0
+msgid "Filter"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+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_easy_reconcile
+#: field:easy.reconcile.history,easy_reconcile_id:0
+msgid "Reconcile Profile"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile_method
+msgid "reconcile method for account_easy_reconcile"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+msgid "Start Auto Reconciliation"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: code:addons/account_easy_reconcile/easy_reconcile.py:257
+#, python-format
+msgid "Error"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: code:addons/account_easy_reconcile/easy_reconcile.py:258
+#, python-format
+msgid "There is no history of reconciled items on the task: %s."
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+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_easy_reconcile
+#: field:account.easy.reconcile.method,account_lost_id:0
+#: field:easy.reconcile.base,account_lost_id:0
+#: field:easy.reconcile.options,account_lost_id:0
+#: field:easy.reconcile.simple,account_lost_id:0
+#: field:easy.reconcile.simple.name,account_lost_id:0
+#: field:easy.reconcile.simple.partner,account_lost_id:0
+#: field:easy.reconcile.simple.reference,account_lost_id:0
+msgid "Account Lost"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:0
+msgid "Reconciliation Profile"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+#: field:account.easy.reconcile,history_ids:0
+msgid "History"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+#: view:easy.reconcile.history:0
+msgid "Go to reconciled items"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+msgid "Profile Information"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile.method:0
+msgid "Automatic Easy Reconcile Method"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+msgid "Simple. Amount and Reference"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+msgid "Display items partially reconciled on the last run"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,sequence:0
+msgid "Sequence"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple
+msgid "easy.reconcile.simple"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:0
+msgid "Reconciliations of last 7 days"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,date_base_on:0
+#: field:easy.reconcile.base,date_base_on:0
+#: field:easy.reconcile.options,date_base_on:0
+#: field:easy.reconcile.simple,date_base_on:0
+#: field:easy.reconcile.simple.name,date_base_on:0
+#: field:easy.reconcile.simple.partner,date_base_on:0
+#: field:easy.reconcile.simple.reference,date_base_on:0
+msgid "Date of reconciliation"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: code:addons/account_easy_reconcile/easy_reconcile_history.py:111
+#: view:easy.reconcile.history:0
+#: field:easy.reconcile.history,reconcile_partial_ids:0
+#, python-format
+msgid "Partial Reconciliations"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,journal_id:0
+#: field:easy.reconcile.base,journal_id:0
+#: field:easy.reconcile.options,journal_id:0
+#: field:easy.reconcile.simple,journal_id:0
+#: field:easy.reconcile.simple.name,journal_id:0
+#: field:easy.reconcile.simple.partner,journal_id:0
+#: field:easy.reconcile.simple.reference,journal_id:0
+msgid "Journal"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_reference
+msgid "easy.reconcile.simple.reference"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile
+msgid "account easy reconcile"
+msgstr ""
+
From 81058db73dcbefd7fd62bb62ae966f8b61bc8f74 Mon Sep 17 00:00:00 2001
From: unknown
Date: Fri, 14 Mar 2014 11:48:30 +0100
Subject: [PATCH 34/52] [IMP] account_easy_reconcile: Add buttons to open
unreconciled and partially reconciled items
from a profile to easy the verification and controlling
---
account_easy_reconcile/easy_reconcile.py | 53 +++++++++++++++++++++++
account_easy_reconcile/easy_reconcile.xml | 14 ++++--
2 files changed, 63 insertions(+), 4 deletions(-)
diff --git a/account_easy_reconcile/easy_reconcile.py b/account_easy_reconcile/easy_reconcile.py
index 29408eff..6a2c2273 100644
--- a/account_easy_reconcile/easy_reconcile.py
+++ b/account_easy_reconcile/easy_reconcile.py
@@ -22,6 +22,7 @@
from openerp.osv import fields, osv, orm
from openerp.tools.translate import _
from openerp.tools import DEFAULT_SERVER_DATETIME_FORMAT
+from openerp.tools.translate import _
class easy_reconcile_options(orm.AbstractModel):
@@ -264,6 +265,58 @@ class account_easy_reconcile(orm.Model):
_('Error'),
_('There is no history of reconciled '
'items on the task: %s.') % rec.name)
+
+ def _open_move_line_list(sefl, cr, uid, move_line_ids, name, context=None):
+ 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)]),
+ }
+
+ def open_unreconcile(self, cr, uid, ids, context=None):
+ """ Open the view of move line with the unreconciled move lines
+ """
+
+ assert len(ids) == 1 , \
+ "You can only open entries from one profile at a time"
+
+ obj_move_line = self.pool.get('account.move.line')
+ res = {}
+ for task in self.browse(cr, uid, ids, context=context):
+ line_ids = obj_move_line.search(
+ cr, uid,
+ [('account_id', '=', task.account.id),
+ ('reconcile_id', '=', False),
+ ('reconcile_partial_id', '=', False)],
+ context=context)
+
+ name = _('Unreconciled items')
+ return self._open_move_line_list(cr, uid, line_ids, name, context=context)
+
+ def open_partial_reconcile(self, cr, uid, ids, context=None):
+ """ Open the view of move line with the unreconciled move lines
+ """
+
+ assert len(ids) == 1 , \
+ "You can only open entries from one profile at a time"
+
+ obj_move_line = self.pool.get('account.move.line')
+ res = {}
+ for task in self.browse(cr, uid, ids, context=context):
+ line_ids = obj_move_line.search(
+ cr, uid,
+ [('account_id', '=', task.account.id),
+ ('reconcile_id', '=', False),
+ ('reconcile_partial_id', '!=', False)],
+ context=context)
+ name = _('Partial reconciled items')
+ return self._open_move_line_list(cr, uid, line_ids, name, context=context)
def last_history_reconcile(self, cr, uid, rec_id, context=None):
""" Get the last history record for this reconciliation profile
diff --git a/account_easy_reconcile/easy_reconcile.xml b/account_easy_reconcile/easy_reconcile.xml
index cfe66a47..00771b73 100644
--- a/account_easy_reconcile/easy_reconcile.xml
+++ b/account_easy_reconcile/easy_reconcile.xml
@@ -13,11 +13,9 @@
@@ -30,8 +28,16 @@
-
-
+
+
+
+
+
+
+
+
From 289c37012a6e716f8273b42166e9669647f28ad2 Mon Sep 17 00:00:00 2001
From: Launchpad Translations on behalf of banking-addons-team
Date: Sat, 22 Mar 2014 07:11:39 +0000
Subject: [PATCH 35/52] Launchpad automatic translations update.
---
account_advanced_reconcile/i18n/es.po | 98 ++++++
account_advanced_reconcile/i18n/fr.po | 23 +-
account_easy_reconcile/i18n/es.po | 434 ++++++++++++++++++++++++++
account_easy_reconcile/i18n/fr.po | 92 +++---
4 files changed, 595 insertions(+), 52 deletions(-)
create mode 100644 account_advanced_reconcile/i18n/es.po
create mode 100644 account_easy_reconcile/i18n/es.po
diff --git a/account_advanced_reconcile/i18n/es.po b/account_advanced_reconcile/i18n/es.po
new file mode 100644
index 00000000..cc47462f
--- /dev/null
+++ b/account_advanced_reconcile/i18n/es.po
@@ -0,0 +1,98 @@
+# Spanish translation for banking-addons
+# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
+# This file is distributed under the same license as the banking-addons package.
+# FIRST AUTHOR , 2014.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: banking-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2014-01-21 11:54+0000\n"
+"PO-Revision-Date: 2014-06-05 22:30+0000\n"
+"Last-Translator: Pedro Manuel Baeza \n"
+"Language-Team: Spanish \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2014-06-06 06:36+0000\n"
+"X-Generator: Launchpad (build 17031)\n"
+
+#. module: account_advanced_reconcile
+#: field:easy.reconcile.advanced,partner_ids:0
+#: field:easy.reconcile.advanced.ref,partner_ids:0
+msgid "Restrict on partners"
+msgstr "Restringir a las empresas"
+
+#. module: account_advanced_reconcile
+#: field:easy.reconcile.advanced,account_id:0
+#: field:easy.reconcile.advanced.ref,account_id:0
+msgid "Account"
+msgstr "Cuenta"
+
+#. module: account_advanced_reconcile
+#: model:ir.model,name:account_advanced_reconcile.model_account_easy_reconcile_method
+msgid "reconcile method for account_easy_reconcile"
+msgstr "método de conciliación para account_easy_reconcile"
+
+#. module: account_advanced_reconcile
+#: field:easy.reconcile.advanced,journal_id:0
+#: field:easy.reconcile.advanced.ref,journal_id:0
+msgid "Journal"
+msgstr "Diario"
+
+#. module: account_advanced_reconcile
+#: field:easy.reconcile.advanced,account_profit_id:0
+#: field:easy.reconcile.advanced.ref,account_profit_id:0
+msgid "Account Profit"
+msgstr "Cuenta de ganancias"
+
+#. module: account_advanced_reconcile
+#: view:account.easy.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_advanced_reconcile
+#: field:easy.reconcile.advanced,filter:0
+#: field:easy.reconcile.advanced.ref,filter:0
+msgid "Filter"
+msgstr "Filtro"
+
+#. module: account_advanced_reconcile
+#: view:account.easy.reconcile:0
+msgid "Advanced. Partner and Ref"
+msgstr "Avanzado. Empresa y referencia"
+
+#. module: account_advanced_reconcile
+#: field:easy.reconcile.advanced,date_base_on:0
+#: field:easy.reconcile.advanced.ref,date_base_on:0
+msgid "Date of reconciliation"
+msgstr "Fecha de conciliación"
+
+#. module: account_advanced_reconcile
+#: model:ir.model,name:account_advanced_reconcile.model_easy_reconcile_advanced
+msgid "easy.reconcile.advanced"
+msgstr "easy.reconcile.advanced"
+
+#. module: account_advanced_reconcile
+#: field:easy.reconcile.advanced,account_lost_id:0
+#: field:easy.reconcile.advanced.ref,account_lost_id:0
+msgid "Account Lost"
+msgstr "Cuenta de pérdidas"
+
+#. module: account_advanced_reconcile
+#: model:ir.model,name:account_advanced_reconcile.model_easy_reconcile_advanced_ref
+msgid "easy.reconcile.advanced.ref"
+msgstr "easy.reconcile.advanced.ref"
+
+#. module: account_advanced_reconcile
+#: field:easy.reconcile.advanced,write_off:0
+#: field:easy.reconcile.advanced.ref,write_off:0
+msgid "Write off allowed"
+msgstr "Desajuste permitido"
diff --git a/account_advanced_reconcile/i18n/fr.po b/account_advanced_reconcile/i18n/fr.po
index 4a32f6a7..0c3e9eb9 100644
--- a/account_advanced_reconcile/i18n/fr.po
+++ b/account_advanced_reconcile/i18n/fr.po
@@ -6,15 +6,16 @@ msgid ""
msgstr ""
"Project-Id-Version: OpenERP Server 6.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-01-04 08:25+0000\n"
-"PO-Revision-Date: 2013-01-04 09:27+0100\n"
-"Last-Translator: Guewen Baconnier \n"
+"POT-Creation-Date: 2014-01-21 11:54+0000\n"
+"PO-Revision-Date: 2014-03-21 15:24+0000\n"
+"Last-Translator: Guewen Baconnier @ Camptocamp \n"
"Language-Team: \n"
-"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: \n"
+"X-Launchpad-Export-Date: 2014-05-22 06:49+0000\n"
+"X-Generator: Launchpad (build 17017)\n"
+"Language: \n"
#. module: account_advanced_reconcile
#: field:easy.reconcile.advanced,partner_ids:0
@@ -47,8 +48,15 @@ msgstr "Compte de produit"
#. module: account_advanced_reconcile
#: view:account.easy.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."
+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_advanced_reconcile
#: field:easy.reconcile.advanced,filter:0
@@ -88,4 +96,3 @@ msgstr "easy.reconcile.advanced.ref"
#: field:easy.reconcile.advanced.ref,write_off:0
msgid "Write off allowed"
msgstr "Écart autorisé"
-
diff --git a/account_easy_reconcile/i18n/es.po b/account_easy_reconcile/i18n/es.po
new file mode 100644
index 00000000..b4897878
--- /dev/null
+++ b/account_easy_reconcile/i18n/es.po
@@ -0,0 +1,434 @@
+# Spanish translation for banking-addons
+# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
+# This file is distributed under the same license as the banking-addons package.
+# FIRST AUTHOR , 2014.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: banking-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2014-01-21 11:55+0000\n"
+"PO-Revision-Date: 2014-06-05 22:21+0000\n"
+"Last-Translator: Pedro Manuel Baeza \n"
+"Language-Team: Spanish \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2014-06-06 06:36+0000\n"
+"X-Generator: Launchpad (build 17031)\n"
+
+#. module: account_easy_reconcile
+#: code:addons/account_easy_reconcile/easy_reconcile_history.py:101
+#: field:easy.reconcile.history,reconcile_ids:0
+#, python-format
+msgid "Reconciliations"
+msgstr "Conciliaciones"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+#: view:easy.reconcile.history:0
+msgid "Automatic Easy Reconcile History"
+msgstr "Historial de conciliación automática sencilla"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+msgid "Information"
+msgstr "Información"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+#: view:easy.reconcile.history:0
+msgid "Go to partially reconciled items"
+msgstr "Ir a los elementos parcialmente conciliados"
+
+#. module: account_easy_reconcile
+#: help:account.easy.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_easy_reconcile
+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_history
+msgid "easy.reconcile.history"
+msgstr "easy.reconcile.history"
+
+#. module: account_easy_reconcile
+#: model:ir.actions.act_window,help:account_easy_reconcile.action_account_easy_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"
+"Pulse para añadir un pefil de conciliación.\n"
+"
\n"
+"Un perfil de conciliación especifica, para una cuenta, como\n"
+"los apuntes deben ser conciliados.\n"
+"Puede seleccionar uno o varios métodos de conciliación que\n"
+"serán ejecutados secuencialmente para casar los apuntes\n"
+"entre ellos.\n"
+"
\n"
+" "
+
+#. module: account_easy_reconcile
+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_options
+msgid "easy.reconcile.options"
+msgstr "easy.reconcile.options"
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:0
+msgid "Group By..."
+msgstr "Agrupar por..."
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,unreconciled_count:0
+msgid "Unreconciled Items"
+msgstr "Apuntes no conciliados"
+
+#. module: account_easy_reconcile
+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_base
+msgid "easy.reconcile.base"
+msgstr "easy.reconcile.base"
+
+#. module: account_easy_reconcile
+#: field:easy.reconcile.history,reconcile_line_ids:0
+msgid "Reconciled Items"
+msgstr "Elementos conciliados"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,reconcile_method:0
+msgid "Method"
+msgstr "Método"
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:0
+msgid "7 Days"
+msgstr "7 días"
+
+#. module: account_easy_reconcile
+#: model:ir.actions.act_window,name:account_easy_reconcile.action_easy_reconcile_history
+msgid "Easy Automatic Reconcile History"
+msgstr "Historial de la conciliación automática sencilla"
+
+#. module: account_easy_reconcile
+#: field:easy.reconcile.history,date:0
+msgid "Run date"
+msgstr "Fecha ejecucción"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+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_easy_reconcile
+#: model:ir.actions.act_window,name:account_easy_reconcile.act_easy_reconcile_to_history
+msgid "History Details"
+msgstr "Detalles del historial"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+msgid "Display items reconciled on the last run"
+msgstr "Mostrar elementos conciliados en la última ejecucción"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,name:0
+msgid "Type"
+msgstr "Tipo"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,company_id:0
+#: field:account.easy.reconcile.method,company_id:0
+#: field:easy.reconcile.history,company_id:0
+msgid "Company"
+msgstr "Compañía"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,account_profit_id:0
+#: field:easy.reconcile.base,account_profit_id:0
+#: field:easy.reconcile.options,account_profit_id:0
+#: field:easy.reconcile.simple,account_profit_id:0
+#: field:easy.reconcile.simple.name,account_profit_id:0
+#: field:easy.reconcile.simple.partner,account_profit_id:0
+#: field:easy.reconcile.simple.reference,account_profit_id:0
+msgid "Account Profit"
+msgstr "Cuenta de ganancias"
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:0
+msgid "Todays' Reconcilations"
+msgstr "Conciliaciones de hoy"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+msgid "Simple. Amount and Name"
+msgstr "Simple. Cantidad y nombre"
+
+#. module: account_easy_reconcile
+#: field:easy.reconcile.base,partner_ids:0
+#: field:easy.reconcile.simple,partner_ids:0
+#: field:easy.reconcile.simple.name,partner_ids:0
+#: field:easy.reconcile.simple.partner,partner_ids:0
+#: field:easy.reconcile.simple.reference,partner_ids:0
+msgid "Restrict on partners"
+msgstr "Restringir en las empresas"
+
+#. module: account_easy_reconcile
+#: model:ir.actions.act_window,name:account_easy_reconcile.action_account_easy_reconcile
+#: model:ir.ui.menu,name:account_easy_reconcile.menu_easy_reconcile
+msgid "Easy Automatic Reconcile"
+msgstr "Conciliación automática simple"
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:0
+msgid "Today"
+msgstr "Hoy"
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:0
+msgid "Date"
+msgstr "Fecha"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,last_history:0
+msgid "Last History"
+msgstr "Último historial"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+msgid "Configuration"
+msgstr "Configuración"
+
+#. module: account_easy_reconcile
+#: field:easy.reconcile.history,partial_line_ids:0
+msgid "Partially Reconciled Items"
+msgstr "Elementos parcialmente conciliados"
+
+#. module: account_easy_reconcile
+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_partner
+msgid "easy.reconcile.simple.partner"
+msgstr "easy.reconcile.simple.partner"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,write_off:0
+#: field:easy.reconcile.base,write_off:0
+#: field:easy.reconcile.options,write_off:0
+#: field:easy.reconcile.simple,write_off:0
+#: field:easy.reconcile.simple.name,write_off:0
+#: field:easy.reconcile.simple.partner,write_off:0
+#: field:easy.reconcile.simple.reference,write_off:0
+msgid "Write off allowed"
+msgstr "Desajuste permitido"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+msgid "Automatic Easy Reconcile"
+msgstr "Conciliación automática sencilla"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,account:0
+#: field:easy.reconcile.base,account_id:0
+#: field:easy.reconcile.simple,account_id:0
+#: field:easy.reconcile.simple.name,account_id:0
+#: field:easy.reconcile.simple.partner,account_id:0
+#: field:easy.reconcile.simple.reference,account_id:0
+msgid "Account"
+msgstr "Cuenta"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,task_id:0
+msgid "Task"
+msgstr "Tarea"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,name:0
+msgid "Name"
+msgstr "Nombre"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+msgid "Simple. Amount and Partner"
+msgstr "Simple. Cantidad y empresa"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+msgid "Start Auto Reconcilation"
+msgstr "Iniciar conciliación automática"
+
+#. module: account_easy_reconcile
+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_name
+msgid "easy.reconcile.simple.name"
+msgstr "easy.reconcile.simple.name"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,filter:0
+#: field:easy.reconcile.base,filter:0
+#: field:easy.reconcile.options,filter:0
+#: field:easy.reconcile.simple,filter:0
+#: field:easy.reconcile.simple.name,filter:0
+#: field:easy.reconcile.simple.partner,filter:0
+#: field:easy.reconcile.simple.reference,filter:0
+msgid "Filter"
+msgstr "Filtro"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+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_easy_reconcile
+#: field:easy.reconcile.history,easy_reconcile_id:0
+msgid "Reconcile Profile"
+msgstr "Perfil de conciliación"
+
+#. module: account_easy_reconcile
+#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile_method
+msgid "reconcile method for account_easy_reconcile"
+msgstr "Método de conciliación para account_easy_reconcile"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+msgid "Start Auto Reconciliation"
+msgstr "Iniciar auto-conciliación"
+
+#. module: account_easy_reconcile
+#: code:addons/account_easy_reconcile/easy_reconcile.py:233
+#, python-format
+msgid "Error"
+msgstr "Error"
+
+#. module: account_easy_reconcile
+#: code:addons/account_easy_reconcile/easy_reconcile.py:258
+#, 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_easy_reconcile
+#: view:account.easy.reconcile:0
+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_easy_reconcile
+#: field:account.easy.reconcile.method,account_lost_id:0
+#: field:easy.reconcile.base,account_lost_id:0
+#: field:easy.reconcile.options,account_lost_id:0
+#: field:easy.reconcile.simple,account_lost_id:0
+#: field:easy.reconcile.simple.name,account_lost_id:0
+#: field:easy.reconcile.simple.partner,account_lost_id:0
+#: field:easy.reconcile.simple.reference,account_lost_id:0
+msgid "Account Lost"
+msgstr "Cuenta de pérdidas"
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:0
+msgid "Reconciliation Profile"
+msgstr "Perfil de conciliación"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+#: field:account.easy.reconcile,history_ids:0
+msgid "History"
+msgstr "Historial"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+#: view:easy.reconcile.history:0
+msgid "Go to reconciled items"
+msgstr "Ir a los elementos conciliados"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+msgid "Profile Information"
+msgstr "Información del perfil"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile.method:0
+msgid "Automatic Easy Reconcile Method"
+msgstr "Método de conciliación automática sencilla"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+msgid "Simple. Amount and Reference"
+msgstr "Simple. Cantidad y referencia"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+msgid "Display items partially reconciled on the last run"
+msgstr "Mostrar elementos conciliados parcialmente en la última ejecucción"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,sequence:0
+msgid "Sequence"
+msgstr "Secuencia"
+
+#. module: account_easy_reconcile
+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple
+msgid "easy.reconcile.simple"
+msgstr "easy.reconcile.simple"
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:0
+msgid "Reconciliations of last 7 days"
+msgstr "Conciliaciones de los últimos 7 días"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,date_base_on:0
+#: field:easy.reconcile.base,date_base_on:0
+#: field:easy.reconcile.options,date_base_on:0
+#: field:easy.reconcile.simple,date_base_on:0
+#: field:easy.reconcile.simple.name,date_base_on:0
+#: field:easy.reconcile.simple.partner,date_base_on:0
+#: field:easy.reconcile.simple.reference,date_base_on:0
+msgid "Date of reconciliation"
+msgstr "Fecha de conciliación"
+
+#. module: account_easy_reconcile
+#: code:addons/account_easy_reconcile/easy_reconcile_history.py:104
+#: field:easy.reconcile.history,reconcile_partial_ids:0
+#, python-format
+msgid "Partial Reconciliations"
+msgstr "Conciliaciones parciales"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,journal_id:0
+#: field:easy.reconcile.base,journal_id:0
+#: field:easy.reconcile.options,journal_id:0
+#: field:easy.reconcile.simple,journal_id:0
+#: field:easy.reconcile.simple.name,journal_id:0
+#: field:easy.reconcile.simple.partner,journal_id:0
+#: field:easy.reconcile.simple.reference,journal_id:0
+msgid "Journal"
+msgstr "Diario"
+
+#. module: account_easy_reconcile
+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_reference
+msgid "easy.reconcile.simple.reference"
+msgstr "easy.reconcile.simple.reference"
+
+#. module: account_easy_reconcile
+#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile
+msgid "account easy reconcile"
+msgstr "account easy reconcile"
diff --git a/account_easy_reconcile/i18n/fr.po b/account_easy_reconcile/i18n/fr.po
index 947cfbce..431f2c0b 100644
--- a/account_easy_reconcile/i18n/fr.po
+++ b/account_easy_reconcile/i18n/fr.po
@@ -6,19 +6,19 @@ msgid ""
msgstr ""
"Project-Id-Version: OpenERP Server 6.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-01-04 08:39+0000\n"
-"PO-Revision-Date: 2013-01-04 09:55+0100\n"
-"Last-Translator: Guewen Baconnier \n"
+"POT-Creation-Date: 2014-01-21 11:55+0000\n"
+"PO-Revision-Date: 2014-03-21 15:25+0000\n"
+"Last-Translator: Guewen Baconnier @ Camptocamp \n"
"Language-Team: \n"
-"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: \n"
+"X-Launchpad-Export-Date: 2014-05-22 06:49+0000\n"
+"X-Generator: Launchpad (build 17017)\n"
+"Language: \n"
#. module: account_easy_reconcile
#: code:addons/account_easy_reconcile/easy_reconcile_history.py:101
-#: view:easy.reconcile.history:0
#: field:easy.reconcile.history,reconcile_ids:0
#, python-format
msgid "Reconciliations"
@@ -121,8 +121,13 @@ msgstr "Date de lancement"
#. module: account_easy_reconcile
#: view:account.easy.reconcile:0
-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)."
+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_easy_reconcile
#: model:ir.actions.act_window,name:account_easy_reconcile.act_easy_reconcile_to_history
@@ -140,15 +145,11 @@ msgid "Type"
msgstr "Type"
#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,journal_id:0
-#: field:easy.reconcile.base,journal_id:0
-#: field:easy.reconcile.options,journal_id:0
-#: field:easy.reconcile.simple,journal_id:0
-#: field:easy.reconcile.simple.name,journal_id:0
-#: field:easy.reconcile.simple.partner,journal_id:0
-#: field:easy.reconcile.simple.reference,journal_id:0
-msgid "Journal"
-msgstr "Journal"
+#: field:account.easy.reconcile,company_id:0
+#: field:account.easy.reconcile.method,company_id:0
+#: field:easy.reconcile.history,company_id:0
+msgid "Company"
+msgstr ""
#. module: account_easy_reconcile
#: field:account.easy.reconcile.method,account_profit_id:0
@@ -207,7 +208,6 @@ msgid "Configuration"
msgstr "Configuration"
#. module: account_easy_reconcile
-#: field:account.easy.reconcile,reconciled_partial_count:0
#: field:easy.reconcile.history,partial_line_ids:0
msgid "Partially Reconciled Items"
msgstr "Écritures partiellement lettrées"
@@ -281,35 +281,50 @@ msgstr "Filtre"
#. module: account_easy_reconcile
#: view:account.easy.reconcile:0
-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)."
+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_easy_reconcile
#: field:easy.reconcile.history,easy_reconcile_id:0
msgid "Reconcile Profile"
msgstr "Profil de réconciliation"
+#. module: account_easy_reconcile
+#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile_method
+msgid "reconcile method for account_easy_reconcile"
+msgstr "Méthode de lettrage"
+
#. module: account_easy_reconcile
#: view:account.easy.reconcile:0
msgid "Start Auto Reconciliation"
msgstr "Lancer le lettrage automatisé"
#. module: account_easy_reconcile
-#: code:addons/account_easy_reconcile/easy_reconcile.py:250
+#: code:addons/account_easy_reconcile/easy_reconcile.py:233
#, python-format
msgid "Error"
msgstr "Erreur"
#. module: account_easy_reconcile
-#: code:addons/account_easy_reconcile/easy_reconcile.py:251
+#: code:addons/account_easy_reconcile/easy_reconcile.py:258
#, 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_easy_reconcile
#: view:account.easy.reconcile:0
-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)."
+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_easy_reconcile
#: field:account.easy.reconcile.method,account_lost_id:0
@@ -387,16 +402,21 @@ msgstr "Date de lettrage"
#. module: account_easy_reconcile
#: code:addons/account_easy_reconcile/easy_reconcile_history.py:104
-#: view:easy.reconcile.history:0
#: field:easy.reconcile.history,reconcile_partial_ids:0
#, python-format
msgid "Partial Reconciliations"
msgstr "Lettrages partiels"
#. module: account_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile_method
-msgid "reconcile method for account_easy_reconcile"
-msgstr "Méthode de lettrage"
+#: field:account.easy.reconcile.method,journal_id:0
+#: field:easy.reconcile.base,journal_id:0
+#: field:easy.reconcile.options,journal_id:0
+#: field:easy.reconcile.simple,journal_id:0
+#: field:easy.reconcile.simple.name,journal_id:0
+#: field:easy.reconcile.simple.partner,journal_id:0
+#: field:easy.reconcile.simple.reference,journal_id:0
+msgid "Journal"
+msgstr "Journal"
#. module: account_easy_reconcile
#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_reference
@@ -407,19 +427,3 @@ msgstr "easy.reconcile.simple.reference"
#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile
msgid "account easy reconcile"
msgstr "Lettrage automatisé"
-
-#~ msgid "Unreconciled Entries"
-#~ msgstr "Écritures non lettrées"
-
-#, fuzzy
-#~ msgid "Partially Reconciled Entries"
-#~ msgstr "Lettrages partiels"
-
-#~ msgid "Task Information"
-#~ msgstr "Information sur la tâche"
-
-#~ msgid "Reconcile Method"
-#~ msgstr "Méthode de lettrage"
-
-#~ msgid "Log"
-#~ msgstr "Historique"
From d2467d8b69d858d606731c5ee479bbb271678f5e Mon Sep 17 00:00:00 2001
From: "Pedro M. Baeza"
Date: Wed, 2 Jul 2014 12:46:57 +0200
Subject: [PATCH 36/52] Set as uninstallable and moved to __unported__ all
modules.
---
account_advanced_reconcile/__init__.py | 24 -
account_advanced_reconcile/__openerp__.py | 83 ----
.../advanced_reconciliation.py | 118 -----
.../base_advanced_reconciliation.py | 272 -----------
account_advanced_reconcile/easy_reconcile.py | 36 --
.../easy_reconcile_view.xml | 19 -
.../i18n/account_advanced_reconcile.pot | 90 ----
account_advanced_reconcile/i18n/es.po | 98 ----
account_advanced_reconcile/i18n/fr.po | 98 ----
account_easy_reconcile/__init__.py | 25 -
account_easy_reconcile/__openerp__.py | 66 ---
account_easy_reconcile/base_reconciliation.py | 208 ---------
account_easy_reconcile/easy_reconcile.py | 345 --------------
account_easy_reconcile/easy_reconcile.xml | 162 -------
.../easy_reconcile_history.py | 153 ------
.../easy_reconcile_history_view.xml | 98 ----
.../i18n/account_easy_reconcile.pot | 406 ----------------
account_easy_reconcile/i18n/es.po | 434 ------------------
account_easy_reconcile/i18n/fr.po | 429 -----------------
.../security/ir.model.access.csv | 15 -
account_easy_reconcile/security/ir_rule.xml | 25 -
.../simple_reconciliation.py | 120 -----
22 files changed, 3324 deletions(-)
delete mode 100644 account_advanced_reconcile/__init__.py
delete mode 100644 account_advanced_reconcile/__openerp__.py
delete mode 100644 account_advanced_reconcile/advanced_reconciliation.py
delete mode 100644 account_advanced_reconcile/base_advanced_reconciliation.py
delete mode 100644 account_advanced_reconcile/easy_reconcile.py
delete mode 100644 account_advanced_reconcile/easy_reconcile_view.xml
delete mode 100644 account_advanced_reconcile/i18n/account_advanced_reconcile.pot
delete mode 100644 account_advanced_reconcile/i18n/es.po
delete mode 100644 account_advanced_reconcile/i18n/fr.po
delete mode 100755 account_easy_reconcile/__init__.py
delete mode 100755 account_easy_reconcile/__openerp__.py
delete mode 100644 account_easy_reconcile/base_reconciliation.py
delete mode 100644 account_easy_reconcile/easy_reconcile.py
delete mode 100644 account_easy_reconcile/easy_reconcile.xml
delete mode 100644 account_easy_reconcile/easy_reconcile_history.py
delete mode 100644 account_easy_reconcile/easy_reconcile_history_view.xml
delete mode 100644 account_easy_reconcile/i18n/account_easy_reconcile.pot
delete mode 100644 account_easy_reconcile/i18n/es.po
delete mode 100644 account_easy_reconcile/i18n/fr.po
delete mode 100644 account_easy_reconcile/security/ir.model.access.csv
delete mode 100644 account_easy_reconcile/security/ir_rule.xml
delete mode 100644 account_easy_reconcile/simple_reconciliation.py
diff --git a/account_advanced_reconcile/__init__.py b/account_advanced_reconcile/__init__.py
deleted file mode 100644
index 1c643cae..00000000
--- a/account_advanced_reconcile/__init__.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# Author: Guewen Baconnier
-# Copyright 2012 Camptocamp SA
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-
-import easy_reconcile
-import base_advanced_reconciliation
-import advanced_reconciliation
diff --git a/account_advanced_reconcile/__openerp__.py b/account_advanced_reconcile/__openerp__.py
deleted file mode 100644
index 00ec44b4..00000000
--- a/account_advanced_reconcile/__openerp__.py
+++ /dev/null
@@ -1,83 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# Author: Guewen Baconnier
-# Copyright 2012 Camptocamp SA
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-
-{'name': "Advanced Reconcile",
- 'version': '1.0',
- 'author': 'Camptocamp',
- 'maintainer': 'Camptocamp',
- 'category': 'Finance',
- 'complexity': 'normal',
- 'depends': ['account_easy_reconcile',
- ],
- 'description': """
-Advanced reconciliation methods for the module account_easy_reconcile.
-
-In addition to the features implemented in account_easy_reconcile, which are:
- - 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 reconcilation runs with an history
-
-It implements a basis to created advanced reconciliation methods in a few lines
-of code.
-
-Typically, such a method can be:
- - Reconcile Journal items if the partner and the ref are equal
- - Reconcile Journal items if the partner is equal and the ref
- is the same than ref or name
- - Reconcile Journal items if the partner is equal and the ref
- match with a pattern
-
-And they allows:
- - Reconciliations with multiple credit / multiple debit lines
- - Partial reconciliations
- - Write-off amount as well
-
-A method is already implemented in this module, it matches on items:
- - Partner
- - Ref on credit move lines should be case insensitive equals to the ref or
- the name of the debit move line
-
-The base class to find the reconciliations is built to be as efficient as
-possible.
-
-So basically, if you have an invoice with 3 payments (one per month), the first
-month, it will partial reconcile the debit move line with the first payment, the second
-month, it will partial reconcile the debit move line with 2 first payments,
-the third month, it will make the full reconciliation.
-
-This module is perfectly adapted for E-Commerce business where a big volume of
-move lines and so, reconciliations, are involved and payments often come from
-many offices.
-
- """,
- 'website': 'http://www.camptocamp.com',
- 'data': ['easy_reconcile_view.xml'],
- 'test': [],
- 'images': [],
- 'installable': True,
- 'auto_install': False,
- 'license': 'AGPL-3',
- 'application': True,
-}
diff --git a/account_advanced_reconcile/advanced_reconciliation.py b/account_advanced_reconcile/advanced_reconciliation.py
deleted file mode 100644
index 5ac292c1..00000000
--- a/account_advanced_reconcile/advanced_reconciliation.py
+++ /dev/null
@@ -1,118 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# Author: Guewen Baconnier
-# Copyright 2012 Camptocamp SA
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-
-from openerp.osv import orm
-
-
-class easy_reconcile_advanced_ref(orm.TransientModel):
-
- _name = 'easy.reconcile.advanced.ref'
- _inherit = 'easy.reconcile.advanced'
-
- def _skip_line(self, cr, uid, rec, move_line, context=None):
- """
- 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'))
-
- def _matchers(self, cr, uid, rec, move_line, context=None):
- """
- 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()))
-
- def _opposite_matchers(self, cr, uid, rec, move_line, context=None):
- """
- 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_advanced_reconcile/base_advanced_reconciliation.py b/account_advanced_reconcile/base_advanced_reconciliation.py
deleted file mode 100644
index 14177f26..00000000
--- a/account_advanced_reconcile/base_advanced_reconciliation.py
+++ /dev/null
@@ -1,272 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# Author: Guewen Baconnier
-# Copyright 2012 Camptocamp SA
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-
-from itertools import product
-from openerp.osv import orm
-
-
-class easy_reconcile_advanced(orm.AbstractModel):
-
- _name = 'easy.reconcile.advanced'
- _inherit = 'easy.reconcile.base'
-
- def _query_debit(self, cr, uid, rec, context=None):
- """Select all move (debit>0) as candidate. """
- select = self._select(rec)
- sql_from = self._from(rec)
- where, params = self._where(rec)
- where += " AND account_move_line.debit > 0 "
-
- where2, params2 = self._get_filter(cr, uid, rec, context=context)
-
- query = ' '.join((select, sql_from, where, where2))
-
- cr.execute(query, params + params2)
- return cr.dictfetchall()
-
- def _query_credit(self, cr, uid, rec, context=None):
- """Select all move (credit>0) as candidate. """
- select = self._select(rec)
- sql_from = self._from(rec)
- where, params = self._where(rec)
- where += " AND account_move_line.credit > 0 "
-
- where2, params2 = self._get_filter(cr, uid, rec, context=context)
-
- query = ' '.join((select, sql_from, where, where2))
-
- cr.execute(query, params + params2)
- return cr.dictfetchall()
-
- def _matchers(self, cr, uid, rec, move_line, context=None):
- """
- 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
-
- def _opposite_matchers(self, cr, uid, rec, move_line, context=None):
- """
- 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 easy_reconcile_advanced._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 easy_reconcile_advanced._compare_matcher_values(mkey, mvalue, omvalue)
-
- def _compare_opposite(self, cr, uid, rec, move_line, opposite_move_line,
- matchers, context=None):
- """ 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(cr, uid, rec, opposite_move_line,
- context=context)
- 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
-
- def _search_opposites(self, cr, uid, rec, move_line, opposite_move_lines, context=None):
- """
- 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(cr, uid, rec, move_line, context=context)
- return [op for op in opposite_move_lines if
- self._compare_opposite(
- cr, uid, rec, move_line, op, matchers, context=context)]
-
- def _action_rec(self, cr, uid, rec, context=None):
- credit_lines = self._query_credit(cr, uid, rec, context=context)
- debit_lines = self._query_debit(cr, uid, rec, context=context)
- return self._rec_auto_lines_advanced(
- cr, uid, rec, credit_lines, debit_lines, context=context)
-
- def _skip_line(self, cr, uid, rec, move_line, context=None):
- """
- 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
-
- def _rec_auto_lines_advanced(self, cr, uid, rec, credit_lines, debit_lines, context=None):
- """ Advanced reconciliation main loop """
- reconciled_ids = []
- partial_reconciled_ids = []
- reconcile_groups = []
-
- for credit_line in credit_lines:
- if self._skip_line(cr, uid, rec, credit_line, context=context):
- continue
-
- opposite_lines = self._search_opposites(
- cr, uid, rec, credit_line, debit_lines, context=context)
-
- 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]):
- group.update(line_ids)
- break
- else:
- reconcile_groups.append(set(line_ids))
-
- lines_by_id = dict([(l['id'], l) for l in credit_lines + debit_lines])
- for reconcile_group_ids in reconcile_groups:
- group_lines = [lines_by_id[lid] for lid in reconcile_group_ids]
- reconciled, full = self._reconcile_lines(
- cr, uid, rec, group_lines, allow_partial=True, context=context)
- if reconciled and full:
- reconciled_ids += reconcile_group_ids
- elif reconciled:
- partial_reconciled_ids += reconcile_group_ids
-
- return reconciled_ids, partial_reconciled_ids
diff --git a/account_advanced_reconcile/easy_reconcile.py b/account_advanced_reconcile/easy_reconcile.py
deleted file mode 100644
index 5506917b..00000000
--- a/account_advanced_reconcile/easy_reconcile.py
+++ /dev/null
@@ -1,36 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# Author: Guewen Baconnier
-# Copyright 2012 Camptocamp SA
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-
-from openerp.osv import orm
-
-
-class account_easy_reconcile_method(orm.Model):
-
- _inherit = 'account.easy.reconcile.method'
-
- def _get_all_rec_method(self, cr, uid, context=None):
- methods = super(account_easy_reconcile_method, self).\
- _get_all_rec_method(cr, uid, context=context)
- methods += [
- ('easy.reconcile.advanced.ref',
- 'Advanced. Partner and Ref.'),
- ]
- return methods
diff --git a/account_advanced_reconcile/easy_reconcile_view.xml b/account_advanced_reconcile/easy_reconcile_view.xml
deleted file mode 100644
index 7d35927d..00000000
--- a/account_advanced_reconcile/easy_reconcile_view.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
- account.easy.reconcile.form
- account.easy.reconcile
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/account_advanced_reconcile/i18n/account_advanced_reconcile.pot b/account_advanced_reconcile/i18n/account_advanced_reconcile.pot
deleted file mode 100644
index 98382751..00000000
--- a/account_advanced_reconcile/i18n/account_advanced_reconcile.pot
+++ /dev/null
@@ -1,90 +0,0 @@
-# Translation of OpenERP Server.
-# This file contains the translation of the following modules:
-# * account_advanced_reconcile
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: OpenERP Server 7.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-01-21 11:54+0000\n"
-"PO-Revision-Date: 2014-01-21 11:54+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_advanced_reconcile
-#: field:easy.reconcile.advanced,partner_ids:0
-#: field:easy.reconcile.advanced.ref,partner_ids:0
-msgid "Restrict on partners"
-msgstr ""
-
-#. module: account_advanced_reconcile
-#: field:easy.reconcile.advanced,account_id:0
-#: field:easy.reconcile.advanced.ref,account_id:0
-msgid "Account"
-msgstr ""
-
-#. module: account_advanced_reconcile
-#: model:ir.model,name:account_advanced_reconcile.model_account_easy_reconcile_method
-msgid "reconcile method for account_easy_reconcile"
-msgstr ""
-
-#. module: account_advanced_reconcile
-#: field:easy.reconcile.advanced,journal_id:0
-#: field:easy.reconcile.advanced.ref,journal_id:0
-msgid "Journal"
-msgstr ""
-
-#. module: account_advanced_reconcile
-#: field:easy.reconcile.advanced,account_profit_id:0
-#: field:easy.reconcile.advanced.ref,account_profit_id:0
-msgid "Account Profit"
-msgstr ""
-
-#. module: account_advanced_reconcile
-#: view:account.easy.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_advanced_reconcile
-#: field:easy.reconcile.advanced,filter:0
-#: field:easy.reconcile.advanced.ref,filter:0
-msgid "Filter"
-msgstr ""
-
-#. module: account_advanced_reconcile
-#: view:account.easy.reconcile:0
-msgid "Advanced. Partner and Ref"
-msgstr ""
-
-#. module: account_advanced_reconcile
-#: field:easy.reconcile.advanced,date_base_on:0
-#: field:easy.reconcile.advanced.ref,date_base_on:0
-msgid "Date of reconciliation"
-msgstr ""
-
-#. module: account_advanced_reconcile
-#: model:ir.model,name:account_advanced_reconcile.model_easy_reconcile_advanced
-msgid "easy.reconcile.advanced"
-msgstr ""
-
-#. module: account_advanced_reconcile
-#: field:easy.reconcile.advanced,account_lost_id:0
-#: field:easy.reconcile.advanced.ref,account_lost_id:0
-msgid "Account Lost"
-msgstr ""
-
-#. module: account_advanced_reconcile
-#: model:ir.model,name:account_advanced_reconcile.model_easy_reconcile_advanced_ref
-msgid "easy.reconcile.advanced.ref"
-msgstr ""
-
-#. module: account_advanced_reconcile
-#: field:easy.reconcile.advanced,write_off:0
-#: field:easy.reconcile.advanced.ref,write_off:0
-msgid "Write off allowed"
-msgstr ""
-
diff --git a/account_advanced_reconcile/i18n/es.po b/account_advanced_reconcile/i18n/es.po
deleted file mode 100644
index cc47462f..00000000
--- a/account_advanced_reconcile/i18n/es.po
+++ /dev/null
@@ -1,98 +0,0 @@
-# Spanish translation for banking-addons
-# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
-# This file is distributed under the same license as the banking-addons package.
-# FIRST AUTHOR , 2014.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: banking-addons\n"
-"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2014-01-21 11:54+0000\n"
-"PO-Revision-Date: 2014-06-05 22:30+0000\n"
-"Last-Translator: Pedro Manuel Baeza \n"
-"Language-Team: Spanish \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-06-06 06:36+0000\n"
-"X-Generator: Launchpad (build 17031)\n"
-
-#. module: account_advanced_reconcile
-#: field:easy.reconcile.advanced,partner_ids:0
-#: field:easy.reconcile.advanced.ref,partner_ids:0
-msgid "Restrict on partners"
-msgstr "Restringir a las empresas"
-
-#. module: account_advanced_reconcile
-#: field:easy.reconcile.advanced,account_id:0
-#: field:easy.reconcile.advanced.ref,account_id:0
-msgid "Account"
-msgstr "Cuenta"
-
-#. module: account_advanced_reconcile
-#: model:ir.model,name:account_advanced_reconcile.model_account_easy_reconcile_method
-msgid "reconcile method for account_easy_reconcile"
-msgstr "método de conciliación para account_easy_reconcile"
-
-#. module: account_advanced_reconcile
-#: field:easy.reconcile.advanced,journal_id:0
-#: field:easy.reconcile.advanced.ref,journal_id:0
-msgid "Journal"
-msgstr "Diario"
-
-#. module: account_advanced_reconcile
-#: field:easy.reconcile.advanced,account_profit_id:0
-#: field:easy.reconcile.advanced.ref,account_profit_id:0
-msgid "Account Profit"
-msgstr "Cuenta de ganancias"
-
-#. module: account_advanced_reconcile
-#: view:account.easy.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_advanced_reconcile
-#: field:easy.reconcile.advanced,filter:0
-#: field:easy.reconcile.advanced.ref,filter:0
-msgid "Filter"
-msgstr "Filtro"
-
-#. module: account_advanced_reconcile
-#: view:account.easy.reconcile:0
-msgid "Advanced. Partner and Ref"
-msgstr "Avanzado. Empresa y referencia"
-
-#. module: account_advanced_reconcile
-#: field:easy.reconcile.advanced,date_base_on:0
-#: field:easy.reconcile.advanced.ref,date_base_on:0
-msgid "Date of reconciliation"
-msgstr "Fecha de conciliación"
-
-#. module: account_advanced_reconcile
-#: model:ir.model,name:account_advanced_reconcile.model_easy_reconcile_advanced
-msgid "easy.reconcile.advanced"
-msgstr "easy.reconcile.advanced"
-
-#. module: account_advanced_reconcile
-#: field:easy.reconcile.advanced,account_lost_id:0
-#: field:easy.reconcile.advanced.ref,account_lost_id:0
-msgid "Account Lost"
-msgstr "Cuenta de pérdidas"
-
-#. module: account_advanced_reconcile
-#: model:ir.model,name:account_advanced_reconcile.model_easy_reconcile_advanced_ref
-msgid "easy.reconcile.advanced.ref"
-msgstr "easy.reconcile.advanced.ref"
-
-#. module: account_advanced_reconcile
-#: field:easy.reconcile.advanced,write_off:0
-#: field:easy.reconcile.advanced.ref,write_off:0
-msgid "Write off allowed"
-msgstr "Desajuste permitido"
diff --git a/account_advanced_reconcile/i18n/fr.po b/account_advanced_reconcile/i18n/fr.po
deleted file mode 100644
index 0c3e9eb9..00000000
--- a/account_advanced_reconcile/i18n/fr.po
+++ /dev/null
@@ -1,98 +0,0 @@
-# Translation of OpenERP Server.
-# This file contains the translation of the following modules:
-# * account_advanced_reconcile
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: OpenERP Server 6.1\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-01-21 11:54+0000\n"
-"PO-Revision-Date: 2014-03-21 15:24+0000\n"
-"Last-Translator: Guewen Baconnier @ Camptocamp \n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-05-22 06:49+0000\n"
-"X-Generator: Launchpad (build 17017)\n"
-"Language: \n"
-
-#. module: account_advanced_reconcile
-#: field:easy.reconcile.advanced,partner_ids:0
-#: field:easy.reconcile.advanced.ref,partner_ids:0
-msgid "Restrict on partners"
-msgstr "Restriction sur les partenaires"
-
-#. module: account_advanced_reconcile
-#: field:easy.reconcile.advanced,account_id:0
-#: field:easy.reconcile.advanced.ref,account_id:0
-msgid "Account"
-msgstr "Compte"
-
-#. module: account_advanced_reconcile
-#: model:ir.model,name:account_advanced_reconcile.model_account_easy_reconcile_method
-msgid "reconcile method for account_easy_reconcile"
-msgstr "Méthode de lettrage pour le module account_easy_reconcile"
-
-#. module: account_advanced_reconcile
-#: field:easy.reconcile.advanced,journal_id:0
-#: field:easy.reconcile.advanced.ref,journal_id:0
-msgid "Journal"
-msgstr "Journal"
-
-#. module: account_advanced_reconcile
-#: field:easy.reconcile.advanced,account_profit_id:0
-#: field:easy.reconcile.advanced.ref,account_profit_id:0
-msgid "Account Profit"
-msgstr "Compte de produit"
-
-#. module: account_advanced_reconcile
-#: view:account.easy.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_advanced_reconcile
-#: field:easy.reconcile.advanced,filter:0
-#: field:easy.reconcile.advanced.ref,filter:0
-msgid "Filter"
-msgstr "Filtre"
-
-#. module: account_advanced_reconcile
-#: view:account.easy.reconcile:0
-msgid "Advanced. Partner and Ref"
-msgstr "Avancé. Partenaire et Réf."
-
-#. module: account_advanced_reconcile
-#: field:easy.reconcile.advanced,date_base_on:0
-#: field:easy.reconcile.advanced.ref,date_base_on:0
-msgid "Date of reconciliation"
-msgstr "Date de lettrage"
-
-#. module: account_advanced_reconcile
-#: model:ir.model,name:account_advanced_reconcile.model_easy_reconcile_advanced
-msgid "easy.reconcile.advanced"
-msgstr "easy.reconcile.advanced"
-
-#. module: account_advanced_reconcile
-#: field:easy.reconcile.advanced,account_lost_id:0
-#: field:easy.reconcile.advanced.ref,account_lost_id:0
-msgid "Account Lost"
-msgstr "Compte de charge"
-
-#. module: account_advanced_reconcile
-#: model:ir.model,name:account_advanced_reconcile.model_easy_reconcile_advanced_ref
-msgid "easy.reconcile.advanced.ref"
-msgstr "easy.reconcile.advanced.ref"
-
-#. module: account_advanced_reconcile
-#: field:easy.reconcile.advanced,write_off:0
-#: field:easy.reconcile.advanced.ref,write_off:0
-msgid "Write off allowed"
-msgstr "Écart autorisé"
diff --git a/account_easy_reconcile/__init__.py b/account_easy_reconcile/__init__.py
deleted file mode 100755
index b648751f..00000000
--- a/account_easy_reconcile/__init__.py
+++ /dev/null
@@ -1,25 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# Copyright 2012 Camptocamp SA (Guewen Baconnier)
-# Copyright (C) 2010 Sébastien Beau
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-
-import easy_reconcile
-import base_reconciliation
-import simple_reconciliation
-import easy_reconcile_history
diff --git a/account_easy_reconcile/__openerp__.py b/account_easy_reconcile/__openerp__.py
deleted file mode 100755
index a3f22d54..00000000
--- a/account_easy_reconcile/__openerp__.py
+++ /dev/null
@@ -1,66 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# Copyright 2012 Camptocamp SA (Guewen Baconnier)
-# Copyright (C) 2010 Sébastien Beau
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-
-{
- "name": "Easy Reconcile",
- "version": "1.3.0",
- "depends": ["account"],
- "author": "Akretion,Camptocamp",
- "description": """
-Easy 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.
-
-You may be interested to install also the
-``account_advanced_reconciliation`` module.
-This latter add more complex reconciliations,
-allows multiple lines and partial.
-
-""",
- "website": "http://www.akretion.com/",
- "category": "Finance",
- "demo_xml": [],
- "data": ["easy_reconcile.xml",
- "easy_reconcile_history_view.xml",
- "security/ir_rule.xml",
- "security/ir.model.access.csv"],
- 'license': 'AGPL-3',
- "auto_install": False,
- "installable": True,
-
-}
diff --git a/account_easy_reconcile/base_reconciliation.py b/account_easy_reconcile/base_reconciliation.py
deleted file mode 100644
index b50c06b9..00000000
--- a/account_easy_reconcile/base_reconciliation.py
+++ /dev/null
@@ -1,208 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# Copyright 2012-2013 Camptocamp SA (Guewen Baconnier)
-# Copyright (C) 2010 Sébastien Beau
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-
-from openerp.osv import fields, orm
-from operator import itemgetter, attrgetter
-
-
-class easy_reconcile_base(orm.AbstractModel):
- """Abstract Model for reconciliation methods"""
-
- _name = 'easy.reconcile.base'
-
- _inherit = 'easy.reconcile.options'
-
- _columns = {
- 'account_id': fields.many2one(
- 'account.account', 'Account', required=True),
- 'partner_ids': fields.many2many(
- 'res.partner', string="Restrict on partners"),
- # other columns are inherited from easy.reconcile.options
- }
-
- def automatic_reconcile(self, cr, uid, ids, context=None):
- """ Reconciliation method called from the view.
-
- :return: list of reconciled ids, list of partially reconciled items
- """
- if isinstance(ids, (int, long)):
- ids = [ids]
- assert len(ids) == 1, "Has to be called on one id"
- rec = self.browse(cr, uid, ids[0], context=context)
- return self._action_rec(cr, uid, rec, context=context)
-
- def _action_rec(self, cr, uid, rec, context=None):
- """ Must be inherited to implement the reconciliation
-
- :return: list of reconciled ids
- """
- raise NotImplementedError
-
- def _base_columns(self, rec):
- """ Mandatory columns for move lines queries
- An extra column aliased as ``key`` should be defined
- in each query."""
- aml_cols = (
- 'id',
- 'debit',
- 'credit',
- 'date',
- 'period_id',
- 'ref',
- 'name',
- 'partner_id',
- 'account_id',
- 'move_id')
- return ["account_move_line.%s" % col for col in aml_cols]
-
- def _select(self, rec, *args, **kwargs):
- return "SELECT %s" % ', '.join(self._base_columns(rec))
-
- def _from(self, rec, *args, **kwargs):
- return "FROM account_move_line"
-
- def _where(self, rec, *args, **kwargs):
- where = ("WHERE account_move_line.account_id = %s "
- "AND account_move_line.reconcile_id IS NULL ")
- # 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 = [rec.account_id.id]
-
- if rec.partner_ids:
- where += " AND account_move_line.partner_id IN %s"
- params.append(tuple([l.id for l in rec.partner_ids]))
- return where, params
-
- def _get_filter(self, cr, uid, rec, context):
- ml_obj = self.pool.get('account.move.line')
- where = ''
- params = []
- if rec.filter:
- dummy, where, params = ml_obj._where_calc(
- cr, uid, eval(rec.filter), context=context).get_sql()
- if where:
- where = " AND %s" % where
- return where, params
-
- def _below_writeoff_limit(self, cr, uid, rec, lines,
- writeoff_limit, context=None):
- precision = self.pool.get('decimal.precision').precision_get(
- cr, uid, '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
-
- def _get_rec_date(self, cr, uid, rec, lines,
- based_on='end_period_last_credit', context=None):
- period_obj = self.pool.get('account.period')
-
- def last_period(mlines):
- period_ids = [ml['period_id'] for ml in mlines]
- periods = period_obj.browse(
- cr, uid, period_ids, context=context)
- return max(periods, key=attrgetter('date_stop'))
-
- 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 == 'end_period_last_credit':
- return last_period(credit(lines)).date_stop
- if based_on == 'end_period':
- return last_period(lines).date_stop
- elif 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
-
- def _reconcile_lines(self, cr, uid, rec, lines, allow_partial=False, context=None):
- """ 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)
- """
- if context is None:
- context = {}
-
- ml_obj = self.pool.get('account.move.line')
- writeoff = rec.write_off
-
- line_ids = [l['id'] for l in lines]
- below_writeoff, sum_debit, sum_credit = self._below_writeoff_limit(
- cr, uid, rec, lines, writeoff, context=context)
- date = self._get_rec_date(
- cr, uid, rec, lines, rec.date_base_on, context=context)
-
- rec_ctx = dict(context, date_p=date)
- if below_writeoff:
- if sum_credit < sum_debit:
- writeoff_account_id = rec.account_profit_id.id
- else:
- writeoff_account_id = rec.account_lost_id.id
-
- period_id = self.pool.get('account.period').find(
- cr, uid, dt=date, context=context)[0]
-
- ml_obj.reconcile(
- cr, uid,
- line_ids,
- type='auto',
- writeoff_acc_id=writeoff_account_id,
- writeoff_period_id=period_id,
- writeoff_journal_id=rec.journal_id.id,
- context=rec_ctx)
- return True, True
- elif allow_partial:
- ml_obj.reconcile_partial(
- cr, uid,
- line_ids,
- type='manual',
- context=rec_ctx)
- return True, False
-
- return False, False
diff --git a/account_easy_reconcile/easy_reconcile.py b/account_easy_reconcile/easy_reconcile.py
deleted file mode 100644
index 6a2c2273..00000000
--- a/account_easy_reconcile/easy_reconcile.py
+++ /dev/null
@@ -1,345 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# Copyright 2012-2013 Camptocamp SA (Guewen Baconnier)
-# Copyright (C) 2010 Sébastien Beau
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-
-from openerp.osv import fields, osv, orm
-from openerp.tools.translate import _
-from openerp.tools import DEFAULT_SERVER_DATETIME_FORMAT
-from openerp.tools.translate import _
-
-
-class easy_reconcile_options(orm.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 = 'easy.reconcile.options'
-
- def _get_rec_base_date(self, cr, uid, context=None):
- return [('end_period_last_credit', 'End of period of most recent credit'),
- ('newest', 'Most recent move line'),
- ('actual', 'Today'),
- ('end_period', 'End of period of most recent move line'),
- ('newest_credit', 'Date of most recent credit'),
- ('newest_debit', 'Date of most recent debit')]
-
- _columns = {
- 'write_off': fields.float('Write off allowed'),
- 'account_lost_id': fields.many2one(
- 'account.account', 'Account Lost'),
- 'account_profit_id': fields.many2one(
- 'account.account', 'Account Profit'),
- 'journal_id': fields.many2one(
- 'account.journal', 'Journal'),
- 'date_base_on': fields.selection(
- _get_rec_base_date,
- required=True,
- string='Date of reconciliation'),
- 'filter': fields.char('Filter', size=128),
- }
-
- _defaults = {
- 'write_off': 0.,
- 'date_base_on': 'end_period_last_credit',
- }
-
-
-class account_easy_reconcile_method(orm.Model):
-
- _name = 'account.easy.reconcile.method'
- _description = 'reconcile method for account_easy_reconcile'
-
- _inherit = 'easy.reconcile.options'
-
- _order = 'sequence'
-
- def _get_all_rec_method(self, cr, uid, context=None):
- return [
- ('easy.reconcile.simple.name', 'Simple. Amount and Name'),
- ('easy.reconcile.simple.partner', 'Simple. Amount and Partner'),
- ('easy.reconcile.simple.reference', 'Simple. Amount and Reference'),
- ]
-
- def _get_rec_method(self, cr, uid, context=None):
- return self._get_all_rec_method(cr, uid, context=None)
-
- _columns = {
- 'name': fields.selection(
- _get_rec_method, 'Type', required=True),
- 'sequence': fields.integer(
- 'Sequence',
- required=True,
- help="The sequence field is used to order "
- "the reconcile method"),
- 'task_id': fields.many2one(
- 'account.easy.reconcile',
- string='Task',
- required=True,
- ondelete='cascade'),
- 'company_id': fields.related('task_id','company_id',
- relation='res.company',
- type='many2one',
- string='Company',
- store=True,
- readonly=True),
- }
-
- _defaults = {
- 'sequence': 1,
- }
-
- def init(self, cr):
- """ Migration stuff
-
- Name is not anymore methods names but the name
- of the model which does the reconciliation
- """
- cr.execute("""
- UPDATE account_easy_reconcile_method
- SET name = 'easy.reconcile.simple.partner'
- WHERE name = 'action_rec_auto_partner'
- """)
- cr.execute("""
- UPDATE account_easy_reconcile_method
- SET name = 'easy.reconcile.simple.name'
- WHERE name = 'action_rec_auto_name'
- """)
-
-
-class account_easy_reconcile(orm.Model):
-
- _name = 'account.easy.reconcile'
- _description = 'account easy reconcile'
-
- def _get_total_unrec(self, cr, uid, ids, name, arg, context=None):
- obj_move_line = self.pool.get('account.move.line')
- res = {}
- for task in self.browse(cr, uid, ids, context=context):
- res[task.id] = len(obj_move_line.search(
- cr, uid,
- [('account_id', '=', task.account.id),
- ('reconcile_id', '=', False),
- ('reconcile_partial_id', '=', False)],
- context=context))
- return res
-
- def _get_partial_rec(self, cr, uid, ids, name, arg, context=None):
- obj_move_line = self.pool.get('account.move.line')
- res = {}
- for task in self.browse(cr, uid, ids, context=context):
- res[task.id] = len(obj_move_line.search(
- cr, uid,
- [('account_id', '=', task.account.id),
- ('reconcile_id', '=', False),
- ('reconcile_partial_id', '!=', False)],
- context=context))
- return res
-
- def _last_history(self, cr, uid, ids, name, args, context=None):
- result = {}
- for history in self.browse(cr, uid, ids, context=context):
- result[history.id] = False
- if history.history_ids:
- # history is sorted by date desc
- result[history.id] = history.history_ids[0].id
- return result
-
- _columns = {
- 'name': fields.char('Name', required=True),
- 'account': fields.many2one(
- 'account.account', 'Account', required=True),
- 'reconcile_method': fields.one2many(
- 'account.easy.reconcile.method', 'task_id', 'Method'),
- 'unreconciled_count': fields.function(
- _get_total_unrec, type='integer', string='Unreconciled Items'),
- 'reconciled_partial_count': fields.function(
- _get_partial_rec,
- type='integer',
- string='Partially Reconciled Items'),
- 'history_ids': fields.one2many(
- 'easy.reconcile.history',
- 'easy_reconcile_id',
- string='History',
- readonly=True),
- 'last_history':
- fields.function(
- _last_history,
- string='Last History',
- type='many2one',
- relation='easy.reconcile.history',
- readonly=True),
- 'company_id': fields.many2one('res.company', 'Company'),
- }
-
- def copy_data(self, cr, uid, id, default=None, context=None):
- if default is None:
- default = {}
- default = dict(default, rec_log=False)
- return super(account_easy_reconcile, self).copy_data(
- cr, uid, id, default=default, context=context)
-
- def _prepare_run_transient(self, cr, uid, rec_method, context=None):
- return {'account_id': rec_method.task_id.account.id,
- 'write_off': rec_method.write_off,
- 'account_lost_id': (rec_method.account_lost_id and
- rec_method.account_lost_id.id),
- 'account_profit_id': (rec_method.account_profit_id and
- rec_method.account_profit_id.id),
- 'journal_id': (rec_method.journal_id and
- rec_method.journal_id.id),
- 'date_base_on': rec_method.date_base_on,
- 'filter': rec_method.filter}
-
- def run_reconcile(self, cr, uid, ids, context=None):
- 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")
- cr.execute(sql, (tuple(move_line_ids),))
- res = cr.fetchall()
- return [row[0] for row in res]
-
- for rec in self.browse(cr, uid, ids, context=context):
- all_ml_rec_ids = []
- all_ml_partial_ids = []
-
- for method in rec.reconcile_method:
- rec_model = self.pool.get(method.name)
- auto_rec_id = rec_model.create(
- cr, uid,
- self._prepare_run_transient(
- cr, uid, method, context=context),
- context=context)
-
- ml_rec_ids, ml_partial_ids = rec_model.automatic_reconcile(
- cr, uid, auto_rec_id, context=context)
-
- all_ml_rec_ids += ml_rec_ids
- all_ml_partial_ids += ml_partial_ids
-
- reconcile_ids = find_reconcile_ids(
- 'reconcile_id', all_ml_rec_ids)
- partial_ids = find_reconcile_ids(
- 'reconcile_partial_id', all_ml_partial_ids)
-
- self.pool.get('easy.reconcile.history').create(
- cr,
- uid,
- {'easy_reconcile_id': rec.id,
- 'date': fields.datetime.now(),
- 'reconcile_ids': [(4, rid) for rid in reconcile_ids],
- 'reconcile_partial_ids': [(4, rid) for rid in partial_ids]},
- context=context)
- return True
-
- def _no_history(self, cr, uid, rec, context=None):
- """ Raise an `osv.except_osv` error, supposed to
- be called when there is no history on the reconciliation
- task.
- """
- raise osv.except_osv(
- _('Error'),
- _('There is no history of reconciled '
- 'items on the task: %s.') % rec.name)
-
- def _open_move_line_list(sefl, cr, uid, move_line_ids, name, context=None):
- 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)]),
- }
-
- def open_unreconcile(self, cr, uid, ids, context=None):
- """ Open the view of move line with the unreconciled move lines
- """
-
- assert len(ids) == 1 , \
- "You can only open entries from one profile at a time"
-
- obj_move_line = self.pool.get('account.move.line')
- res = {}
- for task in self.browse(cr, uid, ids, context=context):
- line_ids = obj_move_line.search(
- cr, uid,
- [('account_id', '=', task.account.id),
- ('reconcile_id', '=', False),
- ('reconcile_partial_id', '=', False)],
- context=context)
-
- name = _('Unreconciled items')
- return self._open_move_line_list(cr, uid, line_ids, name, context=context)
-
- def open_partial_reconcile(self, cr, uid, ids, context=None):
- """ Open the view of move line with the unreconciled move lines
- """
-
- assert len(ids) == 1 , \
- "You can only open entries from one profile at a time"
-
- obj_move_line = self.pool.get('account.move.line')
- res = {}
- for task in self.browse(cr, uid, ids, context=context):
- line_ids = obj_move_line.search(
- cr, uid,
- [('account_id', '=', task.account.id),
- ('reconcile_id', '=', False),
- ('reconcile_partial_id', '!=', False)],
- context=context)
- name = _('Partial reconciled items')
- return self._open_move_line_list(cr, uid, line_ids, name, context=context)
-
- def last_history_reconcile(self, cr, uid, rec_id, context=None):
- """ Get the last history record for this reconciliation profile
- and return the action which opens move lines reconciled
- """
- if isinstance(rec_id, (tuple, list)):
- assert len(rec_id) == 1, \
- "Only 1 id expected"
- rec_id = rec_id[0]
- rec = self.browse(cr, uid, rec_id, context=context)
- if not rec.last_history:
- self._no_history(cr, uid, rec, context=context)
- return rec.last_history.open_reconcile()
-
- def last_history_partial(self, cr, uid, rec_id, context=None):
- """ Get the last history record for this reconciliation profile
- and return the action which opens move lines reconciled
- """
- if isinstance(rec_id, (tuple, list)):
- assert len(rec_id) == 1, \
- "Only 1 id expected"
- rec_id = rec_id[0]
- rec = self.browse(cr, uid, rec_id, context=context)
- if not rec.last_history:
- self._no_history(cr, uid, rec, context=context)
- return rec.last_history.open_partial()
diff --git a/account_easy_reconcile/easy_reconcile.xml b/account_easy_reconcile/easy_reconcile.xml
deleted file mode 100644
index 00771b73..00000000
--- a/account_easy_reconcile/easy_reconcile.xml
+++ /dev/null
@@ -1,162 +0,0 @@
-
-
-
-
-
-
- account.easy.reconcile.form
- 20
- account.easy.reconcile
-
-
- A reconciliation profile specifies, for one account, how
- the entries should be reconciled.
- You can select one or many reconciliation methods which will
- be run sequentially to match the entries between them.
-
-
-
-
-
- account.easy.reconcile.method.tree
- 20
- account.easy.reconcile.method
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/account_easy_reconcile/easy_reconcile_history.py b/account_easy_reconcile/easy_reconcile_history.py
deleted file mode 100644
index b143e9ce..00000000
--- a/account_easy_reconcile/easy_reconcile_history.py
+++ /dev/null
@@ -1,153 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# Author: Guewen Baconnier
-# Copyright 2012 Camptocamp SA
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-
-from openerp.osv import orm, fields
-from openerp.tools.translate import _
-
-
-class easy_reconcile_history(orm.Model):
- """ Store an history of the runs per profile
- Each history stores the list of reconciliations done"""
-
- _name = 'easy.reconcile.history'
- _rec_name = 'easy_reconcile_id'
- _order = 'date DESC'
-
- def _reconcile_line_ids(self, cr, uid, ids, name, args, context=None):
- result = {}
-
- for history in self.browse(cr, uid, ids, context=context):
- result[history.id] = {}
-
- move_line_ids = []
- for reconcile in history.reconcile_ids:
- move_line_ids += [line.id
- for line
- in reconcile.line_id]
- result[history.id]['reconcile_line_ids'] = move_line_ids
-
- move_line_ids = []
- for reconcile in history.reconcile_partial_ids:
- move_line_ids += [line.id
- for line
- in reconcile.line_partial_ids]
- result[history.id]['partial_line_ids'] = move_line_ids
-
- return result
-
- _columns = {
- 'easy_reconcile_id': fields.many2one(
- 'account.easy.reconcile', 'Reconcile Profile', readonly=True),
- 'date': fields.datetime('Run date', readonly=True),
- 'reconcile_ids': fields.many2many(
- 'account.move.reconcile',
- 'account_move_reconcile_history_rel',
- string='Reconciliations', readonly=True),
- 'reconcile_partial_ids': fields.many2many(
- 'account.move.reconcile',
- 'account_move_reconcile_history_partial_rel',
- string='Partial Reconciliations', readonly=True),
- 'reconcile_line_ids':
- fields.function(
- _reconcile_line_ids,
- string='Reconciled Items',
- type='many2many',
- relation='account.move.line',
- readonly=True,
- multi='lines'),
- 'partial_line_ids':
- fields.function(
- _reconcile_line_ids,
- string='Partially Reconciled Items',
- type='many2many',
- relation='account.move.line',
- readonly=True,
- multi='lines'),
- 'company_id': fields.related('easy_reconcile_id','company_id',
- relation='res.company',
- type='many2one',
- string='Company',
- store=True,
- readonly=True),
-
- }
-
- def _open_move_lines(self, cr, uid, history_id, rec_type='full', context=None):
- """ For an history record, open the view of move line with
- the reconciled or partially reconciled move lines
-
- :param history_id: id of the history
- :param rec_type: 'full' or 'partial'
- :return: action to open the move lines
- """
- assert rec_type in ('full', 'partial'), \
- "rec_type must be 'full' or 'partial'"
-
- history = self.browse(cr, uid, history_id, context=context)
-
- if rec_type == 'full':
- field = 'reconcile_line_ids'
- name = _('Reconciliations')
- else:
- field = 'partial_line_ids'
- name = _('Partial Reconciliations')
-
- move_line_ids = [line.id for line in getattr(history, field)]
-
- 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)]),
- }
-
- def open_reconcile(self, cr, uid, history_ids, context=None):
- """ 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.
- """
- if isinstance(history_ids, (tuple, list)):
- assert len(history_ids) == 1, "only 1 ID is accepted"
- history_ids = history_ids[0]
- return self._open_move_lines(
- cr, uid, history_ids, rec_type='full', context=None)
-
- def open_partial(self, cr, uid, history_ids, context=None):
- """ For an history record, open the view of move line
- with the partially 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.
- """
- if isinstance(history_ids, (tuple, list)):
- assert len(history_ids) == 1, "only 1 ID is accepted"
- history_ids = history_ids[0]
- return self._open_move_lines(
- cr, uid, history_ids, rec_type='partial', context=None)
diff --git a/account_easy_reconcile/easy_reconcile_history_view.xml b/account_easy_reconcile/easy_reconcile_history_view.xml
deleted file mode 100644
index ceaf49b5..00000000
--- a/account_easy_reconcile/easy_reconcile_history_view.xml
+++ /dev/null
@@ -1,98 +0,0 @@
-
-
-
-
-
- easy.reconcile.history.search
- easy.reconcile.history
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- easy.reconcile.history.form
- easy.reconcile.history
-
-
\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_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_options
-msgid "easy.reconcile.options"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:0
-msgid "Group By..."
-msgstr ""
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,unreconciled_count:0
-msgid "Unreconciled Items"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_base
-msgid "easy.reconcile.base"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: field:easy.reconcile.history,reconcile_line_ids:0
-msgid "Reconciled Items"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,reconcile_method:0
-msgid "Method"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:0
-msgid "7 Days"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: model:ir.actions.act_window,name:account_easy_reconcile.action_easy_reconcile_history
-msgid "Easy Automatic Reconcile History"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: field:easy.reconcile.history,date:0
-msgid "Run date"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-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_easy_reconcile
-#: model:ir.actions.act_window,name:account_easy_reconcile.act_easy_reconcile_to_history
-msgid "History Details"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Display items reconciled on the last run"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,name:0
-msgid "Type"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,company_id:0
-#: field:account.easy.reconcile.method,company_id:0
-#: field:easy.reconcile.history,company_id:0
-msgid "Company"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,account_profit_id:0
-#: field:easy.reconcile.base,account_profit_id:0
-#: field:easy.reconcile.options,account_profit_id:0
-#: field:easy.reconcile.simple,account_profit_id:0
-#: field:easy.reconcile.simple.name,account_profit_id:0
-#: field:easy.reconcile.simple.partner,account_profit_id:0
-#: field:easy.reconcile.simple.reference,account_profit_id:0
-msgid "Account Profit"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:0
-msgid "Todays' Reconcilations"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Simple. Amount and Name"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: field:easy.reconcile.base,partner_ids:0
-#: field:easy.reconcile.simple,partner_ids:0
-#: field:easy.reconcile.simple.name,partner_ids:0
-#: field:easy.reconcile.simple.partner,partner_ids:0
-#: field:easy.reconcile.simple.reference,partner_ids:0
-msgid "Restrict on partners"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: model:ir.actions.act_window,name:account_easy_reconcile.action_account_easy_reconcile
-#: model:ir.ui.menu,name:account_easy_reconcile.menu_easy_reconcile
-msgid "Easy Automatic Reconcile"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:0
-msgid "Today"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:0
-msgid "Date"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,last_history:0
-msgid "Last History"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Configuration"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,reconciled_partial_count:0
-#: field:easy.reconcile.history,partial_line_ids:0
-msgid "Partially Reconciled Items"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_partner
-msgid "easy.reconcile.simple.partner"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,write_off:0
-#: field:easy.reconcile.base,write_off:0
-#: field:easy.reconcile.options,write_off:0
-#: field:easy.reconcile.simple,write_off:0
-#: field:easy.reconcile.simple.name,write_off:0
-#: field:easy.reconcile.simple.partner,write_off:0
-#: field:easy.reconcile.simple.reference,write_off:0
-msgid "Write off allowed"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Automatic Easy Reconcile"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,account:0
-#: field:easy.reconcile.base,account_id:0
-#: field:easy.reconcile.simple,account_id:0
-#: field:easy.reconcile.simple.name,account_id:0
-#: field:easy.reconcile.simple.partner,account_id:0
-#: field:easy.reconcile.simple.reference,account_id:0
-msgid "Account"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,task_id:0
-msgid "Task"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,name:0
-msgid "Name"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Simple. Amount and Partner"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Start Auto Reconcilation"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_name
-msgid "easy.reconcile.simple.name"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,filter:0
-#: field:easy.reconcile.base,filter:0
-#: field:easy.reconcile.options,filter:0
-#: field:easy.reconcile.simple,filter:0
-#: field:easy.reconcile.simple.name,filter:0
-#: field:easy.reconcile.simple.partner,filter:0
-#: field:easy.reconcile.simple.reference,filter:0
-msgid "Filter"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-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_easy_reconcile
-#: field:easy.reconcile.history,easy_reconcile_id:0
-msgid "Reconcile Profile"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile_method
-msgid "reconcile method for account_easy_reconcile"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Start Auto Reconciliation"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: code:addons/account_easy_reconcile/easy_reconcile.py:257
-#, python-format
-msgid "Error"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: code:addons/account_easy_reconcile/easy_reconcile.py:258
-#, python-format
-msgid "There is no history of reconciled items on the task: %s."
-msgstr ""
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-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_easy_reconcile
-#: field:account.easy.reconcile.method,account_lost_id:0
-#: field:easy.reconcile.base,account_lost_id:0
-#: field:easy.reconcile.options,account_lost_id:0
-#: field:easy.reconcile.simple,account_lost_id:0
-#: field:easy.reconcile.simple.name,account_lost_id:0
-#: field:easy.reconcile.simple.partner,account_lost_id:0
-#: field:easy.reconcile.simple.reference,account_lost_id:0
-msgid "Account Lost"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:0
-msgid "Reconciliation Profile"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-#: field:account.easy.reconcile,history_ids:0
-msgid "History"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-#: view:easy.reconcile.history:0
-msgid "Go to reconciled items"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Profile Information"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile.method:0
-msgid "Automatic Easy Reconcile Method"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Simple. Amount and Reference"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Display items partially reconciled on the last run"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,sequence:0
-msgid "Sequence"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple
-msgid "easy.reconcile.simple"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:0
-msgid "Reconciliations of last 7 days"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,date_base_on:0
-#: field:easy.reconcile.base,date_base_on:0
-#: field:easy.reconcile.options,date_base_on:0
-#: field:easy.reconcile.simple,date_base_on:0
-#: field:easy.reconcile.simple.name,date_base_on:0
-#: field:easy.reconcile.simple.partner,date_base_on:0
-#: field:easy.reconcile.simple.reference,date_base_on:0
-msgid "Date of reconciliation"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: code:addons/account_easy_reconcile/easy_reconcile_history.py:111
-#: view:easy.reconcile.history:0
-#: field:easy.reconcile.history,reconcile_partial_ids:0
-#, python-format
-msgid "Partial Reconciliations"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,journal_id:0
-#: field:easy.reconcile.base,journal_id:0
-#: field:easy.reconcile.options,journal_id:0
-#: field:easy.reconcile.simple,journal_id:0
-#: field:easy.reconcile.simple.name,journal_id:0
-#: field:easy.reconcile.simple.partner,journal_id:0
-#: field:easy.reconcile.simple.reference,journal_id:0
-msgid "Journal"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_reference
-msgid "easy.reconcile.simple.reference"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile
-msgid "account easy reconcile"
-msgstr ""
-
diff --git a/account_easy_reconcile/i18n/es.po b/account_easy_reconcile/i18n/es.po
deleted file mode 100644
index b4897878..00000000
--- a/account_easy_reconcile/i18n/es.po
+++ /dev/null
@@ -1,434 +0,0 @@
-# Spanish translation for banking-addons
-# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
-# This file is distributed under the same license as the banking-addons package.
-# FIRST AUTHOR , 2014.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: banking-addons\n"
-"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2014-01-21 11:55+0000\n"
-"PO-Revision-Date: 2014-06-05 22:21+0000\n"
-"Last-Translator: Pedro Manuel Baeza \n"
-"Language-Team: Spanish \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-06-06 06:36+0000\n"
-"X-Generator: Launchpad (build 17031)\n"
-
-#. module: account_easy_reconcile
-#: code:addons/account_easy_reconcile/easy_reconcile_history.py:101
-#: field:easy.reconcile.history,reconcile_ids:0
-#, python-format
-msgid "Reconciliations"
-msgstr "Conciliaciones"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-#: view:easy.reconcile.history:0
-msgid "Automatic Easy Reconcile History"
-msgstr "Historial de conciliación automática sencilla"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Information"
-msgstr "Información"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-#: view:easy.reconcile.history:0
-msgid "Go to partially reconciled items"
-msgstr "Ir a los elementos parcialmente conciliados"
-
-#. module: account_easy_reconcile
-#: help:account.easy.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_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_history
-msgid "easy.reconcile.history"
-msgstr "easy.reconcile.history"
-
-#. module: account_easy_reconcile
-#: model:ir.actions.act_window,help:account_easy_reconcile.action_account_easy_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"
-"Pulse para añadir un pefil de conciliación.\n"
-"
\n"
-"Un perfil de conciliación especifica, para una cuenta, como\n"
-"los apuntes deben ser conciliados.\n"
-"Puede seleccionar uno o varios métodos de conciliación que\n"
-"serán ejecutados secuencialmente para casar los apuntes\n"
-"entre ellos.\n"
-"
\n"
-" "
-
-#. module: account_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_options
-msgid "easy.reconcile.options"
-msgstr "easy.reconcile.options"
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:0
-msgid "Group By..."
-msgstr "Agrupar por..."
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,unreconciled_count:0
-msgid "Unreconciled Items"
-msgstr "Apuntes no conciliados"
-
-#. module: account_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_base
-msgid "easy.reconcile.base"
-msgstr "easy.reconcile.base"
-
-#. module: account_easy_reconcile
-#: field:easy.reconcile.history,reconcile_line_ids:0
-msgid "Reconciled Items"
-msgstr "Elementos conciliados"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,reconcile_method:0
-msgid "Method"
-msgstr "Método"
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:0
-msgid "7 Days"
-msgstr "7 días"
-
-#. module: account_easy_reconcile
-#: model:ir.actions.act_window,name:account_easy_reconcile.action_easy_reconcile_history
-msgid "Easy Automatic Reconcile History"
-msgstr "Historial de la conciliación automática sencilla"
-
-#. module: account_easy_reconcile
-#: field:easy.reconcile.history,date:0
-msgid "Run date"
-msgstr "Fecha ejecucción"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-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_easy_reconcile
-#: model:ir.actions.act_window,name:account_easy_reconcile.act_easy_reconcile_to_history
-msgid "History Details"
-msgstr "Detalles del historial"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Display items reconciled on the last run"
-msgstr "Mostrar elementos conciliados en la última ejecucción"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,name:0
-msgid "Type"
-msgstr "Tipo"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,company_id:0
-#: field:account.easy.reconcile.method,company_id:0
-#: field:easy.reconcile.history,company_id:0
-msgid "Company"
-msgstr "Compañía"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,account_profit_id:0
-#: field:easy.reconcile.base,account_profit_id:0
-#: field:easy.reconcile.options,account_profit_id:0
-#: field:easy.reconcile.simple,account_profit_id:0
-#: field:easy.reconcile.simple.name,account_profit_id:0
-#: field:easy.reconcile.simple.partner,account_profit_id:0
-#: field:easy.reconcile.simple.reference,account_profit_id:0
-msgid "Account Profit"
-msgstr "Cuenta de ganancias"
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:0
-msgid "Todays' Reconcilations"
-msgstr "Conciliaciones de hoy"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Simple. Amount and Name"
-msgstr "Simple. Cantidad y nombre"
-
-#. module: account_easy_reconcile
-#: field:easy.reconcile.base,partner_ids:0
-#: field:easy.reconcile.simple,partner_ids:0
-#: field:easy.reconcile.simple.name,partner_ids:0
-#: field:easy.reconcile.simple.partner,partner_ids:0
-#: field:easy.reconcile.simple.reference,partner_ids:0
-msgid "Restrict on partners"
-msgstr "Restringir en las empresas"
-
-#. module: account_easy_reconcile
-#: model:ir.actions.act_window,name:account_easy_reconcile.action_account_easy_reconcile
-#: model:ir.ui.menu,name:account_easy_reconcile.menu_easy_reconcile
-msgid "Easy Automatic Reconcile"
-msgstr "Conciliación automática simple"
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:0
-msgid "Today"
-msgstr "Hoy"
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:0
-msgid "Date"
-msgstr "Fecha"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,last_history:0
-msgid "Last History"
-msgstr "Último historial"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Configuration"
-msgstr "Configuración"
-
-#. module: account_easy_reconcile
-#: field:easy.reconcile.history,partial_line_ids:0
-msgid "Partially Reconciled Items"
-msgstr "Elementos parcialmente conciliados"
-
-#. module: account_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_partner
-msgid "easy.reconcile.simple.partner"
-msgstr "easy.reconcile.simple.partner"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,write_off:0
-#: field:easy.reconcile.base,write_off:0
-#: field:easy.reconcile.options,write_off:0
-#: field:easy.reconcile.simple,write_off:0
-#: field:easy.reconcile.simple.name,write_off:0
-#: field:easy.reconcile.simple.partner,write_off:0
-#: field:easy.reconcile.simple.reference,write_off:0
-msgid "Write off allowed"
-msgstr "Desajuste permitido"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Automatic Easy Reconcile"
-msgstr "Conciliación automática sencilla"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,account:0
-#: field:easy.reconcile.base,account_id:0
-#: field:easy.reconcile.simple,account_id:0
-#: field:easy.reconcile.simple.name,account_id:0
-#: field:easy.reconcile.simple.partner,account_id:0
-#: field:easy.reconcile.simple.reference,account_id:0
-msgid "Account"
-msgstr "Cuenta"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,task_id:0
-msgid "Task"
-msgstr "Tarea"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,name:0
-msgid "Name"
-msgstr "Nombre"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Simple. Amount and Partner"
-msgstr "Simple. Cantidad y empresa"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Start Auto Reconcilation"
-msgstr "Iniciar conciliación automática"
-
-#. module: account_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_name
-msgid "easy.reconcile.simple.name"
-msgstr "easy.reconcile.simple.name"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,filter:0
-#: field:easy.reconcile.base,filter:0
-#: field:easy.reconcile.options,filter:0
-#: field:easy.reconcile.simple,filter:0
-#: field:easy.reconcile.simple.name,filter:0
-#: field:easy.reconcile.simple.partner,filter:0
-#: field:easy.reconcile.simple.reference,filter:0
-msgid "Filter"
-msgstr "Filtro"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-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_easy_reconcile
-#: field:easy.reconcile.history,easy_reconcile_id:0
-msgid "Reconcile Profile"
-msgstr "Perfil de conciliación"
-
-#. module: account_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile_method
-msgid "reconcile method for account_easy_reconcile"
-msgstr "Método de conciliación para account_easy_reconcile"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Start Auto Reconciliation"
-msgstr "Iniciar auto-conciliación"
-
-#. module: account_easy_reconcile
-#: code:addons/account_easy_reconcile/easy_reconcile.py:233
-#, python-format
-msgid "Error"
-msgstr "Error"
-
-#. module: account_easy_reconcile
-#: code:addons/account_easy_reconcile/easy_reconcile.py:258
-#, 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_easy_reconcile
-#: view:account.easy.reconcile:0
-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_easy_reconcile
-#: field:account.easy.reconcile.method,account_lost_id:0
-#: field:easy.reconcile.base,account_lost_id:0
-#: field:easy.reconcile.options,account_lost_id:0
-#: field:easy.reconcile.simple,account_lost_id:0
-#: field:easy.reconcile.simple.name,account_lost_id:0
-#: field:easy.reconcile.simple.partner,account_lost_id:0
-#: field:easy.reconcile.simple.reference,account_lost_id:0
-msgid "Account Lost"
-msgstr "Cuenta de pérdidas"
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:0
-msgid "Reconciliation Profile"
-msgstr "Perfil de conciliación"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-#: field:account.easy.reconcile,history_ids:0
-msgid "History"
-msgstr "Historial"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-#: view:easy.reconcile.history:0
-msgid "Go to reconciled items"
-msgstr "Ir a los elementos conciliados"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Profile Information"
-msgstr "Información del perfil"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile.method:0
-msgid "Automatic Easy Reconcile Method"
-msgstr "Método de conciliación automática sencilla"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Simple. Amount and Reference"
-msgstr "Simple. Cantidad y referencia"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Display items partially reconciled on the last run"
-msgstr "Mostrar elementos conciliados parcialmente en la última ejecucción"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,sequence:0
-msgid "Sequence"
-msgstr "Secuencia"
-
-#. module: account_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple
-msgid "easy.reconcile.simple"
-msgstr "easy.reconcile.simple"
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:0
-msgid "Reconciliations of last 7 days"
-msgstr "Conciliaciones de los últimos 7 días"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,date_base_on:0
-#: field:easy.reconcile.base,date_base_on:0
-#: field:easy.reconcile.options,date_base_on:0
-#: field:easy.reconcile.simple,date_base_on:0
-#: field:easy.reconcile.simple.name,date_base_on:0
-#: field:easy.reconcile.simple.partner,date_base_on:0
-#: field:easy.reconcile.simple.reference,date_base_on:0
-msgid "Date of reconciliation"
-msgstr "Fecha de conciliación"
-
-#. module: account_easy_reconcile
-#: code:addons/account_easy_reconcile/easy_reconcile_history.py:104
-#: field:easy.reconcile.history,reconcile_partial_ids:0
-#, python-format
-msgid "Partial Reconciliations"
-msgstr "Conciliaciones parciales"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,journal_id:0
-#: field:easy.reconcile.base,journal_id:0
-#: field:easy.reconcile.options,journal_id:0
-#: field:easy.reconcile.simple,journal_id:0
-#: field:easy.reconcile.simple.name,journal_id:0
-#: field:easy.reconcile.simple.partner,journal_id:0
-#: field:easy.reconcile.simple.reference,journal_id:0
-msgid "Journal"
-msgstr "Diario"
-
-#. module: account_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_reference
-msgid "easy.reconcile.simple.reference"
-msgstr "easy.reconcile.simple.reference"
-
-#. module: account_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile
-msgid "account easy reconcile"
-msgstr "account easy reconcile"
diff --git a/account_easy_reconcile/i18n/fr.po b/account_easy_reconcile/i18n/fr.po
deleted file mode 100644
index 431f2c0b..00000000
--- a/account_easy_reconcile/i18n/fr.po
+++ /dev/null
@@ -1,429 +0,0 @@
-# Translation of OpenERP Server.
-# This file contains the translation of the following modules:
-# * account_easy_reconcile
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: OpenERP Server 6.1\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-01-21 11:55+0000\n"
-"PO-Revision-Date: 2014-03-21 15:25+0000\n"
-"Last-Translator: Guewen Baconnier @ Camptocamp \n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-05-22 06:49+0000\n"
-"X-Generator: Launchpad (build 17017)\n"
-"Language: \n"
-
-#. module: account_easy_reconcile
-#: code:addons/account_easy_reconcile/easy_reconcile_history.py:101
-#: field:easy.reconcile.history,reconcile_ids:0
-#, python-format
-msgid "Reconciliations"
-msgstr "Lettrages"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-#: view:easy.reconcile.history:0
-msgid "Automatic Easy Reconcile History"
-msgstr "Historique des lettrages automatisés"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Information"
-msgstr "Information"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-#: view:easy.reconcile.history:0
-msgid "Go to partially reconciled items"
-msgstr "Voir les entrées partiellement lettrées"
-
-#. module: account_easy_reconcile
-#: help:account.easy.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_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_history
-msgid "easy.reconcile.history"
-msgstr "easy.reconcile.history"
-
-#. module: account_easy_reconcile
-#: model:ir.actions.act_window,help:account_easy_reconcile.action_account_easy_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_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_options
-msgid "easy.reconcile.options"
-msgstr "lettrage automatisé.options"
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:0
-msgid "Group By..."
-msgstr "Grouper par..."
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,unreconciled_count:0
-msgid "Unreconciled Items"
-msgstr "Écritures non lettrées"
-
-#. module: account_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_base
-msgid "easy.reconcile.base"
-msgstr "easy.reconcile.base"
-
-#. module: account_easy_reconcile
-#: field:easy.reconcile.history,reconcile_line_ids:0
-msgid "Reconciled Items"
-msgstr "Écritures lettrées"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,reconcile_method:0
-msgid "Method"
-msgstr "Méthode"
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:0
-msgid "7 Days"
-msgstr "7 jours"
-
-#. module: account_easy_reconcile
-#: model:ir.actions.act_window,name:account_easy_reconcile.action_easy_reconcile_history
-msgid "Easy Automatic Reconcile History"
-msgstr "Lettrage automatisé"
-
-#. module: account_easy_reconcile
-#: field:easy.reconcile.history,date:0
-msgid "Run date"
-msgstr "Date de lancement"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-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_easy_reconcile
-#: model:ir.actions.act_window,name:account_easy_reconcile.act_easy_reconcile_to_history
-msgid "History Details"
-msgstr "Détails de l'historique"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Display items reconciled on the last run"
-msgstr "Voir les entrées lettrées au dernier lettrage"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,name:0
-msgid "Type"
-msgstr "Type"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,company_id:0
-#: field:account.easy.reconcile.method,company_id:0
-#: field:easy.reconcile.history,company_id:0
-msgid "Company"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,account_profit_id:0
-#: field:easy.reconcile.base,account_profit_id:0
-#: field:easy.reconcile.options,account_profit_id:0
-#: field:easy.reconcile.simple,account_profit_id:0
-#: field:easy.reconcile.simple.name,account_profit_id:0
-#: field:easy.reconcile.simple.partner,account_profit_id:0
-#: field:easy.reconcile.simple.reference,account_profit_id:0
-msgid "Account Profit"
-msgstr "Compte de profits"
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:0
-msgid "Todays' Reconcilations"
-msgstr "Lettrages du jour"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Simple. Amount and Name"
-msgstr "Simple. Montant et description"
-
-#. module: account_easy_reconcile
-#: field:easy.reconcile.base,partner_ids:0
-#: field:easy.reconcile.simple,partner_ids:0
-#: field:easy.reconcile.simple.name,partner_ids:0
-#: field:easy.reconcile.simple.partner,partner_ids:0
-#: field:easy.reconcile.simple.reference,partner_ids:0
-msgid "Restrict on partners"
-msgstr "Filtrer sur des partenaires"
-
-#. module: account_easy_reconcile
-#: model:ir.actions.act_window,name:account_easy_reconcile.action_account_easy_reconcile
-#: model:ir.ui.menu,name:account_easy_reconcile.menu_easy_reconcile
-msgid "Easy Automatic Reconcile"
-msgstr "Lettrage automatisé"
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:0
-msgid "Today"
-msgstr "Aujourd'hui"
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:0
-msgid "Date"
-msgstr "Date"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,last_history:0
-msgid "Last History"
-msgstr "Dernier historique"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Configuration"
-msgstr "Configuration"
-
-#. module: account_easy_reconcile
-#: field:easy.reconcile.history,partial_line_ids:0
-msgid "Partially Reconciled Items"
-msgstr "Écritures partiellement lettrées"
-
-#. module: account_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_partner
-msgid "easy.reconcile.simple.partner"
-msgstr "easy.reconcile.simple.partner"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,write_off:0
-#: field:easy.reconcile.base,write_off:0
-#: field:easy.reconcile.options,write_off:0
-#: field:easy.reconcile.simple,write_off:0
-#: field:easy.reconcile.simple.name,write_off:0
-#: field:easy.reconcile.simple.partner,write_off:0
-#: field:easy.reconcile.simple.reference,write_off:0
-msgid "Write off allowed"
-msgstr "Écart autorisé"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Automatic Easy Reconcile"
-msgstr "Lettrage automatisé"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,account:0
-#: field:easy.reconcile.base,account_id:0
-#: field:easy.reconcile.simple,account_id:0
-#: field:easy.reconcile.simple.name,account_id:0
-#: field:easy.reconcile.simple.partner,account_id:0
-#: field:easy.reconcile.simple.reference,account_id:0
-msgid "Account"
-msgstr "Compte"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,task_id:0
-msgid "Task"
-msgstr "Tâche"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,name:0
-msgid "Name"
-msgstr "Nom"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Simple. Amount and Partner"
-msgstr "Simple. Montant et partenaire"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Start Auto Reconcilation"
-msgstr "Lancer le lettrage automatisé"
-
-#. module: account_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_name
-msgid "easy.reconcile.simple.name"
-msgstr "easy.reconcile.simple.name"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,filter:0
-#: field:easy.reconcile.base,filter:0
-#: field:easy.reconcile.options,filter:0
-#: field:easy.reconcile.simple,filter:0
-#: field:easy.reconcile.simple.name,filter:0
-#: field:easy.reconcile.simple.partner,filter:0
-#: field:easy.reconcile.simple.reference,filter:0
-msgid "Filter"
-msgstr "Filtre"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-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_easy_reconcile
-#: field:easy.reconcile.history,easy_reconcile_id:0
-msgid "Reconcile Profile"
-msgstr "Profil de réconciliation"
-
-#. module: account_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile_method
-msgid "reconcile method for account_easy_reconcile"
-msgstr "Méthode de lettrage"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Start Auto Reconciliation"
-msgstr "Lancer le lettrage automatisé"
-
-#. module: account_easy_reconcile
-#: code:addons/account_easy_reconcile/easy_reconcile.py:233
-#, python-format
-msgid "Error"
-msgstr "Erreur"
-
-#. module: account_easy_reconcile
-#: code:addons/account_easy_reconcile/easy_reconcile.py:258
-#, 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_easy_reconcile
-#: view:account.easy.reconcile:0
-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_easy_reconcile
-#: field:account.easy.reconcile.method,account_lost_id:0
-#: field:easy.reconcile.base,account_lost_id:0
-#: field:easy.reconcile.options,account_lost_id:0
-#: field:easy.reconcile.simple,account_lost_id:0
-#: field:easy.reconcile.simple.name,account_lost_id:0
-#: field:easy.reconcile.simple.partner,account_lost_id:0
-#: field:easy.reconcile.simple.reference,account_lost_id:0
-msgid "Account Lost"
-msgstr "Compte de pertes"
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:0
-msgid "Reconciliation Profile"
-msgstr "Profil de réconciliation"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-#: field:account.easy.reconcile,history_ids:0
-msgid "History"
-msgstr "Historique"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-#: view:easy.reconcile.history:0
-msgid "Go to reconciled items"
-msgstr "Voir les entrées lettrées"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Profile Information"
-msgstr "Information sur le profil"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile.method:0
-msgid "Automatic Easy Reconcile Method"
-msgstr "Méthode de lettrage automatisé"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Simple. Amount and Reference"
-msgstr "Simple. Montant et référence"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Display items partially reconciled on the last run"
-msgstr "Afficher les entrées partiellement lettrées au dernier lettrage"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,sequence:0
-msgid "Sequence"
-msgstr "Séquence"
-
-#. module: account_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple
-msgid "easy.reconcile.simple"
-msgstr "easy.reconcile.simple"
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:0
-msgid "Reconciliations of last 7 days"
-msgstr "Lettrages des 7 derniers jours"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,date_base_on:0
-#: field:easy.reconcile.base,date_base_on:0
-#: field:easy.reconcile.options,date_base_on:0
-#: field:easy.reconcile.simple,date_base_on:0
-#: field:easy.reconcile.simple.name,date_base_on:0
-#: field:easy.reconcile.simple.partner,date_base_on:0
-#: field:easy.reconcile.simple.reference,date_base_on:0
-msgid "Date of reconciliation"
-msgstr "Date de lettrage"
-
-#. module: account_easy_reconcile
-#: code:addons/account_easy_reconcile/easy_reconcile_history.py:104
-#: field:easy.reconcile.history,reconcile_partial_ids:0
-#, python-format
-msgid "Partial Reconciliations"
-msgstr "Lettrages partiels"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,journal_id:0
-#: field:easy.reconcile.base,journal_id:0
-#: field:easy.reconcile.options,journal_id:0
-#: field:easy.reconcile.simple,journal_id:0
-#: field:easy.reconcile.simple.name,journal_id:0
-#: field:easy.reconcile.simple.partner,journal_id:0
-#: field:easy.reconcile.simple.reference,journal_id:0
-msgid "Journal"
-msgstr "Journal"
-
-#. module: account_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_reference
-msgid "easy.reconcile.simple.reference"
-msgstr "easy.reconcile.simple.reference"
-
-#. module: account_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile
-msgid "account easy reconcile"
-msgstr "Lettrage automatisé"
diff --git a/account_easy_reconcile/security/ir.model.access.csv b/account_easy_reconcile/security/ir.model.access.csv
deleted file mode 100644
index 96dd3137..00000000
--- a/account_easy_reconcile/security/ir.model.access.csv
+++ /dev/null
@@ -1,15 +0,0 @@
-id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
-access_easy_reconcile_options_acc_user,easy.reconcile.options,model_easy_reconcile_options,account.group_account_user,1,0,0,0
-access_account_easy_reconcile_method_acc_user,account.easy.reconcile.method,model_account_easy_reconcile_method,account.group_account_user,1,0,0,0
-access_account_easy_reconcile_acc_user,account.easy.reconcile,model_account_easy_reconcile,account.group_account_user,1,1,0,0
-access_easy_reconcile_simple_name_acc_user,easy.reconcile.simple.name,model_easy_reconcile_simple_name,account.group_account_user,1,0,0,0
-access_easy_reconcile_simple_partner_acc_user,easy.reconcile.simple.partner,model_easy_reconcile_simple_partner,account.group_account_user,1,0,0,0
-access_easy_reconcile_simple_reference_acc_user,easy.reconcile.simple.reference,model_easy_reconcile_simple_reference,account.group_account_user,1,0,0,0
-access_easy_reconcile_options_acc_mgr,easy.reconcile.options,model_easy_reconcile_options,account.group_account_user,1,0,0,0
-access_account_easy_reconcile_method_acc_mgr,account.easy.reconcile.method,model_account_easy_reconcile_method,account.group_account_user,1,1,1,1
-access_account_easy_reconcile_acc_mgr,account.easy.reconcile,model_account_easy_reconcile,account.group_account_user,1,1,1,1
-access_easy_reconcile_simple_name_acc_mgr,easy.reconcile.simple.name,model_easy_reconcile_simple_name,account.group_account_user,1,0,0,0
-access_easy_reconcile_simple_partner_acc_mgr,easy.reconcile.simple.partner,model_easy_reconcile_simple_partner,account.group_account_user,1,0,0,0
-access_easy_reconcile_simple_reference_acc_mgr,easy.reconcile.simple.reference,model_easy_reconcile_simple_reference,account.group_account_user,1,0,0,0
-access_easy_reconcile_history_acc_user,easy.reconcile.history,model_easy_reconcile_history,account.group_account_user,1,1,1,0
-access_easy_reconcile_history_acc_mgr,easy.reconcile.history,model_easy_reconcile_history,account.group_account_manager,1,1,1,1
diff --git a/account_easy_reconcile/security/ir_rule.xml b/account_easy_reconcile/security/ir_rule.xml
deleted file mode 100644
index ec1de6d0..00000000
--- a/account_easy_reconcile/security/ir_rule.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
-
-
- Easy reconcile multi-company
-
-
- ['|', ('company_id', '=', False), ('company_id', 'child_of', [user.company_id.id])]
-
-
-
- Easy reconcile history multi-company
-
-
- ['|', ('company_id', '=', False), ('company_id', 'child_of', [user.company_id.id])]
-
-
-
- Easy reconcile method multi-company
-
-
- ['|', ('company_id', '=', False), ('company_id', 'child_of', [user.company_id.id])]
-
-
-
diff --git a/account_easy_reconcile/simple_reconciliation.py b/account_easy_reconcile/simple_reconciliation.py
deleted file mode 100644
index 0a1dcc8c..00000000
--- a/account_easy_reconcile/simple_reconciliation.py
+++ /dev/null
@@ -1,120 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# Copyright 2012-2013 Camptocamp SA (Guewen Baconnier)
-# Copyright (C) 2010 Sébastien Beau
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-
-from openerp.osv.orm import AbstractModel, TransientModel
-
-
-class easy_reconcile_simple(AbstractModel):
-
- _name = 'easy.reconcile.simple'
- _inherit = 'easy.reconcile.base'
-
- # has to be subclassed
- # field name used as key for matching the move lines
- _key_field = None
-
- def rec_auto_lines_simple(self, cr, uid, rec, lines, context=None):
- if context is None:
- context = {}
-
- 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)):
- writeoff_account_id = False
- 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(
- cr, uid, rec, [credit_line, debit_line],
- allow_partial=False, context=context)
- if reconciled:
- res += [credit_line['id'], debit_line['id']]
- del lines[i]
- break
- count += 1
- return res, [] # empty list for partial, only full rec in "simple" rec
-
- def _simple_order(self, rec, *args, **kwargs):
- return "ORDER BY account_move_line.%s" % self._key_field
-
- def _action_rec(self, cr, uid, rec, context=None):
- """Match only 2 move lines, do not allow partial reconcile"""
- select = self._select(rec)
- select += ", account_move_line.%s " % self._key_field
- where, params = self._where(rec)
- where += " AND account_move_line.%s IS NOT NULL " % self._key_field
-
- where2, params2 = self._get_filter(cr, uid, rec, context=context)
- query = ' '.join((
- select,
- self._from(rec),
- where, where2,
- self._simple_order(rec)))
-
- cr.execute(query, params + params2)
- lines = cr.dictfetchall()
- return self.rec_auto_lines_simple(cr, uid, rec, lines, context)
-
-
-class easy_reconcile_simple_name(TransientModel):
-
- _name = 'easy.reconcile.simple.name'
- _inherit = 'easy.reconcile.simple'
-
- # has to be subclassed
- # field name used as key for matching the move lines
- _key_field = 'name'
-
-
-class easy_reconcile_simple_partner(TransientModel):
-
- _name = 'easy.reconcile.simple.partner'
- _inherit = 'easy.reconcile.simple'
-
- # has to be subclassed
- # field name used as key for matching the move lines
- _key_field = 'partner_id'
-
-
-class easy_reconcile_simple_reference(TransientModel):
-
- _name = 'easy.reconcile.simple.reference'
- _inherit = 'easy.reconcile.simple'
-
- # has to be subclassed
- # field name used as key for matching the move lines
- _key_field = 'ref'
From 1bc8b6e0203eee600fdeba7b408cced63008b1d8 Mon Sep 17 00:00:00 2001
From: Damien Crier
Date: Fri, 12 Jun 2015 16:12:37 +0200
Subject: [PATCH 37/52] [ADD] add module 'account_easy_reconcile' : v8
migration
---
account_easy_reconcile/README.rst | 63 ++
account_easy_reconcile/__init__.py | 27 +
account_easy_reconcile/__openerp__.py | 68 +++
account_easy_reconcile/base_reconciliation.py | 237 ++++++++
account_easy_reconcile/easy_reconcile.py | 424 +++++++++++++
account_easy_reconcile/easy_reconcile.xml | 190 ++++++
.../easy_reconcile_history.py | 143 +++++
.../easy_reconcile_history_view.xml | 98 +++
.../i18n/account_easy_reconcile.pot | 567 ++++++++++++++++++
account_easy_reconcile/res_config.py | 58 ++
account_easy_reconcile/res_config_view.xml | 24 +
.../security/ir.model.access.csv | 9 +
account_easy_reconcile/security/ir_rule.xml | 25 +
.../simple_reconciliation.py | 114 ++++
14 files changed, 2047 insertions(+)
create mode 100644 account_easy_reconcile/README.rst
create mode 100755 account_easy_reconcile/__init__.py
create mode 100755 account_easy_reconcile/__openerp__.py
create mode 100644 account_easy_reconcile/base_reconciliation.py
create mode 100644 account_easy_reconcile/easy_reconcile.py
create mode 100644 account_easy_reconcile/easy_reconcile.xml
create mode 100644 account_easy_reconcile/easy_reconcile_history.py
create mode 100644 account_easy_reconcile/easy_reconcile_history_view.xml
create mode 100644 account_easy_reconcile/i18n/account_easy_reconcile.pot
create mode 100644 account_easy_reconcile/res_config.py
create mode 100644 account_easy_reconcile/res_config_view.xml
create mode 100644 account_easy_reconcile/security/ir.model.access.csv
create mode 100644 account_easy_reconcile/security/ir_rule.xml
create mode 100644 account_easy_reconcile/simple_reconciliation.py
diff --git a/account_easy_reconcile/README.rst b/account_easy_reconcile/README.rst
new file mode 100644
index 00000000..39e6b2c9
--- /dev/null
+++ b/account_easy_reconcile/README.rst
@@ -0,0 +1,63 @@
+.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
+ :alt: License: AGPL-3
+
+Easy 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.
+
+You may be interested to install also the
+``account_advanced_reconciliation`` module.
+This latter add more complex reconciliations,
+allows multiple lines and partial.
+
+
+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
+`here `_.
+
+
+Credits
+=======
+
+Contributors
+------------
+
+* Damien Crier
+* Frédéric Clémenti
+
+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 http://odoo-community.org.
+
diff --git a/account_easy_reconcile/__init__.py b/account_easy_reconcile/__init__.py
new file mode 100755
index 00000000..403b65d3
--- /dev/null
+++ b/account_easy_reconcile/__init__.py
@@ -0,0 +1,27 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Copyright 2012 Camptocamp SA (Guewen Baconnier)
+# Copyright (C) 2010 Sébastien Beau
+# Copyright 2015 Camptocamp SA (Damien Crier)
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+from . import easy_reconcile
+from . import base_reconciliation
+from . import simple_reconciliation
+from . import easy_reconcile_history
+from . import res_config
diff --git a/account_easy_reconcile/__openerp__.py b/account_easy_reconcile/__openerp__.py
new file mode 100755
index 00000000..df579062
--- /dev/null
+++ b/account_easy_reconcile/__openerp__.py
@@ -0,0 +1,68 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Copyright 2012 Camptocamp SA (Guewen Baconnier)
+# Copyright (C) 2010 Sébastien Beau
+# Copyright 2015 Camptocamp SA (Damien Crier)
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+{
+ "name": "Easy Reconcile",
+ "version": "1.3.1",
+ "depends": ["account"],
+ "author": "Akretion,Camptocamp,Odoo Community Association (OCA)",
+ "description": """
+Easy 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.
+
+You may be interested to install also the
+``account_advanced_reconciliation`` module.
+This latter add more complex reconciliations,
+allows multiple lines and partial.
+
+""",
+ "website": "http://www.akretion.com/",
+ "category": "Finance",
+ "data": ["easy_reconcile.xml",
+ "easy_reconcile_history_view.xml",
+ "security/ir_rule.xml",
+ "security/ir.model.access.csv",
+ "res_config_view.xml",
+ ],
+ 'license': 'AGPL-3',
+ "auto_install": False,
+ 'installable': True,
+
+}
diff --git a/account_easy_reconcile/base_reconciliation.py b/account_easy_reconcile/base_reconciliation.py
new file mode 100644
index 00000000..787f0f76
--- /dev/null
+++ b/account_easy_reconcile/base_reconciliation.py
@@ -0,0 +1,237 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Copyright 2012-2013 Camptocamp SA (Guewen Baconnier)
+# Copyright (C) 2010 Sébastien Beau
+# Copyright 2015 Camptocamp SA (Damien Crier)
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+from openerp import models, api, fields
+from operator import itemgetter, attrgetter
+
+
+class EasyReconcileBase(models.AbstractModel):
+
+ """Abstract Model for reconciliation methods"""
+
+ _name = 'easy.reconcile.base'
+
+ _inherit = 'easy.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 easy.reconcile.options
+
+ @api.multi
+ def automatic_reconcile(self):
+ """ Reconciliation method called from the view.
+
+ :return: list of reconciled ids, list of partially reconciled items
+ """
+ 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',
+ 'period_id',
+ 'ref',
+ 'name',
+ 'partner_id',
+ 'account_id',
+ 'reconcile_partial_id',
+ 'move_id')
+ return ["account_move_line.%s" % col for col in aml_cols]
+
+ def _select(self, *args, **kwargs):
+ return "SELECT %s" % ', '.join(self._base_columns())
+
+ def _from(self, *args, **kwargs):
+ return ("FROM account_move_line "
+ "LEFT OUTER JOIN account_move_reconcile ON "
+ "(account_move_line.reconcile_partial_id "
+ "= account_move_reconcile.id)"
+ )
+
+ def _where(self, *args, **kwargs):
+ where = ("WHERE account_move_line.account_id = %s "
+ "AND COALESCE(account_move_reconcile.type,'') <> 'manual' "
+ "AND account_move_line.reconcile_id IS NULL ")
+ # 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
+
+ def _get_filter(self):
+ ml_obj = self.pool.get('account.move.line')
+ where = ''
+ params = []
+ if self.filter:
+ dummy, where, params = ml_obj._where_calc(
+ 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.pool.get('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_period(mlines):
+ period_ids = [ml['period_id'] for ml in mlines]
+ return max(period_ids, key=attrgetter('date_stop'))
+
+ 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 == 'end_period_last_credit':
+ return last_period(credit(lines)).date_stop
+ if based_on == 'end_period':
+ return last_period(lines).date_stop
+ elif 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']
+ writeoff = self.write_off
+ line_ids = [l['id'] for l in lines]
+ below_writeoff, sum_debit, sum_credit = self._below_writeoff_limit(
+ lines, writeoff
+ )
+ date = self._get_rec_date(lines, self.date_base_on)
+ rec_ctx = dict(self.env.context or {}, date_p=date)
+ 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
+ period_id = self.env['account.period'].find(dt=date)[0]
+ if self.analytic_account_id:
+ rec_ctx['analytic_id'] = self.analytic_account_id.id
+ ml_obj.with_context(rec_ctx).reconcile(
+ line_ids,
+ type='auto',
+ writeoff_acc_id=writeoff_account_id,
+ writeoff_period_id=period_id,
+ writeoff_journal_id=self.journal_id.id
+ )
+ return True, True
+ elif allow_partial:
+ # Check if the group of move lines was already partially
+ # reconciled and if all the lines were the same, in such
+ # case, just skip the group and consider it as partially
+ # reconciled (no change).
+ if lines:
+ existing_partial_id = lines[0]['reconcile_partial_id']
+ if existing_partial_id:
+ partial_line_ids = set(ml_obj.search(
+ [('reconcile_partial_id', '=', existing_partial_id)],
+ ))
+ if set(line_ids) == partial_line_ids:
+ return True, False
+
+ # 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
+ period_id = self.env['account.period'].find(dt=date)[0]
+ if self.analytic_account_id:
+ rec_ctx['analytic_id'] = self.analytic_account_id.id
+ ml_obj.with_context(rec_ctx).reconcile_partial(
+ line_ids,
+ type='manual',
+ writeoff_acc_id=writeoff_account_id,
+ writeoff_period_id=period_id,
+ writeoff_journal_id=self.journal_id.id,
+ )
+ return True, False
+ return False, False
diff --git a/account_easy_reconcile/easy_reconcile.py b/account_easy_reconcile/easy_reconcile.py
new file mode 100644
index 00000000..376a056e
--- /dev/null
+++ b/account_easy_reconcile/easy_reconcile.py
@@ -0,0 +1,424 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Copyright 2012-2013 Camptocamp SA (Guewen Baconnier)
+# Copyright (C) 2010 Sébastien Beau
+# Copyright 2015 Camptocamp SA (Damien Crier)
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+from datetime import datetime
+from openerp import models, api, fields, _
+from openerp.tools import DEFAULT_SERVER_DATETIME_FORMAT
+from openerp.exceptions import except_orm
+from openerp import sql_db
+
+# from openerp import pooler
+
+import logging
+_logger = logging.getLogger(__name__)
+
+
+class EasyReconcileOptions(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 = 'easy.reconcile.options'
+
+ @api.model
+ def _get_rec_base_date(self):
+ return [
+ ('end_period_last_credit', 'End of period of most recent credit'),
+ ('newest', 'Most recent move line'),
+ ('actual', 'Today'),
+ ('end_period', 'End of period of most recent move line'),
+ ('newest_credit', 'Date of most recent credit'),
+ ('newest_debit', 'Date of most recent debit')
+ ]
+
+ 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='end_period_last_credit')
+ filter = fields.Char(string='Filter', size=128)
+ analytic_account_id = fields.Many2one('account.analytic.account',
+ string='Analytic_account',
+ help="Analytic account"
+ "for the write-off")
+ 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 AccountEasyReconcileMethod(models.Model):
+ _name = 'account.easy.reconcile.method'
+ _description = 'reconcile method for account_easy_reconcile'
+ _inherit = 'easy.reconcile.options'
+ _order = 'sequence'
+
+ @api.model
+ def _get_all_rec_method(self):
+ return [
+ ('easy.reconcile.simple.name', 'Simple. Amount and Name'),
+ ('easy.reconcile.simple.partner', 'Simple. Amount and Partner'),
+ ('easy.reconcile.simple.reference',
+ 'Simple. Amount and Reference'),
+ ]
+
+ @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.easy.reconcile',
+ string='Task',
+ required=True,
+ ondelete='cascade'
+ )
+ company_id = fields.Many2one('res.company',
+ string='Company',
+ related="task_id.company_id",
+ store=True,
+ readonly=True
+ )
+
+# def init(self, cr):
+# """ Migration stuff
+#
+# Name is not anymore methods names but the name
+# of the model which does the reconciliation
+# """
+# cr.execute("""
+# UPDATE account_easy_reconcile_method
+# SET name = 'easy.reconcile.simple.partner'
+# WHERE name = 'action_rec_auto_partner'
+# """)
+# cr.execute("""
+# UPDATE account_easy_reconcile_method
+# SET name = 'easy.reconcile.simple.name'
+# WHERE name = 'action_rec_auto_name'
+# """)
+
+
+class AccountEasyReconcile(models.Model):
+
+ _name = 'account.easy.reconcile'
+ _inherit = ['mail.thread']
+ _description = 'account easy reconcile'
+
+ @api.one
+ @api.depends('account')
+ def _get_total_unrec(self):
+ obj_move_line = self.env['account.move.line']
+ self.unreconciled_count = len(obj_move_line.search(
+ [('account_id', '=', self.account.id),
+ ('reconcile_id', '=', False),
+ ('reconcile_partial_id', '=', False)],
+ ))
+
+ @api.one
+ @api.depends('account')
+ def _get_partial_rec(self):
+ obj_move_line = self.env['account.move.line']
+ self.reconciled_partial_count = len(obj_move_line.search(
+ [('account_id', '=', self.account.id),
+ ('reconcile_id', '=', False),
+ ('reconcile_partial_id', '!=', False)],
+ ))
+
+ @api.one
+ @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['easy.reconcile.history']
+ last_history_rs = history_obj.search(
+ [('easy_reconcile_id', '=', self.id)],
+ limit=1, order='date desc'
+ )
+ self.last_history = last_history_rs[0] if last_history_rs else False
+
+ name = fields.Char(string='Name', size=32, required=True)
+ account = fields.Many2one('account.account',
+ string='Account',
+ required=True,
+ )
+ reconcile_method = fields.One2many('account.easy.reconcile.method',
+ 'task_id',
+ string='Method'
+ )
+ unreconciled_count = fields.Integer(string='Unreconciled Items',
+ compute='_get_total_unrec'
+ )
+ reconciled_partial_count = fields.Integer(
+ string='Partially Reconciled Items',
+ compute='_get_partial_rec'
+ )
+ history_ids = fields.One2many('easy.reconcile.history',
+ 'easy_reconcile_id',
+ string='History',
+ readonly=True
+ )
+ last_history = fields.Many2one('easy.reconcile.history',
+ string='readonly=True',
+ compute='_last_history',
+ readonly=True
+ )
+ 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 and
+ rec_method.account_lost_id.id),
+ 'account_profit_id': (rec_method.account_profit_id and
+ rec_method.account_profit_id.id),
+ 'analytic_account_id': (rec_method.analytic_account_id and
+ rec_method.analytic_account_id.id),
+ 'income_exchange_account_id':
+ (rec_method.income_exchange_account_id and
+ rec_method.income_exchange_account_id.id),
+ 'expense_exchange_account_id':
+ (rec_method.income_exchange_account_id and
+ rec_method.income_exchange_account_id.id),
+ 'journal_id': (rec_method.journal_id and
+ 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
+
+ uid, context = self.env.uid, self.env.context
+ with api.Environment.manage():
+ self.env = api.Environment(new_cr, uid, context)
+
+ try:
+ all_ml_rec_ids = []
+ all_ml_partial_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, ml_partial_ids = (
+ auto_rec_id.automatic_reconcile()
+ )
+
+ all_ml_rec_ids += ml_rec_ids
+ all_ml_partial_ids += ml_partial_ids
+
+ reconcile_ids = find_reconcile_ids(
+ 'reconcile_id',
+ all_ml_rec_ids
+ )
+ partial_ids = find_reconcile_ids(
+ 'reconcile_partial_id',
+ all_ml_partial_ids
+ )
+
+ self.env['easy.reconcile.history'].create(
+ {
+ 'easy_reconcile_id': rec.id,
+ 'date': fields.datetime.now(),
+ 'reconcile_ids': [
+ (4, rid) for rid in reconcile_ids
+ ],
+ 'reconcile_partial_ids': [
+ (4, rid) for rid in partial_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['easy.reconcile.history'].create(
+ {
+ 'easy_reconcile_id': rec.id,
+ 'date': fields.datetime.now(),
+ 'reconcile_ids': [],
+ 'reconcile_partial_ids': [],
+ }
+ )
+ finally:
+ if ctx['commit_every']:
+ new_cr.commit()
+ new_cr.close()
+
+# self.env.cr.close()
+
+ return True
+
+ @api.model
+ def _no_history(self, rec):
+ """ Raise an `orm.except_orm` error, supposed to
+ be called when there is no history on the reconciliation
+ task.
+ """
+ raise except_orm(
+ _('Error'),
+ _('There is no history of reconciled '
+ 'items on the task: %s.') % rec.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']
+ line_ids = obj_move_line.search(
+ [('account_id', '=', self.account.id),
+ ('reconcile_id', '=', False),
+ ('reconcile_partial_id', '=', False)])
+ name = _('Unreconciled items')
+ return self._open_move_line_list(line_ids and line_ids.ids or [], name)
+
+ @api.multi
+ def open_partial_reconcile(self):
+ """ Open the view of move line with the unreconciled move lines"""
+ self.ensure_one()
+ obj_move_line = self.env['account.move.line']
+ line_ids = obj_move_line.search(
+ [('account_id', '=', self.account.id),
+ ('reconcile_id', '=', False),
+ ('reconcile_partial_id', '!=', False)])
+ name = _('Partial reconciled items')
+ return self._open_move_line_list(line_ids and line_ids.ids or [], name)
+
+ @api.model
+ def last_history_reconcile(self, rec_id):
+ """ Get the last history record for this reconciliation profile
+ and return the action which opens move lines reconciled
+ """
+ if isinstance(rec_id, (tuple, list)):
+ assert len(rec_id) == 1, \
+ "Only 1 id expected"
+ rec_id = rec_id[0]
+ rec = self.browse(rec_id)
+ if not rec.last_history:
+ self._no_history(rec)
+ return rec.last_history.open_reconcile()
+
+ @api.model
+ def last_history_partial(self, rec_id):
+ """ Get the last history record for this reconciliation profile
+ and return the action which opens move lines reconciled
+ """
+ if isinstance(rec_id, (tuple, list)):
+ assert len(rec_id) == 1, \
+ "Only 1 id expected"
+ rec_id = rec_id[0]
+ rec = self.browse(rec_id)
+ if not rec.last_history:
+ self._no_history(rec)
+ return rec.last_history.open_partial()
+
+ @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 datetime.strptime(reconcile.last_history.date,
+ DEFAULT_SERVER_DATETIME_FORMAT)
+ else:
+ return datetime.min
+
+ reconciles = self.search([])
+ assert reconciles.ids, "No easy 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_easy_reconcile/easy_reconcile.xml b/account_easy_reconcile/easy_reconcile.xml
new file mode 100644
index 00000000..076bd3b3
--- /dev/null
+++ b/account_easy_reconcile/easy_reconcile.xml
@@ -0,0 +1,190 @@
+
+
+
+
+
+
+ account.easy.reconcile.form
+ 20
+ account.easy.reconcile
+
+
+ A reconciliation profile specifies, for one account, how
+ the entries should be reconciled.
+ You can select one or many reconciliation methods which will
+ be run sequentially to match the entries between them.
+
+
+
+
+
+ account.easy.reconcile.method.tree
+ 20
+ account.easy.reconcile.method
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Do Automatic Reconciliations
+
+
+ 3
+ hours
+ -1
+
+
+
+
+
+
+
+
+
diff --git a/account_easy_reconcile/easy_reconcile_history.py b/account_easy_reconcile/easy_reconcile_history.py
new file mode 100644
index 00000000..3990f675
--- /dev/null
+++ b/account_easy_reconcile/easy_reconcile_history.py
@@ -0,0 +1,143 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Author: Guewen Baconnier
+# Copyright 2012 Camptocamp SA
+# Copyright 2015 Camptocamp SA (Damien Crier)
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+from openerp import models, api, fields, _
+
+
+class EasyReconcileHistory(models.Model):
+ """ Store an history of the runs per profile
+ Each history stores the list of reconciliations done"""
+
+ _name = 'easy.reconcile.history'
+ _rec_name = 'easy_reconcile_id'
+ _order = 'date DESC'
+
+ @api.one
+ @api.depends('reconcile_ids', 'reconcile_partial_ids')
+ def _reconcile_line_ids(self):
+ move_line_ids = []
+ for reconcile in self.reconcile_ids:
+ move_line_ids += [line.id
+ for line
+ in reconcile.line_id]
+ self.reconcile_line_ids = move_line_ids
+ move_line_ids = []
+ for reconcile in self.reconcile_partial_ids:
+ move_line_ids += [line.id
+ for line
+ in reconcile.line_partial_ids]
+ self.partial_line_ids = move_line_ids
+
+ easy_reconcile_id = fields.Many2one(
+ 'account.easy.reconcile',
+ string='Reconcile Profile',
+ readonly=True
+ )
+ date = fields.Datetime(string='Run date', readonly=True, required=True)
+ reconcile_ids = fields.Many2many(
+ comodel_name='account.move.reconcile',
+ relation='account_move_reconcile_history_rel',
+ string='Partial Reconciliations',
+ readonly=True
+ )
+ reconcile_partial_ids = fields.Many2many(
+ comodel_name='account.move.reconcile',
+ relation='account_move_reconcile_history_partial_rel',
+ string='Partial Reconciliations',
+ readonly=True
+ )
+ reconcile_line_ids = fields.Many2many(
+ comodel_name='account.move.line',
+ relation='account_move_line_history_rel',
+ string='Reconciled Items',
+ readonly=True,
+ multi='lines',
+ _compute='_reconcile_line_ids'
+ )
+ partial_line_ids = fields.Many2many(
+ comodel_name='account.move.line',
+ relation='account_move_line_history_rel',
+ string='Partially Reconciled Items',
+ readonly=True,
+ multi='lines',
+ _compute='_reconcile_line_ids'
+ )
+ company_id = fields.Many2one(
+ 'res.company',
+ string='Company',
+ store=True,
+ readonly=True,
+ related='easy_reconcile_id.company_id'
+ )
+
+ def _open_move_lines(self, rec_type='full'):
+ """ For an history record, open the view of move line with
+ the reconciled or partially reconciled move lines
+
+ :param history_id: id of the history
+ :param rec_type: 'full' or 'partial'
+ :return: action to open the move lines
+ """
+ assert rec_type in ('full', 'partial'), \
+ "rec_type must be 'full' or 'partial'"
+ history = self
+ if rec_type == 'full':
+ field = 'reconcile_line_ids'
+ name = _('Reconciliations')
+ else:
+ field = 'partial_line_ids'
+ name = _('Partial Reconciliations')
+ move_line_ids = [line.id for line in getattr(history, field)]
+ 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)]),
+ }
+
+ 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(rec_type='full')
+
+ @api.model
+ def open_partial(self):
+ """ For an history record, open the view of move line
+ with the partially 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(rec_type='partial')
diff --git a/account_easy_reconcile/easy_reconcile_history_view.xml b/account_easy_reconcile/easy_reconcile_history_view.xml
new file mode 100644
index 00000000..ceaf49b5
--- /dev/null
+++ b/account_easy_reconcile/easy_reconcile_history_view.xml
@@ -0,0 +1,98 @@
+
+
+
+
+
+ easy.reconcile.history.search
+ easy.reconcile.history
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ easy.reconcile.history.form
+ easy.reconcile.history
+
+
\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_easy_reconcile
+#: field:account.easy.reconcile,account:0
+#: field:easy.reconcile.base,account_id:0
+#: field:easy.reconcile.simple,account_id:0
+#: field:easy.reconcile.simple.name,account_id:0
+#: field:easy.reconcile.simple.partner,account_id:0
+#: field:easy.reconcile.simple.reference,account_id:0
+msgid "Account"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,account_lost_id:0
+#: field:easy.reconcile.base,account_lost_id:0
+#: field:easy.reconcile.options,account_lost_id:0
+#: field:easy.reconcile.simple,account_lost_id:0
+#: field:easy.reconcile.simple.name,account_lost_id:0
+#: field:easy.reconcile.simple.partner,account_lost_id:0
+#: field:easy.reconcile.simple.reference,account_lost_id:0
+msgid "Account Lost"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,account_profit_id:0
+#: field:easy.reconcile.base,account_profit_id:0
+#: field:easy.reconcile.options,account_profit_id:0
+#: field:easy.reconcile.simple,account_profit_id:0
+#: field:easy.reconcile.simple.name,account_profit_id:0
+#: field:easy.reconcile.simple.partner,account_profit_id:0
+#: field:easy.reconcile.simple.reference,account_profit_id:0
+msgid "Account Profit"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: help:account.easy.reconcile.method,analytic_account_id:0
+#: help:easy.reconcile.base,analytic_account_id:0
+#: help:easy.reconcile.options,analytic_account_id:0
+#: help:easy.reconcile.simple,analytic_account_id:0
+#: help:easy.reconcile.simple.name,analytic_account_id:0
+#: help:easy.reconcile.simple.partner,analytic_account_id:0
+#: help:easy.reconcile.simple.reference,analytic_account_id:0
+msgid "Analytic accountfor the write-off"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,analytic_account_id:0
+#: field:easy.reconcile.base,analytic_account_id:0
+#: field:easy.reconcile.options,analytic_account_id:0
+#: field:easy.reconcile.simple,analytic_account_id:0
+#: field:easy.reconcile.simple.name,analytic_account_id:0
+#: field:easy.reconcile.simple.partner,analytic_account_id:0
+#: field:easy.reconcile.simple.reference,analytic_account_id:0
+msgid "Analytic_account"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_tree
+msgid "Automatic Easy Reconcile"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_form
+#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_tree
+#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
+msgid "Automatic Easy Reconcile History"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile.method:account_easy_reconcile.account_easy_reconcile_method_form
+#: view:account.easy.reconcile.method:account_easy_reconcile.account_easy_reconcile_method_tree
+msgid "Automatic Easy Reconcile Method"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: model:ir.model,name:account_easy_reconcile.model_res_company
+msgid "Companies"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,company_id:0
+#: field:account.easy.reconcile.method,company_id:0
+#: field:easy.reconcile.history,company_id:0
+msgid "Company"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+msgid "Configuration"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,create_uid:0
+#: field:account.easy.reconcile.method,create_uid:0
+#: field:easy.reconcile.history,create_uid:0
+#: field:easy.reconcile.simple.name,create_uid:0
+#: field:easy.reconcile.simple.partner,create_uid:0
+#: field:easy.reconcile.simple.reference,create_uid:0
+msgid "Created by"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,create_date:0
+#: field:account.easy.reconcile.method,create_date:0
+#: field:easy.reconcile.history,create_date:0
+#: field:easy.reconcile.simple.name,create_date:0
+#: field:easy.reconcile.simple.partner,create_date:0
+#: field:easy.reconcile.simple.reference,create_date:0
+msgid "Created on"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
+msgid "Date"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,date_base_on:0
+#: field:easy.reconcile.base,date_base_on:0
+#: field:easy.reconcile.options,date_base_on:0
+#: field:easy.reconcile.simple,date_base_on:0
+#: field:easy.reconcile.simple.name,date_base_on:0
+#: field:easy.reconcile.simple.partner,date_base_on:0
+#: field:easy.reconcile.simple.reference,date_base_on:0
+msgid "Date of reconciliation"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: help:account.easy.reconcile,message_last_post:0
+msgid "Date of the last message posted on the record."
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_tree
+msgid "Display items partially reconciled on the last run"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_tree
+msgid "Display items reconciled on the last run"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: model:ir.actions.act_window,name:account_easy_reconcile.action_account_easy_reconcile
+#: model:ir.ui.menu,name:account_easy_reconcile.menu_easy_reconcile
+msgid "Easy Automatic Reconcile"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: model:ir.actions.act_window,name:account_easy_reconcile.action_easy_reconcile_history
+msgid "Easy Automatic Reconcile History"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: code:addons/account_easy_reconcile/easy_reconcile.py:329
+#, python-format
+msgid "Error"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,filter:0
+#: field:easy.reconcile.base,filter:0
+#: field:easy.reconcile.options,filter:0
+#: field:easy.reconcile.simple,filter:0
+#: field:easy.reconcile.simple.name,filter:0
+#: field:easy.reconcile.simple.partner,filter:0
+#: field:easy.reconcile.simple.reference,filter:0
+msgid "Filter"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,message_follower_ids:0
+msgid "Followers"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,income_exchange_account_id:0
+#: field:easy.reconcile.base,income_exchange_account_id:0
+#: field:easy.reconcile.options,income_exchange_account_id:0
+#: field:easy.reconcile.simple,income_exchange_account_id:0
+#: field:easy.reconcile.simple.name,income_exchange_account_id:0
+#: field:easy.reconcile.simple.partner,income_exchange_account_id:0
+#: field:easy.reconcile.simple.reference,income_exchange_account_id:0
+msgid "Gain ExchangeRate Account"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+msgid "Go to partial reconciled items"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_form
+#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_tree
+msgid "Go to partially reconciled items"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_form
+#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_tree
+msgid "Go to reconciled items"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+msgid "Go to unreconciled items"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
+msgid "Group By..."
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+#: field:account.easy.reconcile,history_ids:0
+msgid "History"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: model:ir.actions.act_window,name:account_easy_reconcile.act_easy_reconcile_to_history
+msgid "History Details"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: help:account.easy.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_easy_reconcile
+#: field:res.company,reconciliation_commit_every:0
+msgid "How often to commit when performing automaticreconciliation."
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,id:0
+#: field:account.easy.reconcile.method,id:0
+#: field:easy.reconcile.base,id:0
+#: field:easy.reconcile.history,id:0
+#: field:easy.reconcile.options,id:0
+#: field:easy.reconcile.simple,id:0
+#: field:easy.reconcile.simple.name,id:0
+#: field:easy.reconcile.simple.partner,id:0
+#: field:easy.reconcile.simple.reference,id:0
+msgid "ID"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: help:account.easy.reconcile,message_unread:0
+msgid "If checked new messages require your attention."
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+msgid "Information"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,message_is_follower:0
+msgid "Is a Follower"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,journal_id:0
+#: field:easy.reconcile.base,journal_id:0
+#: field:easy.reconcile.options,journal_id:0
+#: field:easy.reconcile.simple,journal_id:0
+#: field:easy.reconcile.simple.name,journal_id:0
+#: field:easy.reconcile.simple.partner,journal_id:0
+#: field:easy.reconcile.simple.reference,journal_id:0
+msgid "Journal"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,message_last_post:0
+msgid "Last Message Date"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,write_uid:0
+#: field:account.easy.reconcile.method,write_uid:0
+#: field:easy.reconcile.history,write_uid:0
+#: field:easy.reconcile.simple.name,write_uid:0
+#: field:easy.reconcile.simple.partner,write_uid:0
+#: field:easy.reconcile.simple.reference,write_uid:0
+msgid "Last Updated by"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,write_date:0
+#: field:account.easy.reconcile.method,write_date:0
+#: field:easy.reconcile.history,write_date:0
+#: field:easy.reconcile.simple.name,write_date:0
+#: field:easy.reconcile.simple.partner,write_date:0
+#: field:easy.reconcile.simple.reference,write_date:0
+msgid "Last Updated on"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: help:res.company,reconciliation_commit_every:0
+msgid "Leave zero to commit only at the end of the process."
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,expense_exchange_account_id:0
+#: field:easy.reconcile.base,expense_exchange_account_id:0
+#: field:easy.reconcile.options,expense_exchange_account_id:0
+#: field:easy.reconcile.simple,expense_exchange_account_id:0
+#: field:easy.reconcile.simple.name,expense_exchange_account_id:0
+#: field:easy.reconcile.simple.partner,expense_exchange_account_id:0
+#: field:easy.reconcile.simple.reference,expense_exchange_account_id:0
+msgid "Loss ExchangeRate Account"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_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_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_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_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_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_easy_reconcile
+#: field:account.easy.reconcile,message_ids:0
+msgid "Messages"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: help:account.easy.reconcile,message_ids:0
+msgid "Messages and communication history"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,reconcile_method:0
+msgid "Method"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,name:0
+msgid "Name"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:account.config.settings:account_easy_reconcile.view_account_config
+msgid "Options"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: code:addons/account_easy_reconcile/easy_reconcile_history.py:108
+#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_form
+#: field:easy.reconcile.history,reconcile_ids:0
+#: field:easy.reconcile.history,reconcile_partial_ids:0
+#, python-format
+msgid "Partial Reconciliations"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: code:addons/account_easy_reconcile/easy_reconcile.py:368
+#, python-format
+msgid "Partial reconciled items"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:easy.reconcile.history,partial_line_ids:0
+msgid "Partially Reconciled Items"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+msgid "Profile Information"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:easy.reconcile.history,easy_reconcile_id:0
+msgid "Reconcile Profile"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:easy.reconcile.history,reconcile_line_ids:0
+msgid "Reconciled Items"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:account.config.settings:account_easy_reconcile.view_account_config
+msgid "Reconciliation"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
+msgid "Reconciliation Profile"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: code:addons/account_easy_reconcile/easy_reconcile_history.py:105
+#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_form
+#, python-format
+msgid "Reconciliations"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
+msgid "Reconciliations of last 7 days"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:easy.reconcile.base,partner_ids:0
+#: field:easy.reconcile.simple,partner_ids:0
+#: field:easy.reconcile.simple.name,partner_ids:0
+#: field:easy.reconcile.simple.partner,partner_ids:0
+#: field:easy.reconcile.simple.reference,partner_ids:0
+msgid "Restrict on partners"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:easy.reconcile.history,date:0
+msgid "Run date"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,sequence:0
+msgid "Sequence"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+msgid "Simple. Amount and Name"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+msgid "Simple. Amount and Partner"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+msgid "Simple. Amount and Reference"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_tree
+msgid "Start Auto Reconcilation"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+msgid "Start Auto Reconciliation"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,message_summary:0
+msgid "Summary"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,task_id:0
+msgid "Task"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: help:account.easy.reconcile.method,sequence:0
+msgid "The sequence field is used to order the reconcile method"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: code:addons/account_easy_reconcile/easy_reconcile.py:330
+#, python-format
+msgid "There is no history of reconciled items on the task: %s."
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
+msgid "Today"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
+msgid "Todays' Reconcilations"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,name:0
+msgid "Type"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,message_unread:0
+msgid "Unread Messages"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: code:addons/account_easy_reconcile/easy_reconcile.py:356
+#, python-format
+msgid "Unreconciled items"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,write_off:0
+#: field:easy.reconcile.base,write_off:0
+#: field:easy.reconcile.options,write_off:0
+#: field:easy.reconcile.simple,write_off:0
+#: field:easy.reconcile.simple.name,write_off:0
+#: field:easy.reconcile.simple.partner,write_off:0
+#: field:easy.reconcile.simple.reference,write_off:0
+msgid "Write off allowed"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile
+msgid "account easy reconcile"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:account.config.settings:account_easy_reconcile.view_account_config
+msgid "eInvoicing & Payments"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile_method
+msgid "reconcile method for account_easy_reconcile"
+msgstr ""
+
diff --git a/account_easy_reconcile/res_config.py b/account_easy_reconcile/res_config.py
new file mode 100644
index 00000000..36265a91
--- /dev/null
+++ b/account_easy_reconcile/res_config.py
@@ -0,0 +1,58 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Author: Leonardo Pistone
+# Copyright 2014 Camptocamp SA
+# Copyright 2015 Camptocamp SA (Damien Crier)
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+from openerp import models, api, 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."""
+ )
+
+ @api.multi
+ def onchange_company_id(self, company_id):
+
+ result = super(AccountConfigSettings, self).onchange_company_id(
+ company_id
+ )
+
+ if company_id:
+ company = self.env['res.company'].browse(company_id)
+ result['value']['reconciliation_commit_every'] = (
+ company.reconciliation_commit_every
+ )
+ return result
+
+
+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_easy_reconcile/res_config_view.xml b/account_easy_reconcile/res_config_view.xml
new file mode 100644
index 00000000..8badc32e
--- /dev/null
+++ b/account_easy_reconcile/res_config_view.xml
@@ -0,0 +1,24 @@
+
+
+
+
+ account settings
+ account.config.settings
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/account_easy_reconcile/security/ir.model.access.csv b/account_easy_reconcile/security/ir.model.access.csv
new file mode 100644
index 00000000..616a6217
--- /dev/null
+++ b/account_easy_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_easy_reconcile_options_acc_user,easy.reconcile.options,model_easy_reconcile_options,account.group_account_user,1,0,0,0
+access_account_easy_reconcile_method_acc_user,account.easy.reconcile.method,model_account_easy_reconcile_method,account.group_account_user,1,0,0,0
+access_account_easy_reconcile_acc_user,account.easy.reconcile,model_account_easy_reconcile,account.group_account_user,1,1,0,0
+access_easy_reconcile_options_acc_mgr,easy.reconcile.options,model_easy_reconcile_options,account.group_account_user,1,0,0,0
+access_account_easy_reconcile_method_acc_mgr,account.easy.reconcile.method,model_account_easy_reconcile_method,account.group_account_user,1,1,1,1
+access_account_easy_reconcile_acc_mgr,account.easy.reconcile,model_account_easy_reconcile,account.group_account_user,1,1,1,1
+access_easy_reconcile_history_acc_user,easy.reconcile.history,model_easy_reconcile_history,account.group_account_user,1,1,1,0
+access_easy_reconcile_history_acc_mgr,easy.reconcile.history,model_easy_reconcile_history,account.group_account_manager,1,1,1,1
diff --git a/account_easy_reconcile/security/ir_rule.xml b/account_easy_reconcile/security/ir_rule.xml
new file mode 100644
index 00000000..ec1de6d0
--- /dev/null
+++ b/account_easy_reconcile/security/ir_rule.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ Easy reconcile multi-company
+
+
+ ['|', ('company_id', '=', False), ('company_id', 'child_of', [user.company_id.id])]
+
+
+
+ Easy reconcile history multi-company
+
+
+ ['|', ('company_id', '=', False), ('company_id', 'child_of', [user.company_id.id])]
+
+
+
+ Easy reconcile method multi-company
+
+
+ ['|', ('company_id', '=', False), ('company_id', 'child_of', [user.company_id.id])]
+
+
+
diff --git a/account_easy_reconcile/simple_reconciliation.py b/account_easy_reconcile/simple_reconciliation.py
new file mode 100644
index 00000000..8cd12091
--- /dev/null
+++ b/account_easy_reconcile/simple_reconciliation.py
@@ -0,0 +1,114 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Copyright 2012-2013 Camptocamp SA (Guewen Baconnier)
+# Copyright (C) 2010 Sébastien Beau
+# Copyright 2015 Camptocamp SA (Damien Crier)
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+# from openerp.osv.orm import AbstractModel, TransientModel
+from openerp import models, api
+
+
+class EasyReconcileSimple(models.AbstractModel):
+ _name = 'easy.reconcile.simple'
+ _inherit = 'easy.reconcile.base'
+
+ # has to be subclassed
+ # field name used as key for matching the move lines
+ _key_field = None
+
+ @api.model
+ 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(
+ self,
+ [credit_line, debit_line],
+ allow_partial=False
+ )
+ if reconciled:
+ res += [credit_line['id'], debit_line['id']]
+ del lines[i]
+ break
+ count += 1
+ return res, [] # empty list for partial, only full rec in "simple" rec
+
+ def _simple_order(self, *args, **kwargs):
+ return "ORDER BY account_move_line.%s" % self._key_field
+
+ def _action_rec(self):
+ """Match only 2 move lines, do not allow partial reconcile"""
+ select = self._select(self)
+ 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 EasyReconcileSimpleName(models.TransientModel):
+ _name = 'easy.reconcile.simple.name'
+ _inherit = 'easy.reconcile.simple'
+
+ # has to be subclassed
+ # field name used as key for matching the move lines
+ _key_field = 'name'
+
+
+class EasyReconcileSimplePartner(models.TransientModel):
+ _name = 'easy.reconcile.simple.partner'
+ _inherit = 'easy.reconcile.simple'
+
+ # has to be subclassed
+ # field name used as key for matching the move lines
+ _key_field = 'partner_id'
+
+
+class EasyReconcileSimpleReference(models.TransientModel):
+ _name = 'easy.reconcile.simple.reference'
+ _inherit = 'easy.reconcile.simple'
+
+ # has to be subclassed
+ # field name used as key for matching the move lines
+ _key_field = 'ref'
From b9ab2f74b6cb9524a34752729ba821136cc5d4d7 Mon Sep 17 00:00:00 2001
From: Damien Crier
Date: Fri, 26 Jun 2015 09:48:32 +0200
Subject: [PATCH 38/52] [FIX] account_easy_reconcile: code review
---
account_easy_reconcile/README.rst | 17 ++-
account_easy_reconcile/__openerp__.py | 28 -----
account_easy_reconcile/base_reconciliation.py | 30 ++---
account_easy_reconcile/easy_reconcile.py | 110 ++++++------------
account_easy_reconcile/easy_reconcile.xml | 4 +-
.../easy_reconcile_history.py | 31 ++---
account_easy_reconcile/res_config.py | 6 +-
.../simple_reconciliation.py | 2 +-
8 files changed, 91 insertions(+), 137 deletions(-)
diff --git a/account_easy_reconcile/README.rst b/account_easy_reconcile/README.rst
index 39e6b2c9..b603301a 100644
--- a/account_easy_reconcile/README.rst
+++ b/account_easy_reconcile/README.rst
@@ -42,9 +42,22 @@ Credits
Contributors
------------
-
-* Damien Crier
+* 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
----------
diff --git a/account_easy_reconcile/__openerp__.py b/account_easy_reconcile/__openerp__.py
index df579062..472b977d 100755
--- a/account_easy_reconcile/__openerp__.py
+++ b/account_easy_reconcile/__openerp__.py
@@ -25,34 +25,6 @@
"version": "1.3.1",
"depends": ["account"],
"author": "Akretion,Camptocamp,Odoo Community Association (OCA)",
- "description": """
-Easy 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.
-
-You may be interested to install also the
-``account_advanced_reconciliation`` module.
-This latter add more complex reconciliations,
-allows multiple lines and partial.
-
-""",
"website": "http://www.akretion.com/",
"category": "Finance",
"data": ["easy_reconcile.xml",
diff --git a/account_easy_reconcile/base_reconciliation.py b/account_easy_reconcile/base_reconciliation.py
index 787f0f76..16843f77 100644
--- a/account_easy_reconcile/base_reconciliation.py
+++ b/account_easy_reconcile/base_reconciliation.py
@@ -78,9 +78,11 @@ class EasyReconcileBase(models.AbstractModel):
'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 "
"LEFT OUTER JOIN account_move_reconcile ON "
@@ -88,6 +90,7 @@ class EasyReconcileBase(models.AbstractModel):
"= account_move_reconcile.id)"
)
+ @api.multi
def _where(self, *args, **kwargs):
where = ("WHERE account_move_line.account_id = %s "
"AND COALESCE(account_move_reconcile.type,'') <> 'manual' "
@@ -102,8 +105,9 @@ class EasyReconcileBase(models.AbstractModel):
params.append(tuple([l.id for l in self.partner_ids]))
return where, params
+ @api.multi
def _get_filter(self):
- ml_obj = self.pool.get('account.move.line')
+ ml_obj = self.env['account.move.line']
where = ''
params = []
if self.filter:
@@ -116,7 +120,7 @@ class EasyReconcileBase(models.AbstractModel):
@api.multi
def _below_writeoff_limit(self, lines, writeoff_limit):
self.ensure_one()
- precision = self.pool.get('decimal.precision').precision_get('Account')
+ precision = self.env['decimal.precision'].precision_get('Account')
keys = ('debit', 'credit')
sums = reduce(
lambda line, memo:
@@ -134,7 +138,8 @@ class EasyReconcileBase(models.AbstractModel):
def last_period(mlines):
period_ids = [ml['period_id'] for ml in mlines]
- return max(period_ids, key=attrgetter('date_stop'))
+ periods = self.env['account.period'].browse(period_ids)
+ return max(periods, key=attrgetter('date_stop'))
def last_date(mlines):
return max(mlines, key=itemgetter('date'))
@@ -175,13 +180,12 @@ class EasyReconcileBase(models.AbstractModel):
"""
self.ensure_one()
ml_obj = self.env['account.move.line']
- writeoff = self.write_off
line_ids = [l['id'] for l in lines]
below_writeoff, sum_debit, sum_credit = self._below_writeoff_limit(
- lines, writeoff
+ lines, self.write_off
)
date = self._get_rec_date(lines, self.date_base_on)
- rec_ctx = dict(self.env.context or {}, date_p=date)
+ rec_ctx = dict(self.env.context, date_p=date)
if below_writeoff:
if sum_credit > sum_debit:
writeoff_account_id = self.account_profit_id.id
@@ -190,11 +194,11 @@ class EasyReconcileBase(models.AbstractModel):
period_id = self.env['account.period'].find(dt=date)[0]
if self.analytic_account_id:
rec_ctx['analytic_id'] = self.analytic_account_id.id
- ml_obj.with_context(rec_ctx).reconcile(
- line_ids,
+ line_rs = ml_obj.browse(line_ids)
+ line_rs.with_context(rec_ctx).reconcile(
type='auto',
writeoff_acc_id=writeoff_account_id,
- writeoff_period_id=period_id,
+ writeoff_period_id=period_id.id,
writeoff_journal_id=self.journal_id.id
)
return True, True
@@ -226,12 +230,12 @@ class EasyReconcileBase(models.AbstractModel):
period_id = self.env['account.period'].find(dt=date)[0]
if self.analytic_account_id:
rec_ctx['analytic_id'] = self.analytic_account_id.id
- ml_obj.with_context(rec_ctx).reconcile_partial(
- line_ids,
+ line_rs = ml_obj.browse(line_ids)
+ line_rs.with_context(rec_ctx).reconcile(
type='manual',
writeoff_acc_id=writeoff_account_id,
- writeoff_period_id=period_id,
- writeoff_journal_id=self.journal_id.id,
+ writeoff_period_id=period_id.id,
+ writeoff_journal_id=self.journal_id.id
)
return True, False
return False, False
diff --git a/account_easy_reconcile/easy_reconcile.py b/account_easy_reconcile/easy_reconcile.py
index 376a056e..0a8f50ed 100644
--- a/account_easy_reconcile/easy_reconcile.py
+++ b/account_easy_reconcile/easy_reconcile.py
@@ -22,8 +22,7 @@
from datetime import datetime
from openerp import models, api, fields, _
-from openerp.tools import DEFAULT_SERVER_DATETIME_FORMAT
-from openerp.exceptions import except_orm
+from openerp.exceptions import Warning
from openerp import sql_db
# from openerp import pooler
@@ -65,16 +64,16 @@ class EasyReconcileOptions(models.AbstractModel):
required=True,
string='Date of reconciliation',
default='end_period_last_credit')
- filter = fields.Char(string='Filter', size=128)
+ filter = fields.Char(string='Filter')
analytic_account_id = fields.Many2one('account.analytic.account',
string='Analytic_account',
- help="Analytic account"
+ help="Analytic account "
"for the write-off")
income_exchange_account_id = fields.Many2one('account.account',
- string='Gain Exchange'
+ string='Gain Exchange '
'Rate Account')
expense_exchange_account_id = fields.Many2one('account.account',
- string='Loss Exchange'
+ string='Loss Exchange '
'Rate Account')
@@ -116,23 +115,6 @@ class AccountEasyReconcileMethod(models.Model):
readonly=True
)
-# def init(self, cr):
-# """ Migration stuff
-#
-# Name is not anymore methods names but the name
-# of the model which does the reconciliation
-# """
-# cr.execute("""
-# UPDATE account_easy_reconcile_method
-# SET name = 'easy.reconcile.simple.partner'
-# WHERE name = 'action_rec_auto_partner'
-# """)
-# cr.execute("""
-# UPDATE account_easy_reconcile_method
-# SET name = 'easy.reconcile.simple.name'
-# WHERE name = 'action_rec_auto_name'
-# """)
-
class AccountEasyReconcile(models.Model):
@@ -144,21 +126,21 @@ class AccountEasyReconcile(models.Model):
@api.depends('account')
def _get_total_unrec(self):
obj_move_line = self.env['account.move.line']
- self.unreconciled_count = len(obj_move_line.search(
+ self.unreconciled_count = obj_move_line.search_count(
[('account_id', '=', self.account.id),
('reconcile_id', '=', False),
('reconcile_partial_id', '=', False)],
- ))
+ )
@api.one
@api.depends('account')
def _get_partial_rec(self):
obj_move_line = self.env['account.move.line']
- self.reconciled_partial_count = len(obj_move_line.search(
+ self.reconciled_partial_count = obj_move_line.search_count(
[('account_id', '=', self.account.id),
('reconcile_id', '=', False),
('reconcile_partial_id', '!=', False)],
- ))
+ )
@api.one
@api.depends('history_ids')
@@ -171,9 +153,9 @@ class AccountEasyReconcile(models.Model):
[('easy_reconcile_id', '=', self.id)],
limit=1, order='date desc'
)
- self.last_history = last_history_rs[0] if last_history_rs else False
+ self.last_history = last_history_rs or False
- name = fields.Char(string='Name', size=32, required=True)
+ name = fields.Char(string='Name', required=True)
account = fields.Many2one('account.account',
string='Account',
required=True,
@@ -197,7 +179,6 @@ class AccountEasyReconcile(models.Model):
last_history = fields.Many2one('easy.reconcile.history',
string='readonly=True',
compute='_last_history',
- readonly=True
)
company_id = fields.Many2one('res.company', string='Company')
@@ -205,20 +186,14 @@ class AccountEasyReconcile(models.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 and
- rec_method.account_lost_id.id),
- 'account_profit_id': (rec_method.account_profit_id and
- rec_method.account_profit_id.id),
- 'analytic_account_id': (rec_method.analytic_account_id and
- rec_method.analytic_account_id.id),
+ 'account_lost_id': (rec_method.account_lost_id.id),
+ 'account_profit_id': (rec_method.account_profit_id.id),
+ 'analytic_account_id': (rec_method.analytic_account_id.id),
'income_exchange_account_id':
- (rec_method.income_exchange_account_id and
- rec_method.income_exchange_account_id.id),
+ (rec_method.income_exchange_account_id.id),
'expense_exchange_account_id':
- (rec_method.income_exchange_account_id and
- rec_method.income_exchange_account_id.id),
- 'journal_id': (rec_method.journal_id and
- rec_method.journal_id.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}
@@ -305,7 +280,7 @@ class AccountEasyReconcile(models.Model):
self.env['easy.reconcile.history'].create(
{
'easy_reconcile_id': rec.id,
- 'date': fields.datetime.now(),
+ 'date': fields.Datetime.now(),
'reconcile_ids': [],
'reconcile_partial_ids': [],
}
@@ -315,8 +290,6 @@ class AccountEasyReconcile(models.Model):
new_cr.commit()
new_cr.close()
-# self.env.cr.close()
-
return True
@api.model
@@ -325,10 +298,10 @@ class AccountEasyReconcile(models.Model):
be called when there is no history on the reconciliation
task.
"""
- raise except_orm(
- _('Error'),
+ raise Warning(
_('There is no history of reconciled '
- 'items on the task: %s.') % rec.name)
+ 'items on the task: %s.') % rec.name
+ )
@api.model
def _open_move_line_list(self, move_line_ids, name):
@@ -349,52 +322,42 @@ class AccountEasyReconcile(models.Model):
""" Open the view of move line with the unreconciled move lines"""
self.ensure_one()
obj_move_line = self.env['account.move.line']
- line_ids = obj_move_line.search(
+ lines = obj_move_line.search(
[('account_id', '=', self.account.id),
('reconcile_id', '=', False),
('reconcile_partial_id', '=', False)])
name = _('Unreconciled items')
- return self._open_move_line_list(line_ids and line_ids.ids or [], name)
+ return self._open_move_line_list(lines.ids or [], name)
@api.multi
def open_partial_reconcile(self):
""" Open the view of move line with the unreconciled move lines"""
self.ensure_one()
obj_move_line = self.env['account.move.line']
- line_ids = obj_move_line.search(
+ lines = obj_move_line.search(
[('account_id', '=', self.account.id),
('reconcile_id', '=', False),
('reconcile_partial_id', '!=', False)])
name = _('Partial reconciled items')
- return self._open_move_line_list(line_ids and line_ids.ids or [], name)
+ return self._open_move_line_list(lines.ids or [], name)
- @api.model
- def last_history_reconcile(self, rec_id):
+ @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 isinstance(rec_id, (tuple, list)):
- assert len(rec_id) == 1, \
- "Only 1 id expected"
- rec_id = rec_id[0]
- rec = self.browse(rec_id)
- if not rec.last_history:
- self._no_history(rec)
- return rec.last_history.open_reconcile()
+ if not self.last_history:
+ self._no_history()
+ return self.last_history.open_reconcile()
- @api.model
- def last_history_partial(self, rec_id):
+ @api.multi
+ def last_history_partial(self):
""" Get the last history record for this reconciliation profile
and return the action which opens move lines reconciled
"""
- if isinstance(rec_id, (tuple, list)):
- assert len(rec_id) == 1, \
- "Only 1 id expected"
- rec_id = rec_id[0]
- rec = self.browse(rec_id)
- if not rec.last_history:
- self._no_history(rec)
- return rec.last_history.open_partial()
+ if not self.last_history:
+ self._no_history()
+ return self.last_history.open_partial()
@api.model
def run_scheduler(self, run_all=None):
@@ -408,8 +371,7 @@ class AccountEasyReconcile(models.Model):
"""
def _get_date(reconcile):
if reconcile.last_history.date:
- return datetime.strptime(reconcile.last_history.date,
- DEFAULT_SERVER_DATETIME_FORMAT)
+ return fields.Datetime.from_string(reconcile.last_history.date)
else:
return datetime.min
diff --git a/account_easy_reconcile/easy_reconcile.xml b/account_easy_reconcile/easy_reconcile.xml
index 076bd3b3..7de62cbc 100644
--- a/account_easy_reconcile/easy_reconcile.xml
+++ b/account_easy_reconcile/easy_reconcile.xml
@@ -136,7 +136,7 @@ The lines should have the same amount (with the write-off) and the same referenc
-
+
@@ -156,7 +156,7 @@ The lines should have the same amount (with the write-off) and the same referenc
-
+
diff --git a/account_easy_reconcile/easy_reconcile_history.py b/account_easy_reconcile/easy_reconcile_history.py
index 3990f675..b8a2c010 100644
--- a/account_easy_reconcile/easy_reconcile_history.py
+++ b/account_easy_reconcile/easy_reconcile_history.py
@@ -36,15 +36,14 @@ class EasyReconcileHistory(models.Model):
def _reconcile_line_ids(self):
move_line_ids = []
for reconcile in self.reconcile_ids:
- move_line_ids += [line.id
- for line
- in reconcile.line_id]
+ move_lines = reconcile.mapped('line_id')
+ move_line_ids.extend(move_lines.ids)
self.reconcile_line_ids = move_line_ids
+
move_line_ids = []
for reconcile in self.reconcile_partial_ids:
- move_line_ids += [line.id
- for line
- in reconcile.line_partial_ids]
+ move_lines = reconcile.mapped('line_partial_ids')
+ move_line_ids.extend(move_lines.ids)
self.partial_line_ids = move_line_ids
easy_reconcile_id = fields.Many2one(
@@ -69,15 +68,13 @@ class EasyReconcileHistory(models.Model):
comodel_name='account.move.line',
relation='account_move_line_history_rel',
string='Reconciled Items',
- readonly=True,
multi='lines',
_compute='_reconcile_line_ids'
)
partial_line_ids = fields.Many2many(
comodel_name='account.move.line',
- relation='account_move_line_history_rel',
+ relation='account_move_line_history_partial_rel',
string='Partially Reconciled Items',
- readonly=True,
multi='lines',
_compute='_reconcile_line_ids'
)
@@ -99,14 +96,19 @@ class EasyReconcileHistory(models.Model):
"""
assert rec_type in ('full', 'partial'), \
"rec_type must be 'full' or 'partial'"
- history = self
+ move_line_ids = []
if rec_type == 'full':
- field = 'reconcile_line_ids'
+ move_line_ids = []
+ for reconcile in self.reconcile_ids:
+ move_lines = reconcile.mapped('line_id')
+ move_line_ids.extend(move_lines.ids)
name = _('Reconciliations')
else:
- field = 'partial_line_ids'
+ move_line_ids = []
+ for reconcile in self.reconcile_partial_ids:
+ move_lines = reconcile.mapped('line_partial_ids')
+ move_line_ids.extend(move_lines.ids)
name = _('Partial Reconciliations')
- move_line_ids = [line.id for line in getattr(history, field)]
return {
'name': name,
'view_mode': 'tree,form',
@@ -119,6 +121,7 @@ class EasyReconcileHistory(models.Model):
'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
@@ -130,7 +133,7 @@ class EasyReconcileHistory(models.Model):
self.ensure_one()
return self._open_move_lines(rec_type='full')
- @api.model
+ @api.multi
def open_partial(self):
""" For an history record, open the view of move line
with the partially reconciled move lines
diff --git a/account_easy_reconcile/res_config.py b/account_easy_reconcile/res_config.py
index 36265a91..e4e16da0 100644
--- a/account_easy_reconcile/res_config.py
+++ b/account_easy_reconcile/res_config.py
@@ -28,7 +28,7 @@ class AccountConfigSettings(models.TransientModel):
reconciliation_commit_every = fields.Integer(
related="company_id.reconciliation_commit_every",
- string="How often to commit when performing automatic"
+ string="How often to commit when performing automatic "
"reconciliation.",
help="""Leave zero to commit only at the end of the process."""
)
@@ -52,7 +52,7 @@ class Company(models.Model):
_inherit = "res.company"
reconciliation_commit_every = fields.Integer(
- string="How often to commit when performing automatic"
+ string="How often to commit when performing automatic "
"reconciliation.",
- help="""Leave zero to commit only at the end of the process."""
+ help="Leave zero to commit only at the end of the process."
)
diff --git a/account_easy_reconcile/simple_reconciliation.py b/account_easy_reconcile/simple_reconciliation.py
index 8cd12091..b54ffd03 100644
--- a/account_easy_reconcile/simple_reconciliation.py
+++ b/account_easy_reconcile/simple_reconciliation.py
@@ -54,7 +54,6 @@ class EasyReconcileSimple(models.AbstractModel):
if not check:
continue
reconciled, dummy = self._reconcile_lines(
- self,
[credit_line, debit_line],
allow_partial=False
)
@@ -65,6 +64,7 @@ class EasyReconcileSimple(models.AbstractModel):
count += 1
return res, [] # empty list for partial, only full rec in "simple" rec
+ @api.multi
def _simple_order(self, *args, **kwargs):
return "ORDER BY account_move_line.%s" % self._key_field
From a780bf124ce49c27b6d10f0d7766253a52a7a007 Mon Sep 17 00:00:00 2001
From: Damien Crier
Date: Fri, 3 Jul 2015 15:54:15 +0200
Subject: [PATCH 39/52] [IMP] account_easy_reconcile: add tests
[IMP] add translations
[FIX] add decorator multi
---
account_easy_reconcile/easy_reconcile.py | 7 +-
.../easy_reconcile_history.py | 13 +-
account_easy_reconcile/i18n/es.po | 434 +++++++++++++++++
account_easy_reconcile/i18n/fr.po | 451 ++++++++++++++++++
account_easy_reconcile/tests/__init__.py | 24 +
.../tests/test_onchange_company.py | 63 +++
.../tests/test_reconcile.py | 136 ++++++
.../tests/test_reconcile_history.py | 78 +++
8 files changed, 1196 insertions(+), 10 deletions(-)
create mode 100644 account_easy_reconcile/i18n/es.po
create mode 100644 account_easy_reconcile/i18n/fr.po
create mode 100644 account_easy_reconcile/tests/__init__.py
create mode 100644 account_easy_reconcile/tests/test_onchange_company.py
create mode 100644 account_easy_reconcile/tests/test_reconcile.py
create mode 100644 account_easy_reconcile/tests/test_reconcile_history.py
diff --git a/account_easy_reconcile/easy_reconcile.py b/account_easy_reconcile/easy_reconcile.py
index 0a8f50ed..579ed11f 100644
--- a/account_easy_reconcile/easy_reconcile.py
+++ b/account_easy_reconcile/easy_reconcile.py
@@ -292,15 +292,16 @@ class AccountEasyReconcile(models.Model):
return True
- @api.model
- def _no_history(self, rec):
+# @api.model
+# def _no_history(self, rec):
+ def _no_history(self):
""" Raise an `orm.except_orm` error, supposed to
be called when there is no history on the reconciliation
task.
"""
raise Warning(
_('There is no history of reconciled '
- 'items on the task: %s.') % rec.name
+ 'items on the task: %s.') % self.name
)
@api.model
diff --git a/account_easy_reconcile/easy_reconcile_history.py b/account_easy_reconcile/easy_reconcile_history.py
index b8a2c010..53d64aa8 100644
--- a/account_easy_reconcile/easy_reconcile_history.py
+++ b/account_easy_reconcile/easy_reconcile_history.py
@@ -40,11 +40,11 @@ class EasyReconcileHistory(models.Model):
move_line_ids.extend(move_lines.ids)
self.reconcile_line_ids = move_line_ids
- move_line_ids = []
- for reconcile in self.reconcile_partial_ids:
- move_lines = reconcile.mapped('line_partial_ids')
- move_line_ids.extend(move_lines.ids)
- self.partial_line_ids = move_line_ids
+ move_line_ids2 = []
+ for reconcile2 in self.reconcile_partial_ids:
+ move_lines2 = reconcile2.mapped('line_partial_ids')
+ move_line_ids2.extend(move_lines2.ids)
+ self.partial_line_ids = move_line_ids2
easy_reconcile_id = fields.Many2one(
'account.easy.reconcile',
@@ -68,14 +68,12 @@ class EasyReconcileHistory(models.Model):
comodel_name='account.move.line',
relation='account_move_line_history_rel',
string='Reconciled Items',
- multi='lines',
_compute='_reconcile_line_ids'
)
partial_line_ids = fields.Many2many(
comodel_name='account.move.line',
relation='account_move_line_history_partial_rel',
string='Partially Reconciled Items',
- multi='lines',
_compute='_reconcile_line_ids'
)
company_id = fields.Many2one(
@@ -86,6 +84,7 @@ class EasyReconcileHistory(models.Model):
related='easy_reconcile_id.company_id'
)
+ @api.multi
def _open_move_lines(self, rec_type='full'):
""" For an history record, open the view of move line with
the reconciled or partially reconciled move lines
diff --git a/account_easy_reconcile/i18n/es.po b/account_easy_reconcile/i18n/es.po
new file mode 100644
index 00000000..b4897878
--- /dev/null
+++ b/account_easy_reconcile/i18n/es.po
@@ -0,0 +1,434 @@
+# Spanish translation for banking-addons
+# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
+# This file is distributed under the same license as the banking-addons package.
+# FIRST AUTHOR , 2014.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: banking-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2014-01-21 11:55+0000\n"
+"PO-Revision-Date: 2014-06-05 22:21+0000\n"
+"Last-Translator: Pedro Manuel Baeza \n"
+"Language-Team: Spanish \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2014-06-06 06:36+0000\n"
+"X-Generator: Launchpad (build 17031)\n"
+
+#. module: account_easy_reconcile
+#: code:addons/account_easy_reconcile/easy_reconcile_history.py:101
+#: field:easy.reconcile.history,reconcile_ids:0
+#, python-format
+msgid "Reconciliations"
+msgstr "Conciliaciones"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+#: view:easy.reconcile.history:0
+msgid "Automatic Easy Reconcile History"
+msgstr "Historial de conciliación automática sencilla"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+msgid "Information"
+msgstr "Información"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+#: view:easy.reconcile.history:0
+msgid "Go to partially reconciled items"
+msgstr "Ir a los elementos parcialmente conciliados"
+
+#. module: account_easy_reconcile
+#: help:account.easy.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_easy_reconcile
+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_history
+msgid "easy.reconcile.history"
+msgstr "easy.reconcile.history"
+
+#. module: account_easy_reconcile
+#: model:ir.actions.act_window,help:account_easy_reconcile.action_account_easy_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"
+"Pulse para añadir un pefil de conciliación.\n"
+"
\n"
+"Un perfil de conciliación especifica, para una cuenta, como\n"
+"los apuntes deben ser conciliados.\n"
+"Puede seleccionar uno o varios métodos de conciliación que\n"
+"serán ejecutados secuencialmente para casar los apuntes\n"
+"entre ellos.\n"
+"
\n"
+" "
+
+#. module: account_easy_reconcile
+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_options
+msgid "easy.reconcile.options"
+msgstr "easy.reconcile.options"
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:0
+msgid "Group By..."
+msgstr "Agrupar por..."
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,unreconciled_count:0
+msgid "Unreconciled Items"
+msgstr "Apuntes no conciliados"
+
+#. module: account_easy_reconcile
+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_base
+msgid "easy.reconcile.base"
+msgstr "easy.reconcile.base"
+
+#. module: account_easy_reconcile
+#: field:easy.reconcile.history,reconcile_line_ids:0
+msgid "Reconciled Items"
+msgstr "Elementos conciliados"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,reconcile_method:0
+msgid "Method"
+msgstr "Método"
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:0
+msgid "7 Days"
+msgstr "7 días"
+
+#. module: account_easy_reconcile
+#: model:ir.actions.act_window,name:account_easy_reconcile.action_easy_reconcile_history
+msgid "Easy Automatic Reconcile History"
+msgstr "Historial de la conciliación automática sencilla"
+
+#. module: account_easy_reconcile
+#: field:easy.reconcile.history,date:0
+msgid "Run date"
+msgstr "Fecha ejecucción"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+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_easy_reconcile
+#: model:ir.actions.act_window,name:account_easy_reconcile.act_easy_reconcile_to_history
+msgid "History Details"
+msgstr "Detalles del historial"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+msgid "Display items reconciled on the last run"
+msgstr "Mostrar elementos conciliados en la última ejecucción"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,name:0
+msgid "Type"
+msgstr "Tipo"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,company_id:0
+#: field:account.easy.reconcile.method,company_id:0
+#: field:easy.reconcile.history,company_id:0
+msgid "Company"
+msgstr "Compañía"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,account_profit_id:0
+#: field:easy.reconcile.base,account_profit_id:0
+#: field:easy.reconcile.options,account_profit_id:0
+#: field:easy.reconcile.simple,account_profit_id:0
+#: field:easy.reconcile.simple.name,account_profit_id:0
+#: field:easy.reconcile.simple.partner,account_profit_id:0
+#: field:easy.reconcile.simple.reference,account_profit_id:0
+msgid "Account Profit"
+msgstr "Cuenta de ganancias"
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:0
+msgid "Todays' Reconcilations"
+msgstr "Conciliaciones de hoy"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+msgid "Simple. Amount and Name"
+msgstr "Simple. Cantidad y nombre"
+
+#. module: account_easy_reconcile
+#: field:easy.reconcile.base,partner_ids:0
+#: field:easy.reconcile.simple,partner_ids:0
+#: field:easy.reconcile.simple.name,partner_ids:0
+#: field:easy.reconcile.simple.partner,partner_ids:0
+#: field:easy.reconcile.simple.reference,partner_ids:0
+msgid "Restrict on partners"
+msgstr "Restringir en las empresas"
+
+#. module: account_easy_reconcile
+#: model:ir.actions.act_window,name:account_easy_reconcile.action_account_easy_reconcile
+#: model:ir.ui.menu,name:account_easy_reconcile.menu_easy_reconcile
+msgid "Easy Automatic Reconcile"
+msgstr "Conciliación automática simple"
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:0
+msgid "Today"
+msgstr "Hoy"
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:0
+msgid "Date"
+msgstr "Fecha"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,last_history:0
+msgid "Last History"
+msgstr "Último historial"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+msgid "Configuration"
+msgstr "Configuración"
+
+#. module: account_easy_reconcile
+#: field:easy.reconcile.history,partial_line_ids:0
+msgid "Partially Reconciled Items"
+msgstr "Elementos parcialmente conciliados"
+
+#. module: account_easy_reconcile
+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_partner
+msgid "easy.reconcile.simple.partner"
+msgstr "easy.reconcile.simple.partner"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,write_off:0
+#: field:easy.reconcile.base,write_off:0
+#: field:easy.reconcile.options,write_off:0
+#: field:easy.reconcile.simple,write_off:0
+#: field:easy.reconcile.simple.name,write_off:0
+#: field:easy.reconcile.simple.partner,write_off:0
+#: field:easy.reconcile.simple.reference,write_off:0
+msgid "Write off allowed"
+msgstr "Desajuste permitido"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+msgid "Automatic Easy Reconcile"
+msgstr "Conciliación automática sencilla"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,account:0
+#: field:easy.reconcile.base,account_id:0
+#: field:easy.reconcile.simple,account_id:0
+#: field:easy.reconcile.simple.name,account_id:0
+#: field:easy.reconcile.simple.partner,account_id:0
+#: field:easy.reconcile.simple.reference,account_id:0
+msgid "Account"
+msgstr "Cuenta"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,task_id:0
+msgid "Task"
+msgstr "Tarea"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,name:0
+msgid "Name"
+msgstr "Nombre"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+msgid "Simple. Amount and Partner"
+msgstr "Simple. Cantidad y empresa"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+msgid "Start Auto Reconcilation"
+msgstr "Iniciar conciliación automática"
+
+#. module: account_easy_reconcile
+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_name
+msgid "easy.reconcile.simple.name"
+msgstr "easy.reconcile.simple.name"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,filter:0
+#: field:easy.reconcile.base,filter:0
+#: field:easy.reconcile.options,filter:0
+#: field:easy.reconcile.simple,filter:0
+#: field:easy.reconcile.simple.name,filter:0
+#: field:easy.reconcile.simple.partner,filter:0
+#: field:easy.reconcile.simple.reference,filter:0
+msgid "Filter"
+msgstr "Filtro"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+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_easy_reconcile
+#: field:easy.reconcile.history,easy_reconcile_id:0
+msgid "Reconcile Profile"
+msgstr "Perfil de conciliación"
+
+#. module: account_easy_reconcile
+#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile_method
+msgid "reconcile method for account_easy_reconcile"
+msgstr "Método de conciliación para account_easy_reconcile"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+msgid "Start Auto Reconciliation"
+msgstr "Iniciar auto-conciliación"
+
+#. module: account_easy_reconcile
+#: code:addons/account_easy_reconcile/easy_reconcile.py:233
+#, python-format
+msgid "Error"
+msgstr "Error"
+
+#. module: account_easy_reconcile
+#: code:addons/account_easy_reconcile/easy_reconcile.py:258
+#, 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_easy_reconcile
+#: view:account.easy.reconcile:0
+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_easy_reconcile
+#: field:account.easy.reconcile.method,account_lost_id:0
+#: field:easy.reconcile.base,account_lost_id:0
+#: field:easy.reconcile.options,account_lost_id:0
+#: field:easy.reconcile.simple,account_lost_id:0
+#: field:easy.reconcile.simple.name,account_lost_id:0
+#: field:easy.reconcile.simple.partner,account_lost_id:0
+#: field:easy.reconcile.simple.reference,account_lost_id:0
+msgid "Account Lost"
+msgstr "Cuenta de pérdidas"
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:0
+msgid "Reconciliation Profile"
+msgstr "Perfil de conciliación"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+#: field:account.easy.reconcile,history_ids:0
+msgid "History"
+msgstr "Historial"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+#: view:easy.reconcile.history:0
+msgid "Go to reconciled items"
+msgstr "Ir a los elementos conciliados"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+msgid "Profile Information"
+msgstr "Información del perfil"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile.method:0
+msgid "Automatic Easy Reconcile Method"
+msgstr "Método de conciliación automática sencilla"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+msgid "Simple. Amount and Reference"
+msgstr "Simple. Cantidad y referencia"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+msgid "Display items partially reconciled on the last run"
+msgstr "Mostrar elementos conciliados parcialmente en la última ejecucción"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,sequence:0
+msgid "Sequence"
+msgstr "Secuencia"
+
+#. module: account_easy_reconcile
+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple
+msgid "easy.reconcile.simple"
+msgstr "easy.reconcile.simple"
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:0
+msgid "Reconciliations of last 7 days"
+msgstr "Conciliaciones de los últimos 7 días"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,date_base_on:0
+#: field:easy.reconcile.base,date_base_on:0
+#: field:easy.reconcile.options,date_base_on:0
+#: field:easy.reconcile.simple,date_base_on:0
+#: field:easy.reconcile.simple.name,date_base_on:0
+#: field:easy.reconcile.simple.partner,date_base_on:0
+#: field:easy.reconcile.simple.reference,date_base_on:0
+msgid "Date of reconciliation"
+msgstr "Fecha de conciliación"
+
+#. module: account_easy_reconcile
+#: code:addons/account_easy_reconcile/easy_reconcile_history.py:104
+#: field:easy.reconcile.history,reconcile_partial_ids:0
+#, python-format
+msgid "Partial Reconciliations"
+msgstr "Conciliaciones parciales"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,journal_id:0
+#: field:easy.reconcile.base,journal_id:0
+#: field:easy.reconcile.options,journal_id:0
+#: field:easy.reconcile.simple,journal_id:0
+#: field:easy.reconcile.simple.name,journal_id:0
+#: field:easy.reconcile.simple.partner,journal_id:0
+#: field:easy.reconcile.simple.reference,journal_id:0
+msgid "Journal"
+msgstr "Diario"
+
+#. module: account_easy_reconcile
+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_reference
+msgid "easy.reconcile.simple.reference"
+msgstr "easy.reconcile.simple.reference"
+
+#. module: account_easy_reconcile
+#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile
+msgid "account easy reconcile"
+msgstr "account easy reconcile"
diff --git a/account_easy_reconcile/i18n/fr.po b/account_easy_reconcile/i18n/fr.po
new file mode 100644
index 00000000..957765d4
--- /dev/null
+++ b/account_easy_reconcile/i18n/fr.po
@@ -0,0 +1,451 @@
+# Translation of OpenERP Server.
+# This file contains the translation of the following modules:
+# * account_easy_reconcile
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OpenERP Server 6.1\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-01-21 11:55+0000\n"
+"PO-Revision-Date: 2014-03-21 15:25+0000\n"
+"Last-Translator: Guewen Baconnier @ Camptocamp \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2014-05-22 06:49+0000\n"
+"X-Generator: Launchpad (build 17017)\n"
+"Language: \n"
+
+#. module: account_easy_reconcile
+#: code:addons/account_easy_reconcile/easy_reconcile_history.py:101
+#: field:easy.reconcile.history,reconcile_ids:0
+#, python-format
+msgid "Reconciliations"
+msgstr "Lettrages"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+#: view:easy.reconcile.history:0
+msgid "Automatic Easy Reconcile History"
+msgstr "Historique des lettrages automatisés"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+msgid "Information"
+msgstr "Information"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+#: view:easy.reconcile.history:0
+msgid "Go to partially reconciled items"
+msgstr "Voir les entrées partiellement lettrées"
+
+#. module: account_easy_reconcile
+#: help:account.easy.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_easy_reconcile
+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_history
+msgid "easy.reconcile.history"
+msgstr "easy.reconcile.history"
+
+#. module: account_easy_reconcile
+#: model:ir.actions.act_window,help:account_easy_reconcile.action_account_easy_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_easy_reconcile
+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_options
+msgid "easy.reconcile.options"
+msgstr "lettrage automatisé.options"
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:0
+msgid "Group By..."
+msgstr "Grouper par..."
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,unreconciled_count:0
+msgid "Unreconciled Items"
+msgstr "Écritures non lettrées"
+
+#. module: account_easy_reconcile
+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_base
+msgid "easy.reconcile.base"
+msgstr "easy.reconcile.base"
+
+#. module: account_easy_reconcile
+#: field:easy.reconcile.history,reconcile_line_ids:0
+msgid "Reconciled Items"
+msgstr "Écritures lettrées"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,reconcile_method:0
+msgid "Method"
+msgstr "Méthode"
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:0
+msgid "7 Days"
+msgstr "7 jours"
+
+#. module: account_easy_reconcile
+#: model:ir.actions.act_window,name:account_easy_reconcile.action_easy_reconcile_history
+msgid "Easy Automatic Reconcile History"
+msgstr "Lettrage automatisé"
+
+#. module: account_easy_reconcile
+#: field:easy.reconcile.history,date:0
+msgid "Run date"
+msgstr "Date de lancement"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+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_easy_reconcile
+#: model:ir.actions.act_window,name:account_easy_reconcile.act_easy_reconcile_to_history
+msgid "History Details"
+msgstr "Détails de l'historique"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+msgid "Display items reconciled on the last run"
+msgstr "Voir les entrées lettrées au dernier lettrage"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,name:0
+msgid "Type"
+msgstr "Type"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,company_id:0
+#: field:account.easy.reconcile.method,company_id:0
+#: field:easy.reconcile.history,company_id:0
+msgid "Company"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,account_profit_id:0
+#: field:easy.reconcile.base,account_profit_id:0
+#: field:easy.reconcile.options,account_profit_id:0
+#: field:easy.reconcile.simple,account_profit_id:0
+#: field:easy.reconcile.simple.name,account_profit_id:0
+#: field:easy.reconcile.simple.partner,account_profit_id:0
+#: field:easy.reconcile.simple.reference,account_profit_id:0
+msgid "Account Profit"
+msgstr "Compte de profits"
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:0
+msgid "Todays' Reconcilations"
+msgstr "Lettrages du jour"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+msgid "Simple. Amount and Name"
+msgstr "Simple. Montant et description"
+
+#. module: account_easy_reconcile
+#: field:easy.reconcile.base,partner_ids:0
+#: field:easy.reconcile.simple,partner_ids:0
+#: field:easy.reconcile.simple.name,partner_ids:0
+#: field:easy.reconcile.simple.partner,partner_ids:0
+#: field:easy.reconcile.simple.reference,partner_ids:0
+msgid "Restrict on partners"
+msgstr "Filtrer sur des partenaires"
+
+#. module: account_easy_reconcile
+#: model:ir.actions.act_window,name:account_easy_reconcile.action_account_easy_reconcile
+#: model:ir.ui.menu,name:account_easy_reconcile.menu_easy_reconcile
+msgid "Easy Automatic Reconcile"
+msgstr "Lettrage automatisé"
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:0
+msgid "Today"
+msgstr "Aujourd'hui"
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:0
+msgid "Date"
+msgstr "Date"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,last_history:0
+msgid "Last History"
+msgstr "Dernier historique"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+msgid "Configuration"
+msgstr "Configuration"
+
+#. module: account_easy_reconcile
+#: field:easy.reconcile.history,partial_line_ids:0
+msgid "Partially Reconciled Items"
+msgstr "Écritures partiellement lettrées"
+
+#. module: account_easy_reconcile
+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_partner
+msgid "easy.reconcile.simple.partner"
+msgstr "easy.reconcile.simple.partner"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,write_off:0
+#: field:easy.reconcile.base,write_off:0
+#: field:easy.reconcile.options,write_off:0
+#: field:easy.reconcile.simple,write_off:0
+#: field:easy.reconcile.simple.name,write_off:0
+#: field:easy.reconcile.simple.partner,write_off:0
+#: field:easy.reconcile.simple.reference,write_off:0
+msgid "Write off allowed"
+msgstr "Écart autorisé"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+msgid "Automatic Easy Reconcile"
+msgstr "Lettrage automatisé"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,account:0
+#: field:easy.reconcile.base,account_id:0
+#: field:easy.reconcile.simple,account_id:0
+#: field:easy.reconcile.simple.name,account_id:0
+#: field:easy.reconcile.simple.partner,account_id:0
+#: field:easy.reconcile.simple.reference,account_id:0
+msgid "Account"
+msgstr "Compte"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,task_id:0
+msgid "Task"
+msgstr "Tâche"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,name:0
+msgid "Name"
+msgstr "Nom"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+msgid "Simple. Amount and Partner"
+msgstr "Simple. Montant et partenaire"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+msgid "Start Auto Reconcilation"
+msgstr "Lancer le lettrage automatisé"
+
+#. module: account_easy_reconcile
+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_name
+msgid "easy.reconcile.simple.name"
+msgstr "easy.reconcile.simple.name"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,filter:0
+#: field:easy.reconcile.base,filter:0
+#: field:easy.reconcile.options,filter:0
+#: field:easy.reconcile.simple,filter:0
+#: field:easy.reconcile.simple.name,filter:0
+#: field:easy.reconcile.simple.partner,filter:0
+#: field:easy.reconcile.simple.reference,filter:0
+msgid "Filter"
+msgstr "Filtre"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+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_easy_reconcile
+#: field:easy.reconcile.history,easy_reconcile_id:0
+msgid "Reconcile Profile"
+msgstr "Profil de réconciliation"
+
+#. module: account_easy_reconcile
+#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile_method
+msgid "reconcile method for account_easy_reconcile"
+msgstr "Méthode de lettrage"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+msgid "Start Auto Reconciliation"
+msgstr "Lancer le lettrage automatisé"
+
+#. module: account_easy_reconcile
+#: code:addons/account_easy_reconcile/easy_reconcile.py:233
+#, python-format
+msgid "Error"
+msgstr "Erreur"
+
+#. module: account_easy_reconcile
+#: code:addons/account_easy_reconcile/easy_reconcile.py:258
+#, 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_easy_reconcile
+#: view:account.easy.reconcile:0
+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_easy_reconcile
+#: field:account.easy.reconcile.method,account_lost_id:0
+#: field:easy.reconcile.base,account_lost_id:0
+#: field:easy.reconcile.options,account_lost_id:0
+#: field:easy.reconcile.simple,account_lost_id:0
+#: field:easy.reconcile.simple.name,account_lost_id:0
+#: field:easy.reconcile.simple.partner,account_lost_id:0
+#: field:easy.reconcile.simple.reference,account_lost_id:0
+msgid "Account Lost"
+msgstr "Compte de pertes"
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:0
+msgid "Reconciliation Profile"
+msgstr "Profil de réconciliation"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+#: field:account.easy.reconcile,history_ids:0
+msgid "History"
+msgstr "Historique"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+#: view:easy.reconcile.history:0
+msgid "Go to reconciled items"
+msgstr "Voir les entrées lettrées"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+msgid "Profile Information"
+msgstr "Information sur le profil"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile.method:0
+msgid "Automatic Easy Reconcile Method"
+msgstr "Méthode de lettrage automatisé"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+msgid "Simple. Amount and Reference"
+msgstr "Simple. Montant et référence"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:0
+msgid "Display items partially reconciled on the last run"
+msgstr "Afficher les entrées partiellement lettrées au dernier lettrage"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,sequence:0
+msgid "Sequence"
+msgstr "Séquence"
+
+#. module: account_easy_reconcile
+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple
+msgid "easy.reconcile.simple"
+msgstr "easy.reconcile.simple"
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:0
+msgid "Reconciliations of last 7 days"
+msgstr "Lettrages des 7 derniers jours"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,date_base_on:0
+#: field:easy.reconcile.base,date_base_on:0
+#: field:easy.reconcile.options,date_base_on:0
+#: field:easy.reconcile.simple,date_base_on:0
+#: field:easy.reconcile.simple.name,date_base_on:0
+#: field:easy.reconcile.simple.partner,date_base_on:0
+#: field:easy.reconcile.simple.reference,date_base_on:0
+msgid "Date of reconciliation"
+msgstr "Date de lettrage"
+
+#. module: account_easy_reconcile
+#: code:addons/account_easy_reconcile/easy_reconcile_history.py:104
+#: field:easy.reconcile.history,reconcile_partial_ids:0
+#, python-format
+msgid "Partial Reconciliations"
+msgstr "Lettrages partiels"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,journal_id:0
+#: field:easy.reconcile.base,journal_id:0
+#: field:easy.reconcile.options,journal_id:0
+#: field:easy.reconcile.simple,journal_id:0
+#: field:easy.reconcile.simple.name,journal_id:0
+#: field:easy.reconcile.simple.partner,journal_id:0
+#: field:easy.reconcile.simple.reference,journal_id:0
+msgid "Journal"
+msgstr "Journal"
+
+#. module: account_easy_reconcile
+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_reference
+msgid "easy.reconcile.simple.reference"
+msgstr "easy.reconcile.simple.reference"
+
+#. module: account_easy_reconcile
+#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile
+msgid "account easy reconcile"
+msgstr "Lettrage automatisé"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,expense_exchange_account_id:0
+#: field:easy.reconcile.base,expense_exchange_account_id:0
+#: field:easy.reconcile.options,expense_exchange_account_id:0
+#: field:easy.reconcile.simple,expense_exchange_account_id:0
+#: field:easy.reconcile.simple.name,expense_exchange_account_id:0
+#: field:easy.reconcile.simple.partner,expense_exchange_account_id:0
+#: field:easy.reconcile.simple.reference,expense_exchange_account_id:0
+msgid "Loss Exchange Rate Account"
+msgstr "Compte de perte de change"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,income_exchange_account_id:0
+#: field:easy.reconcile.base,income_exchange_account_id:0
+#: field:easy.reconcile.options,income_exchange_account_id:0
+#: field:easy.reconcile.simple,income_exchange_account_id:0
+#: field:easy.reconcile.simple.name,income_exchange_account_id:0
+#: field:easy.reconcile.simple.partner,income_exchange_account_id:0
+#: field:easy.reconcile.simple.reference,income_exchange_account_id:0
+msgid "Gain Exchange Rate Account"
+msgstr "Compte de gain de change"
diff --git a/account_easy_reconcile/tests/__init__.py b/account_easy_reconcile/tests/__init__.py
new file mode 100644
index 00000000..15fad671
--- /dev/null
+++ b/account_easy_reconcile/tests/__init__.py
@@ -0,0 +1,24 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Author: Damien Crier
+# Copyright 2015 Camptocamp SA
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+from . import test_onchange_company
+from . import test_reconcile_history
+from . import test_reconcile
diff --git a/account_easy_reconcile/tests/test_onchange_company.py b/account_easy_reconcile/tests/test_onchange_company.py
new file mode 100644
index 00000000..815fd468
--- /dev/null
+++ b/account_easy_reconcile/tests/test_onchange_company.py
@@ -0,0 +1,63 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Author: Damien Crier
+# Copyright 2015 Camptocamp SA
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+from openerp.tests import common
+
+
+class testOnChange(common.TransactionCase):
+
+ def setUp(self):
+ super(testOnChange, self).setUp()
+ self.acc_setting_obj = self.registry('account.config.settings')
+ self.company_obj = self.registry('res.company')
+ # analytic defaults account creation
+ self.main_company = self.ref('base.main_company')
+ self.sec_company = self.company_obj.create(
+ self.cr,
+ self.uid,
+ {
+ 'name': 'Second company',
+ 'reconciliation_commit_every': 80,
+ }
+ )
+
+ def test_retrieve_analytic_account(self):
+ sec_company_commit = self.company_obj.browse(
+ self.cr,
+ self.uid,
+ self.sec_company).reconciliation_commit_every
+ main_company_commit = self.company_obj.browse(
+ self.cr,
+ self.uid,
+ self.main_company).reconciliation_commit_every
+
+ res1 = self.acc_setting_obj.onchange_company_id(
+ self.cr, self.uid, [], self.sec_company)
+
+ self.assertEqual(sec_company_commit, res1.get(
+ 'value', {}).get('reconciliation_commit_every', False))
+
+ res2 = self.acc_setting_obj.onchange_company_id(
+ self.cr, self.uid, [], self.main_company)
+ self.assertEqual(main_company_commit, res2.get(
+ 'value', {}).get('reconciliation_commit_every', False))
+# self.assertEqual(self.ref('account.analytic_agrolait'), res2.get(
+# 'value', {}).get('reconciliation_commit_every', False))
diff --git a/account_easy_reconcile/tests/test_reconcile.py b/account_easy_reconcile/tests/test_reconcile.py
new file mode 100644
index 00000000..72d2de4b
--- /dev/null
+++ b/account_easy_reconcile/tests/test_reconcile.py
@@ -0,0 +1,136 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Author: Damien Crier
+# Copyright 2015 Camptocamp SA
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+from openerp.tests import common
+from openerp import fields, exceptions
+
+
+class testReconcile(common.TransactionCase):
+
+ def setUp(self):
+ super(testReconcile, self).setUp()
+ self.rec_history_obj = self.registry('easy.reconcile.history')
+ self.easy_rec_obj = self.registry('account.easy.reconcile')
+ self.easy_rec_method_obj = (
+ self.registry('account.easy.reconcile.method')
+ )
+ self.easy_rec = self.easy_rec_obj.create(
+ self.cr,
+ self.uid,
+ {
+ 'name': 'AER2',
+ 'account': self.ref('account.a_salary_expense'),
+ }
+ )
+ self.easy_rec_method = self.easy_rec_method_obj.create(
+ self.cr,
+ self.uid,
+ {
+ 'name': 'easy.reconcile.simple.name',
+ 'sequence': '10',
+ 'task_id': self.easy_rec,
+ }
+ )
+ self.easy_rec_no_history = self.easy_rec_obj.create(
+ self.cr,
+ self.uid,
+ {
+ 'name': 'AER3',
+ 'account': self.ref('account.a_salary_expense'),
+
+ }
+ )
+ self.rec_history = self.rec_history_obj.create(
+ self.cr,
+ self.uid,
+ {
+ 'easy_reconcile_id': self.easy_rec,
+ 'date': fields.Datetime.now(),
+ }
+ )
+
+ def test_last_history(self):
+ easy_rec_last_hist = self.easy_rec_obj.browse(
+ self.cr,
+ self.uid,
+ self.easy_rec
+ ).last_history.id
+ self.assertEqual(self.rec_history, easy_rec_last_hist)
+
+ def test_last_history_empty(self):
+ easy_rec_last_hist = self.easy_rec_obj.browse(
+ self.cr,
+ self.uid,
+ self.easy_rec_no_history
+ ).last_history.id
+ self.assertEqual(False, easy_rec_last_hist)
+
+ def test_last_history_full_no_history(self):
+ with self.assertRaises(exceptions.Warning):
+ self.easy_rec_obj.last_history_reconcile(
+ self.cr, self.uid, [self.easy_rec_no_history])
+
+ def test_last_history_partial_no_history(self):
+ with self.assertRaises(exceptions.Warning):
+ self.easy_rec_obj.last_history_partial(
+ self.cr, self.uid, [self.easy_rec_no_history])
+
+ def test_open_unreconcile(self):
+ res = self.easy_rec_obj.open_unreconcile(
+ self.cr,
+ self.uid,
+ [self.easy_rec]
+ )
+ self.assertEqual(unicode([('id', 'in', [])]), res.get('domain', []))
+
+ def test_open_partial_reconcile(self):
+ res = self.easy_rec_obj.open_partial_reconcile(
+ self.cr,
+ self.uid,
+ [self.easy_rec]
+ )
+ self.assertEqual(unicode([('id', 'in', [])]), res.get('domain', []))
+
+ def test_prepare_run_transient(self):
+ res = self.easy_rec_obj._prepare_run_transient(
+ self.cr,
+ self.uid,
+ self.easy_rec_method_obj.browse(
+ self.cr,
+ self.uid,
+ self.easy_rec_method
+ )
+ )
+ self.assertEqual(self.ref('account.a_salary_expense'),
+ res.get('account_id', 0))
+
+
+class testReconcileNoEasyReconcileAvailable(common.TransactionCase):
+
+ def setUp(self):
+ super(testReconcileNoEasyReconcileAvailable, self).setUp()
+ self.rec_history_obj = self.registry('easy.reconcile.history')
+ self.easy_rec_obj = self.registry('account.easy.reconcile')
+
+# def test_run_scheduler(self):
+# with self.assertRaises(AssertionError):
+# self.easy_rec_obj.run_scheduler(
+# self.cr, self.uid)
diff --git a/account_easy_reconcile/tests/test_reconcile_history.py b/account_easy_reconcile/tests/test_reconcile_history.py
new file mode 100644
index 00000000..3c8a616d
--- /dev/null
+++ b/account_easy_reconcile/tests/test_reconcile_history.py
@@ -0,0 +1,78 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Author: Damien Crier
+# Copyright 2015 Camptocamp SA
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+from openerp.tests import common
+from openerp import fields
+
+
+class testReconcileHistory(common.TransactionCase):
+
+ def setUp(self):
+ super(testReconcileHistory, self).setUp()
+ self.rec_history_obj = self.registry('easy.reconcile.history')
+ self.easy_rec_obj = self.registry('account.easy.reconcile')
+ self.easy_rec = self.easy_rec_obj.create(
+ self.cr,
+ self.uid,
+ {
+ 'name': 'AER1',
+ 'account': self.ref('account.a_expense'),
+
+ }
+ )
+ self.rec_history = self.rec_history_obj.create(
+ self.cr,
+ self.uid,
+ {
+ 'easy_reconcile_id': self.easy_rec,
+ 'date': fields.Datetime.now(),
+ }
+ )
+
+ def test_assert_open_full_partial(self):
+ word = 'test'
+ with self.assertRaises(AssertionError):
+ self.rec_history_obj._open_move_lines(
+ self.cr, self.uid, [self.rec_history], word)
+
+ def test_open_full_empty(self):
+ res = self.rec_history_obj._open_move_lines(
+ self.cr, self.uid, [self.rec_history], 'full')
+ self.assertEqual(unicode([('id', 'in', [])]), res.get(
+ 'domain', []))
+
+ def test_open_full_empty_from_method(self):
+ res = self.rec_history_obj.open_reconcile(
+ self.cr, self.uid, [self.rec_history])
+ self.assertEqual(unicode([('id', 'in', [])]), res.get(
+ 'domain', []))
+
+ def test_open_partial_empty(self):
+ res = self.rec_history_obj._open_move_lines(
+ self.cr, self.uid, [self.rec_history], 'partial')
+ self.assertEqual(unicode([('id', 'in', [])]), res.get(
+ 'domain', []))
+
+ def test_open_partial_empty_from_method(self):
+ res = self.rec_history_obj.open_partial(
+ self.cr, self.uid, [self.rec_history])
+ self.assertEqual(unicode([('id', 'in', [])]), res.get(
+ 'domain', []))
From 42faf3a31f27bee00abb1742ff788e7342c72219 Mon Sep 17 00:00:00 2001
From: Damien Crier
Date: Mon, 6 Jul 2015 14:32:42 +0200
Subject: [PATCH 40/52] [IMP] account_easy_reconcile: add YAML tests
---
account_easy_reconcile/README.rst | 15 +-
account_easy_reconcile/__init__.py | 3 +-
account_easy_reconcile/__openerp__.py | 7 +-
account_easy_reconcile/base_reconciliation.py | 6 +-
account_easy_reconcile/easy_reconcile.py | 128 ++++----
.../easy_reconcile_history.py | 22 +-
account_easy_reconcile/res_config.py | 7 +-
.../simple_reconciliation.py | 7 +-
.../test/easy_reconcile.yml | 116 +++++++
account_easy_reconcile/tests/__init__.py | 1 +
.../tests/test_scenario_reconcile.py | 298 ++++++++++++++++++
11 files changed, 510 insertions(+), 100 deletions(-)
create mode 100644 account_easy_reconcile/test/easy_reconcile.yml
create mode 100644 account_easy_reconcile/tests/test_scenario_reconcile.py
diff --git a/account_easy_reconcile/README.rst b/account_easy_reconcile/README.rst
index b603301a..1e4981b9 100644
--- a/account_easy_reconcile/README.rst
+++ b/account_easy_reconcile/README.rst
@@ -1,6 +1,8 @@
.. 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
+==============
Easy Reconcile
==============
@@ -27,11 +29,21 @@ You may be interested to install also the
This latter add more complex reconciliations,
allows multiple lines and partial.
+Usage
+=====
+
+Go to 'Invoicing/Periodic Processing/Reconciliation/Easy Automatic Reconcile' to start a
+new easy 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 `_.
+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
`here `_.
@@ -73,4 +85,3 @@ mission is to support the collaborative development of Odoo features and
promote its widespread use.
To contribute to this module, please visit http://odoo-community.org.
-
diff --git a/account_easy_reconcile/__init__.py b/account_easy_reconcile/__init__.py
index 403b65d3..3ac78713 100755
--- a/account_easy_reconcile/__init__.py
+++ b/account_easy_reconcile/__init__.py
@@ -1,9 +1,8 @@
# -*- coding: utf-8 -*-
##############################################################################
#
-# Copyright 2012 Camptocamp SA (Guewen Baconnier)
+# Copyright 2012, 2015 Camptocamp SA (Guewen Baconnier, Damien Crier)
# Copyright (C) 2010 Sébastien Beau
-# Copyright 2015 Camptocamp SA (Damien Crier)
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
diff --git a/account_easy_reconcile/__openerp__.py b/account_easy_reconcile/__openerp__.py
index 472b977d..886c78ce 100755
--- a/account_easy_reconcile/__openerp__.py
+++ b/account_easy_reconcile/__openerp__.py
@@ -1,9 +1,8 @@
# -*- coding: utf-8 -*-
##############################################################################
#
-# Copyright 2012 Camptocamp SA (Guewen Baconnier)
+# Copyright 2012, 2015 Camptocamp SA (Guewen Baconnier, Damien Crier)
# Copyright (C) 2010 Sébastien Beau
-# Copyright 2015 Camptocamp SA (Damien Crier)
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
@@ -22,7 +21,7 @@
{
"name": "Easy Reconcile",
- "version": "1.3.1",
+ "version": "8.0.1.3.1",
"depends": ["account"],
"author": "Akretion,Camptocamp,Odoo Community Association (OCA)",
"website": "http://www.akretion.com/",
@@ -33,6 +32,8 @@
"security/ir.model.access.csv",
"res_config_view.xml",
],
+ "test": ['test/easy_reconcile.yml',
+ ],
'license': 'AGPL-3',
"auto_install": False,
'installable': True,
diff --git a/account_easy_reconcile/base_reconciliation.py b/account_easy_reconcile/base_reconciliation.py
index 16843f77..83048334 100644
--- a/account_easy_reconcile/base_reconciliation.py
+++ b/account_easy_reconcile/base_reconciliation.py
@@ -1,9 +1,8 @@
# -*- coding: utf-8 -*-
##############################################################################
#
-# Copyright 2012-2013 Camptocamp SA (Guewen Baconnier)
+# Copyright 2012-2013, 2015 Camptocamp SA (Guewen Baconnier, Damien Crier)
# Copyright (C) 2010 Sébastien Beau
-# Copyright 2015 Camptocamp SA (Damien Crier)
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
@@ -21,6 +20,7 @@
##############################################################################
from openerp import models, api, fields
+from openerp.tools.safe_eval import safe_eval
from operator import itemgetter, attrgetter
@@ -112,7 +112,7 @@ class EasyReconcileBase(models.AbstractModel):
params = []
if self.filter:
dummy, where, params = ml_obj._where_calc(
- eval(self.filter)).get_sql()
+ safe_eval(self.filter)).get_sql()
if where:
where = " AND %s" % where
return where, params
diff --git a/account_easy_reconcile/easy_reconcile.py b/account_easy_reconcile/easy_reconcile.py
index 579ed11f..7a7a1bf2 100644
--- a/account_easy_reconcile/easy_reconcile.py
+++ b/account_easy_reconcile/easy_reconcile.py
@@ -1,9 +1,8 @@
# -*- coding: utf-8 -*-
##############################################################################
#
-# Copyright 2012-2013 Camptocamp SA (Guewen Baconnier)
+# Copyright 2012-2013, 2015 Camptocamp SA (Guewen Baconnier, Damien Crier)
# Copyright (C) 2010 Sébastien Beau
-# Copyright 2015 Camptocamp SA (Damien Crier)
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
@@ -25,8 +24,6 @@ from openerp import models, api, fields, _
from openerp.exceptions import Warning
from openerp import sql_db
-# from openerp import pooler
-
import logging
_logger = logging.getLogger(__name__)
@@ -177,7 +174,7 @@ class AccountEasyReconcile(models.Model):
readonly=True
)
last_history = fields.Many2one('easy.reconcile.history',
- string='readonly=True',
+ string='Last history', readonly=True,
compute='_last_history',
)
company_id = fields.Many2one('res.company', string='Company')
@@ -225,75 +222,69 @@ class AccountEasyReconcile(models.Model):
else:
new_cr = self.env.cr
- uid, context = self.env.uid, self.env.context
- with api.Environment.manage():
- self.env = api.Environment(new_cr, uid, context)
+ try:
+ all_ml_rec_ids = []
+ all_ml_partial_ids = []
- try:
- all_ml_rec_ids = []
- all_ml_partial_ids = []
+ for method in rec.reconcile_method:
+ rec_model = self.env[method.name]
+ auto_rec_id = rec_model.create(
+ self._prepare_run_transient(method)
+ )
- 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, ml_partial_ids = (
+ auto_rec_id.automatic_reconcile()
+ )
- ml_rec_ids, ml_partial_ids = (
- auto_rec_id.automatic_reconcile()
- )
+ all_ml_rec_ids += ml_rec_ids
+ all_ml_partial_ids += ml_partial_ids
- all_ml_rec_ids += ml_rec_ids
- all_ml_partial_ids += ml_partial_ids
-
- reconcile_ids = find_reconcile_ids(
- 'reconcile_id',
- all_ml_rec_ids
- )
- partial_ids = find_reconcile_ids(
- 'reconcile_partial_id',
- all_ml_partial_ids
- )
-
- self.env['easy.reconcile.history'].create(
- {
- 'easy_reconcile_id': rec.id,
- 'date': fields.datetime.now(),
- 'reconcile_ids': [
- (4, rid) for rid in reconcile_ids
- ],
- 'reconcile_partial_ids': [
- (4, rid) for rid in partial_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['easy.reconcile.history'].create(
- {
- 'easy_reconcile_id': rec.id,
- 'date': fields.Datetime.now(),
- 'reconcile_ids': [],
- 'reconcile_partial_ids': [],
- }
- )
- finally:
- if ctx['commit_every']:
- new_cr.commit()
- new_cr.close()
+ reconcile_ids = find_reconcile_ids(
+ 'reconcile_id',
+ all_ml_rec_ids
+ )
+ partial_ids = find_reconcile_ids(
+ 'reconcile_partial_id',
+ all_ml_partial_ids
+ )
+ self.env['easy.reconcile.history'].create(
+ {
+ 'easy_reconcile_id': rec.id,
+ 'date': fields.Datetime.now(),
+ 'reconcile_ids': [
+ (4, rid) for rid in reconcile_ids
+ ],
+ 'reconcile_partial_ids': [
+ (4, rid) for rid in partial_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['easy.reconcile.history'].create(
+ {
+ 'easy_reconcile_id': rec.id,
+ 'date': fields.Datetime.now(),
+ 'reconcile_ids': [],
+ 'reconcile_partial_ids': [],
+ }
+ )
+ finally:
+ if ctx['commit_every']:
+ new_cr.commit()
+ new_cr.close()
return True
-# @api.model
-# def _no_history(self, rec):
+ @api.multi
def _no_history(self):
""" Raise an `orm.except_orm` error, supposed to
be called when there is no history on the reconciliation
@@ -332,7 +323,8 @@ class AccountEasyReconcile(models.Model):
@api.multi
def open_partial_reconcile(self):
- """ Open the view of move line with the unreconciled move lines"""
+ """ Open the view of move line with the partially
+ reconciled move lines"""
self.ensure_one()
obj_move_line = self.env['account.move.line']
lines = obj_move_line.search(
diff --git a/account_easy_reconcile/easy_reconcile_history.py b/account_easy_reconcile/easy_reconcile_history.py
index 53d64aa8..58904b3e 100644
--- a/account_easy_reconcile/easy_reconcile_history.py
+++ b/account_easy_reconcile/easy_reconcile_history.py
@@ -1,9 +1,8 @@
# -*- coding: utf-8 -*-
##############################################################################
#
-# Author: Guewen Baconnier
-# Copyright 2012 Camptocamp SA
-# Copyright 2015 Camptocamp SA (Damien Crier)
+# Author: Guewen Baconnier, Damien Crier
+# Copyright 2012, 2015 Camptocamp SA
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
@@ -33,7 +32,7 @@ class EasyReconcileHistory(models.Model):
@api.one
@api.depends('reconcile_ids', 'reconcile_partial_ids')
- def _reconcile_line_ids(self):
+ def _get_reconcile_line_ids(self):
move_line_ids = []
for reconcile in self.reconcile_ids:
move_lines = reconcile.mapped('line_id')
@@ -68,13 +67,13 @@ class EasyReconcileHistory(models.Model):
comodel_name='account.move.line',
relation='account_move_line_history_rel',
string='Reconciled Items',
- _compute='_reconcile_line_ids'
+ compute='_get_reconcile_line_ids'
)
partial_line_ids = fields.Many2many(
comodel_name='account.move.line',
relation='account_move_line_history_partial_rel',
string='Partially Reconciled Items',
- _compute='_reconcile_line_ids'
+ compute='_get_reconcile_line_ids'
)
company_id = fields.Many2one(
'res.company',
@@ -97,16 +96,11 @@ class EasyReconcileHistory(models.Model):
"rec_type must be 'full' or 'partial'"
move_line_ids = []
if rec_type == 'full':
- move_line_ids = []
- for reconcile in self.reconcile_ids:
- move_lines = reconcile.mapped('line_id')
- move_line_ids.extend(move_lines.ids)
+ move_line_ids = self.mapped('reconcile_ids.line_id').ids
name = _('Reconciliations')
else:
- move_line_ids = []
- for reconcile in self.reconcile_partial_ids:
- move_lines = reconcile.mapped('line_partial_ids')
- move_line_ids.extend(move_lines.ids)
+ move_line_ids = self.mapped(
+ 'reconcile_partial_ids.line_partial_ids').ids
name = _('Partial Reconciliations')
return {
'name': name,
diff --git a/account_easy_reconcile/res_config.py b/account_easy_reconcile/res_config.py
index e4e16da0..090810d3 100644
--- a/account_easy_reconcile/res_config.py
+++ b/account_easy_reconcile/res_config.py
@@ -1,9 +1,8 @@
# -*- coding: utf-8 -*-
##############################################################################
#
-# Author: Leonardo Pistone
-# Copyright 2014 Camptocamp SA
-# Copyright 2015 Camptocamp SA (Damien Crier)
+# Author: Leonardo Pistone, Damien Crier
+# Copyright 2014, 2015 Camptocamp SA
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
@@ -30,7 +29,7 @@ class AccountConfigSettings(models.TransientModel):
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."""
+ help="Leave zero to commit only at the end of the process."
)
@api.multi
diff --git a/account_easy_reconcile/simple_reconciliation.py b/account_easy_reconcile/simple_reconciliation.py
index b54ffd03..41943517 100644
--- a/account_easy_reconcile/simple_reconciliation.py
+++ b/account_easy_reconcile/simple_reconciliation.py
@@ -1,9 +1,8 @@
# -*- coding: utf-8 -*-
##############################################################################
#
-# Copyright 2012-2013 Camptocamp SA (Guewen Baconnier)
+# Copyright 2012-2013, 2015 Camptocamp SA (Guewen Baconnier, Damien Crier)
# Copyright (C) 2010 Sébastien Beau
-# Copyright 2015 Camptocamp SA (Damien Crier)
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
@@ -32,7 +31,7 @@ class EasyReconcileSimple(models.AbstractModel):
# field name used as key for matching the move lines
_key_field = None
- @api.model
+ @api.multi
def rec_auto_lines_simple(self, lines):
if self._key_field is None:
raise ValueError("_key_field has to be defined")
@@ -70,7 +69,7 @@ class EasyReconcileSimple(models.AbstractModel):
def _action_rec(self):
"""Match only 2 move lines, do not allow partial reconcile"""
- select = self._select(self)
+ 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
diff --git a/account_easy_reconcile/test/easy_reconcile.yml b/account_easy_reconcile/test/easy_reconcile.yml
new file mode 100644
index 00000000..6142a597
--- /dev/null
+++ b/account_easy_reconcile/test/easy_reconcile.yml
@@ -0,0 +1,116 @@
+-
+ In order to test Confirm Draft Invoice wizard I create an invoice and confirm it with this wizard
+-
+ !record {model: account.invoice, id: account_invoice_state2}:
+ account_id: account.a_recv
+ company_id: base.main_company
+ currency_id: base.EUR
+ invoice_line:
+ - account_id: account.a_sale
+ name: '[PCSC234] PC Assemble SC234'
+ price_unit: 1000.0
+ quantity: 1.0
+ product_id: product.product_product_3
+ uos_id: product.product_uom_unit
+ journal_id: account.bank_journal
+ partner_id: base.res_partner_12
+ reference_type: none
+-
+ I called the "Confirm Draft Invoices" wizard
+-
+ !record {model: account.invoice.confirm, id: account_invoice_confirm_0}:
+ {}
+-
+ I clicked on Confirm Invoices Button
+-
+ !python {model: account.invoice.confirm}: |
+ self.invoice_confirm(cr, uid, [ref("account_invoice_confirm_0")], {"lang": 'en_US',
+ "tz": False, "active_model": "account.invoice", "active_ids": [ref("account_invoice_state2")],
+ "type": "out_invoice", "active_id": ref("account_invoice_state2"), })
+-
+ I check that customer invoice state is "Open"
+-
+ !assert {model: account.invoice, id: account_invoice_state2}:
+ - state == 'open'
+
+
+-
+ In order to test Bank Statement feature of account I create a bank statement line and confirm it and check it's move created
+-
+ I select the period and journal for the bank statement
+-
+ !python {model: account.bank.statement}: |
+ import time
+ journal = self._default_journal_id(cr, uid, {'lang': u'en_US', 'tz': False, 'active_model': 'ir.ui.menu',
+ 'journal_type': 'bank', 'period_id': time.strftime('%m'), 'active_ids': [ref('account.menu_bank_statement_tree')], 'active_id': ref('account.menu_bank_statement_tree')})
+ assert journal, 'Journal has not been selected'
+-
+ I create a bank statement with Opening and Closing balance 0.
+-
+ !record {model: account.bank.statement, id: account_bank_statement_0}:
+ balance_end_real: 0.0
+ balance_start: 0.0
+ date: !eval time.strftime('%Y-%m-%d')
+ journal_id: account.bank_journal
+-
+ I create bank statement line
+-
+ !python {model: account.bank.statement.line}: |
+ vals = {
+ 'amount': 1000.0,
+ 'partner_id': ref('base.res_partner_12'),
+ 'statement_id': ref('account_bank_statement_0'),
+ 'name': 'EXT001'
+ }
+
+ line_id = self.create(cr, uid, vals)
+ assert line_id, "Account bank statement line has not been created"
+
+-
+ We process the reconciliation of the invoice line
+-
+ !python {model: account.bank.statement}: |
+ line_id = None
+ invoice = self.pool.get('account.invoice').browse(cr, uid, ref("account_invoice_state2"))
+ for l in invoice.move_id.line_id:
+ if l.account_id.id == ref('account.a_recv'):
+ line_id = l
+ break
+ statement = self.browse(cr, uid, ref("account_bank_statement_0"))
+ for statement_line in statement.line_ids:
+ self.pool.get('account.bank.statement.line').process_reconciliation(
+ cr, uid, statement_line.id,
+ [
+ {
+ 'counterpart_move_line_id': line_id.id,
+ 'credit': 1000.0,
+ 'debit': 0.0,
+ 'name': line_id.name
+ }
+ ]
+ )
+-
+ We unreconcile previous reconciliation so we can create an easy reconcile record to reconcile invoice
+-
+ !python {model: account.move.line}: |
+ lines_to_unreconcile = self.search(cr, uid, [('reconcile_ref', '!=', False), ('statement_id', '=', ref("account_bank_statement_0"))])
+ self._remove_move_reconcile(cr, uid, lines_to_unreconcile)
+
+-
+ We create the easy reconcile record
+-
+ !record {model: account.easy.reconcile, id: account_easy_reconcile_0}:
+ name: 'easy reconcile 1'
+ account: account.a_recv
+ reconcile_method:
+ - name: 'easy.reconcile.simple.partner'
+-
+ We call the automatic reconcilation method
+-
+ !python {model: account.easy.reconcile}: |
+ self.run_reconcile(cr, uid, [ref('account_easy_reconcile_0')])
+-
+ I check that customer invoice state is "Paid"
+-
+ !assert {model: account.invoice, id: account_invoice_state2}:
+ - state == 'paid'
\ No newline at end of file
diff --git a/account_easy_reconcile/tests/__init__.py b/account_easy_reconcile/tests/__init__.py
index 15fad671..c2feb554 100644
--- a/account_easy_reconcile/tests/__init__.py
+++ b/account_easy_reconcile/tests/__init__.py
@@ -22,3 +22,4 @@
from . import test_onchange_company
from . import test_reconcile_history
from . import test_reconcile
+from . import test_scenario_reconcile
diff --git a/account_easy_reconcile/tests/test_scenario_reconcile.py b/account_easy_reconcile/tests/test_scenario_reconcile.py
new file mode 100644
index 00000000..08da279f
--- /dev/null
+++ b/account_easy_reconcile/tests/test_scenario_reconcile.py
@@ -0,0 +1,298 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Author: Damien Crier
+# Copyright 2015 Camptocamp SA
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+from openerp.tests import common
+import time
+
+
+class testScenarioReconcile(common.TransactionCase):
+
+ def setUp(self):
+ super(testScenarioReconcile, self).setUp()
+ self.rec_history_obj = self.registry('easy.reconcile.history')
+ self.easy_rec_obj = self.registry('account.easy.reconcile')
+ self.invoice_obj = self.registry('account.invoice')
+ self.bk_stmt_obj = self.registry('account.bank.statement')
+ self.bk_stmt_line_obj = self.registry('account.bank.statement.line')
+ self.acc_move_line_obj = self.registry('account.move.line')
+ self.easy_rec_method_obj = (
+ self.registry('account.easy.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.registry('account.config.settings')
+
+ acs_ids = self.acs_model.search(
+ self.cr, self.uid,
+ [('company_id', '=', self.ref("base.main_company"))]
+ )
+
+ values = {'group_multi_currency': True,
+ 'income_currency_exchange_account_id':
+ self.account_fx_income_id,
+ 'expense_currency_exchange_account_id':
+ self.account_fx_expense_id}
+
+ if acs_ids:
+ self.acs_model.write(self.cr, self.uid, acs_ids, values)
+ else:
+ default_vals = self.acs_model.default_get(self.cr, self.uid, [])
+ default_vals.update(values)
+ default_vals['date_stop'] = time.strftime('%Y-12-31')
+ default_vals['date_start'] = time.strftime('%Y-%m-%d')
+ default_vals['period'] = 'month'
+ self.acs_model.create(self.cr, self.uid, default_vals)
+
+ def test_scenario_reconcile(self):
+ # create invoice
+ inv_id = self.invoice_obj.create(
+ self.cr,
+ self.uid,
+ {
+ 'type': 'out_invoice',
+ 'account_id': self.ref('account.a_recv'),
+ 'company_id': self.ref('base.main_company'),
+ 'currency_id': self.ref('base.EUR'),
+ 'journal_id': self.ref('account.sales_journal'),
+ 'partner_id': self.ref('base.res_partner_12'),
+ 'invoice_line': [
+ (0, 0, {
+ 'name': '[PCSC234] PC Assemble SC234',
+ 'price_unit': 1000.0,
+ 'quantity': 1.0,
+ 'product_id': self.ref('product.product_product_3'),
+ 'uos_id': self.ref('product.product_uom_unit'),
+ }
+ )
+ ]
+ }
+ )
+ # validate invoice
+ self.invoice_obj.signal_workflow(
+ self.cr,
+ self.uid,
+ [inv_id],
+ 'invoice_open'
+ )
+ invoice_record = self.invoice_obj.browse(self.cr, self.uid, [inv_id])
+ self.assertEqual('open', invoice_record.state)
+
+ # create bank_statement
+ bk_stmt_id = self.bk_stmt_obj.create(
+ self.cr,
+ self.uid,
+ {
+ 'balance_end_real': 0.0,
+ 'balance_start': 0.0,
+ 'date': time.strftime('%Y-%m-%d'),
+ 'journal_id': self.ref('account.bank_journal'),
+ 'line_ids': [
+ (0, 0, {
+ 'amount': 1000.0,
+ 'partner_id': self.ref('base.res_partner_12'),
+ 'name': invoice_record.number,
+ 'ref': invoice_record.number,
+ }
+ )
+ ]
+ }
+ )
+
+ # reconcile
+ line_id = None
+ for l in invoice_record.move_id.line_id:
+ if l.account_id.id == self.ref('account.a_recv'):
+ line_id = l
+ break
+
+ statement = self.bk_stmt_obj.browse(self.cr, self.uid, bk_stmt_id)
+ for statement_line in statement.line_ids:
+ self.bk_stmt_line_obj.process_reconciliation(
+ self.cr, self.uid, statement_line.id,
+ [
+ {
+ 'counterpart_move_line_id': line_id.id,
+ 'credit': 1000.0,
+ 'debit': 0.0,
+ 'name': invoice_record.number,
+ }
+ ]
+ )
+ # unreconcile journal item created by previous reconciliation
+ lines_to_unreconcile = self.acc_move_line_obj.search(
+ self.cr,
+ self.uid,
+ [('reconcile_ref', '!=', False),
+ ('statement_id', '=', bk_stmt_id)]
+ )
+ self.acc_move_line_obj._remove_move_reconcile(
+ self.cr,
+ self.uid,
+ lines_to_unreconcile
+ )
+
+ # create the easy reconcile record
+ easy_rec_id = self.easy_rec_obj.create(
+ self.cr,
+ self.uid,
+ {
+ 'name': 'easy_reconcile_1',
+ 'account': self.ref('account.a_recv'),
+ 'reconcile_method': [
+ (0, 0, {
+ 'name': 'easy.reconcile.simple.partner',
+ }
+ )
+ ]
+ }
+ )
+ # call the automatic reconcilation method
+ self.easy_rec_obj.run_reconcile(
+ self.cr,
+ self.uid,
+ [easy_rec_id]
+ )
+ self.assertEqual(
+ 'paid',
+ self.invoice_obj.browse(self.cr, self.uid, inv_id).state
+ )
+
+ def test_scenario_reconcile_currency(self):
+ # create currency rate
+ self.registry('res.currency.rate').create(self.cr, self.uid, {
+ 'name': time.strftime('%Y-%m-%d') + ' 00:00:00',
+ 'currency_id': self.ref('base.USD'),
+ 'rate': 1.5,
+ })
+ # create invoice
+ inv_id = self.invoice_obj.create(
+ self.cr,
+ self.uid,
+ {
+ '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': [
+ (0, 0, {
+ 'name': '[PCSC234] PC Assemble SC234',
+ 'price_unit': 1000.0,
+ 'quantity': 1.0,
+ 'product_id': self.ref('product.product_product_3'),
+ 'uos_id': self.ref('product.product_uom_unit'),
+ }
+ )
+ ]
+ }
+ )
+ # validate invoice
+ self.invoice_obj.signal_workflow(
+ self.cr,
+ self.uid,
+ [inv_id],
+ 'invoice_open'
+ )
+ invoice_record = self.invoice_obj.browse(self.cr, self.uid, [inv_id])
+ self.assertEqual('open', invoice_record.state)
+
+ # create bank_statement
+ bk_stmt_id = self.bk_stmt_obj.create(
+ self.cr,
+ self.uid,
+ {
+ 'balance_end_real': 0.0,
+ 'balance_start': 0.0,
+ 'date': time.strftime('%Y-%m-%d'),
+ 'journal_id': self.ref('account.bank_journal_usd'),
+ 'line_ids': [
+ (0, 0, {
+ 'amount': 1000.0,
+ 'amount_currency': 1500.0,
+ 'currency_id': self.ref('base.USD'),
+ 'partner_id': self.ref('base.res_partner_12'),
+ 'name': invoice_record.number,
+ 'ref': invoice_record.number,
+ }
+ )
+ ]
+ }
+ )
+
+ # reconcile
+ line_id = None
+ for l in invoice_record.move_id.line_id:
+ if l.account_id.id == self.ref('account.a_recv'):
+ line_id = l
+ break
+
+ statement = self.bk_stmt_obj.browse(self.cr, self.uid, bk_stmt_id)
+ for statement_line in statement.line_ids:
+ self.bk_stmt_line_obj.process_reconciliation(
+ self.cr, self.uid, statement_line.id,
+ [
+ {
+ 'counterpart_move_line_id': line_id.id,
+ 'credit': 1000.0,
+ 'debit': 0.0,
+ 'name': invoice_record.number,
+ }
+ ]
+ )
+ # unreconcile journal item created by previous reconciliation
+ lines_to_unreconcile = self.acc_move_line_obj.search(
+ self.cr,
+ self.uid,
+ [('reconcile_ref', '!=', False),
+ ('statement_id', '=', bk_stmt_id)]
+ )
+ self.acc_move_line_obj._remove_move_reconcile(
+ self.cr,
+ self.uid,
+ lines_to_unreconcile
+ )
+
+ # create the easy reconcile record
+ easy_rec_id = self.easy_rec_obj.create(
+ self.cr,
+ self.uid,
+ {
+ 'name': 'easy_reconcile_1',
+ 'account': self.ref('account.a_recv'),
+ 'reconcile_method': [
+ (0, 0, {
+ 'name': 'easy.reconcile.simple.partner',
+ }
+ )
+ ]
+ }
+ )
+ # call the automatic reconcilation method
+ self.easy_rec_obj.run_reconcile(
+ self.cr,
+ self.uid,
+ [easy_rec_id]
+ )
+ self.assertEqual(
+ 'paid',
+ self.invoice_obj.browse(self.cr, self.uid, inv_id).state
+ )
From ac0c14b693d0a3c4ecd611e773917a057f627432 Mon Sep 17 00:00:00 2001
From: OCA Transbot
Date: Sun, 13 Sep 2015 02:49:21 -0400
Subject: [PATCH 41/52] OCA Transbot updated translations from Transifex
---
account_easy_reconcile/i18n/en.po | 566 +++++++++++++++++++++
account_easy_reconcile/i18n/es.po | 815 +++++++++++++++++-------------
account_easy_reconcile/i18n/fr.po | 807 ++++++++++++++++-------------
account_easy_reconcile/i18n/sl.po | 567 +++++++++++++++++++++
4 files changed, 2068 insertions(+), 687 deletions(-)
create mode 100644 account_easy_reconcile/i18n/en.po
create mode 100644 account_easy_reconcile/i18n/sl.po
diff --git a/account_easy_reconcile/i18n/en.po b/account_easy_reconcile/i18n/en.po
new file mode 100644
index 00000000..7077c46f
--- /dev/null
+++ b/account_easy_reconcile/i18n/en.po
@@ -0,0 +1,566 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * account_easy_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_easy_reconcile
+#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
+msgid "7 Days"
+msgstr "7 Days"
+
+#. module: account_easy_reconcile
+#: model:ir.actions.act_window,help:account_easy_reconcile.action_account_easy_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_easy_reconcile
+#: field:account.easy.reconcile,account:0
+#: field:easy.reconcile.base,account_id:0
+#: field:easy.reconcile.simple,account_id:0
+#: field:easy.reconcile.simple.name,account_id:0
+#: field:easy.reconcile.simple.partner,account_id:0
+#: field:easy.reconcile.simple.reference,account_id:0
+msgid "Account"
+msgstr "Account"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,account_lost_id:0
+#: field:easy.reconcile.base,account_lost_id:0
+#: field:easy.reconcile.options,account_lost_id:0
+#: field:easy.reconcile.simple,account_lost_id:0
+#: field:easy.reconcile.simple.name,account_lost_id:0
+#: field:easy.reconcile.simple.partner,account_lost_id:0
+#: field:easy.reconcile.simple.reference,account_lost_id:0
+msgid "Account Lost"
+msgstr "Account Lost"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,account_profit_id:0
+#: field:easy.reconcile.base,account_profit_id:0
+#: field:easy.reconcile.options,account_profit_id:0
+#: field:easy.reconcile.simple,account_profit_id:0
+#: field:easy.reconcile.simple.name,account_profit_id:0
+#: field:easy.reconcile.simple.partner,account_profit_id:0
+#: field:easy.reconcile.simple.reference,account_profit_id:0
+msgid "Account Profit"
+msgstr "Account Profit"
+
+#. module: account_easy_reconcile
+#: help:account.easy.reconcile.method,analytic_account_id:0
+#: help:easy.reconcile.base,analytic_account_id:0
+#: help:easy.reconcile.options,analytic_account_id:0
+#: help:easy.reconcile.simple,analytic_account_id:0
+#: help:easy.reconcile.simple.name,analytic_account_id:0
+#: help:easy.reconcile.simple.partner,analytic_account_id:0
+#: help:easy.reconcile.simple.reference,analytic_account_id:0
+msgid "Analytic account for the write-off"
+msgstr "Analytic account for the write-off"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,analytic_account_id:0
+#: field:easy.reconcile.base,analytic_account_id:0
+#: field:easy.reconcile.options,analytic_account_id:0
+#: field:easy.reconcile.simple,analytic_account_id:0
+#: field:easy.reconcile.simple.name,analytic_account_id:0
+#: field:easy.reconcile.simple.partner,analytic_account_id:0
+#: field:easy.reconcile.simple.reference,analytic_account_id:0
+msgid "Analytic_account"
+msgstr "Analytic_account"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_tree
+msgid "Automatic Easy Reconcile"
+msgstr "Automatic Easy Reconcile"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_form
+#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_tree
+#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
+msgid "Automatic Easy Reconcile History"
+msgstr "Automatic Easy Reconcile History"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile.method:account_easy_reconcile.account_easy_reconcile_method_form
+#: view:account.easy.reconcile.method:account_easy_reconcile.account_easy_reconcile_method_tree
+msgid "Automatic Easy Reconcile Method"
+msgstr "Automatic Easy Reconcile Method"
+
+#. module: account_easy_reconcile
+#: model:ir.model,name:account_easy_reconcile.model_res_company
+msgid "Companies"
+msgstr "Companies"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,company_id:0
+#: field:account.easy.reconcile.method,company_id:0
+#: field:easy.reconcile.history,company_id:0
+msgid "Company"
+msgstr "Company"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+msgid "Configuration"
+msgstr "Configuration"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,create_uid:0
+#: field:account.easy.reconcile.method,create_uid:0
+#: field:easy.reconcile.history,create_uid:0
+#: field:easy.reconcile.simple.name,create_uid:0
+#: field:easy.reconcile.simple.partner,create_uid:0
+#: field:easy.reconcile.simple.reference,create_uid:0
+msgid "Created by"
+msgstr "Created by"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,create_date:0
+#: field:account.easy.reconcile.method,create_date:0
+#: field:easy.reconcile.history,create_date:0
+#: field:easy.reconcile.simple.name,create_date:0
+#: field:easy.reconcile.simple.partner,create_date:0
+#: field:easy.reconcile.simple.reference,create_date:0
+msgid "Created on"
+msgstr "Created on"
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
+msgid "Date"
+msgstr "Date"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,date_base_on:0
+#: field:easy.reconcile.base,date_base_on:0
+#: field:easy.reconcile.options,date_base_on:0
+#: field:easy.reconcile.simple,date_base_on:0
+#: field:easy.reconcile.simple.name,date_base_on:0
+#: field:easy.reconcile.simple.partner,date_base_on:0
+#: field:easy.reconcile.simple.reference,date_base_on:0
+msgid "Date of reconciliation"
+msgstr "Date of reconciliation"
+
+#. module: account_easy_reconcile
+#: help:account.easy.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_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_tree
+msgid "Display items partially reconciled on the last run"
+msgstr "Display items partially reconciled on the last run"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_tree
+msgid "Display items reconciled on the last run"
+msgstr "Display items reconciled on the last run"
+
+#. module: account_easy_reconcile
+#: model:ir.actions.act_window,name:account_easy_reconcile.action_account_easy_reconcile
+#: model:ir.ui.menu,name:account_easy_reconcile.menu_easy_reconcile
+msgid "Easy Automatic Reconcile"
+msgstr "Easy Automatic Reconcile"
+
+#. module: account_easy_reconcile
+#: model:ir.actions.act_window,name:account_easy_reconcile.action_easy_reconcile_history
+msgid "Easy Automatic Reconcile History"
+msgstr "Easy Automatic Reconcile History"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,filter:0
+#: field:easy.reconcile.base,filter:0 field:easy.reconcile.options,filter:0
+#: field:easy.reconcile.simple,filter:0
+#: field:easy.reconcile.simple.name,filter:0
+#: field:easy.reconcile.simple.partner,filter:0
+#: field:easy.reconcile.simple.reference,filter:0
+msgid "Filter"
+msgstr "Filter"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,message_follower_ids:0
+msgid "Followers"
+msgstr "Followers"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,income_exchange_account_id:0
+#: field:easy.reconcile.base,income_exchange_account_id:0
+#: field:easy.reconcile.options,income_exchange_account_id:0
+#: field:easy.reconcile.simple,income_exchange_account_id:0
+#: field:easy.reconcile.simple.name,income_exchange_account_id:0
+#: field:easy.reconcile.simple.partner,income_exchange_account_id:0
+#: field:easy.reconcile.simple.reference,income_exchange_account_id:0
+msgid "Gain Exchange Rate Account"
+msgstr "Gain Exchange Rate Account"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+msgid "Go to partial reconciled items"
+msgstr "Go to partial reconciled items"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_form
+#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_tree
+msgid "Go to partially reconciled items"
+msgstr "Go to partially reconciled items"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_form
+#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_tree
+msgid "Go to reconciled items"
+msgstr "Go to reconciled items"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+msgid "Go to unreconciled items"
+msgstr "Go to unreconciled items"
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
+msgid "Group By..."
+msgstr "Group By..."
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+#: field:account.easy.reconcile,history_ids:0
+msgid "History"
+msgstr "History"
+
+#. module: account_easy_reconcile
+#: model:ir.actions.act_window,name:account_easy_reconcile.act_easy_reconcile_to_history
+msgid "History Details"
+msgstr "History Details"
+
+#. module: account_easy_reconcile
+#: help:account.easy.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_easy_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_easy_reconcile
+#: field:account.easy.reconcile,id:0 field:account.easy.reconcile.method,id:0
+#: field:easy.reconcile.base,id:0 field:easy.reconcile.history,id:0
+#: field:easy.reconcile.options,id:0 field:easy.reconcile.simple,id:0
+#: field:easy.reconcile.simple.name,id:0
+#: field:easy.reconcile.simple.partner,id:0
+#: field:easy.reconcile.simple.reference,id:0
+msgid "ID"
+msgstr "ID"
+
+#. module: account_easy_reconcile
+#: help:account.easy.reconcile,message_unread:0
+msgid "If checked new messages require your attention."
+msgstr "If checked new messages require your attention."
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+msgid "Information"
+msgstr "Information"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,message_is_follower:0
+msgid "Is a Follower"
+msgstr "Is a Follower"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,journal_id:0
+#: field:easy.reconcile.base,journal_id:0
+#: field:easy.reconcile.options,journal_id:0
+#: field:easy.reconcile.simple,journal_id:0
+#: field:easy.reconcile.simple.name,journal_id:0
+#: field:easy.reconcile.simple.partner,journal_id:0
+#: field:easy.reconcile.simple.reference,journal_id:0
+msgid "Journal"
+msgstr "Journal"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,message_last_post:0
+msgid "Last Message Date"
+msgstr "Last Message Date"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,write_uid:0
+#: field:account.easy.reconcile.method,write_uid:0
+#: field:easy.reconcile.history,write_uid:0
+#: field:easy.reconcile.simple.name,write_uid:0
+#: field:easy.reconcile.simple.partner,write_uid:0
+#: field:easy.reconcile.simple.reference,write_uid:0
+msgid "Last Updated by"
+msgstr "Last Updated by"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,write_date:0
+#: field:account.easy.reconcile.method,write_date:0
+#: field:easy.reconcile.history,write_date:0
+#: field:easy.reconcile.simple.name,write_date:0
+#: field:easy.reconcile.simple.partner,write_date:0
+#: field:easy.reconcile.simple.reference,write_date:0
+msgid "Last Updated on"
+msgstr "Last Updated on"
+
+#. module: account_easy_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_easy_reconcile
+#: field:account.easy.reconcile.method,expense_exchange_account_id:0
+#: field:easy.reconcile.base,expense_exchange_account_id:0
+#: field:easy.reconcile.options,expense_exchange_account_id:0
+#: field:easy.reconcile.simple,expense_exchange_account_id:0
+#: field:easy.reconcile.simple.name,expense_exchange_account_id:0
+#: field:easy.reconcile.simple.partner,expense_exchange_account_id:0
+#: field:easy.reconcile.simple.reference,expense_exchange_account_id:0
+msgid "Loss Exchange Rate Account"
+msgstr "Loss Exchange Rate Account"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_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_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_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_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_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_easy_reconcile
+#: field:account.easy.reconcile,message_ids:0
+msgid "Messages"
+msgstr "Messages"
+
+#. module: account_easy_reconcile
+#: help:account.easy.reconcile,message_ids:0
+msgid "Messages and communication history"
+msgstr "Messages and communication history"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,reconcile_method:0
+msgid "Method"
+msgstr "Method"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,name:0
+msgid "Name"
+msgstr "Name"
+
+#. module: account_easy_reconcile
+#: view:account.config.settings:account_easy_reconcile.view_account_config
+msgid "Options"
+msgstr "Options"
+
+#. module: account_easy_reconcile
+#: code:addons/account_easy_reconcile/easy_reconcile_history.py:104
+#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_form
+#: field:easy.reconcile.history,reconcile_ids:0
+#: field:easy.reconcile.history,reconcile_partial_ids:0
+#, python-format
+msgid "Partial Reconciliations"
+msgstr "Partial Reconciliations"
+
+#. module: account_easy_reconcile
+#: code:addons/account_easy_reconcile/easy_reconcile.py:334
+#, python-format
+msgid "Partial reconciled items"
+msgstr "Partial reconciled items"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+msgid "Profile Information"
+msgstr "Profile Information"
+
+#. module: account_easy_reconcile
+#: field:easy.reconcile.history,easy_reconcile_id:0
+msgid "Reconcile Profile"
+msgstr "Reconcile Profile"
+
+#. module: account_easy_reconcile
+#: view:account.config.settings:account_easy_reconcile.view_account_config
+msgid "Reconciliation"
+msgstr "Reconciliation"
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
+msgid "Reconciliation Profile"
+msgstr "Reconciliation Profile"
+
+#. module: account_easy_reconcile
+#: code:addons/account_easy_reconcile/easy_reconcile_history.py:100
+#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_form
+#, python-format
+msgid "Reconciliations"
+msgstr "Reconciliations"
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
+msgid "Reconciliations of last 7 days"
+msgstr "Reconciliations of last 7 days"
+
+#. module: account_easy_reconcile
+#: field:easy.reconcile.base,partner_ids:0
+#: field:easy.reconcile.simple,partner_ids:0
+#: field:easy.reconcile.simple.name,partner_ids:0
+#: field:easy.reconcile.simple.partner,partner_ids:0
+#: field:easy.reconcile.simple.reference,partner_ids:0
+msgid "Restrict on partners"
+msgstr "Restrict on partners"
+
+#. module: account_easy_reconcile
+#: field:easy.reconcile.history,date:0
+msgid "Run date"
+msgstr "Run date"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,sequence:0
+msgid "Sequence"
+msgstr "Sequence"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+msgid "Simple. Amount and Name"
+msgstr "Simple. Amount and Name"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+msgid "Simple. Amount and Partner"
+msgstr "Simple. Amount and Partner"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+msgid "Simple. Amount and Reference"
+msgstr "Simple. Amount and Reference"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_tree
+msgid "Start Auto Reconcilation"
+msgstr "Start Auto Reconcilation"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+msgid "Start Auto Reconciliation"
+msgstr "Start Auto Reconciliation"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,message_summary:0
+msgid "Summary"
+msgstr "Summary"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,task_id:0
+msgid "Task"
+msgstr "Task"
+
+#. module: account_easy_reconcile
+#: help:account.easy.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_easy_reconcile
+#: code:addons/account_easy_reconcile/easy_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_easy_reconcile
+#: code:addons/account_easy_reconcile/easy_reconcile.py:269
+#, python-format
+msgid "There was an error during reconciliation : %s"
+msgstr "There was an error during reconciliation : %s"
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
+msgid "Today"
+msgstr "Today"
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
+msgid "Todays' Reconcilations"
+msgstr "Todays' Reconcilations"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,name:0
+msgid "Type"
+msgstr "Type"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,message_unread:0
+msgid "Unread Messages"
+msgstr "Unread Messages"
+
+#. module: account_easy_reconcile
+#: code:addons/account_easy_reconcile/easy_reconcile.py:321
+#, python-format
+msgid "Unreconciled items"
+msgstr "Unreconciled items"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,write_off:0
+#: field:easy.reconcile.base,write_off:0
+#: field:easy.reconcile.options,write_off:0
+#: field:easy.reconcile.simple,write_off:0
+#: field:easy.reconcile.simple.name,write_off:0
+#: field:easy.reconcile.simple.partner,write_off:0
+#: field:easy.reconcile.simple.reference,write_off:0
+msgid "Write off allowed"
+msgstr "Write off allowed"
+
+#. module: account_easy_reconcile
+#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile
+msgid "account easy reconcile"
+msgstr "account easy reconcile"
+
+#. module: account_easy_reconcile
+#: view:account.config.settings:account_easy_reconcile.view_account_config
+msgid "eInvoicing & Payments"
+msgstr "eInvoicing & Payments"
+
+#. module: account_easy_reconcile
+#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile_method
+msgid "reconcile method for account_easy_reconcile"
+msgstr "reconcile method for account_easy_reconcile"
diff --git a/account_easy_reconcile/i18n/es.po b/account_easy_reconcile/i18n/es.po
index b4897878..292ec19f 100644
--- a/account_easy_reconcile/i18n/es.po
+++ b/account_easy_reconcile/i18n/es.po
@@ -1,56 +1,27 @@
-# Spanish translation for banking-addons
-# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
-# This file is distributed under the same license as the banking-addons package.
-# FIRST AUTHOR , 2014.
-#
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * account_easy_reconcile
+#
+# Translators:
+# FIRST AUTHOR , 2014
msgid ""
msgstr ""
-"Project-Id-Version: banking-addons\n"
-"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2014-01-21 11:55+0000\n"
-"PO-Revision-Date: 2014-06-05 22:21+0000\n"
-"Last-Translator: Pedro Manuel Baeza \n"
-"Language-Team: Spanish \n"
+"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: 8bit\n"
-"X-Launchpad-Export-Date: 2014-06-06 06:36+0000\n"
-"X-Generator: Launchpad (build 17031)\n"
+"Content-Transfer-Encoding: \n"
+"Language: es\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: account_easy_reconcile
-#: code:addons/account_easy_reconcile/easy_reconcile_history.py:101
-#: field:easy.reconcile.history,reconcile_ids:0
-#, python-format
-msgid "Reconciliations"
-msgstr "Conciliaciones"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-#: view:easy.reconcile.history:0
-msgid "Automatic Easy Reconcile History"
-msgstr "Historial de conciliación automática sencilla"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Information"
-msgstr "Información"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-#: view:easy.reconcile.history:0
-msgid "Go to partially reconciled items"
-msgstr "Ir a los elementos parcialmente conciliados"
-
-#. module: account_easy_reconcile
-#: help:account.easy.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_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_history
-msgid "easy.reconcile.history"
-msgstr "easy.reconcile.history"
+#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
+msgid "7 Days"
+msgstr "7 días"
#. module: account_easy_reconcile
#: model:ir.actions.act_window,help:account_easy_reconcile.action_account_easy_reconcile
@@ -64,177 +35,7 @@ msgid ""
" be run sequentially to match the entries between them.\n"
"
\n"
" "
-msgstr ""
-"
\n"
-"Pulse para añadir un pefil de conciliación.\n"
-"
\n"
-"Un perfil de conciliación especifica, para una cuenta, como\n"
-"los apuntes deben ser conciliados.\n"
-"Puede seleccionar uno o varios métodos de conciliación que\n"
-"serán ejecutados secuencialmente para casar los apuntes\n"
-"entre ellos.\n"
-"
\n"
-" "
-
-#. module: account_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_options
-msgid "easy.reconcile.options"
-msgstr "easy.reconcile.options"
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:0
-msgid "Group By..."
-msgstr "Agrupar por..."
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,unreconciled_count:0
-msgid "Unreconciled Items"
-msgstr "Apuntes no conciliados"
-
-#. module: account_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_base
-msgid "easy.reconcile.base"
-msgstr "easy.reconcile.base"
-
-#. module: account_easy_reconcile
-#: field:easy.reconcile.history,reconcile_line_ids:0
-msgid "Reconciled Items"
-msgstr "Elementos conciliados"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,reconcile_method:0
-msgid "Method"
-msgstr "Método"
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:0
-msgid "7 Days"
-msgstr "7 días"
-
-#. module: account_easy_reconcile
-#: model:ir.actions.act_window,name:account_easy_reconcile.action_easy_reconcile_history
-msgid "Easy Automatic Reconcile History"
-msgstr "Historial de la conciliación automática sencilla"
-
-#. module: account_easy_reconcile
-#: field:easy.reconcile.history,date:0
-msgid "Run date"
-msgstr "Fecha ejecucción"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-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_easy_reconcile
-#: model:ir.actions.act_window,name:account_easy_reconcile.act_easy_reconcile_to_history
-msgid "History Details"
-msgstr "Detalles del historial"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Display items reconciled on the last run"
-msgstr "Mostrar elementos conciliados en la última ejecucción"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,name:0
-msgid "Type"
-msgstr "Tipo"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,company_id:0
-#: field:account.easy.reconcile.method,company_id:0
-#: field:easy.reconcile.history,company_id:0
-msgid "Company"
-msgstr "Compañía"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,account_profit_id:0
-#: field:easy.reconcile.base,account_profit_id:0
-#: field:easy.reconcile.options,account_profit_id:0
-#: field:easy.reconcile.simple,account_profit_id:0
-#: field:easy.reconcile.simple.name,account_profit_id:0
-#: field:easy.reconcile.simple.partner,account_profit_id:0
-#: field:easy.reconcile.simple.reference,account_profit_id:0
-msgid "Account Profit"
-msgstr "Cuenta de ganancias"
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:0
-msgid "Todays' Reconcilations"
-msgstr "Conciliaciones de hoy"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Simple. Amount and Name"
-msgstr "Simple. Cantidad y nombre"
-
-#. module: account_easy_reconcile
-#: field:easy.reconcile.base,partner_ids:0
-#: field:easy.reconcile.simple,partner_ids:0
-#: field:easy.reconcile.simple.name,partner_ids:0
-#: field:easy.reconcile.simple.partner,partner_ids:0
-#: field:easy.reconcile.simple.reference,partner_ids:0
-msgid "Restrict on partners"
-msgstr "Restringir en las empresas"
-
-#. module: account_easy_reconcile
-#: model:ir.actions.act_window,name:account_easy_reconcile.action_account_easy_reconcile
-#: model:ir.ui.menu,name:account_easy_reconcile.menu_easy_reconcile
-msgid "Easy Automatic Reconcile"
-msgstr "Conciliación automática simple"
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:0
-msgid "Today"
-msgstr "Hoy"
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:0
-msgid "Date"
-msgstr "Fecha"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,last_history:0
-msgid "Last History"
-msgstr "Último historial"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Configuration"
-msgstr "Configuración"
-
-#. module: account_easy_reconcile
-#: field:easy.reconcile.history,partial_line_ids:0
-msgid "Partially Reconciled Items"
-msgstr "Elementos parcialmente conciliados"
-
-#. module: account_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_partner
-msgid "easy.reconcile.simple.partner"
-msgstr "easy.reconcile.simple.partner"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,write_off:0
-#: field:easy.reconcile.base,write_off:0
-#: field:easy.reconcile.options,write_off:0
-#: field:easy.reconcile.simple,write_off:0
-#: field:easy.reconcile.simple.name,write_off:0
-#: field:easy.reconcile.simple.partner,write_off:0
-#: field:easy.reconcile.simple.reference,write_off:0
-msgid "Write off allowed"
-msgstr "Desajuste permitido"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Automatic Easy Reconcile"
-msgstr "Conciliación automática sencilla"
+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_easy_reconcile
#: field:account.easy.reconcile,account:0
@@ -246,91 +47,6 @@ msgstr "Conciliación automática sencilla"
msgid "Account"
msgstr "Cuenta"
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,task_id:0
-msgid "Task"
-msgstr "Tarea"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,name:0
-msgid "Name"
-msgstr "Nombre"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Simple. Amount and Partner"
-msgstr "Simple. Cantidad y empresa"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Start Auto Reconcilation"
-msgstr "Iniciar conciliación automática"
-
-#. module: account_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_name
-msgid "easy.reconcile.simple.name"
-msgstr "easy.reconcile.simple.name"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,filter:0
-#: field:easy.reconcile.base,filter:0
-#: field:easy.reconcile.options,filter:0
-#: field:easy.reconcile.simple,filter:0
-#: field:easy.reconcile.simple.name,filter:0
-#: field:easy.reconcile.simple.partner,filter:0
-#: field:easy.reconcile.simple.reference,filter:0
-msgid "Filter"
-msgstr "Filtro"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-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_easy_reconcile
-#: field:easy.reconcile.history,easy_reconcile_id:0
-msgid "Reconcile Profile"
-msgstr "Perfil de conciliación"
-
-#. module: account_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile_method
-msgid "reconcile method for account_easy_reconcile"
-msgstr "Método de conciliación para account_easy_reconcile"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Start Auto Reconciliation"
-msgstr "Iniciar auto-conciliación"
-
-#. module: account_easy_reconcile
-#: code:addons/account_easy_reconcile/easy_reconcile.py:233
-#, python-format
-msgid "Error"
-msgstr "Error"
-
-#. module: account_easy_reconcile
-#: code:addons/account_easy_reconcile/easy_reconcile.py:258
-#, 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_easy_reconcile
-#: view:account.easy.reconcile:0
-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_easy_reconcile
#: field:account.easy.reconcile.method,account_lost_id:0
#: field:easy.reconcile.base,account_lost_id:0
@@ -343,56 +59,99 @@ msgid "Account Lost"
msgstr "Cuenta de pérdidas"
#. module: account_easy_reconcile
-#: view:easy.reconcile.history:0
-msgid "Reconciliation Profile"
-msgstr "Perfil de conciliación"
+#: field:account.easy.reconcile.method,account_profit_id:0
+#: field:easy.reconcile.base,account_profit_id:0
+#: field:easy.reconcile.options,account_profit_id:0
+#: field:easy.reconcile.simple,account_profit_id:0
+#: field:easy.reconcile.simple.name,account_profit_id:0
+#: field:easy.reconcile.simple.partner,account_profit_id:0
+#: field:easy.reconcile.simple.reference,account_profit_id:0
+msgid "Account Profit"
+msgstr "Cuenta de ganancias"
#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-#: field:account.easy.reconcile,history_ids:0
-msgid "History"
-msgstr "Historial"
+#: help:account.easy.reconcile.method,analytic_account_id:0
+#: help:easy.reconcile.base,analytic_account_id:0
+#: help:easy.reconcile.options,analytic_account_id:0
+#: help:easy.reconcile.simple,analytic_account_id:0
+#: help:easy.reconcile.simple.name,analytic_account_id:0
+#: help:easy.reconcile.simple.partner,analytic_account_id:0
+#: help:easy.reconcile.simple.reference,analytic_account_id:0
+msgid "Analytic account for the write-off"
+msgstr ""
#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-#: view:easy.reconcile.history:0
-msgid "Go to reconciled items"
-msgstr "Ir a los elementos conciliados"
+#: field:account.easy.reconcile.method,analytic_account_id:0
+#: field:easy.reconcile.base,analytic_account_id:0
+#: field:easy.reconcile.options,analytic_account_id:0
+#: field:easy.reconcile.simple,analytic_account_id:0
+#: field:easy.reconcile.simple.name,analytic_account_id:0
+#: field:easy.reconcile.simple.partner,analytic_account_id:0
+#: field:easy.reconcile.simple.reference,analytic_account_id:0
+msgid "Analytic_account"
+msgstr ""
#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Profile Information"
-msgstr "Información del perfil"
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_tree
+msgid "Automatic Easy Reconcile"
+msgstr "Conciliación automática sencilla"
#. module: account_easy_reconcile
-#: view:account.easy.reconcile.method:0
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_form
+#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_tree
+#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
+msgid "Automatic Easy Reconcile History"
+msgstr "Historial de conciliación automática sencilla"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile.method:account_easy_reconcile.account_easy_reconcile_method_form
+#: view:account.easy.reconcile.method:account_easy_reconcile.account_easy_reconcile_method_tree
msgid "Automatic Easy Reconcile Method"
msgstr "Método de conciliación automática sencilla"
#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Simple. Amount and Reference"
-msgstr "Simple. Cantidad y referencia"
+#: model:ir.model,name:account_easy_reconcile.model_res_company
+msgid "Companies"
+msgstr ""
#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Display items partially reconciled on the last run"
-msgstr "Mostrar elementos conciliados parcialmente en la última ejecucción"
+#: field:account.easy.reconcile,company_id:0
+#: field:account.easy.reconcile.method,company_id:0
+#: field:easy.reconcile.history,company_id:0
+msgid "Company"
+msgstr "Compañía"
#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,sequence:0
-msgid "Sequence"
-msgstr "Secuencia"
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+msgid "Configuration"
+msgstr "Configuración"
#. module: account_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple
-msgid "easy.reconcile.simple"
-msgstr "easy.reconcile.simple"
+#: field:account.easy.reconcile,create_uid:0
+#: field:account.easy.reconcile.method,create_uid:0
+#: field:easy.reconcile.history,create_uid:0
+#: field:easy.reconcile.simple.name,create_uid:0
+#: field:easy.reconcile.simple.partner,create_uid:0
+#: field:easy.reconcile.simple.reference,create_uid:0
+msgid "Created by"
+msgstr ""
#. module: account_easy_reconcile
-#: view:easy.reconcile.history:0
-msgid "Reconciliations of last 7 days"
-msgstr "Conciliaciones de los últimos 7 días"
+#: field:account.easy.reconcile,create_date:0
+#: field:account.easy.reconcile.method,create_date:0
+#: field:easy.reconcile.history,create_date:0
+#: field:easy.reconcile.simple.name,create_date:0
+#: field:easy.reconcile.simple.partner,create_date:0
+#: field:easy.reconcile.simple.reference,create_date:0
+msgid "Created on"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
+msgid "Date"
+msgstr "Fecha"
#. module: account_easy_reconcile
#: field:account.easy.reconcile.method,date_base_on:0
@@ -406,11 +165,135 @@ msgid "Date of reconciliation"
msgstr "Fecha de conciliación"
#. module: account_easy_reconcile
-#: code:addons/account_easy_reconcile/easy_reconcile_history.py:104
-#: field:easy.reconcile.history,reconcile_partial_ids:0
-#, python-format
-msgid "Partial Reconciliations"
-msgstr "Conciliaciones parciales"
+#: help:account.easy.reconcile,message_last_post:0
+msgid "Date of the last message posted on the record."
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_tree
+msgid "Display items partially reconciled on the last run"
+msgstr "Mostrar elementos conciliados parcialmente en la última ejecucción"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_tree
+msgid "Display items reconciled on the last run"
+msgstr "Mostrar elementos conciliados en la última ejecucción"
+
+#. module: account_easy_reconcile
+#: model:ir.actions.act_window,name:account_easy_reconcile.action_account_easy_reconcile
+#: model:ir.ui.menu,name:account_easy_reconcile.menu_easy_reconcile
+msgid "Easy Automatic Reconcile"
+msgstr "Conciliación automática simple"
+
+#. module: account_easy_reconcile
+#: model:ir.actions.act_window,name:account_easy_reconcile.action_easy_reconcile_history
+msgid "Easy Automatic Reconcile History"
+msgstr "Historial de la conciliación automática sencilla"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,filter:0
+#: field:easy.reconcile.base,filter:0 field:easy.reconcile.options,filter:0
+#: field:easy.reconcile.simple,filter:0
+#: field:easy.reconcile.simple.name,filter:0
+#: field:easy.reconcile.simple.partner,filter:0
+#: field:easy.reconcile.simple.reference,filter:0
+msgid "Filter"
+msgstr "Filtro"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,message_follower_ids:0
+msgid "Followers"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,income_exchange_account_id:0
+#: field:easy.reconcile.base,income_exchange_account_id:0
+#: field:easy.reconcile.options,income_exchange_account_id:0
+#: field:easy.reconcile.simple,income_exchange_account_id:0
+#: field:easy.reconcile.simple.name,income_exchange_account_id:0
+#: field:easy.reconcile.simple.partner,income_exchange_account_id:0
+#: field:easy.reconcile.simple.reference,income_exchange_account_id:0
+msgid "Gain Exchange Rate Account"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+msgid "Go to partial reconciled items"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_form
+#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_tree
+msgid "Go to partially reconciled items"
+msgstr "Ir a los elementos parcialmente conciliados"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_form
+#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_tree
+msgid "Go to reconciled items"
+msgstr "Ir a los elementos conciliados"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+msgid "Go to unreconciled items"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
+msgid "Group By..."
+msgstr "Agrupar por..."
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+#: field:account.easy.reconcile,history_ids:0
+msgid "History"
+msgstr "Historial"
+
+#. module: account_easy_reconcile
+#: model:ir.actions.act_window,name:account_easy_reconcile.act_easy_reconcile_to_history
+msgid "History Details"
+msgstr "Detalles del historial"
+
+#. module: account_easy_reconcile
+#: help:account.easy.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_easy_reconcile
+#: field:res.company,reconciliation_commit_every:0
+msgid "How often to commit when performing automatic reconciliation."
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,id:0 field:account.easy.reconcile.method,id:0
+#: field:easy.reconcile.base,id:0 field:easy.reconcile.history,id:0
+#: field:easy.reconcile.options,id:0 field:easy.reconcile.simple,id:0
+#: field:easy.reconcile.simple.name,id:0
+#: field:easy.reconcile.simple.partner,id:0
+#: field:easy.reconcile.simple.reference,id:0
+msgid "ID"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: help:account.easy.reconcile,message_unread:0
+msgid "If checked new messages require your attention."
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+msgid "Information"
+msgstr "Información"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,message_is_follower:0
+msgid "Is a Follower"
+msgstr ""
#. module: account_easy_reconcile
#: field:account.easy.reconcile.method,journal_id:0
@@ -424,11 +307,261 @@ msgid "Journal"
msgstr "Diario"
#. module: account_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_reference
-msgid "easy.reconcile.simple.reference"
-msgstr "easy.reconcile.simple.reference"
+#: field:account.easy.reconcile,message_last_post:0
+msgid "Last Message Date"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,write_uid:0
+#: field:account.easy.reconcile.method,write_uid:0
+#: field:easy.reconcile.history,write_uid:0
+#: field:easy.reconcile.simple.name,write_uid:0
+#: field:easy.reconcile.simple.partner,write_uid:0
+#: field:easy.reconcile.simple.reference,write_uid:0
+msgid "Last Updated by"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,write_date:0
+#: field:account.easy.reconcile.method,write_date:0
+#: field:easy.reconcile.history,write_date:0
+#: field:easy.reconcile.simple.name,write_date:0
+#: field:easy.reconcile.simple.partner,write_date:0
+#: field:easy.reconcile.simple.reference,write_date:0
+msgid "Last Updated on"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: help:res.company,reconciliation_commit_every:0
+msgid "Leave zero to commit only at the end of the process."
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,expense_exchange_account_id:0
+#: field:easy.reconcile.base,expense_exchange_account_id:0
+#: field:easy.reconcile.options,expense_exchange_account_id:0
+#: field:easy.reconcile.simple,expense_exchange_account_id:0
+#: field:easy.reconcile.simple.name,expense_exchange_account_id:0
+#: field:easy.reconcile.simple.partner,expense_exchange_account_id:0
+#: field:easy.reconcile.simple.reference,expense_exchange_account_id:0
+msgid "Loss Exchange Rate Account"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_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_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_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_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_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_easy_reconcile
+#: field:account.easy.reconcile,message_ids:0
+msgid "Messages"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: help:account.easy.reconcile,message_ids:0
+msgid "Messages and communication history"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,reconcile_method:0
+msgid "Method"
+msgstr "Método"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,name:0
+msgid "Name"
+msgstr "Nombre"
+
+#. module: account_easy_reconcile
+#: view:account.config.settings:account_easy_reconcile.view_account_config
+msgid "Options"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: code:addons/account_easy_reconcile/easy_reconcile_history.py:104
+#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_form
+#: field:easy.reconcile.history,reconcile_ids:0
+#: field:easy.reconcile.history,reconcile_partial_ids:0
+#, python-format
+msgid "Partial Reconciliations"
+msgstr "Conciliaciones parciales"
+
+#. module: account_easy_reconcile
+#: code:addons/account_easy_reconcile/easy_reconcile.py:334
+#, python-format
+msgid "Partial reconciled items"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+msgid "Profile Information"
+msgstr "Información del perfil"
+
+#. module: account_easy_reconcile
+#: field:easy.reconcile.history,easy_reconcile_id:0
+msgid "Reconcile Profile"
+msgstr "Perfil de conciliación"
+
+#. module: account_easy_reconcile
+#: view:account.config.settings:account_easy_reconcile.view_account_config
+msgid "Reconciliation"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
+msgid "Reconciliation Profile"
+msgstr "Perfil de conciliación"
+
+#. module: account_easy_reconcile
+#: code:addons/account_easy_reconcile/easy_reconcile_history.py:100
+#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_form
+#, python-format
+msgid "Reconciliations"
+msgstr "Conciliaciones"
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
+msgid "Reconciliations of last 7 days"
+msgstr "Conciliaciones de los últimos 7 días"
+
+#. module: account_easy_reconcile
+#: field:easy.reconcile.base,partner_ids:0
+#: field:easy.reconcile.simple,partner_ids:0
+#: field:easy.reconcile.simple.name,partner_ids:0
+#: field:easy.reconcile.simple.partner,partner_ids:0
+#: field:easy.reconcile.simple.reference,partner_ids:0
+msgid "Restrict on partners"
+msgstr "Restringir en las empresas"
+
+#. module: account_easy_reconcile
+#: field:easy.reconcile.history,date:0
+msgid "Run date"
+msgstr "Fecha ejecucción"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,sequence:0
+msgid "Sequence"
+msgstr "Secuencia"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+msgid "Simple. Amount and Name"
+msgstr "Simple. Cantidad y nombre"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+msgid "Simple. Amount and Partner"
+msgstr "Simple. Cantidad y empresa"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+msgid "Simple. Amount and Reference"
+msgstr "Simple. Cantidad y referencia"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_tree
+msgid "Start Auto Reconcilation"
+msgstr "Iniciar conciliación automática"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+msgid "Start Auto Reconciliation"
+msgstr "Iniciar auto-conciliación"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,message_summary:0
+msgid "Summary"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,task_id:0
+msgid "Task"
+msgstr "Tarea"
+
+#. module: account_easy_reconcile
+#: help:account.easy.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_easy_reconcile
+#: code:addons/account_easy_reconcile/easy_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_easy_reconcile
+#: code:addons/account_easy_reconcile/easy_reconcile.py:269
+#, python-format
+msgid "There was an error during reconciliation : %s"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
+msgid "Today"
+msgstr "Hoy"
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
+msgid "Todays' Reconcilations"
+msgstr "Conciliaciones de hoy"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,name:0
+msgid "Type"
+msgstr "Tipo"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,message_unread:0
+msgid "Unread Messages"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: code:addons/account_easy_reconcile/easy_reconcile.py:321
+#, python-format
+msgid "Unreconciled items"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,write_off:0
+#: field:easy.reconcile.base,write_off:0
+#: field:easy.reconcile.options,write_off:0
+#: field:easy.reconcile.simple,write_off:0
+#: field:easy.reconcile.simple.name,write_off:0
+#: field:easy.reconcile.simple.partner,write_off:0
+#: field:easy.reconcile.simple.reference,write_off:0
+msgid "Write off allowed"
+msgstr "Desajuste permitido"
#. module: account_easy_reconcile
#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile
msgid "account easy reconcile"
msgstr "account easy reconcile"
+
+#. module: account_easy_reconcile
+#: view:account.config.settings:account_easy_reconcile.view_account_config
+msgid "eInvoicing & Payments"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile_method
+msgid "reconcile method for account_easy_reconcile"
+msgstr "Método de conciliación para account_easy_reconcile"
diff --git a/account_easy_reconcile/i18n/fr.po b/account_easy_reconcile/i18n/fr.po
index 957765d4..c3a9f801 100644
--- a/account_easy_reconcile/i18n/fr.po
+++ b/account_easy_reconcile/i18n/fr.po
@@ -1,55 +1,26 @@
-# Translation of OpenERP Server.
+# Translation of Odoo Server.
# This file contains the translation of the following modules:
-# * account_easy_reconcile
-#
+# * account_easy_reconcile
+#
+# Translators:
msgid ""
msgstr ""
-"Project-Id-Version: OpenERP Server 6.1\n"
+"Project-Id-Version: bank-statement-reconcile (8.0)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-01-21 11:55+0000\n"
-"PO-Revision-Date: 2014-03-21 15:25+0000\n"
-"Last-Translator: Guewen Baconnier @ Camptocamp \n"
-"Language-Team: \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: 8bit\n"
-"X-Launchpad-Export-Date: 2014-05-22 06:49+0000\n"
-"X-Generator: Launchpad (build 17017)\n"
-"Language: \n"
+"Content-Transfer-Encoding: \n"
+"Language: fr\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#. module: account_easy_reconcile
-#: code:addons/account_easy_reconcile/easy_reconcile_history.py:101
-#: field:easy.reconcile.history,reconcile_ids:0
-#, python-format
-msgid "Reconciliations"
-msgstr "Lettrages"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-#: view:easy.reconcile.history:0
-msgid "Automatic Easy Reconcile History"
-msgstr "Historique des lettrages automatisés"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Information"
-msgstr "Information"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-#: view:easy.reconcile.history:0
-msgid "Go to partially reconciled items"
-msgstr "Voir les entrées partiellement lettrées"
-
-#. module: account_easy_reconcile
-#: help:account.easy.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_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_history
-msgid "easy.reconcile.history"
-msgstr "easy.reconcile.history"
+#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
+msgid "7 Days"
+msgstr "7 jours"
#. module: account_easy_reconcile
#: model:ir.actions.act_window,help:account_easy_reconcile.action_account_easy_reconcile
@@ -63,175 +34,7 @@ msgid ""
" 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_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_options
-msgid "easy.reconcile.options"
-msgstr "lettrage automatisé.options"
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:0
-msgid "Group By..."
-msgstr "Grouper par..."
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,unreconciled_count:0
-msgid "Unreconciled Items"
-msgstr "Écritures non lettrées"
-
-#. module: account_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_base
-msgid "easy.reconcile.base"
-msgstr "easy.reconcile.base"
-
-#. module: account_easy_reconcile
-#: field:easy.reconcile.history,reconcile_line_ids:0
-msgid "Reconciled Items"
-msgstr "Écritures lettrées"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,reconcile_method:0
-msgid "Method"
-msgstr "Méthode"
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:0
-msgid "7 Days"
-msgstr "7 jours"
-
-#. module: account_easy_reconcile
-#: model:ir.actions.act_window,name:account_easy_reconcile.action_easy_reconcile_history
-msgid "Easy Automatic Reconcile History"
-msgstr "Lettrage automatisé"
-
-#. module: account_easy_reconcile
-#: field:easy.reconcile.history,date:0
-msgid "Run date"
-msgstr "Date de lancement"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-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_easy_reconcile
-#: model:ir.actions.act_window,name:account_easy_reconcile.act_easy_reconcile_to_history
-msgid "History Details"
-msgstr "Détails de l'historique"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Display items reconciled on the last run"
-msgstr "Voir les entrées lettrées au dernier lettrage"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,name:0
-msgid "Type"
-msgstr "Type"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,company_id:0
-#: field:account.easy.reconcile.method,company_id:0
-#: field:easy.reconcile.history,company_id:0
-msgid "Company"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,account_profit_id:0
-#: field:easy.reconcile.base,account_profit_id:0
-#: field:easy.reconcile.options,account_profit_id:0
-#: field:easy.reconcile.simple,account_profit_id:0
-#: field:easy.reconcile.simple.name,account_profit_id:0
-#: field:easy.reconcile.simple.partner,account_profit_id:0
-#: field:easy.reconcile.simple.reference,account_profit_id:0
-msgid "Account Profit"
-msgstr "Compte de profits"
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:0
-msgid "Todays' Reconcilations"
-msgstr "Lettrages du jour"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Simple. Amount and Name"
-msgstr "Simple. Montant et description"
-
-#. module: account_easy_reconcile
-#: field:easy.reconcile.base,partner_ids:0
-#: field:easy.reconcile.simple,partner_ids:0
-#: field:easy.reconcile.simple.name,partner_ids:0
-#: field:easy.reconcile.simple.partner,partner_ids:0
-#: field:easy.reconcile.simple.reference,partner_ids:0
-msgid "Restrict on partners"
-msgstr "Filtrer sur des partenaires"
-
-#. module: account_easy_reconcile
-#: model:ir.actions.act_window,name:account_easy_reconcile.action_account_easy_reconcile
-#: model:ir.ui.menu,name:account_easy_reconcile.menu_easy_reconcile
-msgid "Easy Automatic Reconcile"
-msgstr "Lettrage automatisé"
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:0
-msgid "Today"
-msgstr "Aujourd'hui"
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:0
-msgid "Date"
-msgstr "Date"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,last_history:0
-msgid "Last History"
-msgstr "Dernier historique"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Configuration"
-msgstr "Configuration"
-
-#. module: account_easy_reconcile
-#: field:easy.reconcile.history,partial_line_ids:0
-msgid "Partially Reconciled Items"
-msgstr "Écritures partiellement lettrées"
-
-#. module: account_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_partner
-msgid "easy.reconcile.simple.partner"
-msgstr "easy.reconcile.simple.partner"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,write_off:0
-#: field:easy.reconcile.base,write_off:0
-#: field:easy.reconcile.options,write_off:0
-#: field:easy.reconcile.simple,write_off:0
-#: field:easy.reconcile.simple.name,write_off:0
-#: field:easy.reconcile.simple.partner,write_off:0
-#: field:easy.reconcile.simple.reference,write_off:0
-msgid "Write off allowed"
-msgstr "Écart autorisé"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Automatic Easy Reconcile"
-msgstr "Lettrage automatisé"
+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_easy_reconcile
#: field:account.easy.reconcile,account:0
@@ -243,89 +46,6 @@ msgstr "Lettrage automatisé"
msgid "Account"
msgstr "Compte"
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,task_id:0
-msgid "Task"
-msgstr "Tâche"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,name:0
-msgid "Name"
-msgstr "Nom"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Simple. Amount and Partner"
-msgstr "Simple. Montant et partenaire"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Start Auto Reconcilation"
-msgstr "Lancer le lettrage automatisé"
-
-#. module: account_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_name
-msgid "easy.reconcile.simple.name"
-msgstr "easy.reconcile.simple.name"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,filter:0
-#: field:easy.reconcile.base,filter:0
-#: field:easy.reconcile.options,filter:0
-#: field:easy.reconcile.simple,filter:0
-#: field:easy.reconcile.simple.name,filter:0
-#: field:easy.reconcile.simple.partner,filter:0
-#: field:easy.reconcile.simple.reference,filter:0
-msgid "Filter"
-msgstr "Filtre"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-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_easy_reconcile
-#: field:easy.reconcile.history,easy_reconcile_id:0
-msgid "Reconcile Profile"
-msgstr "Profil de réconciliation"
-
-#. module: account_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile_method
-msgid "reconcile method for account_easy_reconcile"
-msgstr "Méthode de lettrage"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Start Auto Reconciliation"
-msgstr "Lancer le lettrage automatisé"
-
-#. module: account_easy_reconcile
-#: code:addons/account_easy_reconcile/easy_reconcile.py:233
-#, python-format
-msgid "Error"
-msgstr "Erreur"
-
-#. module: account_easy_reconcile
-#: code:addons/account_easy_reconcile/easy_reconcile.py:258
-#, 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_easy_reconcile
-#: view:account.easy.reconcile:0
-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_easy_reconcile
#: field:account.easy.reconcile.method,account_lost_id:0
#: field:easy.reconcile.base,account_lost_id:0
@@ -338,56 +58,99 @@ msgid "Account Lost"
msgstr "Compte de pertes"
#. module: account_easy_reconcile
-#: view:easy.reconcile.history:0
-msgid "Reconciliation Profile"
-msgstr "Profil de réconciliation"
+#: field:account.easy.reconcile.method,account_profit_id:0
+#: field:easy.reconcile.base,account_profit_id:0
+#: field:easy.reconcile.options,account_profit_id:0
+#: field:easy.reconcile.simple,account_profit_id:0
+#: field:easy.reconcile.simple.name,account_profit_id:0
+#: field:easy.reconcile.simple.partner,account_profit_id:0
+#: field:easy.reconcile.simple.reference,account_profit_id:0
+msgid "Account Profit"
+msgstr "Compte de profits"
#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-#: field:account.easy.reconcile,history_ids:0
-msgid "History"
-msgstr "Historique"
+#: help:account.easy.reconcile.method,analytic_account_id:0
+#: help:easy.reconcile.base,analytic_account_id:0
+#: help:easy.reconcile.options,analytic_account_id:0
+#: help:easy.reconcile.simple,analytic_account_id:0
+#: help:easy.reconcile.simple.name,analytic_account_id:0
+#: help:easy.reconcile.simple.partner,analytic_account_id:0
+#: help:easy.reconcile.simple.reference,analytic_account_id:0
+msgid "Analytic account for the write-off"
+msgstr ""
#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-#: view:easy.reconcile.history:0
-msgid "Go to reconciled items"
-msgstr "Voir les entrées lettrées"
+#: field:account.easy.reconcile.method,analytic_account_id:0
+#: field:easy.reconcile.base,analytic_account_id:0
+#: field:easy.reconcile.options,analytic_account_id:0
+#: field:easy.reconcile.simple,analytic_account_id:0
+#: field:easy.reconcile.simple.name,analytic_account_id:0
+#: field:easy.reconcile.simple.partner,analytic_account_id:0
+#: field:easy.reconcile.simple.reference,analytic_account_id:0
+msgid "Analytic_account"
+msgstr ""
#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Profile Information"
-msgstr "Information sur le profil"
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_tree
+msgid "Automatic Easy Reconcile"
+msgstr "Lettrage automatisé"
#. module: account_easy_reconcile
-#: view:account.easy.reconcile.method:0
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_form
+#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_tree
+#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
+msgid "Automatic Easy Reconcile History"
+msgstr "Historique des lettrages automatisés"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile.method:account_easy_reconcile.account_easy_reconcile_method_form
+#: view:account.easy.reconcile.method:account_easy_reconcile.account_easy_reconcile_method_tree
msgid "Automatic Easy Reconcile Method"
msgstr "Méthode de lettrage automatisé"
#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Simple. Amount and Reference"
-msgstr "Simple. Montant et référence"
+#: model:ir.model,name:account_easy_reconcile.model_res_company
+msgid "Companies"
+msgstr ""
#. module: account_easy_reconcile
-#: view:account.easy.reconcile:0
-msgid "Display items partially reconciled on the last run"
-msgstr "Afficher les entrées partiellement lettrées au dernier lettrage"
+#: field:account.easy.reconcile,company_id:0
+#: field:account.easy.reconcile.method,company_id:0
+#: field:easy.reconcile.history,company_id:0
+msgid "Company"
+msgstr "Société"
#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,sequence:0
-msgid "Sequence"
-msgstr "Séquence"
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+msgid "Configuration"
+msgstr "Configuration"
#. module: account_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple
-msgid "easy.reconcile.simple"
-msgstr "easy.reconcile.simple"
+#: field:account.easy.reconcile,create_uid:0
+#: field:account.easy.reconcile.method,create_uid:0
+#: field:easy.reconcile.history,create_uid:0
+#: field:easy.reconcile.simple.name,create_uid:0
+#: field:easy.reconcile.simple.partner,create_uid:0
+#: field:easy.reconcile.simple.reference,create_uid:0
+msgid "Created by"
+msgstr ""
#. module: account_easy_reconcile
-#: view:easy.reconcile.history:0
-msgid "Reconciliations of last 7 days"
-msgstr "Lettrages des 7 derniers jours"
+#: field:account.easy.reconcile,create_date:0
+#: field:account.easy.reconcile.method,create_date:0
+#: field:easy.reconcile.history,create_date:0
+#: field:easy.reconcile.simple.name,create_date:0
+#: field:easy.reconcile.simple.partner,create_date:0
+#: field:easy.reconcile.simple.reference,create_date:0
+msgid "Created on"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
+msgid "Date"
+msgstr "Date"
#. module: account_easy_reconcile
#: field:account.easy.reconcile.method,date_base_on:0
@@ -401,11 +164,135 @@ msgid "Date of reconciliation"
msgstr "Date de lettrage"
#. module: account_easy_reconcile
-#: code:addons/account_easy_reconcile/easy_reconcile_history.py:104
-#: field:easy.reconcile.history,reconcile_partial_ids:0
-#, python-format
-msgid "Partial Reconciliations"
-msgstr "Lettrages partiels"
+#: help:account.easy.reconcile,message_last_post:0
+msgid "Date of the last message posted on the record."
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_tree
+msgid "Display items partially reconciled on the last run"
+msgstr "Afficher les entrées partiellement lettrées au dernier lettrage"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_tree
+msgid "Display items reconciled on the last run"
+msgstr "Voir les entrées lettrées au dernier lettrage"
+
+#. module: account_easy_reconcile
+#: model:ir.actions.act_window,name:account_easy_reconcile.action_account_easy_reconcile
+#: model:ir.ui.menu,name:account_easy_reconcile.menu_easy_reconcile
+msgid "Easy Automatic Reconcile"
+msgstr "Lettrage automatisé"
+
+#. module: account_easy_reconcile
+#: model:ir.actions.act_window,name:account_easy_reconcile.action_easy_reconcile_history
+msgid "Easy Automatic Reconcile History"
+msgstr "Lettrage automatisé"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,filter:0
+#: field:easy.reconcile.base,filter:0 field:easy.reconcile.options,filter:0
+#: field:easy.reconcile.simple,filter:0
+#: field:easy.reconcile.simple.name,filter:0
+#: field:easy.reconcile.simple.partner,filter:0
+#: field:easy.reconcile.simple.reference,filter:0
+msgid "Filter"
+msgstr "Filtre"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,message_follower_ids:0
+msgid "Followers"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,income_exchange_account_id:0
+#: field:easy.reconcile.base,income_exchange_account_id:0
+#: field:easy.reconcile.options,income_exchange_account_id:0
+#: field:easy.reconcile.simple,income_exchange_account_id:0
+#: field:easy.reconcile.simple.name,income_exchange_account_id:0
+#: field:easy.reconcile.simple.partner,income_exchange_account_id:0
+#: field:easy.reconcile.simple.reference,income_exchange_account_id:0
+msgid "Gain Exchange Rate Account"
+msgstr "Compte de gain de change"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+msgid "Go to partial reconciled items"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_form
+#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_tree
+msgid "Go to partially reconciled items"
+msgstr "Voir les entrées partiellement lettrées"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_form
+#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_tree
+msgid "Go to reconciled items"
+msgstr "Voir les entrées lettrées"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+msgid "Go to unreconciled items"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
+msgid "Group By..."
+msgstr "Grouper par..."
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+#: field:account.easy.reconcile,history_ids:0
+msgid "History"
+msgstr "Historique"
+
+#. module: account_easy_reconcile
+#: model:ir.actions.act_window,name:account_easy_reconcile.act_easy_reconcile_to_history
+msgid "History Details"
+msgstr "Détails de l'historique"
+
+#. module: account_easy_reconcile
+#: help:account.easy.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_easy_reconcile
+#: field:res.company,reconciliation_commit_every:0
+msgid "How often to commit when performing automatic reconciliation."
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,id:0 field:account.easy.reconcile.method,id:0
+#: field:easy.reconcile.base,id:0 field:easy.reconcile.history,id:0
+#: field:easy.reconcile.options,id:0 field:easy.reconcile.simple,id:0
+#: field:easy.reconcile.simple.name,id:0
+#: field:easy.reconcile.simple.partner,id:0
+#: field:easy.reconcile.simple.reference,id:0
+msgid "ID"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: help:account.easy.reconcile,message_unread:0
+msgid "If checked new messages require your attention."
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+msgid "Information"
+msgstr "Information"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,message_is_follower:0
+msgid "Is a Follower"
+msgstr ""
#. module: account_easy_reconcile
#: field:account.easy.reconcile.method,journal_id:0
@@ -419,14 +306,34 @@ msgid "Journal"
msgstr "Journal"
#. module: account_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_reference
-msgid "easy.reconcile.simple.reference"
-msgstr "easy.reconcile.simple.reference"
+#: field:account.easy.reconcile,message_last_post:0
+msgid "Last Message Date"
+msgstr ""
#. module: account_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile
-msgid "account easy reconcile"
-msgstr "Lettrage automatisé"
+#: field:account.easy.reconcile,write_uid:0
+#: field:account.easy.reconcile.method,write_uid:0
+#: field:easy.reconcile.history,write_uid:0
+#: field:easy.reconcile.simple.name,write_uid:0
+#: field:easy.reconcile.simple.partner,write_uid:0
+#: field:easy.reconcile.simple.reference,write_uid:0
+msgid "Last Updated by"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,write_date:0
+#: field:account.easy.reconcile.method,write_date:0
+#: field:easy.reconcile.history,write_date:0
+#: field:easy.reconcile.simple.name,write_date:0
+#: field:easy.reconcile.simple.partner,write_date:0
+#: field:easy.reconcile.simple.reference,write_date:0
+msgid "Last Updated on"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: help:res.company,reconciliation_commit_every:0
+msgid "Leave zero to commit only at the end of the process."
+msgstr ""
#. module: account_easy_reconcile
#: field:account.easy.reconcile.method,expense_exchange_account_id:0
@@ -440,12 +347,220 @@ msgid "Loss Exchange Rate Account"
msgstr "Compte de perte de change"
#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,income_exchange_account_id:0
-#: field:easy.reconcile.base,income_exchange_account_id:0
-#: field:easy.reconcile.options,income_exchange_account_id:0
-#: field:easy.reconcile.simple,income_exchange_account_id:0
-#: field:easy.reconcile.simple.name,income_exchange_account_id:0
-#: field:easy.reconcile.simple.partner,income_exchange_account_id:0
-#: field:easy.reconcile.simple.reference,income_exchange_account_id:0
-msgid "Gain Exchange Rate Account"
-msgstr "Compte de gain de change"
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_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_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_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_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_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_easy_reconcile
+#: field:account.easy.reconcile,message_ids:0
+msgid "Messages"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: help:account.easy.reconcile,message_ids:0
+msgid "Messages and communication history"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,reconcile_method:0
+msgid "Method"
+msgstr "Méthode"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,name:0
+msgid "Name"
+msgstr "Nom"
+
+#. module: account_easy_reconcile
+#: view:account.config.settings:account_easy_reconcile.view_account_config
+msgid "Options"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: code:addons/account_easy_reconcile/easy_reconcile_history.py:104
+#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_form
+#: field:easy.reconcile.history,reconcile_ids:0
+#: field:easy.reconcile.history,reconcile_partial_ids:0
+#, python-format
+msgid "Partial Reconciliations"
+msgstr "Lettrages partiels"
+
+#. module: account_easy_reconcile
+#: code:addons/account_easy_reconcile/easy_reconcile.py:334
+#, python-format
+msgid "Partial reconciled items"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+msgid "Profile Information"
+msgstr "Information sur le profil"
+
+#. module: account_easy_reconcile
+#: field:easy.reconcile.history,easy_reconcile_id:0
+msgid "Reconcile Profile"
+msgstr "Profil de réconciliation"
+
+#. module: account_easy_reconcile
+#: view:account.config.settings:account_easy_reconcile.view_account_config
+msgid "Reconciliation"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
+msgid "Reconciliation Profile"
+msgstr "Profil de réconciliation"
+
+#. module: account_easy_reconcile
+#: code:addons/account_easy_reconcile/easy_reconcile_history.py:100
+#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_form
+#, python-format
+msgid "Reconciliations"
+msgstr "Lettrages"
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
+msgid "Reconciliations of last 7 days"
+msgstr "Lettrages des 7 derniers jours"
+
+#. module: account_easy_reconcile
+#: field:easy.reconcile.base,partner_ids:0
+#: field:easy.reconcile.simple,partner_ids:0
+#: field:easy.reconcile.simple.name,partner_ids:0
+#: field:easy.reconcile.simple.partner,partner_ids:0
+#: field:easy.reconcile.simple.reference,partner_ids:0
+msgid "Restrict on partners"
+msgstr "Filtrer sur des partenaires"
+
+#. module: account_easy_reconcile
+#: field:easy.reconcile.history,date:0
+msgid "Run date"
+msgstr "Date de lancement"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,sequence:0
+msgid "Sequence"
+msgstr "Séquence"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+msgid "Simple. Amount and Name"
+msgstr "Simple. Montant et description"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+msgid "Simple. Amount and Partner"
+msgstr "Simple. Montant et partenaire"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+msgid "Simple. Amount and Reference"
+msgstr "Simple. Montant et référence"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_tree
+msgid "Start Auto Reconcilation"
+msgstr "Lancer le lettrage automatisé"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+msgid "Start Auto Reconciliation"
+msgstr "Lancer le lettrage automatisé"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,message_summary:0
+msgid "Summary"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,task_id:0
+msgid "Task"
+msgstr "Tâche"
+
+#. module: account_easy_reconcile
+#: help:account.easy.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_easy_reconcile
+#: code:addons/account_easy_reconcile/easy_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_easy_reconcile
+#: code:addons/account_easy_reconcile/easy_reconcile.py:269
+#, python-format
+msgid "There was an error during reconciliation : %s"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
+msgid "Today"
+msgstr "Aujourd'hui"
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
+msgid "Todays' Reconcilations"
+msgstr "Lettrages du jour"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,name:0
+msgid "Type"
+msgstr "Type"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,message_unread:0
+msgid "Unread Messages"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: code:addons/account_easy_reconcile/easy_reconcile.py:321
+#, python-format
+msgid "Unreconciled items"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,write_off:0
+#: field:easy.reconcile.base,write_off:0
+#: field:easy.reconcile.options,write_off:0
+#: field:easy.reconcile.simple,write_off:0
+#: field:easy.reconcile.simple.name,write_off:0
+#: field:easy.reconcile.simple.partner,write_off:0
+#: field:easy.reconcile.simple.reference,write_off:0
+msgid "Write off allowed"
+msgstr "Écart autorisé"
+
+#. module: account_easy_reconcile
+#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile
+msgid "account easy reconcile"
+msgstr "Lettrage automatisé"
+
+#. module: account_easy_reconcile
+#: view:account.config.settings:account_easy_reconcile.view_account_config
+msgid "eInvoicing & Payments"
+msgstr ""
+
+#. module: account_easy_reconcile
+#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile_method
+msgid "reconcile method for account_easy_reconcile"
+msgstr "Méthode de lettrage"
diff --git a/account_easy_reconcile/i18n/sl.po b/account_easy_reconcile/i18n/sl.po
new file mode 100644
index 00000000..cc6104e0
--- /dev/null
+++ b/account_easy_reconcile/i18n/sl.po
@@ -0,0 +1,567 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * account_easy_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_easy_reconcile
+#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
+msgid "7 Days"
+msgstr "7 dni"
+
+#. module: account_easy_reconcile
+#: model:ir.actions.act_window,help:account_easy_reconcile.action_account_easy_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_easy_reconcile
+#: field:account.easy.reconcile,account:0
+#: field:easy.reconcile.base,account_id:0
+#: field:easy.reconcile.simple,account_id:0
+#: field:easy.reconcile.simple.name,account_id:0
+#: field:easy.reconcile.simple.partner,account_id:0
+#: field:easy.reconcile.simple.reference,account_id:0
+msgid "Account"
+msgstr "Konto"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,account_lost_id:0
+#: field:easy.reconcile.base,account_lost_id:0
+#: field:easy.reconcile.options,account_lost_id:0
+#: field:easy.reconcile.simple,account_lost_id:0
+#: field:easy.reconcile.simple.name,account_lost_id:0
+#: field:easy.reconcile.simple.partner,account_lost_id:0
+#: field:easy.reconcile.simple.reference,account_lost_id:0
+msgid "Account Lost"
+msgstr "Konto izgube"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,account_profit_id:0
+#: field:easy.reconcile.base,account_profit_id:0
+#: field:easy.reconcile.options,account_profit_id:0
+#: field:easy.reconcile.simple,account_profit_id:0
+#: field:easy.reconcile.simple.name,account_profit_id:0
+#: field:easy.reconcile.simple.partner,account_profit_id:0
+#: field:easy.reconcile.simple.reference,account_profit_id:0
+msgid "Account Profit"
+msgstr "Konto dobička"
+
+#. module: account_easy_reconcile
+#: help:account.easy.reconcile.method,analytic_account_id:0
+#: help:easy.reconcile.base,analytic_account_id:0
+#: help:easy.reconcile.options,analytic_account_id:0
+#: help:easy.reconcile.simple,analytic_account_id:0
+#: help:easy.reconcile.simple.name,analytic_account_id:0
+#: help:easy.reconcile.simple.partner,analytic_account_id:0
+#: help:easy.reconcile.simple.reference,analytic_account_id:0
+msgid "Analytic account for the write-off"
+msgstr "Konto odpisov"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,analytic_account_id:0
+#: field:easy.reconcile.base,analytic_account_id:0
+#: field:easy.reconcile.options,analytic_account_id:0
+#: field:easy.reconcile.simple,analytic_account_id:0
+#: field:easy.reconcile.simple.name,analytic_account_id:0
+#: field:easy.reconcile.simple.partner,analytic_account_id:0
+#: field:easy.reconcile.simple.reference,analytic_account_id:0
+msgid "Analytic_account"
+msgstr "Analitični konto"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_tree
+msgid "Automatic Easy Reconcile"
+msgstr "Samodejno preprosto usklajevanje"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_form
+#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_tree
+#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
+msgid "Automatic Easy Reconcile History"
+msgstr "Zgodovina samodejnih preprostih usklajevanj"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile.method:account_easy_reconcile.account_easy_reconcile_method_form
+#: view:account.easy.reconcile.method:account_easy_reconcile.account_easy_reconcile_method_tree
+msgid "Automatic Easy Reconcile Method"
+msgstr "Metoda samodejne preproste uskladitve"
+
+#. module: account_easy_reconcile
+#: model:ir.model,name:account_easy_reconcile.model_res_company
+msgid "Companies"
+msgstr "Družbe"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,company_id:0
+#: field:account.easy.reconcile.method,company_id:0
+#: field:easy.reconcile.history,company_id:0
+msgid "Company"
+msgstr "Družba"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+msgid "Configuration"
+msgstr "Nastavitve"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,create_uid:0
+#: field:account.easy.reconcile.method,create_uid:0
+#: field:easy.reconcile.history,create_uid:0
+#: field:easy.reconcile.simple.name,create_uid:0
+#: field:easy.reconcile.simple.partner,create_uid:0
+#: field:easy.reconcile.simple.reference,create_uid:0
+msgid "Created by"
+msgstr "Ustvaril"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,create_date:0
+#: field:account.easy.reconcile.method,create_date:0
+#: field:easy.reconcile.history,create_date:0
+#: field:easy.reconcile.simple.name,create_date:0
+#: field:easy.reconcile.simple.partner,create_date:0
+#: field:easy.reconcile.simple.reference,create_date:0
+msgid "Created on"
+msgstr "Ustvarjeno"
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
+msgid "Date"
+msgstr "Datum"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,date_base_on:0
+#: field:easy.reconcile.base,date_base_on:0
+#: field:easy.reconcile.options,date_base_on:0
+#: field:easy.reconcile.simple,date_base_on:0
+#: field:easy.reconcile.simple.name,date_base_on:0
+#: field:easy.reconcile.simple.partner,date_base_on:0
+#: field:easy.reconcile.simple.reference,date_base_on:0
+msgid "Date of reconciliation"
+msgstr "Datum uskladitve"
+
+#. module: account_easy_reconcile
+#: help:account.easy.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_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_tree
+msgid "Display items partially reconciled on the last run"
+msgstr "Prikaz delno usklajenih postavk po zadnjem zagonu"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_tree
+msgid "Display items reconciled on the last run"
+msgstr "Prikaz usklajenih postavk po zadnjem zagonu"
+
+#. module: account_easy_reconcile
+#: model:ir.actions.act_window,name:account_easy_reconcile.action_account_easy_reconcile
+#: model:ir.ui.menu,name:account_easy_reconcile.menu_easy_reconcile
+msgid "Easy Automatic Reconcile"
+msgstr "Samodejno preprosto usklajevanje"
+
+#. module: account_easy_reconcile
+#: model:ir.actions.act_window,name:account_easy_reconcile.action_easy_reconcile_history
+msgid "Easy Automatic Reconcile History"
+msgstr "Zgodovina samodejnih preprostih usklajevanj"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,filter:0
+#: field:easy.reconcile.base,filter:0 field:easy.reconcile.options,filter:0
+#: field:easy.reconcile.simple,filter:0
+#: field:easy.reconcile.simple.name,filter:0
+#: field:easy.reconcile.simple.partner,filter:0
+#: field:easy.reconcile.simple.reference,filter:0
+msgid "Filter"
+msgstr "Filter"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,message_follower_ids:0
+msgid "Followers"
+msgstr "Sledilci"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,income_exchange_account_id:0
+#: field:easy.reconcile.base,income_exchange_account_id:0
+#: field:easy.reconcile.options,income_exchange_account_id:0
+#: field:easy.reconcile.simple,income_exchange_account_id:0
+#: field:easy.reconcile.simple.name,income_exchange_account_id:0
+#: field:easy.reconcile.simple.partner,income_exchange_account_id:0
+#: field:easy.reconcile.simple.reference,income_exchange_account_id:0
+msgid "Gain Exchange Rate Account"
+msgstr "Konto menjalnega tečaja dobička"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+msgid "Go to partial reconciled items"
+msgstr "Pojdi na delno usklajene postavke"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_form
+#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_tree
+msgid "Go to partially reconciled items"
+msgstr "Pojdi na delno usklajene postavke"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_form
+#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_tree
+msgid "Go to reconciled items"
+msgstr "Pojdi na usklajene postavke"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+msgid "Go to unreconciled items"
+msgstr "Pojdi na neusklajene postavke"
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
+msgid "Group By..."
+msgstr "Združi po..."
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+#: field:account.easy.reconcile,history_ids:0
+msgid "History"
+msgstr "Zgodovina"
+
+#. module: account_easy_reconcile
+#: model:ir.actions.act_window,name:account_easy_reconcile.act_easy_reconcile_to_history
+msgid "History Details"
+msgstr "Podrobnosti o zgodovini"
+
+#. module: account_easy_reconcile
+#: help:account.easy.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_easy_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_easy_reconcile
+#: field:account.easy.reconcile,id:0 field:account.easy.reconcile.method,id:0
+#: field:easy.reconcile.base,id:0 field:easy.reconcile.history,id:0
+#: field:easy.reconcile.options,id:0 field:easy.reconcile.simple,id:0
+#: field:easy.reconcile.simple.name,id:0
+#: field:easy.reconcile.simple.partner,id:0
+#: field:easy.reconcile.simple.reference,id:0
+msgid "ID"
+msgstr "ID"
+
+#. module: account_easy_reconcile
+#: help:account.easy.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_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+msgid "Information"
+msgstr "Informacije"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,message_is_follower:0
+msgid "Is a Follower"
+msgstr "Je sledilec"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,journal_id:0
+#: field:easy.reconcile.base,journal_id:0
+#: field:easy.reconcile.options,journal_id:0
+#: field:easy.reconcile.simple,journal_id:0
+#: field:easy.reconcile.simple.name,journal_id:0
+#: field:easy.reconcile.simple.partner,journal_id:0
+#: field:easy.reconcile.simple.reference,journal_id:0
+msgid "Journal"
+msgstr "Dnevnik"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,message_last_post:0
+msgid "Last Message Date"
+msgstr "Datum zadnjega sporočila"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,write_uid:0
+#: field:account.easy.reconcile.method,write_uid:0
+#: field:easy.reconcile.history,write_uid:0
+#: field:easy.reconcile.simple.name,write_uid:0
+#: field:easy.reconcile.simple.partner,write_uid:0
+#: field:easy.reconcile.simple.reference,write_uid:0
+msgid "Last Updated by"
+msgstr "Zadnji posodobil"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,write_date:0
+#: field:account.easy.reconcile.method,write_date:0
+#: field:easy.reconcile.history,write_date:0
+#: field:easy.reconcile.simple.name,write_date:0
+#: field:easy.reconcile.simple.partner,write_date:0
+#: field:easy.reconcile.simple.reference,write_date:0
+msgid "Last Updated on"
+msgstr "Zadnjič posodobljeno"
+
+#. module: account_easy_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_easy_reconcile
+#: field:account.easy.reconcile.method,expense_exchange_account_id:0
+#: field:easy.reconcile.base,expense_exchange_account_id:0
+#: field:easy.reconcile.options,expense_exchange_account_id:0
+#: field:easy.reconcile.simple,expense_exchange_account_id:0
+#: field:easy.reconcile.simple.name,expense_exchange_account_id:0
+#: field:easy.reconcile.simple.partner,expense_exchange_account_id:0
+#: field:easy.reconcile.simple.reference,expense_exchange_account_id:0
+msgid "Loss Exchange Rate Account"
+msgstr "Konto menjalnega tečaja izgube"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_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_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_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_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_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_easy_reconcile
+#: field:account.easy.reconcile,message_ids:0
+msgid "Messages"
+msgstr "Sporočila"
+
+#. module: account_easy_reconcile
+#: help:account.easy.reconcile,message_ids:0
+msgid "Messages and communication history"
+msgstr "Kronologija sporočil in komunikacij"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,reconcile_method:0
+msgid "Method"
+msgstr "Metoda"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,name:0
+msgid "Name"
+msgstr "Naziv"
+
+#. module: account_easy_reconcile
+#: view:account.config.settings:account_easy_reconcile.view_account_config
+msgid "Options"
+msgstr "Opcije"
+
+#. module: account_easy_reconcile
+#: code:addons/account_easy_reconcile/easy_reconcile_history.py:104
+#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_form
+#: field:easy.reconcile.history,reconcile_ids:0
+#: field:easy.reconcile.history,reconcile_partial_ids:0
+#, python-format
+msgid "Partial Reconciliations"
+msgstr "Delne uskladitve"
+
+#. module: account_easy_reconcile
+#: code:addons/account_easy_reconcile/easy_reconcile.py:334
+#, python-format
+msgid "Partial reconciled items"
+msgstr "Delno usklajene postavke"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+msgid "Profile Information"
+msgstr "Podatki o profilu"
+
+#. module: account_easy_reconcile
+#: field:easy.reconcile.history,easy_reconcile_id:0
+msgid "Reconcile Profile"
+msgstr "Usklajevalni profil"
+
+#. module: account_easy_reconcile
+#: view:account.config.settings:account_easy_reconcile.view_account_config
+msgid "Reconciliation"
+msgstr "Uskladitev"
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
+msgid "Reconciliation Profile"
+msgstr "Usklajevalni profil"
+
+#. module: account_easy_reconcile
+#: code:addons/account_easy_reconcile/easy_reconcile_history.py:100
+#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_form
+#, python-format
+msgid "Reconciliations"
+msgstr "Uskladitve"
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
+msgid "Reconciliations of last 7 days"
+msgstr "Uskladitve v zadnjih 7 dneh"
+
+#. module: account_easy_reconcile
+#: field:easy.reconcile.base,partner_ids:0
+#: field:easy.reconcile.simple,partner_ids:0
+#: field:easy.reconcile.simple.name,partner_ids:0
+#: field:easy.reconcile.simple.partner,partner_ids:0
+#: field:easy.reconcile.simple.reference,partner_ids:0
+msgid "Restrict on partners"
+msgstr "Omejitev na partnerjih"
+
+#. module: account_easy_reconcile
+#: field:easy.reconcile.history,date:0
+msgid "Run date"
+msgstr "Datum zagona"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,sequence:0
+msgid "Sequence"
+msgstr "Zaporedje"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+msgid "Simple. Amount and Name"
+msgstr "Preprosto. Znesek in naziv"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+msgid "Simple. Amount and Partner"
+msgstr "Preprosto. Znesek in partner"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+msgid "Simple. Amount and Reference"
+msgstr "Preprosto. Znesek in sklic"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_tree
+msgid "Start Auto Reconcilation"
+msgstr "Zagon samodejnega usklajevanja"
+
+#. module: account_easy_reconcile
+#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
+msgid "Start Auto Reconciliation"
+msgstr "Zagon samodejnega usklajevanja"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,message_summary:0
+msgid "Summary"
+msgstr "Povzetek"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,task_id:0
+msgid "Task"
+msgstr "Opravilo"
+
+#. module: account_easy_reconcile
+#: help:account.easy.reconcile.method,sequence:0
+msgid "The sequence field is used to order the reconcile method"
+msgstr "Polje zaporedja za razporejanje metod usklajevanja"
+
+#. module: account_easy_reconcile
+#: code:addons/account_easy_reconcile/easy_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_easy_reconcile
+#: code:addons/account_easy_reconcile/easy_reconcile.py:269
+#, python-format
+msgid "There was an error during reconciliation : %s"
+msgstr "Napaka med usklajevanjem: %s"
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
+msgid "Today"
+msgstr "Danes"
+
+#. module: account_easy_reconcile
+#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
+msgid "Todays' Reconcilations"
+msgstr "Današnja usklajevanja"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,name:0
+msgid "Type"
+msgstr "Tip"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile,message_unread:0
+msgid "Unread Messages"
+msgstr "Neprebrana sporočila"
+
+#. module: account_easy_reconcile
+#: code:addons/account_easy_reconcile/easy_reconcile.py:321
+#, python-format
+msgid "Unreconciled items"
+msgstr "Neusklajene postavke"
+
+#. module: account_easy_reconcile
+#: field:account.easy.reconcile.method,write_off:0
+#: field:easy.reconcile.base,write_off:0
+#: field:easy.reconcile.options,write_off:0
+#: field:easy.reconcile.simple,write_off:0
+#: field:easy.reconcile.simple.name,write_off:0
+#: field:easy.reconcile.simple.partner,write_off:0
+#: field:easy.reconcile.simple.reference,write_off:0
+msgid "Write off allowed"
+msgstr "Dovoljen odpis"
+
+#. module: account_easy_reconcile
+#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile
+msgid "account easy reconcile"
+msgstr "preprosto usklajevanje konta"
+
+#. module: account_easy_reconcile
+#: view:account.config.settings:account_easy_reconcile.view_account_config
+msgid "eInvoicing & Payments"
+msgstr "Obračun in plačila"
+
+#. module: account_easy_reconcile
+#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile_method
+msgid "reconcile method for account_easy_reconcile"
+msgstr "metoda usklajevanja za preprosto usklajevanje konta"
From 69bcb2a995945a4325768c639706c2c58ee483e3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Bidoul?=
Date: Tue, 13 Oct 2015 16:29:29 +0200
Subject: [PATCH 42/52] [MOV] move addons out of __unported__ (they remain not
installable)
---
account_advanced_reconcile/__init__.py | 25 ++
account_advanced_reconcile/__openerp__.py | 85 ++++++
.../advanced_reconciliation.py | 118 +++++++
.../base_advanced_reconciliation.py | 287 ++++++++++++++++++
account_advanced_reconcile/easy_reconcile.py | 36 +++
.../easy_reconcile_view.xml | 19 ++
.../i18n/account_advanced_reconcile.pot | 90 ++++++
account_advanced_reconcile/i18n/es.po | 98 ++++++
account_advanced_reconcile/i18n/fr.po | 98 ++++++
account_advanced_reconcile/res_config.py | 59 ++++
.../res_config_view.xml | 24 ++
11 files changed, 939 insertions(+)
create mode 100644 account_advanced_reconcile/__init__.py
create mode 100644 account_advanced_reconcile/__openerp__.py
create mode 100644 account_advanced_reconcile/advanced_reconciliation.py
create mode 100644 account_advanced_reconcile/base_advanced_reconciliation.py
create mode 100644 account_advanced_reconcile/easy_reconcile.py
create mode 100644 account_advanced_reconcile/easy_reconcile_view.xml
create mode 100644 account_advanced_reconcile/i18n/account_advanced_reconcile.pot
create mode 100644 account_advanced_reconcile/i18n/es.po
create mode 100644 account_advanced_reconcile/i18n/fr.po
create mode 100644 account_advanced_reconcile/res_config.py
create mode 100644 account_advanced_reconcile/res_config_view.xml
diff --git a/account_advanced_reconcile/__init__.py b/account_advanced_reconcile/__init__.py
new file mode 100644
index 00000000..e1a57902
--- /dev/null
+++ b/account_advanced_reconcile/__init__.py
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Author: Guewen Baconnier
+# Contributor: Leonardo Pistone
+# Copyright 2012-2014 Camptocamp SA
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+from . import easy_reconcile
+from . import base_advanced_reconciliation
+from . import advanced_reconciliation
diff --git a/account_advanced_reconcile/__openerp__.py b/account_advanced_reconcile/__openerp__.py
new file mode 100644
index 00000000..ffe335dc
--- /dev/null
+++ b/account_advanced_reconcile/__openerp__.py
@@ -0,0 +1,85 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Author: Guewen Baconnier
+# Contributor: Leonardo Pistone
+# Copyright 2012-2014 Camptocamp SA
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+{'name': "Advanced Reconcile",
+ 'version': '1.0',
+ 'author': "Camptocamp,Odoo Community Association (OCA)",
+ 'maintainer': 'Camptocamp',
+ 'category': 'Finance',
+ 'complexity': 'normal',
+ 'depends': ['account_easy_reconcile',
+ ],
+ 'description': """
+Advanced reconciliation methods for the module account_easy_reconcile.
+
+In addition to the features implemented in account_easy_reconcile, which are:
+ - 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 reconcilation runs with an history
+
+It implements a basis to created advanced reconciliation methods in a few lines
+of code.
+
+Typically, such a method can be:
+ - Reconcile Journal items if the partner and the ref are equal
+ - Reconcile Journal items if the partner is equal and the ref
+ is the same than ref or name
+ - Reconcile Journal items if the partner is equal and the ref
+ match with a pattern
+
+And they allows:
+ - Reconciliations with multiple credit / multiple debit lines
+ - Partial reconciliations
+ - Write-off amount as well
+
+A method is already implemented in this module, it matches on items:
+ - Partner
+ - Ref on credit move lines should be case insensitive equals to the ref or
+ the name of the debit move line
+
+The base class to find the reconciliations is built to be as efficient as
+possible.
+
+So basically, if you have an invoice with 3 payments (one per month), the first
+month, it will partial reconcile the debit move line with the first payment,
+the second month, it will partial reconcile the debit move line with 2 first
+payments, the third month, it will make the full reconciliation.
+
+This module is perfectly adapted for E-Commerce business where a big volume of
+move lines and so, reconciliations, are involved and payments often come from
+many offices.
+
+ """,
+ 'website': 'http://www.camptocamp.com',
+ 'data': ['easy_reconcile_view.xml',
+ ],
+ 'test': [],
+ 'images': [],
+ 'installable': False,
+ 'auto_install': False,
+ 'license': 'AGPL-3',
+ 'application': True,
+ }
diff --git a/account_advanced_reconcile/advanced_reconciliation.py b/account_advanced_reconcile/advanced_reconciliation.py
new file mode 100644
index 00000000..5ac292c1
--- /dev/null
+++ b/account_advanced_reconcile/advanced_reconciliation.py
@@ -0,0 +1,118 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Author: Guewen Baconnier
+# Copyright 2012 Camptocamp SA
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+from openerp.osv import orm
+
+
+class easy_reconcile_advanced_ref(orm.TransientModel):
+
+ _name = 'easy.reconcile.advanced.ref'
+ _inherit = 'easy.reconcile.advanced'
+
+ def _skip_line(self, cr, uid, rec, move_line, context=None):
+ """
+ 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'))
+
+ def _matchers(self, cr, uid, rec, move_line, context=None):
+ """
+ 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()))
+
+ def _opposite_matchers(self, cr, uid, rec, move_line, context=None):
+ """
+ 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_advanced_reconcile/base_advanced_reconciliation.py b/account_advanced_reconcile/base_advanced_reconciliation.py
new file mode 100644
index 00000000..a9fe439c
--- /dev/null
+++ b/account_advanced_reconcile/base_advanced_reconciliation.py
@@ -0,0 +1,287 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Author: Guewen Baconnier
+# Contributor: Leonardo Pistone
+# Copyright 2012-2014 Camptocamp SA
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+import logging
+
+from itertools import product
+from openerp.osv import orm
+from openerp.tools.translate import _
+
+_logger = logging.getLogger(__name__)
+
+
+class easy_reconcile_advanced(orm.AbstractModel):
+ _name = 'easy.reconcile.advanced'
+ _inherit = 'easy.reconcile.base'
+
+ def _query_debit(self, cr, uid, rec, context=None):
+ """Select all move (debit>0) as candidate. """
+ select = self._select(rec)
+ sql_from = self._from(rec)
+ where, params = self._where(rec)
+ where += " AND account_move_line.debit > 0 "
+ where2, params2 = self._get_filter(cr, uid, rec, context=context)
+ query = ' '.join((select, sql_from, where, where2))
+ cr.execute(query, params + params2)
+ return cr.dictfetchall()
+
+ def _query_credit(self, cr, uid, rec, context=None):
+ """Select all move (credit>0) as candidate. """
+ select = self._select(rec)
+ sql_from = self._from(rec)
+ where, params = self._where(rec)
+ where += " AND account_move_line.credit > 0 "
+ where2, params2 = self._get_filter(cr, uid, rec, context=context)
+ query = ' '.join((select, sql_from, where, where2))
+ cr.execute(query, params + params2)
+ return cr.dictfetchall()
+
+ def _matchers(self, cr, uid, rec, move_line, context=None):
+ """
+ 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
+
+ def _opposite_matchers(self, cr, uid, rec, move_line, context=None):
+ """
+ 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 easy_reconcile_advanced._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 easy_reconcile_advanced._compare_matcher_values(mkey, mvalue,
+ omvalue)
+
+ def _compare_opposite(self, cr, uid, rec, move_line, opposite_move_line,
+ matchers, context=None):
+ """ 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(cr, uid, rec,
+ opposite_move_line,
+ context=context)
+ 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
+
+ def _search_opposites(self, cr, uid, rec, move_line, opposite_move_lines,
+ context=None):
+ """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(cr, uid, rec, move_line, context=context)
+ return [op for op in opposite_move_lines if
+ self._compare_opposite(
+ cr, uid, rec, move_line, op, matchers, context=context)]
+
+ def _action_rec(self, cr, uid, rec, context=None):
+ credit_lines = self._query_credit(cr, uid, rec, context=context)
+ debit_lines = self._query_debit(cr, uid, rec, context=context)
+ result = self._rec_auto_lines_advanced(
+ cr, uid, rec, credit_lines, debit_lines, context=context)
+ return result
+
+ def _skip_line(self, cr, uid, rec, move_line, context=None):
+ """
+ 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
+
+ def _rec_auto_lines_advanced(self, cr, uid, rec, credit_lines, debit_lines,
+ context=None):
+ """ Advanced reconciliation main loop """
+ reconciled_ids = []
+ partial_reconciled_ids = []
+ reconcile_groups = []
+ _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(cr, uid, rec, credit_line, context=context):
+ continue
+ opposite_lines = self._search_opposites(
+ cr, uid, rec, credit_line, debit_lines, context=context)
+ 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(
+ cr, uid, rec, group_lines, allow_partial=True, context=context)
+ if reconciled and full:
+ reconciled_ids += reconcile_group_ids
+ elif reconciled:
+ partial_reconciled_ids += reconcile_group_ids
+
+ if (context['commit_every'] and
+ group_count % context['commit_every'] == 0):
+ cr.commit()
+ _logger.info("Commit the reconciliations after %d groups",
+ group_count)
+ _logger.info("Reconciliation is over")
+ return reconciled_ids, partial_reconciled_ids
diff --git a/account_advanced_reconcile/easy_reconcile.py b/account_advanced_reconcile/easy_reconcile.py
new file mode 100644
index 00000000..5506917b
--- /dev/null
+++ b/account_advanced_reconcile/easy_reconcile.py
@@ -0,0 +1,36 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Author: Guewen Baconnier
+# Copyright 2012 Camptocamp SA
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+from openerp.osv import orm
+
+
+class account_easy_reconcile_method(orm.Model):
+
+ _inherit = 'account.easy.reconcile.method'
+
+ def _get_all_rec_method(self, cr, uid, context=None):
+ methods = super(account_easy_reconcile_method, self).\
+ _get_all_rec_method(cr, uid, context=context)
+ methods += [
+ ('easy.reconcile.advanced.ref',
+ 'Advanced. Partner and Ref.'),
+ ]
+ return methods
diff --git a/account_advanced_reconcile/easy_reconcile_view.xml b/account_advanced_reconcile/easy_reconcile_view.xml
new file mode 100644
index 00000000..7d35927d
--- /dev/null
+++ b/account_advanced_reconcile/easy_reconcile_view.xml
@@ -0,0 +1,19 @@
+
+
+
+
+ account.easy.reconcile.form
+ account.easy.reconcile
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/account_advanced_reconcile/i18n/account_advanced_reconcile.pot b/account_advanced_reconcile/i18n/account_advanced_reconcile.pot
new file mode 100644
index 00000000..98382751
--- /dev/null
+++ b/account_advanced_reconcile/i18n/account_advanced_reconcile.pot
@@ -0,0 +1,90 @@
+# Translation of OpenERP Server.
+# This file contains the translation of the following modules:
+# * account_advanced_reconcile
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OpenERP Server 7.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-01-21 11:54+0000\n"
+"PO-Revision-Date: 2014-01-21 11:54+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_advanced_reconcile
+#: field:easy.reconcile.advanced,partner_ids:0
+#: field:easy.reconcile.advanced.ref,partner_ids:0
+msgid "Restrict on partners"
+msgstr ""
+
+#. module: account_advanced_reconcile
+#: field:easy.reconcile.advanced,account_id:0
+#: field:easy.reconcile.advanced.ref,account_id:0
+msgid "Account"
+msgstr ""
+
+#. module: account_advanced_reconcile
+#: model:ir.model,name:account_advanced_reconcile.model_account_easy_reconcile_method
+msgid "reconcile method for account_easy_reconcile"
+msgstr ""
+
+#. module: account_advanced_reconcile
+#: field:easy.reconcile.advanced,journal_id:0
+#: field:easy.reconcile.advanced.ref,journal_id:0
+msgid "Journal"
+msgstr ""
+
+#. module: account_advanced_reconcile
+#: field:easy.reconcile.advanced,account_profit_id:0
+#: field:easy.reconcile.advanced.ref,account_profit_id:0
+msgid "Account Profit"
+msgstr ""
+
+#. module: account_advanced_reconcile
+#: view:account.easy.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_advanced_reconcile
+#: field:easy.reconcile.advanced,filter:0
+#: field:easy.reconcile.advanced.ref,filter:0
+msgid "Filter"
+msgstr ""
+
+#. module: account_advanced_reconcile
+#: view:account.easy.reconcile:0
+msgid "Advanced. Partner and Ref"
+msgstr ""
+
+#. module: account_advanced_reconcile
+#: field:easy.reconcile.advanced,date_base_on:0
+#: field:easy.reconcile.advanced.ref,date_base_on:0
+msgid "Date of reconciliation"
+msgstr ""
+
+#. module: account_advanced_reconcile
+#: model:ir.model,name:account_advanced_reconcile.model_easy_reconcile_advanced
+msgid "easy.reconcile.advanced"
+msgstr ""
+
+#. module: account_advanced_reconcile
+#: field:easy.reconcile.advanced,account_lost_id:0
+#: field:easy.reconcile.advanced.ref,account_lost_id:0
+msgid "Account Lost"
+msgstr ""
+
+#. module: account_advanced_reconcile
+#: model:ir.model,name:account_advanced_reconcile.model_easy_reconcile_advanced_ref
+msgid "easy.reconcile.advanced.ref"
+msgstr ""
+
+#. module: account_advanced_reconcile
+#: field:easy.reconcile.advanced,write_off:0
+#: field:easy.reconcile.advanced.ref,write_off:0
+msgid "Write off allowed"
+msgstr ""
+
diff --git a/account_advanced_reconcile/i18n/es.po b/account_advanced_reconcile/i18n/es.po
new file mode 100644
index 00000000..cc47462f
--- /dev/null
+++ b/account_advanced_reconcile/i18n/es.po
@@ -0,0 +1,98 @@
+# Spanish translation for banking-addons
+# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
+# This file is distributed under the same license as the banking-addons package.
+# FIRST AUTHOR , 2014.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: banking-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2014-01-21 11:54+0000\n"
+"PO-Revision-Date: 2014-06-05 22:30+0000\n"
+"Last-Translator: Pedro Manuel Baeza \n"
+"Language-Team: Spanish \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2014-06-06 06:36+0000\n"
+"X-Generator: Launchpad (build 17031)\n"
+
+#. module: account_advanced_reconcile
+#: field:easy.reconcile.advanced,partner_ids:0
+#: field:easy.reconcile.advanced.ref,partner_ids:0
+msgid "Restrict on partners"
+msgstr "Restringir a las empresas"
+
+#. module: account_advanced_reconcile
+#: field:easy.reconcile.advanced,account_id:0
+#: field:easy.reconcile.advanced.ref,account_id:0
+msgid "Account"
+msgstr "Cuenta"
+
+#. module: account_advanced_reconcile
+#: model:ir.model,name:account_advanced_reconcile.model_account_easy_reconcile_method
+msgid "reconcile method for account_easy_reconcile"
+msgstr "método de conciliación para account_easy_reconcile"
+
+#. module: account_advanced_reconcile
+#: field:easy.reconcile.advanced,journal_id:0
+#: field:easy.reconcile.advanced.ref,journal_id:0
+msgid "Journal"
+msgstr "Diario"
+
+#. module: account_advanced_reconcile
+#: field:easy.reconcile.advanced,account_profit_id:0
+#: field:easy.reconcile.advanced.ref,account_profit_id:0
+msgid "Account Profit"
+msgstr "Cuenta de ganancias"
+
+#. module: account_advanced_reconcile
+#: view:account.easy.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_advanced_reconcile
+#: field:easy.reconcile.advanced,filter:0
+#: field:easy.reconcile.advanced.ref,filter:0
+msgid "Filter"
+msgstr "Filtro"
+
+#. module: account_advanced_reconcile
+#: view:account.easy.reconcile:0
+msgid "Advanced. Partner and Ref"
+msgstr "Avanzado. Empresa y referencia"
+
+#. module: account_advanced_reconcile
+#: field:easy.reconcile.advanced,date_base_on:0
+#: field:easy.reconcile.advanced.ref,date_base_on:0
+msgid "Date of reconciliation"
+msgstr "Fecha de conciliación"
+
+#. module: account_advanced_reconcile
+#: model:ir.model,name:account_advanced_reconcile.model_easy_reconcile_advanced
+msgid "easy.reconcile.advanced"
+msgstr "easy.reconcile.advanced"
+
+#. module: account_advanced_reconcile
+#: field:easy.reconcile.advanced,account_lost_id:0
+#: field:easy.reconcile.advanced.ref,account_lost_id:0
+msgid "Account Lost"
+msgstr "Cuenta de pérdidas"
+
+#. module: account_advanced_reconcile
+#: model:ir.model,name:account_advanced_reconcile.model_easy_reconcile_advanced_ref
+msgid "easy.reconcile.advanced.ref"
+msgstr "easy.reconcile.advanced.ref"
+
+#. module: account_advanced_reconcile
+#: field:easy.reconcile.advanced,write_off:0
+#: field:easy.reconcile.advanced.ref,write_off:0
+msgid "Write off allowed"
+msgstr "Desajuste permitido"
diff --git a/account_advanced_reconcile/i18n/fr.po b/account_advanced_reconcile/i18n/fr.po
new file mode 100644
index 00000000..0c3e9eb9
--- /dev/null
+++ b/account_advanced_reconcile/i18n/fr.po
@@ -0,0 +1,98 @@
+# Translation of OpenERP Server.
+# This file contains the translation of the following modules:
+# * account_advanced_reconcile
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OpenERP Server 6.1\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2014-01-21 11:54+0000\n"
+"PO-Revision-Date: 2014-03-21 15:24+0000\n"
+"Last-Translator: Guewen Baconnier @ Camptocamp \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2014-05-22 06:49+0000\n"
+"X-Generator: Launchpad (build 17017)\n"
+"Language: \n"
+
+#. module: account_advanced_reconcile
+#: field:easy.reconcile.advanced,partner_ids:0
+#: field:easy.reconcile.advanced.ref,partner_ids:0
+msgid "Restrict on partners"
+msgstr "Restriction sur les partenaires"
+
+#. module: account_advanced_reconcile
+#: field:easy.reconcile.advanced,account_id:0
+#: field:easy.reconcile.advanced.ref,account_id:0
+msgid "Account"
+msgstr "Compte"
+
+#. module: account_advanced_reconcile
+#: model:ir.model,name:account_advanced_reconcile.model_account_easy_reconcile_method
+msgid "reconcile method for account_easy_reconcile"
+msgstr "Méthode de lettrage pour le module account_easy_reconcile"
+
+#. module: account_advanced_reconcile
+#: field:easy.reconcile.advanced,journal_id:0
+#: field:easy.reconcile.advanced.ref,journal_id:0
+msgid "Journal"
+msgstr "Journal"
+
+#. module: account_advanced_reconcile
+#: field:easy.reconcile.advanced,account_profit_id:0
+#: field:easy.reconcile.advanced.ref,account_profit_id:0
+msgid "Account Profit"
+msgstr "Compte de produit"
+
+#. module: account_advanced_reconcile
+#: view:account.easy.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_advanced_reconcile
+#: field:easy.reconcile.advanced,filter:0
+#: field:easy.reconcile.advanced.ref,filter:0
+msgid "Filter"
+msgstr "Filtre"
+
+#. module: account_advanced_reconcile
+#: view:account.easy.reconcile:0
+msgid "Advanced. Partner and Ref"
+msgstr "Avancé. Partenaire et Réf."
+
+#. module: account_advanced_reconcile
+#: field:easy.reconcile.advanced,date_base_on:0
+#: field:easy.reconcile.advanced.ref,date_base_on:0
+msgid "Date of reconciliation"
+msgstr "Date de lettrage"
+
+#. module: account_advanced_reconcile
+#: model:ir.model,name:account_advanced_reconcile.model_easy_reconcile_advanced
+msgid "easy.reconcile.advanced"
+msgstr "easy.reconcile.advanced"
+
+#. module: account_advanced_reconcile
+#: field:easy.reconcile.advanced,account_lost_id:0
+#: field:easy.reconcile.advanced.ref,account_lost_id:0
+msgid "Account Lost"
+msgstr "Compte de charge"
+
+#. module: account_advanced_reconcile
+#: model:ir.model,name:account_advanced_reconcile.model_easy_reconcile_advanced_ref
+msgid "easy.reconcile.advanced.ref"
+msgstr "easy.reconcile.advanced.ref"
+
+#. module: account_advanced_reconcile
+#: field:easy.reconcile.advanced,write_off:0
+#: field:easy.reconcile.advanced.ref,write_off:0
+msgid "Write off allowed"
+msgstr "Écart autorisé"
diff --git a/account_advanced_reconcile/res_config.py b/account_advanced_reconcile/res_config.py
new file mode 100644
index 00000000..cb827ab3
--- /dev/null
+++ b/account_advanced_reconcile/res_config.py
@@ -0,0 +1,59 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# Author: Leonardo Pistone
+# Copyright 2014 Camptocamp SA
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+from openerp.osv import orm, fields
+
+
+class AccountConfigSettings(orm.TransientModel):
+ _inherit = 'account.config.settings'
+
+ _columns = {
+ 'reconciliation_commit_every': fields.related(
+ 'company_id',
+ 'reconciliation_commit_every',
+ type='integer',
+ string='How often to commit when performing automatic '
+ 'reconciliation.',
+ help="""Leave zero to commit only at the end of the process."""),
+ }
+
+ def onchange_company_id(self, cr, uid, ids, company_id, context=None):
+ company_obj = self.pool['res.company']
+
+ result = super(AccountConfigSettings, self).onchange_company_id(
+ cr, uid, ids, company_id, context=None)
+
+ if company_id:
+ company = company_obj.browse(cr, uid, company_id, context=context)
+ result['value']['reconciliation_commit_every'] = (
+ company.reconciliation_commit_every
+ )
+ return result
+
+
+class Company(orm.Model):
+ _inherit = "res.company"
+ _columns = {
+ '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_advanced_reconcile/res_config_view.xml b/account_advanced_reconcile/res_config_view.xml
new file mode 100644
index 00000000..8badc32e
--- /dev/null
+++ b/account_advanced_reconcile/res_config_view.xml
@@ -0,0 +1,24 @@
+
+
+
+
+ account settings
+ account.config.settings
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
From d51e54dce44f7c113e774a05aae1bfb5884f9397 Mon Sep 17 00:00:00 2001
From: "Pedro M. Baeza"
Date: Wed, 14 Oct 2015 03:05:02 +0200
Subject: [PATCH 43/52] [MIG] account_easy_reconcile: Make modules
uninstallable
---
account_easy_reconcile/__openerp__.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
mode change 100755 => 100644 account_easy_reconcile/__openerp__.py
diff --git a/account_easy_reconcile/__openerp__.py b/account_easy_reconcile/__openerp__.py
old mode 100755
new mode 100644
index 886c78ce..b715f56e
--- a/account_easy_reconcile/__openerp__.py
+++ b/account_easy_reconcile/__openerp__.py
@@ -36,6 +36,6 @@
],
'license': 'AGPL-3',
"auto_install": False,
- 'installable': True,
+ 'installable': False,
}
From 8a64e30f9e0fddda4731bd533572d02478c614f9 Mon Sep 17 00:00:00 2001
From: Matthieu Dietrich
Date: Wed, 13 Apr 2016 14:12:40 +0200
Subject: [PATCH 44/52] Merge and migrate account_easy_reconcile and
account_advanced_reconcile
---
account_advanced_reconcile/__init__.py | 25 -
account_advanced_reconcile/__openerp__.py | 85 ---
account_advanced_reconcile/easy_reconcile.py | 36 --
.../easy_reconcile_view.xml | 19 -
.../i18n/account_advanced_reconcile.pot | 90 ---
account_advanced_reconcile/i18n/es.po | 98 ---
account_advanced_reconcile/i18n/fr.po | 98 ---
account_advanced_reconcile/res_config.py | 59 --
account_easy_reconcile/__init__.py | 26 -
account_easy_reconcile/__openerp__.py | 41 --
.../easy_reconcile_history.py | 139 ----
.../i18n/account_easy_reconcile.pot | 567 ----------------
account_easy_reconcile/i18n/en.po | 566 ----------------
account_easy_reconcile/i18n/es.po | 567 ----------------
account_easy_reconcile/i18n/fr.po | 566 ----------------
account_easy_reconcile/i18n/sl.po | 567 ----------------
account_easy_reconcile/res_config.py | 57 --
account_easy_reconcile/res_config_view.xml | 24 -
.../security/ir.model.access.csv | 9 -
.../test/easy_reconcile.yml | 116 ----
account_easy_reconcile/tests/__init__.py | 25 -
.../tests/test_onchange_company.py | 63 --
.../tests/test_reconcile.py | 136 ----
.../tests/test_reconcile_history.py | 78 ---
.../tests/test_scenario_reconcile.py | 298 ---------
.../README.rst | 36 +-
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 | 39 +-
.../models}/base_advanced_reconciliation.py | 201 +++---
.../models}/base_reconciliation.py | 94 +--
.../models/mass_reconcile.py | 164 ++---
.../models/mass_reconcile_history.py | 82 +++
account_mass_reconcile/models/res_config.py | 26 +
.../models}/simple_reconciliation.py | 50 +-
.../security/ir.model.access.csv | 9 +
.../security/ir_rule.xml | 18 +-
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 | 81 +--
.../views/mass_reconcile_history_view.xml | 61 +-
.../views}/res_config_view.xml | 10 +-
51 files changed, 3828 insertions(+), 4837 deletions(-)
delete mode 100644 account_advanced_reconcile/__init__.py
delete mode 100644 account_advanced_reconcile/__openerp__.py
delete mode 100644 account_advanced_reconcile/easy_reconcile.py
delete mode 100644 account_advanced_reconcile/easy_reconcile_view.xml
delete mode 100644 account_advanced_reconcile/i18n/account_advanced_reconcile.pot
delete mode 100644 account_advanced_reconcile/i18n/es.po
delete mode 100644 account_advanced_reconcile/i18n/fr.po
delete mode 100644 account_advanced_reconcile/res_config.py
delete mode 100755 account_easy_reconcile/__init__.py
delete mode 100644 account_easy_reconcile/__openerp__.py
delete mode 100644 account_easy_reconcile/easy_reconcile_history.py
delete mode 100644 account_easy_reconcile/i18n/account_easy_reconcile.pot
delete mode 100644 account_easy_reconcile/i18n/en.po
delete mode 100644 account_easy_reconcile/i18n/es.po
delete mode 100644 account_easy_reconcile/i18n/fr.po
delete mode 100644 account_easy_reconcile/i18n/sl.po
delete mode 100644 account_easy_reconcile/res_config.py
delete mode 100644 account_easy_reconcile/res_config_view.xml
delete mode 100644 account_easy_reconcile/security/ir.model.access.csv
delete mode 100644 account_easy_reconcile/test/easy_reconcile.yml
delete mode 100644 account_easy_reconcile/tests/__init__.py
delete mode 100644 account_easy_reconcile/tests/test_onchange_company.py
delete mode 100644 account_easy_reconcile/tests/test_reconcile.py
delete mode 100644 account_easy_reconcile/tests/test_reconcile_history.py
delete mode 100644 account_easy_reconcile/tests/test_scenario_reconcile.py
rename {account_easy_reconcile => account_mass_reconcile}/README.rst (67%)
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
rename {account_advanced_reconcile => account_mass_reconcile/models}/advanced_reconciliation.py (72%)
rename {account_advanced_reconcile => account_mass_reconcile/models}/base_advanced_reconciliation.py (53%)
rename {account_easy_reconcile => account_mass_reconcile/models}/base_reconciliation.py (60%)
rename account_easy_reconcile/easy_reconcile.py => account_mass_reconcile/models/mass_reconcile.py (64%)
create mode 100644 account_mass_reconcile/models/mass_reconcile_history.py
create mode 100644 account_mass_reconcile/models/res_config.py
rename {account_easy_reconcile => account_mass_reconcile/models}/simple_reconciliation.py (60%)
create mode 100644 account_mass_reconcile/security/ir.model.access.csv
rename {account_easy_reconcile => account_mass_reconcile}/security/ir_rule.xml (54%)
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
rename account_easy_reconcile/easy_reconcile.xml => account_mass_reconcile/views/mass_reconcile.xml (65%)
rename account_easy_reconcile/easy_reconcile_history_view.xml => account_mass_reconcile/views/mass_reconcile_history_view.xml (56%)
rename {account_advanced_reconcile => account_mass_reconcile/views}/res_config_view.xml (84%)
diff --git a/account_advanced_reconcile/__init__.py b/account_advanced_reconcile/__init__.py
deleted file mode 100644
index e1a57902..00000000
--- a/account_advanced_reconcile/__init__.py
+++ /dev/null
@@ -1,25 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# Author: Guewen Baconnier
-# Contributor: Leonardo Pistone
-# Copyright 2012-2014 Camptocamp SA
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-
-from . import easy_reconcile
-from . import base_advanced_reconciliation
-from . import advanced_reconciliation
diff --git a/account_advanced_reconcile/__openerp__.py b/account_advanced_reconcile/__openerp__.py
deleted file mode 100644
index ffe335dc..00000000
--- a/account_advanced_reconcile/__openerp__.py
+++ /dev/null
@@ -1,85 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# Author: Guewen Baconnier
-# Contributor: Leonardo Pistone
-# Copyright 2012-2014 Camptocamp SA
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-
-{'name': "Advanced Reconcile",
- 'version': '1.0',
- 'author': "Camptocamp,Odoo Community Association (OCA)",
- 'maintainer': 'Camptocamp',
- 'category': 'Finance',
- 'complexity': 'normal',
- 'depends': ['account_easy_reconcile',
- ],
- 'description': """
-Advanced reconciliation methods for the module account_easy_reconcile.
-
-In addition to the features implemented in account_easy_reconcile, which are:
- - 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 reconcilation runs with an history
-
-It implements a basis to created advanced reconciliation methods in a few lines
-of code.
-
-Typically, such a method can be:
- - Reconcile Journal items if the partner and the ref are equal
- - Reconcile Journal items if the partner is equal and the ref
- is the same than ref or name
- - Reconcile Journal items if the partner is equal and the ref
- match with a pattern
-
-And they allows:
- - Reconciliations with multiple credit / multiple debit lines
- - Partial reconciliations
- - Write-off amount as well
-
-A method is already implemented in this module, it matches on items:
- - Partner
- - Ref on credit move lines should be case insensitive equals to the ref or
- the name of the debit move line
-
-The base class to find the reconciliations is built to be as efficient as
-possible.
-
-So basically, if you have an invoice with 3 payments (one per month), the first
-month, it will partial reconcile the debit move line with the first payment,
-the second month, it will partial reconcile the debit move line with 2 first
-payments, the third month, it will make the full reconciliation.
-
-This module is perfectly adapted for E-Commerce business where a big volume of
-move lines and so, reconciliations, are involved and payments often come from
-many offices.
-
- """,
- 'website': 'http://www.camptocamp.com',
- 'data': ['easy_reconcile_view.xml',
- ],
- 'test': [],
- 'images': [],
- 'installable': False,
- 'auto_install': False,
- 'license': 'AGPL-3',
- 'application': True,
- }
diff --git a/account_advanced_reconcile/easy_reconcile.py b/account_advanced_reconcile/easy_reconcile.py
deleted file mode 100644
index 5506917b..00000000
--- a/account_advanced_reconcile/easy_reconcile.py
+++ /dev/null
@@ -1,36 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# Author: Guewen Baconnier
-# Copyright 2012 Camptocamp SA
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-
-from openerp.osv import orm
-
-
-class account_easy_reconcile_method(orm.Model):
-
- _inherit = 'account.easy.reconcile.method'
-
- def _get_all_rec_method(self, cr, uid, context=None):
- methods = super(account_easy_reconcile_method, self).\
- _get_all_rec_method(cr, uid, context=context)
- methods += [
- ('easy.reconcile.advanced.ref',
- 'Advanced. Partner and Ref.'),
- ]
- return methods
diff --git a/account_advanced_reconcile/easy_reconcile_view.xml b/account_advanced_reconcile/easy_reconcile_view.xml
deleted file mode 100644
index 7d35927d..00000000
--- a/account_advanced_reconcile/easy_reconcile_view.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
- account.easy.reconcile.form
- account.easy.reconcile
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/account_advanced_reconcile/i18n/account_advanced_reconcile.pot b/account_advanced_reconcile/i18n/account_advanced_reconcile.pot
deleted file mode 100644
index 98382751..00000000
--- a/account_advanced_reconcile/i18n/account_advanced_reconcile.pot
+++ /dev/null
@@ -1,90 +0,0 @@
-# Translation of OpenERP Server.
-# This file contains the translation of the following modules:
-# * account_advanced_reconcile
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: OpenERP Server 7.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-01-21 11:54+0000\n"
-"PO-Revision-Date: 2014-01-21 11:54+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_advanced_reconcile
-#: field:easy.reconcile.advanced,partner_ids:0
-#: field:easy.reconcile.advanced.ref,partner_ids:0
-msgid "Restrict on partners"
-msgstr ""
-
-#. module: account_advanced_reconcile
-#: field:easy.reconcile.advanced,account_id:0
-#: field:easy.reconcile.advanced.ref,account_id:0
-msgid "Account"
-msgstr ""
-
-#. module: account_advanced_reconcile
-#: model:ir.model,name:account_advanced_reconcile.model_account_easy_reconcile_method
-msgid "reconcile method for account_easy_reconcile"
-msgstr ""
-
-#. module: account_advanced_reconcile
-#: field:easy.reconcile.advanced,journal_id:0
-#: field:easy.reconcile.advanced.ref,journal_id:0
-msgid "Journal"
-msgstr ""
-
-#. module: account_advanced_reconcile
-#: field:easy.reconcile.advanced,account_profit_id:0
-#: field:easy.reconcile.advanced.ref,account_profit_id:0
-msgid "Account Profit"
-msgstr ""
-
-#. module: account_advanced_reconcile
-#: view:account.easy.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_advanced_reconcile
-#: field:easy.reconcile.advanced,filter:0
-#: field:easy.reconcile.advanced.ref,filter:0
-msgid "Filter"
-msgstr ""
-
-#. module: account_advanced_reconcile
-#: view:account.easy.reconcile:0
-msgid "Advanced. Partner and Ref"
-msgstr ""
-
-#. module: account_advanced_reconcile
-#: field:easy.reconcile.advanced,date_base_on:0
-#: field:easy.reconcile.advanced.ref,date_base_on:0
-msgid "Date of reconciliation"
-msgstr ""
-
-#. module: account_advanced_reconcile
-#: model:ir.model,name:account_advanced_reconcile.model_easy_reconcile_advanced
-msgid "easy.reconcile.advanced"
-msgstr ""
-
-#. module: account_advanced_reconcile
-#: field:easy.reconcile.advanced,account_lost_id:0
-#: field:easy.reconcile.advanced.ref,account_lost_id:0
-msgid "Account Lost"
-msgstr ""
-
-#. module: account_advanced_reconcile
-#: model:ir.model,name:account_advanced_reconcile.model_easy_reconcile_advanced_ref
-msgid "easy.reconcile.advanced.ref"
-msgstr ""
-
-#. module: account_advanced_reconcile
-#: field:easy.reconcile.advanced,write_off:0
-#: field:easy.reconcile.advanced.ref,write_off:0
-msgid "Write off allowed"
-msgstr ""
-
diff --git a/account_advanced_reconcile/i18n/es.po b/account_advanced_reconcile/i18n/es.po
deleted file mode 100644
index cc47462f..00000000
--- a/account_advanced_reconcile/i18n/es.po
+++ /dev/null
@@ -1,98 +0,0 @@
-# Spanish translation for banking-addons
-# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
-# This file is distributed under the same license as the banking-addons package.
-# FIRST AUTHOR , 2014.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: banking-addons\n"
-"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2014-01-21 11:54+0000\n"
-"PO-Revision-Date: 2014-06-05 22:30+0000\n"
-"Last-Translator: Pedro Manuel Baeza \n"
-"Language-Team: Spanish \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-06-06 06:36+0000\n"
-"X-Generator: Launchpad (build 17031)\n"
-
-#. module: account_advanced_reconcile
-#: field:easy.reconcile.advanced,partner_ids:0
-#: field:easy.reconcile.advanced.ref,partner_ids:0
-msgid "Restrict on partners"
-msgstr "Restringir a las empresas"
-
-#. module: account_advanced_reconcile
-#: field:easy.reconcile.advanced,account_id:0
-#: field:easy.reconcile.advanced.ref,account_id:0
-msgid "Account"
-msgstr "Cuenta"
-
-#. module: account_advanced_reconcile
-#: model:ir.model,name:account_advanced_reconcile.model_account_easy_reconcile_method
-msgid "reconcile method for account_easy_reconcile"
-msgstr "método de conciliación para account_easy_reconcile"
-
-#. module: account_advanced_reconcile
-#: field:easy.reconcile.advanced,journal_id:0
-#: field:easy.reconcile.advanced.ref,journal_id:0
-msgid "Journal"
-msgstr "Diario"
-
-#. module: account_advanced_reconcile
-#: field:easy.reconcile.advanced,account_profit_id:0
-#: field:easy.reconcile.advanced.ref,account_profit_id:0
-msgid "Account Profit"
-msgstr "Cuenta de ganancias"
-
-#. module: account_advanced_reconcile
-#: view:account.easy.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_advanced_reconcile
-#: field:easy.reconcile.advanced,filter:0
-#: field:easy.reconcile.advanced.ref,filter:0
-msgid "Filter"
-msgstr "Filtro"
-
-#. module: account_advanced_reconcile
-#: view:account.easy.reconcile:0
-msgid "Advanced. Partner and Ref"
-msgstr "Avanzado. Empresa y referencia"
-
-#. module: account_advanced_reconcile
-#: field:easy.reconcile.advanced,date_base_on:0
-#: field:easy.reconcile.advanced.ref,date_base_on:0
-msgid "Date of reconciliation"
-msgstr "Fecha de conciliación"
-
-#. module: account_advanced_reconcile
-#: model:ir.model,name:account_advanced_reconcile.model_easy_reconcile_advanced
-msgid "easy.reconcile.advanced"
-msgstr "easy.reconcile.advanced"
-
-#. module: account_advanced_reconcile
-#: field:easy.reconcile.advanced,account_lost_id:0
-#: field:easy.reconcile.advanced.ref,account_lost_id:0
-msgid "Account Lost"
-msgstr "Cuenta de pérdidas"
-
-#. module: account_advanced_reconcile
-#: model:ir.model,name:account_advanced_reconcile.model_easy_reconcile_advanced_ref
-msgid "easy.reconcile.advanced.ref"
-msgstr "easy.reconcile.advanced.ref"
-
-#. module: account_advanced_reconcile
-#: field:easy.reconcile.advanced,write_off:0
-#: field:easy.reconcile.advanced.ref,write_off:0
-msgid "Write off allowed"
-msgstr "Desajuste permitido"
diff --git a/account_advanced_reconcile/i18n/fr.po b/account_advanced_reconcile/i18n/fr.po
deleted file mode 100644
index 0c3e9eb9..00000000
--- a/account_advanced_reconcile/i18n/fr.po
+++ /dev/null
@@ -1,98 +0,0 @@
-# Translation of OpenERP Server.
-# This file contains the translation of the following modules:
-# * account_advanced_reconcile
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: OpenERP Server 6.1\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-01-21 11:54+0000\n"
-"PO-Revision-Date: 2014-03-21 15:24+0000\n"
-"Last-Translator: Guewen Baconnier @ Camptocamp \n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2014-05-22 06:49+0000\n"
-"X-Generator: Launchpad (build 17017)\n"
-"Language: \n"
-
-#. module: account_advanced_reconcile
-#: field:easy.reconcile.advanced,partner_ids:0
-#: field:easy.reconcile.advanced.ref,partner_ids:0
-msgid "Restrict on partners"
-msgstr "Restriction sur les partenaires"
-
-#. module: account_advanced_reconcile
-#: field:easy.reconcile.advanced,account_id:0
-#: field:easy.reconcile.advanced.ref,account_id:0
-msgid "Account"
-msgstr "Compte"
-
-#. module: account_advanced_reconcile
-#: model:ir.model,name:account_advanced_reconcile.model_account_easy_reconcile_method
-msgid "reconcile method for account_easy_reconcile"
-msgstr "Méthode de lettrage pour le module account_easy_reconcile"
-
-#. module: account_advanced_reconcile
-#: field:easy.reconcile.advanced,journal_id:0
-#: field:easy.reconcile.advanced.ref,journal_id:0
-msgid "Journal"
-msgstr "Journal"
-
-#. module: account_advanced_reconcile
-#: field:easy.reconcile.advanced,account_profit_id:0
-#: field:easy.reconcile.advanced.ref,account_profit_id:0
-msgid "Account Profit"
-msgstr "Compte de produit"
-
-#. module: account_advanced_reconcile
-#: view:account.easy.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_advanced_reconcile
-#: field:easy.reconcile.advanced,filter:0
-#: field:easy.reconcile.advanced.ref,filter:0
-msgid "Filter"
-msgstr "Filtre"
-
-#. module: account_advanced_reconcile
-#: view:account.easy.reconcile:0
-msgid "Advanced. Partner and Ref"
-msgstr "Avancé. Partenaire et Réf."
-
-#. module: account_advanced_reconcile
-#: field:easy.reconcile.advanced,date_base_on:0
-#: field:easy.reconcile.advanced.ref,date_base_on:0
-msgid "Date of reconciliation"
-msgstr "Date de lettrage"
-
-#. module: account_advanced_reconcile
-#: model:ir.model,name:account_advanced_reconcile.model_easy_reconcile_advanced
-msgid "easy.reconcile.advanced"
-msgstr "easy.reconcile.advanced"
-
-#. module: account_advanced_reconcile
-#: field:easy.reconcile.advanced,account_lost_id:0
-#: field:easy.reconcile.advanced.ref,account_lost_id:0
-msgid "Account Lost"
-msgstr "Compte de charge"
-
-#. module: account_advanced_reconcile
-#: model:ir.model,name:account_advanced_reconcile.model_easy_reconcile_advanced_ref
-msgid "easy.reconcile.advanced.ref"
-msgstr "easy.reconcile.advanced.ref"
-
-#. module: account_advanced_reconcile
-#: field:easy.reconcile.advanced,write_off:0
-#: field:easy.reconcile.advanced.ref,write_off:0
-msgid "Write off allowed"
-msgstr "Écart autorisé"
diff --git a/account_advanced_reconcile/res_config.py b/account_advanced_reconcile/res_config.py
deleted file mode 100644
index cb827ab3..00000000
--- a/account_advanced_reconcile/res_config.py
+++ /dev/null
@@ -1,59 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# Author: Leonardo Pistone
-# Copyright 2014 Camptocamp SA
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-
-from openerp.osv import orm, fields
-
-
-class AccountConfigSettings(orm.TransientModel):
- _inherit = 'account.config.settings'
-
- _columns = {
- 'reconciliation_commit_every': fields.related(
- 'company_id',
- 'reconciliation_commit_every',
- type='integer',
- string='How often to commit when performing automatic '
- 'reconciliation.',
- help="""Leave zero to commit only at the end of the process."""),
- }
-
- def onchange_company_id(self, cr, uid, ids, company_id, context=None):
- company_obj = self.pool['res.company']
-
- result = super(AccountConfigSettings, self).onchange_company_id(
- cr, uid, ids, company_id, context=None)
-
- if company_id:
- company = company_obj.browse(cr, uid, company_id, context=context)
- result['value']['reconciliation_commit_every'] = (
- company.reconciliation_commit_every
- )
- return result
-
-
-class Company(orm.Model):
- _inherit = "res.company"
- _columns = {
- '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_easy_reconcile/__init__.py b/account_easy_reconcile/__init__.py
deleted file mode 100755
index 3ac78713..00000000
--- a/account_easy_reconcile/__init__.py
+++ /dev/null
@@ -1,26 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# Copyright 2012, 2015 Camptocamp SA (Guewen Baconnier, Damien Crier)
-# Copyright (C) 2010 Sébastien Beau
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-
-from . import easy_reconcile
-from . import base_reconciliation
-from . import simple_reconciliation
-from . import easy_reconcile_history
-from . import res_config
diff --git a/account_easy_reconcile/__openerp__.py b/account_easy_reconcile/__openerp__.py
deleted file mode 100644
index b715f56e..00000000
--- a/account_easy_reconcile/__openerp__.py
+++ /dev/null
@@ -1,41 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# Copyright 2012, 2015 Camptocamp SA (Guewen Baconnier, Damien Crier)
-# Copyright (C) 2010 Sébastien Beau
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-
-{
- "name": "Easy Reconcile",
- "version": "8.0.1.3.1",
- "depends": ["account"],
- "author": "Akretion,Camptocamp,Odoo Community Association (OCA)",
- "website": "http://www.akretion.com/",
- "category": "Finance",
- "data": ["easy_reconcile.xml",
- "easy_reconcile_history_view.xml",
- "security/ir_rule.xml",
- "security/ir.model.access.csv",
- "res_config_view.xml",
- ],
- "test": ['test/easy_reconcile.yml',
- ],
- 'license': 'AGPL-3',
- "auto_install": False,
- 'installable': False,
-
-}
diff --git a/account_easy_reconcile/easy_reconcile_history.py b/account_easy_reconcile/easy_reconcile_history.py
deleted file mode 100644
index 58904b3e..00000000
--- a/account_easy_reconcile/easy_reconcile_history.py
+++ /dev/null
@@ -1,139 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# Author: Guewen Baconnier, Damien Crier
-# Copyright 2012, 2015 Camptocamp SA
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-
-from openerp import models, api, fields, _
-
-
-class EasyReconcileHistory(models.Model):
- """ Store an history of the runs per profile
- Each history stores the list of reconciliations done"""
-
- _name = 'easy.reconcile.history'
- _rec_name = 'easy_reconcile_id'
- _order = 'date DESC'
-
- @api.one
- @api.depends('reconcile_ids', 'reconcile_partial_ids')
- def _get_reconcile_line_ids(self):
- move_line_ids = []
- for reconcile in self.reconcile_ids:
- move_lines = reconcile.mapped('line_id')
- move_line_ids.extend(move_lines.ids)
- self.reconcile_line_ids = move_line_ids
-
- move_line_ids2 = []
- for reconcile2 in self.reconcile_partial_ids:
- move_lines2 = reconcile2.mapped('line_partial_ids')
- move_line_ids2.extend(move_lines2.ids)
- self.partial_line_ids = move_line_ids2
-
- easy_reconcile_id = fields.Many2one(
- 'account.easy.reconcile',
- string='Reconcile Profile',
- readonly=True
- )
- date = fields.Datetime(string='Run date', readonly=True, required=True)
- reconcile_ids = fields.Many2many(
- comodel_name='account.move.reconcile',
- relation='account_move_reconcile_history_rel',
- string='Partial Reconciliations',
- readonly=True
- )
- reconcile_partial_ids = fields.Many2many(
- comodel_name='account.move.reconcile',
- relation='account_move_reconcile_history_partial_rel',
- string='Partial 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'
- )
- partial_line_ids = fields.Many2many(
- comodel_name='account.move.line',
- relation='account_move_line_history_partial_rel',
- string='Partially Reconciled Items',
- compute='_get_reconcile_line_ids'
- )
- company_id = fields.Many2one(
- 'res.company',
- string='Company',
- store=True,
- readonly=True,
- related='easy_reconcile_id.company_id'
- )
-
- @api.multi
- def _open_move_lines(self, rec_type='full'):
- """ For an history record, open the view of move line with
- the reconciled or partially reconciled move lines
-
- :param history_id: id of the history
- :param rec_type: 'full' or 'partial'
- :return: action to open the move lines
- """
- assert rec_type in ('full', 'partial'), \
- "rec_type must be 'full' or 'partial'"
- move_line_ids = []
- if rec_type == 'full':
- move_line_ids = self.mapped('reconcile_ids.line_id').ids
- name = _('Reconciliations')
- else:
- move_line_ids = self.mapped(
- 'reconcile_partial_ids.line_partial_ids').ids
- name = _('Partial 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(rec_type='full')
-
- @api.multi
- def open_partial(self):
- """ For an history record, open the view of move line
- with the partially 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(rec_type='partial')
diff --git a/account_easy_reconcile/i18n/account_easy_reconcile.pot b/account_easy_reconcile/i18n/account_easy_reconcile.pot
deleted file mode 100644
index 76d49a52..00000000
--- a/account_easy_reconcile/i18n/account_easy_reconcile.pot
+++ /dev/null
@@ -1,567 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * account_easy_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_easy_reconcile
-#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
-msgid "7 Days"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: model:ir.actions.act_window,help:account_easy_reconcile.action_account_easy_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"
-" 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_easy_reconcile
-#: field:account.easy.reconcile,account:0
-#: field:easy.reconcile.base,account_id:0
-#: field:easy.reconcile.simple,account_id:0
-#: field:easy.reconcile.simple.name,account_id:0
-#: field:easy.reconcile.simple.partner,account_id:0
-#: field:easy.reconcile.simple.reference,account_id:0
-msgid "Account"
-msgstr "Account"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,account_lost_id:0
-#: field:easy.reconcile.base,account_lost_id:0
-#: field:easy.reconcile.options,account_lost_id:0
-#: field:easy.reconcile.simple,account_lost_id:0
-#: field:easy.reconcile.simple.name,account_lost_id:0
-#: field:easy.reconcile.simple.partner,account_lost_id:0
-#: field:easy.reconcile.simple.reference,account_lost_id:0
-msgid "Account Lost"
-msgstr "Account Lost"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,account_profit_id:0
-#: field:easy.reconcile.base,account_profit_id:0
-#: field:easy.reconcile.options,account_profit_id:0
-#: field:easy.reconcile.simple,account_profit_id:0
-#: field:easy.reconcile.simple.name,account_profit_id:0
-#: field:easy.reconcile.simple.partner,account_profit_id:0
-#: field:easy.reconcile.simple.reference,account_profit_id:0
-msgid "Account Profit"
-msgstr "Account Profit"
-
-#. module: account_easy_reconcile
-#: help:account.easy.reconcile.method,analytic_account_id:0
-#: help:easy.reconcile.base,analytic_account_id:0
-#: help:easy.reconcile.options,analytic_account_id:0
-#: help:easy.reconcile.simple,analytic_account_id:0
-#: help:easy.reconcile.simple.name,analytic_account_id:0
-#: help:easy.reconcile.simple.partner,analytic_account_id:0
-#: help:easy.reconcile.simple.reference,analytic_account_id:0
-msgid "Analytic account for the write-off"
-msgstr "Analytic account for the write-off"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,analytic_account_id:0
-#: field:easy.reconcile.base,analytic_account_id:0
-#: field:easy.reconcile.options,analytic_account_id:0
-#: field:easy.reconcile.simple,analytic_account_id:0
-#: field:easy.reconcile.simple.name,analytic_account_id:0
-#: field:easy.reconcile.simple.partner,analytic_account_id:0
-#: field:easy.reconcile.simple.reference,analytic_account_id:0
-msgid "Analytic_account"
-msgstr "Analytic_account"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_tree
-msgid "Automatic Easy Reconcile"
-msgstr "Automatic Easy Reconcile"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_form
-#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_tree
-#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
-msgid "Automatic Easy Reconcile History"
-msgstr "Automatic Easy Reconcile History"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile.method:account_easy_reconcile.account_easy_reconcile_method_form
-#: view:account.easy.reconcile.method:account_easy_reconcile.account_easy_reconcile_method_tree
-msgid "Automatic Easy Reconcile Method"
-msgstr "Automatic Easy Reconcile Method"
-
-#. module: account_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_res_company
-msgid "Companies"
-msgstr "Companies"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,company_id:0
-#: field:account.easy.reconcile.method,company_id:0
-#: field:easy.reconcile.history,company_id:0
-msgid "Company"
-msgstr "Company"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-msgid "Configuration"
-msgstr "Configuration"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,create_uid:0
-#: field:account.easy.reconcile.method,create_uid:0
-#: field:easy.reconcile.history,create_uid:0
-#: field:easy.reconcile.simple.name,create_uid:0
-#: field:easy.reconcile.simple.partner,create_uid:0
-#: field:easy.reconcile.simple.reference,create_uid:0
-msgid "Created by"
-msgstr "Created by"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,create_date:0
-#: field:account.easy.reconcile.method,create_date:0
-#: field:easy.reconcile.history,create_date:0
-#: field:easy.reconcile.simple.name,create_date:0
-#: field:easy.reconcile.simple.partner,create_date:0
-#: field:easy.reconcile.simple.reference,create_date:0
-msgid "Created on"
-msgstr "Created on"
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
-msgid "Date"
-msgstr "Date"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,date_base_on:0
-#: field:easy.reconcile.base,date_base_on:0
-#: field:easy.reconcile.options,date_base_on:0
-#: field:easy.reconcile.simple,date_base_on:0
-#: field:easy.reconcile.simple.name,date_base_on:0
-#: field:easy.reconcile.simple.partner,date_base_on:0
-#: field:easy.reconcile.simple.reference,date_base_on:0
-msgid "Date of reconciliation"
-msgstr "Date of reconciliation"
-
-#. module: account_easy_reconcile
-#: help:account.easy.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_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_tree
-msgid "Display items partially reconciled on the last run"
-msgstr "Display items partially reconciled on the last run"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_tree
-msgid "Display items reconciled on the last run"
-msgstr "Display items reconciled on the last run"
-
-#. module: account_easy_reconcile
-#: model:ir.actions.act_window,name:account_easy_reconcile.action_account_easy_reconcile
-#: model:ir.ui.menu,name:account_easy_reconcile.menu_easy_reconcile
-msgid "Easy Automatic Reconcile"
-msgstr "Easy Automatic Reconcile"
-
-#. module: account_easy_reconcile
-#: model:ir.actions.act_window,name:account_easy_reconcile.action_easy_reconcile_history
-msgid "Easy Automatic Reconcile History"
-msgstr "Easy Automatic Reconcile History"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,filter:0
-#: field:easy.reconcile.base,filter:0 field:easy.reconcile.options,filter:0
-#: field:easy.reconcile.simple,filter:0
-#: field:easy.reconcile.simple.name,filter:0
-#: field:easy.reconcile.simple.partner,filter:0
-#: field:easy.reconcile.simple.reference,filter:0
-msgid "Filter"
-msgstr "Filter"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,message_follower_ids:0
-msgid "Followers"
-msgstr "Followers"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,income_exchange_account_id:0
-#: field:easy.reconcile.base,income_exchange_account_id:0
-#: field:easy.reconcile.options,income_exchange_account_id:0
-#: field:easy.reconcile.simple,income_exchange_account_id:0
-#: field:easy.reconcile.simple.name,income_exchange_account_id:0
-#: field:easy.reconcile.simple.partner,income_exchange_account_id:0
-#: field:easy.reconcile.simple.reference,income_exchange_account_id:0
-msgid "Gain Exchange Rate Account"
-msgstr "Gain Exchange Rate Account"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-msgid "Go to partial reconciled items"
-msgstr "Go to partial reconciled items"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_form
-#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_tree
-msgid "Go to partially reconciled items"
-msgstr "Go to partially reconciled items"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_form
-#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_tree
-msgid "Go to reconciled items"
-msgstr "Go to reconciled items"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-msgid "Go to unreconciled items"
-msgstr "Go to unreconciled items"
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
-msgid "Group By..."
-msgstr "Group By..."
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-#: field:account.easy.reconcile,history_ids:0
-msgid "History"
-msgstr "History"
-
-#. module: account_easy_reconcile
-#: model:ir.actions.act_window,name:account_easy_reconcile.act_easy_reconcile_to_history
-msgid "History Details"
-msgstr "History Details"
-
-#. module: account_easy_reconcile
-#: help:account.easy.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_easy_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_easy_reconcile
-#: field:account.easy.reconcile,id:0 field:account.easy.reconcile.method,id:0
-#: field:easy.reconcile.base,id:0 field:easy.reconcile.history,id:0
-#: field:easy.reconcile.options,id:0 field:easy.reconcile.simple,id:0
-#: field:easy.reconcile.simple.name,id:0
-#: field:easy.reconcile.simple.partner,id:0
-#: field:easy.reconcile.simple.reference,id:0
-msgid "ID"
-msgstr "ID"
-
-#. module: account_easy_reconcile
-#: help:account.easy.reconcile,message_unread:0
-msgid "If checked new messages require your attention."
-msgstr "If checked new messages require your attention."
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-msgid "Information"
-msgstr "Information"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,message_is_follower:0
-msgid "Is a Follower"
-msgstr "Is a Follower"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,journal_id:0
-#: field:easy.reconcile.base,journal_id:0
-#: field:easy.reconcile.options,journal_id:0
-#: field:easy.reconcile.simple,journal_id:0
-#: field:easy.reconcile.simple.name,journal_id:0
-#: field:easy.reconcile.simple.partner,journal_id:0
-#: field:easy.reconcile.simple.reference,journal_id:0
-msgid "Journal"
-msgstr "Journal"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,message_last_post:0
-msgid "Last Message Date"
-msgstr "Last Message Date"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,write_uid:0
-#: field:account.easy.reconcile.method,write_uid:0
-#: field:easy.reconcile.history,write_uid:0
-#: field:easy.reconcile.simple.name,write_uid:0
-#: field:easy.reconcile.simple.partner,write_uid:0
-#: field:easy.reconcile.simple.reference,write_uid:0
-msgid "Last Updated by"
-msgstr "Last Updated by"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,write_date:0
-#: field:account.easy.reconcile.method,write_date:0
-#: field:easy.reconcile.history,write_date:0
-#: field:easy.reconcile.simple.name,write_date:0
-#: field:easy.reconcile.simple.partner,write_date:0
-#: field:easy.reconcile.simple.reference,write_date:0
-msgid "Last Updated on"
-msgstr "Last Updated on"
-
-#. module: account_easy_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_easy_reconcile
-#: field:account.easy.reconcile.method,expense_exchange_account_id:0
-#: field:easy.reconcile.base,expense_exchange_account_id:0
-#: field:easy.reconcile.options,expense_exchange_account_id:0
-#: field:easy.reconcile.simple,expense_exchange_account_id:0
-#: field:easy.reconcile.simple.name,expense_exchange_account_id:0
-#: field:easy.reconcile.simple.partner,expense_exchange_account_id:0
-#: field:easy.reconcile.simple.reference,expense_exchange_account_id:0
-msgid "Loss Exchange Rate Account"
-msgstr "Loss Exchange Rate Account"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_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_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_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_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_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_easy_reconcile
-#: field:account.easy.reconcile,message_ids:0
-msgid "Messages"
-msgstr "Messages"
-
-#. module: account_easy_reconcile
-#: help:account.easy.reconcile,message_ids:0
-msgid "Messages and communication history"
-msgstr "Messages and communication history"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,reconcile_method:0
-msgid "Method"
-msgstr "Method"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,name:0
-msgid "Name"
-msgstr "Name"
-
-#. module: account_easy_reconcile
-#: view:account.config.settings:account_easy_reconcile.view_account_config
-msgid "Options"
-msgstr "Options"
-
-#. module: account_easy_reconcile
-#: code:addons/account_easy_reconcile/easy_reconcile_history.py:104
-#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_form
-#: field:easy.reconcile.history,reconcile_ids:0
-#: field:easy.reconcile.history,reconcile_partial_ids:0
-#, python-format
-msgid "Partial Reconciliations"
-msgstr "Partial Reconciliations"
-
-#. module: account_easy_reconcile
-#: code:addons/account_easy_reconcile/easy_reconcile.py:334
-#, python-format
-msgid "Partial reconciled items"
-msgstr "Partial reconciled items"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-msgid "Profile Information"
-msgstr "Profile Information"
-
-#. module: account_easy_reconcile
-#: field:easy.reconcile.history,easy_reconcile_id:0
-msgid "Reconcile Profile"
-msgstr "Reconcile Profile"
-
-#. module: account_easy_reconcile
-#: view:account.config.settings:account_easy_reconcile.view_account_config
-msgid "Reconciliation"
-msgstr "Reconciliation"
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
-msgid "Reconciliation Profile"
-msgstr "Reconciliation Profile"
-
-#. module: account_easy_reconcile
-#: code:addons/account_easy_reconcile/easy_reconcile_history.py:100
-#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_form
-#, python-format
-msgid "Reconciliations"
-msgstr "Reconciliations"
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
-msgid "Reconciliations of last 7 days"
-msgstr "Reconciliations of last 7 days"
-
-#. module: account_easy_reconcile
-#: field:easy.reconcile.base,partner_ids:0
-#: field:easy.reconcile.simple,partner_ids:0
-#: field:easy.reconcile.simple.name,partner_ids:0
-#: field:easy.reconcile.simple.partner,partner_ids:0
-#: field:easy.reconcile.simple.reference,partner_ids:0
-msgid "Restrict on partners"
-msgstr "Restrict on partners"
-
-#. module: account_easy_reconcile
-#: field:easy.reconcile.history,date:0
-msgid "Run date"
-msgstr "Run date"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,sequence:0
-msgid "Sequence"
-msgstr "Sequence"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-msgid "Simple. Amount and Name"
-msgstr "Simple. Amount and Name"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-msgid "Simple. Amount and Partner"
-msgstr "Simple. Amount and Partner"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-msgid "Simple. Amount and Reference"
-msgstr "Simple. Amount and Reference"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_tree
-msgid "Start Auto Reconcilation"
-msgstr "Start Auto Reconcilation"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-msgid "Start Auto Reconciliation"
-msgstr "Start Auto Reconciliation"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,message_summary:0
-msgid "Summary"
-msgstr "Summary"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,task_id:0
-msgid "Task"
-msgstr "Task"
-
-#. module: account_easy_reconcile
-#: help:account.easy.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_easy_reconcile
-#: code:addons/account_easy_reconcile/easy_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_easy_reconcile
-#: code:addons/account_easy_reconcile/easy_reconcile.py:269
-#, python-format
-msgid "There was an error during reconciliation : %s"
-msgstr "There was an error during reconciliation : %s"
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
-msgid "Today"
-msgstr "Today"
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
-msgid "Todays' Reconcilations"
-msgstr "Todays' Reconcilations"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,name:0
-msgid "Type"
-msgstr "Type"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,message_unread:0
-msgid "Unread Messages"
-msgstr "Unread Messages"
-
-#. module: account_easy_reconcile
-#: code:addons/account_easy_reconcile/easy_reconcile.py:321
-#, python-format
-msgid "Unreconciled items"
-msgstr "Unreconciled items"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,write_off:0
-#: field:easy.reconcile.base,write_off:0
-#: field:easy.reconcile.options,write_off:0
-#: field:easy.reconcile.simple,write_off:0
-#: field:easy.reconcile.simple.name,write_off:0
-#: field:easy.reconcile.simple.partner,write_off:0
-#: field:easy.reconcile.simple.reference,write_off:0
-msgid "Write off allowed"
-msgstr "Write off allowed"
-
-#. module: account_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile
-msgid "account easy reconcile"
-msgstr "account easy reconcile"
-
-#. module: account_easy_reconcile
-#: view:account.config.settings:account_easy_reconcile.view_account_config
-msgid "eInvoicing & Payments"
-msgstr "eInvoicing & Payments"
-
-#. module: account_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile_method
-msgid "reconcile method for account_easy_reconcile"
-msgstr "reconcile method for account_easy_reconcile"
diff --git a/account_easy_reconcile/i18n/es.po b/account_easy_reconcile/i18n/es.po
deleted file mode 100644
index 292ec19f..00000000
--- a/account_easy_reconcile/i18n/es.po
+++ /dev/null
@@ -1,567 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * account_easy_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_easy_reconcile
-#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
-msgid "7 Days"
-msgstr "7 días"
-
-#. module: account_easy_reconcile
-#: model:ir.actions.act_window,help:account_easy_reconcile.action_account_easy_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_easy_reconcile
-#: field:account.easy.reconcile,account:0
-#: field:easy.reconcile.base,account_id:0
-#: field:easy.reconcile.simple,account_id:0
-#: field:easy.reconcile.simple.name,account_id:0
-#: field:easy.reconcile.simple.partner,account_id:0
-#: field:easy.reconcile.simple.reference,account_id:0
-msgid "Account"
-msgstr "Cuenta"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,account_lost_id:0
-#: field:easy.reconcile.base,account_lost_id:0
-#: field:easy.reconcile.options,account_lost_id:0
-#: field:easy.reconcile.simple,account_lost_id:0
-#: field:easy.reconcile.simple.name,account_lost_id:0
-#: field:easy.reconcile.simple.partner,account_lost_id:0
-#: field:easy.reconcile.simple.reference,account_lost_id:0
-msgid "Account Lost"
-msgstr "Cuenta de pérdidas"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,account_profit_id:0
-#: field:easy.reconcile.base,account_profit_id:0
-#: field:easy.reconcile.options,account_profit_id:0
-#: field:easy.reconcile.simple,account_profit_id:0
-#: field:easy.reconcile.simple.name,account_profit_id:0
-#: field:easy.reconcile.simple.partner,account_profit_id:0
-#: field:easy.reconcile.simple.reference,account_profit_id:0
-msgid "Account Profit"
-msgstr "Cuenta de ganancias"
-
-#. module: account_easy_reconcile
-#: help:account.easy.reconcile.method,analytic_account_id:0
-#: help:easy.reconcile.base,analytic_account_id:0
-#: help:easy.reconcile.options,analytic_account_id:0
-#: help:easy.reconcile.simple,analytic_account_id:0
-#: help:easy.reconcile.simple.name,analytic_account_id:0
-#: help:easy.reconcile.simple.partner,analytic_account_id:0
-#: help:easy.reconcile.simple.reference,analytic_account_id:0
-msgid "Analytic account for the write-off"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,analytic_account_id:0
-#: field:easy.reconcile.base,analytic_account_id:0
-#: field:easy.reconcile.options,analytic_account_id:0
-#: field:easy.reconcile.simple,analytic_account_id:0
-#: field:easy.reconcile.simple.name,analytic_account_id:0
-#: field:easy.reconcile.simple.partner,analytic_account_id:0
-#: field:easy.reconcile.simple.reference,analytic_account_id:0
-msgid "Analytic_account"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_tree
-msgid "Automatic Easy Reconcile"
-msgstr "Conciliación automática sencilla"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_form
-#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_tree
-#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
-msgid "Automatic Easy Reconcile History"
-msgstr "Historial de conciliación automática sencilla"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile.method:account_easy_reconcile.account_easy_reconcile_method_form
-#: view:account.easy.reconcile.method:account_easy_reconcile.account_easy_reconcile_method_tree
-msgid "Automatic Easy Reconcile Method"
-msgstr "Método de conciliación automática sencilla"
-
-#. module: account_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_res_company
-msgid "Companies"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,company_id:0
-#: field:account.easy.reconcile.method,company_id:0
-#: field:easy.reconcile.history,company_id:0
-msgid "Company"
-msgstr "Compañía"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-msgid "Configuration"
-msgstr "Configuración"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,create_uid:0
-#: field:account.easy.reconcile.method,create_uid:0
-#: field:easy.reconcile.history,create_uid:0
-#: field:easy.reconcile.simple.name,create_uid:0
-#: field:easy.reconcile.simple.partner,create_uid:0
-#: field:easy.reconcile.simple.reference,create_uid:0
-msgid "Created by"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,create_date:0
-#: field:account.easy.reconcile.method,create_date:0
-#: field:easy.reconcile.history,create_date:0
-#: field:easy.reconcile.simple.name,create_date:0
-#: field:easy.reconcile.simple.partner,create_date:0
-#: field:easy.reconcile.simple.reference,create_date:0
-msgid "Created on"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
-msgid "Date"
-msgstr "Fecha"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,date_base_on:0
-#: field:easy.reconcile.base,date_base_on:0
-#: field:easy.reconcile.options,date_base_on:0
-#: field:easy.reconcile.simple,date_base_on:0
-#: field:easy.reconcile.simple.name,date_base_on:0
-#: field:easy.reconcile.simple.partner,date_base_on:0
-#: field:easy.reconcile.simple.reference,date_base_on:0
-msgid "Date of reconciliation"
-msgstr "Fecha de conciliación"
-
-#. module: account_easy_reconcile
-#: help:account.easy.reconcile,message_last_post:0
-msgid "Date of the last message posted on the record."
-msgstr ""
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_tree
-msgid "Display items partially reconciled on the last run"
-msgstr "Mostrar elementos conciliados parcialmente en la última ejecucción"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_tree
-msgid "Display items reconciled on the last run"
-msgstr "Mostrar elementos conciliados en la última ejecucción"
-
-#. module: account_easy_reconcile
-#: model:ir.actions.act_window,name:account_easy_reconcile.action_account_easy_reconcile
-#: model:ir.ui.menu,name:account_easy_reconcile.menu_easy_reconcile
-msgid "Easy Automatic Reconcile"
-msgstr "Conciliación automática simple"
-
-#. module: account_easy_reconcile
-#: model:ir.actions.act_window,name:account_easy_reconcile.action_easy_reconcile_history
-msgid "Easy Automatic Reconcile History"
-msgstr "Historial de la conciliación automática sencilla"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,filter:0
-#: field:easy.reconcile.base,filter:0 field:easy.reconcile.options,filter:0
-#: field:easy.reconcile.simple,filter:0
-#: field:easy.reconcile.simple.name,filter:0
-#: field:easy.reconcile.simple.partner,filter:0
-#: field:easy.reconcile.simple.reference,filter:0
-msgid "Filter"
-msgstr "Filtro"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,message_follower_ids:0
-msgid "Followers"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,income_exchange_account_id:0
-#: field:easy.reconcile.base,income_exchange_account_id:0
-#: field:easy.reconcile.options,income_exchange_account_id:0
-#: field:easy.reconcile.simple,income_exchange_account_id:0
-#: field:easy.reconcile.simple.name,income_exchange_account_id:0
-#: field:easy.reconcile.simple.partner,income_exchange_account_id:0
-#: field:easy.reconcile.simple.reference,income_exchange_account_id:0
-msgid "Gain Exchange Rate Account"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-msgid "Go to partial reconciled items"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_form
-#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_tree
-msgid "Go to partially reconciled items"
-msgstr "Ir a los elementos parcialmente conciliados"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_form
-#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_tree
-msgid "Go to reconciled items"
-msgstr "Ir a los elementos conciliados"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-msgid "Go to unreconciled items"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
-msgid "Group By..."
-msgstr "Agrupar por..."
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-#: field:account.easy.reconcile,history_ids:0
-msgid "History"
-msgstr "Historial"
-
-#. module: account_easy_reconcile
-#: model:ir.actions.act_window,name:account_easy_reconcile.act_easy_reconcile_to_history
-msgid "History Details"
-msgstr "Detalles del historial"
-
-#. module: account_easy_reconcile
-#: help:account.easy.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_easy_reconcile
-#: field:res.company,reconciliation_commit_every:0
-msgid "How often to commit when performing automatic reconciliation."
-msgstr ""
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,id:0 field:account.easy.reconcile.method,id:0
-#: field:easy.reconcile.base,id:0 field:easy.reconcile.history,id:0
-#: field:easy.reconcile.options,id:0 field:easy.reconcile.simple,id:0
-#: field:easy.reconcile.simple.name,id:0
-#: field:easy.reconcile.simple.partner,id:0
-#: field:easy.reconcile.simple.reference,id:0
-msgid "ID"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: help:account.easy.reconcile,message_unread:0
-msgid "If checked new messages require your attention."
-msgstr ""
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-msgid "Information"
-msgstr "Información"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,message_is_follower:0
-msgid "Is a Follower"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,journal_id:0
-#: field:easy.reconcile.base,journal_id:0
-#: field:easy.reconcile.options,journal_id:0
-#: field:easy.reconcile.simple,journal_id:0
-#: field:easy.reconcile.simple.name,journal_id:0
-#: field:easy.reconcile.simple.partner,journal_id:0
-#: field:easy.reconcile.simple.reference,journal_id:0
-msgid "Journal"
-msgstr "Diario"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,message_last_post:0
-msgid "Last Message Date"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,write_uid:0
-#: field:account.easy.reconcile.method,write_uid:0
-#: field:easy.reconcile.history,write_uid:0
-#: field:easy.reconcile.simple.name,write_uid:0
-#: field:easy.reconcile.simple.partner,write_uid:0
-#: field:easy.reconcile.simple.reference,write_uid:0
-msgid "Last Updated by"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,write_date:0
-#: field:account.easy.reconcile.method,write_date:0
-#: field:easy.reconcile.history,write_date:0
-#: field:easy.reconcile.simple.name,write_date:0
-#: field:easy.reconcile.simple.partner,write_date:0
-#: field:easy.reconcile.simple.reference,write_date:0
-msgid "Last Updated on"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: help:res.company,reconciliation_commit_every:0
-msgid "Leave zero to commit only at the end of the process."
-msgstr ""
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,expense_exchange_account_id:0
-#: field:easy.reconcile.base,expense_exchange_account_id:0
-#: field:easy.reconcile.options,expense_exchange_account_id:0
-#: field:easy.reconcile.simple,expense_exchange_account_id:0
-#: field:easy.reconcile.simple.name,expense_exchange_account_id:0
-#: field:easy.reconcile.simple.partner,expense_exchange_account_id:0
-#: field:easy.reconcile.simple.reference,expense_exchange_account_id:0
-msgid "Loss Exchange Rate Account"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_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_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_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_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_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_easy_reconcile
-#: field:account.easy.reconcile,message_ids:0
-msgid "Messages"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: help:account.easy.reconcile,message_ids:0
-msgid "Messages and communication history"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,reconcile_method:0
-msgid "Method"
-msgstr "Método"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,name:0
-msgid "Name"
-msgstr "Nombre"
-
-#. module: account_easy_reconcile
-#: view:account.config.settings:account_easy_reconcile.view_account_config
-msgid "Options"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: code:addons/account_easy_reconcile/easy_reconcile_history.py:104
-#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_form
-#: field:easy.reconcile.history,reconcile_ids:0
-#: field:easy.reconcile.history,reconcile_partial_ids:0
-#, python-format
-msgid "Partial Reconciliations"
-msgstr "Conciliaciones parciales"
-
-#. module: account_easy_reconcile
-#: code:addons/account_easy_reconcile/easy_reconcile.py:334
-#, python-format
-msgid "Partial reconciled items"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-msgid "Profile Information"
-msgstr "Información del perfil"
-
-#. module: account_easy_reconcile
-#: field:easy.reconcile.history,easy_reconcile_id:0
-msgid "Reconcile Profile"
-msgstr "Perfil de conciliación"
-
-#. module: account_easy_reconcile
-#: view:account.config.settings:account_easy_reconcile.view_account_config
-msgid "Reconciliation"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
-msgid "Reconciliation Profile"
-msgstr "Perfil de conciliación"
-
-#. module: account_easy_reconcile
-#: code:addons/account_easy_reconcile/easy_reconcile_history.py:100
-#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_form
-#, python-format
-msgid "Reconciliations"
-msgstr "Conciliaciones"
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
-msgid "Reconciliations of last 7 days"
-msgstr "Conciliaciones de los últimos 7 días"
-
-#. module: account_easy_reconcile
-#: field:easy.reconcile.base,partner_ids:0
-#: field:easy.reconcile.simple,partner_ids:0
-#: field:easy.reconcile.simple.name,partner_ids:0
-#: field:easy.reconcile.simple.partner,partner_ids:0
-#: field:easy.reconcile.simple.reference,partner_ids:0
-msgid "Restrict on partners"
-msgstr "Restringir en las empresas"
-
-#. module: account_easy_reconcile
-#: field:easy.reconcile.history,date:0
-msgid "Run date"
-msgstr "Fecha ejecucción"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,sequence:0
-msgid "Sequence"
-msgstr "Secuencia"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-msgid "Simple. Amount and Name"
-msgstr "Simple. Cantidad y nombre"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-msgid "Simple. Amount and Partner"
-msgstr "Simple. Cantidad y empresa"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-msgid "Simple. Amount and Reference"
-msgstr "Simple. Cantidad y referencia"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_tree
-msgid "Start Auto Reconcilation"
-msgstr "Iniciar conciliación automática"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-msgid "Start Auto Reconciliation"
-msgstr "Iniciar auto-conciliación"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,message_summary:0
-msgid "Summary"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,task_id:0
-msgid "Task"
-msgstr "Tarea"
-
-#. module: account_easy_reconcile
-#: help:account.easy.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_easy_reconcile
-#: code:addons/account_easy_reconcile/easy_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_easy_reconcile
-#: code:addons/account_easy_reconcile/easy_reconcile.py:269
-#, python-format
-msgid "There was an error during reconciliation : %s"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
-msgid "Today"
-msgstr "Hoy"
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
-msgid "Todays' Reconcilations"
-msgstr "Conciliaciones de hoy"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,name:0
-msgid "Type"
-msgstr "Tipo"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,message_unread:0
-msgid "Unread Messages"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: code:addons/account_easy_reconcile/easy_reconcile.py:321
-#, python-format
-msgid "Unreconciled items"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,write_off:0
-#: field:easy.reconcile.base,write_off:0
-#: field:easy.reconcile.options,write_off:0
-#: field:easy.reconcile.simple,write_off:0
-#: field:easy.reconcile.simple.name,write_off:0
-#: field:easy.reconcile.simple.partner,write_off:0
-#: field:easy.reconcile.simple.reference,write_off:0
-msgid "Write off allowed"
-msgstr "Desajuste permitido"
-
-#. module: account_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile
-msgid "account easy reconcile"
-msgstr "account easy reconcile"
-
-#. module: account_easy_reconcile
-#: view:account.config.settings:account_easy_reconcile.view_account_config
-msgid "eInvoicing & Payments"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile_method
-msgid "reconcile method for account_easy_reconcile"
-msgstr "Método de conciliación para account_easy_reconcile"
diff --git a/account_easy_reconcile/i18n/fr.po b/account_easy_reconcile/i18n/fr.po
deleted file mode 100644
index c3a9f801..00000000
--- a/account_easy_reconcile/i18n/fr.po
+++ /dev/null
@@ -1,566 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * account_easy_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_easy_reconcile
-#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
-msgid "7 Days"
-msgstr "7 jours"
-
-#. module: account_easy_reconcile
-#: model:ir.actions.act_window,help:account_easy_reconcile.action_account_easy_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_easy_reconcile
-#: field:account.easy.reconcile,account:0
-#: field:easy.reconcile.base,account_id:0
-#: field:easy.reconcile.simple,account_id:0
-#: field:easy.reconcile.simple.name,account_id:0
-#: field:easy.reconcile.simple.partner,account_id:0
-#: field:easy.reconcile.simple.reference,account_id:0
-msgid "Account"
-msgstr "Compte"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,account_lost_id:0
-#: field:easy.reconcile.base,account_lost_id:0
-#: field:easy.reconcile.options,account_lost_id:0
-#: field:easy.reconcile.simple,account_lost_id:0
-#: field:easy.reconcile.simple.name,account_lost_id:0
-#: field:easy.reconcile.simple.partner,account_lost_id:0
-#: field:easy.reconcile.simple.reference,account_lost_id:0
-msgid "Account Lost"
-msgstr "Compte de pertes"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,account_profit_id:0
-#: field:easy.reconcile.base,account_profit_id:0
-#: field:easy.reconcile.options,account_profit_id:0
-#: field:easy.reconcile.simple,account_profit_id:0
-#: field:easy.reconcile.simple.name,account_profit_id:0
-#: field:easy.reconcile.simple.partner,account_profit_id:0
-#: field:easy.reconcile.simple.reference,account_profit_id:0
-msgid "Account Profit"
-msgstr "Compte de profits"
-
-#. module: account_easy_reconcile
-#: help:account.easy.reconcile.method,analytic_account_id:0
-#: help:easy.reconcile.base,analytic_account_id:0
-#: help:easy.reconcile.options,analytic_account_id:0
-#: help:easy.reconcile.simple,analytic_account_id:0
-#: help:easy.reconcile.simple.name,analytic_account_id:0
-#: help:easy.reconcile.simple.partner,analytic_account_id:0
-#: help:easy.reconcile.simple.reference,analytic_account_id:0
-msgid "Analytic account for the write-off"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,analytic_account_id:0
-#: field:easy.reconcile.base,analytic_account_id:0
-#: field:easy.reconcile.options,analytic_account_id:0
-#: field:easy.reconcile.simple,analytic_account_id:0
-#: field:easy.reconcile.simple.name,analytic_account_id:0
-#: field:easy.reconcile.simple.partner,analytic_account_id:0
-#: field:easy.reconcile.simple.reference,analytic_account_id:0
-msgid "Analytic_account"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_tree
-msgid "Automatic Easy Reconcile"
-msgstr "Lettrage automatisé"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_form
-#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_tree
-#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
-msgid "Automatic Easy Reconcile History"
-msgstr "Historique des lettrages automatisés"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile.method:account_easy_reconcile.account_easy_reconcile_method_form
-#: view:account.easy.reconcile.method:account_easy_reconcile.account_easy_reconcile_method_tree
-msgid "Automatic Easy Reconcile Method"
-msgstr "Méthode de lettrage automatisé"
-
-#. module: account_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_res_company
-msgid "Companies"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,company_id:0
-#: field:account.easy.reconcile.method,company_id:0
-#: field:easy.reconcile.history,company_id:0
-msgid "Company"
-msgstr "Société"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-msgid "Configuration"
-msgstr "Configuration"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,create_uid:0
-#: field:account.easy.reconcile.method,create_uid:0
-#: field:easy.reconcile.history,create_uid:0
-#: field:easy.reconcile.simple.name,create_uid:0
-#: field:easy.reconcile.simple.partner,create_uid:0
-#: field:easy.reconcile.simple.reference,create_uid:0
-msgid "Created by"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,create_date:0
-#: field:account.easy.reconcile.method,create_date:0
-#: field:easy.reconcile.history,create_date:0
-#: field:easy.reconcile.simple.name,create_date:0
-#: field:easy.reconcile.simple.partner,create_date:0
-#: field:easy.reconcile.simple.reference,create_date:0
-msgid "Created on"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
-msgid "Date"
-msgstr "Date"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,date_base_on:0
-#: field:easy.reconcile.base,date_base_on:0
-#: field:easy.reconcile.options,date_base_on:0
-#: field:easy.reconcile.simple,date_base_on:0
-#: field:easy.reconcile.simple.name,date_base_on:0
-#: field:easy.reconcile.simple.partner,date_base_on:0
-#: field:easy.reconcile.simple.reference,date_base_on:0
-msgid "Date of reconciliation"
-msgstr "Date de lettrage"
-
-#. module: account_easy_reconcile
-#: help:account.easy.reconcile,message_last_post:0
-msgid "Date of the last message posted on the record."
-msgstr ""
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_tree
-msgid "Display items partially reconciled on the last run"
-msgstr "Afficher les entrées partiellement lettrées au dernier lettrage"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_tree
-msgid "Display items reconciled on the last run"
-msgstr "Voir les entrées lettrées au dernier lettrage"
-
-#. module: account_easy_reconcile
-#: model:ir.actions.act_window,name:account_easy_reconcile.action_account_easy_reconcile
-#: model:ir.ui.menu,name:account_easy_reconcile.menu_easy_reconcile
-msgid "Easy Automatic Reconcile"
-msgstr "Lettrage automatisé"
-
-#. module: account_easy_reconcile
-#: model:ir.actions.act_window,name:account_easy_reconcile.action_easy_reconcile_history
-msgid "Easy Automatic Reconcile History"
-msgstr "Lettrage automatisé"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,filter:0
-#: field:easy.reconcile.base,filter:0 field:easy.reconcile.options,filter:0
-#: field:easy.reconcile.simple,filter:0
-#: field:easy.reconcile.simple.name,filter:0
-#: field:easy.reconcile.simple.partner,filter:0
-#: field:easy.reconcile.simple.reference,filter:0
-msgid "Filter"
-msgstr "Filtre"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,message_follower_ids:0
-msgid "Followers"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,income_exchange_account_id:0
-#: field:easy.reconcile.base,income_exchange_account_id:0
-#: field:easy.reconcile.options,income_exchange_account_id:0
-#: field:easy.reconcile.simple,income_exchange_account_id:0
-#: field:easy.reconcile.simple.name,income_exchange_account_id:0
-#: field:easy.reconcile.simple.partner,income_exchange_account_id:0
-#: field:easy.reconcile.simple.reference,income_exchange_account_id:0
-msgid "Gain Exchange Rate Account"
-msgstr "Compte de gain de change"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-msgid "Go to partial reconciled items"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_form
-#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_tree
-msgid "Go to partially reconciled items"
-msgstr "Voir les entrées partiellement lettrées"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_form
-#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_tree
-msgid "Go to reconciled items"
-msgstr "Voir les entrées lettrées"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-msgid "Go to unreconciled items"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
-msgid "Group By..."
-msgstr "Grouper par..."
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-#: field:account.easy.reconcile,history_ids:0
-msgid "History"
-msgstr "Historique"
-
-#. module: account_easy_reconcile
-#: model:ir.actions.act_window,name:account_easy_reconcile.act_easy_reconcile_to_history
-msgid "History Details"
-msgstr "Détails de l'historique"
-
-#. module: account_easy_reconcile
-#: help:account.easy.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_easy_reconcile
-#: field:res.company,reconciliation_commit_every:0
-msgid "How often to commit when performing automatic reconciliation."
-msgstr ""
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,id:0 field:account.easy.reconcile.method,id:0
-#: field:easy.reconcile.base,id:0 field:easy.reconcile.history,id:0
-#: field:easy.reconcile.options,id:0 field:easy.reconcile.simple,id:0
-#: field:easy.reconcile.simple.name,id:0
-#: field:easy.reconcile.simple.partner,id:0
-#: field:easy.reconcile.simple.reference,id:0
-msgid "ID"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: help:account.easy.reconcile,message_unread:0
-msgid "If checked new messages require your attention."
-msgstr ""
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-msgid "Information"
-msgstr "Information"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,message_is_follower:0
-msgid "Is a Follower"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,journal_id:0
-#: field:easy.reconcile.base,journal_id:0
-#: field:easy.reconcile.options,journal_id:0
-#: field:easy.reconcile.simple,journal_id:0
-#: field:easy.reconcile.simple.name,journal_id:0
-#: field:easy.reconcile.simple.partner,journal_id:0
-#: field:easy.reconcile.simple.reference,journal_id:0
-msgid "Journal"
-msgstr "Journal"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,message_last_post:0
-msgid "Last Message Date"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,write_uid:0
-#: field:account.easy.reconcile.method,write_uid:0
-#: field:easy.reconcile.history,write_uid:0
-#: field:easy.reconcile.simple.name,write_uid:0
-#: field:easy.reconcile.simple.partner,write_uid:0
-#: field:easy.reconcile.simple.reference,write_uid:0
-msgid "Last Updated by"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,write_date:0
-#: field:account.easy.reconcile.method,write_date:0
-#: field:easy.reconcile.history,write_date:0
-#: field:easy.reconcile.simple.name,write_date:0
-#: field:easy.reconcile.simple.partner,write_date:0
-#: field:easy.reconcile.simple.reference,write_date:0
-msgid "Last Updated on"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: help:res.company,reconciliation_commit_every:0
-msgid "Leave zero to commit only at the end of the process."
-msgstr ""
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,expense_exchange_account_id:0
-#: field:easy.reconcile.base,expense_exchange_account_id:0
-#: field:easy.reconcile.options,expense_exchange_account_id:0
-#: field:easy.reconcile.simple,expense_exchange_account_id:0
-#: field:easy.reconcile.simple.name,expense_exchange_account_id:0
-#: field:easy.reconcile.simple.partner,expense_exchange_account_id:0
-#: field:easy.reconcile.simple.reference,expense_exchange_account_id:0
-msgid "Loss Exchange Rate Account"
-msgstr "Compte de perte de change"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_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_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_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_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_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_easy_reconcile
-#: field:account.easy.reconcile,message_ids:0
-msgid "Messages"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: help:account.easy.reconcile,message_ids:0
-msgid "Messages and communication history"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,reconcile_method:0
-msgid "Method"
-msgstr "Méthode"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,name:0
-msgid "Name"
-msgstr "Nom"
-
-#. module: account_easy_reconcile
-#: view:account.config.settings:account_easy_reconcile.view_account_config
-msgid "Options"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: code:addons/account_easy_reconcile/easy_reconcile_history.py:104
-#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_form
-#: field:easy.reconcile.history,reconcile_ids:0
-#: field:easy.reconcile.history,reconcile_partial_ids:0
-#, python-format
-msgid "Partial Reconciliations"
-msgstr "Lettrages partiels"
-
-#. module: account_easy_reconcile
-#: code:addons/account_easy_reconcile/easy_reconcile.py:334
-#, python-format
-msgid "Partial reconciled items"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-msgid "Profile Information"
-msgstr "Information sur le profil"
-
-#. module: account_easy_reconcile
-#: field:easy.reconcile.history,easy_reconcile_id:0
-msgid "Reconcile Profile"
-msgstr "Profil de réconciliation"
-
-#. module: account_easy_reconcile
-#: view:account.config.settings:account_easy_reconcile.view_account_config
-msgid "Reconciliation"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
-msgid "Reconciliation Profile"
-msgstr "Profil de réconciliation"
-
-#. module: account_easy_reconcile
-#: code:addons/account_easy_reconcile/easy_reconcile_history.py:100
-#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_form
-#, python-format
-msgid "Reconciliations"
-msgstr "Lettrages"
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
-msgid "Reconciliations of last 7 days"
-msgstr "Lettrages des 7 derniers jours"
-
-#. module: account_easy_reconcile
-#: field:easy.reconcile.base,partner_ids:0
-#: field:easy.reconcile.simple,partner_ids:0
-#: field:easy.reconcile.simple.name,partner_ids:0
-#: field:easy.reconcile.simple.partner,partner_ids:0
-#: field:easy.reconcile.simple.reference,partner_ids:0
-msgid "Restrict on partners"
-msgstr "Filtrer sur des partenaires"
-
-#. module: account_easy_reconcile
-#: field:easy.reconcile.history,date:0
-msgid "Run date"
-msgstr "Date de lancement"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,sequence:0
-msgid "Sequence"
-msgstr "Séquence"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-msgid "Simple. Amount and Name"
-msgstr "Simple. Montant et description"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-msgid "Simple. Amount and Partner"
-msgstr "Simple. Montant et partenaire"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-msgid "Simple. Amount and Reference"
-msgstr "Simple. Montant et référence"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_tree
-msgid "Start Auto Reconcilation"
-msgstr "Lancer le lettrage automatisé"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-msgid "Start Auto Reconciliation"
-msgstr "Lancer le lettrage automatisé"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,message_summary:0
-msgid "Summary"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,task_id:0
-msgid "Task"
-msgstr "Tâche"
-
-#. module: account_easy_reconcile
-#: help:account.easy.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_easy_reconcile
-#: code:addons/account_easy_reconcile/easy_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_easy_reconcile
-#: code:addons/account_easy_reconcile/easy_reconcile.py:269
-#, python-format
-msgid "There was an error during reconciliation : %s"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
-msgid "Today"
-msgstr "Aujourd'hui"
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
-msgid "Todays' Reconcilations"
-msgstr "Lettrages du jour"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,name:0
-msgid "Type"
-msgstr "Type"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,message_unread:0
-msgid "Unread Messages"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: code:addons/account_easy_reconcile/easy_reconcile.py:321
-#, python-format
-msgid "Unreconciled items"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,write_off:0
-#: field:easy.reconcile.base,write_off:0
-#: field:easy.reconcile.options,write_off:0
-#: field:easy.reconcile.simple,write_off:0
-#: field:easy.reconcile.simple.name,write_off:0
-#: field:easy.reconcile.simple.partner,write_off:0
-#: field:easy.reconcile.simple.reference,write_off:0
-msgid "Write off allowed"
-msgstr "Écart autorisé"
-
-#. module: account_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile
-msgid "account easy reconcile"
-msgstr "Lettrage automatisé"
-
-#. module: account_easy_reconcile
-#: view:account.config.settings:account_easy_reconcile.view_account_config
-msgid "eInvoicing & Payments"
-msgstr ""
-
-#. module: account_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile_method
-msgid "reconcile method for account_easy_reconcile"
-msgstr "Méthode de lettrage"
diff --git a/account_easy_reconcile/i18n/sl.po b/account_easy_reconcile/i18n/sl.po
deleted file mode 100644
index cc6104e0..00000000
--- a/account_easy_reconcile/i18n/sl.po
+++ /dev/null
@@ -1,567 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * account_easy_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_easy_reconcile
-#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
-msgid "7 Days"
-msgstr "7 dni"
-
-#. module: account_easy_reconcile
-#: model:ir.actions.act_window,help:account_easy_reconcile.action_account_easy_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_easy_reconcile
-#: field:account.easy.reconcile,account:0
-#: field:easy.reconcile.base,account_id:0
-#: field:easy.reconcile.simple,account_id:0
-#: field:easy.reconcile.simple.name,account_id:0
-#: field:easy.reconcile.simple.partner,account_id:0
-#: field:easy.reconcile.simple.reference,account_id:0
-msgid "Account"
-msgstr "Konto"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,account_lost_id:0
-#: field:easy.reconcile.base,account_lost_id:0
-#: field:easy.reconcile.options,account_lost_id:0
-#: field:easy.reconcile.simple,account_lost_id:0
-#: field:easy.reconcile.simple.name,account_lost_id:0
-#: field:easy.reconcile.simple.partner,account_lost_id:0
-#: field:easy.reconcile.simple.reference,account_lost_id:0
-msgid "Account Lost"
-msgstr "Konto izgube"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,account_profit_id:0
-#: field:easy.reconcile.base,account_profit_id:0
-#: field:easy.reconcile.options,account_profit_id:0
-#: field:easy.reconcile.simple,account_profit_id:0
-#: field:easy.reconcile.simple.name,account_profit_id:0
-#: field:easy.reconcile.simple.partner,account_profit_id:0
-#: field:easy.reconcile.simple.reference,account_profit_id:0
-msgid "Account Profit"
-msgstr "Konto dobička"
-
-#. module: account_easy_reconcile
-#: help:account.easy.reconcile.method,analytic_account_id:0
-#: help:easy.reconcile.base,analytic_account_id:0
-#: help:easy.reconcile.options,analytic_account_id:0
-#: help:easy.reconcile.simple,analytic_account_id:0
-#: help:easy.reconcile.simple.name,analytic_account_id:0
-#: help:easy.reconcile.simple.partner,analytic_account_id:0
-#: help:easy.reconcile.simple.reference,analytic_account_id:0
-msgid "Analytic account for the write-off"
-msgstr "Konto odpisov"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,analytic_account_id:0
-#: field:easy.reconcile.base,analytic_account_id:0
-#: field:easy.reconcile.options,analytic_account_id:0
-#: field:easy.reconcile.simple,analytic_account_id:0
-#: field:easy.reconcile.simple.name,analytic_account_id:0
-#: field:easy.reconcile.simple.partner,analytic_account_id:0
-#: field:easy.reconcile.simple.reference,analytic_account_id:0
-msgid "Analytic_account"
-msgstr "Analitični konto"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_tree
-msgid "Automatic Easy Reconcile"
-msgstr "Samodejno preprosto usklajevanje"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_form
-#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_tree
-#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
-msgid "Automatic Easy Reconcile History"
-msgstr "Zgodovina samodejnih preprostih usklajevanj"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile.method:account_easy_reconcile.account_easy_reconcile_method_form
-#: view:account.easy.reconcile.method:account_easy_reconcile.account_easy_reconcile_method_tree
-msgid "Automatic Easy Reconcile Method"
-msgstr "Metoda samodejne preproste uskladitve"
-
-#. module: account_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_res_company
-msgid "Companies"
-msgstr "Družbe"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,company_id:0
-#: field:account.easy.reconcile.method,company_id:0
-#: field:easy.reconcile.history,company_id:0
-msgid "Company"
-msgstr "Družba"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-msgid "Configuration"
-msgstr "Nastavitve"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,create_uid:0
-#: field:account.easy.reconcile.method,create_uid:0
-#: field:easy.reconcile.history,create_uid:0
-#: field:easy.reconcile.simple.name,create_uid:0
-#: field:easy.reconcile.simple.partner,create_uid:0
-#: field:easy.reconcile.simple.reference,create_uid:0
-msgid "Created by"
-msgstr "Ustvaril"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,create_date:0
-#: field:account.easy.reconcile.method,create_date:0
-#: field:easy.reconcile.history,create_date:0
-#: field:easy.reconcile.simple.name,create_date:0
-#: field:easy.reconcile.simple.partner,create_date:0
-#: field:easy.reconcile.simple.reference,create_date:0
-msgid "Created on"
-msgstr "Ustvarjeno"
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
-msgid "Date"
-msgstr "Datum"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,date_base_on:0
-#: field:easy.reconcile.base,date_base_on:0
-#: field:easy.reconcile.options,date_base_on:0
-#: field:easy.reconcile.simple,date_base_on:0
-#: field:easy.reconcile.simple.name,date_base_on:0
-#: field:easy.reconcile.simple.partner,date_base_on:0
-#: field:easy.reconcile.simple.reference,date_base_on:0
-msgid "Date of reconciliation"
-msgstr "Datum uskladitve"
-
-#. module: account_easy_reconcile
-#: help:account.easy.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_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_tree
-msgid "Display items partially reconciled on the last run"
-msgstr "Prikaz delno usklajenih postavk po zadnjem zagonu"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_tree
-msgid "Display items reconciled on the last run"
-msgstr "Prikaz usklajenih postavk po zadnjem zagonu"
-
-#. module: account_easy_reconcile
-#: model:ir.actions.act_window,name:account_easy_reconcile.action_account_easy_reconcile
-#: model:ir.ui.menu,name:account_easy_reconcile.menu_easy_reconcile
-msgid "Easy Automatic Reconcile"
-msgstr "Samodejno preprosto usklajevanje"
-
-#. module: account_easy_reconcile
-#: model:ir.actions.act_window,name:account_easy_reconcile.action_easy_reconcile_history
-msgid "Easy Automatic Reconcile History"
-msgstr "Zgodovina samodejnih preprostih usklajevanj"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,filter:0
-#: field:easy.reconcile.base,filter:0 field:easy.reconcile.options,filter:0
-#: field:easy.reconcile.simple,filter:0
-#: field:easy.reconcile.simple.name,filter:0
-#: field:easy.reconcile.simple.partner,filter:0
-#: field:easy.reconcile.simple.reference,filter:0
-msgid "Filter"
-msgstr "Filter"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,message_follower_ids:0
-msgid "Followers"
-msgstr "Sledilci"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,income_exchange_account_id:0
-#: field:easy.reconcile.base,income_exchange_account_id:0
-#: field:easy.reconcile.options,income_exchange_account_id:0
-#: field:easy.reconcile.simple,income_exchange_account_id:0
-#: field:easy.reconcile.simple.name,income_exchange_account_id:0
-#: field:easy.reconcile.simple.partner,income_exchange_account_id:0
-#: field:easy.reconcile.simple.reference,income_exchange_account_id:0
-msgid "Gain Exchange Rate Account"
-msgstr "Konto menjalnega tečaja dobička"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-msgid "Go to partial reconciled items"
-msgstr "Pojdi na delno usklajene postavke"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_form
-#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_tree
-msgid "Go to partially reconciled items"
-msgstr "Pojdi na delno usklajene postavke"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_form
-#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_tree
-msgid "Go to reconciled items"
-msgstr "Pojdi na usklajene postavke"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-msgid "Go to unreconciled items"
-msgstr "Pojdi na neusklajene postavke"
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
-msgid "Group By..."
-msgstr "Združi po..."
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-#: field:account.easy.reconcile,history_ids:0
-msgid "History"
-msgstr "Zgodovina"
-
-#. module: account_easy_reconcile
-#: model:ir.actions.act_window,name:account_easy_reconcile.act_easy_reconcile_to_history
-msgid "History Details"
-msgstr "Podrobnosti o zgodovini"
-
-#. module: account_easy_reconcile
-#: help:account.easy.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_easy_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_easy_reconcile
-#: field:account.easy.reconcile,id:0 field:account.easy.reconcile.method,id:0
-#: field:easy.reconcile.base,id:0 field:easy.reconcile.history,id:0
-#: field:easy.reconcile.options,id:0 field:easy.reconcile.simple,id:0
-#: field:easy.reconcile.simple.name,id:0
-#: field:easy.reconcile.simple.partner,id:0
-#: field:easy.reconcile.simple.reference,id:0
-msgid "ID"
-msgstr "ID"
-
-#. module: account_easy_reconcile
-#: help:account.easy.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_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-msgid "Information"
-msgstr "Informacije"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,message_is_follower:0
-msgid "Is a Follower"
-msgstr "Je sledilec"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,journal_id:0
-#: field:easy.reconcile.base,journal_id:0
-#: field:easy.reconcile.options,journal_id:0
-#: field:easy.reconcile.simple,journal_id:0
-#: field:easy.reconcile.simple.name,journal_id:0
-#: field:easy.reconcile.simple.partner,journal_id:0
-#: field:easy.reconcile.simple.reference,journal_id:0
-msgid "Journal"
-msgstr "Dnevnik"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,message_last_post:0
-msgid "Last Message Date"
-msgstr "Datum zadnjega sporočila"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,write_uid:0
-#: field:account.easy.reconcile.method,write_uid:0
-#: field:easy.reconcile.history,write_uid:0
-#: field:easy.reconcile.simple.name,write_uid:0
-#: field:easy.reconcile.simple.partner,write_uid:0
-#: field:easy.reconcile.simple.reference,write_uid:0
-msgid "Last Updated by"
-msgstr "Zadnji posodobil"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,write_date:0
-#: field:account.easy.reconcile.method,write_date:0
-#: field:easy.reconcile.history,write_date:0
-#: field:easy.reconcile.simple.name,write_date:0
-#: field:easy.reconcile.simple.partner,write_date:0
-#: field:easy.reconcile.simple.reference,write_date:0
-msgid "Last Updated on"
-msgstr "Zadnjič posodobljeno"
-
-#. module: account_easy_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_easy_reconcile
-#: field:account.easy.reconcile.method,expense_exchange_account_id:0
-#: field:easy.reconcile.base,expense_exchange_account_id:0
-#: field:easy.reconcile.options,expense_exchange_account_id:0
-#: field:easy.reconcile.simple,expense_exchange_account_id:0
-#: field:easy.reconcile.simple.name,expense_exchange_account_id:0
-#: field:easy.reconcile.simple.partner,expense_exchange_account_id:0
-#: field:easy.reconcile.simple.reference,expense_exchange_account_id:0
-msgid "Loss Exchange Rate Account"
-msgstr "Konto menjalnega tečaja izgube"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_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_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_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_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_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_easy_reconcile
-#: field:account.easy.reconcile,message_ids:0
-msgid "Messages"
-msgstr "Sporočila"
-
-#. module: account_easy_reconcile
-#: help:account.easy.reconcile,message_ids:0
-msgid "Messages and communication history"
-msgstr "Kronologija sporočil in komunikacij"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,reconcile_method:0
-msgid "Method"
-msgstr "Metoda"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,name:0
-msgid "Name"
-msgstr "Naziv"
-
-#. module: account_easy_reconcile
-#: view:account.config.settings:account_easy_reconcile.view_account_config
-msgid "Options"
-msgstr "Opcije"
-
-#. module: account_easy_reconcile
-#: code:addons/account_easy_reconcile/easy_reconcile_history.py:104
-#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_form
-#: field:easy.reconcile.history,reconcile_ids:0
-#: field:easy.reconcile.history,reconcile_partial_ids:0
-#, python-format
-msgid "Partial Reconciliations"
-msgstr "Delne uskladitve"
-
-#. module: account_easy_reconcile
-#: code:addons/account_easy_reconcile/easy_reconcile.py:334
-#, python-format
-msgid "Partial reconciled items"
-msgstr "Delno usklajene postavke"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-msgid "Profile Information"
-msgstr "Podatki o profilu"
-
-#. module: account_easy_reconcile
-#: field:easy.reconcile.history,easy_reconcile_id:0
-msgid "Reconcile Profile"
-msgstr "Usklajevalni profil"
-
-#. module: account_easy_reconcile
-#: view:account.config.settings:account_easy_reconcile.view_account_config
-msgid "Reconciliation"
-msgstr "Uskladitev"
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
-msgid "Reconciliation Profile"
-msgstr "Usklajevalni profil"
-
-#. module: account_easy_reconcile
-#: code:addons/account_easy_reconcile/easy_reconcile_history.py:100
-#: view:easy.reconcile.history:account_easy_reconcile.easy_reconcile_history_form
-#, python-format
-msgid "Reconciliations"
-msgstr "Uskladitve"
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
-msgid "Reconciliations of last 7 days"
-msgstr "Uskladitve v zadnjih 7 dneh"
-
-#. module: account_easy_reconcile
-#: field:easy.reconcile.base,partner_ids:0
-#: field:easy.reconcile.simple,partner_ids:0
-#: field:easy.reconcile.simple.name,partner_ids:0
-#: field:easy.reconcile.simple.partner,partner_ids:0
-#: field:easy.reconcile.simple.reference,partner_ids:0
-msgid "Restrict on partners"
-msgstr "Omejitev na partnerjih"
-
-#. module: account_easy_reconcile
-#: field:easy.reconcile.history,date:0
-msgid "Run date"
-msgstr "Datum zagona"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,sequence:0
-msgid "Sequence"
-msgstr "Zaporedje"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-msgid "Simple. Amount and Name"
-msgstr "Preprosto. Znesek in naziv"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-msgid "Simple. Amount and Partner"
-msgstr "Preprosto. Znesek in partner"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-msgid "Simple. Amount and Reference"
-msgstr "Preprosto. Znesek in sklic"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_tree
-msgid "Start Auto Reconcilation"
-msgstr "Zagon samodejnega usklajevanja"
-
-#. module: account_easy_reconcile
-#: view:account.easy.reconcile:account_easy_reconcile.account_easy_reconcile_form
-msgid "Start Auto Reconciliation"
-msgstr "Zagon samodejnega usklajevanja"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,message_summary:0
-msgid "Summary"
-msgstr "Povzetek"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,task_id:0
-msgid "Task"
-msgstr "Opravilo"
-
-#. module: account_easy_reconcile
-#: help:account.easy.reconcile.method,sequence:0
-msgid "The sequence field is used to order the reconcile method"
-msgstr "Polje zaporedja za razporejanje metod usklajevanja"
-
-#. module: account_easy_reconcile
-#: code:addons/account_easy_reconcile/easy_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_easy_reconcile
-#: code:addons/account_easy_reconcile/easy_reconcile.py:269
-#, python-format
-msgid "There was an error during reconciliation : %s"
-msgstr "Napaka med usklajevanjem: %s"
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
-msgid "Today"
-msgstr "Danes"
-
-#. module: account_easy_reconcile
-#: view:easy.reconcile.history:account_easy_reconcile.view_easy_reconcile_history_search
-msgid "Todays' Reconcilations"
-msgstr "Današnja usklajevanja"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,name:0
-msgid "Type"
-msgstr "Tip"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile,message_unread:0
-msgid "Unread Messages"
-msgstr "Neprebrana sporočila"
-
-#. module: account_easy_reconcile
-#: code:addons/account_easy_reconcile/easy_reconcile.py:321
-#, python-format
-msgid "Unreconciled items"
-msgstr "Neusklajene postavke"
-
-#. module: account_easy_reconcile
-#: field:account.easy.reconcile.method,write_off:0
-#: field:easy.reconcile.base,write_off:0
-#: field:easy.reconcile.options,write_off:0
-#: field:easy.reconcile.simple,write_off:0
-#: field:easy.reconcile.simple.name,write_off:0
-#: field:easy.reconcile.simple.partner,write_off:0
-#: field:easy.reconcile.simple.reference,write_off:0
-msgid "Write off allowed"
-msgstr "Dovoljen odpis"
-
-#. module: account_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile
-msgid "account easy reconcile"
-msgstr "preprosto usklajevanje konta"
-
-#. module: account_easy_reconcile
-#: view:account.config.settings:account_easy_reconcile.view_account_config
-msgid "eInvoicing & Payments"
-msgstr "Obračun in plačila"
-
-#. module: account_easy_reconcile
-#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile_method
-msgid "reconcile method for account_easy_reconcile"
-msgstr "metoda usklajevanja za preprosto usklajevanje konta"
diff --git a/account_easy_reconcile/res_config.py b/account_easy_reconcile/res_config.py
deleted file mode 100644
index 090810d3..00000000
--- a/account_easy_reconcile/res_config.py
+++ /dev/null
@@ -1,57 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# Author: Leonardo Pistone, Damien Crier
-# Copyright 2014, 2015 Camptocamp SA
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-
-from openerp import models, api, 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."
- )
-
- @api.multi
- def onchange_company_id(self, company_id):
-
- result = super(AccountConfigSettings, self).onchange_company_id(
- company_id
- )
-
- if company_id:
- company = self.env['res.company'].browse(company_id)
- result['value']['reconciliation_commit_every'] = (
- company.reconciliation_commit_every
- )
- return result
-
-
-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_easy_reconcile/res_config_view.xml b/account_easy_reconcile/res_config_view.xml
deleted file mode 100644
index 8badc32e..00000000
--- a/account_easy_reconcile/res_config_view.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-
-
- account settings
- account.config.settings
-
-
-
-
-
-
-
\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"
+" 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
-
@@ -33,11 +30,6 @@
-
-
-
-
@@ -46,12 +38,10 @@
-
+
-
@@ -67,6 +57,11 @@ The lines should have the same amount (with the write-off) and the same partner
+
+
+
+
@@ -79,17 +74,16 @@ The lines should have the same amount (with the write-off) and the same referenc
-
- account.easy.reconcile.tree
+
+ account.mass.reconcile.tree20
- account.easy.reconcile
+ account.mass.reconcile
-
+
-
-
- Easy Automatic Reconcile
+
+ Mass Automatic Reconcileir.actions.act_window
- account.easy.reconcile
+ account.mass.reconcileformtree,form
@@ -120,14 +114,14 @@ The lines should have the same amount (with the write-off) and the same referenc
-
+
-
- account.easy.reconcile.method.form
+
+ account.mass.reconcile.method.tree20
- account.easy.reconcile.method
+ account.mass.reconcile.method
-
+
@@ -136,27 +130,6 @@ The lines should have the same amount (with the write-off) and the same referenc
-
-
-
-
-
-
-
- account.easy.reconcile.method.tree
- 20
- account.easy.reconcile.method
-
-
-
-
-
-
-
-
-
-
-
@@ -164,9 +137,9 @@ The lines should have the same amount (with the write-off) and the same referenc
-
+
@@ -180,7 +153,7 @@ The lines should have the same amount (with the write-off) and the same referenc
hours-1
-
+
diff --git a/account_easy_reconcile/easy_reconcile_history_view.xml b/account_mass_reconcile/views/mass_reconcile_history_view.xml
similarity index 56%
rename from account_easy_reconcile/easy_reconcile_history_view.xml
rename to account_mass_reconcile/views/mass_reconcile_history_view.xml
index ceaf49b5..c29f7bce 100644
--- a/account_easy_reconcile/easy_reconcile_history_view.xml
+++ b/account_mass_reconcile/views/mass_reconcile_history_view.xml
@@ -1,12 +1,11 @@
-
-
+
-
- easy.reconcile.history.search
- easy.reconcile.history
+
+ mass.reconcile.history.search
+ mass.reconcile.history
-
+
@@ -16,14 +15,14 @@
/>
-
+
+ domain="[]" context="{'group_by': 'mass_reconcile_id'}"/>
@@ -31,22 +30,19 @@
-
- easy.reconcile.history.form
- easy.reconcile.history
+
+ mass.reconcile.history.form
+ mass.reconcile.history
-
\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 "
+"A matcher %s is compared with a matcher %s, the _matchers and "
+"_opposite_matchers are probably wrong"
+msgstr "A matcher %s is compared with a matcher %s, the _matchers and _opposite_matchers are probably wrong"
#. 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
+#: model:ir.actions.act_window,help:account_mass_reconcile.action_account_mass_reconcile
+msgid ""
+"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."
+msgstr "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."
+
+#. module: account_mass_reconcile
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_account
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_account_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_ref_account_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_base_account_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_account_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_name_account_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_partner_account_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_reference_account_id
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
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_method_account_lost_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_account_lost_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_ref_account_lost_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_base_account_lost_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_options_account_lost_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_account_lost_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_name_account_lost_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_partner_account_lost_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_reference_account_lost_id
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
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_method_account_profit_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_account_profit_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_ref_account_profit_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_base_account_profit_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_options_account_profit_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_account_profit_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_name_account_profit_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_partner_account_profit_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_reference_account_profit_id
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"
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_message_needaction
+msgid "Action Needed"
+msgstr "Action Needed"
#. 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"
+#: model:ir.ui.view,arch_db:account_mass_reconcile.account_mass_reconcile_form
+msgid "Advanced. Partner and Ref"
+msgstr "Advanced. Partner and Ref"
#. 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
+#: model:ir.ui.view,arch_db:account_mass_reconcile.account_mass_reconcile_form
+#: model:ir.ui.view,arch_db: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
+#: model:ir.ui.view,arch_db:account_mass_reconcile.account_mass_reconcile_form
+#: model:ir.ui.view,arch_db:account_mass_reconcile.mass_reconcile_history_form
+#: model:ir.ui.view,arch_db:account_mass_reconcile.mass_reconcile_history_tree
+#: model:ir.ui.view,arch_db: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
+#: model:ir.ui.view,arch_db:account_mass_reconcile.account_mass_reconcile_method_tree
msgid "Automatic Mass Reconcile Method"
msgstr "Automatic Mass Reconcile Method"
+#. module: account_mass_reconcile
+#: model:ir.actions.act_window,help:account_mass_reconcile.action_account_mass_reconcile
+msgid "Click to add a reconciliation profile."
+msgstr "Click to add a reconciliation profile."
+
#. 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
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_company_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_method_company_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_history_company_id
msgid "Company"
msgstr "Company"
#. module: account_mass_reconcile
-#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form
+#: model:ir.ui.view,arch_db: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
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_create_uid
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_method_create_uid
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_ref_create_uid
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_history_create_uid
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_name_create_uid
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_partner_create_uid
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_reference_create_uid
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
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_create_date
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_method_create_date
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_ref_create_date
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_history_create_date
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_name_create_date
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_partner_create_date
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_reference_create_date
msgid "Created on"
msgstr "Created on"
#. module: account_mass_reconcile
-#: view:mass.reconcile.history:account_mass_reconcile.view_mass_reconcile_history_search
+#: model:ir.ui.view,arch_db: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
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_method_date_base_on
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_date_base_on
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_ref_date_base_on
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_base_date_base_on
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_options_date_base_on
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_date_base_on
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_name_date_base_on
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_partner_date_base_on
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_reference_date_base_on
msgid "Date of reconciliation"
msgstr "Date of reconciliation"
#. module: account_mass_reconcile
-#: help:account.mass.reconcile,message_last_post:0
+#: model:ir.model.fields,help:account_mass_reconcile.field_account_mass_reconcile_message_last_post
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
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_display_name
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_method_display_name
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_display_name
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_ref_display_name
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_base_display_name
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_history_display_name
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_options_display_name
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_display_name
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_name_display_name
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_partner_display_name
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_reference_display_name
+msgid "Display Name"
+msgstr "Display Name"
+
+#. module: account_mass_reconcile
+#: model:ir.ui.view,arch_db: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
+#: model:ir.ui.view,arch_db:account_mass_reconcile.account_mass_reconcile_form
+#: model:ir.ui.view,arch_db: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.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_method_filter
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_filter
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_ref_filter
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_base_filter
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_options_filter
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_filter
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_name_filter
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_partner_filter
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_reference_filter
+msgid "Filter"
+msgstr "Filter"
+
+#. module: account_mass_reconcile
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_message_follower_ids
+msgid "Followers"
+msgstr "Followers"
+
+#. module: account_mass_reconcile
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_message_channel_ids
+msgid "Followers (Channels)"
+msgstr "Followers (Channels)"
+
+#. module: account_mass_reconcile
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_message_partner_ids
+msgid "Followers (Partners)"
+msgstr "Followers (Partners)"
+
+#. module: account_mass_reconcile
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_history_reconcile_ids
+msgid "Full Reconciliations"
+msgstr "Full Reconciliations"
+
+#. module: account_mass_reconcile
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_method_income_exchange_account_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_income_exchange_account_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_ref_income_exchange_account_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_base_income_exchange_account_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_options_income_exchange_account_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_income_exchange_account_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_name_income_exchange_account_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_partner_income_exchange_account_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_reference_income_exchange_account_id
+msgid "Gain Exchange Rate Account"
+msgstr "Gain Exchange Rate Account"
+
+#. module: account_mass_reconcile
+#: model:ir.ui.view,arch_db:account_mass_reconcile.account_mass_reconcile_form
+#: model:ir.ui.view,arch_db:account_mass_reconcile.mass_reconcile_history_form
+#: model:ir.ui.view,arch_db:account_mass_reconcile.mass_reconcile_history_tree
+msgid "Go to reconciled items"
+msgstr "Go to reconciled items"
+
+#. module: account_mass_reconcile
+#: model:ir.ui.view,arch_db:account_mass_reconcile.account_mass_reconcile_form
+msgid "Go to unreconciled items"
+msgstr "Go to unreconciled items"
+
+#. module: account_mass_reconcile
+#: model:ir.ui.view,arch_db:account_mass_reconcile.view_mass_reconcile_history_search
+msgid "Group By..."
+msgstr "Group By..."
+
+#. module: account_mass_reconcile
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_history_ids
+#: model:ir.ui.view,arch_db:account_mass_reconcile.account_mass_reconcile_form
+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
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_config_settings_reconciliation_commit_every
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_res_company_reconciliation_commit_every
+msgid "How often to commit when performing automatic reconciliation."
+msgstr "How often to commit when performing automatic reconciliation."
+
+#. module: account_mass_reconcile
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_method_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_ref_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_base_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_history_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_options_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_name_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_partner_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_reference_id
+msgid "ID"
+msgstr "ID"
+
+#. module: account_mass_reconcile
+#: model:ir.model.fields,help:account_mass_reconcile.field_account_mass_reconcile_message_unread
+msgid "If checked new messages require your attention."
+msgstr "If checked new messages require your attention."
+
+#. module: account_mass_reconcile
+#: model:ir.model.fields,help:account_mass_reconcile.field_account_mass_reconcile_message_needaction
+msgid "If checked, new messages require your attention."
+msgstr "If checked, new messages require your attention."
+
+#. module: account_mass_reconcile
+#: model:ir.ui.view,arch_db:account_mass_reconcile.account_mass_reconcile_form
+msgid "Information"
+msgstr "Information"
+
+#. module: account_mass_reconcile
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_message_is_follower
+msgid "Is Follower"
+msgstr "Is Follower"
+
+#. module: account_mass_reconcile
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_method_journal_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_journal_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_ref_journal_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_base_journal_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_options_journal_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_journal_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_name_journal_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_partner_journal_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_reference_journal_id
+msgid "Journal"
+msgstr "Journal"
+
+#. module: account_mass_reconcile
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_message_last_post
+msgid "Last Message Date"
+msgstr "Last Message Date"
+
+#. module: account_mass_reconcile
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile___last_update
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_method___last_update
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced___last_update
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_ref___last_update
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_base___last_update
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_history___last_update
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_options___last_update
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple___last_update
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_name___last_update
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_partner___last_update
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_reference___last_update
+msgid "Last Modified on"
+msgstr "Last Modified on"
+
+#. module: account_mass_reconcile
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_method_write_uid
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_write_uid
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_ref_write_uid
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_history_write_uid
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_name_write_uid
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_partner_write_uid
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_reference_write_uid
+msgid "Last Updated by"
+msgstr "Last Updated by"
+
+#. module: account_mass_reconcile
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_method_write_date
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_write_date
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_ref_write_date
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_history_write_date
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_name_write_date
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_partner_write_date
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_reference_write_date
+msgid "Last Updated on"
+msgstr "Last Updated on"
+
+#. module: account_mass_reconcile
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_last_history
+msgid "Last history"
+msgstr "Last history"
+
+#. module: account_mass_reconcile
+#: model:ir.model.fields,help:account_mass_reconcile.field_account_config_settings_reconciliation_commit_every
+#: model:ir.model.fields,help:account_mass_reconcile.field_res_company_reconciliation_commit_every
+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
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_method_expense_exchange_account_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_expense_exchange_account_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_ref_expense_exchange_account_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_base_expense_exchange_account_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_options_expense_exchange_account_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_expense_exchange_account_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_name_expense_exchange_account_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_partner_expense_exchange_account_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_reference_expense_exchange_account_id
+msgid "Loss Exchange Rate Account"
+msgstr "Loss Exchange Rate Account"
+
#. 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
@@ -200,167 +405,15 @@ 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
+#: model:ir.ui.view,arch_db:account_mass_reconcile.account_mass_reconcile_form
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."
+"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
-#: 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
+#: model:ir.ui.view,arch_db: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) "
@@ -368,7 +421,7 @@ msgid ""
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
+#: model:ir.ui.view,arch_db: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) "
@@ -376,7 +429,7 @@ msgid ""
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
+#: model:ir.ui.view,arch_db: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) "
@@ -384,186 +437,191 @@ msgid ""
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
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_message_ids
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
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_reconcile_method
msgid "Method"
msgstr "Method"
#. module: account_mass_reconcile
-#: field:account.mass.reconcile,name:0
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_name
msgid "Name"
msgstr "Name"
#. module: account_mass_reconcile
-#: view:account.config.settings:account_mass_reconcile.view_account_config
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_message_needaction_counter
+msgid "Number of Actions"
+msgstr "Number of Actions"
+
+#. module: account_mass_reconcile
+#: model:ir.model.fields,help:account_mass_reconcile.field_account_mass_reconcile_message_needaction_counter
+msgid "Number of messages which requires an action"
+msgstr "Number of messages which requires an action"
+
+#. module: account_mass_reconcile
+#: model:ir.model.fields,help:account_mass_reconcile.field_account_mass_reconcile_message_unread_counter
+msgid "Number of unread messages"
+msgstr "Number of unread messages"
+
+#. module: account_mass_reconcile
+#: model:ir.ui.view,arch_db: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
+#: model:ir.ui.view,arch_db: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
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_history_mass_reconcile_id
msgid "Reconcile Profile"
msgstr "Reconcile Profile"
#. module: account_mass_reconcile
-#: view:account.config.settings:account_mass_reconcile.view_account_config
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_history_reconcile_line_ids
+msgid "Reconciled Items"
+msgstr "Reconciled Items"
+
+#. module: account_mass_reconcile
+#: model:ir.ui.view,arch_db: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
+#: model:ir.ui.view,arch_db: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
+#: code:addons/account_mass_reconcile/models/mass_reconcile_history.py:59
+#: model:ir.ui.view,arch_db: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
+#: model:ir.ui.view,arch_db: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
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_partner_ids
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_ref_partner_ids
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_base_partner_ids
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_name_partner_ids
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_partner_ids
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_partner_partner_ids
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_reference_partner_ids
msgid "Restrict on partners"
msgstr "Restrict on partners"
#. module: account_mass_reconcile
-#: field:mass.reconcile.history,date:0
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_history_date
msgid "Run date"
msgstr "Run date"
#. module: account_mass_reconcile
-#: field:account.mass.reconcile.method,sequence:0
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_method_sequence
msgid "Sequence"
msgstr "Sequence"
#. module: account_mass_reconcile
-#: view:account.mass.reconcile:account_mass_reconcile.account_mass_reconcile_form
+#: model:ir.ui.view,arch_db: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
+#: model:ir.ui.view,arch_db: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
+#: model:ir.ui.view,arch_db: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
+#: model:ir.ui.view,arch_db: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
+#: model:ir.ui.view,arch_db: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
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_method_task_id
msgid "Task"
msgstr "Task"
#. module: account_mass_reconcile
-#: help:account.mass.reconcile.method,sequence:0
+#: model:ir.model.fields,help:account_mass_reconcile.field_account_mass_reconcile_method_sequence
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
+#: code:addons/account_mass_reconcile/models/mass_reconcile.py:245
#, 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
+#: code:addons/account_mass_reconcile/models/mass_reconcile.py:221
#, 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
+#: model:ir.ui.view,arch_db: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
+#: model:ir.ui.view,arch_db: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
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_method_name
msgid "Type"
msgstr "Type"
#. module: account_mass_reconcile
-#: field:account.mass.reconcile,message_unread:0
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_message_unread
msgid "Unread Messages"
msgstr "Unread Messages"
#. module: account_mass_reconcile
-#: code:addons/account_mass_reconcile/mass_reconcile.py:321
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_message_unread_counter
+msgid "Unread Messages Counter"
+msgstr "Unread Messages Counter"
+
+#. module: account_mass_reconcile
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_unreconciled_count
+msgid "Unreconciled Items"
+msgstr "Unreconciled Items"
+
+#. module: account_mass_reconcile
+#: code:addons/account_mass_reconcile/models/mass_reconcile.py:271
#, 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
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_method_write_off
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_ref_write_off
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_write_off
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_base_write_off
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_options_write_off
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_name_write_off
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_partner_write_off
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_reference_write_off
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_write_off
msgid "Write off allowed"
msgstr "Write off allowed"
@@ -573,24 +631,9 @@ 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"
+#: model:ir.model,name:account_mass_reconcile.model_account_config_settings
+msgid "account.config.settings"
+msgstr "account.config.settings"
#. module: account_mass_reconcile
#: model:ir.model,name:account_mass_reconcile.model_mass_reconcile_advanced
@@ -601,3 +644,43 @@ msgstr "mass.reconcile.advanced"
#: model:ir.model,name:account_mass_reconcile.model_mass_reconcile_advanced_ref
msgid "mass.reconcile.advanced.ref"
msgstr "mass.reconcile.advanced.ref"
+
+#. module: account_mass_reconcile
+#: model:ir.model,name:account_mass_reconcile.model_mass_reconcile_base
+msgid "mass.reconcile.base"
+msgstr "mass.reconcile.base"
+
+#. module: account_mass_reconcile
+#: model:ir.model,name:account_mass_reconcile.model_mass_reconcile_history
+msgid "mass.reconcile.history"
+msgstr "mass.reconcile.history"
+
+#. module: account_mass_reconcile
+#: model:ir.model,name:account_mass_reconcile.model_mass_reconcile_options
+msgid "mass.reconcile.options"
+msgstr "mass.reconcile.options"
+
+#. module: account_mass_reconcile
+#: model:ir.model,name:account_mass_reconcile.model_mass_reconcile_simple
+msgid "mass.reconcile.simple"
+msgstr "mass.reconcile.simple"
+
+#. module: account_mass_reconcile
+#: model:ir.model,name:account_mass_reconcile.model_mass_reconcile_simple_name
+msgid "mass.reconcile.simple.name"
+msgstr "mass.reconcile.simple.name"
+
+#. module: account_mass_reconcile
+#: model:ir.model,name:account_mass_reconcile.model_mass_reconcile_simple_partner
+msgid "mass.reconcile.simple.partner"
+msgstr "mass.reconcile.simple.partner"
+
+#. module: account_mass_reconcile
+#: model:ir.model,name:account_mass_reconcile.model_mass_reconcile_simple_reference
+msgid "mass.reconcile.simple.reference"
+msgstr "mass.reconcile.simple.reference"
+
+#. 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"
diff --git a/account_mass_reconcile/i18n/en_GB.po b/account_mass_reconcile/i18n/en_GB.po
new file mode 100644
index 00000000..1b8e3707
--- /dev/null
+++ b/account_mass_reconcile/i18n/en_GB.po
@@ -0,0 +1,607 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * account_mass_reconcile
+#
+# Translators:
+# OCA Transbot , 2017
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-03-24 03:37+0000\n"
+"PO-Revision-Date: 2017-03-24 03:37+0000\n"
+"Last-Translator: OCA Transbot , 2017\n"
+"Language-Team: English (United Kingdom) (https://www.transifex.com/oca/teams/23907/en_GB/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: en_GB\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: account_mass_reconcile
+#: model:ir.ui.view,arch_db:account_mass_reconcile.view_mass_reconcile_history_search
+msgid "7 Days"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: code:addons/account_mass_reconcile/models/base_advanced_reconciliation.py:159
+#, python-format
+msgid ""
+"A matcher %s is compared with a matcher %s, the _matchers and "
+"_opposite_matchers are probably wrong"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.actions.act_window,help:account_mass_reconcile.action_account_mass_reconcile
+msgid ""
+"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."
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_account
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_account_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_ref_account_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_base_account_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_account_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_name_account_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_partner_account_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_reference_account_id
+msgid "Account"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_method_account_lost_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_account_lost_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_ref_account_lost_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_base_account_lost_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_options_account_lost_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_account_lost_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_name_account_lost_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_partner_account_lost_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_reference_account_lost_id
+msgid "Account Lost"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_method_account_profit_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_account_profit_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_ref_account_profit_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_base_account_profit_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_options_account_profit_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_account_profit_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_name_account_profit_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_partner_account_profit_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_reference_account_profit_id
+msgid "Account Profit"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.ui.view,arch_db:account_mass_reconcile.account_mass_reconcile_form
+msgid "Advanced. Partner and Ref"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.ui.view,arch_db:account_mass_reconcile.account_mass_reconcile_form
+#: model:ir.ui.view,arch_db:account_mass_reconcile.account_mass_reconcile_tree
+msgid "Automatic Mass Reconcile"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.ui.view,arch_db:account_mass_reconcile.account_mass_reconcile_form
+#: model:ir.ui.view,arch_db:account_mass_reconcile.mass_reconcile_history_form
+#: model:ir.ui.view,arch_db:account_mass_reconcile.mass_reconcile_history_tree
+#: model:ir.ui.view,arch_db:account_mass_reconcile.view_mass_reconcile_history_search
+msgid "Automatic Mass Reconcile History"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.ui.view,arch_db:account_mass_reconcile.account_mass_reconcile_method_tree
+msgid "Automatic Mass Reconcile Method"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.actions.act_window,help:account_mass_reconcile.action_account_mass_reconcile
+msgid "Click to add a reconciliation profile."
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.model,name:account_mass_reconcile.model_res_company
+msgid "Companies"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_company_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_method_company_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_history_company_id
+msgid "Company"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.ui.view,arch_db:account_mass_reconcile.account_mass_reconcile_form
+msgid "Configuration"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_create_uid
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_method_create_uid
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_ref_create_uid
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_history_create_uid
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_name_create_uid
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_partner_create_uid
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_reference_create_uid
+msgid "Created by"
+msgstr "Created by"
+
+#. module: account_mass_reconcile
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_create_date
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_method_create_date
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_ref_create_date
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_history_create_date
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_name_create_date
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_partner_create_date
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_reference_create_date
+msgid "Created on"
+msgstr "Created on"
+
+#. module: account_mass_reconcile
+#: model:ir.ui.view,arch_db:account_mass_reconcile.view_mass_reconcile_history_search
+msgid "Date"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_method_date_base_on
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_date_base_on
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_ref_date_base_on
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_base_date_base_on
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_options_date_base_on
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_date_base_on
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_name_date_base_on
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_partner_date_base_on
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_reference_date_base_on
+msgid "Date of reconciliation"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_display_name
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_method_display_name
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_display_name
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_ref_display_name
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_base_display_name
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_history_display_name
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_options_display_name
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_display_name
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_name_display_name
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_partner_display_name
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_reference_display_name
+msgid "Display Name"
+msgstr "Display Name"
+
+#. module: account_mass_reconcile
+#: model:ir.ui.view,arch_db:account_mass_reconcile.account_mass_reconcile_form
+#: model:ir.ui.view,arch_db:account_mass_reconcile.account_mass_reconcile_tree
+msgid "Display items reconciled on the last run"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_method_filter
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_filter
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_ref_filter
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_base_filter
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_options_filter
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_filter
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_name_filter
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_partner_filter
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_reference_filter
+msgid "Filter"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_history_reconcile_ids
+msgid "Full Reconciliations"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_method_income_exchange_account_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_income_exchange_account_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_ref_income_exchange_account_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_base_income_exchange_account_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_options_income_exchange_account_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_income_exchange_account_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_name_income_exchange_account_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_partner_income_exchange_account_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_reference_income_exchange_account_id
+msgid "Gain Exchange Rate Account"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.ui.view,arch_db:account_mass_reconcile.account_mass_reconcile_form
+#: model:ir.ui.view,arch_db:account_mass_reconcile.mass_reconcile_history_form
+#: model:ir.ui.view,arch_db:account_mass_reconcile.mass_reconcile_history_tree
+msgid "Go to reconciled items"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.ui.view,arch_db:account_mass_reconcile.account_mass_reconcile_form
+msgid "Go to unreconciled items"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.ui.view,arch_db:account_mass_reconcile.view_mass_reconcile_history_search
+msgid "Group By..."
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_history_ids
+#: model:ir.ui.view,arch_db:account_mass_reconcile.account_mass_reconcile_form
+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
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_config_settings_reconciliation_commit_every
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_res_company_reconciliation_commit_every
+msgid "How often to commit when performing automatic reconciliation."
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_method_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_ref_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_base_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_history_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_options_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_name_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_partner_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_reference_id
+msgid "ID"
+msgstr "ID"
+
+#. module: account_mass_reconcile
+#: model:ir.ui.view,arch_db:account_mass_reconcile.account_mass_reconcile_form
+msgid "Information"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_method_journal_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_journal_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_ref_journal_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_base_journal_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_options_journal_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_journal_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_name_journal_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_partner_journal_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_reference_journal_id
+msgid "Journal"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile___last_update
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_method___last_update
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced___last_update
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_ref___last_update
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_base___last_update
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_history___last_update
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_options___last_update
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple___last_update
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_name___last_update
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_partner___last_update
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_reference___last_update
+msgid "Last Modified on"
+msgstr "Last Modified on"
+
+#. module: account_mass_reconcile
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_method_write_uid
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_write_uid
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_ref_write_uid
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_history_write_uid
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_name_write_uid
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_partner_write_uid
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_reference_write_uid
+msgid "Last Updated by"
+msgstr "Last Updated by"
+
+#. module: account_mass_reconcile
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_method_write_date
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_write_date
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_ref_write_date
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_history_write_date
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_name_write_date
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_partner_write_date
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_reference_write_date
+msgid "Last Updated on"
+msgstr "Last Updated on"
+
+#. module: account_mass_reconcile
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_last_history
+msgid "Last history"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.model.fields,help:account_mass_reconcile.field_account_config_settings_reconciliation_commit_every
+#: model:ir.model.fields,help:account_mass_reconcile.field_res_company_reconciliation_commit_every
+msgid "Leave zero to commit only at the end of the process."
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_method_expense_exchange_account_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_expense_exchange_account_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_ref_expense_exchange_account_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_base_expense_exchange_account_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_options_expense_exchange_account_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_expense_exchange_account_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_name_expense_exchange_account_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_partner_expense_exchange_account_id
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_reference_expense_exchange_account_id
+msgid "Loss Exchange Rate Account"
+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
+#: model:ir.ui.view,arch_db:account_mass_reconcile.account_mass_reconcile_form
+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
+#: model:ir.ui.view,arch_db: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
+#: model:ir.ui.view,arch_db: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
+#: model:ir.ui.view,arch_db: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
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_reconcile_method
+msgid "Method"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_name
+msgid "Name"
+msgstr "Name"
+
+#. module: account_mass_reconcile
+#: model:ir.ui.view,arch_db:account_mass_reconcile.view_account_config
+msgid "Options"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.ui.view,arch_db:account_mass_reconcile.account_mass_reconcile_form
+msgid "Profile Information"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_history_mass_reconcile_id
+msgid "Reconcile Profile"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_history_reconcile_line_ids
+msgid "Reconciled Items"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.ui.view,arch_db:account_mass_reconcile.view_account_config
+msgid "Reconciliation"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.ui.view,arch_db:account_mass_reconcile.view_mass_reconcile_history_search
+msgid "Reconciliation Profile"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: code:addons/account_mass_reconcile/models/mass_reconcile_history.py:59
+#: model:ir.ui.view,arch_db:account_mass_reconcile.mass_reconcile_history_form
+#, python-format
+msgid "Reconciliations"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.ui.view,arch_db:account_mass_reconcile.view_mass_reconcile_history_search
+msgid "Reconciliations of last 7 days"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_partner_ids
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_ref_partner_ids
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_base_partner_ids
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_name_partner_ids
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_partner_ids
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_partner_partner_ids
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_reference_partner_ids
+msgid "Restrict on partners"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_history_date
+msgid "Run date"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_method_sequence
+msgid "Sequence"
+msgstr "Sequence"
+
+#. module: account_mass_reconcile
+#: model:ir.ui.view,arch_db:account_mass_reconcile.account_mass_reconcile_form
+msgid "Simple. Amount and Name"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.ui.view,arch_db:account_mass_reconcile.account_mass_reconcile_form
+msgid "Simple. Amount and Partner"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.ui.view,arch_db:account_mass_reconcile.account_mass_reconcile_form
+msgid "Simple. Amount and Reference"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.ui.view,arch_db:account_mass_reconcile.account_mass_reconcile_tree
+msgid "Start Auto Reconcilation"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.ui.view,arch_db:account_mass_reconcile.account_mass_reconcile_form
+msgid "Start Auto Reconciliation"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_method_task_id
+msgid "Task"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.model.fields,help:account_mass_reconcile.field_account_mass_reconcile_method_sequence
+msgid "The sequence field is used to order the reconcile method"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: code:addons/account_mass_reconcile/models/mass_reconcile.py:245
+#, python-format
+msgid "There is no history of reconciled items on the task: %s."
+msgstr ""
+
+#. module: account_mass_reconcile
+#: code:addons/account_mass_reconcile/models/mass_reconcile.py:221
+#, python-format
+msgid "There was an error during reconciliation : %s"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.ui.view,arch_db:account_mass_reconcile.view_mass_reconcile_history_search
+msgid "Today"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.ui.view,arch_db:account_mass_reconcile.view_mass_reconcile_history_search
+msgid "Todays' Reconcilations"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_method_name
+msgid "Type"
+msgstr "Type"
+
+#. module: account_mass_reconcile
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_unreconciled_count
+msgid "Unreconciled Items"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: code:addons/account_mass_reconcile/models/mass_reconcile.py:271
+#, python-format
+msgid "Unreconciled items"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_account_mass_reconcile_method_write_off
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_ref_write_off
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_advanced_write_off
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_base_write_off
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_options_write_off
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_name_write_off
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_partner_write_off
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_reference_write_off
+#: model:ir.model.fields,field_description:account_mass_reconcile.field_mass_reconcile_simple_write_off
+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
+#: model:ir.model,name:account_mass_reconcile.model_account_config_settings
+msgid "account.config.settings"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.model,name:account_mass_reconcile.model_mass_reconcile_advanced
+msgid "mass.reconcile.advanced"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.model,name:account_mass_reconcile.model_mass_reconcile_advanced_ref
+msgid "mass.reconcile.advanced.ref"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.model,name:account_mass_reconcile.model_mass_reconcile_base
+msgid "mass.reconcile.base"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.model,name:account_mass_reconcile.model_mass_reconcile_history
+msgid "mass.reconcile.history"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.model,name:account_mass_reconcile.model_mass_reconcile_options
+msgid "mass.reconcile.options"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.model,name:account_mass_reconcile.model_mass_reconcile_simple
+msgid "mass.reconcile.simple"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.model,name:account_mass_reconcile.model_mass_reconcile_simple_name
+msgid "mass.reconcile.simple.name"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.model,name:account_mass_reconcile.model_mass_reconcile_simple_partner
+msgid "mass.reconcile.simple.partner"
+msgstr ""
+
+#. module: account_mass_reconcile
+#: model:ir.model,name:account_mass_reconcile.model_mass_reconcile_simple_reference
+msgid "mass.reconcile.simple.reference"
+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 ""
diff --git a/account_mass_reconcile/i18n/es.po b/account_mass_reconcile/i18n/es.po
index f545b76c..3859488c 100644
--- a/account_mass_reconcile/i18n/es.po
+++ b/account_mass_reconcile/i18n/es.po
@@ -3,15 +3,15 @@
# * account_mass_reconcile
#
# Translators:
-# FIRST AUTHOR , 2014
+# OCA Transbot , 2017
msgid ""
msgstr ""
-"Project-Id-Version: bank-statement-reconcile (8.0)\n"
+"Project-Id-Version: Odoo Server 10.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"
+"POT-Creation-Date: 2017-03-24 03:37+0000\n"
+"PO-Revision-Date: 2017-03-24 03:37+0000\n"
+"Last-Translator: OCA Transbot , 2017\n"
+"Language-Team: Spanish (https://www.transifex.com/oca/teams/23907/es/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
@@ -19,175 +19,330 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: account_mass_reconcile
-#: view:mass.reconcile.history:account_mass_reconcile.view_mass_reconcile_history_search
+#: model:ir.ui.view,arch_db: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
+#: code:addons/account_mass_reconcile/models/base_advanced_reconciliation.py:159
+#, python-format
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"
-" 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"
-" 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"
-" 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"
-"