Merge lp:~camptocamp/banking-addons/bank-statement-reconcile-7.0_voucher_killer_vre into lp:banking-addons

Proposed by Vincent Renaville@camptocamp
Status: Superseded
Proposed branch: lp:~camptocamp/banking-addons/bank-statement-reconcile-7.0_voucher_killer_vre
Merge into: lp:banking-addons
Diff against target: 13731 lines (+12871/-0)
160 files modified
account_advanced_reconcile/__init__.py (+24/-0)
account_advanced_reconcile/__openerp__.py (+83/-0)
account_advanced_reconcile/advanced_reconciliation.py (+118/-0)
account_advanced_reconcile/base_advanced_reconciliation.py (+272/-0)
account_advanced_reconcile/easy_reconcile.py (+36/-0)
account_advanced_reconcile/easy_reconcile_view.xml (+19/-0)
account_advanced_reconcile/i18n/account_advanced_reconcile.pot (+90/-0)
account_advanced_reconcile/i18n/fr.po (+98/-0)
account_advanced_reconcile_transaction_ref/__init__.py (+24/-0)
account_advanced_reconcile_transaction_ref/__openerp__.py (+40/-0)
account_advanced_reconcile_transaction_ref/account.py (+54/-0)
account_advanced_reconcile_transaction_ref/advanced_reconciliation.py (+43/-0)
account_advanced_reconcile_transaction_ref/base_advanced_reconciliation.py (+46/-0)
account_advanced_reconcile_transaction_ref/easy_reconcile.py (+37/-0)
account_advanced_reconcile_transaction_ref/easy_reconcile_view.xml (+19/-0)
account_advanced_reconcile_transaction_ref/i18n/account_advanced_reconcile_transaction_ref.pot (+97/-0)
account_advanced_reconcile_transaction_ref/i18n/fr.po (+106/-0)
account_easy_reconcile/__init__.py (+25/-0)
account_easy_reconcile/__openerp__.py (+66/-0)
account_easy_reconcile/base_reconciliation.py (+208/-0)
account_easy_reconcile/easy_reconcile.py (+338/-0)
account_easy_reconcile/easy_reconcile.xml (+162/-0)
account_easy_reconcile/easy_reconcile_history.py (+153/-0)
account_easy_reconcile/easy_reconcile_history_view.xml (+98/-0)
account_easy_reconcile/i18n/account_easy_reconcile.pot (+406/-0)
account_easy_reconcile/i18n/es.po (+415/-0)
account_easy_reconcile/i18n/fr.po (+432/-0)
account_easy_reconcile/security/ir.model.access.csv (+15/-0)
account_easy_reconcile/security/ir_rule.xml (+25/-0)
account_easy_reconcile/simple_reconciliation.py (+120/-0)
account_statement_bankaccount_completion/__init__.py (+21/-0)
account_statement_bankaccount_completion/__openerp__.py (+48/-0)
account_statement_bankaccount_completion/data.xml (+12/-0)
account_statement_bankaccount_completion/i18n/account_statement_bankaccount_completion.pot (+43/-0)
account_statement_bankaccount_completion/statement.py (+96/-0)
account_statement_bankaccount_completion/tests/__init__.py (+27/-0)
account_statement_bankaccount_completion/tests/test_bankaccount_completion.py (+91/-0)
account_statement_base_completion/__init__.py (+23/-0)
account_statement_base_completion/__openerp__.py (+77/-0)
account_statement_base_completion/data.xml (+31/-0)
account_statement_base_completion/i18n/ab.po (+216/-0)
account_statement_base_completion/i18n/account_statement_base_completion.pot (+199/-0)
account_statement_base_completion/i18n/fr.po (+216/-0)
account_statement_base_completion/partner.py (+38/-0)
account_statement_base_completion/partner_view.xml (+22/-0)
account_statement_base_completion/security/ir.model.access.csv (+3/-0)
account_statement_base_completion/statement.py (+576/-0)
account_statement_base_completion/statement_view.xml (+104/-0)
account_statement_base_completion/test/completion_test.yml (+87/-0)
account_statement_base_completion/test/invoice.yml (+32/-0)
account_statement_base_completion/test/partner.yml (+5/-0)
account_statement_base_completion/test/supplier_invoice.yml (+31/-0)
account_statement_base_completion/tests/__init__.py (+27/-0)
account_statement_base_completion/tests/test_base_completion.py (+95/-0)
account_statement_base_import/__init__.py (+23/-0)
account_statement_base_import/__openerp__.py (+69/-0)
account_statement_base_import/data/statement.csv (+4/-0)
account_statement_base_import/i18n/account_statement_base_import.pot (+289/-0)
account_statement_base_import/i18n/es.po (+305/-0)
account_statement_base_import/i18n/fr.po (+303/-0)
account_statement_base_import/parser/__init__.py (+25/-0)
account_statement_base_import/parser/file_parser.py (+221/-0)
account_statement_base_import/parser/generic_file_parser.py (+74/-0)
account_statement_base_import/parser/parser.py (+222/-0)
account_statement_base_import/statement.py (+241/-0)
account_statement_base_import/statement_view.xml (+30/-0)
account_statement_base_import/wizard/__init__.py (+20/-0)
account_statement_base_import/wizard/import_statement.py (+116/-0)
account_statement_base_import/wizard/import_statement_view.xml (+42/-0)
account_statement_commission/__init__.py (+22/-0)
account_statement_commission/__openerp__.py (+47/-0)
account_statement_commission/commission.py (+72/-0)
account_statement_commission/i18n/account_statement_commission.pot (+53/-0)
account_statement_commission/import_statement_view.xml (+18/-0)
account_statement_commission/statement_view.xml (+21/-0)
account_statement_completion_voucher/__init__.py (+20/-0)
account_statement_completion_voucher/__openerp__.py (+46/-0)
account_statement_completion_voucher/statement_view.xml (+21/-0)
account_statement_ext/__init__.py (+25/-0)
account_statement_ext/__openerp__.py (+89/-0)
account_statement_ext/account.py (+41/-0)
account_statement_ext/account_view.xml (+17/-0)
account_statement_ext/i18n/fr.po (+301/-0)
account_statement_ext/report.xml (+25/-0)
account_statement_ext/report/__init__.py (+26/-0)
account_statement_ext/report/bank_statement_report.mako (+70/-0)
account_statement_ext/report/bank_statement_report.py (+71/-0)
account_statement_ext/report/bank_statement_webkit_header.xml (+180/-0)
account_statement_ext/security/ir.model.access.csv (+3/-0)
account_statement_ext/security/ir_rule.xml (+10/-0)
account_statement_ext/statement.py (+745/-0)
account_statement_ext/statement_view.xml (+160/-0)
account_statement_ext/test/test_profile_related_fields.yml (+78/-0)
account_statement_ext/voucher.py (+49/-0)
account_statement_ext_point_of_sale/__init__.py (+22/-0)
account_statement_ext_point_of_sale/__openerp__.py (+43/-0)
account_statement_ext_point_of_sale/point_of_sale.py (+123/-0)
account_statement_ext_voucher/__init__.py (+20/-0)
account_statement_ext_voucher/__openerp__.py (+52/-0)
account_statement_ext_voucher/statement_voucher.py (+51/-0)
account_statement_no_invoice_import/__init__.py (+22/-0)
account_statement_no_invoice_import/__openerp__.py (+40/-0)
account_statement_no_invoice_import/statement_view.xml (+21/-0)
account_statement_ofx_import/__init__.py (+22/-0)
account_statement_ofx_import/__openerp__.py (+49/-0)
account_statement_ofx_import/i18n/account_statement_ofx_import.pot (+34/-0)
account_statement_ofx_import/parser/__init__.py (+22/-0)
account_statement_ofx_import/parser/ofx_parser.py (+118/-0)
account_statement_ofx_import/statement.py (+35/-0)
account_statement_one_move/__init__.py (+23/-0)
account_statement_one_move/__openerp__.py (+45/-0)
account_statement_one_move/statement.py (+225/-0)
account_statement_one_move/statement_view.xml (+26/-0)
account_statement_regex_account_completion/__init__.py (+32/-0)
account_statement_regex_account_completion/__openerp__.py (+56/-0)
account_statement_regex_account_completion/i18n/account_statement_regex_account_completion.pot (+32/-0)
account_statement_regex_account_completion/i18n/fr.po (+32/-0)
account_statement_regex_account_completion/statement.py (+75/-0)
account_statement_regex_account_completion/statement_view.xml (+21/-0)
account_statement_regex_account_completion/tests/__init__.py (+36/-0)
account_statement_regex_account_completion/tests/test_regex_account_completion.py (+91/-0)
account_statement_so_completion/__init__.py (+25/-0)
account_statement_so_completion/__openerp__.py (+52/-0)
account_statement_so_completion/data.xml (+12/-0)
account_statement_so_completion/i18n/account_statement_so_completion.pot (+28/-0)
account_statement_so_completion/statement.py (+94/-0)
account_statement_so_completion/test/completion_so_test.yml (+44/-0)
account_statement_transactionid_completion/__init__.py (+22/-0)
account_statement_transactionid_completion/__openerp__.py (+59/-0)
account_statement_transactionid_completion/data.xml (+12/-0)
account_statement_transactionid_completion/i18n/account_statement_transactionid_completion.pot (+43/-0)
account_statement_transactionid_completion/statement.py (+94/-0)
account_statement_transactionid_completion/statement_view.xml (+22/-0)
account_statement_transactionid_completion/test/completion_transactionid_test.yml (+44/-0)
account_statement_transactionid_completion/test/sale.yml (+11/-0)
account_statement_transactionid_import/__init__.py (+22/-0)
account_statement_transactionid_import/__openerp__.py (+60/-0)
account_statement_transactionid_import/data/statement.csv (+4/-0)
account_statement_transactionid_import/i18n/account_statement_transactionid_import.pot (+21/-0)
account_statement_transactionid_import/parser/__init__.py (+22/-0)
account_statement_transactionid_import/parser/transactionid_file_parser.py (+80/-0)
account_statement_transactionid_import/statement.py (+47/-0)
base_transaction_id/__init__.py (+24/-0)
base_transaction_id/__openerp__.py (+57/-0)
base_transaction_id/i18n/base_transaction_id.pot (+58/-0)
base_transaction_id/invoice.py (+36/-0)
base_transaction_id/invoice_view.xml (+30/-0)
base_transaction_id/sale.py (+43/-0)
base_transaction_id/sale_view.xml (+21/-0)
base_transaction_id/stock.py (+42/-0)
invoicing_voucher_killer/__init__.py (+20/-0)
invoicing_voucher_killer/__openerp__.py (+39/-0)
invoicing_voucher_killer/i18n/invoicing_voucher_killer.pot (+32/-0)
invoicing_voucher_killer/invoice_data.xml (+7/-0)
invoicing_voucher_killer/invoice_view.xml (+48/-0)
statement_voucher_killer/__init__.py (+21/-0)
statement_voucher_killer/__openerp__.py (+48/-0)
statement_voucher_killer/i18n/statement_voucher_killer.pot (+27/-0)
statement_voucher_killer/statement_view.xml (+20/-0)
statement_voucher_killer/voucher.py (+129/-0)
To merge this branch: bzr merge lp:~camptocamp/banking-addons/bank-statement-reconcile-7.0_voucher_killer_vre
Reviewer Review Type Date Requested Status
Pedro Manuel Baeza Needs Fixing
Review via email: mp+213973@code.launchpad.net

This proposal has been superseded by a proposal from 2014-04-03.

Description of the change

It take the date of the payment line to set the bank statement line instead of maturity date of the payment line
See bug report

To post a comment you must log in.
Revision history for this message
Pedro Manuel Baeza (pedro.baeza) wrote :

Hi, Vincent, please make the MP against the correct branch bank-statement-reconcile-70. You can do it from "Resubmit proposal" link on the right part.

Regards.

review: Needs Fixing
142. By Vincent Renaville@camptocamp

[FIX] pep8

Unmerged revisions

142. By Vincent Renaville@camptocamp

[FIX] pep8

141. By Vincent Renaville@camptocamp

[FIx] set correct date when import payment line into payment order: see bug #1301781

140. By Launchpad Translations on behalf of banking-addons-team

Launchpad automatic translations update.

139. By Joël Grand-Guillaume @ camptocamp

[IMP] Add buttons to open unreconciled and partially reconciled items from a profile to easy the verification and controlling
  [IMP] Add the number of lines in completion log to let the user know if some hasn't been auto-completed (e.g. 332/335 line compelted)
  [IMP] Add a group by bank statement in journal items search view to ease the reconciliation

138. By Leonardo Pistone

[fix] account_statement_base_import: add all missing default values to the statement line.
This has to be done manually because the module uses sql trickery

137. By Launchpad Translations on behalf of banking-addons-team

Launchpad automatic translations update.

136. By Pedro Manuel Baeza

[IMP] Translation template files.

135. By Launchpad Translations on behalf of banking-addons-team

Launchpad automatic translations update.

134. By Leonardo Pistone

[fix] account_statement_ext: trigger related fields

133. By Alexandre Fayolle - camptocamp

