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