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
=== modified file 'account_easy_reconcile/__init__.py'
--- account_easy_reconcile/__init__.py 2012-06-13 14:41:36 +0000
+++ account_easy_reconcile/__init__.py 2012-12-20 10:19:19 +0000
@@ -22,3 +22,4 @@
22import easy_reconcile22import easy_reconcile
23import base_reconciliation23import base_reconciliation
24import simple_reconciliation24import simple_reconciliation
25import easy_reconcile_history
2526
=== modified file 'account_easy_reconcile/__openerp__.py'
--- account_easy_reconcile/__openerp__.py 2012-11-28 14:12:02 +0000
+++ account_easy_reconcile/__openerp__.py 2012-12-20 10:19:19 +0000
@@ -33,7 +33,8 @@
33 - this module is also a base to create others reconciliation methods33 - this module is also a base to create others reconciliation methods
34 which can plug in the profiles34 which can plug in the profiles
35 - a profile a reconciliation can be run manually or by a cron35 - a profile a reconciliation can be run manually or by a cron
36 - monitoring of reconcilation runs with a few logs36 - monitoring of reconciliation runs with an history which keep track
37 of the reconciled entries
3738
382 simple reconciliation methods are integrated in this module, the simple392 simple reconciliation methods are integrated in this module, the simple
39reconciliations works on 2 lines (1 debit / 1 credit) and do not allows40reconciliations works on 2 lines (1 debit / 1 credit) and do not allows
@@ -48,7 +49,10 @@
48 "category" : "Finance",49 "category" : "Finance",
49 "init_xml" : [],50 "init_xml" : [],
50 "demo_xml" : [],51 "demo_xml" : [],
51 "update_xml" : ["easy_reconcile.xml"],52 "update_xml" : [
53 "easy_reconcile.xml",
54 "easy_reconcile_history_view.xml",
55 ],
52 'license': 'AGPL-3',56 'license': 'AGPL-3',
53 "auto_install": False,57 "auto_install": False,
54 "installable": True,58 "installable": True,
5559
=== modified file 'account_easy_reconcile/easy_reconcile.py'
--- account_easy_reconcile/easy_reconcile.py 2012-11-01 16:14:03 +0000
+++ account_easy_reconcile/easy_reconcile.py 2012-12-20 10:19:19 +0000
@@ -137,22 +137,39 @@
137 context=context))137 context=context))
138 return res138 return res
139139
140 def _last_history(self, cr, uid, ids, name, args, context=None):
141 result = {}
142 for history in self.browse(cr, uid, ids, context=context):
143 # history is sorted by date desc
144 result[history.id] = history.history_ids[0].id
145 return result
146
140 _columns = {147 _columns = {
141 'name': fields.char('Name', size=64, required=True),148 'name': fields.char('Name', size=64, required=True),
142 'account': fields.many2one('account.account', 'Account', required=True),149 'account': fields.many2one('account.account', 'Account', required=True),
143 'reconcile_method': fields.one2many('account.easy.reconcile.method', 'task_id', 'Method'),150 'reconcile_method': fields.one2many('account.easy.reconcile.method', 'task_id', 'Method'),
144 'scheduler': fields.many2one('ir.cron', 'scheduler', readonly=True),151 'scheduler': fields.many2one('ir.cron', 'scheduler', readonly=True),
145 'rec_log': fields.text('log', readonly=True),
146 'unreconciled_count': fields.function(_get_total_unrec,152 'unreconciled_count': fields.function(_get_total_unrec,
147 type='integer', string='Fully Unreconciled Entries'),153 type='integer', string='Unreconciled Entries'),
148 'reconciled_partial_count': fields.function(_get_partial_rec,154 'reconciled_partial_count': fields.function(_get_partial_rec,
149 type='integer', string='Partially Reconciled Entries'),155 type='integer', string='Partially Reconciled Entries'),
156 'history_ids': fields.one2many(
157 'easy.reconcile.history',
158 'easy_reconcile_id',
159 string='History'),
160 'last_history':
161 fields.function(
162 _last_history,
163 string='Last History',
164 type='many2one',
165 relation='easy.reconcile.history',
166 readonly=True),
150 }167 }
151168
152 def copy_data(self, cr, uid, id, default=None, context=None):169 def copy_data(self, cr, uid, id, default=None, context=None):
153 if default is None:170 if default is None:
154 default = {}171 default = {}
155 default = dict(default, rec_log=False, scheduler=False)172 default = dict(default, scheduler=False)
156 return super(account_easy_reconcile, self).copy_data(173 return super(account_easy_reconcile, self).copy_data(
157 cr, uid, id, default=default, context=context)174 cr, uid, id, default=default, context=context)
158175
@@ -168,39 +185,69 @@
168 'filter': rec_method.filter}185 'filter': rec_method.filter}
169186
170 def run_reconcile(self, cr, uid, ids, context=None):187 def run_reconcile(self, cr, uid, ids, context=None):
188 def find_reconcile_ids(fieldname, move_line_ids):
189 if not move_line_ids:
190 return []
191 sql = ("SELECT DISTINCT " + fieldname +
192 " FROM account_move_line "
193 " WHERE id in %s "
194 " AND " + fieldname + " IS NOT NULL")
195 cr.execute(sql, (tuple(move_line_ids),))
196 res = cr.fetchall()
197 return [row[0] for row in res]
198
171 if context is None:199 if context is None:
172 context = {}200 context = {}
173 for rec_id in ids:201 for rec in self.browse(cr, uid, ids, context=context):
174 rec = self.browse(cr, uid, rec_id, context=context)202 all_ml_rec_ids = []
175 total_rec = 0203 all_ml_partial_ids = []
176 total_partial_rec = 0204
177 details = []
178 count = 0
179 for method in rec.reconcile_method:205 for method in rec.reconcile_method:
180 count += 1
181
182 rec_model = self.pool.get(method.name)206 rec_model = self.pool.get(method.name)
183 auto_rec_id = rec_model.create(207 auto_rec_id = rec_model.create(
184 cr, uid,208 cr, uid,
185 self._prepare_run_transient(cr, uid, method, context=context),209 self._prepare_run_transient(cr, uid, method, context=context),
186 context=context)210 context=context)
187211
188 rec_ids, partial_ids = rec_model.automatic_reconcile(212 ml_rec_ids, ml_partial_ids = rec_model.automatic_reconcile(
189 cr, uid, auto_rec_id, context=context)213 cr, uid, auto_rec_id, context=context)
190214
191 details.append(_('method %d : full: %d lines, partial: %d lines') % \215 all_ml_rec_ids += ml_rec_ids
192 (count, len(rec_ids), len(partial_ids)))216 all_ml_partial_ids += ml_partial_ids
193217
194 total_rec += len(rec_ids)218 reconcile_ids = find_reconcile_ids(
195 total_partial_rec += len(partial_ids)219 'reconcile_id', all_ml_rec_ids)
196220 partial_ids = find_reconcile_ids(
197 log = self.read(cr, uid, rec_id, ['rec_log'], context=context)['rec_log']221 'reconcile_partial_id', all_ml_partial_ids)
198 log_lines = log and log.splitlines() or []222
199 log_lines[0:0] = [_("%s : %d lines have been fully reconciled" \223 self.pool.get('easy.reconcile.history').create(
200 " and %d lines have been partially reconciled (%s)") % \224 cr,
201 (time.strftime(DEFAULT_SERVER_DATETIME_FORMAT), total_rec,225 uid,
202 total_partial_rec, ' | '.join(details))]226 {'easy_reconcile_id': rec.id,
203 log = "\n".join(log_lines)227 'date': fields.datetime.now(),
204 self.write(cr, uid, rec_id, {'rec_log': log}, context=context)228 'reconcile_ids': [(4, rid) for rid in reconcile_ids],
229 'reconcile_partial_ids': [(4, rid) for rid in partial_ids]},
230 context=context)
205 return True231 return True
206232
233 def last_history_reconcile(self, cr, uid, rec_id, context=None):
234 """ Get the last history record for this reconciliation profile
235 and return the action which opens move lines reconciled
236 """
237 if isinstance(rec_id, (tuple, list)):
238 assert len(rec_id) == 1, \
239 "Only 1 id expected"
240 rec_id = rec_id[0]
241 rec = self.browse(cr, uid, rec_id, context=context)
242 return rec.last_history.open_reconcile()
243
244 def last_history_partial(self, cr, uid, rec_id, context=None):
245 """ Get the last history record for this reconciliation profile
246 and return the action which opens move lines reconciled
247 """
248 if isinstance(rec_id, (tuple, list)):
249 assert len(rec_id) == 1, \
250 "Only 1 id expected"
251 rec_id = rec_id[0]
252 rec = self.browse(cr, uid, rec_id, context=context)
253 return rec.last_history.open_partial()
207254
=== modified file 'account_easy_reconcile/easy_reconcile.xml'
--- account_easy_reconcile/easy_reconcile.xml 2012-06-19 06:05:25 +0000
+++ account_easy_reconcile/easy_reconcile.xml 2012-12-20 10:19:19 +0000
@@ -20,6 +20,28 @@
20 <notebook colspan="4">20 <notebook colspan="4">
21 <page name="methods" string="Configuration">21 <page name="methods" string="Configuration">
22 <field name="reconcile_method" colspan = "4" nolabel="1"/>22 <field name="reconcile_method" colspan = "4" nolabel="1"/>
23 <button icon="gtk-ok" name="run_reconcile" colspan="4"
24 string="Start Auto Reconcilation" type="object"/>
25 <button icon="STOCK_JUMP_TO" name="last_history_reconcile" colspan="2"
26 string="Display items reconciled on the last run" type="object"/>
27 <button icon="STOCK_JUMP_TO" name="last_history_partial" colspan="2"
28 string="Display items partially reconciled on the last run"
29 type="object"/>
30 </page>
31 <page name="history" string="History">
32 <field name="history_ids" nolabel="1">
33 <tree string="Automatic Easy Reconcile History">
34 <field name="date"/>
35 <!-- display the count of lines -->
36 <field name="reconcile_line_ids"/>
37 <button icon="STOCK_JUMP_TO" name="open_reconcile"
38 string="Go to reconciled items" type="object"/>
39 <!-- display the count of lines -->
40 <field name="partial_line_ids"/>
41 <button icon="STOCK_JUMP_TO" name="open_partial"
42 string="Go to partially reconciled items" type="object"/>
43 </tree>
44 </field>
23 </page>45 </page>
24 <page name="information" string="Information">46 <page name="information" string="Information">
25 <separator colspan="4" string="Simple. Amount and Name"/>47 <separator colspan="4" string="Simple. Amount and Name"/>
@@ -32,9 +54,6 @@
3254
33 </page>55 </page>
34 </notebook>56 </notebook>
35 <button icon="gtk-ok" name="run_reconcile" colspan = "4" string="Start Auto Reconcilation" type="object"/>
36 <separator colspan="4" string="Log" />
37 <field name="rec_log" colspan = "4" nolabel="1"/>
38 </form>57 </form>
39 </field>58 </field>
40 </record>59 </record>
@@ -51,6 +70,13 @@
51 <field name="scheduler"/>70 <field name="scheduler"/>
52 <field name="unreconciled_count"/>71 <field name="unreconciled_count"/>
53 <field name="reconciled_partial_count"/>72 <field name="reconciled_partial_count"/>
73 <button icon="gtk-ok" name="run_reconcile" colspan="4"
74 string="Start Auto Reconcilation" type="object"/>
75 <button icon="STOCK_JUMP_TO" name="last_history_reconcile" colspan="2"
76 string="Display items reconciled on the last run" type="object"/>
77 <button icon="STOCK_JUMP_TO" name="last_history_partial" colspan="2"
78 string="Display items partially reconciled on the last run"
79 type="object"/>
54 </tree>80 </tree>
55 </field>81 </field>
56 </record>82 </record>
5783
=== added file 'account_easy_reconcile/easy_reconcile_history.py'
--- account_easy_reconcile/easy_reconcile_history.py 1970-01-01 00:00:00 +0000
+++ account_easy_reconcile/easy_reconcile_history.py 2012-12-20 10:19:19 +0000
@@ -0,0 +1,146 @@
1# -*- coding: utf-8 -*-
2##############################################################################
3#
4# Author: Guewen Baconnier
5# Copyright 2012 Camptocamp SA
6#
7# This program is free software: you can redistribute it and/or modify
8# it under the terms of the GNU Affero General Public License as
9# published by the Free Software Foundation, either version 3 of the
10# License, or (at your option) any later version.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU Affero General Public License for more details.
16#
17# You should have received a copy of the GNU Affero General Public License
18# along with this program. If not, see <http://www.gnu.org/licenses/>.
19#
20##############################################################################
21
22from openerp.osv import orm, fields
23from openerp.tools.translate import _
24
25
26class easy_reconcile_history(orm.Model):
27 """ Store an history of the runs per profile
28 Each history stores the list of reconciliations done"""
29
30 _name = 'easy.reconcile.history'
31 _rec_name = 'easy_reconcile_id'
32 _order = 'date DESC'
33
34 def _reconcile_line_ids(self, cr, uid, ids, name, args, context=None):
35 result = {}
36
37 for history in self.browse(cr, uid, ids, context=context):
38 result[history.id] = {}
39
40 move_line_ids = []
41 for reconcile in history.reconcile_ids:
42 move_line_ids += [line.id
43 for line
44 in reconcile.line_id]
45 result[history.id]['reconcile_line_ids'] = move_line_ids
46
47 move_line_ids = []
48 for reconcile in history.reconcile_partial_ids:
49 move_line_ids += [line.id
50 for line
51 in reconcile.line_partial_ids]
52 result[history.id]['partial_line_ids'] = move_line_ids
53
54 return result
55
56 _columns = {
57 'easy_reconcile_id': fields.many2one(
58 'account.easy.reconcile', 'Reconcile Profile', readonly=True),
59 'date': fields.datetime('Run date', readonly=True),
60 'reconcile_ids': fields.many2many(
61 'account.move.reconcile',
62 'account_move_reconcile_history_rel',
63 string='Reconciliations', readonly=True),
64 'reconcile_partial_ids': fields.many2many(
65 'account.move.reconcile',
66 'account_move_reconcile_history_partial_rel',
67 string='Partial Reconciliations', readonly=True),
68 'reconcile_line_ids':
69 fields.function(
70 _reconcile_line_ids,
71 string='Reconciled Items',
72 type='many2many',
73 relation='account.move.line',
74 readonly=True,
75 multi='lines'),
76 'partial_line_ids':
77 fields.function(
78 _reconcile_line_ids,
79 string='Partially Reconciled Items',
80 type='many2many',
81 relation='account.move.line',
82 readonly=True,
83 multi='lines'),
84 }
85
86 def _open_move_lines(self, cr, uid, history_id, rec_type='full', context=None):
87 """ For an history record, open the view of move line with
88 the reconciled or partially reconciled move lines
89
90 :param history_id: id of the history
91 :param rec_type: 'full' or 'partial'
92 :return: action to open the move lines
93 """
94 assert rec_type in ('full', 'partial'), \
95 "rec_type must be 'full' or 'partial'"
96
97 history = self.browse(cr, uid, history_id, context=context)
98
99 if rec_type == 'full':
100 field = 'reconcile_line_ids'
101 name = _('Reconciliations')
102 else:
103 field = 'partial_line_ids'
104 name = _('Partial Reconciliations')
105
106 move_line_ids = [line.id for line in getattr(history, field)]
107
108 return {
109 'name': name,
110 'view_mode': 'tree,form',
111 'view_id': False,
112 'view_type': 'form',
113 'res_model': 'account.move.line',
114 'type': 'ir.actions.act_window',
115 'nodestroy': True,
116 'target': 'current',
117 'domain': unicode([('id', 'in', move_line_ids)]),
118 }
119
120 def open_reconcile(self, cr, uid, history_ids, context=None):
121 """ For an history record, open the view of move line
122 with the reconciled move lines
123
124 :param history_ids: id of the record as int or long
125 Accept a list with 1 id too to be
126 used from the client.
127 """
128 if isinstance(history_ids, (tuple, list)):
129 assert len(history_ids) == 1, "only 1 ID is accepted"
130 history_ids = history_ids[0]
131 return self._open_move_lines(
132 cr, uid, history_ids, rec_type='full', context=None)
133
134 def open_partial(self, cr, uid, history_ids, context=None):
135 """ For an history record, open the view of move line
136 with the partially reconciled move lines
137
138 :param history_ids: id of the record as int or long
139 Accept a list with 1 id too to be
140 used from the client.
141 """
142 if isinstance(history_ids, (tuple, list)):
143 assert len(history_ids) == 1, "only 1 ID is accepted"
144 history_ids = history_ids[0]
145 return self._open_move_lines(
146 cr, uid, history_ids, rec_type='partial', context=None)
0147
=== added file 'account_easy_reconcile/easy_reconcile_history_view.xml'
--- account_easy_reconcile/easy_reconcile_history_view.xml 1970-01-01 00:00:00 +0000
+++ account_easy_reconcile/easy_reconcile_history_view.xml 2012-12-20 10:19:19 +0000
@@ -0,0 +1,98 @@
1<?xml version="1.0" encoding="utf-8"?>
2<openerp>
3 <data noupdate="0">
4
5 <record id="view_easy_reconcile_history_search" model="ir.ui.view">
6 <field name="name">easy.reconcile.history.search</field>
7 <field name="model">easy.reconcile.history</field>
8 <field name="type">search</field>
9 <field name="arch" type="xml">
10 <search string="Automatic Easy Reconcile History">
11 <filter icon="terp-go-today" string="Today"
12 domain="[('date','&lt;', time.strftime('%%Y-%%m-%%d 23:59:59')), ('date','&gt;=', time.strftime('%%Y-%%m-%%d 00:00:00'))]"
13 help="Todays' Reconcilations" />
14 <filter icon="terp-go-week" string="7 Days"
15 help="Reconciliations of last 7 days"
16 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'))]"
17 />
18
19 <separator orientation="vertical"/>
20 <field name="easy_reconcile_id"/>
21 <field name="date"/>
22
23 <newline/>
24 <group expand="0" string="Group By...">
25 <filter string="Reconciliation Profile"
26 icon="terp-stock_effects-object-colorize"
27 domain="[]" context="{'group_by': 'easy_reconcile_id'}"/>
28 <filter string="Date" icon="terp-go-month" domain="[]"
29 context="{'group_by': 'date'}"/>
30 </group>
31 </search>
32 </field>
33 </record>
34
35 <record id="easy_reconcile_history_form" model="ir.ui.view">
36 <field name="name">easy.reconcile.history.form</field>
37 <field name="priority">16</field>
38 <field name="model">easy.reconcile.history</field>
39 <field name="type">form</field>
40 <field name="arch" type="xml">
41 <form string="Automatic Easy Reconcile History">
42 <field name="easy_reconcile_id"/>
43 <field name="date"/>
44 <group colspan="2" col="2">
45 <separator colspan="2" string="Reconcilations"/>
46 <field name="reconcile_ids" nolabel="1"/>
47 </group>
48 <group colspan="2" col="2">
49 <separator colspan="2" string="Partial Reconcilations"/>
50 <field name="reconcile_partial_ids" nolabel="1"/>
51 </group>
52 <group col="2" colspan="4">
53 <button icon="STOCK_JUMP_TO" name="open_reconcile" string="Go to reconciled items" type="object"/>
54 <button icon="STOCK_JUMP_TO" name="open_partial" string="Go to partially reconciled items" type="object"/>
55 </group>
56 </form>
57 </field>
58 </record>
59
60 <record id="easy_reconcile_history_tree" model="ir.ui.view">
61 <field name="name">easy.reconcile.history.tree</field>
62 <field name="priority">16</field>
63 <field name="model">easy.reconcile.history</field>
64 <field name="type">tree</field>
65 <field name="arch" type="xml">
66 <tree string="Automatic Easy Reconcile History">
67 <field name="easy_reconcile_id"/>
68 <field name="date"/>
69 <!-- display the count of lines -->
70 <field name="reconcile_line_ids"/>
71 <button icon="STOCK_JUMP_TO" name="open_reconcile"
72 string="Go to reconciled items" type="object"/>
73 <!-- display the count of lines -->
74 <field name="partial_line_ids"/>
75 <button icon="STOCK_JUMP_TO" name="open_partial"
76 string="Go to partially reconciled items" type="object"/>
77 </tree>
78 </field>
79 </record>
80
81 <record id="action_easy_reconcile_history" model="ir.actions.act_window">
82 <field name="name">Easy Automatic Reconcile History</field>
83 <field name="type">ir.actions.act_window</field>
84 <field name="res_model">easy.reconcile.history</field>
85 <field name="view_type">form</field>
86 <field name="view_mode">tree,form</field>
87 </record>
88
89 <act_window
90 context="{'search_default_easy_reconcile_id': [active_id], 'default_easy_reconcile_id': active_id}"
91 id="act_easy_reconcile_to_history"
92 name="History Details"
93 groups=""
94 res_model="easy.reconcile.history"
95 src_model="account.easy.reconcile"/>
96
97 </data>
98</openerp>
099
=== modified file 'account_easy_reconcile/i18n/fr.po'
--- account_easy_reconcile/i18n/fr.po 2012-11-19 10:30:03 +0000
+++ account_easy_reconcile/i18n/fr.po 2012-12-20 10:19:19 +0000
@@ -1,69 +1,115 @@
1# Translation of OpenERP Server.1# Translation of OpenERP Server.
2# This file contains the translation of the following modules:2# This file contains the translation of the following modules:
3# * account_easy_reconcile3# * account_easy_reconcile
4#4#
5msgid ""5msgid ""
6msgstr ""6msgstr ""
7"Project-Id-Version: OpenERP Server 6.1\n"7"Project-Id-Version: OpenERP Server 6.1\n"
8"Report-Msgid-Bugs-To: \n"8"Report-Msgid-Bugs-To: \n"
9"POT-Creation-Date: 2012-11-07 12:59+0000\n"9"POT-Creation-Date: 2012-12-20 08:54+0000\n"
10"PO-Revision-Date: 2012-11-07 12:59+0000\n"10"PO-Revision-Date: 2012-11-07 12:59+0000\n"
11"Last-Translator: <>\n"11"Last-Translator: <>\n"
12"Language-Team: \n"12"Language-Team: \n"
13"Language: \n"
13"MIME-Version: 1.0\n"14"MIME-Version: 1.0\n"
14"Content-Type: text/plain; charset=UTF-8\n"15"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Transfer-Encoding: \n"16"Content-Transfer-Encoding: \n"
16"Plural-Forms: \n"17"Plural-Forms: \n"
1718
18#. module: account_easy_reconcile19#. module: account_easy_reconcile
20#: code:addons/account_easy_reconcile/easy_reconcile_history.py:103
21msgid "Reconciliations"
22msgstr "Lettrages"
23
24#. module: account_easy_reconcile
19#: view:account.easy.reconcile:025#: view:account.easy.reconcile:0
20msgid "Information"26msgid "Information"
21msgstr "Information"27msgstr "Information"
2228
23#. module: account_easy_reconcile29#. module: account_easy_reconcile
24#: view:account.easy.reconcile.method:030#: view:account.easy.reconcile:0 view:easy.reconcile.history:0
25msgid "Automatic Easy Reconcile Method"31msgid "Automatic Easy Reconcile History"
26msgstr "Méthode de léttrage automatisé"32msgstr "Historique des lettrages automatisés"
2733
28#. module: account_easy_reconcile34#. module: account_easy_reconcile
29#: view:account.easy.reconcile:035#: view:account.easy.reconcile:0 view:easy.reconcile.history:0
30msgid "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."36msgid "Go to partially reconciled items"
31msgstr "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)."37msgstr "Voir les entrées partiellement lettrées"
3238
33#. module: account_easy_reconcile39#. module: account_easy_reconcile
34#: view:account.easy.reconcile:040#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_history
35msgid "Log"41msgid "easy.reconcile.history"
36msgstr "Historique"42msgstr "easy.reconcile.history"
37
38#. module: account_easy_reconcile
39#: view:account.easy.reconcile:0
40msgid "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."
41msgstr "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)."
42
43#. module: account_easy_reconcile
44#: view:account.easy.reconcile:0
45msgid "Automatic Easy Reconcile"
46msgstr "Léttrage automatisé"
47
48#. module: account_easy_reconcile
49#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile_method
50msgid "reconcile method for account_easy_reconcile"
51msgstr "Méthode de léttrage"
52
53#. module: account_easy_reconcile
54#: view:account.easy.reconcile:0
55msgid "Start Auto Reconcilation"
56msgstr "Lancer le léttrage automatisé"
5743
58#. module: account_easy_reconcile44#. module: account_easy_reconcile
59#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_name45#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_name
60msgid "easy.reconcile.simple.name"46msgid "easy.reconcile.simple.name"
61msgstr "Léttrage automatisé.simple.Description"47msgstr "easy.reconcile.simple.name"
6248
63#. module: account_easy_reconcile49#. module: account_easy_reconcile
64#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_options50#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_options
65msgid "easy.reconcile.options"51msgid "easy.reconcile.options"
66msgstr "Léttrage automatisé.options"52msgstr "lettrage automatisé.options"
53
54#. module: account_easy_reconcile
55#: view:easy.reconcile.history:0
56msgid "Group By..."
57msgstr "Grouper par..."
58
59#. module: account_easy_reconcile
60#: view:account.easy.reconcile:0
61msgid "Task Information"
62msgstr "Information sur la tâche"
63
64#. module: account_easy_reconcile
65#: view:account.easy.reconcile:0
66msgid "Reconcile Method"
67msgstr "Méthode de lettrage"
68
69#. module: account_easy_reconcile
70#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_base
71msgid "easy.reconcile.base"
72msgstr "easy.reconcile.base"
73
74#. module: account_easy_reconcile
75#: view:easy.reconcile.history:0
76msgid "7 Days"
77msgstr "7 jours"
78
79#. module: account_easy_reconcile
80#: model:ir.actions.act_window,name:account_easy_reconcile.action_easy_reconcile_history
81msgid "Easy Automatic Reconcile History"
82msgstr "Lettrage automatisé"
83
84#. module: account_easy_reconcile
85#: model:ir.actions.act_window,name:account_easy_reconcile.act_easy_reconcile_to_history
86msgid "History Details"
87msgstr "Détails de l'historique"
88
89#. module: account_easy_reconcile
90#: view:account.easy.reconcile:0
91msgid ""
92"Match one debit line vs one credit line. Do not allow partial reconcilation. "
93"The lines should have the same amount (with the write-off) and the same name "
94"to be reconciled."
95msgstr ""
96"Lettre un débit avec un crédit ayant le même montant et la même description. "
97"Le lettrage ne peut être partiel (écriture d'ajustement en cas d'écart)."
98
99#. module: account_easy_reconcile
100#: view:account.easy.reconcile:0
101msgid "Display items reconciled on the last run"
102msgstr "Voir les entrées lettrées au dernier lettrage"
103
104#. module: account_easy_reconcile
105#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile_method
106msgid "reconcile method for account_easy_reconcile"
107msgstr "Méthode de lettrage"
108
109#. module: account_easy_reconcile
110#: view:easy.reconcile.history:0
111msgid "Todays' Reconcilations"
112msgstr "Lettrages du jour"
67113
68#. module: account_easy_reconcile114#. module: account_easy_reconcile
69#: view:account.easy.reconcile:0115#: view:account.easy.reconcile:0
@@ -71,30 +117,20 @@
71msgstr "Simple. Montant et description"117msgstr "Simple. Montant et description"
72118
73#. module: account_easy_reconcile119#. module: account_easy_reconcile
74#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple
75msgid "easy.reconcile.simple"
76msgstr "Léttrage automatisé.simple"
77
78#. module: account_easy_reconcile
79#: model:ir.actions.act_window,name:account_easy_reconcile.action_account_easy_reconcile120#: model:ir.actions.act_window,name:account_easy_reconcile.action_account_easy_reconcile
80#: model:ir.ui.menu,name:account_easy_reconcile.menu_easy_reconcile121#: model:ir.ui.menu,name:account_easy_reconcile.menu_easy_reconcile
81msgid "Easy Automatic Reconcile"122msgid "Easy Automatic Reconcile"
82msgstr "Léttrage automatisé"123msgstr "Lettrage automatisé"
83124
84#. module: account_easy_reconcile125#. module: account_easy_reconcile
85#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_reference126#: view:easy.reconcile.history:0
86msgid "easy.reconcile.simple.reference"127msgid "Today"
87msgstr "Léttrage automatisé.simple.réference"128msgstr "Aujourd'hui"
88129
89#. module: account_easy_reconcile130#. module: account_easy_reconcile
90#: view:account.easy.reconcile:0131#: view:easy.reconcile.history:0
91msgid "Reconcile Method"132msgid "Date"
92msgstr "Méthode de léttrage"133msgstr "Date"
93
94#. module: account_easy_reconcile
95#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_base
96msgid "easy.reconcile.base"
97msgstr "Léttrage automatisé.base"
98134
99#. module: account_easy_reconcile135#. module: account_easy_reconcile
100#: view:account.easy.reconcile:0136#: view:account.easy.reconcile:0
@@ -104,15 +140,82 @@
104#. module: account_easy_reconcile140#. module: account_easy_reconcile
105#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_partner141#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_partner
106msgid "easy.reconcile.simple.partner"142msgid "easy.reconcile.simple.partner"
107msgstr "Léttrage automatisé.simple.partenaire"143msgstr "easy.reconcile.simple.partner"
108144
109#. module: account_easy_reconcile145#. module: account_easy_reconcile
110#: view:account.easy.reconcile:0146#: view:account.easy.reconcile:0
111msgid "Task Information"147msgid "Automatic Easy Reconcile"
112msgstr "Information sur la tâche"148msgstr "Lettrage automatisé"
149
150#. module: account_easy_reconcile
151#: view:account.easy.reconcile:0
152msgid "Start Auto Reconcilation"
153msgstr "Lancer le lettrage automatisé"
154
155#. module: account_easy_reconcile
156#: view:easy.reconcile.history:0
157msgid "Reconciliation Profile"
158msgstr "Profil de réconciliation"
159
160#. module: account_easy_reconcile
161#: view:account.easy.reconcile:0
162msgid "History"
163msgstr "Historique"
164
165#. module: account_easy_reconcile
166#: view:account.easy.reconcile:0 view:easy.reconcile.history:0
167msgid "Go to reconciled items"
168msgstr "Voir les entrées lettrées"
169
170#. module: account_easy_reconcile
171#: view:account.easy.reconcile.method:0
172msgid "Automatic Easy Reconcile Method"
173msgstr "Méthode de lettrage automatisé"
174
175#. module: account_easy_reconcile
176#: view:account.easy.reconcile:0
177msgid ""
178"Match one debit line vs one credit line. Do not allow partial reconcilation. "
179"The lines should have the same amount (with the write-off) and the same "
180"partner to be reconciled."
181msgstr ""
182"Lettre un débit avec un crédit ayant le même montant et le même partenaire. "
183"Le lettrage ne peut être partiel (écriture d'ajustement en cas d'écart)."
184
185#. module: account_easy_reconcile
186#: view:account.easy.reconcile:0
187msgid "Display items partially reconciled on the last run"
188msgstr "Afficher les entrées partiellement lettrées au dernier lettrage"
189
190#. module: account_easy_reconcile
191#: view:easy.reconcile.history:0
192msgid "Partial Reconcilations"
193msgstr "Lettrages partiels"
194
195#. module: account_easy_reconcile
196#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple
197msgid "easy.reconcile.simple"
198msgstr "easy.reconcile.simple"
199
200#. module: account_easy_reconcile
201#: view:easy.reconcile.history:0
202msgid "Reconciliations of last 7 days"
203msgstr "Lettrages des 7 derniers jours"
204
205#. module: account_easy_reconcile
206#: code:addons/account_easy_reconcile/easy_reconcile_history.py:106
207msgid "Partial Reconciliations"
208msgstr "Lettrages partiels"
209
210#. module: account_easy_reconcile
211#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_reference
212msgid "easy.reconcile.simple.reference"
213msgstr "easy.reconcile.simple.reference"
113214
114#. module: account_easy_reconcile215#. module: account_easy_reconcile
115#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile216#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile
116msgid "account easy reconcile"217msgid "account easy reconcile"
117msgstr "Léttrage automatisé"218msgstr "Lettrage automatisé"
118219
220#~ msgid "Log"
221#~ msgstr "Historique"
119222
=== modified file 'account_easy_reconcile/security/ir.model.access.csv'
--- account_easy_reconcile/security/ir.model.access.csv 2012-11-28 14:12:02 +0000
+++ account_easy_reconcile/security/ir.model.access.csv 2012-12-20 10:19:19 +0000
@@ -11,3 +11,5 @@
11access_easy_reconcile_simple_name_acc_mgr,easy.reconcile.simple.name,model_easy_reconcile_simple_name,account.group_account_user,1,0,0,011access_easy_reconcile_simple_name_acc_mgr,easy.reconcile.simple.name,model_easy_reconcile_simple_name,account.group_account_user,1,0,0,0
12access_easy_reconcile_simple_partner_acc_mgr,easy.reconcile.simple.partner,model_easy_reconcile_simple_partner,account.group_account_user,1,0,0,012access_easy_reconcile_simple_partner_acc_mgr,easy.reconcile.simple.partner,model_easy_reconcile_simple_partner,account.group_account_user,1,0,0,0
13access_easy_reconcile_simple_reference_acc_mgr,easy.reconcile.simple.reference,model_easy_reconcile_simple_reference,account.group_account_user,1,0,0,013access_easy_reconcile_simple_reference_acc_mgr,easy.reconcile.simple.reference,model_easy_reconcile_simple_reference,account.group_account_user,1,0,0,0
14access_easy_reconcile_history_acc_user,easy.reconcile.history,model_easy_reconcile_history,account.group_account_user,1,1,1,0
15access_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