fix issue when creating empty statement (lp:1247876) and add a module which enables bank statement creation from the point of sale with the banking framework installed.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== added directory 'account_advanced_reconcile'
2=== added file 'account_advanced_reconcile/__init__.py'
3--- account_advanced_reconcile/__init__.py 1970-01-01 00:00:00 +0000
4+++ account_advanced_reconcile/__init__.py 2014-04-03 07:40:14 +0000
5@@ -0,0 +1,24 @@
6+# -*- coding: utf-8 -*-
7+##############################################################################
8+#
9+# Author: Guewen Baconnier
10+# Copyright 2012 Camptocamp SA
11+#
12+# This program is free software: you can redistribute it and/or modify
13+# it under the terms of the GNU Affero General Public License as
14+# published by the Free Software Foundation, either version 3 of the
15+# License, or (at your option) any later version.
16+#
17+# This program is distributed in the hope that it will be useful,
18+# but WITHOUT ANY WARRANTY; without even the implied warranty of
19+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20+# GNU Affero General Public License for more details.
21+#
22+# You should have received a copy of the GNU Affero General Public License
23+# along with this program. If not, see <http://www.gnu.org/licenses/>.
24+#
25+##############################################################################
26+
27+import easy_reconcile
28+import base_advanced_reconciliation
29+import advanced_reconciliation
30
31=== added file 'account_advanced_reconcile/__openerp__.py'
32--- account_advanced_reconcile/__openerp__.py 1970-01-01 00:00:00 +0000
33+++ account_advanced_reconcile/__openerp__.py 2014-04-03 07:40:14 +0000
34@@ -0,0 +1,83 @@
35+# -*- coding: utf-8 -*-
36+##############################################################################
37+#
38+# Author: Guewen Baconnier
39+# Copyright 2012 Camptocamp SA
40+#
41+# This program is free software: you can redistribute it and/or modify
42+# it under the terms of the GNU Affero General Public License as
43+# published by the Free Software Foundation, either version 3 of the
44+# License, or (at your option) any later version.
45+#
46+# This program is distributed in the hope that it will be useful,
47+# but WITHOUT ANY WARRANTY; without even the implied warranty of
48+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
49+# GNU Affero General Public License for more details.
50+#
51+# You should have received a copy of the GNU Affero General Public License
52+# along with this program. If not, see <http://www.gnu.org/licenses/>.
53+#
54+##############################################################################
55+
56+{'name': "Advanced Reconcile",
57+ 'version': '1.0',
58+ 'author': 'Camptocamp',
59+ 'maintainer': 'Camptocamp',
60+ 'category': 'Finance',
61+ 'complexity': 'normal',
62+ 'depends': ['account_easy_reconcile',
63+ ],
64+ 'description': """
65+Advanced reconciliation methods for the module account_easy_reconcile.
66+
67+In addition to the features implemented in account_easy_reconcile, which are:
68+ - reconciliation facilities for big volume of transactions
69+ - setup different profiles of reconciliation by account
70+ - each profile can use many methods of reconciliation
71+ - this module is also a base to create others reconciliation methods
72+ which can plug in the profiles
73+ - a profile a reconciliation can be run manually or by a cron
74+ - monitoring of reconcilation runs with an history
75+
76+It implements a basis to created advanced reconciliation methods in a few lines
77+of code.
78+
79+Typically, such a method can be:
80+ - Reconcile Journal items if the partner and the ref are equal
81+ - Reconcile Journal items if the partner is equal and the ref
82+ is the same than ref or name
83+ - Reconcile Journal items if the partner is equal and the ref
84+ match with a pattern
85+
86+And they allows:
87+ - Reconciliations with multiple credit / multiple debit lines
88+ - Partial reconciliations
89+ - Write-off amount as well
90+
91+A method is already implemented in this module, it matches on items:
92+ - Partner
93+ - Ref on credit move lines should be case insensitive equals to the ref or
94+ the name of the debit move line
95+
96+The base class to find the reconciliations is built to be as efficient as
97+possible.
98+
99+So basically, if you have an invoice with 3 payments (one per month), the first
100+month, it will partial reconcile the debit move line with the first payment, the second
101+month, it will partial reconcile the debit move line with 2 first payments,
102+the third month, it will make the full reconciliation.
103+
104+This module is perfectly adapted for E-Commerce business where a big volume of
105+move lines and so, reconciliations, are involved and payments often come from
106+many offices.
107+
108+ """,
109+ 'website': 'http://www.camptocamp.com',
110+ 'data': ['easy_reconcile_view.xml'],
111+ 'test': [],
112+ 'images': [],
113+ 'installable': True,
114+ 'auto_install': False,
115+ 'license': 'AGPL-3',
116+ 'application': True,
117+}
118
119=== added file 'account_advanced_reconcile/advanced_reconciliation.py'
120--- account_advanced_reconcile/advanced_reconciliation.py 1970-01-01 00:00:00 +0000
121+++ account_advanced_reconcile/advanced_reconciliation.py 2014-04-03 07:40:14 +0000
122@@ -0,0 +1,118 @@
123+# -*- coding: utf-8 -*-
124+##############################################################################
125+#
126+# Author: Guewen Baconnier
127+# Copyright 2012 Camptocamp SA
128+#
129+# This program is free software: you can redistribute it and/or modify
130+# it under the terms of the GNU Affero General Public License as
131+# published by the Free Software Foundation, either version 3 of the
132+# License, or (at your option) any later version.
133+#
134+# This program is distributed in the hope that it will be useful,
135+# but WITHOUT ANY WARRANTY; without even the implied warranty of
136+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
137+# GNU Affero General Public License for more details.
138+#
139+# You should have received a copy of the GNU Affero General Public License
140+# along with this program. If not, see <http://www.gnu.org/licenses/>.
141+#
142+##############################################################################
143+
144+from openerp.osv import orm
145+
146+
147+class easy_reconcile_advanced_ref(orm.TransientModel):
148+
149+ _name = 'easy.reconcile.advanced.ref'
150+ _inherit = 'easy.reconcile.advanced'
151+
152+ def _skip_line(self, cr, uid, rec, move_line, context=None):
153+ """
154+ When True is returned on some conditions, the credit move line
155+ will be skipped for reconciliation. Can be inherited to
156+ skip on some conditions. ie: ref or partner_id is empty.
157+ """
158+ return not (move_line.get('ref') and move_line.get('partner_id'))
159+
160+ def _matchers(self, cr, uid, rec, move_line, context=None):
161+ """
162+ Return the values used as matchers to find the opposite lines
163+
164+ All the matcher keys in the dict must have their equivalent in
165+ the `_opposite_matchers`.
166+
167+ The values of each matcher key will be searched in the
168+ one returned by the `_opposite_matchers`
169+
170+ Must be inherited to implement the matchers for one method
171+
172+ For instance, it can return:
173+ return ('ref', move_line['rec'])
174+
175+ or
176+ return (('partner_id', move_line['partner_id']),
177+ ('ref', "prefix_%s" % move_line['rec']))
178+
179+ All the matchers have to be found in the opposite lines
180+ to consider them as "opposite"
181+
182+ The matchers will be evaluated in the same order as declared
183+ vs the the opposite matchers, so you can gain performance by
184+ declaring first the partners with the less computation.
185+
186+ All matchers should match with their opposite to be considered
187+ as "matching".
188+ So with the previous example, partner_id and ref have to be
189+ equals on the opposite line matchers.
190+
191+ :return: tuple of tuples (key, value) where the keys are
192+ the matchers keys
193+ (must be the same than `_opposite_matchers` returns,
194+ and their values to match in the opposite lines.
195+ A matching key can have multiples values.
196+ """
197+ return (('partner_id', move_line['partner_id']),
198+ ('ref', move_line['ref'].lower().strip()))
199+
200+ def _opposite_matchers(self, cr, uid, rec, move_line, context=None):
201+ """
202+ Return the values of the opposite line used as matchers
203+ so the line is matched
204+
205+ Must be inherited to implement the matchers for one method
206+ It can be inherited to apply some formatting of fields
207+ (strip(), lower() and so on)
208+
209+ This method is the counterpart of the `_matchers()` method.
210+
211+ Each matcher has to yield its value respecting the order
212+ of the `_matchers()`.
213+
214+ When a matcher does not correspond, the next matchers won't
215+ be evaluated so the ones which need the less computation
216+ have to be executed first.
217+
218+ If the `_matchers()` returns:
219+ (('partner_id', move_line['partner_id']),
220+ ('ref', move_line['ref']))
221+
222+ Here, you should yield :
223+ yield ('partner_id', move_line['partner_id'])
224+ yield ('ref', move_line['ref'])
225+
226+ Note that a matcher can contain multiple values, as instance,
227+ if for a move line, you want to search from its `ref` in the
228+ `ref` or `name` fields of the opposite move lines, you have to
229+ yield ('partner_id', move_line['partner_id'])
230+ yield ('ref', (move_line['ref'], move_line['name'])
231+
232+ An OR is used between the values for the same key.
233+ An AND is used between the differents keys.
234+
235+ :param dict move_line: values of the move_line
236+ :yield: matchers as tuple ('matcher key', value(s))
237+ """
238+ yield ('partner_id', move_line['partner_id'])
239+ yield ('ref', ((move_line['ref'] or '').lower().strip(),
240+ move_line['name'].lower().strip()))
241
242=== added file 'account_advanced_reconcile/base_advanced_reconciliation.py'
243--- account_advanced_reconcile/base_advanced_reconciliation.py 1970-01-01 00:00:00 +0000
244+++ account_advanced_reconcile/base_advanced_reconciliation.py 2014-04-03 07:40:14 +0000
245@@ -0,0 +1,272 @@
246+# -*- coding: utf-8 -*-
247+##############################################################################
248+#
249+# Author: Guewen Baconnier
250+# Copyright 2012 Camptocamp SA
251+#
252+# This program is free software: you can redistribute it and/or modify
253+# it under the terms of the GNU Affero General Public License as
254+# published by the Free Software Foundation, either version 3 of the
255+# License, or (at your option) any later version.
256+#
257+# This program is distributed in the hope that it will be useful,
258+# but WITHOUT ANY WARRANTY; without even the implied warranty of
259+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
260+# GNU Affero General Public License for more details.
261+#
262+# You should have received a copy of the GNU Affero General Public License
263+# along with this program. If not, see <http://www.gnu.org/licenses/>.
264+#
265+##############################################################################
266+
267+from itertools import product
268+from openerp.osv import orm
269+
270+
271+class easy_reconcile_advanced(orm.AbstractModel):
272+
273+ _name = 'easy.reconcile.advanced'
274+ _inherit = 'easy.reconcile.base'
275+
276+ def _query_debit(self, cr, uid, rec, context=None):
277+ """Select all move (debit>0) as candidate. """
278+ select = self._select(rec)
279+ sql_from = self._from(rec)
280+ where, params = self._where(rec)
281+ where += " AND account_move_line.debit > 0 "
282+
283+ where2, params2 = self._get_filter(cr, uid, rec, context=context)
284+
285+ query = ' '.join((select, sql_from, where, where2))
286+
287+ cr.execute(query, params + params2)
288+ return cr.dictfetchall()
289+
290+ def _query_credit(self, cr, uid, rec, context=None):
291+ """Select all move (credit>0) as candidate. """
292+ select = self._select(rec)
293+ sql_from = self._from(rec)
294+ where, params = self._where(rec)
295+ where += " AND account_move_line.credit > 0 "
296+
297+ where2, params2 = self._get_filter(cr, uid, rec, context=context)
298+
299+ query = ' '.join((select, sql_from, where, where2))
300+
301+ cr.execute(query, params + params2)
302+ return cr.dictfetchall()
303+
304+ def _matchers(self, cr, uid, rec, move_line, context=None):
305+ """
306+ Return the values used as matchers to find the opposite lines
307+
308+ All the matcher keys in the dict must have their equivalent in
309+ the `_opposite_matchers`.
310+
311+ The values of each matcher key will be searched in the
312+ one returned by the `_opposite_matchers`
313+
314+ Must be inherited to implement the matchers for one method
315+
316+ As instance, it can return:
317+ return ('ref', move_line['rec'])
318+
319+ or
320+ return (('partner_id', move_line['partner_id']),
321+ ('ref', "prefix_%s" % move_line['rec']))
322+
323+ All the matchers have to be found in the opposite lines
324+ to consider them as "opposite"
325+
326+ The matchers will be evaluated in the same order as declared
327+ vs the the opposite matchers, so you can gain performance by
328+ declaring first the partners with the less computation.
329+
330+ All matchers should match with their opposite to be considered
331+ as "matching".
332+ So with the previous example, partner_id and ref have to be
333+ equals on the opposite line matchers.
334+
335+ :return: tuple of tuples (key, value) where the keys are
336+ the matchers keys
337+ (must be the same than `_opposite_matchers` returns,
338+ and their values to match in the opposite lines.
339+ A matching key can have multiples values.
340+ """
341+ raise NotImplementedError
342+
343+ def _opposite_matchers(self, cr, uid, rec, move_line, context=None):
344+ """
345+ Return the values of the opposite line used as matchers
346+ so the line is matched
347+
348+ Must be inherited to implement the matchers for one method
349+ It can be inherited to apply some formatting of fields
350+ (strip(), lower() and so on)
351+
352+ This method is the counterpart of the `_matchers()` method.
353+
354+ Each matcher has to yield its value respecting the order
355+ of the `_matchers()`.
356+
357+ When a matcher does not correspond, the next matchers won't
358+ be evaluated so the ones which need the less computation
359+ have to be executed first.
360+
361+ If the `_matchers()` returns:
362+ (('partner_id', move_line['partner_id']),
363+ ('ref', move_line['ref']))
364+
365+ Here, you should yield :
366+ yield ('partner_id', move_line['partner_id'])
367+ yield ('ref', move_line['ref'])
368+
369+ Note that a matcher can contain multiple values, as instance,
370+ if for a move line, you want to search from its `ref` in the
371+ `ref` or `name` fields of the opposite move lines, you have to
372+ yield ('partner_id', move_line['partner_id'])
373+ yield ('ref', (move_line['ref'], move_line['name'])
374+
375+ An OR is used between the values for the same key.
376+ An AND is used between the differents keys.
377+
378+ :param dict move_line: values of the move_line
379+ :yield: matchers as tuple ('matcher key', value(s))
380+ """
381+ raise NotImplementedError
382+
383+ @staticmethod
384+ def _compare_values(key, value, opposite_value):
385+ """Can be inherited to modify the equality condition
386+ specifically according to the matcher key (maybe using
387+ a like operator instead of equality on 'ref' as instance)
388+ """
389+ # consider that empty vals are not valid matchers
390+ # it can still be inherited for some special cases
391+ # where it would be allowed
392+ if not (value and opposite_value):
393+ return False
394+
395+ if value == opposite_value:
396+ return True
397+ return False
398+
399+ @staticmethod
400+ def _compare_matcher_values(key, values, opposite_values):
401+ """ Compare every values from a matcher vs an opposite matcher
402+ and return True if it matches
403+ """
404+ for value, ovalue in product(values, opposite_values):
405+ # we do not need to compare all values, if one matches
406+ # we are done
407+ if easy_reconcile_advanced._compare_values(key, value, ovalue):
408+ return True
409+ return False
410+
411+ @staticmethod
412+ def _compare_matchers(matcher, opposite_matcher):
413+ """
414+ Prepare and check the matchers to compare
415+ """
416+ mkey, mvalue = matcher
417+ omkey, omvalue = opposite_matcher
418+ assert mkey == omkey, ("A matcher %s is compared with a matcher %s, "
419+ " the _matchers and _opposite_matchers are probably wrong" %
420+ (mkey, omkey))
421+ if not isinstance(mvalue, (list, tuple)):
422+ mvalue = mvalue,
423+ if not isinstance(omvalue, (list, tuple)):
424+ omvalue = omvalue,
425+ return easy_reconcile_advanced._compare_matcher_values(mkey, mvalue, omvalue)
426+
427+ def _compare_opposite(self, cr, uid, rec, move_line, opposite_move_line,
428+ matchers, context=None):
429+ """ Iterate over the matchers of the move lines vs opposite move lines
430+ and if they all match, return True.
431+
432+ If all the matchers match for a move line and an opposite move line,
433+ they are candidate for a reconciliation.
434+ """
435+ opp_matchers = self._opposite_matchers(cr, uid, rec, opposite_move_line,
436+ context=context)
437+ for matcher in matchers:
438+ try:
439+ opp_matcher = opp_matchers.next()
440+ except StopIteration:
441+ # if you fall here, you probably missed to put a `yield`
442+ # in `_opposite_matchers()`
443+ raise ValueError("Missing _opposite_matcher: %s" % matcher[0])
444+
445+ if not self._compare_matchers(matcher, opp_matcher):
446+ # if any of the matcher fails, the opposite line
447+ # is not a valid counterpart
448+ # directly returns so the next yield of _opposite_matchers
449+ # are not evaluated
450+ return False
451+
452+ return True
453+
454+ def _search_opposites(self, cr, uid, rec, move_line, opposite_move_lines, context=None):
455+ """
456+ Search the opposite move lines for a move line
457+
458+ :param dict move_line: the move line for which we search opposites
459+ :param list opposite_move_lines: list of dict of move lines values, the move
460+ lines we want to search for
461+ :return: list of matching lines
462+ """
463+ matchers = self._matchers(cr, uid, rec, move_line, context=context)
464+ return [op for op in opposite_move_lines if
465+ self._compare_opposite(
466+ cr, uid, rec, move_line, op, matchers, context=context)]
467+
468+ def _action_rec(self, cr, uid, rec, context=None):
469+ credit_lines = self._query_credit(cr, uid, rec, context=context)
470+ debit_lines = self._query_debit(cr, uid, rec, context=context)
471+ return self._rec_auto_lines_advanced(
472+ cr, uid, rec, credit_lines, debit_lines, context=context)
473+
474+ def _skip_line(self, cr, uid, rec, move_line, context=None):
475+ """
476+ When True is returned on some conditions, the credit move line
477+ will be skipped for reconciliation. Can be inherited to
478+ skip on some conditions. ie: ref or partner_id is empty.
479+ """
480+ return False
481+
482+ def _rec_auto_lines_advanced(self, cr, uid, rec, credit_lines, debit_lines, context=None):
483+ """ Advanced reconciliation main loop """
484+ reconciled_ids = []
485+ partial_reconciled_ids = []
486+ reconcile_groups = []
487+
488+ for credit_line in credit_lines:
489+ if self._skip_line(cr, uid, rec, credit_line, context=context):
490+ continue
491+
492+ opposite_lines = self._search_opposites(
493+ cr, uid, rec, credit_line, debit_lines, context=context)
494+
495+ if not opposite_lines:
496+ continue
497+
498+ opposite_ids = [l['id'] for l in opposite_lines]
499+ line_ids = opposite_ids + [credit_line['id']]
500+ for group in reconcile_groups:
501+ if any([lid in group for lid in opposite_ids]):
502+ group.update(line_ids)
503+ break
504+ else:
505+ reconcile_groups.append(set(line_ids))
506+
507+ lines_by_id = dict([(l['id'], l) for l in credit_lines + debit_lines])
508+ for reconcile_group_ids in reconcile_groups:
509+ group_lines = [lines_by_id[lid] for lid in reconcile_group_ids]
510+ reconciled, full = self._reconcile_lines(
511+ cr, uid, rec, group_lines, allow_partial=True, context=context)
512+ if reconciled and full:
513+ reconciled_ids += reconcile_group_ids
514+ elif reconciled:
515+ partial_reconciled_ids += reconcile_group_ids
516+
517+ return reconciled_ids, partial_reconciled_ids
518
519=== added file 'account_advanced_reconcile/easy_reconcile.py'
520--- account_advanced_reconcile/easy_reconcile.py 1970-01-01 00:00:00 +0000
521+++ account_advanced_reconcile/easy_reconcile.py 2014-04-03 07:40:14 +0000
522@@ -0,0 +1,36 @@
523+# -*- coding: utf-8 -*-
524+##############################################################################
525+#
526+# Author: Guewen Baconnier
527+# Copyright 2012 Camptocamp SA
528+#
529+# This program is free software: you can redistribute it and/or modify
530+# it under the terms of the GNU Affero General Public License as
531+# published by the Free Software Foundation, either version 3 of the
532+# License, or (at your option) any later version.
533+#
534+# This program is distributed in the hope that it will be useful,
535+# but WITHOUT ANY WARRANTY; without even the implied warranty of
536+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
537+# GNU Affero General Public License for more details.
538+#
539+# You should have received a copy of the GNU Affero General Public License
540+# along with this program. If not, see <http://www.gnu.org/licenses/>.
541+#
542+##############################################################################
543+
544+from openerp.osv import orm
545+
546+
547+class account_easy_reconcile_method(orm.Model):
548+
549+ _inherit = 'account.easy.reconcile.method'
550+
551+ def _get_all_rec_method(self, cr, uid, context=None):
552+ methods = super(account_easy_reconcile_method, self).\
553+ _get_all_rec_method(cr, uid, context=context)
554+ methods += [
555+ ('easy.reconcile.advanced.ref',
556+ 'Advanced. Partner and Ref.'),
557+ ]
558+ return methods
559
560=== added file 'account_advanced_reconcile/easy_reconcile_view.xml'
561--- account_advanced_reconcile/easy_reconcile_view.xml 1970-01-01 00:00:00 +0000
562+++ account_advanced_reconcile/easy_reconcile_view.xml 2014-04-03 07:40:14 +0000
563@@ -0,0 +1,19 @@
564+<?xml version="1.0" encoding="utf-8"?>
565+<openerp>
566+ <data noupdate="0">
567+ <record id="view_easy_reconcile_form" model="ir.ui.view">
568+ <field name="name">account.easy.reconcile.form</field>
569+ <field name="model">account.easy.reconcile</field>
570+ <field name="inherit_id" ref="account_easy_reconcile.account_easy_reconcile_form"/>
571+ <field name="arch" type="xml">
572+ <page name="information" position="inside">
573+ <group colspan="2" col="2">
574+ <separator colspan="4" string="Advanced. Partner and Ref"/>
575+ <label string="Match multiple debit vs multiple credit entries. Allow partial reconciliation.
576+The lines should have the partner, the credit entry ref. is matched vs the debit entry ref. or name." colspan="4"/>
577+ </group>
578+ </page>
579+ </field>
580+ </record>
581+ </data>
582+</openerp>
583
584=== added directory 'account_advanced_reconcile/i18n'
585=== added file 'account_advanced_reconcile/i18n/account_advanced_reconcile.pot'
586--- account_advanced_reconcile/i18n/account_advanced_reconcile.pot 1970-01-01 00:00:00 +0000
587+++ account_advanced_reconcile/i18n/account_advanced_reconcile.pot 2014-04-03 07:40:14 +0000
588@@ -0,0 +1,90 @@
589+# Translation of OpenERP Server.
590+# This file contains the translation of the following modules:
591+# * account_advanced_reconcile
592+#
593+msgid ""
594+msgstr ""
595+"Project-Id-Version: OpenERP Server 7.0\n"
596+"Report-Msgid-Bugs-To: \n"
597+"POT-Creation-Date: 2014-01-21 11:54+0000\n"
598+"PO-Revision-Date: 2014-01-21 11:54+0000\n"
599+"Last-Translator: <>\n"
600+"Language-Team: \n"
601+"MIME-Version: 1.0\n"
602+"Content-Type: text/plain; charset=UTF-8\n"
603+"Content-Transfer-Encoding: \n"
604+"Plural-Forms: \n"
605+
606+#. module: account_advanced_reconcile
607+#: field:easy.reconcile.advanced,partner_ids:0
608+#: field:easy.reconcile.advanced.ref,partner_ids:0
609+msgid "Restrict on partners"
610+msgstr ""
611+
612+#. module: account_advanced_reconcile
613+#: field:easy.reconcile.advanced,account_id:0
614+#: field:easy.reconcile.advanced.ref,account_id:0
615+msgid "Account"
616+msgstr ""
617+
618+#. module: account_advanced_reconcile
619+#: model:ir.model,name:account_advanced_reconcile.model_account_easy_reconcile_method
620+msgid "reconcile method for account_easy_reconcile"
621+msgstr ""
622+
623+#. module: account_advanced_reconcile
624+#: field:easy.reconcile.advanced,journal_id:0
625+#: field:easy.reconcile.advanced.ref,journal_id:0
626+msgid "Journal"
627+msgstr ""
628+
629+#. module: account_advanced_reconcile
630+#: field:easy.reconcile.advanced,account_profit_id:0
631+#: field:easy.reconcile.advanced.ref,account_profit_id:0
632+msgid "Account Profit"
633+msgstr ""
634+
635+#. module: account_advanced_reconcile
636+#: view:account.easy.reconcile:0
637+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."
638+msgstr ""
639+
640+#. module: account_advanced_reconcile
641+#: field:easy.reconcile.advanced,filter:0
642+#: field:easy.reconcile.advanced.ref,filter:0
643+msgid "Filter"
644+msgstr ""
645+
646+#. module: account_advanced_reconcile
647+#: view:account.easy.reconcile:0
648+msgid "Advanced. Partner and Ref"
649+msgstr ""
650+
651+#. module: account_advanced_reconcile
652+#: field:easy.reconcile.advanced,date_base_on:0
653+#: field:easy.reconcile.advanced.ref,date_base_on:0
654+msgid "Date of reconciliation"
655+msgstr ""
656+
657+#. module: account_advanced_reconcile
658+#: model:ir.model,name:account_advanced_reconcile.model_easy_reconcile_advanced
659+msgid "easy.reconcile.advanced"
660+msgstr ""
661+
662+#. module: account_advanced_reconcile
663+#: field:easy.reconcile.advanced,account_lost_id:0
664+#: field:easy.reconcile.advanced.ref,account_lost_id:0
665+msgid "Account Lost"
666+msgstr ""
667+
668+#. module: account_advanced_reconcile
669+#: model:ir.model,name:account_advanced_reconcile.model_easy_reconcile_advanced_ref
670+msgid "easy.reconcile.advanced.ref"
671+msgstr ""
672+
673+#. module: account_advanced_reconcile
674+#: field:easy.reconcile.advanced,write_off:0
675+#: field:easy.reconcile.advanced.ref,write_off:0
676+msgid "Write off allowed"
677+msgstr ""
678+
679
680=== added file 'account_advanced_reconcile/i18n/fr.po'
681--- account_advanced_reconcile/i18n/fr.po 1970-01-01 00:00:00 +0000
682+++ account_advanced_reconcile/i18n/fr.po 2014-04-03 07:40:14 +0000
683@@ -0,0 +1,98 @@
684+# Translation of OpenERP Server.
685+# This file contains the translation of the following modules:
686+# * account_advanced_reconcile
687+#
688+msgid ""
689+msgstr ""
690+"Project-Id-Version: OpenERP Server 6.1\n"
691+"Report-Msgid-Bugs-To: \n"
692+"POT-Creation-Date: 2014-01-21 11:54+0000\n"
693+"PO-Revision-Date: 2014-03-21 15:24+0000\n"
694+"Last-Translator: Guewen Baconnier @ Camptocamp <Unknown>\n"
695+"Language-Team: \n"
696+"MIME-Version: 1.0\n"
697+"Content-Type: text/plain; charset=UTF-8\n"
698+"Content-Transfer-Encoding: 8bit\n"
699+"X-Launchpad-Export-Date: 2014-03-22 07:11+0000\n"
700+"X-Generator: Launchpad (build 16967)\n"
701+"Language: \n"
702+
703+#. module: account_advanced_reconcile
704+#: field:easy.reconcile.advanced,partner_ids:0
705+#: field:easy.reconcile.advanced.ref,partner_ids:0
706+msgid "Restrict on partners"
707+msgstr "Restriction sur les partenaires"
708+
709+#. module: account_advanced_reconcile
710+#: field:easy.reconcile.advanced,account_id:0
711+#: field:easy.reconcile.advanced.ref,account_id:0
712+msgid "Account"
713+msgstr "Compte"
714+
715+#. module: account_advanced_reconcile
716+#: model:ir.model,name:account_advanced_reconcile.model_account_easy_reconcile_method
717+msgid "reconcile method for account_easy_reconcile"
718+msgstr "Méthode de lettrage pour le module account_easy_reconcile"
719+
720+#. module: account_advanced_reconcile
721+#: field:easy.reconcile.advanced,journal_id:0
722+#: field:easy.reconcile.advanced.ref,journal_id:0
723+msgid "Journal"
724+msgstr "Journal"
725+
726+#. module: account_advanced_reconcile
727+#: field:easy.reconcile.advanced,account_profit_id:0
728+#: field:easy.reconcile.advanced.ref,account_profit_id:0
729+msgid "Account Profit"
730+msgstr "Compte de produit"
731+
732+#. module: account_advanced_reconcile
733+#: view:account.easy.reconcile:0
734+msgid ""
735+"Match multiple debit vs multiple credit entries. Allow partial "
736+"reconciliation. The lines should have the partner, the credit entry ref. is "
737+"matched vs the debit entry ref. or name."
738+msgstr ""
739+"Le Lettrage peut s'effectuer sur plusieurs écritures de débit et crédit. Le "
740+"Lettrage partiel est autorisé. Les écritures doivent avoir le même "
741+"partenaire et la référence sur les écritures de crédit doit se retrouver "
742+"dans la référence ou la description sur les écritures de débit."
743+
744+#. module: account_advanced_reconcile
745+#: field:easy.reconcile.advanced,filter:0
746+#: field:easy.reconcile.advanced.ref,filter:0
747+msgid "Filter"
748+msgstr "Filtre"
749+
750+#. module: account_advanced_reconcile
751+#: view:account.easy.reconcile:0
752+msgid "Advanced. Partner and Ref"
753+msgstr "Avancé. Partenaire et Réf."
754+
755+#. module: account_advanced_reconcile
756+#: field:easy.reconcile.advanced,date_base_on:0
757+#: field:easy.reconcile.advanced.ref,date_base_on:0
758+msgid "Date of reconciliation"
759+msgstr "Date de lettrage"
760+
761+#. module: account_advanced_reconcile
762+#: model:ir.model,name:account_advanced_reconcile.model_easy_reconcile_advanced
763+msgid "easy.reconcile.advanced"
764+msgstr "easy.reconcile.advanced"
765+
766+#. module: account_advanced_reconcile
767+#: field:easy.reconcile.advanced,account_lost_id:0
768+#: field:easy.reconcile.advanced.ref,account_lost_id:0
769+msgid "Account Lost"
770+msgstr "Compte de charge"
771+
772+#. module: account_advanced_reconcile
773+#: model:ir.model,name:account_advanced_reconcile.model_easy_reconcile_advanced_ref
774+msgid "easy.reconcile.advanced.ref"
775+msgstr "easy.reconcile.advanced.ref"
776+
777+#. module: account_advanced_reconcile
778+#: field:easy.reconcile.advanced,write_off:0
779+#: field:easy.reconcile.advanced.ref,write_off:0
780+msgid "Write off allowed"
781+msgstr "Écart autorisé"
782
783=== added directory 'account_advanced_reconcile_transaction_ref'
784=== added file 'account_advanced_reconcile_transaction_ref/__init__.py'
785--- account_advanced_reconcile_transaction_ref/__init__.py 1970-01-01 00:00:00 +0000
786+++ account_advanced_reconcile_transaction_ref/__init__.py 2014-04-03 07:40:14 +0000
787@@ -0,0 +1,24 @@
788+# -*- coding: utf-8 -*-
789+##############################################################################
790+#
791+# Author: Romain Deheele. Copyright Camptocamp SA
792+#
793+# This program is free software: you can redistribute it and/or modify
794+# it under the terms of the GNU Affero General Public License as
795+# published by the Free Software Foundation, either version 3 of the
796+# License, or (at your option) any later version.
797+#
798+# This program is distributed in the hope that it will be useful,
799+# but WITHOUT ANY WARRANTY; without even the implied warranty of
800+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
801+# GNU Affero General Public License for more details.
802+#
803+# You should have received a copy of the GNU Affero General Public License
804+# along with this program. If not, see <http://www.gnu.org/licenses/>.
805+#
806+##############################################################################
807+
808+from . import account
809+from . import easy_reconcile
810+from . import base_advanced_reconciliation
811+from . import advanced_reconciliation
812
813=== added file 'account_advanced_reconcile_transaction_ref/__openerp__.py'
814--- account_advanced_reconcile_transaction_ref/__openerp__.py 1970-01-01 00:00:00 +0000
815+++ account_advanced_reconcile_transaction_ref/__openerp__.py 2014-04-03 07:40:14 +0000
816@@ -0,0 +1,40 @@
817+# -*- coding: utf-8 -*-
818+##############################################################################
819+#
820+# Author: Romain Deheele. Copyright Camptocamp SA
821+#
822+# This program is free software: you can redistribute it and/or modify
823+# it under the terms of the GNU Affero General Public License as
824+# published by the Free Software Foundation, either version 3 of the
825+# License, or (at your option) any later version.
826+#
827+# This program is distributed in the hope that it will be useful,
828+# but WITHOUT ANY WARRANTY; without even the implied warranty of
829+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
830+# GNU Affero General Public License for more details.
831+#
832+# You should have received a copy of the GNU Affero General Public License
833+# along with this program. If not, see <http://www.gnu.org/licenses/>.
834+#
835+##############################################################################
836+
837+{'name': 'Advanced Reconcile Transaction Ref',
838+ 'description': """
839+Advanced reconciliation method for the module account_easy_reconcile
840+=================================================
841+Reconcile rules with transaction_ref
842+
843+""",
844+ 'version': '1.0.1',
845+ 'author': 'Camptocamp',
846+ 'category': 'Finance',
847+ 'website': 'http://www.camptocamp.com',
848+ 'depends': ['account_advanced_reconcile'],
849+ 'data': ['easy_reconcile_view.xml'],
850+ 'demo': [],
851+ 'test': [], # To be ported or migrate to unit tests or scenarios
852+ 'auto_install': False,
853+ 'installable': True,
854+ 'images': []
855+}
856+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
857
858=== added file 'account_advanced_reconcile_transaction_ref/account.py'
859--- account_advanced_reconcile_transaction_ref/account.py 1970-01-01 00:00:00 +0000
860+++ account_advanced_reconcile_transaction_ref/account.py 2014-04-03 07:40:14 +0000
861@@ -0,0 +1,54 @@
862+# -*- coding: utf-8 -*-
863+##############################################################################
864+#
865+# Author: Romain Deheele
866+# Copyright 2013 Camptocamp SA
867+#
868+# This program is free software: you can redistribute it and/or modify
869+# it under the terms of the GNU Affero General Public License as
870+# published by the Free Software Foundation, either version 3 of the
871+# License, or (at your option) any later version.
872+#
873+# This program is distributed in the hope that it will be useful,
874+# but WITHOUT ANY WARRANTY; without even the implied warranty of
875+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
876+# GNU Affero General Public License for more details.
877+#
878+# You should have received a copy of the GNU Affero General Public License
879+# along with this program. If not, see <http://www.gnu.org/licenses/>.
880+#
881+##############################################################################
882+
883+from openerp.osv.orm import Model, fields
884+
885+class AccountMoveLine(Model):
886+ """
887+ Inherit account.move.line class in order to add transaction_ref field
888+ """
889+ _inherit = "account.move.line"
890+ _columns = {
891+ 'transaction_ref': fields.char('Transaction Ref.', size=128),
892+ }
893+
894+class AccountBankStatement(Model):
895+ """
896+ Inherit account.bank.statement class in order to set transaction_ref info on account.move.line
897+ """
898+ _inherit = "account.bank.statement"
899+
900+ def _prepare_move_line_vals(
901+ self, cr, uid, st_line, move_id, debit, credit, currency_id=False,
902+ amount_currency=False, account_id=False, analytic_id=False,
903+ partner_id=False, context=None):
904+
905+ if context is None:
906+ context = {}
907+ res = super(AccountBankStatement, self)._prepare_move_line_vals(
908+ cr, uid, st_line, move_id, debit, credit,
909+ currency_id=currency_id,
910+ amount_currency=amount_currency,
911+ account_id=account_id,
912+ analytic_id=analytic_id,
913+ partner_id=partner_id, context=context)
914+ res.update({'transaction_ref': st_line.ref})
915+ return res
916
917=== added file 'account_advanced_reconcile_transaction_ref/advanced_reconciliation.py'
918--- account_advanced_reconcile_transaction_ref/advanced_reconciliation.py 1970-01-01 00:00:00 +0000
919+++ account_advanced_reconcile_transaction_ref/advanced_reconciliation.py 2014-04-03 07:40:14 +0000
920@@ -0,0 +1,43 @@
921+# -*- coding: utf-8 -*-
922+##############################################################################
923+#
924+# Author: Romain Deheele. Copyright Camptocamp SA
925+#
926+# This program is free software: you can redistribute it and/or modify
927+# it under the terms of the GNU Affero General Public License as
928+# published by the Free Software Foundation, either version 3 of the
929+# License, or (at your option) any later version.
930+#
931+# This program is distributed in the hope that it will be useful,
932+# but WITHOUT ANY WARRANTY; without even the implied warranty of
933+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
934+# GNU Affero General Public License for more details.
935+#
936+# You should have received a copy of the GNU Affero General Public License
937+# along with this program. If not, see <http://www.gnu.org/licenses/>.
938+#
939+##############################################################################
940+
941+from openerp.osv import orm
942+
943+
944+class easy_reconcile_advanced_transaction_ref(orm.TransientModel):
945+
946+ _name = 'easy.reconcile.advanced.transaction_ref'
947+ _inherit = 'easy.reconcile.advanced'
948+
949+ def _skip_line(self, cr, uid, rec, move_line, context=None):
950+ """
951+ When True is returned on some conditions, the credit move line
952+ will be skipped for reconciliation. Can be inherited to
953+ skip on some conditions. ie: ref or partner_id is empty.
954+ """
955+ return not (move_line.get('ref') and move_line.get('partner_id'))
956+
957+ def _matchers(self, cr, uid, rec, move_line, context=None):
958+ return (('partner_id', move_line['partner_id']),
959+ ('ref', move_line['transaction_ref'].lower().strip()))
960+
961+ def _opposite_matchers(self, cr, uid, rec, move_line, context=None):
962+ yield ('partner_id', move_line['partner_id'])
963+ yield ('ref', (move_line['transaction_ref'] or '').lower().strip())
964
965=== added file 'account_advanced_reconcile_transaction_ref/base_advanced_reconciliation.py'
966--- account_advanced_reconcile_transaction_ref/base_advanced_reconciliation.py 1970-01-01 00:00:00 +0000
967+++ account_advanced_reconcile_transaction_ref/base_advanced_reconciliation.py 2014-04-03 07:40:14 +0000
968@@ -0,0 +1,46 @@
969+# -*- coding: utf-8 -*-
970+##############################################################################
971+#
972+# Author: Romain Deheele
973+# Copyright 2013 Camptocamp SA
974+#
975+# This program is free software: you can redistribute it and/or modify
976+# it under the terms of the GNU Affero General Public License as
977+# published by the Free Software Foundation, either version 3 of the
978+# License, or (at your option) any later version.
979+#
980+# This program is distributed in the hope that it will be useful,
981+# but WITHOUT ANY WARRANTY; without even the implied warranty of
982+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
983+# GNU Affero General Public License for more details.
984+#
985+# You should have received a copy of the GNU Affero General Public License
986+# along with this program. If not, see <http://www.gnu.org/licenses/>.
987+#
988+##############################################################################
989+
990+from itertools import product
991+from openerp.osv import orm
992+
993+
994+class easy_reconcile_advanced(orm.AbstractModel):
995+
996+ _inherit = 'easy.reconcile.advanced'
997+
998+ def _base_columns(self, rec):
999+ """ Mandatory columns for move lines queries
1000+ An extra column aliased as ``key`` should be defined
1001+ in each query."""
1002+ aml_cols = (
1003+ 'id',
1004+ 'debit',
1005+ 'credit',
1006+ 'date',
1007+ 'period_id',
1008+ 'ref',
1009+ 'name',
1010+ 'partner_id',
1011+ 'account_id',
1012+ 'move_id',
1013+ 'transaction_ref')
1014+ return ["account_move_line.%s" % col for col in aml_cols]
1015
1016=== added file 'account_advanced_reconcile_transaction_ref/easy_reconcile.py'
1017--- account_advanced_reconcile_transaction_ref/easy_reconcile.py 1970-01-01 00:00:00 +0000
1018+++ account_advanced_reconcile_transaction_ref/easy_reconcile.py 2014-04-03 07:40:14 +0000
1019@@ -0,0 +1,37 @@
1020+# -*- coding: utf-8 -*-
1021+##############################################################################
1022+#
1023+# Author: Romain Deheele
1024+# Copyright 2013 Camptocamp SA
1025+#
1026+# This program is free software: you can redistribute it and/or modify
1027+# it under the terms of the GNU Affero General Public License as
1028+# published by the Free Software Foundation, either version 3 of the
1029+# License, or (at your option) any later version.
1030+#
1031+# This program is distributed in the hope that it will be useful,
1032+# but WITHOUT ANY WARRANTY; without even the implied warranty of
1033+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1034+# GNU Affero General Public License for more details.
1035+#
1036+# You should have received a copy of the GNU Affero General Public License
1037+# along with this program. If not, see <http://www.gnu.org/licenses/>.
1038+#
1039+##############################################################################
1040+
1041+from openerp.osv import orm
1042+
1043+
1044+class account_easy_reconcile_method(orm.Model):
1045+
1046+ _inherit = 'account.easy.reconcile.method'
1047+
1048+ def _get_all_rec_method(self, cr, uid, context=None):
1049+ methods = super(account_easy_reconcile_method, self).\
1050+ _get_all_rec_method(cr, uid, context=context)
1051+ methods += [
1052+ ('easy.reconcile.advanced.transaction_ref',
1053+ 'Advanced. Partner and Transaction Ref.'),
1054+ ]
1055+ return methods
1056+
1057
1058=== added file 'account_advanced_reconcile_transaction_ref/easy_reconcile_view.xml'
1059--- account_advanced_reconcile_transaction_ref/easy_reconcile_view.xml 1970-01-01 00:00:00 +0000
1060+++ account_advanced_reconcile_transaction_ref/easy_reconcile_view.xml 2014-04-03 07:40:14 +0000
1061@@ -0,0 +1,19 @@
1062+<?xml version="1.0" encoding="utf-8"?>
1063+<openerp>
1064+ <data noupdate="0">
1065+ <record id="view_easy_reconcile_form" model="ir.ui.view">
1066+ <field name="name">account.easy.reconcile.form</field>
1067+ <field name="model">account.easy.reconcile</field>
1068+ <field name="inherit_id" ref="account_easy_reconcile.account_easy_reconcile_form"/>
1069+ <field name="arch" type="xml">
1070+ <page name="information" position="inside">
1071+ <group colspan="2" col="2">
1072+ <separator colspan="4" string="Advanced. Partner and Transaction Ref"/>
1073+ <label string="Match multiple debit vs multiple credit entries. Allow partial reconciliation.
1074+The lines should have the partner, the credit entry transaction ref. is matched vs the debit entry transaction ref. or name." colspan="4"/>
1075+ </group>
1076+ </page>
1077+ </field>
1078+ </record>
1079+ </data>
1080+</openerp>
1081
1082=== added directory 'account_advanced_reconcile_transaction_ref/i18n'
1083=== added file 'account_advanced_reconcile_transaction_ref/i18n/account_advanced_reconcile_transaction_ref.pot'
1084--- account_advanced_reconcile_transaction_ref/i18n/account_advanced_reconcile_transaction_ref.pot 1970-01-01 00:00:00 +0000
1085+++ account_advanced_reconcile_transaction_ref/i18n/account_advanced_reconcile_transaction_ref.pot 2014-04-03 07:40:14 +0000
1086@@ -0,0 +1,97 @@
1087+# Translation of OpenERP Server.
1088+# This file contains the translation of the following modules:
1089+# * account_advanced_reconcile_transaction_ref
1090+#
1091+msgid ""
1092+msgstr ""
1093+"Project-Id-Version: OpenERP Server 7.0\n"
1094+"Report-Msgid-Bugs-To: \n"
1095+"POT-Creation-Date: 2014-01-21 11:55+0000\n"
1096+"PO-Revision-Date: 2014-01-21 11:55+0000\n"
1097+"Last-Translator: <>\n"
1098+"Language-Team: \n"
1099+"MIME-Version: 1.0\n"
1100+"Content-Type: text/plain; charset=UTF-8\n"
1101+"Content-Transfer-Encoding: \n"
1102+"Plural-Forms: \n"
1103+
1104+#. module: account_advanced_reconcile_transaction_ref
1105+#: field:easy.reconcile.advanced.transaction_ref,partner_ids:0
1106+msgid "Restrict on partners"
1107+msgstr ""
1108+
1109+#. module: account_advanced_reconcile_transaction_ref
1110+#: field:easy.reconcile.advanced.transaction_ref,account_id:0
1111+msgid "Account"
1112+msgstr ""
1113+
1114+#. module: account_advanced_reconcile_transaction_ref
1115+#: view:account.easy.reconcile:0
1116+msgid "Advanced. Partner and Transaction Ref"
1117+msgstr ""
1118+
1119+#. module: account_advanced_reconcile_transaction_ref
1120+#: view:account.easy.reconcile:0
1121+msgid "Match multiple debit vs multiple credit entries. Allow partial reconciliation. The lines should have the partner, the credit entry transaction ref. is matched vs the debit entry transaction ref. or name."
1122+msgstr ""
1123+
1124+#. module: account_advanced_reconcile_transaction_ref
1125+#: model:ir.model,name:account_advanced_reconcile_transaction_ref.model_easy_reconcile_advanced_transaction_ref
1126+msgid "easy.reconcile.advanced.transaction_ref"
1127+msgstr ""
1128+
1129+#. module: account_advanced_reconcile_transaction_ref
1130+#: field:account.move.line,transaction_ref:0
1131+msgid "Transaction Ref."
1132+msgstr ""
1133+
1134+#. module: account_advanced_reconcile_transaction_ref
1135+#: field:easy.reconcile.advanced.transaction_ref,journal_id:0
1136+msgid "Journal"
1137+msgstr ""
1138+
1139+#. module: account_advanced_reconcile_transaction_ref
1140+#: field:easy.reconcile.advanced.transaction_ref,account_profit_id:0
1141+msgid "Account Profit"
1142+msgstr ""
1143+
1144+#. module: account_advanced_reconcile_transaction_ref
1145+#: model:ir.model,name:account_advanced_reconcile_transaction_ref.model_account_bank_statement
1146+msgid "Bank Statement"
1147+msgstr ""
1148+
1149+#. module: account_advanced_reconcile_transaction_ref
1150+#: field:easy.reconcile.advanced.transaction_ref,filter:0
1151+msgid "Filter"
1152+msgstr ""
1153+
1154+#. module: account_advanced_reconcile_transaction_ref
1155+#: model:ir.model,name:account_advanced_reconcile_transaction_ref.model_account_easy_reconcile_method
1156+msgid "reconcile method for account_easy_reconcile"
1157+msgstr ""
1158+
1159+#. module: account_advanced_reconcile_transaction_ref
1160+#: field:easy.reconcile.advanced.transaction_ref,date_base_on:0
1161+msgid "Date of reconciliation"
1162+msgstr ""
1163+
1164+#. module: account_advanced_reconcile_transaction_ref
1165+#: model:ir.model,name:account_advanced_reconcile_transaction_ref.model_account_move_line
1166+msgid "Journal Items"
1167+msgstr ""
1168+
1169+#. module: account_advanced_reconcile_transaction_ref
1170+#: model:ir.model,name:account_advanced_reconcile_transaction_ref.model_easy_reconcile_advanced
1171+msgid "easy.reconcile.advanced"
1172+msgstr ""
1173+
1174+#. module: account_advanced_reconcile_transaction_ref
1175+#: field:easy.reconcile.advanced.transaction_ref,account_lost_id:0
1176+msgid "Account Lost"
1177+msgstr ""
1178+
1179+#. module: account_advanced_reconcile_transaction_ref
1180+#: field:easy.reconcile.advanced.transaction_ref,write_off:0
1181+msgid "Write off allowed"
1182+msgstr ""
1183+
1184
1185=== added file 'account_advanced_reconcile_transaction_ref/i18n/fr.po'
1186--- account_advanced_reconcile_transaction_ref/i18n/fr.po 1970-01-01 00:00:00 +0000
1187+++ account_advanced_reconcile_transaction_ref/i18n/fr.po 2014-04-03 07:40:14 +0000
1188@@ -0,0 +1,106 @@
1189+# Translation of OpenERP Server.
1190+# This file contains the translation of the following modules:
1191+# * account_advanced_reconcile_transaction_ref
1192+#
1193+msgid ""
1194+msgstr ""
1195+"Project-Id-Version: OpenERP Server 7.0\n"
1196+"Report-Msgid-Bugs-To: \n"
1197+"POT-Creation-Date: 2014-01-21 11:55+0000\n"
1198+"PO-Revision-Date: 2014-03-21 15:25+0000\n"
1199+"Last-Translator: Vincent Renaville@camptocamp "
1200+"<vincent.renaville@camptocamp.com>\n"
1201+"Language-Team: \n"
1202+"MIME-Version: 1.0\n"
1203+"Content-Type: text/plain; charset=UTF-8\n"
1204+"Content-Transfer-Encoding: 8bit\n"
1205+"X-Launchpad-Export-Date: 2014-03-22 07:11+0000\n"
1206+"X-Generator: Launchpad (build 16967)\n"
1207+
1208+#. module: account_advanced_reconcile_transaction_ref
1209+#: field:easy.reconcile.advanced.transaction_ref,partner_ids:0
1210+msgid "Restrict on partners"
1211+msgstr "Restriction sur les partenaires"
1212+
1213+#. module: account_advanced_reconcile_transaction_ref
1214+#: field:easy.reconcile.advanced.transaction_ref,account_id:0
1215+msgid "Account"
1216+msgstr "Compte"
1217+
1218+#. module: account_advanced_reconcile_transaction_ref
1219+#: view:account.easy.reconcile:0
1220+msgid "Advanced. Partner and Transaction Ref"
1221+msgstr "Avancé. Partenaire et Référence de transaction"
1222+
1223+#. module: account_advanced_reconcile_transaction_ref
1224+#: view:account.easy.reconcile:0
1225+msgid ""
1226+"Match multiple debit vs multiple credit entries. Allow partial "
1227+"reconciliation. The lines should have the partner, the credit entry "
1228+"transaction ref. is matched vs the debit entry transaction ref. or name."
1229+msgstr ""
1230+"Le lettrage peut s'effectuer sur plusieurs écritures de débit et crédit. Le "
1231+"Lettrage partiel est autorisé. Les écritures doivent avoir le même "
1232+"partenaire et la même référence de transaction sur les écritures de crédit "
1233+"doit se retrouver dans la référence de transaction ou la description sur les "
1234+"écritures de débit."
1235+
1236+#. module: account_advanced_reconcile_transaction_ref
1237+#: model:ir.model,name:account_advanced_reconcile_transaction_ref.model_easy_reconcile_advanced_transaction_ref
1238+msgid "easy.reconcile.advanced.transaction_ref"
1239+msgstr "easy.reconcile.advanced.transaction_ref"
1240+
1241+#. module: account_advanced_reconcile_transaction_ref
1242+#: field:account.move.line,transaction_ref:0
1243+msgid "Transaction Ref."
1244+msgstr "Réf. de transaction"
1245+
1246+#. module: account_advanced_reconcile_transaction_ref
1247+#: field:easy.reconcile.advanced.transaction_ref,journal_id:0
1248+msgid "Journal"
1249+msgstr "Journal"
1250+
1251+#. module: account_advanced_reconcile_transaction_ref
1252+#: field:easy.reconcile.advanced.transaction_ref,account_profit_id:0
1253+msgid "Account Profit"
1254+msgstr "Compte de produit"
1255+
1256+#. module: account_advanced_reconcile_transaction_ref
1257+#: model:ir.model,name:account_advanced_reconcile_transaction_ref.model_account_bank_statement
1258+msgid "Bank Statement"
1259+msgstr "Relevé bancaire"
1260+
1261+#. module: account_advanced_reconcile_transaction_ref
1262+#: field:easy.reconcile.advanced.transaction_ref,filter:0
1263+msgid "Filter"
1264+msgstr "Filtre"
1265+
1266+#. module: account_advanced_reconcile_transaction_ref
1267+#: model:ir.model,name:account_advanced_reconcile_transaction_ref.model_account_easy_reconcile_method
1268+msgid "reconcile method for account_easy_reconcile"
1269+msgstr "Méthode de lettrage pour le module account_easy_reconcile"
1270+
1271+#. module: account_advanced_reconcile_transaction_ref
1272+#: field:easy.reconcile.advanced.transaction_ref,date_base_on:0
1273+msgid "Date of reconciliation"
1274+msgstr "Date de lettrage"
1275+
1276+#. module: account_advanced_reconcile_transaction_ref
1277+#: model:ir.model,name:account_advanced_reconcile_transaction_ref.model_account_move_line
1278+msgid "Journal Items"
1279+msgstr "Écritures comptables"
1280+
1281+#. module: account_advanced_reconcile_transaction_ref
1282+#: model:ir.model,name:account_advanced_reconcile_transaction_ref.model_easy_reconcile_advanced
1283+msgid "easy.reconcile.advanced"
1284+msgstr "easy.reconcile.advanced"
1285+
1286+#. module: account_advanced_reconcile_transaction_ref
1287+#: field:easy.reconcile.advanced.transaction_ref,account_lost_id:0
1288+msgid "Account Lost"
1289+msgstr "Compte de charge"
1290+
1291+#. module: account_advanced_reconcile_transaction_ref
1292+#: field:easy.reconcile.advanced.transaction_ref,write_off:0
1293+msgid "Write off allowed"
1294+msgstr "Ecart autorisé"
1295
1296=== added directory 'account_easy_reconcile'
1297=== added file 'account_easy_reconcile/__init__.py'
1298--- account_easy_reconcile/__init__.py 1970-01-01 00:00:00 +0000
1299+++ account_easy_reconcile/__init__.py 2014-04-03 07:40:14 +0000
1300@@ -0,0 +1,25 @@
1301+# -*- coding: utf-8 -*-
1302+##############################################################################
1303+#
1304+# Copyright 2012 Camptocamp SA (Guewen Baconnier)
1305+# Copyright (C) 2010 Sébastien Beau
1306+#
1307+# This program is free software: you can redistribute it and/or modify
1308+# it under the terms of the GNU Affero General Public License as
1309+# published by the Free Software Foundation, either version 3 of the
1310+# License, or (at your option) any later version.
1311+#
1312+# This program is distributed in the hope that it will be useful,
1313+# but WITHOUT ANY WARRANTY; without even the implied warranty of
1314+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1315+# GNU Affero General Public License for more details.
1316+#
1317+# You should have received a copy of the GNU Affero General Public License
1318+# along with this program. If not, see <http://www.gnu.org/licenses/>.
1319+#
1320+##############################################################################
1321+
1322+import easy_reconcile
1323+import base_reconciliation
1324+import simple_reconciliation
1325+import easy_reconcile_history
1326
1327=== added file 'account_easy_reconcile/__openerp__.py'
1328--- account_easy_reconcile/__openerp__.py 1970-01-01 00:00:00 +0000
1329+++ account_easy_reconcile/__openerp__.py 2014-04-03 07:40:14 +0000
1330@@ -0,0 +1,66 @@
1331+# -*- coding: utf-8 -*-
1332+##############################################################################
1333+#
1334+# Copyright 2012 Camptocamp SA (Guewen Baconnier)
1335+# Copyright (C) 2010 Sébastien Beau
1336+#
1337+# This program is free software: you can redistribute it and/or modify
1338+# it under the terms of the GNU Affero General Public License as
1339+# published by the Free Software Foundation, either version 3 of the
1340+# License, or (at your option) any later version.
1341+#
1342+# This program is distributed in the hope that it will be useful,
1343+# but WITHOUT ANY WARRANTY; without even the implied warranty of
1344+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1345+# GNU Affero General Public License for more details.
1346+#
1347+# You should have received a copy of the GNU Affero General Public License
1348+# along with this program. If not, see <http://www.gnu.org/licenses/>.
1349+#
1350+##############################################################################
1351+
1352+{
1353+ "name": "Easy Reconcile",
1354+ "version": "1.3.1",
1355+ "depends": ["account"],
1356+ "author": "Akretion,Camptocamp",
1357+ "description": """
1358+Easy Reconcile
1359+==============
1360+
1361+This is a shared work between Akretion and Camptocamp
1362+in order to provide:
1363+ - reconciliation facilities for big volume of transactions
1364+ - setup different profiles of reconciliation by account
1365+ - each profile can use many methods of reconciliation
1366+ - this module is also a base to create others
1367+ reconciliation methods which can plug in the profiles
1368+ - a profile a reconciliation can be run manually
1369+ or by a cron
1370+ - monitoring of reconciliation runs with an history
1371+ which keep track of the reconciled Journal items
1372+
1373+2 simple reconciliation methods are integrated
1374+in this module, the simple reconciliations works
1375+on 2 lines (1 debit / 1 credit) and do not allow
1376+partial reconcilation, they also match on 1 key,
1377+partner or Journal item name.
1378+
1379+You may be interested to install also the
1380+``account_advanced_reconciliation`` module.
1381+This latter add more complex reconciliations,
1382+allows multiple lines and partial.
1383+
1384+""",
1385+ "website": "http://www.akretion.com/",
1386+ "category": "Finance",
1387+ "demo_xml": [],
1388+ "data": ["easy_reconcile.xml",
1389+ "easy_reconcile_history_view.xml",
1390+ "security/ir_rule.xml",
1391+ "security/ir.model.access.csv"],
1392+ 'license': 'AGPL-3',
1393+ "auto_install": False,
1394+ "installable": True,
1395+
1396+}
1397
1398=== added file 'account_easy_reconcile/base_reconciliation.py'
1399--- account_easy_reconcile/base_reconciliation.py 1970-01-01 00:00:00 +0000
1400+++ account_easy_reconcile/base_reconciliation.py 2014-04-03 07:40:14 +0000
1401@@ -0,0 +1,208 @@
1402+# -*- coding: utf-8 -*-
1403+##############################################################################
1404+#
1405+# Copyright 2012-2013 Camptocamp SA (Guewen Baconnier)
1406+# Copyright (C) 2010 Sébastien Beau
1407+#
1408+# This program is free software: you can redistribute it and/or modify
1409+# it under the terms of the GNU Affero General Public License as
1410+# published by the Free Software Foundation, either version 3 of the
1411+# License, or (at your option) any later version.
1412+#
1413+# This program is distributed in the hope that it will be useful,
1414+# but WITHOUT ANY WARRANTY; without even the implied warranty of
1415+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1416+# GNU Affero General Public License for more details.
1417+#
1418+# You should have received a copy of the GNU Affero General Public License
1419+# along with this program. If not, see <http://www.gnu.org/licenses/>.
1420+#
1421+##############################################################################
1422+
1423+from openerp.osv import fields, orm
1424+from operator import itemgetter, attrgetter
1425+
1426+
1427+class easy_reconcile_base(orm.AbstractModel):
1428+ """Abstract Model for reconciliation methods"""
1429+
1430+ _name = 'easy.reconcile.base'
1431+
1432+ _inherit = 'easy.reconcile.options'
1433+
1434+ _columns = {
1435+ 'account_id': fields.many2one(
1436+ 'account.account', 'Account', required=True),
1437+ 'partner_ids': fields.many2many(
1438+ 'res.partner', string="Restrict on partners"),
1439+ # other columns are inherited from easy.reconcile.options
1440+ }
1441+
1442+ def automatic_reconcile(self, cr, uid, ids, context=None):
1443+ """ Reconciliation method called from the view.
1444+
1445+ :return: list of reconciled ids, list of partially reconciled items
1446+ """
1447+ if isinstance(ids, (int, long)):
1448+ ids = [ids]
1449+ assert len(ids) == 1, "Has to be called on one id"
1450+ rec = self.browse(cr, uid, ids[0], context=context)
1451+ return self._action_rec(cr, uid, rec, context=context)
1452+
1453+ def _action_rec(self, cr, uid, rec, context=None):
1454+ """ Must be inherited to implement the reconciliation
1455+
1456+ :return: list of reconciled ids
1457+ """
1458+ raise NotImplementedError
1459+
1460+ def _base_columns(self, rec):
1461+ """ Mandatory columns for move lines queries
1462+ An extra column aliased as ``key`` should be defined
1463+ in each query."""
1464+ aml_cols = (
1465+ 'id',
1466+ 'debit',
1467+ 'credit',
1468+ 'date',
1469+ 'period_id',
1470+ 'ref',
1471+ 'name',
1472+ 'partner_id',
1473+ 'account_id',
1474+ 'move_id')
1475+ return ["account_move_line.%s" % col for col in aml_cols]
1476+
1477+ def _select(self, rec, *args, **kwargs):
1478+ return "SELECT %s" % ', '.join(self._base_columns(rec))
1479+
1480+ def _from(self, rec, *args, **kwargs):
1481+ return "FROM account_move_line"
1482+
1483+ def _where(self, rec, *args, **kwargs):
1484+ where = ("WHERE account_move_line.account_id = %s "
1485+ "AND account_move_line.reconcile_id IS NULL ")
1486+ # it would be great to use dict for params
1487+ # but as we use _where_calc in _get_filter
1488+ # which returns a list, we have to
1489+ # accomodate with that
1490+ params = [rec.account_id.id]
1491+
1492+ if rec.partner_ids:
1493+ where += " AND account_move_line.partner_id IN %s"
1494+ params.append(tuple([l.id for l in rec.partner_ids]))
1495+ return where, params
1496+
1497+ def _get_filter(self, cr, uid, rec, context):
1498+ ml_obj = self.pool.get('account.move.line')
1499+ where = ''
1500+ params = []
1501+ if rec.filter:
1502+ dummy, where, params = ml_obj._where_calc(
1503+ cr, uid, eval(rec.filter), context=context).get_sql()
1504+ if where:
1505+ where = " AND %s" % where
1506+ return where, params
1507+
1508+ def _below_writeoff_limit(self, cr, uid, rec, lines,
1509+ writeoff_limit, context=None):
1510+ precision = self.pool.get('decimal.precision').precision_get(
1511+ cr, uid, 'Account')
1512+ keys = ('debit', 'credit')
1513+ sums = reduce(
1514+ lambda line, memo:
1515+ dict((key, value + memo[key])
1516+ for key, value
1517+ in line.iteritems()
1518+ if key in keys), lines)
1519+
1520+ debit, credit = sums['debit'], sums['credit']
1521+ writeoff_amount = round(debit - credit, precision)
1522+ return bool(writeoff_limit >= abs(writeoff_amount)), debit, credit
1523+
1524+ def _get_rec_date(self, cr, uid, rec, lines,
1525+ based_on='end_period_last_credit', context=None):
1526+ period_obj = self.pool.get('account.period')
1527+
1528+ def last_period(mlines):
1529+ period_ids = [ml['period_id'] for ml in mlines]
1530+ periods = period_obj.browse(
1531+ cr, uid, period_ids, context=context)
1532+ return max(periods, key=attrgetter('date_stop'))
1533+
1534+ def last_date(mlines):
1535+ return max(mlines, key=itemgetter('date'))
1536+
1537+ def credit(mlines):
1538+ return [l for l in mlines if l['credit'] > 0]
1539+
1540+ def debit(mlines):
1541+ return [l for l in mlines if l['debit'] > 0]
1542+
1543+ if based_on == 'end_period_last_credit':
1544+ return last_period(credit(lines)).date_stop
1545+ if based_on == 'end_period':
1546+ return last_period(lines).date_stop
1547+ elif based_on == 'newest':
1548+ return last_date(lines)['date']
1549+ elif based_on == 'newest_credit':
1550+ return last_date(credit(lines))['date']
1551+ elif based_on == 'newest_debit':
1552+ return last_date(debit(lines))['date']
1553+ # reconcilation date will be today
1554+ # when date is None
1555+ return None
1556+
1557+ def _reconcile_lines(self, cr, uid, rec, lines, allow_partial=False, context=None):
1558+ """ Try to reconcile given lines
1559+
1560+ :param list lines: list of dict of move lines, they must at least
1561+ contain values for : id, debit, credit
1562+ :param boolean allow_partial: if True, partial reconciliation will be
1563+ created, otherwise only Full
1564+ reconciliation will be created
1565+ :return: tuple of boolean values, first item is wether the items
1566+ have been reconciled or not,
1567+ the second is wether the reconciliation is full (True)
1568+ or partial (False)
1569+ """
1570+ if context is None:
1571+ context = {}
1572+
1573+ ml_obj = self.pool.get('account.move.line')
1574+ writeoff = rec.write_off
1575+
1576+ line_ids = [l['id'] for l in lines]
1577+ below_writeoff, sum_debit, sum_credit = self._below_writeoff_limit(
1578+ cr, uid, rec, lines, writeoff, context=context)
1579+ date = self._get_rec_date(
1580+ cr, uid, rec, lines, rec.date_base_on, context=context)
1581+
1582+ rec_ctx = dict(context, date_p=date)
1583+ if below_writeoff:
1584+ if sum_credit < sum_debit:
1585+ writeoff_account_id = rec.account_profit_id.id
1586+ else:
1587+ writeoff_account_id = rec.account_lost_id.id
1588+
1589+ period_id = self.pool.get('account.period').find(
1590+ cr, uid, dt=date, context=context)[0]
1591+
1592+ ml_obj.reconcile(
1593+ cr, uid,
1594+ line_ids,
1595+ type='auto',
1596+ writeoff_acc_id=writeoff_account_id,
1597+ writeoff_period_id=period_id,
1598+ writeoff_journal_id=rec.journal_id.id,
1599+ context=rec_ctx)
1600+ return True, True
1601+ elif allow_partial:
1602+ ml_obj.reconcile_partial(
1603+ cr, uid,
1604+ line_ids,
1605+ type='manual',
1606+ context=rec_ctx)
1607+ return True, False
1608+
1609+ return False, False
1610
1611=== added file 'account_easy_reconcile/easy_reconcile.py'
1612--- account_easy_reconcile/easy_reconcile.py 1970-01-01 00:00:00 +0000
1613+++ account_easy_reconcile/easy_reconcile.py 2014-04-03 07:40:14 +0000
1614@@ -0,0 +1,338 @@
1615+# -*- coding: utf-8 -*-
1616+##############################################################################
1617+#
1618+# Copyright 2012-2013 Camptocamp SA (Guewen Baconnier)
1619+# Copyright (C) 2010 Sébastien Beau
1620+#
1621+# This program is free software: you can redistribute it and/or modify
1622+# it under the terms of the GNU Affero General Public License as
1623+# published by the Free Software Foundation, either version 3 of the
1624+# License, or (at your option) any later version.
1625+#
1626+# This program is distributed in the hope that it will be useful,
1627+# but WITHOUT ANY WARRANTY; without even the implied warranty of
1628+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1629+# GNU Affero General Public License for more details.
1630+#
1631+# You should have received a copy of the GNU Affero General Public License
1632+# along with this program. If not, see <http://www.gnu.org/licenses/>.
1633+#
1634+##############################################################################
1635+
1636+from openerp.osv import fields, osv, orm
1637+from openerp.tools.translate import _
1638+from openerp.tools import DEFAULT_SERVER_DATETIME_FORMAT
1639+from openerp.tools.translate import _
1640+
1641+
1642+class easy_reconcile_options(orm.AbstractModel):
1643+ """Options of a reconciliation profile
1644+
1645+ Columns shared by the configuration of methods
1646+ and by the reconciliation wizards.
1647+ This allows decoupling of the methods and the
1648+ wizards and allows to launch the wizards alone
1649+ """
1650+
1651+ _name = 'easy.reconcile.options'
1652+
1653+ def _get_rec_base_date(self, cr, uid, context=None):
1654+ return [('end_period_last_credit', 'End of period of most recent credit'),
1655+ ('newest', 'Most recent move line'),
1656+ ('actual', 'Today'),
1657+ ('end_period', 'End of period of most recent move line'),
1658+ ('newest_credit', 'Date of most recent credit'),
1659+ ('newest_debit', 'Date of most recent debit')]
1660+
1661+ _columns = {
1662+ 'write_off': fields.float('Write off allowed'),
1663+ 'account_lost_id': fields.many2one(
1664+ 'account.account', 'Account Lost'),
1665+ 'account_profit_id': fields.many2one(
1666+ 'account.account', 'Account Profit'),
1667+ 'journal_id': fields.many2one(
1668+ 'account.journal', 'Journal'),
1669+ 'date_base_on': fields.selection(
1670+ _get_rec_base_date,
1671+ required=True,
1672+ string='Date of reconciliation'),
1673+ 'filter': fields.char('Filter', size=128),
1674+ }
1675+
1676+ _defaults = {
1677+ 'write_off': 0.,
1678+ 'date_base_on': 'end_period_last_credit',
1679+ }
1680+
1681+
1682+class account_easy_reconcile_method(orm.Model):
1683+
1684+ _name = 'account.easy.reconcile.method'
1685+ _description = 'reconcile method for account_easy_reconcile'
1686+
1687+ _inherit = 'easy.reconcile.options'
1688+
1689+ _order = 'sequence'
1690+
1691+ def _get_all_rec_method(self, cr, uid, context=None):
1692+ return [
1693+ ('easy.reconcile.simple.name', 'Simple. Amount and Name'),
1694+ ('easy.reconcile.simple.partner', 'Simple. Amount and Partner'),
1695+ ('easy.reconcile.simple.reference', 'Simple. Amount and Reference'),
1696+ ]
1697+
1698+ def _get_rec_method(self, cr, uid, context=None):
1699+ return self._get_all_rec_method(cr, uid, context=None)
1700+
1701+ _columns = {
1702+ 'name': fields.selection(
1703+ _get_rec_method, 'Type', required=True),
1704+ 'sequence': fields.integer(
1705+ 'Sequence',
1706+ required=True,
1707+ help="The sequence field is used to order "
1708+ "the reconcile method"),
1709+ 'task_id': fields.many2one(
1710+ 'account.easy.reconcile',
1711+ string='Task',
1712+ required=True,
1713+ ondelete='cascade'),
1714+ 'company_id': fields.related('task_id','company_id',
1715+ relation='res.company',
1716+ type='many2one',
1717+ string='Company',
1718+ store=True,
1719+ readonly=True),
1720+ }
1721+
1722+ _defaults = {
1723+ 'sequence': 1,
1724+ }
1725+
1726+ def init(self, cr):
1727+ """ Migration stuff
1728+
1729+ Name is not anymore methods names but the name
1730+ of the model which does the reconciliation
1731+ """
1732+ cr.execute("""
1733+ UPDATE account_easy_reconcile_method
1734+ SET name = 'easy.reconcile.simple.partner'
1735+ WHERE name = 'action_rec_auto_partner'
1736+ """)
1737+ cr.execute("""
1738+ UPDATE account_easy_reconcile_method
1739+ SET name = 'easy.reconcile.simple.name'
1740+ WHERE name = 'action_rec_auto_name'
1741+ """)
1742+
1743+
1744+class account_easy_reconcile(orm.Model):
1745+
1746+ _name = 'account.easy.reconcile'
1747+ _description = 'account easy reconcile'
1748+
1749+ def _get_total_unrec(self, cr, uid, ids, name, arg, context=None):
1750+ obj_move_line = self.pool.get('account.move.line')
1751+ res = {}
1752+ for task in self.browse(cr, uid, ids, context=context):
1753+ res[task.id] = len(obj_move_line.search(
1754+ cr, uid,
1755+ [('account_id', '=', task.account.id),
1756+ ('reconcile_id', '=', False),
1757+ ('reconcile_partial_id', '=', False)],
1758+ context=context))
1759+ return res
1760+
1761+ def _get_partial_rec(self, cr, uid, ids, name, arg, context=None):
1762+ obj_move_line = self.pool.get('account.move.line')
1763+ res = {}
1764+ for task in self.browse(cr, uid, ids, context=context):
1765+ res[task.id] = len(obj_move_line.search(
1766+ cr, uid,
1767+ [('account_id', '=', task.account.id),
1768+ ('reconcile_id', '=', False),
1769+ ('reconcile_partial_id', '!=', False)],
1770+ context=context))
1771+ return res
1772+
1773+ def _last_history(self, cr, uid, ids, name, args, context=None):
1774+ result = {}
1775+ for history in self.browse(cr, uid, ids, context=context):
1776+ result[history.id] = False
1777+ if history.history_ids:
1778+ # history is sorted by date desc
1779+ result[history.id] = history.history_ids[0].id
1780+ return result
1781+
1782+ _columns = {
1783+ 'name': fields.char('Name', required=True),
1784+ 'account': fields.many2one(
1785+ 'account.account', 'Account', required=True),
1786+ 'reconcile_method': fields.one2many(
1787+ 'account.easy.reconcile.method', 'task_id', 'Method'),
1788+ 'unreconciled_count': fields.function(
1789+ _get_total_unrec, type='integer', string='Unreconciled Items'),
1790+ 'reconciled_partial_count': fields.function(
1791+ _get_partial_rec,
1792+ type='integer',
1793+ string='Partially Reconciled Items'),
1794+ 'history_ids': fields.one2many(
1795+ 'easy.reconcile.history',
1796+ 'easy_reconcile_id',
1797+ string='History',
1798+ readonly=True),
1799+ 'last_history':
1800+ fields.function(
1801+ _last_history,
1802+ string='Last History',
1803+ type='many2one',
1804+ relation='easy.reconcile.history',
1805+ readonly=True),
1806+ 'company_id': fields.many2one('res.company', 'Company'),
1807+ }
1808+
1809+ def _prepare_run_transient(self, cr, uid, rec_method, context=None):
1810+ return {'account_id': rec_method.task_id.account.id,
1811+ 'write_off': rec_method.write_off,
1812+ 'account_lost_id': (rec_method.account_lost_id and
1813+ rec_method.account_lost_id.id),
1814+ 'account_profit_id': (rec_method.account_profit_id and
1815+ rec_method.account_profit_id.id),
1816+ 'journal_id': (rec_method.journal_id and
1817+ rec_method.journal_id.id),
1818+ 'date_base_on': rec_method.date_base_on,
1819+ 'filter': rec_method.filter}
1820+
1821+ def run_reconcile(self, cr, uid, ids, context=None):
1822+ def find_reconcile_ids(fieldname, move_line_ids):
1823+ if not move_line_ids:
1824+ return []
1825+ sql = ("SELECT DISTINCT " + fieldname +
1826+ " FROM account_move_line "
1827+ " WHERE id in %s "
1828+ " AND " + fieldname + " IS NOT NULL")
1829+ cr.execute(sql, (tuple(move_line_ids),))
1830+ res = cr.fetchall()
1831+ return [row[0] for row in res]
1832+
1833+ for rec in self.browse(cr, uid, ids, context=context):
1834+ all_ml_rec_ids = []
1835+ all_ml_partial_ids = []
1836+
1837+ for method in rec.reconcile_method:
1838+ rec_model = self.pool.get(method.name)
1839+ auto_rec_id = rec_model.create(
1840+ cr, uid,
1841+ self._prepare_run_transient(
1842+ cr, uid, method, context=context),
1843+ context=context)
1844+
1845+ ml_rec_ids, ml_partial_ids = rec_model.automatic_reconcile(
1846+ cr, uid, auto_rec_id, context=context)
1847+
1848+ all_ml_rec_ids += ml_rec_ids
1849+ all_ml_partial_ids += ml_partial_ids
1850+
1851+ reconcile_ids = find_reconcile_ids(
1852+ 'reconcile_id', all_ml_rec_ids)
1853+ partial_ids = find_reconcile_ids(
1854+ 'reconcile_partial_id', all_ml_partial_ids)
1855+
1856+ self.pool.get('easy.reconcile.history').create(
1857+ cr,
1858+ uid,
1859+ {'easy_reconcile_id': rec.id,
1860+ 'date': fields.datetime.now(),
1861+ 'reconcile_ids': [(4, rid) for rid in reconcile_ids],
1862+ 'reconcile_partial_ids': [(4, rid) for rid in partial_ids]},
1863+ context=context)
1864+ return True
1865+
1866+ def _no_history(self, cr, uid, rec, context=None):
1867+ """ Raise an `osv.except_osv` error, supposed to
1868+ be called when there is no history on the reconciliation
1869+ task.
1870+ """
1871+ raise osv.except_osv(
1872+ _('Error'),
1873+ _('There is no history of reconciled '
1874+ 'items on the task: %s.') % rec.name)
1875+
1876+ def _open_move_line_list(sefl, cr, uid, move_line_ids, name, context=None):
1877+ return {
1878+ 'name': name,
1879+ 'view_mode': 'tree,form',
1880+ 'view_id': False,
1881+ 'view_type': 'form',
1882+ 'res_model': 'account.move.line',
1883+ 'type': 'ir.actions.act_window',
1884+ 'nodestroy': True,
1885+ 'target': 'current',
1886+ 'domain': unicode([('id', 'in', move_line_ids)]),
1887+ }
1888+
1889+ def open_unreconcile(self, cr, uid, ids, context=None):
1890+ """ Open the view of move line with the unreconciled move lines
1891+ """
1892+
1893+ assert len(ids) == 1 , \
1894+ "You can only open entries from one profile at a time"
1895+
1896+ obj_move_line = self.pool.get('account.move.line')
1897+ res = {}
1898+ for task in self.browse(cr, uid, ids, context=context):
1899+ line_ids = obj_move_line.search(
1900+ cr, uid,
1901+ [('account_id', '=', task.account.id),
1902+ ('reconcile_id', '=', False),
1903+ ('reconcile_partial_id', '=', False)],
1904+ context=context)
1905+
1906+ name = _('Unreconciled items')
1907+ return self._open_move_line_list(cr, uid, line_ids, name, context=context)
1908+
1909+ def open_partial_reconcile(self, cr, uid, ids, context=None):
1910+ """ Open the view of move line with the unreconciled move lines
1911+ """
1912+
1913+ assert len(ids) == 1 , \
1914+ "You can only open entries from one profile at a time"
1915+
1916+ obj_move_line = self.pool.get('account.move.line')
1917+ res = {}
1918+ for task in self.browse(cr, uid, ids, context=context):
1919+ line_ids = obj_move_line.search(
1920+ cr, uid,
1921+ [('account_id', '=', task.account.id),
1922+ ('reconcile_id', '=', False),
1923+ ('reconcile_partial_id', '!=', False)],
1924+ context=context)
1925+ name = _('Partial reconciled items')
1926+ return self._open_move_line_list(cr, uid, line_ids, name, context=context)
1927+
1928+ def last_history_reconcile(self, cr, uid, rec_id, context=None):
1929+ """ Get the last history record for this reconciliation profile
1930+ and return the action which opens move lines reconciled
1931+ """
1932+ if isinstance(rec_id, (tuple, list)):
1933+ assert len(rec_id) == 1, \
1934+ "Only 1 id expected"
1935+ rec_id = rec_id[0]
1936+ rec = self.browse(cr, uid, rec_id, context=context)
1937+ if not rec.last_history:
1938+ self._no_history(cr, uid, rec, context=context)
1939+ return rec.last_history.open_reconcile()
1940+
1941+ def last_history_partial(self, cr, uid, rec_id, context=None):
1942+ """ Get the last history record for this reconciliation profile
1943+ and return the action which opens move lines reconciled
1944+ """
1945+ if isinstance(rec_id, (tuple, list)):
1946+ assert len(rec_id) == 1, \
1947+ "Only 1 id expected"
1948+ rec_id = rec_id[0]
1949+ rec = self.browse(cr, uid, rec_id, context=context)
1950+ if not rec.last_history:
1951+ self._no_history(cr, uid, rec, context=context)
1952+ return rec.last_history.open_partial()
1953
1954=== added file 'account_easy_reconcile/easy_reconcile.xml'
1955--- account_easy_reconcile/easy_reconcile.xml 1970-01-01 00:00:00 +0000
1956+++ account_easy_reconcile/easy_reconcile.xml 2014-04-03 07:40:14 +0000
1957@@ -0,0 +1,162 @@
1958+<?xml version="1.0" encoding="UTF-8"?>
1959+<openerp>
1960+<data>
1961+
1962+ <!-- account.easy.reconcile view -->
1963+ <record id="account_easy_reconcile_form" model="ir.ui.view">
1964+ <field name="name">account.easy.reconcile.form</field>
1965+ <field name="priority">20</field>
1966+ <field name="model">account.easy.reconcile</field>
1967+ <field name="arch" type="xml">
1968+ <form string="Automatic Easy Reconcile" version="7.0">
1969+ <header>
1970+ <button name="run_reconcile" class="oe_highlight"
1971+ string="Start Auto Reconciliation" type="object"/>
1972+ <button icon="STOCK_JUMP_TO" name="last_history_reconcile"
1973+ string="Display items reconciled on the last run"
1974+ type="object"/>
1975+ <button icon="STOCK_JUMP_TO" name="last_history_partial"
1976+ string="Display items partially reconciled on the last run"
1977+ type="object"/>
1978+ </header>
1979+ <sheet>
1980+ <separator colspan="4" string="Profile Information" />
1981+ <group>
1982+ <group>
1983+ <field name="name" select="1"/>
1984+ <field name="account"/>
1985+ <field name="company_id" groups="base.group_multi_company"/>
1986+ </group>
1987+ <group>
1988+ <group>
1989+ <field name="unreconciled_count"/>
1990+ <button icon="STOCK_JUMP_TO" name="open_unreconcile"
1991+ string="Go to unreconciled items" type="object"/>
1992+ </group>
1993+ <group>
1994+ <field name="reconciled_partial_count"/>
1995+ <button icon="STOCK_JUMP_TO" name="open_partial_reconcile"
1996+ string="Go to partial reconciled items" type="object"/>
1997+ </group>
1998+ </group>
1999+ </group>
2000+ <notebook colspan="4">
2001+ <page name="methods" string="Configuration">
2002+ <field name="reconcile_method" colspan = "4" nolabel="1"/>
2003+ </page>
2004+ <page name="history" string="History">
2005+ <field name="history_ids" nolabel="1">
2006+ <tree string="Automatic Easy Reconcile History">
2007+ <field name="date"/>
2008+ <button icon="STOCK_JUMP_TO" name="open_reconcile"
2009+ string="Go to reconciled items" type="object"/>
2010+ <button icon="STOCK_JUMP_TO" name="open_partial"
2011+ string="Go to partially reconciled items" type="object"/>
2012+ </tree>
2013+ </field>
2014+ </page>
2015+ <page name="information" string="Information">
2016+ <separator colspan="4" string="Simple. Amount and Name"/>
2017+ <label string="Match one debit line vs one credit line. Do not allow partial reconciliation.
2018+The lines should have the same amount (with the write-off) and the same name to be reconciled." colspan="4"/>
2019+
2020+ <separator colspan="4" string="Simple. Amount and Partner"/>
2021+ <label string="Match one debit line vs one credit line. Do not allow partial reconciliation.
2022+The lines should have the same amount (with the write-off) and the same partner to be reconciled." colspan="4"/>
2023+
2024+ <separator colspan="4" string="Simple. Amount and Reference"/>
2025+ <label string="Match one debit line vs one credit line. Do not allow partial reconciliation.
2026+The lines should have the same amount (with the write-off) and the same reference to be reconciled." colspan="4"/>
2027+
2028+ </page>
2029+ </notebook>
2030+ </sheet>
2031+ </form>
2032+ </field>
2033+ </record>
2034+
2035+ <record id="account_easy_reconcile_tree" model="ir.ui.view">
2036+ <field name="name">account.easy.reconcile.tree</field>
2037+ <field name="priority">20</field>
2038+ <field name="model">account.easy.reconcile</field>
2039+ <field name="arch" type="xml">
2040+ <tree string="Automatic Easy Reconcile">
2041+ <field name="name"/>
2042+ <field name="account"/>
2043+ <field name="company_id" groups="base.group_multi_company"/>
2044+ <field name="unreconciled_count"/>
2045+ <field name="reconciled_partial_count"/>
2046+ <button icon="gtk-ok" name="run_reconcile" colspan="4"
2047+ string="Start Auto Reconcilation" type="object"/>
2048+ <button icon="STOCK_JUMP_TO" name="last_history_reconcile" colspan="2"
2049+ string="Display items reconciled on the last run" type="object"/>
2050+ <button icon="STOCK_JUMP_TO" name="last_history_partial" colspan="2"
2051+ string="Display items partially reconciled on the last run"
2052+ type="object"/>
2053+ </tree>
2054+ </field>
2055+ </record>
2056+
2057+ <record id="action_account_easy_reconcile" model="ir.actions.act_window">
2058+ <field name="name">Easy Automatic Reconcile</field>
2059+ <field name="type">ir.actions.act_window</field>
2060+ <field name="res_model">account.easy.reconcile</field>
2061+ <field name="view_type">form</field>
2062+ <field name="view_mode">tree,form</field>
2063+ <field name="help" type="html">
2064+ <p class="oe_view_nocontent_create">
2065+ Click to add a reconciliation profile.
2066+ </p><p>
2067+ A reconciliation profile specifies, for one account, how
2068+ the entries should be reconciled.
2069+ You can select one or many reconciliation methods which will
2070+ be run sequentially to match the entries between them.
2071+ </p>
2072+ </field>
2073+ </record>
2074+
2075+
2076+ <!-- account.easy.reconcile.method view -->
2077+
2078+ <record id="account_easy_reconcile_method_form" model="ir.ui.view">
2079+ <field name="name">account.easy.reconcile.method.form</field>
2080+ <field name="priority">20</field>
2081+ <field name="model">account.easy.reconcile.method</field>
2082+ <field name="arch" type="xml">
2083+ <form string="Automatic Easy Reconcile Method">
2084+ <field name="sequence"/>
2085+ <field name="name"/>
2086+ <field name="write_off"/>
2087+ <field name="account_lost_id" attrs="{'required':[('write_off','>',0)]}"/>
2088+ <field name="account_profit_id" attrs="{'required':[('write_off','>',0)]}"/>
2089+ <field name="journal_id" attrs="{'required':[('write_off','>',0)]}"/>
2090+ <field name="date_base_on"/>
2091+ </form>
2092+ </field>
2093+ </record>
2094+
2095+ <record id="account_easy_reconcile_method_tree" model="ir.ui.view">
2096+ <field name="name">account.easy.reconcile.method.tree</field>
2097+ <field name="priority">20</field>
2098+ <field name="model">account.easy.reconcile.method</field>
2099+ <field name="arch" type="xml">
2100+ <tree editable="top" string="Automatic Easy Reconcile Method">
2101+ <field name="sequence"/>
2102+ <field name="name"/>
2103+ <field name="write_off"/>
2104+ <field name="account_lost_id" attrs="{'required':[('write_off','>',0)]}"/>
2105+ <field name="account_profit_id" attrs="{'required':[('write_off','>',0)]}"/>
2106+ <field name="journal_id" attrs="{'required':[('write_off','>',0)]}"/>
2107+ <field name="date_base_on"/>
2108+ </tree>
2109+ </field>
2110+ </record>
2111+
2112+ <!-- menu item -->
2113+
2114+ <menuitem action="action_account_easy_reconcile"
2115+ id="menu_easy_reconcile"
2116+ parent="account.periodical_processing_reconciliation"/>
2117+
2118+</data>
2119+</openerp>
2120
2121=== added file 'account_easy_reconcile/easy_reconcile_history.py'
2122--- account_easy_reconcile/easy_reconcile_history.py 1970-01-01 00:00:00 +0000
2123+++ account_easy_reconcile/easy_reconcile_history.py 2014-04-03 07:40:14 +0000
2124@@ -0,0 +1,153 @@
2125+# -*- coding: utf-8 -*-
2126+##############################################################################
2127+#
2128+# Author: Guewen Baconnier
2129+# Copyright 2012 Camptocamp SA
2130+#
2131+# This program is free software: you can redistribute it and/or modify
2132+# it under the terms of the GNU Affero General Public License as
2133+# published by the Free Software Foundation, either version 3 of the
2134+# License, or (at your option) any later version.
2135+#
2136+# This program is distributed in the hope that it will be useful,
2137+# but WITHOUT ANY WARRANTY; without even the implied warranty of
2138+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2139+# GNU Affero General Public License for more details.
2140+#
2141+# You should have received a copy of the GNU Affero General Public License
2142+# along with this program. If not, see <http://www.gnu.org/licenses/>.
2143+#
2144+##############################################################################
2145+
2146+from openerp.osv import orm, fields
2147+from openerp.tools.translate import _
2148+
2149+
2150+class easy_reconcile_history(orm.Model):
2151+ """ Store an history of the runs per profile
2152+ Each history stores the list of reconciliations done"""
2153+
2154+ _name = 'easy.reconcile.history'
2155+ _rec_name = 'easy_reconcile_id'
2156+ _order = 'date DESC'
2157+
2158+ def _reconcile_line_ids(self, cr, uid, ids, name, args, context=None):
2159+ result = {}
2160+
2161+ for history in self.browse(cr, uid, ids, context=context):
2162+ result[history.id] = {}
2163+
2164+ move_line_ids = []
2165+ for reconcile in history.reconcile_ids:
2166+ move_line_ids += [line.id
2167+ for line
2168+ in reconcile.line_id]
2169+ result[history.id]['reconcile_line_ids'] = move_line_ids
2170+
2171+ move_line_ids = []
2172+ for reconcile in history.reconcile_partial_ids:
2173+ move_line_ids += [line.id
2174+ for line
2175+ in reconcile.line_partial_ids]
2176+ result[history.id]['partial_line_ids'] = move_line_ids
2177+
2178+ return result
2179+
2180+ _columns = {
2181+ 'easy_reconcile_id': fields.many2one(
2182+ 'account.easy.reconcile', 'Reconcile Profile', readonly=True),
2183+ 'date': fields.datetime('Run date', readonly=True),
2184+ 'reconcile_ids': fields.many2many(
2185+ 'account.move.reconcile',
2186+ 'account_move_reconcile_history_rel',
2187+ string='Reconciliations', readonly=True),
2188+ 'reconcile_partial_ids': fields.many2many(
2189+ 'account.move.reconcile',
2190+ 'account_move_reconcile_history_partial_rel',
2191+ string='Partial Reconciliations', readonly=True),
2192+ 'reconcile_line_ids':
2193+ fields.function(
2194+ _reconcile_line_ids,
2195+ string='Reconciled Items',
2196+ type='many2many',
2197+ relation='account.move.line',
2198+ readonly=True,
2199+ multi='lines'),
2200+ 'partial_line_ids':
2201+ fields.function(
2202+ _reconcile_line_ids,
2203+ string='Partially Reconciled Items',
2204+ type='many2many',
2205+ relation='account.move.line',
2206+ readonly=True,
2207+ multi='lines'),
2208+ 'company_id': fields.related('easy_reconcile_id','company_id',
2209+ relation='res.company',
2210+ type='many2one',
2211+ string='Company',
2212+ store=True,
2213+ readonly=True),
2214+
2215+ }
2216+
2217+ def _open_move_lines(self, cr, uid, history_id, rec_type='full', context=None):
2218+ """ For an history record, open the view of move line with
2219+ the reconciled or partially reconciled move lines
2220+
2221+ :param history_id: id of the history
2222+ :param rec_type: 'full' or 'partial'
2223+ :return: action to open the move lines
2224+ """
2225+ assert rec_type in ('full', 'partial'), \
2226+ "rec_type must be 'full' or 'partial'"
2227+
2228+ history = self.browse(cr, uid, history_id, context=context)
2229+
2230+ if rec_type == 'full':
2231+ field = 'reconcile_line_ids'
2232+ name = _('Reconciliations')
2233+ else:
2234+ field = 'partial_line_ids'
2235+ name = _('Partial Reconciliations')
2236+
2237+ move_line_ids = [line.id for line in getattr(history, field)]
2238+
2239+ return {
2240+ 'name': name,
2241+ 'view_mode': 'tree,form',
2242+ 'view_id': False,
2243+ 'view_type': 'form',
2244+ 'res_model': 'account.move.line',
2245+ 'type': 'ir.actions.act_window',
2246+ 'nodestroy': True,
2247+ 'target': 'current',
2248+ 'domain': unicode([('id', 'in', move_line_ids)]),
2249+ }
2250+
2251+ def open_reconcile(self, cr, uid, history_ids, context=None):
2252+ """ For an history record, open the view of move line
2253+ with the reconciled move lines
2254+
2255+ :param history_ids: id of the record as int or long
2256+ Accept a list with 1 id too to be
2257+ used from the client.
2258+ """
2259+ if isinstance(history_ids, (tuple, list)):
2260+ assert len(history_ids) == 1, "only 1 ID is accepted"
2261+ history_ids = history_ids[0]
2262+ return self._open_move_lines(
2263+ cr, uid, history_ids, rec_type='full', context=None)
2264+
2265+ def open_partial(self, cr, uid, history_ids, context=None):
2266+ """ For an history record, open the view of move line
2267+ with the partially reconciled move lines
2268+
2269+ :param history_ids: id of the record as int or long
2270+ Accept a list with 1 id too to be
2271+ used from the client.
2272+ """
2273+ if isinstance(history_ids, (tuple, list)):
2274+ assert len(history_ids) == 1, "only 1 ID is accepted"
2275+ history_ids = history_ids[0]
2276+ return self._open_move_lines(
2277+ cr, uid, history_ids, rec_type='partial', context=None)
2278
2279=== added file 'account_easy_reconcile/easy_reconcile_history_view.xml'
2280--- account_easy_reconcile/easy_reconcile_history_view.xml 1970-01-01 00:00:00 +0000
2281+++ account_easy_reconcile/easy_reconcile_history_view.xml 2014-04-03 07:40:14 +0000
2282@@ -0,0 +1,98 @@
2283+<?xml version="1.0" encoding="utf-8"?>
2284+<openerp>
2285+ <data noupdate="0">
2286+
2287+ <record id="view_easy_reconcile_history_search" model="ir.ui.view">
2288+ <field name="name">easy.reconcile.history.search</field>
2289+ <field name="model">easy.reconcile.history</field>
2290+ <field name="arch" type="xml">
2291+ <search string="Automatic Easy Reconcile History">
2292+ <filter icon="terp-go-today" string="Today"
2293+ domain="[('date','&lt;', time.strftime('%%Y-%%m-%%d 23:59:59')), ('date','&gt;=', time.strftime('%%Y-%%m-%%d 00:00:00'))]"
2294+ help="Todays' Reconcilations" />
2295+ <filter icon="terp-go-week" string="7 Days"
2296+ help="Reconciliations of last 7 days"
2297+ domain="[('date','&lt;', time.strftime('%%Y-%%m-%%d 23:59:59')),('date','&gt;=',(datetime.date.today()-datetime.timedelta(days=7)).strftime('%%Y-%%m-%%d 00:00:00'))]"
2298+ />
2299+
2300+ <separator orientation="vertical"/>
2301+ <field name="easy_reconcile_id"/>
2302+ <field name="date"/>
2303+
2304+ <newline/>
2305+ <group expand="0" string="Group By...">
2306+ <filter string="Reconciliation Profile"
2307+ icon="terp-stock_effects-object-colorize"
2308+ domain="[]" context="{'group_by': 'easy_reconcile_id'}"/>
2309+ <filter string="Date" icon="terp-go-month" domain="[]"
2310+ context="{'group_by': 'date'}"/>
2311+ </group>
2312+ </search>
2313+ </field>
2314+ </record>
2315+
2316+ <record id="easy_reconcile_history_form" model="ir.ui.view">
2317+ <field name="name">easy.reconcile.history.form</field>
2318+ <field name="model">easy.reconcile.history</field>
2319+ <field name="arch" type="xml">
2320+ <form string="Automatic Easy Reconcile History" version="7.0">
2321+ <header>
2322+ <button name="open_reconcile"
2323+ string="Go to reconciled items"
2324+ icon="STOCK_JUMP_TO" type="object"/>
2325+ <button name="open_partial"
2326+ string="Go to partially reconciled items"
2327+ icon="STOCK_JUMP_TO" type="object"/>
2328+ </header>
2329+ <sheet>
2330+ <group>
2331+ <field name="easy_reconcile_id"/>
2332+ <field name="date"/>
2333+ <field name="company_id" groups="base.group_multi_company"/>
2334+ </group>
2335+ <group col="2">
2336+ <separator colspan="2" string="Reconciliations"/>
2337+ <field name="reconcile_ids" nolabel="1"/>
2338+ </group>
2339+ <group col="2">
2340+ <separator colspan="2" string="Partial Reconciliations"/>
2341+ <field name="reconcile_partial_ids" nolabel="1"/>
2342+ </group>
2343+ </sheet>
2344+ </form>
2345+ </field>
2346+ </record>
2347+
2348+ <record id="easy_reconcile_history_tree" model="ir.ui.view">
2349+ <field name="name">easy.reconcile.history.tree</field>
2350+ <field name="model">easy.reconcile.history</field>
2351+ <field name="arch" type="xml">
2352+ <tree string="Automatic Easy Reconcile History">
2353+ <field name="easy_reconcile_id"/>
2354+ <field name="date"/>
2355+ <button icon="STOCK_JUMP_TO" name="open_reconcile"
2356+ string="Go to reconciled items" type="object"/>
2357+ <button icon="STOCK_JUMP_TO" name="open_partial"
2358+ string="Go to partially reconciled items" type="object"/>
2359+ </tree>
2360+ </field>
2361+ </record>
2362+
2363+ <record id="action_easy_reconcile_history" model="ir.actions.act_window">
2364+ <field name="name">Easy Automatic Reconcile History</field>
2365+ <field name="type">ir.actions.act_window</field>
2366+ <field name="res_model">easy.reconcile.history</field>
2367+ <field name="view_type">form</field>
2368+ <field name="view_mode">tree,form</field>
2369+ </record>
2370+
2371+ <act_window
2372+ context="{'search_default_easy_reconcile_id': [active_id], 'default_easy_reconcile_id': active_id}"
2373+ id="act_easy_reconcile_to_history"
2374+ name="History Details"
2375+ groups=""
2376+ res_model="easy.reconcile.history"
2377+ src_model="account.easy.reconcile"/>
2378+
2379+ </data>
2380+</openerp>
2381
2382=== added directory 'account_easy_reconcile/i18n'
2383=== added file 'account_easy_reconcile/i18n/account_easy_reconcile.pot'
2384--- account_easy_reconcile/i18n/account_easy_reconcile.pot 1970-01-01 00:00:00 +0000
2385+++ account_easy_reconcile/i18n/account_easy_reconcile.pot 2014-04-03 07:40:14 +0000
2386@@ -0,0 +1,406 @@
2387+# Translation of OpenERP Server.
2388+# This file contains the translation of the following modules:
2389+# * account_easy_reconcile
2390+#
2391+msgid ""
2392+msgstr ""
2393+"Project-Id-Version: OpenERP Server 7.0\n"
2394+"Report-Msgid-Bugs-To: \n"
2395+"POT-Creation-Date: 2014-01-21 11:55+0000\n"
2396+"PO-Revision-Date: 2014-01-21 11:55+0000\n"
2397+"Last-Translator: <>\n"
2398+"Language-Team: \n"
2399+"MIME-Version: 1.0\n"
2400+"Content-Type: text/plain; charset=UTF-8\n"
2401+"Content-Transfer-Encoding: \n"
2402+"Plural-Forms: \n"
2403+
2404+#. module: account_easy_reconcile
2405+#: code:addons/account_easy_reconcile/easy_reconcile_history.py:108
2406+#: view:easy.reconcile.history:0
2407+#: field:easy.reconcile.history,reconcile_ids:0
2408+#, python-format
2409+msgid "Reconciliations"
2410+msgstr ""
2411+
2412+#. module: account_easy_reconcile
2413+#: view:account.easy.reconcile:0
2414+#: view:easy.reconcile.history:0
2415+msgid "Automatic Easy Reconcile History"
2416+msgstr ""
2417+
2418+#. module: account_easy_reconcile
2419+#: view:account.easy.reconcile:0
2420+msgid "Information"
2421+msgstr ""
2422+
2423+#. module: account_easy_reconcile
2424+#: view:account.easy.reconcile:0
2425+#: view:easy.reconcile.history:0
2426+msgid "Go to partially reconciled items"
2427+msgstr ""
2428+
2429+#. module: account_easy_reconcile
2430+#: help:account.easy.reconcile.method,sequence:0
2431+msgid "The sequence field is used to order the reconcile method"
2432+msgstr ""
2433+
2434+#. module: account_easy_reconcile
2435+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_history
2436+msgid "easy.reconcile.history"
2437+msgstr ""
2438+
2439+#. module: account_easy_reconcile
2440+#: model:ir.actions.act_window,help:account_easy_reconcile.action_account_easy_reconcile
2441+msgid "<p class=\"oe_view_nocontent_create\">\n"
2442+" Click to add a reconciliation profile.\n"
2443+" </p><p>\n"
2444+" A reconciliation profile specifies, for one account, how\n"
2445+" the entries should be reconciled.\n"
2446+" You can select one or many reconciliation methods which will\n"
2447+" be run sequentially to match the entries between them.\n"
2448+" </p>\n"
2449+" "
2450+msgstr ""
2451+
2452+#. module: account_easy_reconcile
2453+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_options
2454+msgid "easy.reconcile.options"
2455+msgstr ""
2456+
2457+#. module: account_easy_reconcile
2458+#: view:easy.reconcile.history:0
2459+msgid "Group By..."
2460+msgstr ""
2461+
2462+#. module: account_easy_reconcile
2463+#: field:account.easy.reconcile,unreconciled_count:0
2464+msgid "Unreconciled Items"
2465+msgstr ""
2466+
2467+#. module: account_easy_reconcile
2468+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_base
2469+msgid "easy.reconcile.base"
2470+msgstr ""
2471+
2472+#. module: account_easy_reconcile
2473+#: field:easy.reconcile.history,reconcile_line_ids:0
2474+msgid "Reconciled Items"
2475+msgstr ""
2476+
2477+#. module: account_easy_reconcile
2478+#: field:account.easy.reconcile,reconcile_method:0
2479+msgid "Method"
2480+msgstr ""
2481+
2482+#. module: account_easy_reconcile
2483+#: view:easy.reconcile.history:0
2484+msgid "7 Days"
2485+msgstr ""
2486+
2487+#. module: account_easy_reconcile
2488+#: model:ir.actions.act_window,name:account_easy_reconcile.action_easy_reconcile_history
2489+msgid "Easy Automatic Reconcile History"
2490+msgstr ""
2491+
2492+#. module: account_easy_reconcile
2493+#: field:easy.reconcile.history,date:0
2494+msgid "Run date"
2495+msgstr ""
2496+
2497+#. module: account_easy_reconcile
2498+#: view:account.easy.reconcile:0
2499+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."
2500+msgstr ""
2501+
2502+#. module: account_easy_reconcile
2503+#: model:ir.actions.act_window,name:account_easy_reconcile.act_easy_reconcile_to_history
2504+msgid "History Details"
2505+msgstr ""
2506+
2507+#. module: account_easy_reconcile
2508+#: view:account.easy.reconcile:0
2509+msgid "Display items reconciled on the last run"
2510+msgstr ""
2511+
2512+#. module: account_easy_reconcile
2513+#: field:account.easy.reconcile.method,name:0
2514+msgid "Type"
2515+msgstr ""
2516+
2517+#. module: account_easy_reconcile
2518+#: field:account.easy.reconcile,company_id:0
2519+#: field:account.easy.reconcile.method,company_id:0
2520+#: field:easy.reconcile.history,company_id:0
2521+msgid "Company"
2522+msgstr ""
2523+
2524+#. module: account_easy_reconcile
2525+#: field:account.easy.reconcile.method,account_profit_id:0
2526+#: field:easy.reconcile.base,account_profit_id:0
2527+#: field:easy.reconcile.options,account_profit_id:0
2528+#: field:easy.reconcile.simple,account_profit_id:0
2529+#: field:easy.reconcile.simple.name,account_profit_id:0
2530+#: field:easy.reconcile.simple.partner,account_profit_id:0
2531+#: field:easy.reconcile.simple.reference,account_profit_id:0
2532+msgid "Account Profit"
2533+msgstr ""
2534+
2535+#. module: account_easy_reconcile
2536+#: view:easy.reconcile.history:0
2537+msgid "Todays' Reconcilations"
2538+msgstr ""
2539+
2540+#. module: account_easy_reconcile
2541+#: view:account.easy.reconcile:0
2542+msgid "Simple. Amount and Name"
2543+msgstr ""
2544+
2545+#. module: account_easy_reconcile
2546+#: field:easy.reconcile.base,partner_ids:0
2547+#: field:easy.reconcile.simple,partner_ids:0
2548+#: field:easy.reconcile.simple.name,partner_ids:0
2549+#: field:easy.reconcile.simple.partner,partner_ids:0
2550+#: field:easy.reconcile.simple.reference,partner_ids:0
2551+msgid "Restrict on partners"
2552+msgstr ""
2553+
2554+#. module: account_easy_reconcile
2555+#: model:ir.actions.act_window,name:account_easy_reconcile.action_account_easy_reconcile
2556+#: model:ir.ui.menu,name:account_easy_reconcile.menu_easy_reconcile
2557+msgid "Easy Automatic Reconcile"
2558+msgstr ""
2559+
2560+#. module: account_easy_reconcile
2561+#: view:easy.reconcile.history:0
2562+msgid "Today"
2563+msgstr ""
2564+
2565+#. module: account_easy_reconcile
2566+#: view:easy.reconcile.history:0
2567+msgid "Date"
2568+msgstr ""
2569+
2570+#. module: account_easy_reconcile
2571+#: field:account.easy.reconcile,last_history:0
2572+msgid "Last History"
2573+msgstr ""
2574+
2575+#. module: account_easy_reconcile
2576+#: view:account.easy.reconcile:0
2577+msgid "Configuration"
2578+msgstr ""
2579+
2580+#. module: account_easy_reconcile
2581+#: field:account.easy.reconcile,reconciled_partial_count:0
2582+#: field:easy.reconcile.history,partial_line_ids:0
2583+msgid "Partially Reconciled Items"
2584+msgstr ""
2585+
2586+#. module: account_easy_reconcile
2587+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_partner
2588+msgid "easy.reconcile.simple.partner"
2589+msgstr ""
2590+
2591+#. module: account_easy_reconcile
2592+#: field:account.easy.reconcile.method,write_off:0
2593+#: field:easy.reconcile.base,write_off:0
2594+#: field:easy.reconcile.options,write_off:0
2595+#: field:easy.reconcile.simple,write_off:0
2596+#: field:easy.reconcile.simple.name,write_off:0
2597+#: field:easy.reconcile.simple.partner,write_off:0
2598+#: field:easy.reconcile.simple.reference,write_off:0
2599+msgid "Write off allowed"
2600+msgstr ""
2601+
2602+#. module: account_easy_reconcile
2603+#: view:account.easy.reconcile:0
2604+msgid "Automatic Easy Reconcile"
2605+msgstr ""
2606+
2607+#. module: account_easy_reconcile
2608+#: field:account.easy.reconcile,account:0
2609+#: field:easy.reconcile.base,account_id:0
2610+#: field:easy.reconcile.simple,account_id:0
2611+#: field:easy.reconcile.simple.name,account_id:0
2612+#: field:easy.reconcile.simple.partner,account_id:0
2613+#: field:easy.reconcile.simple.reference,account_id:0
2614+msgid "Account"
2615+msgstr ""
2616+
2617+#. module: account_easy_reconcile
2618+#: field:account.easy.reconcile.method,task_id:0
2619+msgid "Task"
2620+msgstr ""
2621+
2622+#. module: account_easy_reconcile
2623+#: field:account.easy.reconcile,name:0
2624+msgid "Name"
2625+msgstr ""
2626+
2627+#. module: account_easy_reconcile
2628+#: view:account.easy.reconcile:0
2629+msgid "Simple. Amount and Partner"
2630+msgstr ""
2631+
2632+#. module: account_easy_reconcile
2633+#: view:account.easy.reconcile:0
2634+msgid "Start Auto Reconcilation"
2635+msgstr ""
2636+
2637+#. module: account_easy_reconcile
2638+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_name
2639+msgid "easy.reconcile.simple.name"
2640+msgstr ""
2641+
2642+#. module: account_easy_reconcile
2643+#: field:account.easy.reconcile.method,filter:0
2644+#: field:easy.reconcile.base,filter:0
2645+#: field:easy.reconcile.options,filter:0
2646+#: field:easy.reconcile.simple,filter:0
2647+#: field:easy.reconcile.simple.name,filter:0
2648+#: field:easy.reconcile.simple.partner,filter:0
2649+#: field:easy.reconcile.simple.reference,filter:0
2650+msgid "Filter"
2651+msgstr ""
2652+
2653+#. module: account_easy_reconcile
2654+#: view:account.easy.reconcile:0
2655+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."
2656+msgstr ""
2657+
2658+#. module: account_easy_reconcile
2659+#: field:easy.reconcile.history,easy_reconcile_id:0
2660+msgid "Reconcile Profile"
2661+msgstr ""
2662+
2663+#. module: account_easy_reconcile
2664+#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile_method
2665+msgid "reconcile method for account_easy_reconcile"
2666+msgstr ""
2667+
2668+#. module: account_easy_reconcile
2669+#: view:account.easy.reconcile:0
2670+msgid "Start Auto Reconciliation"
2671+msgstr ""
2672+
2673+#. module: account_easy_reconcile
2674+#: code:addons/account_easy_reconcile/easy_reconcile.py:257
2675+#, python-format
2676+msgid "Error"
2677+msgstr ""
2678+
2679+#. module: account_easy_reconcile
2680+#: code:addons/account_easy_reconcile/easy_reconcile.py:258
2681+#, python-format
2682+msgid "There is no history of reconciled items on the task: %s."
2683+msgstr ""
2684+
2685+#. module: account_easy_reconcile
2686+#: view:account.easy.reconcile:0
2687+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."
2688+msgstr ""
2689+
2690+#. module: account_easy_reconcile
2691+#: field:account.easy.reconcile.method,account_lost_id:0
2692+#: field:easy.reconcile.base,account_lost_id:0
2693+#: field:easy.reconcile.options,account_lost_id:0
2694+#: field:easy.reconcile.simple,account_lost_id:0
2695+#: field:easy.reconcile.simple.name,account_lost_id:0
2696+#: field:easy.reconcile.simple.partner,account_lost_id:0
2697+#: field:easy.reconcile.simple.reference,account_lost_id:0
2698+msgid "Account Lost"
2699+msgstr ""
2700+
2701+#. module: account_easy_reconcile
2702+#: view:easy.reconcile.history:0
2703+msgid "Reconciliation Profile"
2704+msgstr ""
2705+
2706+#. module: account_easy_reconcile
2707+#: view:account.easy.reconcile:0
2708+#: field:account.easy.reconcile,history_ids:0
2709+msgid "History"
2710+msgstr ""
2711+
2712+#. module: account_easy_reconcile
2713+#: view:account.easy.reconcile:0
2714+#: view:easy.reconcile.history:0
2715+msgid "Go to reconciled items"
2716+msgstr ""
2717+
2718+#. module: account_easy_reconcile
2719+#: view:account.easy.reconcile:0
2720+msgid "Profile Information"
2721+msgstr ""
2722+
2723+#. module: account_easy_reconcile
2724+#: view:account.easy.reconcile.method:0
2725+msgid "Automatic Easy Reconcile Method"
2726+msgstr ""
2727+
2728+#. module: account_easy_reconcile
2729+#: view:account.easy.reconcile:0
2730+msgid "Simple. Amount and Reference"
2731+msgstr ""
2732+
2733+#. module: account_easy_reconcile
2734+#: view:account.easy.reconcile:0
2735+msgid "Display items partially reconciled on the last run"
2736+msgstr ""
2737+
2738+#. module: account_easy_reconcile
2739+#: field:account.easy.reconcile.method,sequence:0
2740+msgid "Sequence"
2741+msgstr ""
2742+
2743+#. module: account_easy_reconcile
2744+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple
2745+msgid "easy.reconcile.simple"
2746+msgstr ""
2747+
2748+#. module: account_easy_reconcile
2749+#: view:easy.reconcile.history:0
2750+msgid "Reconciliations of last 7 days"
2751+msgstr ""
2752+
2753+#. module: account_easy_reconcile
2754+#: field:account.easy.reconcile.method,date_base_on:0
2755+#: field:easy.reconcile.base,date_base_on:0
2756+#: field:easy.reconcile.options,date_base_on:0
2757+#: field:easy.reconcile.simple,date_base_on:0
2758+#: field:easy.reconcile.simple.name,date_base_on:0
2759+#: field:easy.reconcile.simple.partner,date_base_on:0
2760+#: field:easy.reconcile.simple.reference,date_base_on:0
2761+msgid "Date of reconciliation"
2762+msgstr ""
2763+
2764+#. module: account_easy_reconcile
2765+#: code:addons/account_easy_reconcile/easy_reconcile_history.py:111
2766+#: view:easy.reconcile.history:0
2767+#: field:easy.reconcile.history,reconcile_partial_ids:0
2768+#, python-format
2769+msgid "Partial Reconciliations"
2770+msgstr ""
2771+
2772+#. module: account_easy_reconcile
2773+#: field:account.easy.reconcile.method,journal_id:0
2774+#: field:easy.reconcile.base,journal_id:0
2775+#: field:easy.reconcile.options,journal_id:0
2776+#: field:easy.reconcile.simple,journal_id:0
2777+#: field:easy.reconcile.simple.name,journal_id:0
2778+#: field:easy.reconcile.simple.partner,journal_id:0
2779+#: field:easy.reconcile.simple.reference,journal_id:0
2780+msgid "Journal"
2781+msgstr ""
2782+
2783+#. module: account_easy_reconcile
2784+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_reference
2785+msgid "easy.reconcile.simple.reference"
2786+msgstr ""
2787+
2788+#. module: account_easy_reconcile
2789+#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile
2790+msgid "account easy reconcile"
2791+msgstr ""
2792+
2793
2794=== added file 'account_easy_reconcile/i18n/es.po'
2795--- account_easy_reconcile/i18n/es.po 1970-01-01 00:00:00 +0000
2796+++ account_easy_reconcile/i18n/es.po 2014-04-03 07:40:14 +0000
2797@@ -0,0 +1,415 @@
2798+# Spanish translation for banking-addons
2799+# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
2800+# This file is distributed under the same license as the banking-addons package.
2801+# FIRST AUTHOR <EMAIL@ADDRESS>, 2014.
2802+#
2803+msgid ""
2804+msgstr ""
2805+"Project-Id-Version: banking-addons\n"
2806+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
2807+"POT-Creation-Date: 2014-01-21 11:55+0000\n"
2808+"PO-Revision-Date: 2014-04-02 21:56+0000\n"
2809+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
2810+"Language-Team: Spanish <es@li.org>\n"
2811+"MIME-Version: 1.0\n"
2812+"Content-Type: text/plain; charset=UTF-8\n"
2813+"Content-Transfer-Encoding: 8bit\n"
2814+"X-Launchpad-Export-Date: 2014-04-03 06:06+0000\n"
2815+"X-Generator: Launchpad (build 16967)\n"
2816+
2817+#. module: account_easy_reconcile
2818+#: code:addons/account_easy_reconcile/easy_reconcile_history.py:101
2819+#: field:easy.reconcile.history,reconcile_ids:0
2820+#, python-format
2821+msgid "Reconciliations"
2822+msgstr "Conciliaciones"
2823+
2824+#. module: account_easy_reconcile
2825+#: view:account.easy.reconcile:0
2826+#: view:easy.reconcile.history:0
2827+msgid "Automatic Easy Reconcile History"
2828+msgstr "Historial de conciliación automática sencilla"
2829+
2830+#. module: account_easy_reconcile
2831+#: view:account.easy.reconcile:0
2832+msgid "Information"
2833+msgstr "Información"
2834+
2835+#. module: account_easy_reconcile
2836+#: view:account.easy.reconcile:0
2837+#: view:easy.reconcile.history:0
2838+msgid "Go to partially reconciled items"
2839+msgstr "Ir a los elementos parcialmente conciliados"
2840+
2841+#. module: account_easy_reconcile
2842+#: help:account.easy.reconcile.method,sequence:0
2843+msgid "The sequence field is used to order the reconcile method"
2844+msgstr ""
2845+"El campo de secuencia se usa para ordenar los métodos de conciliación"
2846+
2847+#. module: account_easy_reconcile
2848+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_history
2849+msgid "easy.reconcile.history"
2850+msgstr "easy.reconcile.history"
2851+
2852+#. module: account_easy_reconcile
2853+#: model:ir.actions.act_window,help:account_easy_reconcile.action_account_easy_reconcile
2854+msgid ""
2855+"<p class=\"oe_view_nocontent_create\">\n"
2856+" Click to add a reconciliation profile.\n"
2857+" </p><p>\n"
2858+" A reconciliation profile specifies, for one account, how\n"
2859+" the entries should be reconciled.\n"
2860+" You can select one or many reconciliation methods which will\n"
2861+" be run sequentially to match the entries between them.\n"
2862+" </p>\n"
2863+" "
2864+msgstr ""
2865+
2866+#. module: account_easy_reconcile
2867+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_options
2868+msgid "easy.reconcile.options"
2869+msgstr "easy.reconcile.options"
2870+
2871+#. module: account_easy_reconcile
2872+#: view:easy.reconcile.history:0
2873+msgid "Group By..."
2874+msgstr "Agrupar por..."
2875+
2876+#. module: account_easy_reconcile
2877+#: field:account.easy.reconcile,unreconciled_count:0
2878+msgid "Unreconciled Items"
2879+msgstr ""
2880+
2881+#. module: account_easy_reconcile
2882+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_base
2883+msgid "easy.reconcile.base"
2884+msgstr "easy.reconcile.base"
2885+
2886+#. module: account_easy_reconcile
2887+#: field:easy.reconcile.history,reconcile_line_ids:0
2888+msgid "Reconciled Items"
2889+msgstr "Elementos conciliados"
2890+
2891+#. module: account_easy_reconcile
2892+#: field:account.easy.reconcile,reconcile_method:0
2893+msgid "Method"
2894+msgstr "Método"
2895+
2896+#. module: account_easy_reconcile
2897+#: view:easy.reconcile.history:0
2898+msgid "7 Days"
2899+msgstr "7 días"
2900+
2901+#. module: account_easy_reconcile
2902+#: model:ir.actions.act_window,name:account_easy_reconcile.action_easy_reconcile_history
2903+msgid "Easy Automatic Reconcile History"
2904+msgstr "Historial de la conciliación automática sencilla"
2905+
2906+#. module: account_easy_reconcile
2907+#: field:easy.reconcile.history,date:0
2908+msgid "Run date"
2909+msgstr "Fecha ejecucción"
2910+
2911+#. module: account_easy_reconcile
2912+#: view:account.easy.reconcile:0
2913+msgid ""
2914+"Match one debit line vs one credit line. Do not allow partial "
2915+"reconciliation. The lines should have the same amount (with the write-off) "
2916+"and the same reference to be reconciled."
2917+msgstr ""
2918+
2919+#. module: account_easy_reconcile
2920+#: model:ir.actions.act_window,name:account_easy_reconcile.act_easy_reconcile_to_history
2921+msgid "History Details"
2922+msgstr "Detalles del historial"
2923+
2924+#. module: account_easy_reconcile
2925+#: view:account.easy.reconcile:0
2926+msgid "Display items reconciled on the last run"
2927+msgstr "Mostrar elementos conciliados en la última ejecucción"
2928+
2929+#. module: account_easy_reconcile
2930+#: field:account.easy.reconcile.method,name:0
2931+msgid "Type"
2932+msgstr "Tipo"
2933+
2934+#. module: account_easy_reconcile
2935+#: field:account.easy.reconcile,company_id:0
2936+#: field:account.easy.reconcile.method,company_id:0
2937+#: field:easy.reconcile.history,company_id:0
2938+msgid "Company"
2939+msgstr ""
2940+
2941+#. module: account_easy_reconcile
2942+#: field:account.easy.reconcile.method,account_profit_id:0
2943+#: field:easy.reconcile.base,account_profit_id:0
2944+#: field:easy.reconcile.options,account_profit_id:0
2945+#: field:easy.reconcile.simple,account_profit_id:0
2946+#: field:easy.reconcile.simple.name,account_profit_id:0
2947+#: field:easy.reconcile.simple.partner,account_profit_id:0
2948+#: field:easy.reconcile.simple.reference,account_profit_id:0
2949+msgid "Account Profit"
2950+msgstr "Cuenta de ganancias"
2951+
2952+#. module: account_easy_reconcile
2953+#: view:easy.reconcile.history:0
2954+msgid "Todays' Reconcilations"
2955+msgstr "Conciliaciones de hoy"
2956+
2957+#. module: account_easy_reconcile
2958+#: view:account.easy.reconcile:0
2959+msgid "Simple. Amount and Name"
2960+msgstr "Simple. Cantidad y nombre"
2961+
2962+#. module: account_easy_reconcile
2963+#: field:easy.reconcile.base,partner_ids:0
2964+#: field:easy.reconcile.simple,partner_ids:0
2965+#: field:easy.reconcile.simple.name,partner_ids:0
2966+#: field:easy.reconcile.simple.partner,partner_ids:0
2967+#: field:easy.reconcile.simple.reference,partner_ids:0
2968+msgid "Restrict on partners"
2969+msgstr "Restringir en las empresas"
2970+
2971+#. module: account_easy_reconcile
2972+#: model:ir.actions.act_window,name:account_easy_reconcile.action_account_easy_reconcile
2973+#: model:ir.ui.menu,name:account_easy_reconcile.menu_easy_reconcile
2974+msgid "Easy Automatic Reconcile"
2975+msgstr "Conciliación automática simple"
2976+
2977+#. module: account_easy_reconcile
2978+#: view:easy.reconcile.history:0
2979+msgid "Today"
2980+msgstr "Hoy"
2981+
2982+#. module: account_easy_reconcile
2983+#: view:easy.reconcile.history:0
2984+msgid "Date"
2985+msgstr "Fecha"
2986+
2987+#. module: account_easy_reconcile
2988+#: field:account.easy.reconcile,last_history:0
2989+msgid "Last History"
2990+msgstr "Último historial"
2991+
2992+#. module: account_easy_reconcile
2993+#: view:account.easy.reconcile:0
2994+msgid "Configuration"
2995+msgstr "Configuración"
2996+
2997+#. module: account_easy_reconcile
2998+#: field:easy.reconcile.history,partial_line_ids:0
2999+msgid "Partially Reconciled Items"
3000+msgstr "Elementos parcialmente conciliados"
3001+
3002+#. module: account_easy_reconcile
3003+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_partner
3004+msgid "easy.reconcile.simple.partner"
3005+msgstr "easy.reconcile.simple.partner"
3006+
3007+#. module: account_easy_reconcile
3008+#: field:account.easy.reconcile.method,write_off:0
3009+#: field:easy.reconcile.base,write_off:0
3010+#: field:easy.reconcile.options,write_off:0
3011+#: field:easy.reconcile.simple,write_off:0
3012+#: field:easy.reconcile.simple.name,write_off:0
3013+#: field:easy.reconcile.simple.partner,write_off:0
3014+#: field:easy.reconcile.simple.reference,write_off:0
3015+msgid "Write off allowed"
3016+msgstr "Desajuste permitido"
3017+
3018+#. module: account_easy_reconcile
3019+#: view:account.easy.reconcile:0
3020+msgid "Automatic Easy Reconcile"
3021+msgstr "Conciliación automática sencilla"
3022+
3023+#. module: account_easy_reconcile
3024+#: field:account.easy.reconcile,account:0
3025+#: field:easy.reconcile.base,account_id:0
3026+#: field:easy.reconcile.simple,account_id:0
3027+#: field:easy.reconcile.simple.name,account_id:0
3028+#: field:easy.reconcile.simple.partner,account_id:0
3029+#: field:easy.reconcile.simple.reference,account_id:0
3030+msgid "Account"
3031+msgstr "Cuenta"
3032+
3033+#. module: account_easy_reconcile
3034+#: field:account.easy.reconcile.method,task_id:0
3035+msgid "Task"
3036+msgstr "Tarea"
3037+
3038+#. module: account_easy_reconcile
3039+#: field:account.easy.reconcile,name:0
3040+msgid "Name"
3041+msgstr "Nombre"
3042+
3043+#. module: account_easy_reconcile
3044+#: view:account.easy.reconcile:0
3045+msgid "Simple. Amount and Partner"
3046+msgstr ""
3047+
3048+#. module: account_easy_reconcile
3049+#: view:account.easy.reconcile:0
3050+msgid "Start Auto Reconcilation"
3051+msgstr "Iniciar conciliación automática"
3052+
3053+#. module: account_easy_reconcile
3054+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_name
3055+msgid "easy.reconcile.simple.name"
3056+msgstr "easy.reconcile.simple.name"
3057+
3058+#. module: account_easy_reconcile
3059+#: field:account.easy.reconcile.method,filter:0
3060+#: field:easy.reconcile.base,filter:0
3061+#: field:easy.reconcile.options,filter:0
3062+#: field:easy.reconcile.simple,filter:0
3063+#: field:easy.reconcile.simple.name,filter:0
3064+#: field:easy.reconcile.simple.partner,filter:0
3065+#: field:easy.reconcile.simple.reference,filter:0
3066+msgid "Filter"
3067+msgstr "Filtro"
3068+
3069+#. module: account_easy_reconcile
3070+#: view:account.easy.reconcile:0
3071+msgid ""
3072+"Match one debit line vs one credit line. Do not allow partial "
3073+"reconciliation. The lines should have the same amount (with the write-off) "
3074+"and the same partner to be reconciled."
3075+msgstr ""
3076+
3077+#. module: account_easy_reconcile
3078+#: field:easy.reconcile.history,easy_reconcile_id:0
3079+msgid "Reconcile Profile"
3080+msgstr "Perfil de conciliación"
3081+
3082+#. module: account_easy_reconcile
3083+#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile_method
3084+msgid "reconcile method for account_easy_reconcile"
3085+msgstr "Método de conciliación para account_easy_reconcile"
3086+
3087+#. module: account_easy_reconcile
3088+#: view:account.easy.reconcile:0
3089+msgid "Start Auto Reconciliation"
3090+msgstr ""
3091+
3092+#. module: account_easy_reconcile
3093+#: code:addons/account_easy_reconcile/easy_reconcile.py:233
3094+#, python-format
3095+msgid "Error"
3096+msgstr "Error"
3097+
3098+#. module: account_easy_reconcile
3099+#: code:addons/account_easy_reconcile/easy_reconcile.py:258
3100+#, python-format
3101+msgid "There is no history of reconciled items on the task: %s."
3102+msgstr ""
3103+
3104+#. module: account_easy_reconcile
3105+#: view:account.easy.reconcile:0
3106+msgid ""
3107+"Match one debit line vs one credit line. Do not allow partial "
3108+"reconciliation. The lines should have the same amount (with the write-off) "
3109+"and the same name to be reconciled."
3110+msgstr ""
3111+
3112+#. module: account_easy_reconcile
3113+#: field:account.easy.reconcile.method,account_lost_id:0
3114+#: field:easy.reconcile.base,account_lost_id:0
3115+#: field:easy.reconcile.options,account_lost_id:0
3116+#: field:easy.reconcile.simple,account_lost_id:0
3117+#: field:easy.reconcile.simple.name,account_lost_id:0
3118+#: field:easy.reconcile.simple.partner,account_lost_id:0
3119+#: field:easy.reconcile.simple.reference,account_lost_id:0
3120+msgid "Account Lost"
3121+msgstr "Cuenta de pérdidas"
3122+
3123+#. module: account_easy_reconcile
3124+#: view:easy.reconcile.history:0
3125+msgid "Reconciliation Profile"
3126+msgstr "Perfil de conciliación"
3127+
3128+#. module: account_easy_reconcile
3129+#: view:account.easy.reconcile:0
3130+#: field:account.easy.reconcile,history_ids:0
3131+msgid "History"
3132+msgstr "Historial"
3133+
3134+#. module: account_easy_reconcile
3135+#: view:account.easy.reconcile:0
3136+#: view:easy.reconcile.history:0
3137+msgid "Go to reconciled items"
3138+msgstr "Ir a los elementos conciliados"
3139+
3140+#. module: account_easy_reconcile
3141+#: view:account.easy.reconcile:0
3142+msgid "Profile Information"
3143+msgstr ""
3144+
3145+#. module: account_easy_reconcile
3146+#: view:account.easy.reconcile.method:0
3147+msgid "Automatic Easy Reconcile Method"
3148+msgstr "Método de conciliación automática sencilla"
3149+
3150+#. module: account_easy_reconcile
3151+#: view:account.easy.reconcile:0
3152+msgid "Simple. Amount and Reference"
3153+msgstr ""
3154+
3155+#. module: account_easy_reconcile
3156+#: view:account.easy.reconcile:0
3157+msgid "Display items partially reconciled on the last run"
3158+msgstr "Mostrar elementos conciliados parcialmente en la última ejecucción"
3159+
3160+#. module: account_easy_reconcile
3161+#: field:account.easy.reconcile.method,sequence:0
3162+msgid "Sequence"
3163+msgstr "Secuencia"
3164+
3165+#. module: account_easy_reconcile
3166+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple
3167+msgid "easy.reconcile.simple"
3168+msgstr "easy.reconcile.simple"
3169+
3170+#. module: account_easy_reconcile
3171+#: view:easy.reconcile.history:0
3172+msgid "Reconciliations of last 7 days"
3173+msgstr "Conciliaciones de los últimos 7 días"
3174+
3175+#. module: account_easy_reconcile
3176+#: field:account.easy.reconcile.method,date_base_on:0
3177+#: field:easy.reconcile.base,date_base_on:0
3178+#: field:easy.reconcile.options,date_base_on:0
3179+#: field:easy.reconcile.simple,date_base_on:0
3180+#: field:easy.reconcile.simple.name,date_base_on:0
3181+#: field:easy.reconcile.simple.partner,date_base_on:0
3182+#: field:easy.reconcile.simple.reference,date_base_on:0
3183+msgid "Date of reconciliation"
3184+msgstr ""
3185+
3186+#. module: account_easy_reconcile
3187+#: code:addons/account_easy_reconcile/easy_reconcile_history.py:104
3188+#: field:easy.reconcile.history,reconcile_partial_ids:0
3189+#, python-format
3190+msgid "Partial Reconciliations"
3191+msgstr "Conciliaciones parciales"
3192+
3193+#. module: account_easy_reconcile
3194+#: field:account.easy.reconcile.method,journal_id:0
3195+#: field:easy.reconcile.base,journal_id:0
3196+#: field:easy.reconcile.options,journal_id:0
3197+#: field:easy.reconcile.simple,journal_id:0
3198+#: field:easy.reconcile.simple.name,journal_id:0
3199+#: field:easy.reconcile.simple.partner,journal_id:0
3200+#: field:easy.reconcile.simple.reference,journal_id:0
3201+msgid "Journal"
3202+msgstr "Diario"
3203+
3204+#. module: account_easy_reconcile
3205+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_reference
3206+msgid "easy.reconcile.simple.reference"
3207+msgstr "easy.reconcile.simple.reference"
3208+
3209+#. module: account_easy_reconcile
3210+#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile
3211+msgid "account easy reconcile"
3212+msgstr "account easy reconcile"
3213
3214=== added file 'account_easy_reconcile/i18n/fr.po'
3215--- account_easy_reconcile/i18n/fr.po 1970-01-01 00:00:00 +0000
3216+++ account_easy_reconcile/i18n/fr.po 2014-04-03 07:40:14 +0000
3217@@ -0,0 +1,432 @@
3218+# Translation of OpenERP Server.
3219+# This file contains the translation of the following modules:
3220+# * account_easy_reconcile
3221+#
3222+msgid ""
3223+msgstr ""
3224+"Project-Id-Version: OpenERP Server 6.1\n"
3225+"Report-Msgid-Bugs-To: \n"
3226+"POT-Creation-Date: 2014-01-21 11:55+0000\n"
3227+"PO-Revision-Date: 2014-03-21 15:25+0000\n"
3228+"Last-Translator: Guewen Baconnier @ Camptocamp <Unknown>\n"
3229+"Language-Team: \n"
3230+"MIME-Version: 1.0\n"
3231+"Content-Type: text/plain; charset=UTF-8\n"
3232+"Content-Transfer-Encoding: 8bit\n"
3233+"X-Launchpad-Export-Date: 2014-03-22 07:11+0000\n"
3234+"X-Generator: Launchpad (build 16967)\n"
3235+"Language: \n"
3236+
3237+#. module: account_easy_reconcile
3238+#: code:addons/account_easy_reconcile/easy_reconcile_history.py:108
3239+#: view:easy.reconcile.history:0
3240+#: field:easy.reconcile.history,reconcile_ids:0
3241+#, python-format
3242+msgid "Reconciliations"
3243+msgstr "Lettrages"
3244+
3245+#. module: account_easy_reconcile
3246+#: view:account.easy.reconcile:0
3247+#: view:easy.reconcile.history:0
3248+msgid "Automatic Easy Reconcile History"
3249+msgstr "Historique des lettrages automatisés"
3250+
3251+#. module: account_easy_reconcile
3252+#: view:account.easy.reconcile:0
3253+msgid "Information"
3254+msgstr "Information"
3255+
3256+#. module: account_easy_reconcile
3257+#: view:account.easy.reconcile:0
3258+#: view:easy.reconcile.history:0
3259+msgid "Go to partially reconciled items"
3260+msgstr "Voir les entrées partiellement lettrées"
3261+
3262+#. module: account_easy_reconcile
3263+#: help:account.easy.reconcile.method,sequence:0
3264+msgid "The sequence field is used to order the reconcile method"
3265+msgstr "La séquence détermine l'ordre des méthodes de lettrage"
3266+
3267+#. module: account_easy_reconcile
3268+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_history
3269+msgid "easy.reconcile.history"
3270+msgstr "easy.reconcile.history"
3271+
3272+#. module: account_easy_reconcile
3273+#: model:ir.actions.act_window,help:account_easy_reconcile.action_account_easy_reconcile
3274+msgid ""
3275+"<p class=\"oe_view_nocontent_create\">\n"
3276+" Click to add a reconciliation profile.\n"
3277+" </p><p>\n"
3278+" A reconciliation profile specifies, for one account, how\n"
3279+" the entries should be reconciled.\n"
3280+" You can select one or many reconciliation methods which will\n"
3281+" be run sequentially to match the entries between them.\n"
3282+" </p>\n"
3283+" "
3284+msgstr ""
3285+"<p class=\"oe_view_nocontent_create\">\n"
3286+" Cliquez pour ajouter un profil de lettrage.\n"
3287+" </p><p>\n"
3288+" Un profil de lettrage spécifie, pour un compte, comment\n"
3289+" les écritures doivent être lettrées.\n"
3290+" Vous pouvez sélectionner une ou plusieurs méthodes de lettrage\n"
3291+" qui seront lancées successivement pour identifier les écritures\n"
3292+" devant être lettrées. </p>\n"
3293+" "
3294+
3295+#. module: account_easy_reconcile
3296+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_options
3297+msgid "easy.reconcile.options"
3298+msgstr "easy.reconcile.options"
3299+
3300+#. module: account_easy_reconcile
3301+#: view:easy.reconcile.history:0
3302+msgid "Group By..."
3303+msgstr "Grouper par..."
3304+
3305+#. module: account_easy_reconcile
3306+#: field:account.easy.reconcile,unreconciled_count:0
3307+msgid "Unreconciled Items"
3308+msgstr "Écritures non lettrées"
3309+
3310+#. module: account_easy_reconcile
3311+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_base
3312+msgid "easy.reconcile.base"
3313+msgstr "easy.reconcile.base"
3314+
3315+#. module: account_easy_reconcile
3316+#: field:easy.reconcile.history,reconcile_line_ids:0
3317+msgid "Reconciled Items"
3318+msgstr "Écritures lettrées"
3319+
3320+#. module: account_easy_reconcile
3321+#: field:account.easy.reconcile,reconcile_method:0
3322+msgid "Method"
3323+msgstr "Méthode"
3324+
3325+#. module: account_easy_reconcile
3326+#: view:easy.reconcile.history:0
3327+msgid "7 Days"
3328+msgstr "7 jours"
3329+
3330+#. module: account_easy_reconcile
3331+#: model:ir.actions.act_window,name:account_easy_reconcile.action_easy_reconcile_history
3332+msgid "Easy Automatic Reconcile History"
3333+msgstr "Lettrage automatisé"
3334+
3335+#. module: account_easy_reconcile
3336+#: field:easy.reconcile.history,date:0
3337+msgid "Run date"
3338+msgstr "Date de lancement"
3339+
3340+#. module: account_easy_reconcile
3341+#: view:account.easy.reconcile:0
3342+msgid ""
3343+"Match one debit line vs one credit line. Do not allow partial "
3344+"reconciliation. The lines should have the same amount (with the write-off) "
3345+"and the same reference to be reconciled."
3346+msgstr ""
3347+"Lettre un débit avec un crédit ayant le même montant et la même référence. "
3348+"Le lettrage ne peut être partiel (écriture d'ajustement en cas d'écart)."
3349+
3350+#. module: account_easy_reconcile
3351+#: model:ir.actions.act_window,name:account_easy_reconcile.act_easy_reconcile_to_history
3352+msgid "History Details"
3353+msgstr "Détails de l'historique"
3354+
3355+#. module: account_easy_reconcile
3356+#: view:account.easy.reconcile:0
3357+msgid "Display items reconciled on the last run"
3358+msgstr "Voir les entrées lettrées au dernier lettrage"
3359+
3360+#. module: account_easy_reconcile
3361+#: field:account.easy.reconcile.method,name:0
3362+msgid "Type"
3363+msgstr "Type"
3364+
3365+#. module: account_easy_reconcile
3366+#: field:account.easy.reconcile,company_id:0
3367+#: field:account.easy.reconcile.method,company_id:0
3368+#: field:easy.reconcile.history,company_id:0
3369+msgid "Company"
3370+msgstr ""
3371+
3372+#. module: account_easy_reconcile
3373+#: field:account.easy.reconcile.method,account_profit_id:0
3374+#: field:easy.reconcile.base,account_profit_id:0
3375+#: field:easy.reconcile.options,account_profit_id:0
3376+#: field:easy.reconcile.simple,account_profit_id:0
3377+#: field:easy.reconcile.simple.name,account_profit_id:0
3378+#: field:easy.reconcile.simple.partner,account_profit_id:0
3379+#: field:easy.reconcile.simple.reference,account_profit_id:0
3380+msgid "Account Profit"
3381+msgstr "Compte de profits"
3382+
3383+#. module: account_easy_reconcile
3384+#: view:easy.reconcile.history:0
3385+msgid "Todays' Reconcilations"
3386+msgstr "Lettrages du jour"
3387+
3388+#. module: account_easy_reconcile
3389+#: view:account.easy.reconcile:0
3390+msgid "Simple. Amount and Name"
3391+msgstr "Simple. Montant et description"
3392+
3393+#. module: account_easy_reconcile
3394+#: field:easy.reconcile.base,partner_ids:0
3395+#: field:easy.reconcile.simple,partner_ids:0
3396+#: field:easy.reconcile.simple.name,partner_ids:0
3397+#: field:easy.reconcile.simple.partner,partner_ids:0
3398+#: field:easy.reconcile.simple.reference,partner_ids:0
3399+msgid "Restrict on partners"
3400+msgstr "Filtrer sur des partenaires"
3401+
3402+#. module: account_easy_reconcile
3403+#: model:ir.actions.act_window,name:account_easy_reconcile.action_account_easy_reconcile
3404+#: model:ir.ui.menu,name:account_easy_reconcile.menu_easy_reconcile
3405+msgid "Easy Automatic Reconcile"
3406+msgstr "Lettrage automatisé"
3407+
3408+#. module: account_easy_reconcile
3409+#: view:easy.reconcile.history:0
3410+msgid "Today"
3411+msgstr "Aujourd'hui"
3412+
3413+#. module: account_easy_reconcile
3414+#: view:easy.reconcile.history:0
3415+msgid "Date"
3416+msgstr "Date"
3417+
3418+#. module: account_easy_reconcile
3419+#: field:account.easy.reconcile,last_history:0
3420+msgid "Last History"
3421+msgstr "Dernier historique"
3422+
3423+#. module: account_easy_reconcile
3424+#: view:account.easy.reconcile:0
3425+msgid "Configuration"
3426+msgstr "Configuration"
3427+
3428+#. module: account_easy_reconcile
3429+#: field:account.easy.reconcile,reconciled_partial_count:0
3430+#: field:easy.reconcile.history,partial_line_ids:0
3431+msgid "Partially Reconciled Items"
3432+msgstr "Écritures partiellement lettrées"
3433+
3434+#. module: account_easy_reconcile
3435+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_partner
3436+msgid "easy.reconcile.simple.partner"
3437+msgstr "easy.reconcile.simple.partner"
3438+
3439+#. module: account_easy_reconcile
3440+#: field:account.easy.reconcile.method,write_off:0
3441+#: field:easy.reconcile.base,write_off:0
3442+#: field:easy.reconcile.options,write_off:0
3443+#: field:easy.reconcile.simple,write_off:0
3444+#: field:easy.reconcile.simple.name,write_off:0
3445+#: field:easy.reconcile.simple.partner,write_off:0
3446+#: field:easy.reconcile.simple.reference,write_off:0
3447+msgid "Write off allowed"
3448+msgstr "Écart autorisé"
3449+
3450+#. module: account_easy_reconcile
3451+#: view:account.easy.reconcile:0
3452+msgid "Automatic Easy Reconcile"
3453+msgstr "Lettrage automatisé"
3454+
3455+#. module: account_easy_reconcile
3456+#: field:account.easy.reconcile,account:0
3457+#: field:easy.reconcile.base,account_id:0
3458+#: field:easy.reconcile.simple,account_id:0
3459+#: field:easy.reconcile.simple.name,account_id:0
3460+#: field:easy.reconcile.simple.partner,account_id:0
3461+#: field:easy.reconcile.simple.reference,account_id:0
3462+msgid "Account"
3463+msgstr "Compte"
3464+
3465+#. module: account_easy_reconcile
3466+#: field:account.easy.reconcile.method,task_id:0
3467+msgid "Task"
3468+msgstr "Tâche"
3469+
3470+#. module: account_easy_reconcile
3471+#: field:account.easy.reconcile,name:0
3472+msgid "Name"
3473+msgstr "Nom"
3474+
3475+#. module: account_easy_reconcile
3476+#: view:account.easy.reconcile:0
3477+msgid "Simple. Amount and Partner"
3478+msgstr "Simple. Montant et partenaire"
3479+
3480+#. module: account_easy_reconcile
3481+#: view:account.easy.reconcile:0
3482+msgid "Start Auto Reconcilation"
3483+msgstr "Lancer le lettrage automatisé"
3484+
3485+#. module: account_easy_reconcile
3486+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_name
3487+msgid "easy.reconcile.simple.name"
3488+msgstr "easy.reconcile.simple.name"
3489+
3490+#. module: account_easy_reconcile
3491+#: field:account.easy.reconcile.method,filter:0
3492+#: field:easy.reconcile.base,filter:0
3493+#: field:easy.reconcile.options,filter:0
3494+#: field:easy.reconcile.simple,filter:0
3495+#: field:easy.reconcile.simple.name,filter:0
3496+#: field:easy.reconcile.simple.partner,filter:0
3497+#: field:easy.reconcile.simple.reference,filter:0
3498+msgid "Filter"
3499+msgstr "Filtre"
3500+
3501+#. module: account_easy_reconcile
3502+#: view:account.easy.reconcile:0
3503+msgid ""
3504+"Match one debit line vs one credit line. Do not allow partial "
3505+"reconciliation. The lines should have the same amount (with the write-off) "
3506+"and the same partner to be reconciled."
3507+msgstr ""
3508+"Lettre un débit avec un crédit ayant le même montant et le même partenaire. "
3509+"Le lettrage ne peut être partiel (écriture d'ajustement en cas d'écart)."
3510+
3511+#. module: account_easy_reconcile
3512+#: field:easy.reconcile.history,easy_reconcile_id:0
3513+msgid "Reconcile Profile"
3514+msgstr "Profil de réconciliation"
3515+
3516+#. module: account_easy_reconcile
3517+#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile_method
3518+msgid "reconcile method for account_easy_reconcile"
3519+msgstr "Méthode de lettrage"
3520+
3521+#. module: account_easy_reconcile
3522+#: view:account.easy.reconcile:0
3523+msgid "Start Auto Reconciliation"
3524+msgstr "Lancer le lettrage automatisé"
3525+
3526+#. module: account_easy_reconcile
3527+#: code:addons/account_easy_reconcile/easy_reconcile.py:257
3528+#, python-format
3529+msgid "Error"
3530+msgstr "Erreur"
3531+
3532+#. module: account_easy_reconcile
3533+#: code:addons/account_easy_reconcile/easy_reconcile.py:258
3534+#, python-format
3535+msgid "There is no history of reconciled items on the task: %s."
3536+msgstr "Il n'y a pas d'historique d'écritures lettrées sur la tâche: %s."
3537+
3538+#. module: account_easy_reconcile
3539+#: view:account.easy.reconcile:0
3540+msgid ""
3541+"Match one debit line vs one credit line. Do not allow partial "
3542+"reconciliation. The lines should have the same amount (with the write-off) "
3543+"and the same name to be reconciled."
3544+msgstr ""
3545+"Lettre un débit avec un crédit ayant le même montant et la même description. "
3546+"Le lettrage ne peut être partiel (écriture d'ajustement en cas d'écart)."
3547+
3548+#. module: account_easy_reconcile
3549+#: field:account.easy.reconcile.method,account_lost_id:0
3550+#: field:easy.reconcile.base,account_lost_id:0
3551+#: field:easy.reconcile.options,account_lost_id:0
3552+#: field:easy.reconcile.simple,account_lost_id:0
3553+#: field:easy.reconcile.simple.name,account_lost_id:0
3554+#: field:easy.reconcile.simple.partner,account_lost_id:0
3555+#: field:easy.reconcile.simple.reference,account_lost_id:0
3556+msgid "Account Lost"
3557+msgstr "Compte de pertes"
3558+
3559+#. module: account_easy_reconcile
3560+#: view:easy.reconcile.history:0
3561+msgid "Reconciliation Profile"
3562+msgstr "Profil de réconciliation"
3563+
3564+#. module: account_easy_reconcile
3565+#: view:account.easy.reconcile:0
3566+#: field:account.easy.reconcile,history_ids:0
3567+msgid "History"
3568+msgstr "Historique"
3569+
3570+#. module: account_easy_reconcile
3571+#: view:account.easy.reconcile:0
3572+#: view:easy.reconcile.history:0
3573+msgid "Go to reconciled items"
3574+msgstr "Voir les entrées lettrées"
3575+
3576+#. module: account_easy_reconcile
3577+#: view:account.easy.reconcile:0
3578+msgid "Profile Information"
3579+msgstr "Information sur le profil"
3580+
3581+#. module: account_easy_reconcile
3582+#: view:account.easy.reconcile.method:0
3583+msgid "Automatic Easy Reconcile Method"
3584+msgstr "Méthode de lettrage automatisé"
3585+
3586+#. module: account_easy_reconcile
3587+#: view:account.easy.reconcile:0
3588+msgid "Simple. Amount and Reference"
3589+msgstr "Simple. Montant et référence"
3590+
3591+#. module: account_easy_reconcile
3592+#: view:account.easy.reconcile:0
3593+msgid "Display items partially reconciled on the last run"
3594+msgstr "Afficher les entrées partiellement lettrées au dernier lettrage"
3595+
3596+#. module: account_easy_reconcile
3597+#: field:account.easy.reconcile.method,sequence:0
3598+msgid "Sequence"
3599+msgstr "Séquence"
3600+
3601+#. module: account_easy_reconcile
3602+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple
3603+msgid "easy.reconcile.simple"
3604+msgstr "easy.reconcile.simple"
3605+
3606+#. module: account_easy_reconcile
3607+#: view:easy.reconcile.history:0
3608+msgid "Reconciliations of last 7 days"
3609+msgstr "Lettrages des 7 derniers jours"
3610+
3611+#. module: account_easy_reconcile
3612+#: field:account.easy.reconcile.method,date_base_on:0
3613+#: field:easy.reconcile.base,date_base_on:0
3614+#: field:easy.reconcile.options,date_base_on:0
3615+#: field:easy.reconcile.simple,date_base_on:0
3616+#: field:easy.reconcile.simple.name,date_base_on:0
3617+#: field:easy.reconcile.simple.partner,date_base_on:0
3618+#: field:easy.reconcile.simple.reference,date_base_on:0
3619+msgid "Date of reconciliation"
3620+msgstr "Date de lettrage"
3621+
3622+#. module: account_easy_reconcile
3623+#: code:addons/account_easy_reconcile/easy_reconcile_history.py:111
3624+#: view:easy.reconcile.history:0
3625+#: field:easy.reconcile.history,reconcile_partial_ids:0
3626+#, python-format
3627+msgid "Partial Reconciliations"
3628+msgstr "Lettrages partiels"
3629+
3630+#. module: account_easy_reconcile
3631+#: field:account.easy.reconcile.method,journal_id:0
3632+#: field:easy.reconcile.base,journal_id:0
3633+#: field:easy.reconcile.options,journal_id:0
3634+#: field:easy.reconcile.simple,journal_id:0
3635+#: field:easy.reconcile.simple.name,journal_id:0
3636+#: field:easy.reconcile.simple.partner,journal_id:0
3637+#: field:easy.reconcile.simple.reference,journal_id:0
3638+msgid "Journal"
3639+msgstr "Journal"
3640+
3641+#. module: account_easy_reconcile
3642+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_reference
3643+msgid "easy.reconcile.simple.reference"
3644+msgstr "easy.reconcile.simple.reference"
3645+
3646+#. module: account_easy_reconcile
3647+#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile
3648+msgid "account easy reconcile"
3649+msgstr "Lettrage automatisé"
3650
3651=== added directory 'account_easy_reconcile/security'
3652=== added file 'account_easy_reconcile/security/ir.model.access.csv'
3653--- account_easy_reconcile/security/ir.model.access.csv 1970-01-01 00:00:00 +0000
3654+++ account_easy_reconcile/security/ir.model.access.csv 2014-04-03 07:40:14 +0000
3655@@ -0,0 +1,15 @@
3656+id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
3657+access_easy_reconcile_options_acc_user,easy.reconcile.options,model_easy_reconcile_options,account.group_account_user,1,0,0,0
3658+access_account_easy_reconcile_method_acc_user,account.easy.reconcile.method,model_account_easy_reconcile_method,account.group_account_user,1,0,0,0
3659+access_account_easy_reconcile_acc_user,account.easy.reconcile,model_account_easy_reconcile,account.group_account_user,1,1,0,0
3660+access_easy_reconcile_simple_name_acc_user,easy.reconcile.simple.name,model_easy_reconcile_simple_name,account.group_account_user,1,0,0,0
3661+access_easy_reconcile_simple_partner_acc_user,easy.reconcile.simple.partner,model_easy_reconcile_simple_partner,account.group_account_user,1,0,0,0
3662+access_easy_reconcile_simple_reference_acc_user,easy.reconcile.simple.reference,model_easy_reconcile_simple_reference,account.group_account_user,1,0,0,0
3663+access_easy_reconcile_options_acc_mgr,easy.reconcile.options,model_easy_reconcile_options,account.group_account_user,1,0,0,0
3664+access_account_easy_reconcile_method_acc_mgr,account.easy.reconcile.method,model_account_easy_reconcile_method,account.group_account_user,1,1,1,1
3665+access_account_easy_reconcile_acc_mgr,account.easy.reconcile,model_account_easy_reconcile,account.group_account_user,1,1,1,1
3666+access_easy_reconcile_simple_name_acc_mgr,easy.reconcile.simple.name,model_easy_reconcile_simple_name,account.group_account_user,1,0,0,0
3667+access_easy_reconcile_simple_partner_acc_mgr,easy.reconcile.simple.partner,model_easy_reconcile_simple_partner,account.group_account_user,1,0,0,0
3668+access_easy_reconcile_simple_reference_acc_mgr,easy.reconcile.simple.reference,model_easy_reconcile_simple_reference,account.group_account_user,1,0,0,0
3669+access_easy_reconcile_history_acc_user,easy.reconcile.history,model_easy_reconcile_history,account.group_account_user,1,1,1,0
3670+access_easy_reconcile_history_acc_mgr,easy.reconcile.history,model_easy_reconcile_history,account.group_account_manager,1,1,1,1
3671
3672=== added file 'account_easy_reconcile/security/ir_rule.xml'
3673--- account_easy_reconcile/security/ir_rule.xml 1970-01-01 00:00:00 +0000
3674+++ account_easy_reconcile/security/ir_rule.xml 2014-04-03 07:40:14 +0000
3675@@ -0,0 +1,25 @@
3676+<?xml version="1.0" encoding="utf-8"?>
3677+<openerp>
3678+ <data noupdate="1">
3679+ <record id="easy_reconcile_rule" model="ir.rule">
3680+ <field name="name">Easy reconcile multi-company</field>
3681+ <field name="model_id" ref="model_account_easy_reconcile"/>
3682+ <field name="global" eval="True"/>
3683+ <field name="domain_force">['|', ('company_id', '=', False), ('company_id', 'child_of', [user.company_id.id])]</field>
3684+ </record>
3685+
3686+ <record id="easy_reconcile_history_rule" model="ir.rule">
3687+ <field name="name">Easy reconcile history multi-company</field>
3688+ <field name="model_id" ref="model_easy_reconcile_history"/>
3689+ <field name="global" eval="True"/>
3690+ <field name="domain_force">['|', ('company_id', '=', False), ('company_id', 'child_of', [user.company_id.id])]</field>
3691+ </record>
3692+
3693+ <record id="easy_reconcile_method_rule" model="ir.rule">
3694+ <field name="name">Easy reconcile method multi-company</field>
3695+ <field name="model_id" ref="model_account_easy_reconcile_method"/>
3696+ <field name="global" eval="True"/>
3697+ <field name="domain_force">['|', ('company_id', '=', False), ('company_id', 'child_of', [user.company_id.id])]</field>
3698+ </record>
3699+ </data>
3700+</openerp>
3701
3702=== added file 'account_easy_reconcile/simple_reconciliation.py'
3703--- account_easy_reconcile/simple_reconciliation.py 1970-01-01 00:00:00 +0000
3704+++ account_easy_reconcile/simple_reconciliation.py 2014-04-03 07:40:14 +0000
3705@@ -0,0 +1,120 @@
3706+# -*- coding: utf-8 -*-
3707+##############################################################################
3708+#
3709+# Copyright 2012-2013 Camptocamp SA (Guewen Baconnier)
3710+# Copyright (C) 2010 Sébastien Beau
3711+#
3712+# This program is free software: you can redistribute it and/or modify
3713+# it under the terms of the GNU Affero General Public License as
3714+# published by the Free Software Foundation, either version 3 of the
3715+# License, or (at your option) any later version.
3716+#
3717+# This program is distributed in the hope that it will be useful,
3718+# but WITHOUT ANY WARRANTY; without even the implied warranty of
3719+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3720+# GNU Affero General Public License for more details.
3721+#
3722+# You should have received a copy of the GNU Affero General Public License
3723+# along with this program. If not, see <http://www.gnu.org/licenses/>.
3724+#
3725+##############################################################################
3726+
3727+from openerp.osv.orm import AbstractModel, TransientModel
3728+
3729+
3730+class easy_reconcile_simple(AbstractModel):
3731+
3732+ _name = 'easy.reconcile.simple'
3733+ _inherit = 'easy.reconcile.base'
3734+
3735+ # has to be subclassed
3736+ # field name used as key for matching the move lines
3737+ _key_field = None
3738+
3739+ def rec_auto_lines_simple(self, cr, uid, rec, lines, context=None):
3740+ if context is None:
3741+ context = {}
3742+
3743+ if self._key_field is None:
3744+ raise ValueError("_key_field has to be defined")
3745+
3746+ count = 0
3747+ res = []
3748+ while (count < len(lines)):
3749+ for i in xrange(count+1, len(lines)):
3750+ writeoff_account_id = False
3751+ if lines[count][self._key_field] != lines[i][self._key_field]:
3752+ break
3753+
3754+ check = False
3755+ if lines[count]['credit'] > 0 and lines[i]['debit'] > 0:
3756+ credit_line = lines[count]
3757+ debit_line = lines[i]
3758+ check = True
3759+ elif lines[i]['credit'] > 0 and lines[count]['debit'] > 0:
3760+ credit_line = lines[i]
3761+ debit_line = lines[count]
3762+ check = True
3763+ if not check:
3764+ continue
3765+
3766+ reconciled, dummy = self._reconcile_lines(
3767+ cr, uid, rec, [credit_line, debit_line],
3768+ allow_partial=False, context=context)
3769+ if reconciled:
3770+ res += [credit_line['id'], debit_line['id']]
3771+ del lines[i]
3772+ break
3773+ count += 1
3774+ return res, [] # empty list for partial, only full rec in "simple" rec
3775+
3776+ def _simple_order(self, rec, *args, **kwargs):
3777+ return "ORDER BY account_move_line.%s" % self._key_field
3778+
3779+ def _action_rec(self, cr, uid, rec, context=None):
3780+ """Match only 2 move lines, do not allow partial reconcile"""
3781+ select = self._select(rec)
3782+ select += ", account_move_line.%s " % self._key_field
3783+ where, params = self._where(rec)
3784+ where += " AND account_move_line.%s IS NOT NULL " % self._key_field
3785+
3786+ where2, params2 = self._get_filter(cr, uid, rec, context=context)
3787+ query = ' '.join((
3788+ select,
3789+ self._from(rec),
3790+ where, where2,
3791+ self._simple_order(rec)))
3792+
3793+ cr.execute(query, params + params2)
3794+ lines = cr.dictfetchall()
3795+ return self.rec_auto_lines_simple(cr, uid, rec, lines, context)
3796+
3797+
3798+class easy_reconcile_simple_name(TransientModel):
3799+
3800+ _name = 'easy.reconcile.simple.name'
3801+ _inherit = 'easy.reconcile.simple'
3802+
3803+ # has to be subclassed
3804+ # field name used as key for matching the move lines
3805+ _key_field = 'name'
3806+
3807+
3808+class easy_reconcile_simple_partner(TransientModel):
3809+
3810+ _name = 'easy.reconcile.simple.partner'
3811+ _inherit = 'easy.reconcile.simple'
3812+
3813+ # has to be subclassed
3814+ # field name used as key for matching the move lines
3815+ _key_field = 'partner_id'
3816+
3817+
3818+class easy_reconcile_simple_reference(TransientModel):
3819+
3820+ _name = 'easy.reconcile.simple.reference'
3821+ _inherit = 'easy.reconcile.simple'
3822+
3823+ # has to be subclassed
3824+ # field name used as key for matching the move lines
3825+ _key_field = 'ref'
3826
3827=== added directory 'account_statement_bankaccount_completion'
3828=== added file 'account_statement_bankaccount_completion/__init__.py'
3829--- account_statement_bankaccount_completion/__init__.py 1970-01-01 00:00:00 +0000
3830+++ account_statement_bankaccount_completion/__init__.py 2014-04-03 07:40:14 +0000
3831@@ -0,0 +1,21 @@
3832+# -*- coding: utf-8 -*-
3833+#
3834+#
3835+# Author: Laurent Mignon
3836+# Copyright 2013 'ACSONE SA/NV'
3837+#
3838+# This program is free software: you can redistribute it and/or modify
3839+# it under the terms of the GNU Affero General Public License as
3840+# published by the Free Software Foundation, either version 3 of the
3841+# License, or (at your option) any later version.
3842+#
3843+# This program is distributed in the hope that it will be useful,
3844+# but WITHOUT ANY WARRANTY; without even the implied warranty of
3845+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3846+# GNU Affero General Public License for more details.
3847+#
3848+# You should have received a copy of the GNU Affero General Public License
3849+# along with this program. If not, see <http://www.gnu.org/licenses/>.
3850+#
3851+#
3852+import statement
3853
3854=== added file 'account_statement_bankaccount_completion/__openerp__.py'
3855--- account_statement_bankaccount_completion/__openerp__.py 1970-01-01 00:00:00 +0000
3856+++ account_statement_bankaccount_completion/__openerp__.py 2014-04-03 07:40:14 +0000
3857@@ -0,0 +1,48 @@
3858+# -*- coding: utf-8 -*-
3859+#
3860+#
3861+# Author: Laurent Mignon
3862+# Copyright 2013 'ACSONE SA/NV'
3863+#
3864+# This program is free software: you can redistribute it and/or modify
3865+# it under the terms of the GNU Affero General Public License as
3866+# published by the Free Software Foundation, either version 3 of the
3867+# License, or (at your option) any later version.
3868+#
3869+# This program is distributed in the hope that it will be useful,
3870+# but WITHOUT ANY WARRANTY; without even the implied warranty of
3871+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3872+# GNU Affero General Public License for more details.
3873+#
3874+# You should have received a copy of the GNU Affero General Public License
3875+# along with this program. If not, see <http://www.gnu.org/licenses/>.
3876+#
3877+#
3878+
3879+{'name': "Bank statement completion from bank account number",
3880+ 'version': '1.0.1',
3881+ 'author': 'ACSONE SA/NV',
3882+ 'maintainer': 'ACSONE SA/NV',
3883+ 'category': 'Finance',
3884+ 'complexity': 'normal',
3885+ 'depends': [
3886+ 'account_statement_base_completion',
3887+ ],
3888+ 'description': """
3889+ Add a completion method based on the partner bank account number
3890+ provided by the bank/office.
3891+
3892+ Completion will look in the partner with that bank account number
3893+ to match the partner, then it will fill in the bank statement line
3894+ with it to ease the reconciliation.
3895+
3896+ """,
3897+ 'website': 'http://www.acsone.eu',
3898+ 'data': [
3899+ "data.xml",
3900+ ],
3901+ 'demo': [],
3902+ 'installable': True,
3903+ 'auto_install': False,
3904+ 'license': 'AGPL-3',
3905+ }
3906
3907=== added file 'account_statement_bankaccount_completion/data.xml'
3908--- account_statement_bankaccount_completion/data.xml 1970-01-01 00:00:00 +0000
3909+++ account_statement_bankaccount_completion/data.xml 2014-04-03 07:40:14 +0000
3910@@ -0,0 +1,12 @@
3911+<?xml version="1.0" encoding="utf-8"?>
3912+<openerp>
3913+<data noupdate="1">
3914+
3915+ <record id="bank_statement_completion_rule_10" model="account.statement.completion.rule">
3916+ <field name="name">Match from bank account number (Normal or IBAN))</field>
3917+ <field name="sequence">10</field>
3918+ <field name="function_to_call">get_from_bank_account</field>
3919+ </record>
3920+
3921+</data>
3922+</openerp>
3923
3924=== added directory 'account_statement_bankaccount_completion/i18n'
3925=== added file 'account_statement_bankaccount_completion/i18n/account_statement_bankaccount_completion.pot'
3926--- account_statement_bankaccount_completion/i18n/account_statement_bankaccount_completion.pot 1970-01-01 00:00:00 +0000
3927+++ account_statement_bankaccount_completion/i18n/account_statement_bankaccount_completion.pot 2014-04-03 07:40:14 +0000
3928@@ -0,0 +1,43 @@
3929+# Translation of OpenERP Server.
3930+# This file contains the translation of the following modules:
3931+# * account_statement_bankaccount_completion
3932+#
3933+msgid ""
3934+msgstr ""
3935+"Project-Id-Version: OpenERP Server 7.0\n"
3936+"Report-Msgid-Bugs-To: \n"
3937+"POT-Creation-Date: 2014-01-21 11:57+0000\n"
3938+"PO-Revision-Date: 2014-01-21 11:57+0000\n"
3939+"Last-Translator: <>\n"
3940+"Language-Team: \n"
3941+"MIME-Version: 1.0\n"
3942+"Content-Type: text/plain; charset=UTF-8\n"
3943+"Content-Transfer-Encoding: \n"
3944+"Plural-Forms: \n"
3945+
3946+#. module: account_statement_bankaccount_completion
3947+#: help:account.bank.statement.line,partner_acc_number:0
3948+msgid "Account number of the partner"
3949+msgstr ""
3950+
3951+#. module: account_statement_bankaccount_completion
3952+#: model:ir.model,name:account_statement_bankaccount_completion.model_account_bank_statement_line
3953+msgid "Bank Statement Line"
3954+msgstr ""
3955+
3956+#. module: account_statement_bankaccount_completion
3957+#: code:addons/account_statement_bankaccount_completion/statement.py:68
3958+#, python-format
3959+msgid "Line named \"%s\" (Ref:%s) was matched by more than one partner for account number \"%s\"."
3960+msgstr ""
3961+
3962+#. module: account_statement_bankaccount_completion
3963+#: field:account.bank.statement.line,partner_acc_number:0
3964+msgid "Account Number"
3965+msgstr ""
3966+
3967+#. module: account_statement_bankaccount_completion
3968+#: model:ir.model,name:account_statement_bankaccount_completion.model_account_statement_completion_rule
3969+msgid "account.statement.completion.rule"
3970+msgstr ""
3971+
3972
3973=== added file 'account_statement_bankaccount_completion/statement.py'
3974--- account_statement_bankaccount_completion/statement.py 1970-01-01 00:00:00 +0000
3975+++ account_statement_bankaccount_completion/statement.py 2014-04-03 07:40:14 +0000
3976@@ -0,0 +1,96 @@
3977+# -*- coding: utf-8 -*-
3978+#
3979+#
3980+# Author: Laurent Mignon
3981+# Copyright 2013 'ACSONE SA/NV'
3982+#
3983+# This program is free software: you can redistribute it and/or modify
3984+# it under the terms of the GNU Affero General Public License as
3985+# published by the Free Software Foundation, either version 3 of the
3986+# License, or (at your option) any later version.
3987+#
3988+# This program is distributed in the hope that it will be useful,
3989+# but WITHOUT ANY WARRANTY; without even the implied warranty of
3990+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3991+# GNU Affero General Public License for more details.
3992+#
3993+# You should have received a copy of the GNU Affero General Public License
3994+# along with this program. If not, see <http://www.gnu.org/licenses/>.
3995+#
3996+#
3997+
3998+
3999+from openerp.tools.translate import _
4000+from openerp.osv.orm import Model
4001+from openerp.osv import fields
4002+from openerp.addons.account_statement_base_completion.statement import ErrorTooManyPartner
4003+
4004+
4005+class AccountStatementCompletionRule(Model):
4006+ """Add a rule based on transaction ID"""
4007+
4008+ _inherit = "account.statement.completion.rule"
4009+
4010+ def _get_functions(self, cr, uid, context=None):
4011+ res = super(AccountStatementCompletionRule, self)._get_functions(
4012+ cr, uid, context=context)
4013+ res.append(('get_from_bank_account',
4014+ 'From bank account number (Normal or IBAN)'))
4015+ return res
4016+
4017+ _columns = {
4018+ 'function_to_call': fields.selection(_get_functions, 'Method'),
4019+ }
4020+
4021+ def get_from_bank_account(self, cr, uid, st_line, context=None):
4022+ """
4023+ Match the partner based on the partner account number field
4024+ Then, call the generic st_line method to complete other values.
4025+ :param dict st_line: read of the concerned account.bank.statement.line
4026+ :return:
4027+ A dict of value that can be passed directly to the write method of
4028+ the statement line or {}
4029+ {'partner_id': value,
4030+ 'account_id' : value,
4031+ ...}
4032+ """
4033+ partner_acc_number = st_line['partner_acc_number']
4034+ if not partner_acc_number:
4035+ return {}
4036+ st_obj = self.pool.get('account.bank.statement.line')
4037+ res = {}
4038+ res_bank_obj = self.pool.get('res.partner.bank')
4039+ ids = res_bank_obj.search(cr,
4040+ uid,
4041+ [('acc_number', '=', partner_acc_number)],
4042+ context=context)
4043+ if len(ids) > 1:
4044+ raise ErrorTooManyPartner(_('Line named "%s" (Ref:%s) was matched by more than '
4045+ 'one partner for account number "%s".') % (st_line['name'], st_line['ref'], partner_acc_number))
4046+ if len(ids) == 1:
4047+ partner = res_bank_obj.browse(cr, uid, ids[0], context=context).partner_id
4048+ res['partner_id'] = partner.id
4049+ st_vals = st_obj.get_values_for_line(cr,
4050+ uid,
4051+ profile_id=st_line['profile_id'],
4052+ master_account_id=st_line['master_account_id'],
4053+ partner_id=res.get('partner_id', False),
4054+ line_type=st_line['type'],
4055+ amount=st_line['amount'] if st_line['amount'] else 0.0,
4056+ context=context)
4057+ res.update(st_vals)
4058+ return res
4059+
4060+
4061+class AccountStatementLine(Model):
4062+ _inherit = "account.bank.statement.line"
4063+
4064+ _columns = {
4065+ # 'additional_bank_fields' : fields.serialized('Additional infos from bank', help="Used by completion and import system."),
4066+ 'partner_acc_number': fields.sparse(
4067+ type='char',
4068+ string='Account Number',
4069+ size=64,
4070+ serialization_field='additionnal_bank_fields',
4071+ help="Account number of the partner"),
4072+ }
4073
4074=== added directory 'account_statement_bankaccount_completion/tests'
4075=== added file 'account_statement_bankaccount_completion/tests/__init__.py'
4076--- account_statement_bankaccount_completion/tests/__init__.py 1970-01-01 00:00:00 +0000
4077+++ account_statement_bankaccount_completion/tests/__init__.py 2014-04-03 07:40:14 +0000
4078@@ -0,0 +1,27 @@
4079+# -*- coding: utf-8 -*-
4080+#
4081+#
4082+# Authors: Laurent Mignon
4083+# Copyright (c) 2013 Acsone SA/NV (http://www.acsone.eu)
4084+# All Rights Reserved
4085+#
4086+# This program is free software: you can redistribute it and/or modify
4087+# it under the terms of the GNU Affero General Public License as
4088+# published by the Free Software Foundation, either version 3 of the
4089+# License, or (at your option) any later version.
4090+#
4091+# This program is distributed in the hope that it will be useful,
4092+# but WITHOUT ANY WARRANTY; without even the implied warranty of
4093+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4094+# GNU Affero General Public License for more details.
4095+#
4096+# You should have received a copy of the GNU Affero General Public License
4097+# along with this program. If not, see <http://www.gnu.org/licenses/>.
4098+#
4099+#
4100+
4101+from . import test_bankaccount_completion
4102+
4103+checks = [
4104+ test_bankaccount_completion
4105+]
4106
4107=== added file 'account_statement_bankaccount_completion/tests/test_bankaccount_completion.py'
4108--- account_statement_bankaccount_completion/tests/test_bankaccount_completion.py 1970-01-01 00:00:00 +0000
4109+++ account_statement_bankaccount_completion/tests/test_bankaccount_completion.py 2014-04-03 07:40:14 +0000
4110@@ -0,0 +1,91 @@
4111+# -*- coding: utf-8 -*-
4112+#
4113+#
4114+# Authors: Laurent Mignon
4115+# Copyright (c) 2013 Acsone SA/NV (http://www.acsone.eu)
4116+# All Rights Reserved
4117+#
4118+# This program is free software: you can redistribute it and/or modify
4119+# it under the terms of the GNU Affero General Public License as
4120+# published by the Free Software Foundation, either version 3 of the
4121+# License, or (at your option) any later version.
4122+#
4123+# This program is distributed in the hope that it will be useful,
4124+# but WITHOUT ANY WARRANTY; without even the implied warranty of
4125+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4126+# GNU Affero General Public License for more details.
4127+#
4128+# You should have received a copy of the GNU Affero General Public License
4129+# along with this program. If not, see <http://www.gnu.org/licenses/>.
4130+#
4131+#
4132+from openerp.tests import common
4133+import time
4134+
4135+ACC_NUMBER = "BE38733040385372"
4136+
4137+
4138+class bankaccount_completion(common.TransactionCase):
4139+
4140+ def prepare(self):
4141+ self.company_a = self.browse_ref('base.main_company')
4142+ self.profile_obj = self.registry("account.statement.profile")
4143+ self.account_bank_statement_obj = self.registry("account.bank.statement")
4144+ self.account_bank_statement_line_obj = self.registry("account.bank.statement.line")
4145+ self.completion_rule_id = self.ref('account_statement_bankaccount_completion.bank_statement_completion_rule_10')
4146+ self.journal_id = self.registry("ir.model.data").get_object_reference(self.cr, self. uid, "account", "bank_journal")[1]
4147+ self.partner_id = self.ref('base.main_partner')
4148+ # Create the profile
4149+ self.account_id = self.registry("ir.model.data").get_object_reference(self.cr, self.uid, "account", "a_recv")[1]
4150+ self.journal_id = self.registry("ir.model.data").get_object_reference(self.cr, self. uid, "account", "bank_journal")[1]
4151+ self.profile_id = self.profile_obj.create(self.cr, self.uid, {
4152+ "name": "TEST",
4153+ "commission_account_id": self.account_id,
4154+ "journal_id": self.journal_id,
4155+ "rule_ids": [(6, 0, [self.completion_rule_id])]})
4156+ # Create the completion rule
4157+
4158+ # Create a bank statement
4159+ self.statement_id = self.account_bank_statement_obj.create(self.cr, self.uid, {
4160+ "balance_end_real": 0.0,
4161+ "balance_start": 0.0,
4162+ "date": time.strftime('%Y-%m-%d'),
4163+ "journal_id": self.journal_id,
4164+ "profile_id": self.profile_id
4165+
4166+ })
4167+
4168+ # Create bank a statement line
4169+ self.statement_line_id = self.account_bank_statement_line_obj.create(self.cr, self.uid, {
4170+ 'amount': 1000.0,
4171+ 'name': 'EXT001',
4172+ 'ref': 'My ref',
4173+ 'statement_id': self.statement_id,
4174+ 'partner_acc_number': ACC_NUMBER
4175+ })
4176+
4177+ # Add a bank account number to the partner
4178+ res_bank_obj = self.registry('res.partner.bank')
4179+ res_bank_obj.create(self.cr, self.uid, {
4180+ "state": "bank",
4181+ "company_id": self.company_a.id,
4182+ "partner_id": self.partner_id,
4183+ "acc_number": ACC_NUMBER,
4184+ "footer": True,
4185+ "bank_name": "Reserve"
4186+ })
4187+
4188+ def test_00(self):
4189+ """Test complete partner_id from bank account number
4190+
4191+ Test the automatic completion of the partner_id based on the account number associated to the
4192+ statement line
4193+ """
4194+ self.prepare()
4195+ statement_line = self.account_bank_statement_line_obj.browse(self.cr, self.uid, self.statement_line_id)
4196+ # before import, the
4197+ self.assertFalse(statement_line.partner_id, "Partner_id must be blank before completion")
4198+ statement_obj = self.account_bank_statement_obj.browse(self.cr, self.uid, self.statement_id)
4199+ statement_obj.button_auto_completion()
4200+ statement_line = self.account_bank_statement_line_obj.browse(self.cr, self.uid, self.statement_line_id)
4201+ self.assertEquals(self.partner_id, statement_line.partner_id['id'], "Missing expected partner id after completion")
4202
4203=== added directory 'account_statement_base_completion'
4204=== added file 'account_statement_base_completion/__init__.py'
4205--- account_statement_base_completion/__init__.py 1970-01-01 00:00:00 +0000
4206+++ account_statement_base_completion/__init__.py 2014-04-03 07:40:14 +0000
4207@@ -0,0 +1,23 @@
4208+# -*- coding: utf-8 -*-
4209+##############################################################################
4210+#
4211+# Author: Joel Grand-Guillaume
4212+# Copyright 2011-2012 Camptocamp SA
4213+#
4214+# This program is free software: you can redistribute it and/or modify
4215+# it under the terms of the GNU Affero General Public License as
4216+# published by the Free Software Foundation, either version 3 of the
4217+# License, or (at your option) any later version.
4218+#
4219+# This program is distributed in the hope that it will be useful,
4220+# but WITHOUT ANY WARRANTY; without even the implied warranty of
4221+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4222+# GNU Affero General Public License for more details.
4223+#
4224+# You should have received a copy of the GNU Affero General Public License
4225+# along with this program. If not, see <http://www.gnu.org/licenses/>.
4226+#
4227+##############################################################################
4228+
4229+from . import partner
4230+from . import statement
4231
4232=== added file 'account_statement_base_completion/__openerp__.py'
4233--- account_statement_base_completion/__openerp__.py 1970-01-01 00:00:00 +0000
4234+++ account_statement_base_completion/__openerp__.py 2014-04-03 07:40:14 +0000
4235@@ -0,0 +1,77 @@
4236+# -*- coding: utf-8 -*-
4237+##############################################################################
4238+#
4239+# Author: Joel Grand-Guillaume
4240+# Copyright 2011-2012 Camptocamp SA
4241+#
4242+# This program is free software: you can redistribute it and/or modify
4243+# it under the terms of the GNU Affero General Public License as
4244+# published by the Free Software Foundation, either version 3 of the
4245+# License, or (at your option) any later version.
4246+#
4247+# This program is distributed in the hope that it will be useful,
4248+# but WITHOUT ANY WARRANTY; without even the implied warranty of
4249+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4250+# GNU Affero General Public License for more details.
4251+#
4252+# You should have received a copy of the GNU Affero General Public License
4253+# along with this program. If not, see <http://www.gnu.org/licenses/>.
4254+#
4255+##############################################################################
4256+
4257+{'name': "Bank statement base completion",
4258+ 'version': '1.0.2',
4259+ 'author': 'Camptocamp',
4260+ 'maintainer': 'Camptocamp',
4261+ 'category': 'Finance',
4262+ 'complexity': 'normal',
4263+ 'depends': ['account_statement_ext'],
4264+ 'description': """
4265+ The goal of this module is to improve the basic bank statement, help dealing with huge volume of
4266+ reconciliation by providing basic rules to identify the partner of a bank statement line.
4267+ Each bank statement profile can have its own rules to be applied according to a sequence order.
4268+
4269+ Some basic rules are provided in this module:
4270+
4271+ 1) Match from statement line label (based on partner field 'Bank Statement Label')
4272+ 2) Match from statement line label (based on partner name)
4273+ 3) Match from statement line reference (based on Invoice number)
4274+
4275+ You can easily override this module and add your own rules in your own one. The basic rules only
4276+ fill in the partner, but you can use them to fill in any value of the line (in the future, we will
4277+ add a rule to automatically match and reconcile the line).
4278+
4279+ It adds as well a label on the bank statement line (on which the pre-define rules can match) and
4280+ a char field on the partner called 'Bank Statement Label'. Using the pre-define rules, you will be
4281+ able to match various labels for a partner.
4282+
4283+ The reference of the line is always used by the reconciliation process. We're supposed to copy
4284+ there (or write manually) the matching string. This can be: the order Number or an invoice number,
4285+ or anything that will be found in the invoice accounting entry part to make the match.
4286+
4287+ You can use it with our account_advanced_reconcile module to automatize the reconciliation process.
4288+
4289+
4290+ TODO: The rules that look for invoices to find out the partner should take back the payable / receivable
4291+ account from there directly instead of retrieving it from partner properties !
4292+
4293+ """,
4294+ 'website': 'http://www.camptocamp.com',
4295+ 'data': [
4296+ 'statement_view.xml',
4297+ 'partner_view.xml',
4298+ 'data.xml',
4299+ 'security/ir.model.access.csv',
4300+ ],
4301+ 'demo': [],
4302+ 'test': [
4303+ 'test/partner.yml',
4304+ 'test/invoice.yml',
4305+ 'test/supplier_invoice.yml',
4306+ 'test/completion_test.yml'
4307+ ],
4308+ 'installable': True,
4309+ 'images': [],
4310+ 'auto_install': False,
4311+ 'license': 'AGPL-3',
4312+}
4313
4314=== added file 'account_statement_base_completion/data.xml'
4315--- account_statement_base_completion/data.xml 1970-01-01 00:00:00 +0000
4316+++ account_statement_base_completion/data.xml 2014-04-03 07:40:14 +0000
4317@@ -0,0 +1,31 @@
4318+<?xml version="1.0" encoding="utf-8"?>
4319+<openerp>
4320+<data noupdate="1">
4321+
4322+ <record id="bank_statement_completion_rule_2" model="account.statement.completion.rule">
4323+ <field name="name">Match from line label (based on partner field 'Bank Statement Label')</field>
4324+ <field name="sequence">60</field>
4325+ <field name="function_to_call">get_from_label_and_partner_field</field>
4326+ </record>
4327+
4328+ <record id="bank_statement_completion_rule_3" model="account.statement.completion.rule">
4329+ <field name="name">Match from line label (based on partner name)</field>
4330+ <field name="sequence">70</field>
4331+ <field name="function_to_call">get_from_label_and_partner_name</field>
4332+ </record>
4333+
4334+ <record id="bank_statement_completion_rule_4" model="account.statement.completion.rule">
4335+ <field name="name">Match from line reference (based on Invoice number)</field>
4336+ <field name="sequence">40</field>
4337+ <field name="function_to_call">get_from_ref_and_invoice</field>
4338+ </record>
4339+
4340+ <record id="bank_statement_completion_rule_5" model="account.statement.completion.rule">
4341+ <field name="name">Match from line reference (based on Invoice Supplier number)</field>
4342+ <field name="sequence">45</field>
4343+ <field name="function_to_call">get_from_ref_and_supplier_invoice</field>
4344+ </record>
4345+
4346+
4347+</data>
4348+</openerp>
4349
4350=== added directory 'account_statement_base_completion/i18n'
4351=== added file 'account_statement_base_completion/i18n/ab.po'
4352--- account_statement_base_completion/i18n/ab.po 1970-01-01 00:00:00 +0000
4353+++ account_statement_base_completion/i18n/ab.po 2014-04-03 07:40:14 +0000
4354@@ -0,0 +1,216 @@
4355+# Abkhazian translation for banking-addons
4356+# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
4357+# This file is distributed under the same license as the banking-addons package.
4358+# FIRST AUTHOR <EMAIL@ADDRESS>, 2014.
4359+#
4360+msgid ""
4361+msgstr ""
4362+"Project-Id-Version: banking-addons\n"
4363+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
4364+"POT-Creation-Date: 2014-01-21 11:57+0000\n"
4365+"PO-Revision-Date: 2014-04-02 23:04+0000\n"
4366+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
4367+"Language-Team: Abkhazian <ab@li.org>\n"
4368+"MIME-Version: 1.0\n"
4369+"Content-Type: text/plain; charset=UTF-8\n"
4370+"Content-Transfer-Encoding: 8bit\n"
4371+"X-Launchpad-Export-Date: 2014-04-03 06:06+0000\n"
4372+"X-Generator: Launchpad (build 16967)\n"
4373+
4374+#. module: account_statement_base_completion
4375+#: view:account.statement.completion.rule:0
4376+msgid "Related Profiles"
4377+msgstr ""
4378+
4379+#. module: account_statement_base_completion
4380+#: help:account.bank.statement.line,label:0
4381+msgid ""
4382+"Generic field to store a label given from the bank/office on which we can "
4383+"base the default/standard providen rule."
4384+msgstr ""
4385+
4386+#. module: account_statement_base_completion
4387+#: code:addons/account_statement_base_completion/statement.py:169
4388+#, python-format
4389+msgid ""
4390+"Line named \"%s\" (Ref:%s) was matched by more than one partner while "
4391+"looking on %s invoices"
4392+msgstr ""
4393+
4394+#. module: account_statement_base_completion
4395+#: field:account.bank.statement,completion_logs:0
4396+msgid "Completion Log"
4397+msgstr ""
4398+
4399+#. module: account_statement_base_completion
4400+#: field:account.bank.statement.line,label:0
4401+msgid "Label"
4402+msgstr ""
4403+
4404+#. module: account_statement_base_completion
4405+#: model:ir.model,name:account_statement_base_completion.model_account_bank_statement
4406+msgid "Bank Statement"
4407+msgstr ""
4408+
4409+#. module: account_statement_base_completion
4410+#: field:account.statement.completion.rule,function_to_call:0
4411+msgid "Method"
4412+msgstr ""
4413+
4414+#. module: account_statement_base_completion
4415+#: code:addons/account_statement_base_completion/statement.py:326
4416+#, python-format
4417+msgid ""
4418+"Line named \"%s\" (Ref:%s) was matched by more than one partner while "
4419+"looking on partner by name"
4420+msgstr ""
4421+
4422+#. module: account_statement_base_completion
4423+#: code:addons/account_statement_base_completion/statement.py:504
4424+#, python-format
4425+msgid "Statement ID %s auto-completed for %s lines completed"
4426+msgstr ""
4427+
4428+#. module: account_statement_base_completion
4429+#: code:addons/account_statement_base_completion/statement.py:500
4430+#, python-format
4431+msgid ""
4432+"%s Bank Statement ID %s has %s lines completed by %s \n"
4433+"%s\n"
4434+"%s\n"
4435+msgstr ""
4436+
4437+#. module: account_statement_base_completion
4438+#: model:ir.model,name:account_statement_base_completion.model_account_bank_statement_line
4439+msgid "Bank Statement Line"
4440+msgstr ""
4441+
4442+#. module: account_statement_base_completion
4443+#: field:account.bank.statement.line,additionnal_bank_fields:0
4444+msgid "Additionnal infos from bank"
4445+msgstr ""
4446+
4447+#. module: account_statement_base_completion
4448+#: view:account.statement.profile:0
4449+msgid "Auto-Completion Rules"
4450+msgstr ""
4451+
4452+#. module: account_statement_base_completion
4453+#: view:account.bank.statement:0
4454+msgid "Importation related infos"
4455+msgstr ""
4456+
4457+#. module: account_statement_base_completion
4458+#: code:addons/account_statement_base_completion/statement.py:159
4459+#: code:addons/account_statement_base_completion/statement.py:179
4460+#, python-format
4461+msgid "Invalid invoice type for completion: %"
4462+msgstr ""
4463+
4464+#. module: account_statement_base_completion
4465+#: field:account.statement.completion.rule,name:0
4466+msgid "Name"
4467+msgstr ""
4468+
4469+#. module: account_statement_base_completion
4470+#: model:ir.model,name:account_statement_base_completion.model_account_statement_profile
4471+msgid "Statement Profile"
4472+msgstr ""
4473+
4474+#. module: account_statement_base_completion
4475+#: view:account.bank.statement:0
4476+msgid "Auto Completion"
4477+msgstr ""
4478+
4479+#. module: account_statement_base_completion
4480+#: view:account.statement.completion.rule:0
4481+#: model:ir.actions.act_window,name:account_statement_base_completion.action_st_completion_rule_tree
4482+#: model:ir.ui.menu,name:account_statement_base_completion.menu_action_st_completion_rule_tree_menu
4483+msgid "Statement Completion Rule"
4484+msgstr ""
4485+
4486+#. module: account_statement_base_completion
4487+#: model:ir.model,name:account_statement_base_completion.model_account_statement_completion_rule
4488+msgid "account.statement.completion.rule"
4489+msgstr ""
4490+
4491+#. module: account_statement_base_completion
4492+#: help:account.bank.statement.line,additionnal_bank_fields:0
4493+msgid ""
4494+"Used by completion and import system. Adds every field that is present in "
4495+"your bank/office statement file"
4496+msgstr ""
4497+
4498+#. module: account_statement_base_completion
4499+#: field:account.statement.completion.rule,profile_ids:0
4500+#: field:account.statement.profile,rule_ids:0
4501+msgid "Related statement profiles"
4502+msgstr ""
4503+
4504+#. module: account_statement_base_completion
4505+#: code:addons/account_statement_base_completion/statement.py:158
4506+#: code:addons/account_statement_base_completion/statement.py:178
4507+#, python-format
4508+msgid "System error"
4509+msgstr ""
4510+
4511+#. module: account_statement_base_completion
4512+#: field:account.bank.statement.line,already_completed:0
4513+msgid "Auto-Completed"
4514+msgstr ""
4515+
4516+#. module: account_statement_base_completion
4517+#: code:addons/account_statement_base_completion/statement.py:448
4518+#: code:addons/account_statement_base_completion/statement.py:466
4519+#, python-format
4520+msgid "ORM bypass error"
4521+msgstr ""
4522+
4523+#. module: account_statement_base_completion
4524+#: field:account.statement.completion.rule,sequence:0
4525+msgid "Sequence"
4526+msgstr ""
4527+
4528+#. module: account_statement_base_completion
4529+#: code:addons/account_statement_base_completion/statement.py:280
4530+#, python-format
4531+msgid ""
4532+"Line named \"%s\" (Ref:%s) was matched by more than one partner while "
4533+"looking on partner label: %s"
4534+msgstr ""
4535+
4536+#. module: account_statement_base_completion
4537+#: help:account.statement.completion.rule,sequence:0
4538+msgid "Lower means parsed first."
4539+msgstr ""
4540+
4541+#. module: account_statement_base_completion
4542+#: field:res.partner,bank_statement_label:0
4543+msgid "Bank Statement Label"
4544+msgstr ""
4545+
4546+#. module: account_statement_base_completion
4547+#: help:account.bank.statement.line,already_completed:0
4548+msgid ""
4549+"When this checkbox is ticked, the auto-completion process/button will ignore "
4550+"this line."
4551+msgstr ""
4552+
4553+#. module: account_statement_base_completion
4554+#: help:res.partner,bank_statement_label:0
4555+msgid ""
4556+"Enter the various label found on your bank statement separated by a ; If "
4557+" one of this label is include in the bank statement line, the "
4558+"partner will be automatically filled (as long as you use "
4559+"this method/rules in your statement profile)."
4560+msgstr ""
4561+
4562+#. module: account_statement_base_completion
4563+#: model:ir.model,name:account_statement_base_completion.model_res_partner
4564+msgid "Partner"
4565+msgstr ""
4566+
4567+#. module: account_statement_base_completion
4568+#: view:account.bank.statement:0
4569+msgid "Completion Logs"
4570+msgstr ""
4571
4572=== added file 'account_statement_base_completion/i18n/account_statement_base_completion.pot'
4573--- account_statement_base_completion/i18n/account_statement_base_completion.pot 1970-01-01 00:00:00 +0000
4574+++ account_statement_base_completion/i18n/account_statement_base_completion.pot 2014-04-03 07:40:14 +0000
4575@@ -0,0 +1,199 @@
4576+# Translation of OpenERP Server.
4577+# This file contains the translation of the following modules:
4578+# * account_statement_base_completion
4579+#
4580+msgid ""
4581+msgstr ""
4582+"Project-Id-Version: OpenERP Server 7.0\n"
4583+"Report-Msgid-Bugs-To: \n"
4584+"POT-Creation-Date: 2014-01-21 11:57+0000\n"
4585+"PO-Revision-Date: 2014-01-21 11:57+0000\n"
4586+"Last-Translator: <>\n"
4587+"Language-Team: \n"
4588+"MIME-Version: 1.0\n"
4589+"Content-Type: text/plain; charset=UTF-8\n"
4590+"Content-Transfer-Encoding: \n"
4591+"Plural-Forms: \n"
4592+
4593+#. module: account_statement_base_completion
4594+#: view:account.statement.completion.rule:0
4595+msgid "Related Profiles"
4596+msgstr ""
4597+
4598+#. module: account_statement_base_completion
4599+#: help:account.bank.statement.line,label:0
4600+msgid "Generic field to store a label given from the bank/office on which we can base the default/standard providen rule."
4601+msgstr ""
4602+
4603+#. module: account_statement_base_completion
4604+#: code:addons/account_statement_base_completion/statement.py:169
4605+#, python-format
4606+msgid "Line named \"%s\" (Ref:%s) was matched by more than one partner while looking on %s invoices"
4607+msgstr ""
4608+
4609+#. module: account_statement_base_completion
4610+#: field:account.bank.statement,completion_logs:0
4611+msgid "Completion Log"
4612+msgstr ""
4613+
4614+#. module: account_statement_base_completion
4615+#: field:account.bank.statement.line,label:0
4616+msgid "Label"
4617+msgstr ""
4618+
4619+#. module: account_statement_base_completion
4620+#: model:ir.model,name:account_statement_base_completion.model_account_bank_statement
4621+msgid "Bank Statement"
4622+msgstr ""
4623+
4624+#. module: account_statement_base_completion
4625+#: field:account.statement.completion.rule,function_to_call:0
4626+msgid "Method"
4627+msgstr ""
4628+
4629+#. module: account_statement_base_completion
4630+#: code:addons/account_statement_base_completion/statement.py:326
4631+#, python-format
4632+msgid "Line named \"%s\" (Ref:%s) was matched by more than one partner while looking on partner by name"
4633+msgstr ""
4634+
4635+#. module: account_statement_base_completion
4636+#: code:addons/account_statement_base_completion/statement.py:504
4637+#, python-format
4638+msgid "Statement ID %s auto-completed for %s lines completed"
4639+msgstr ""
4640+
4641+#. module: account_statement_base_completion
4642+#: code:addons/account_statement_base_completion/statement.py:500
4643+#, python-format
4644+msgid "%s Bank Statement ID %s has %s lines completed by %s \n"
4645+"%s\n"
4646+"%s\n"
4647+""
4648+msgstr ""
4649+
4650+#. module: account_statement_base_completion
4651+#: model:ir.model,name:account_statement_base_completion.model_account_bank_statement_line
4652+msgid "Bank Statement Line"
4653+msgstr ""
4654+
4655+#. module: account_statement_base_completion
4656+#: field:account.bank.statement.line,additionnal_bank_fields:0
4657+msgid "Additionnal infos from bank"
4658+msgstr ""
4659+
4660+#. module: account_statement_base_completion
4661+#: view:account.statement.profile:0
4662+msgid "Auto-Completion Rules"
4663+msgstr ""
4664+
4665+#. module: account_statement_base_completion
4666+#: view:account.bank.statement:0
4667+msgid "Importation related infos"
4668+msgstr ""
4669+
4670+#. module: account_statement_base_completion
4671+#: code:addons/account_statement_base_completion/statement.py:159
4672+#: code:addons/account_statement_base_completion/statement.py:179
4673+#, python-format
4674+msgid "Invalid invoice type for completion: %"
4675+msgstr ""
4676+
4677+#. module: account_statement_base_completion
4678+#: field:account.statement.completion.rule,name:0
4679+msgid "Name"
4680+msgstr ""
4681+
4682+#. module: account_statement_base_completion
4683+#: model:ir.model,name:account_statement_base_completion.model_account_statement_profile
4684+msgid "Statement Profile"
4685+msgstr ""
4686+
4687+#. module: account_statement_base_completion
4688+#: view:account.bank.statement:0
4689+msgid "Auto Completion"
4690+msgstr ""
4691+
4692+#. module: account_statement_base_completion
4693+#: view:account.statement.completion.rule:0
4694+#: model:ir.actions.act_window,name:account_statement_base_completion.action_st_completion_rule_tree
4695+#: model:ir.ui.menu,name:account_statement_base_completion.menu_action_st_completion_rule_tree_menu
4696+msgid "Statement Completion Rule"
4697+msgstr ""
4698+
4699+#. module: account_statement_base_completion
4700+#: model:ir.model,name:account_statement_base_completion.model_account_statement_completion_rule
4701+msgid "account.statement.completion.rule"
4702+msgstr ""
4703+
4704+#. module: account_statement_base_completion
4705+#: help:account.bank.statement.line,additionnal_bank_fields:0
4706+msgid "Used by completion and import system. Adds every field that is present in your bank/office statement file"
4707+msgstr ""
4708+
4709+#. module: account_statement_base_completion
4710+#: field:account.statement.completion.rule,profile_ids:0
4711+#: field:account.statement.profile,rule_ids:0
4712+msgid "Related statement profiles"
4713+msgstr ""
4714+
4715+#. module: account_statement_base_completion
4716+#: code:addons/account_statement_base_completion/statement.py:158
4717+#: code:addons/account_statement_base_completion/statement.py:178
4718+#, python-format
4719+msgid "System error"
4720+msgstr ""
4721+
4722+#. module: account_statement_base_completion
4723+#: field:account.bank.statement.line,already_completed:0
4724+msgid "Auto-Completed"
4725+msgstr ""
4726+
4727+#. module: account_statement_base_completion
4728+#: code:addons/account_statement_base_completion/statement.py:448
4729+#: code:addons/account_statement_base_completion/statement.py:466
4730+#, python-format
4731+msgid "ORM bypass error"
4732+msgstr ""
4733+
4734+#. module: account_statement_base_completion
4735+#: field:account.statement.completion.rule,sequence:0
4736+msgid "Sequence"
4737+msgstr ""
4738+
4739+#. module: account_statement_base_completion
4740+#: code:addons/account_statement_base_completion/statement.py:280
4741+#, python-format
4742+msgid "Line named \"%s\" (Ref:%s) was matched by more than one partner while looking on partner label: %s"
4743+msgstr ""
4744+
4745+#. module: account_statement_base_completion
4746+#: help:account.statement.completion.rule,sequence:0
4747+msgid "Lower means parsed first."
4748+msgstr ""
4749+
4750+#. module: account_statement_base_completion
4751+#: field:res.partner,bank_statement_label:0
4752+msgid "Bank Statement Label"
4753+msgstr ""
4754+
4755+#. module: account_statement_base_completion
4756+#: help:account.bank.statement.line,already_completed:0
4757+msgid "When this checkbox is ticked, the auto-completion process/button will ignore this line."
4758+msgstr ""
4759+
4760+#. module: account_statement_base_completion
4761+#: help:res.partner,bank_statement_label:0
4762+msgid "Enter the various label found on your bank statement separated by a ; If one of this label is include in the bank statement line, the partner will be automatically filled (as long as you use this method/rules in your statement profile)."
4763+msgstr ""
4764+
4765+#. module: account_statement_base_completion
4766+#: model:ir.model,name:account_statement_base_completion.model_res_partner
4767+msgid "Partner"
4768+msgstr ""
4769+
4770+#. module: account_statement_base_completion
4771+#: view:account.bank.statement:0
4772+msgid "Completion Logs"
4773+msgstr ""
4774+
4775
4776=== added file 'account_statement_base_completion/i18n/fr.po'
4777--- account_statement_base_completion/i18n/fr.po 1970-01-01 00:00:00 +0000
4778+++ account_statement_base_completion/i18n/fr.po 2014-04-03 07:40:14 +0000
4779@@ -0,0 +1,216 @@
4780+# French translation for banking-addons
4781+# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
4782+# This file is distributed under the same license as the banking-addons package.
4783+# FIRST AUTHOR <EMAIL@ADDRESS>, 2014.
4784+#
4785+msgid ""
4786+msgstr ""
4787+"Project-Id-Version: banking-addons\n"
4788+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
4789+"POT-Creation-Date: 2014-01-21 11:57+0000\n"
4790+"PO-Revision-Date: 2014-03-21 15:17+0000\n"
4791+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
4792+"Language-Team: French <fr@li.org>\n"
4793+"MIME-Version: 1.0\n"
4794+"Content-Type: text/plain; charset=UTF-8\n"
4795+"Content-Transfer-Encoding: 8bit\n"
4796+"X-Launchpad-Export-Date: 2014-03-22 07:11+0000\n"
4797+"X-Generator: Launchpad (build 16967)\n"
4798+
4799+#. module: account_statement_base_completion
4800+#: view:account.statement.completion.rule:0
4801+msgid "Related Profiles"
4802+msgstr ""
4803+
4804+#. module: account_statement_base_completion
4805+#: help:account.bank.statement.line,label:0
4806+msgid ""
4807+"Generic field to store a label given from the bank/office on which we can "
4808+"base the default/standard providen rule."
4809+msgstr ""
4810+
4811+#. module: account_statement_base_completion
4812+#: code:addons/account_statement_base_completion/statement.py:169
4813+#, python-format
4814+msgid ""
4815+"Line named \"%s\" (Ref:%s) was matched by more than one partner while "
4816+"looking on %s invoices"
4817+msgstr ""
4818+
4819+#. module: account_statement_base_completion
4820+#: field:account.bank.statement,completion_logs:0
4821+msgid "Completion Log"
4822+msgstr ""
4823+
4824+#. module: account_statement_base_completion
4825+#: field:account.bank.statement.line,label:0
4826+msgid "Label"
4827+msgstr ""
4828+
4829+#. module: account_statement_base_completion
4830+#: model:ir.model,name:account_statement_base_completion.model_account_bank_statement
4831+msgid "Bank Statement"
4832+msgstr ""
4833+
4834+#. module: account_statement_base_completion
4835+#: field:account.statement.completion.rule,function_to_call:0
4836+msgid "Method"
4837+msgstr ""
4838+
4839+#. module: account_statement_base_completion
4840+#: code:addons/account_statement_base_completion/statement.py:326
4841+#, python-format
4842+msgid ""
4843+"Line named \"%s\" (Ref:%s) was matched by more than one partner while "
4844+"looking on partner by name"
4845+msgstr ""
4846+
4847+#. module: account_statement_base_completion
4848+#: code:addons/account_statement_base_completion/statement.py:504
4849+#, python-format
4850+msgid "Statement ID %s auto-completed for %s lines completed"
4851+msgstr ""
4852+
4853+#. module: account_statement_base_completion
4854+#: code:addons/account_statement_base_completion/statement.py:500
4855+#, python-format
4856+msgid ""
4857+"%s Bank Statement ID %s has %s lines completed by %s \n"
4858+"%s\n"
4859+"%s\n"
4860+msgstr ""
4861+
4862+#. module: account_statement_base_completion
4863+#: model:ir.model,name:account_statement_base_completion.model_account_bank_statement_line
4864+msgid "Bank Statement Line"
4865+msgstr ""
4866+
4867+#. module: account_statement_base_completion
4868+#: field:account.bank.statement.line,additionnal_bank_fields:0
4869+msgid "Additionnal infos from bank"
4870+msgstr ""
4871+
4872+#. module: account_statement_base_completion
4873+#: view:account.statement.profile:0
4874+msgid "Auto-Completion Rules"
4875+msgstr ""
4876+
4877+#. module: account_statement_base_completion
4878+#: view:account.bank.statement:0
4879+msgid "Importation related infos"
4880+msgstr ""
4881+
4882+#. module: account_statement_base_completion
4883+#: code:addons/account_statement_base_completion/statement.py:159
4884+#: code:addons/account_statement_base_completion/statement.py:179
4885+#, python-format
4886+msgid "Invalid invoice type for completion: %"
4887+msgstr ""
4888+
4889+#. module: account_statement_base_completion
4890+#: field:account.statement.completion.rule,name:0
4891+msgid "Name"
4892+msgstr ""
4893+
4894+#. module: account_statement_base_completion
4895+#: model:ir.model,name:account_statement_base_completion.model_account_statement_profile
4896+msgid "Statement Profile"
4897+msgstr ""
4898+
4899+#. module: account_statement_base_completion
4900+#: view:account.bank.statement:0
4901+msgid "Auto Completion"
4902+msgstr ""
4903+
4904+#. module: account_statement_base_completion
4905+#: view:account.statement.completion.rule:0
4906+#: model:ir.actions.act_window,name:account_statement_base_completion.action_st_completion_rule_tree
4907+#: model:ir.ui.menu,name:account_statement_base_completion.menu_action_st_completion_rule_tree_menu
4908+msgid "Statement Completion Rule"
4909+msgstr ""
4910+
4911+#. module: account_statement_base_completion
4912+#: model:ir.model,name:account_statement_base_completion.model_account_statement_completion_rule
4913+msgid "account.statement.completion.rule"
4914+msgstr ""
4915+
4916+#. module: account_statement_base_completion
4917+#: help:account.bank.statement.line,additionnal_bank_fields:0
4918+msgid ""
4919+"Used by completion and import system. Adds every field that is present in "
4920+"your bank/office statement file"
4921+msgstr ""
4922+
4923+#. module: account_statement_base_completion
4924+#: field:account.statement.completion.rule,profile_ids:0
4925+#: field:account.statement.profile,rule_ids:0
4926+msgid "Related statement profiles"
4927+msgstr ""
4928+
4929+#. module: account_statement_base_completion
4930+#: code:addons/account_statement_base_completion/statement.py:158
4931+#: code:addons/account_statement_base_completion/statement.py:178
4932+#, python-format
4933+msgid "System error"
4934+msgstr ""
4935+
4936+#. module: account_statement_base_completion
4937+#: field:account.bank.statement.line,already_completed:0
4938+msgid "Auto-Completed"
4939+msgstr ""
4940+
4941+#. module: account_statement_base_completion
4942+#: code:addons/account_statement_base_completion/statement.py:448
4943+#: code:addons/account_statement_base_completion/statement.py:466
4944+#, python-format
4945+msgid "ORM bypass error"
4946+msgstr ""
4947+
4948+#. module: account_statement_base_completion
4949+#: field:account.statement.completion.rule,sequence:0
4950+msgid "Sequence"
4951+msgstr ""
4952+
4953+#. module: account_statement_base_completion
4954+#: code:addons/account_statement_base_completion/statement.py:280
4955+#, python-format
4956+msgid ""
4957+"Line named \"%s\" (Ref:%s) was matched by more than one partner while "
4958+"looking on partner label: %s"
4959+msgstr ""
4960+
4961+#. module: account_statement_base_completion
4962+#: help:account.statement.completion.rule,sequence:0
4963+msgid "Lower means parsed first."
4964+msgstr ""
4965+
4966+#. module: account_statement_base_completion
4967+#: field:res.partner,bank_statement_label:0
4968+msgid "Bank Statement Label"
4969+msgstr ""
4970+
4971+#. module: account_statement_base_completion
4972+#: help:account.bank.statement.line,already_completed:0
4973+msgid ""
4974+"When this checkbox is ticked, the auto-completion process/button will ignore "
4975+"this line."
4976+msgstr ""
4977+
4978+#. module: account_statement_base_completion
4979+#: help:res.partner,bank_statement_label:0
4980+msgid ""
4981+"Enter the various label found on your bank statement separated by a ; If "
4982+" one of this label is include in the bank statement line, the "
4983+"partner will be automatically filled (as long as you use "
4984+"this method/rules in your statement profile)."
4985+msgstr ""
4986+
4987+#. module: account_statement_base_completion
4988+#: model:ir.model,name:account_statement_base_completion.model_res_partner
4989+msgid "Partner"
4990+msgstr ""
4991+
4992+#. module: account_statement_base_completion
4993+#: view:account.bank.statement:0
4994+msgid "Completion Logs"
4995+msgstr ""
4996
4997=== added file 'account_statement_base_completion/partner.py'
4998--- account_statement_base_completion/partner.py 1970-01-01 00:00:00 +0000
4999+++ account_statement_base_completion/partner.py 2014-04-03 07:40:14 +0000
5000@@ -0,0 +1,38 @@
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches

to status/vote changes: