Merge lp:~camptocamp/banking-addons/6.1-account_easy_reconcile-history into lp:banking-addons/bank-statement-reconcile-61
- 6.1-account_easy_reconcile-history
- Merge into 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 |
Related bugs: |
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_
Description of the change
Hi,
This is an improvement of the module account_
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 : | # |
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_
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','<', time.strftime('%%Y-%%m-%%d 23:59:59')), ('date','>=', 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','<', time.strftime('%%Y-%%m-%%d 23:59:59')),('date','>=',(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 |
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,