Merge lp:~camptocamp/banking-addons/6.1-account_easy_reconcile-history into lp:banking-addons/bank-statement-reconcile-61

Proposed by Guewen Baconnier @ Camptocamp
Status: Merged
Merge reported by: Joël Grand-Guillaume @ camptocamp
Merged at revision: not available
Proposed branch: lp:~camptocamp/banking-addons/6.1-account_easy_reconcile-history
Merge into: lp:banking-addons/bank-statement-reconcile-61
Diff against target: 784 lines (+523/-96)
8 files modified
account_easy_reconcile/__init__.py (+1/-0)
account_easy_reconcile/__openerp__.py (+6/-2)
account_easy_reconcile/easy_reconcile.py (+73/-26)
account_easy_reconcile/easy_reconcile.xml (+29/-3)
account_easy_reconcile/easy_reconcile_history.py (+146/-0)
account_easy_reconcile/easy_reconcile_history_view.xml (+98/-0)
account_easy_reconcile/i18n/fr.po (+168/-65)
account_easy_reconcile/security/ir.model.access.csv (+2/-0)
To merge this branch: bzr merge lp:~camptocamp/banking-addons/6.1-account_easy_reconcile-history
Reviewer Review Type Date Requested Status
Alexandre Fayolle - camptocamp code review, no test Approve
Joël Grand-Guillaume @ camptocamp Approve
Review via email: mp+140844@code.launchpad.net

Commit message

[ADD] account_easy_reconcile: add an history to keep the track of the move lines reconciled

Description of the change

Hi,

This is an improvement of the module account_easy_reconcile.
It adds an history to keep the track of the reconciled move lines on each reconciliation run.

To post a comment you must log in.
Revision history for this message
Joël Grand-Guillaume @ camptocamp (jgrandguillaume-c2c) wrote :

Hi Guewen,

Thank for this great improvements ! Everything looks good to me here. Just one comment, it'll be great to have a little description of this new feature in the __openerp__.py

Otherwise, this is perfect.

Regards,

review: Approve
85. By Guewen Baconnier @ Camptocamp <email address hidden>

[IMP] add a line about the history in the manifest

Revision history for this message
Guewen Baconnier @ Camptocamp (gbaconnier-c2c) wrote :

Fixed.
Thanks for the review

Revision history for this message
Alexandre Fayolle - camptocamp (alexandre-fayolle-c2c) wrote :

l.268 + move_line_ids.extend : standard idiom nowadays is to use += rather than list.extends. Same thing a few lines later.

LGTM

review: Approve (code review, no test)
86. By Guewen Baconnier @ Camptocamp <email address hidden>

[FIX] replace list.extend by the more standard idiom +=

Revision history for this message
Guewen Baconnier @ Camptocamp (gbaconnier-c2c) wrote :

