mirror of
https://github.com/OCA/account-reconcile.git
synced 2025-01-20 12:27:39 +02:00
[MRG] rebase from main branch
This commit is contained in:
@@ -22,3 +22,4 @@
|
|||||||
import easy_reconcile
|
import easy_reconcile
|
||||||
import base_reconciliation
|
import base_reconciliation
|
||||||
import simple_reconciliation
|
import simple_reconciliation
|
||||||
|
import easy_reconcile_history
|
||||||
|
|||||||
@@ -38,7 +38,8 @@ in order to provide:
|
|||||||
reconciliation methods which can plug in the profiles
|
reconciliation methods which can plug in the profiles
|
||||||
- a profile a reconciliation can be run manually
|
- a profile a reconciliation can be run manually
|
||||||
or by a cron
|
or by a cron
|
||||||
- monitoring of reconcilation runs with a few logs
|
- monitoring of reconciliation runs with an history
|
||||||
|
which keep track of the reconciled entries
|
||||||
|
|
||||||
2 simple reconciliation methods are integrated
|
2 simple reconciliation methods are integrated
|
||||||
in this module, the simple reconciliations works
|
in this module, the simple reconciliations works
|
||||||
@@ -56,7 +57,10 @@ allows multiple lines and partial.
|
|||||||
"category" : "Finance",
|
"category" : "Finance",
|
||||||
"init_xml" : [],
|
"init_xml" : [],
|
||||||
"demo_xml" : [],
|
"demo_xml" : [],
|
||||||
"update_xml" : ["easy_reconcile.xml"],
|
"update_xml" : [
|
||||||
|
"easy_reconcile.xml",
|
||||||
|
"easy_reconcile_history_view.xml",
|
||||||
|
],
|
||||||
'license': 'AGPL-3',
|
'license': 'AGPL-3',
|
||||||
"auto_install": False,
|
"auto_install": False,
|
||||||
"installable": True,
|
"installable": True,
|
||||||
|
|||||||
@@ -137,24 +137,34 @@ class account_easy_reconcile(Model):
|
|||||||
context=context))
|
context=context))
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
def _last_history(self, cr, uid, ids, name, args, context=None):
|
||||||
|
result = {}
|
||||||
|
for history in self.browse(cr, uid, ids, context=context):
|
||||||
|
# history is sorted by date desc
|
||||||
|
result[history.id] = history.history_ids[0].id
|
||||||
|
return result
|
||||||
|
|
||||||
_columns = {
|
_columns = {
|
||||||
'name': fields.char('Name', size=64, required=True),
|
'name': fields.char('Name', size=64, required=True),
|
||||||
'account': fields.many2one('account.account', 'Account', required=True),
|
'account': fields.many2one('account.account', 'Account', required=True),
|
||||||
'reconcile_method': fields.one2many('account.easy.reconcile.method', 'task_id', 'Method'),
|
'reconcile_method': fields.one2many('account.easy.reconcile.method', 'task_id', 'Method'),
|
||||||
'rec_log': fields.text('log', readonly=True),
|
|
||||||
'unreconciled_count': fields.function(_get_total_unrec,
|
'unreconciled_count': fields.function(_get_total_unrec,
|
||||||
type='integer', string='Fully Unreconciled Entries'),
|
type='integer', string='Unreconciled Entries'),
|
||||||
'reconciled_partial_count': fields.function(_get_partial_rec,
|
'reconciled_partial_count': fields.function(_get_partial_rec,
|
||||||
type='integer', string='Partially Reconciled Entries'),
|
type='integer', string='Partially Reconciled Entries'),
|
||||||
|
'history_ids': fields.one2many(
|
||||||
|
'easy.reconcile.history',
|
||||||
|
'easy_reconcile_id',
|
||||||
|
string='History'),
|
||||||
|
'last_history':
|
||||||
|
fields.function(
|
||||||
|
_last_history,
|
||||||
|
string='Last History',
|
||||||
|
type='many2one',
|
||||||
|
relation='easy.reconcile.history',
|
||||||
|
readonly=True),
|
||||||
}
|
}
|
||||||
|
|
||||||
def copy_data(self, cr, uid, id, default=None, context=None):
|
|
||||||
if default is None:
|
|
||||||
default = {}
|
|
||||||
default = dict(default, rec_log=False)
|
|
||||||
return super(account_easy_reconcile, self).copy_data(
|
|
||||||
cr, uid, id, default=default, context=context)
|
|
||||||
|
|
||||||
def _prepare_run_transient(self, cr, uid, rec_method, context=None):
|
def _prepare_run_transient(self, cr, uid, rec_method, context=None):
|
||||||
return {'account_id': rec_method.task_id.account.id,
|
return {'account_id': rec_method.task_id.account.id,
|
||||||
'write_off': rec_method.write_off,
|
'write_off': rec_method.write_off,
|
||||||
@@ -167,39 +177,69 @@ class account_easy_reconcile(Model):
|
|||||||
'filter': rec_method.filter}
|
'filter': rec_method.filter}
|
||||||
|
|
||||||
def run_reconcile(self, cr, uid, ids, context=None):
|
def run_reconcile(self, cr, uid, ids, context=None):
|
||||||
|
def find_reconcile_ids(fieldname, move_line_ids):
|
||||||
|
if not move_line_ids:
|
||||||
|
return []
|
||||||
|
sql = ("SELECT DISTINCT " + fieldname +
|
||||||
|
" FROM account_move_line "
|
||||||
|
" WHERE id in %s "
|
||||||
|
" AND " + fieldname + " IS NOT NULL")
|
||||||
|
cr.execute(sql, (tuple(move_line_ids),))
|
||||||
|
res = cr.fetchall()
|
||||||
|
return [row[0] for row in res]
|
||||||
|
|
||||||
if context is None:
|
if context is None:
|
||||||
context = {}
|
context = {}
|
||||||
for rec_id in ids:
|
for rec in self.browse(cr, uid, ids, context=context):
|
||||||
rec = self.browse(cr, uid, rec_id, context=context)
|
all_ml_rec_ids = []
|
||||||
total_rec = 0
|
all_ml_partial_ids = []
|
||||||
total_partial_rec = 0
|
|
||||||
details = []
|
|
||||||
count = 0
|
|
||||||
for method in rec.reconcile_method:
|
|
||||||
count += 1
|
|
||||||
|
|
||||||
|
for method in rec.reconcile_method:
|
||||||
rec_model = self.pool.get(method.name)
|
rec_model = self.pool.get(method.name)
|
||||||
auto_rec_id = rec_model.create(
|
auto_rec_id = rec_model.create(
|
||||||
cr, uid,
|
cr, uid,
|
||||||
self._prepare_run_transient(cr, uid, method, context=context),
|
self._prepare_run_transient(cr, uid, method, context=context),
|
||||||
context=context)
|
context=context)
|
||||||
|
|
||||||
rec_ids, partial_ids = rec_model.automatic_reconcile(
|
ml_rec_ids, ml_partial_ids = rec_model.automatic_reconcile(
|
||||||
cr, uid, auto_rec_id, context=context)
|
cr, uid, auto_rec_id, context=context)
|
||||||
|
|
||||||
details.append(_('method %d : full: %d lines, partial: %d lines') % \
|
all_ml_rec_ids += ml_rec_ids
|
||||||
(count, len(rec_ids), len(partial_ids)))
|
all_ml_partial_ids += ml_partial_ids
|
||||||
|
|
||||||
total_rec += len(rec_ids)
|
reconcile_ids = find_reconcile_ids(
|
||||||
total_partial_rec += len(partial_ids)
|
'reconcile_id', all_ml_rec_ids)
|
||||||
|
partial_ids = find_reconcile_ids(
|
||||||
|
'reconcile_partial_id', all_ml_partial_ids)
|
||||||
|
|
||||||
log = self.read(cr, uid, rec_id, ['rec_log'], context=context)['rec_log']
|
self.pool.get('easy.reconcile.history').create(
|
||||||
log_lines = log and log.splitlines() or []
|
cr,
|
||||||
log_lines[0:0] = [_("%s : %d lines have been fully reconciled" \
|
uid,
|
||||||
" and %d lines have been partially reconciled (%s)") % \
|
{'easy_reconcile_id': rec.id,
|
||||||
(time.strftime(DEFAULT_SERVER_DATETIME_FORMAT), total_rec,
|
'date': fields.datetime.now(),
|
||||||
total_partial_rec, ' | '.join(details))]
|
'reconcile_ids': [(4, rid) for rid in reconcile_ids],
|
||||||
log = "\n".join(log_lines)
|
'reconcile_partial_ids': [(4, rid) for rid in partial_ids]},
|
||||||
self.write(cr, uid, rec_id, {'rec_log': log}, context=context)
|
context=context)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
def last_history_reconcile(self, cr, uid, rec_id, context=None):
|
||||||
|
""" Get the last history record for this reconciliation profile
|
||||||
|
and return the action which opens move lines reconciled
|
||||||
|
"""
|
||||||
|
if isinstance(rec_id, (tuple, list)):
|
||||||
|
assert len(rec_id) == 1, \
|
||||||
|
"Only 1 id expected"
|
||||||
|
rec_id = rec_id[0]
|
||||||
|
rec = self.browse(cr, uid, rec_id, context=context)
|
||||||
|
return rec.last_history.open_reconcile()
|
||||||
|
|
||||||
|
def last_history_partial(self, cr, uid, rec_id, context=None):
|
||||||
|
""" Get the last history record for this reconciliation profile
|
||||||
|
and return the action which opens move lines reconciled
|
||||||
|
"""
|
||||||
|
if isinstance(rec_id, (tuple, list)):
|
||||||
|
assert len(rec_id) == 1, \
|
||||||
|
"Only 1 id expected"
|
||||||
|
rec_id = rec_id[0]
|
||||||
|
rec = self.browse(cr, uid, rec_id, context=context)
|
||||||
|
return rec.last_history.open_partial()
|
||||||
|
|||||||
@@ -19,6 +19,28 @@
|
|||||||
<notebook colspan="4">
|
<notebook colspan="4">
|
||||||
<page name="methods" string="Configuration">
|
<page name="methods" string="Configuration">
|
||||||
<field name="reconcile_method" colspan = "4" nolabel="1"/>
|
<field name="reconcile_method" colspan = "4" nolabel="1"/>
|
||||||
|
<button icon="gtk-ok" name="run_reconcile" colspan="4"
|
||||||
|
string="Start Auto Reconcilation" type="object"/>
|
||||||
|
<button icon="STOCK_JUMP_TO" name="last_history_reconcile" colspan="2"
|
||||||
|
string="Display items reconciled on the last run" type="object"/>
|
||||||
|
<button icon="STOCK_JUMP_TO" name="last_history_partial" colspan="2"
|
||||||
|
string="Display items partially reconciled on the last run"
|
||||||
|
type="object"/>
|
||||||
|
</page>
|
||||||
|
<page name="history" string="History">
|
||||||
|
<field name="history_ids" nolabel="1">
|
||||||
|
<tree string="Automatic Easy Reconcile History">
|
||||||
|
<field name="date"/>
|
||||||
|
<!-- display the count of lines -->
|
||||||
|
<field name="reconcile_line_ids"/>
|
||||||
|
<button icon="STOCK_JUMP_TO" name="open_reconcile"
|
||||||
|
string="Go to reconciled items" type="object"/>
|
||||||
|
<!-- display the count of lines -->
|
||||||
|
<field name="partial_line_ids"/>
|
||||||
|
<button icon="STOCK_JUMP_TO" name="open_partial"
|
||||||
|
string="Go to partially reconciled items" type="object"/>
|
||||||
|
</tree>
|
||||||
|
</field>
|
||||||
</page>
|
</page>
|
||||||
<page name="information" string="Information">
|
<page name="information" string="Information">
|
||||||
<separator colspan="4" string="Simple. Amount and Name"/>
|
<separator colspan="4" string="Simple. Amount and Name"/>
|
||||||
@@ -31,9 +53,6 @@ The lines should have the same amount (with the write-off) and the same partner
|
|||||||
|
|
||||||
</page>
|
</page>
|
||||||
</notebook>
|
</notebook>
|
||||||
<button icon="gtk-ok" name="run_reconcile" colspan = "4" string="Start Auto Reconcilation" type="object"/>
|
|
||||||
<separator colspan="4" string="Log" />
|
|
||||||
<field name="rec_log" colspan = "4" nolabel="1"/>
|
|
||||||
</form>
|
</form>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
@@ -49,6 +68,13 @@ The lines should have the same amount (with the write-off) and the same partner
|
|||||||
<field name="account"/>
|
<field name="account"/>
|
||||||
<field name="unreconciled_count"/>
|
<field name="unreconciled_count"/>
|
||||||
<field name="reconciled_partial_count"/>
|
<field name="reconciled_partial_count"/>
|
||||||
|
<button icon="gtk-ok" name="run_reconcile" colspan="4"
|
||||||
|
string="Start Auto Reconcilation" type="object"/>
|
||||||
|
<button icon="STOCK_JUMP_TO" name="last_history_reconcile" colspan="2"
|
||||||
|
string="Display items reconciled on the last run" type="object"/>
|
||||||
|
<button icon="STOCK_JUMP_TO" name="last_history_partial" colspan="2"
|
||||||
|
string="Display items partially reconciled on the last run"
|
||||||
|
type="object"/>
|
||||||
</tree>
|
</tree>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|||||||
146
account_easy_reconcile/easy_reconcile_history.py
Normal file
146
account_easy_reconcile/easy_reconcile_history.py
Normal file
@@ -0,0 +1,146 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
##############################################################################
|
||||||
|
#
|
||||||
|
# Author: Guewen Baconnier
|
||||||
|
# Copyright 2012 Camptocamp SA
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 of the
|
||||||
|
# License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
##############################################################################
|
||||||
|
|
||||||
|
from openerp.osv import orm, fields
|
||||||
|
from openerp.tools.translate import _
|
||||||
|
|
||||||
|
|
||||||
|
class easy_reconcile_history(orm.Model):
|
||||||
|
""" Store an history of the runs per profile
|
||||||
|
Each history stores the list of reconciliations done"""
|
||||||
|
|
||||||
|
_name = 'easy.reconcile.history'
|
||||||
|
_rec_name = 'easy_reconcile_id'
|
||||||
|
_order = 'date DESC'
|
||||||
|
|
||||||
|
def _reconcile_line_ids(self, cr, uid, ids, name, args, context=None):
|
||||||
|
result = {}
|
||||||
|
|
||||||
|
for history in self.browse(cr, uid, ids, context=context):
|
||||||
|
result[history.id] = {}
|
||||||
|
|
||||||
|
move_line_ids = []
|
||||||
|
for reconcile in history.reconcile_ids:
|
||||||
|
move_line_ids += [line.id
|
||||||
|
for line
|
||||||
|
in reconcile.line_id]
|
||||||
|
result[history.id]['reconcile_line_ids'] = move_line_ids
|
||||||
|
|
||||||
|
move_line_ids = []
|
||||||
|
for reconcile in history.reconcile_partial_ids:
|
||||||
|
move_line_ids += [line.id
|
||||||
|
for line
|
||||||
|
in reconcile.line_partial_ids]
|
||||||
|
result[history.id]['partial_line_ids'] = move_line_ids
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
|
_columns = {
|
||||||
|
'easy_reconcile_id': fields.many2one(
|
||||||
|
'account.easy.reconcile', 'Reconcile Profile', readonly=True),
|
||||||
|
'date': fields.datetime('Run date', readonly=True),
|
||||||
|
'reconcile_ids': fields.many2many(
|
||||||
|
'account.move.reconcile',
|
||||||
|
'account_move_reconcile_history_rel',
|
||||||
|
string='Reconciliations', readonly=True),
|
||||||
|
'reconcile_partial_ids': fields.many2many(
|
||||||
|
'account.move.reconcile',
|
||||||
|
'account_move_reconcile_history_partial_rel',
|
||||||
|
string='Partial Reconciliations', readonly=True),
|
||||||
|
'reconcile_line_ids':
|
||||||
|
fields.function(
|
||||||
|
_reconcile_line_ids,
|
||||||
|
string='Reconciled Items',
|
||||||
|
type='many2many',
|
||||||
|
relation='account.move.line',
|
||||||
|
readonly=True,
|
||||||
|
multi='lines'),
|
||||||
|
'partial_line_ids':
|
||||||
|
fields.function(
|
||||||
|
_reconcile_line_ids,
|
||||||
|
string='Partially Reconciled Items',
|
||||||
|
type='many2many',
|
||||||
|
relation='account.move.line',
|
||||||
|
readonly=True,
|
||||||
|
multi='lines'),
|
||||||
|
}
|
||||||
|
|
||||||
|
def _open_move_lines(self, cr, uid, history_id, rec_type='full', context=None):
|
||||||
|
""" For an history record, open the view of move line with
|
||||||
|
the reconciled or partially reconciled move lines
|
||||||
|
|
||||||
|
:param history_id: id of the history
|
||||||
|
:param rec_type: 'full' or 'partial'
|
||||||
|
:return: action to open the move lines
|
||||||
|
"""
|
||||||
|
assert rec_type in ('full', 'partial'), \
|
||||||
|
"rec_type must be 'full' or 'partial'"
|
||||||
|
|
||||||
|
history = self.browse(cr, uid, history_id, context=context)
|
||||||
|
|
||||||
|
if rec_type == 'full':
|
||||||
|
field = 'reconcile_line_ids'
|
||||||
|
name = _('Reconciliations')
|
||||||
|
else:
|
||||||
|
field = 'partial_line_ids'
|
||||||
|
name = _('Partial Reconciliations')
|
||||||
|
|
||||||
|
move_line_ids = [line.id for line in getattr(history, field)]
|
||||||
|
|
||||||
|
return {
|
||||||
|
'name': name,
|
||||||
|
'view_mode': 'tree,form',
|
||||||
|
'view_id': False,
|
||||||
|
'view_type': 'form',
|
||||||
|
'res_model': 'account.move.line',
|
||||||
|
'type': 'ir.actions.act_window',
|
||||||
|
'nodestroy': True,
|
||||||
|
'target': 'current',
|
||||||
|
'domain': unicode([('id', 'in', move_line_ids)]),
|
||||||
|
}
|
||||||
|
|
||||||
|
def open_reconcile(self, cr, uid, history_ids, context=None):
|
||||||
|
""" For an history record, open the view of move line
|
||||||
|
with the reconciled move lines
|
||||||
|
|
||||||
|
:param history_ids: id of the record as int or long
|
||||||
|
Accept a list with 1 id too to be
|
||||||
|
used from the client.
|
||||||
|
"""
|
||||||
|
if isinstance(history_ids, (tuple, list)):
|
||||||
|
assert len(history_ids) == 1, "only 1 ID is accepted"
|
||||||
|
history_ids = history_ids[0]
|
||||||
|
return self._open_move_lines(
|
||||||
|
cr, uid, history_ids, rec_type='full', context=None)
|
||||||
|
|
||||||
|
def open_partial(self, cr, uid, history_ids, context=None):
|
||||||
|
""" For an history record, open the view of move line
|
||||||
|
with the partially reconciled move lines
|
||||||
|
|
||||||
|
:param history_ids: id of the record as int or long
|
||||||
|
Accept a list with 1 id too to be
|
||||||
|
used from the client.
|
||||||
|
"""
|
||||||
|
if isinstance(history_ids, (tuple, list)):
|
||||||
|
assert len(history_ids) == 1, "only 1 ID is accepted"
|
||||||
|
history_ids = history_ids[0]
|
||||||
|
return self._open_move_lines(
|
||||||
|
cr, uid, history_ids, rec_type='partial', context=None)
|
||||||
98
account_easy_reconcile/easy_reconcile_history_view.xml
Normal file
98
account_easy_reconcile/easy_reconcile_history_view.xml
Normal file
@@ -0,0 +1,98 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<openerp>
|
||||||
|
<data noupdate="0">
|
||||||
|
|
||||||
|
<record id="view_easy_reconcile_history_search" model="ir.ui.view">
|
||||||
|
<field name="name">easy.reconcile.history.search</field>
|
||||||
|
<field name="model">easy.reconcile.history</field>
|
||||||
|
<field name="type">search</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<search string="Automatic Easy Reconcile History">
|
||||||
|
<filter icon="terp-go-today" string="Today"
|
||||||
|
domain="[('date','<', time.strftime('%%Y-%%m-%%d 23:59:59')), ('date','>=', time.strftime('%%Y-%%m-%%d 00:00:00'))]"
|
||||||
|
help="Todays' Reconcilations" />
|
||||||
|
<filter icon="terp-go-week" string="7 Days"
|
||||||
|
help="Reconciliations of last 7 days"
|
||||||
|
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'))]"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<separator orientation="vertical"/>
|
||||||
|
<field name="easy_reconcile_id"/>
|
||||||
|
<field name="date"/>
|
||||||
|
|
||||||
|
<newline/>
|
||||||
|
<group expand="0" string="Group By...">
|
||||||
|
<filter string="Reconciliation Profile"
|
||||||
|
icon="terp-stock_effects-object-colorize"
|
||||||
|
domain="[]" context="{'group_by': 'easy_reconcile_id'}"/>
|
||||||
|
<filter string="Date" icon="terp-go-month" domain="[]"
|
||||||
|
context="{'group_by': 'date'}"/>
|
||||||
|
</group>
|
||||||
|
</search>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="easy_reconcile_history_form" model="ir.ui.view">
|
||||||
|
<field name="name">easy.reconcile.history.form</field>
|
||||||
|
<field name="priority">16</field>
|
||||||
|
<field name="model">easy.reconcile.history</field>
|
||||||
|
<field name="type">form</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<form string="Automatic Easy Reconcile History">
|
||||||
|
<field name="easy_reconcile_id"/>
|
||||||
|
<field name="date"/>
|
||||||
|
<group colspan="2" col="2">
|
||||||
|
<separator colspan="2" string="Reconcilations"/>
|
||||||
|
<field name="reconcile_ids" nolabel="1"/>
|
||||||
|
</group>
|
||||||
|
<group colspan="2" col="2">
|
||||||
|
<separator colspan="2" string="Partial Reconcilations"/>
|
||||||
|
<field name="reconcile_partial_ids" nolabel="1"/>
|
||||||
|
</group>
|
||||||
|
<group col="2" colspan="4">
|
||||||
|
<button icon="STOCK_JUMP_TO" name="open_reconcile" string="Go to reconciled items" type="object"/>
|
||||||
|
<button icon="STOCK_JUMP_TO" name="open_partial" string="Go to partially reconciled items" type="object"/>
|
||||||
|
</group>
|
||||||
|
</form>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="easy_reconcile_history_tree" model="ir.ui.view">
|
||||||
|
<field name="name">easy.reconcile.history.tree</field>
|
||||||
|
<field name="priority">16</field>
|
||||||
|
<field name="model">easy.reconcile.history</field>
|
||||||
|
<field name="type">tree</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<tree string="Automatic Easy Reconcile History">
|
||||||
|
<field name="easy_reconcile_id"/>
|
||||||
|
<field name="date"/>
|
||||||
|
<!-- display the count of lines -->
|
||||||
|
<field name="reconcile_line_ids"/>
|
||||||
|
<button icon="STOCK_JUMP_TO" name="open_reconcile"
|
||||||
|
string="Go to reconciled items" type="object"/>
|
||||||
|
<!-- display the count of lines -->
|
||||||
|
<field name="partial_line_ids"/>
|
||||||
|
<button icon="STOCK_JUMP_TO" name="open_partial"
|
||||||
|
string="Go to partially reconciled items" type="object"/>
|
||||||
|
</tree>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="action_easy_reconcile_history" model="ir.actions.act_window">
|
||||||
|
<field name="name">Easy Automatic Reconcile History</field>
|
||||||
|
<field name="type">ir.actions.act_window</field>
|
||||||
|
<field name="res_model">easy.reconcile.history</field>
|
||||||
|
<field name="view_type">form</field>
|
||||||
|
<field name="view_mode">tree,form</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<act_window
|
||||||
|
context="{'search_default_easy_reconcile_id': [active_id], 'default_easy_reconcile_id': active_id}"
|
||||||
|
id="act_easy_reconcile_to_history"
|
||||||
|
name="History Details"
|
||||||
|
groups=""
|
||||||
|
res_model="easy.reconcile.history"
|
||||||
|
src_model="account.easy.reconcile"/>
|
||||||
|
|
||||||
|
</data>
|
||||||
|
</openerp>
|
||||||
@@ -6,54 +6,40 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: OpenERP Server 6.1\n"
|
"Project-Id-Version: OpenERP Server 6.1\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2012-11-07 12:59+0000\n"
|
"POT-Creation-Date: 2012-12-20 08:54+0000\n"
|
||||||
"PO-Revision-Date: 2012-11-07 12:59+0000\n"
|
"PO-Revision-Date: 2012-11-07 12:59+0000\n"
|
||||||
"Last-Translator: <>\n"
|
"Last-Translator: <>\n"
|
||||||
"Language-Team: \n"
|
"Language-Team: \n"
|
||||||
|
"Language: \n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: \n"
|
"Content-Transfer-Encoding: \n"
|
||||||
"Plural-Forms: \n"
|
"Plural-Forms: \n"
|
||||||
|
|
||||||
|
#. module: account_easy_reconcile
|
||||||
|
#: code:addons/account_easy_reconcile/easy_reconcile_history.py:103
|
||||||
|
msgid "Reconciliations"
|
||||||
|
msgstr "Lettrages"
|
||||||
|
|
||||||
#. module: account_easy_reconcile
|
#. module: account_easy_reconcile
|
||||||
#: view:account.easy.reconcile:0
|
#: view:account.easy.reconcile:0
|
||||||
msgid "Information"
|
msgid "Information"
|
||||||
msgstr "Information"
|
msgstr "Information"
|
||||||
|
|
||||||
#. module: account_easy_reconcile
|
#. module: account_easy_reconcile
|
||||||
#: view:account.easy.reconcile.method:0
|
#: view:account.easy.reconcile:0 view:easy.reconcile.history:0
|
||||||
msgid "Automatic Easy Reconcile Method"
|
msgid "Automatic Easy Reconcile History"
|
||||||
msgstr "Méthode de lettrage automatisé"
|
msgstr "Historique des lettrages automatisés"
|
||||||
|
|
||||||
#. module: account_easy_reconcile
|
#. module: account_easy_reconcile
|
||||||
#: view:account.easy.reconcile:0
|
#: view:account.easy.reconcile:0 view:easy.reconcile.history:0
|
||||||
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."
|
msgid "Go to partially reconciled items"
|
||||||
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)."
|
msgstr "Voir les entrées partiellement lettrées"
|
||||||
|
|
||||||
#. module: account_easy_reconcile
|
#. module: account_easy_reconcile
|
||||||
#: view:account.easy.reconcile:0
|
#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_history
|
||||||
msgid "Log"
|
msgid "easy.reconcile.history"
|
||||||
msgstr "Historique"
|
msgstr "easy.reconcile.history"
|
||||||
|
|
||||||
#. module: account_easy_reconcile
|
|
||||||
#: view:account.easy.reconcile:0
|
|
||||||
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."
|
|
||||||
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)."
|
|
||||||
|
|
||||||
#. module: account_easy_reconcile
|
|
||||||
#: view:account.easy.reconcile:0
|
|
||||||
msgid "Automatic Easy Reconcile"
|
|
||||||
msgstr "Lettrage automatisé"
|
|
||||||
|
|
||||||
#. module: account_easy_reconcile
|
|
||||||
#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile_method
|
|
||||||
msgid "reconcile method for account_easy_reconcile"
|
|
||||||
msgstr "Méthode de lettrage"
|
|
||||||
|
|
||||||
#. module: account_easy_reconcile
|
|
||||||
#: view:account.easy.reconcile:0
|
|
||||||
msgid "Start Auto Reconcilation"
|
|
||||||
msgstr "Lancer le lettrage automatisé"
|
|
||||||
|
|
||||||
#. module: account_easy_reconcile
|
#. module: account_easy_reconcile
|
||||||
#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_name
|
#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_name
|
||||||
@@ -65,26 +51,15 @@ msgstr "easy.reconcile.simple.name"
|
|||||||
msgid "easy.reconcile.options"
|
msgid "easy.reconcile.options"
|
||||||
msgstr "easy.reconcile.options"
|
msgstr "easy.reconcile.options"
|
||||||
|
|
||||||
|
#. module: account_easy_reconcile
|
||||||
|
#: view:easy.reconcile.history:0
|
||||||
|
msgid "Group By..."
|
||||||
|
msgstr "Grouper par..."
|
||||||
|
|
||||||
#. module: account_easy_reconcile
|
#. module: account_easy_reconcile
|
||||||
#: view:account.easy.reconcile:0
|
#: view:account.easy.reconcile:0
|
||||||
msgid "Simple. Amount and Name"
|
msgid "Task Information"
|
||||||
msgstr "Simple. Montant et description"
|
msgstr "Information sur la tâche"
|
||||||
|
|
||||||
#. module: account_easy_reconcile
|
|
||||||
#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple
|
|
||||||
msgid "easy.reconcile.simple"
|
|
||||||
msgstr "easy.reconcile.simple"
|
|
||||||
|
|
||||||
#. module: account_easy_reconcile
|
|
||||||
#: model:ir.actions.act_window,name:account_easy_reconcile.action_account_easy_reconcile
|
|
||||||
#: model:ir.ui.menu,name:account_easy_reconcile.menu_easy_reconcile
|
|
||||||
msgid "Easy Automatic Reconcile"
|
|
||||||
msgstr "Lettrage automatisé"
|
|
||||||
|
|
||||||
#. module: account_easy_reconcile
|
|
||||||
#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_reference
|
|
||||||
msgid "easy.reconcile.simple.reference"
|
|
||||||
msgstr "easy.reconcile.simple.reference"
|
|
||||||
|
|
||||||
#. module: account_easy_reconcile
|
#. module: account_easy_reconcile
|
||||||
#: view:account.easy.reconcile:0
|
#: view:account.easy.reconcile:0
|
||||||
@@ -96,6 +71,67 @@ msgstr "Méthode de lettrage"
|
|||||||
msgid "easy.reconcile.base"
|
msgid "easy.reconcile.base"
|
||||||
msgstr "easy.reconcile.base"
|
msgstr "easy.reconcile.base"
|
||||||
|
|
||||||
|
#. module: account_easy_reconcile
|
||||||
|
#: view:easy.reconcile.history:0
|
||||||
|
msgid "7 Days"
|
||||||
|
msgstr "7 jours"
|
||||||
|
|
||||||
|
#. module: account_easy_reconcile
|
||||||
|
#: model:ir.actions.act_window,name:account_easy_reconcile.action_easy_reconcile_history
|
||||||
|
msgid "Easy Automatic Reconcile History"
|
||||||
|
msgstr "Lettrage automatisé"
|
||||||
|
|
||||||
|
#. module: account_easy_reconcile
|
||||||
|
#: model:ir.actions.act_window,name:account_easy_reconcile.act_easy_reconcile_to_history
|
||||||
|
msgid "History Details"
|
||||||
|
msgstr "Détails de l'historique"
|
||||||
|
|
||||||
|
#. module: account_easy_reconcile
|
||||||
|
#: view:account.easy.reconcile:0
|
||||||
|
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."
|
||||||
|
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)."
|
||||||
|
|
||||||
|
#. module: account_easy_reconcile
|
||||||
|
#: view:account.easy.reconcile:0
|
||||||
|
msgid "Display items reconciled on the last run"
|
||||||
|
msgstr "Voir les entrées lettrées au dernier lettrage"
|
||||||
|
|
||||||
|
#. module: account_easy_reconcile
|
||||||
|
#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile_method
|
||||||
|
msgid "reconcile method for account_easy_reconcile"
|
||||||
|
msgstr "Méthode de lettrage"
|
||||||
|
|
||||||
|
#. module: account_easy_reconcile
|
||||||
|
#: view:easy.reconcile.history:0
|
||||||
|
msgid "Todays' Reconcilations"
|
||||||
|
msgstr "Lettrages du jour"
|
||||||
|
|
||||||
|
#. module: account_easy_reconcile
|
||||||
|
#: view:account.easy.reconcile:0
|
||||||
|
msgid "Simple. Amount and Name"
|
||||||
|
msgstr "Simple. Montant et description"
|
||||||
|
|
||||||
|
#. module: account_easy_reconcile
|
||||||
|
#: model:ir.actions.act_window,name:account_easy_reconcile.action_account_easy_reconcile
|
||||||
|
#: model:ir.ui.menu,name:account_easy_reconcile.menu_easy_reconcile
|
||||||
|
msgid "Easy Automatic Reconcile"
|
||||||
|
msgstr "Lettrage automatisé"
|
||||||
|
|
||||||
|
#. module: account_easy_reconcile
|
||||||
|
#: view:easy.reconcile.history:0
|
||||||
|
msgid "Today"
|
||||||
|
msgstr "Aujourd'hui"
|
||||||
|
|
||||||
|
#. module: account_easy_reconcile
|
||||||
|
#: view:easy.reconcile.history:0
|
||||||
|
msgid "Date"
|
||||||
|
msgstr "Date"
|
||||||
|
|
||||||
#. module: account_easy_reconcile
|
#. module: account_easy_reconcile
|
||||||
#: view:account.easy.reconcile:0
|
#: view:account.easy.reconcile:0
|
||||||
msgid "Configuration"
|
msgid "Configuration"
|
||||||
@@ -108,11 +144,78 @@ msgstr "easy.reconcile.simple.partner"
|
|||||||
|
|
||||||
#. module: account_easy_reconcile
|
#. module: account_easy_reconcile
|
||||||
#: view:account.easy.reconcile:0
|
#: view:account.easy.reconcile:0
|
||||||
msgid "Task Information"
|
msgid "Automatic Easy Reconcile"
|
||||||
msgstr "Information sur la tâche"
|
msgstr "Lettrage automatisé"
|
||||||
|
|
||||||
|
#. module: account_easy_reconcile
|
||||||
|
#: view:account.easy.reconcile:0
|
||||||
|
msgid "Start Auto Reconcilation"
|
||||||
|
msgstr "Lancer le lettrage automatisé"
|
||||||
|
|
||||||
|
#. module: account_easy_reconcile
|
||||||
|
#: view:easy.reconcile.history:0
|
||||||
|
msgid "Reconciliation Profile"
|
||||||
|
msgstr "Profil de réconciliation"
|
||||||
|
|
||||||
|
#. module: account_easy_reconcile
|
||||||
|
#: view:account.easy.reconcile:0
|
||||||
|
msgid "History"
|
||||||
|
msgstr "Historique"
|
||||||
|
|
||||||
|
#. module: account_easy_reconcile
|
||||||
|
#: view:account.easy.reconcile:0 view:easy.reconcile.history:0
|
||||||
|
msgid "Go to reconciled items"
|
||||||
|
msgstr "Voir les entrées lettrées"
|
||||||
|
|
||||||
|
#. module: account_easy_reconcile
|
||||||
|
#: view:account.easy.reconcile.method:0
|
||||||
|
msgid "Automatic Easy Reconcile Method"
|
||||||
|
msgstr "Méthode de lettrage automatisé"
|
||||||
|
|
||||||
|
#. module: account_easy_reconcile
|
||||||
|
#: view:account.easy.reconcile:0
|
||||||
|
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."
|
||||||
|
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)."
|
||||||
|
|
||||||
|
#. module: account_easy_reconcile
|
||||||
|
#: view:account.easy.reconcile:0
|
||||||
|
msgid "Display items partially reconciled on the last run"
|
||||||
|
msgstr "Afficher les entrées partiellement lettrées au dernier lettrage"
|
||||||
|
|
||||||
|
#. module: account_easy_reconcile
|
||||||
|
#: view:easy.reconcile.history:0
|
||||||
|
msgid "Partial Reconcilations"
|
||||||
|
msgstr "Lettrages partiels"
|
||||||
|
|
||||||
|
#. module: account_easy_reconcile
|
||||||
|
#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple
|
||||||
|
msgid "easy.reconcile.simple"
|
||||||
|
msgstr "easy.reconcile.simple"
|
||||||
|
|
||||||
|
#. module: account_easy_reconcile
|
||||||
|
#: view:easy.reconcile.history:0
|
||||||
|
msgid "Reconciliations of last 7 days"
|
||||||
|
msgstr "Lettrages des 7 derniers jours"
|
||||||
|
|
||||||
|
#. module: account_easy_reconcile
|
||||||
|
#: code:addons/account_easy_reconcile/easy_reconcile_history.py:106
|
||||||
|
msgid "Partial Reconciliations"
|
||||||
|
msgstr "Lettrages partiels"
|
||||||
|
|
||||||
|
#. module: account_easy_reconcile
|
||||||
|
#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_reference
|
||||||
|
msgid "easy.reconcile.simple.reference"
|
||||||
|
msgstr "easy.reconcile.simple.reference"
|
||||||
|
|
||||||
#. module: account_easy_reconcile
|
#. module: account_easy_reconcile
|
||||||
#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile
|
#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile
|
||||||
msgid "account easy reconcile"
|
msgid "account easy reconcile"
|
||||||
msgstr "Lettrage automatisé"
|
msgstr "Lettrage automatisé"
|
||||||
|
|
||||||
|
#~ msgid "Log"
|
||||||
|
#~ msgstr "Historique"
|
||||||
|
|||||||
@@ -11,3 +11,5 @@ access_account_easy_reconcile_acc_mgr,account.easy.reconcile,model_account_easy_
|
|||||||
access_easy_reconcile_simple_name_acc_mgr,easy.reconcile.simple.name,model_easy_reconcile_simple_name,account.group_account_user,1,0,0,0
|
access_easy_reconcile_simple_name_acc_mgr,easy.reconcile.simple.name,model_easy_reconcile_simple_name,account.group_account_user,1,0,0,0
|
||||||
access_easy_reconcile_simple_partner_acc_mgr,easy.reconcile.simple.partner,model_easy_reconcile_simple_partner,account.group_account_user,1,0,0,0
|
access_easy_reconcile_simple_partner_acc_mgr,easy.reconcile.simple.partner,model_easy_reconcile_simple_partner,account.group_account_user,1,0,0,0
|
||||||
access_easy_reconcile_simple_reference_acc_mgr,easy.reconcile.simple.reference,model_easy_reconcile_simple_reference,account.group_account_user,1,0,0,0
|
access_easy_reconcile_simple_reference_acc_mgr,easy.reconcile.simple.reference,model_easy_reconcile_simple_reference,account.group_account_user,1,0,0,0
|
||||||
|
access_easy_reconcile_history_acc_user,easy.reconcile.history,model_easy_reconcile_history,account.group_account_user,1,1,1,0
|
||||||
|
access_easy_reconcile_history_acc_mgr,easy.reconcile.history,model_easy_reconcile_history,account.group_account_manager,1,1,1,1
|
||||||
|
|||||||
|
Reference in New Issue
Block a user