Fixed as well

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'account_easy_reconcile/__init__.py'
2--- account_easy_reconcile/__init__.py 2012-06-13 14:41:36 +0000
3+++ account_easy_reconcile/__init__.py 2012-12-20 10:19:19 +0000
4@@ -22,3 +22,4 @@
5 import easy_reconcile
6 import base_reconciliation
7 import simple_reconciliation
8+import easy_reconcile_history
9
10=== modified file 'account_easy_reconcile/__openerp__.py'
11--- account_easy_reconcile/__openerp__.py 2012-11-28 14:12:02 +0000
12+++ account_easy_reconcile/__openerp__.py 2012-12-20 10:19:19 +0000
13@@ -33,7 +33,8 @@
14 - this module is also a base to create others reconciliation methods
15 which can plug in the profiles
16 - a profile a reconciliation can be run manually or by a cron
17- - monitoring of reconcilation runs with a few logs
18+ - monitoring of reconciliation runs with an history which keep track
19+ of the reconciled entries
20
21 2 simple reconciliation methods are integrated in this module, the simple
22 reconciliations works on 2 lines (1 debit / 1 credit) and do not allows
23@@ -48,7 +49,10 @@
24 "category" : "Finance",
25 "init_xml" : [],
26 "demo_xml" : [],
27- "update_xml" : ["easy_reconcile.xml"],
28+ "update_xml" : [
29+ "easy_reconcile.xml",
30+ "easy_reconcile_history_view.xml",
31+ ],
32 'license': 'AGPL-3',
33 "auto_install": False,
34 "installable": True,
35
36=== modified file 'account_easy_reconcile/easy_reconcile.py'
37--- account_easy_reconcile/easy_reconcile.py 2012-11-01 16:14:03 +0000
38+++ account_easy_reconcile/easy_reconcile.py 2012-12-20 10:19:19 +0000
39@@ -137,22 +137,39 @@
40 context=context))
41 return res
42
43+ def _last_history(self, cr, uid, ids, name, args, context=None):
44+ result = {}
45+ for history in self.browse(cr, uid, ids, context=context):
46+ # history is sorted by date desc
47+ result[history.id] = history.history_ids[0].id
48+ return result
49+
50 _columns = {
51 'name': fields.char('Name', size=64, required=True),
52 'account': fields.many2one('account.account', 'Account', required=True),
53 'reconcile_method': fields.one2many('account.easy.reconcile.method', 'task_id', 'Method'),
54 'scheduler': fields.many2one('ir.cron', 'scheduler', readonly=True),
55- 'rec_log': fields.text('log', readonly=True),
56 'unreconciled_count': fields.function(_get_total_unrec,
57- type='integer', string='Fully Unreconciled Entries'),
58+ type='integer', string='Unreconciled Entries'),
59 'reconciled_partial_count': fields.function(_get_partial_rec,
60 type='integer', string='Partially Reconciled Entries'),
61+ 'history_ids': fields.one2many(
62+ 'easy.reconcile.history',
63+ 'easy_reconcile_id',
64+ string='History'),
65+ 'last_history':
66+ fields.function(
67+ _last_history,
68+ string='Last History',
69+ type='many2one',
70+ relation='easy.reconcile.history',
71+ readonly=True),
72 }
73
74 def copy_data(self, cr, uid, id, default=None, context=None):
75 if default is None:
76 default = {}
77- default = dict(default, rec_log=False, scheduler=False)
78+ default = dict(default, scheduler=False)
79 return super(account_easy_reconcile, self).copy_data(
80 cr, uid, id, default=default, context=context)
81
82@@ -168,39 +185,69 @@
83 'filter': rec_method.filter}
84
85 def run_reconcile(self, cr, uid, ids, context=None):
86+ def find_reconcile_ids(fieldname, move_line_ids):
87+ if not move_line_ids:
88+ return []
89+ sql = ("SELECT DISTINCT " + fieldname +
90+ " FROM account_move_line "
91+ " WHERE id in %s "
92+ " AND " + fieldname + " IS NOT NULL")
93+ cr.execute(sql, (tuple(move_line_ids),))
94+ res = cr.fetchall()
95+ return [row[0] for row in res]
96+
97 if context is None:
98 context = {}
99- for rec_id in ids:
100- rec = self.browse(cr, uid, rec_id, context=context)
101- total_rec = 0
102- total_partial_rec = 0
103- details = []
104- count = 0
105+ for rec in self.browse(cr, uid, ids, context=context):
106+ all_ml_rec_ids = []
107+ all_ml_partial_ids = []
108+
109 for method in rec.reconcile_method:
110- count += 1
111-
112 rec_model = self.pool.get(method.name)
113 auto_rec_id = rec_model.create(
114 cr, uid,
115 self._prepare_run_transient(cr, uid, method, context=context),
116 context=context)
117
118- rec_ids, partial_ids = rec_model.automatic_reconcile(
119+ ml_rec_ids, ml_partial_ids = rec_model.automatic_reconcile(
120 cr, uid, auto_rec_id, context=context)
121
122- details.append(_('method %d : full: %d lines, partial: %d lines') % \
123- (count, len(rec_ids), len(partial_ids)))
124-
125- total_rec += len(rec_ids)
126- total_partial_rec += len(partial_ids)
127-
128- log = self.read(cr, uid, rec_id, ['rec_log'], context=context)['rec_log']
129- log_lines = log and log.splitlines() or []
130- log_lines[0:0] = [_("%s : %d lines have been fully reconciled" \
131- " and %d lines have been partially reconciled (%s)") % \
132- (time.strftime(DEFAULT_SERVER_DATETIME_FORMAT), total_rec,
133- total_partial_rec, ' | '.join(details))]
134- log = "\n".join(log_lines)
135- self.write(cr, uid, rec_id, {'rec_log': log}, context=context)
136+ all_ml_rec_ids += ml_rec_ids
137+ all_ml_partial_ids += ml_partial_ids
138+
139+ reconcile_ids = find_reconcile_ids(
140+ 'reconcile_id', all_ml_rec_ids)
141+ partial_ids = find_reconcile_ids(
142+ 'reconcile_partial_id', all_ml_partial_ids)
143+
144+ self.pool.get('easy.reconcile.history').create(
145+ cr,
146+ uid,
147+ {'easy_reconcile_id': rec.id,
148+ 'date': fields.datetime.now(),
149+ 'reconcile_ids': [(4, rid) for rid in reconcile_ids],
150+ 'reconcile_partial_ids': [(4, rid) for rid in partial_ids]},
151+ context=context)
152 return True
153
154+ def last_history_reconcile(self, cr, uid, rec_id, context=None):
155+ """ Get the last history record for this reconciliation profile
156+ and return the action which opens move lines reconciled
157+ """
158+ if isinstance(rec_id, (tuple, list)):
159+ assert len(rec_id) == 1, \
160+ "Only 1 id expected"
161+ rec_id = rec_id[0]
162+ rec = self.browse(cr, uid, rec_id, context=context)
163+ return rec.last_history.open_reconcile()
164+
165+ def last_history_partial(self, cr, uid, rec_id, context=None):
166+ """ Get the last history record for this reconciliation profile
167+ and return the action which opens move lines reconciled
168+ """
169+ if isinstance(rec_id, (tuple, list)):
170+ assert len(rec_id) == 1, \
171+ "Only 1 id expected"
172+ rec_id = rec_id[0]
173+ rec = self.browse(cr, uid, rec_id, context=context)
174+ return rec.last_history.open_partial()
175
176=== modified file 'account_easy_reconcile/easy_reconcile.xml'
177--- account_easy_reconcile/easy_reconcile.xml 2012-06-19 06:05:25 +0000
178+++ account_easy_reconcile/easy_reconcile.xml 2012-12-20 10:19:19 +0000
179@@ -20,6 +20,28 @@
180 <notebook colspan="4">
181 <page name="methods" string="Configuration">
182 <field name="reconcile_method" colspan = "4" nolabel="1"/>
183+ <button icon="gtk-ok" name="run_reconcile" colspan="4"
184+ string="Start Auto Reconcilation" type="object"/>
185+ <button icon="STOCK_JUMP_TO" name="last_history_reconcile" colspan="2"
186+ string="Display items reconciled on the last run" type="object"/>
187+ <button icon="STOCK_JUMP_TO" name="last_history_partial" colspan="2"
188+ string="Display items partially reconciled on the last run"
189+ type="object"/>
190+ </page>
191+ <page name="history" string="History">
192+ <field name="history_ids" nolabel="1">
193+ <tree string="Automatic Easy Reconcile History">
194+ <field name="date"/>
195+ <!-- display the count of lines -->
196+ <field name="reconcile_line_ids"/>
197+ <button icon="STOCK_JUMP_TO" name="open_reconcile"
198+ string="Go to reconciled items" type="object"/>
199+ <!-- display the count of lines -->
200+ <field name="partial_line_ids"/>
201+ <button icon="STOCK_JUMP_TO" name="open_partial"
202+ string="Go to partially reconciled items" type="object"/>
203+ </tree>
204+ </field>
205 </page>
206 <page name="information" string="Information">
207 <separator colspan="4" string="Simple. Amount and Name"/>
208@@ -32,9 +54,6 @@
209
210 </page>
211 </notebook>
212- <button icon="gtk-ok" name="run_reconcile" colspan = "4" string="Start Auto Reconcilation" type="object"/>
213- <separator colspan="4" string="Log" />
214- <field name="rec_log" colspan = "4" nolabel="1"/>
215 </form>
216 </field>
217 </record>
218@@ -51,6 +70,13 @@
219 <field name="scheduler"/>
220 <field name="unreconciled_count"/>
221 <field name="reconciled_partial_count"/>
222+ <button icon="gtk-ok" name="run_reconcile" colspan="4"
223+ string="Start Auto Reconcilation" type="object"/>
224+ <button icon="STOCK_JUMP_TO" name="last_history_reconcile" colspan="2"
225+ string="Display items reconciled on the last run" type="object"/>
226+ <button icon="STOCK_JUMP_TO" name="last_history_partial" colspan="2"
227+ string="Display items partially reconciled on the last run"
228+ type="object"/>
229 </tree>
230 </field>
231 </record>
232
233=== added file 'account_easy_reconcile/easy_reconcile_history.py'
234--- account_easy_reconcile/easy_reconcile_history.py 1970-01-01 00:00:00 +0000
235+++ account_easy_reconcile/easy_reconcile_history.py 2012-12-20 10:19:19 +0000
236@@ -0,0 +1,146 @@
237+# -*- coding: utf-8 -*-
238+##############################################################################
239+#
240+# Author: Guewen Baconnier
241+# Copyright 2012 Camptocamp SA
242+#
243+# This program is free software: you can redistribute it and/or modify
244+# it under the terms of the GNU Affero General Public License as
245+# published by the Free Software Foundation, either version 3 of the
246+# License, or (at your option) any later version.
247+#
248+# This program is distributed in the hope that it will be useful,
249+# but WITHOUT ANY WARRANTY; without even the implied warranty of
250+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
251+# GNU Affero General Public License for more details.
252+#
253+# You should have received a copy of the GNU Affero General Public License
254+# along with this program. If not, see <http://www.gnu.org/licenses/>.
255+#
256+##############################################################################
257+
258+from openerp.osv import orm, fields
259+from openerp.tools.translate import _
260+
261+
262+class easy_reconcile_history(orm.Model):
263+ """ Store an history of the runs per profile
264+ Each history stores the list of reconciliations done"""
265+
266+ _name = 'easy.reconcile.history'
267+ _rec_name = 'easy_reconcile_id'
268+ _order = 'date DESC'
269+
270+ def _reconcile_line_ids(self, cr, uid, ids, name, args, context=None):
271+ result = {}
272+
273+ for history in self.browse(cr, uid, ids, context=context):
274+ result[history.id] = {}
275+
276+ move_line_ids = []
277+ for reconcile in history.reconcile_ids:
278+ move_line_ids += [line.id
279+ for line
280+ in reconcile.line_id]
281+ result[history.id]['reconcile_line_ids'] = move_line_ids
282+
283+ move_line_ids = []
284+ for reconcile in history.reconcile_partial_ids:
285+ move_line_ids += [line.id
286+ for line
287+ in reconcile.line_partial_ids]
288+ result[history.id]['partial_line_ids'] = move_line_ids
289+
290+ return result
291+
292+ _columns = {
293+ 'easy_reconcile_id': fields.many2one(
294+ 'account.easy.reconcile', 'Reconcile Profile', readonly=True),
295+ 'date': fields.datetime('Run date', readonly=True),
296+ 'reconcile_ids': fields.many2many(
297+ 'account.move.reconcile',
298+ 'account_move_reconcile_history_rel',
299+ string='Reconciliations', readonly=True),
300+ 'reconcile_partial_ids': fields.many2many(
301+ 'account.move.reconcile',
302+ 'account_move_reconcile_history_partial_rel',
303+ string='Partial Reconciliations', readonly=True),
304+ 'reconcile_line_ids':
305+ fields.function(
306+ _reconcile_line_ids,
307+ string='Reconciled Items',
308+ type='many2many',
309+ relation='account.move.line',
310+ readonly=True,
311+ multi='lines'),
312+ 'partial_line_ids':
313+ fields.function(
314+ _reconcile_line_ids,
315+ string='Partially Reconciled Items',
316+ type='many2many',
317+ relation='account.move.line',
318+ readonly=True,
319+ multi='lines'),
320+ }
321+
322+ def _open_move_lines(self, cr, uid, history_id, rec_type='full', context=None):
323+ """ For an history record, open the view of move line with
324+ the reconciled or partially reconciled move lines
325+
326+ :param history_id: id of the history
327+ :param rec_type: 'full' or 'partial'
328+ :return: action to open the move lines
329+ """
330+ assert rec_type in ('full', 'partial'), \
331+ "rec_type must be 'full' or 'partial'"
332+
333+ history = self.browse(cr, uid, history_id, context=context)
334+
335+ if rec_type == 'full':
336+ field = 'reconcile_line_ids'
337+ name = _('Reconciliations')
338+ else:
339+ field = 'partial_line_ids'
340+ name = _('Partial Reconciliations')
341+
342+ move_line_ids = [line.id for line in getattr(history, field)]
343+
344+ return {
345+ 'name': name,
346+ 'view_mode': 'tree,form',
347+ 'view_id': False,
348+ 'view_type': 'form',
349+ 'res_model': 'account.move.line',
350+ 'type': 'ir.actions.act_window',
351+ 'nodestroy': True,
352+ 'target': 'current',
353+ 'domain': unicode([('id', 'in', move_line_ids)]),
354+ }
355+
356+ def open_reconcile(self, cr, uid, history_ids, context=None):
357+ """ For an history record, open the view of move line
358+ with the reconciled move lines
359+
360+ :param history_ids: id of the record as int or long
361+ Accept a list with 1 id too to be
362+ used from the client.
363+ """
364+ if isinstance(history_ids, (tuple, list)):
365+ assert len(history_ids) == 1, "only 1 ID is accepted"
366+ history_ids = history_ids[0]
367+ return self._open_move_lines(
368+ cr, uid, history_ids, rec_type='full', context=None)
369+
370+ def open_partial(self, cr, uid, history_ids, context=None):
371+ """ For an history record, open the view of move line
372+ with the partially reconciled move lines
373+
374+ :param history_ids: id of the record as int or long
375+ Accept a list with 1 id too to be
376+ used from the client.
377+ """
378+ if isinstance(history_ids, (tuple, list)):
379+ assert len(history_ids) == 1, "only 1 ID is accepted"
380+ history_ids = history_ids[0]
381+ return self._open_move_lines(
382+ cr, uid, history_ids, rec_type='partial', context=None)
383
384=== added file 'account_easy_reconcile/easy_reconcile_history_view.xml'
385--- account_easy_reconcile/easy_reconcile_history_view.xml 1970-01-01 00:00:00 +0000
386+++ account_easy_reconcile/easy_reconcile_history_view.xml 2012-12-20 10:19:19 +0000
387@@ -0,0 +1,98 @@
388+<?xml version="1.0" encoding="utf-8"?>
389+<openerp>
390+ <data noupdate="0">
391+
392+ <record id="view_easy_reconcile_history_search" model="ir.ui.view">
393+ <field name="name">easy.reconcile.history.search</field>
394+ <field name="model">easy.reconcile.history</field>
395+ <field name="type">search</field>
396+ <field name="arch" type="xml">
397+ <search string="Automatic Easy Reconcile History">
398+ <filter icon="terp-go-today" string="Today"
399+ domain="[('date','&lt;', time.strftime('%%Y-%%m-%%d 23:59:59')), ('date','&gt;=', time.strftime('%%Y-%%m-%%d 00:00:00'))]"
400+ help="Todays' Reconcilations" />
401+ <filter icon="terp-go-week" string="7 Days"
402+ help="Reconciliations of last 7 days"
403+ 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'))]"
404+ />
405+
406+ <separator orientation="vertical"/>
407+ <field name="easy_reconcile_id"/>
408+ <field name="date"/>
409+
410+ <newline/>
411+ <group expand="0" string="Group By...">
412+ <filter string="Reconciliation Profile"
413+ icon="terp-stock_effects-object-colorize"
414+ domain="[]" context="{'group_by': 'easy_reconcile_id'}"/>
415+ <filter string="Date" icon="terp-go-month" domain="[]"
416+ context="{'group_by': 'date'}"/>
417+ </group>
418+ </search>
419+ </field>
420+ </record>
421+
422+ <record id="easy_reconcile_history_form" model="ir.ui.view">
423+ <field name="name">easy.reconcile.history.form</field>
424+ <field name="priority">16</field>
425+ <field name="model">easy.reconcile.history</field>
426+ <field name="type">form</field>
427+ <field name="arch" type="xml">
428+ <form string="Automatic Easy Reconcile History">
429+ <field name="easy_reconcile_id"/>
430+ <field name="date"/>
431+ <group colspan="2" col="2">
432+ <separator colspan="2" string="Reconcilations"/>
433+ <field name="reconcile_ids" nolabel="1"/>
434+ </group>
435+ <group colspan="2" col="2">
436+ <separator colspan="2" string="Partial Reconcilations"/>
437+ <field name="reconcile_partial_ids" nolabel="1"/>
438+ </group>
439+ <group col="2" colspan="4">
440+ <button icon="STOCK_JUMP_TO" name="open_reconcile" string="Go to reconciled items" type="object"/>
441+ <button icon="STOCK_JUMP_TO" name="open_partial" string="Go to partially reconciled items" type="object"/>
442+ </group>
443+ </form>
444+ </field>
445+ </record>
446+
447+ <record id="easy_reconcile_history_tree" model="ir.ui.view">
448+ <field name="name">easy.reconcile.history.tree</field>
449+ <field name="priority">16</field>
450+ <field name="model">easy.reconcile.history</field>
451+ <field name="type">tree</field>
452+ <field name="arch" type="xml">
453+ <tree string="Automatic Easy Reconcile History">
454+ <field name="easy_reconcile_id"/>
455+ <field name="date"/>
456+ <!-- display the count of lines -->
457+ <field name="reconcile_line_ids"/>
458+ <button icon="STOCK_JUMP_TO" name="open_reconcile"
459+ string="Go to reconciled items" type="object"/>
460+ <!-- display the count of lines -->
461+ <field name="partial_line_ids"/>
462+ <button icon="STOCK_JUMP_TO" name="open_partial"
463+ string="Go to partially reconciled items" type="object"/>
464+ </tree>
465+ </field>
466+ </record>
467+
468+ <record id="action_easy_reconcile_history" model="ir.actions.act_window">
469+ <field name="name">Easy Automatic Reconcile History</field>
470+ <field name="type">ir.actions.act_window</field>
471+ <field name="res_model">easy.reconcile.history</field>
472+ <field name="view_type">form</field>
473+ <field name="view_mode">tree,form</field>
474+ </record>
475+
476+ <act_window
477+ context="{'search_default_easy_reconcile_id': [active_id], 'default_easy_reconcile_id': active_id}"
478+ id="act_easy_reconcile_to_history"
479+ name="History Details"
480+ groups=""
481+ res_model="easy.reconcile.history"
482+ src_model="account.easy.reconcile"/>
483+
484+ </data>
485+</openerp>
486
487=== modified file 'account_easy_reconcile/i18n/fr.po'
488--- account_easy_reconcile/i18n/fr.po 2012-11-19 10:30:03 +0000
489+++ account_easy_reconcile/i18n/fr.po 2012-12-20 10:19:19 +0000
490@@ -1,69 +1,115 @@
491 # Translation of OpenERP Server.
492 # This file contains the translation of the following modules:
493-# * account_easy_reconcile
494+# * account_easy_reconcile
495 #
496 msgid ""
497 msgstr ""
498 "Project-Id-Version: OpenERP Server 6.1\n"
499 "Report-Msgid-Bugs-To: \n"
500-"POT-Creation-Date: 2012-11-07 12:59+0000\n"
501+"POT-Creation-Date: 2012-12-20 08:54+0000\n"
502 "PO-Revision-Date: 2012-11-07 12:59+0000\n"
503 "Last-Translator: <>\n"
504 "Language-Team: \n"
505+"Language: \n"
506 "MIME-Version: 1.0\n"
507 "Content-Type: text/plain; charset=UTF-8\n"
508 "Content-Transfer-Encoding: \n"
509 "Plural-Forms: \n"
510
511 #. module: account_easy_reconcile
512+#: code:addons/account_easy_reconcile/easy_reconcile_history.py:103
513+msgid "Reconciliations"
514+msgstr "Lettrages"
515+
516+#. module: account_easy_reconcile
517 #: view:account.easy.reconcile:0
518 msgid "Information"
519 msgstr "Information"
520
521 #. module: account_easy_reconcile
522-#: view:account.easy.reconcile.method:0
523-msgid "Automatic Easy Reconcile Method"
524-msgstr "Méthode de léttrage automatisé"
525-
526-#. module: account_easy_reconcile
527-#: view:account.easy.reconcile:0
528-msgid "Match one debit line vs one credit line. Do not allow partial reconcilation. The lines should have the same amount (with the write-off) and the same partner to be reconciled."
529-msgstr "Lettre un débit avec un crédit ayant le même montant et le même partenaire. Le lettrage ne peut être partiel (écriture d'ajustement en cas d'écart)."
530-
531-#. module: account_easy_reconcile
532-#: view:account.easy.reconcile:0
533-msgid "Log"
534-msgstr "Historique"
535-
536-#. module: account_easy_reconcile
537-#: view:account.easy.reconcile:0
538-msgid "Match one debit line vs one credit line. Do not allow partial reconcilation. The lines should have the same amount (with the write-off) and the same name to be reconciled."
539-msgstr "Lettre un débit avec un crédit ayant le même montant et la même description. Le lettrage ne peut être partiel (écriture d'ajustement en cas d'écart)."
540-
541-#. module: account_easy_reconcile
542-#: view:account.easy.reconcile:0
543-msgid "Automatic Easy Reconcile"
544-msgstr "Léttrage automatisé"
545-
546-#. module: account_easy_reconcile
547-#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile_method
548-msgid "reconcile method for account_easy_reconcile"
549-msgstr "Méthode de léttrage"
550-
551-#. module: account_easy_reconcile
552-#: view:account.easy.reconcile:0
553-msgid "Start Auto Reconcilation"
554-msgstr "Lancer le léttrage automatisé"
555+#: view:account.easy.reconcile:0 view:easy.reconcile.history:0
556+msgid "Automatic Easy Reconcile History"
557+msgstr "Historique des lettrages automatisés"
558+
559+#. module: account_easy_reconcile
560+#: view:account.easy.reconcile:0 view:easy.reconcile.history:0
561+msgid "Go to partially reconciled items"
562+msgstr "Voir les entrées partiellement lettrées"
563+
564+#. module: account_easy_reconcile
565+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_history
566+msgid "easy.reconcile.history"
567+msgstr "easy.reconcile.history"
568
569 #. module: account_easy_reconcile
570 #: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_name
571 msgid "easy.reconcile.simple.name"
572-msgstr "Léttrage automatisé.simple.Description"
573+msgstr "easy.reconcile.simple.name"
574
575 #. module: account_easy_reconcile
576 #: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_options
577 msgid "easy.reconcile.options"
578-msgstr "Léttrage automatisé.options"
579+msgstr "lettrage automatisé.options"
580+
581+#. module: account_easy_reconcile
582+#: view:easy.reconcile.history:0
583+msgid "Group By..."
584+msgstr "Grouper par..."
585+
586+#. module: account_easy_reconcile
587+#: view:account.easy.reconcile:0
588+msgid "Task Information"
589+msgstr "Information sur la tâche"
590+
591+#. module: account_easy_reconcile
592+#: view:account.easy.reconcile:0
593+msgid "Reconcile Method"
594+msgstr "Méthode de lettrage"
595+
596+#. module: account_easy_reconcile
597+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_base
598+msgid "easy.reconcile.base"
599+msgstr "easy.reconcile.base"
600+
601+#. module: account_easy_reconcile
602+#: view:easy.reconcile.history:0
603+msgid "7 Days"
604+msgstr "7 jours"
605+
606+#. module: account_easy_reconcile
607+#: model:ir.actions.act_window,name:account_easy_reconcile.action_easy_reconcile_history
608+msgid "Easy Automatic Reconcile History"
609+msgstr "Lettrage automatisé"
610+
611+#. module: account_easy_reconcile
612+#: model:ir.actions.act_window,name:account_easy_reconcile.act_easy_reconcile_to_history
613+msgid "History Details"
614+msgstr "Détails de l'historique"
615+
616+#. module: account_easy_reconcile
617+#: view:account.easy.reconcile:0
618+msgid ""
619+"Match one debit line vs one credit line. Do not allow partial reconcilation. "
620+"The lines should have the same amount (with the write-off) and the same name "
621+"to be reconciled."
622+msgstr ""
623+"Lettre un débit avec un crédit ayant le même montant et la même description. "
624+"Le lettrage ne peut être partiel (écriture d'ajustement en cas d'écart)."
625+
626+#. module: account_easy_reconcile
627+#: view:account.easy.reconcile:0
628+msgid "Display items reconciled on the last run"
629+msgstr "Voir les entrées lettrées au dernier lettrage"
630+
631+#. module: account_easy_reconcile
632+#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile_method
633+msgid "reconcile method for account_easy_reconcile"
634+msgstr "Méthode de lettrage"
635+
636+#. module: account_easy_reconcile
637+#: view:easy.reconcile.history:0
638+msgid "Todays' Reconcilations"
639+msgstr "Lettrages du jour"
640
641 #. module: account_easy_reconcile
642 #: view:account.easy.reconcile:0
643@@ -71,30 +117,20 @@
644 msgstr "Simple. Montant et description"
645
646 #. module: account_easy_reconcile
647-#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple
648-msgid "easy.reconcile.simple"
649-msgstr "Léttrage automatisé.simple"
650-
651-#. module: account_easy_reconcile
652 #: model:ir.actions.act_window,name:account_easy_reconcile.action_account_easy_reconcile
653 #: model:ir.ui.menu,name:account_easy_reconcile.menu_easy_reconcile
654 msgid "Easy Automatic Reconcile"
655-msgstr "Léttrage automatisé"
656-
657-#. module: account_easy_reconcile
658-#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_reference
659-msgid "easy.reconcile.simple.reference"
660-msgstr "Léttrage automatisé.simple.réference"
661-
662-#. module: account_easy_reconcile
663-#: view:account.easy.reconcile:0
664-msgid "Reconcile Method"
665-msgstr "Méthode de léttrage"
666-
667-#. module: account_easy_reconcile
668-#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_base
669-msgid "easy.reconcile.base"
670-msgstr "Léttrage automatisé.base"
671+msgstr "Lettrage automatisé"
672+
673+#. module: account_easy_reconcile
674+#: view:easy.reconcile.history:0
675+msgid "Today"
676+msgstr "Aujourd'hui"
677+
678+#. module: account_easy_reconcile
679+#: view:easy.reconcile.history:0
680+msgid "Date"
681+msgstr "Date"
682
683 #. module: account_easy_reconcile
684 #: view:account.easy.reconcile:0
685@@ -104,15 +140,82 @@
686 #. module: account_easy_reconcile
687 #: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_partner
688 msgid "easy.reconcile.simple.partner"
689-msgstr "Léttrage automatisé.simple.partenaire"
690-
691-#. module: account_easy_reconcile
692-#: view:account.easy.reconcile:0
693-msgid "Task Information"
694-msgstr "Information sur la tâche"
695+msgstr "easy.reconcile.simple.partner"
696+
697+#. module: account_easy_reconcile
698+#: view:account.easy.reconcile:0
699+msgid "Automatic Easy Reconcile"
700+msgstr "Lettrage automatisé"
701+
702+#. module: account_easy_reconcile
703+#: view:account.easy.reconcile:0
704+msgid "Start Auto Reconcilation"
705+msgstr "Lancer le lettrage automatisé"
706+
707+#. module: account_easy_reconcile
708+#: view:easy.reconcile.history:0
709+msgid "Reconciliation Profile"
710+msgstr "Profil de réconciliation"
711+
712+#. module: account_easy_reconcile
713+#: view:account.easy.reconcile:0
714+msgid "History"
715+msgstr "Historique"
716+
717+#. module: account_easy_reconcile
718+#: view:account.easy.reconcile:0 view:easy.reconcile.history:0
719+msgid "Go to reconciled items"
720+msgstr "Voir les entrées lettrées"
721+
722+#. module: account_easy_reconcile
723+#: view:account.easy.reconcile.method:0
724+msgid "Automatic Easy Reconcile Method"
725+msgstr "Méthode de lettrage automatisé"
726+
727+#. module: account_easy_reconcile
728+#: view:account.easy.reconcile:0
729+msgid ""
730+"Match one debit line vs one credit line. Do not allow partial reconcilation. "
731+"The lines should have the same amount (with the write-off) and the same "
732+"partner to be reconciled."
733+msgstr ""
734+"Lettre un débit avec un crédit ayant le même montant et le même partenaire. "
735+"Le lettrage ne peut être partiel (écriture d'ajustement en cas d'écart)."
736+
737+#. module: account_easy_reconcile
738+#: view:account.easy.reconcile:0
739+msgid "Display items partially reconciled on the last run"
740+msgstr "Afficher les entrées partiellement lettrées au dernier lettrage"
741+
742+#. module: account_easy_reconcile
743+#: view:easy.reconcile.history:0
744+msgid "Partial Reconcilations"
745+msgstr "Lettrages partiels"
746+
747+#. module: account_easy_reconcile
748+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple
749+msgid "easy.reconcile.simple"
750+msgstr "easy.reconcile.simple"
751+
752+#. module: account_easy_reconcile
753+#: view:easy.reconcile.history:0
754+msgid "Reconciliations of last 7 days"
755+msgstr "Lettrages des 7 derniers jours"
756+
757+#. module: account_easy_reconcile
758+#: code:addons/account_easy_reconcile/easy_reconcile_history.py:106
759+msgid "Partial Reconciliations"
760+msgstr "Lettrages partiels"
761+
762+#. module: account_easy_reconcile
763+#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_reference
764+msgid "easy.reconcile.simple.reference"
765+msgstr "easy.reconcile.simple.reference"
766
767 #. module: account_easy_reconcile
768 #: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile
769 msgid "account easy reconcile"
770-msgstr "Léttrage automatisé"
771+msgstr "Lettrage automatisé"
772
773+#~ msgid "Log"
774+#~ msgstr "Historique"
775
776=== modified file 'account_easy_reconcile/security/ir.model.access.csv'
777--- account_easy_reconcile/security/ir.model.access.csv 2012-11-28 14:12:02 +0000
778+++ account_easy_reconcile/security/ir.model.access.csv 2012-12-20 10:19:19 +0000
779@@ -11,3 +11,5 @@
780 access_easy_reconcile_simple_name_acc_mgr,easy.reconcile.simple.name,model_easy_reconcile_simple_name,account.group_account_user,1,0,0,0
781 access_easy_reconcile_simple_partner_acc_mgr,easy.reconcile.simple.partner,model_easy_reconcile_simple_partner,account.group_account_user,1,0,0,0
782 access_easy_reconcile_simple_reference_acc_mgr,easy.reconcile.simple.reference,model_easy_reconcile_simple_reference,account.group_account_user,1,0,0,0
783+access_easy_reconcile_history_acc_user,easy.reconcile.history,model_easy_reconcile_history,account.group_account_user,1,1,1,0
784+access_easy_reconcile_history_acc_mgr,easy.reconcile.history,model_easy_reconcile_history,account.group_account_manager,1,1,1,1

Subscribers

People subscribed via source and target branches