mirror of
https://github.com/OCA/account-reconcile.git
synced 2025-01-20 12:27:39 +02:00
[MRG] From last updated 7.0 series
This commit is contained in:
@@ -25,7 +25,7 @@
|
||||
'maintainer': 'Camptocamp',
|
||||
'category': 'Finance',
|
||||
'complexity': 'normal',
|
||||
'depends': ['account_easy_reconcile', # this comes from lp:account-extra-addons
|
||||
'depends': ['account_easy_reconcile',
|
||||
],
|
||||
'description': """
|
||||
Advanced reconciliation methods for the module account_easy_reconcile.
|
||||
|
||||
90
account_advanced_reconcile/i18n/fr.po
Normal file
90
account_advanced_reconcile/i18n/fr.po
Normal file
@@ -0,0 +1,90 @@
|
||||
# Translation of OpenERP Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * account_advanced_reconcile
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 6.1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2012-11-07 12:34+0000\n"
|
||||
"PO-Revision-Date: 2012-11-07 12:34+0000\n"
|
||||
"Last-Translator: <>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#. module: account_advanced_reconcile
|
||||
#: field:easy.reconcile.advanced,partner_ids:0
|
||||
#: field:easy.reconcile.advanced.ref,partner_ids:0
|
||||
msgid "Restrict on partners"
|
||||
msgstr "Restriction sur les partenaires"
|
||||
|
||||
#. module: account_advanced_reconcile
|
||||
#: field:easy.reconcile.advanced,account_id:0
|
||||
#: field:easy.reconcile.advanced.ref,account_id:0
|
||||
msgid "Account"
|
||||
msgstr "Compte"
|
||||
|
||||
#. module: account_advanced_reconcile
|
||||
#: model:ir.model,name:account_advanced_reconcile.model_account_easy_reconcile_method
|
||||
msgid "reconcile method for account_easy_reconcile"
|
||||
msgstr "Méthode de lettrage pour le module account_easy_reconcile"
|
||||
|
||||
#. module: account_advanced_reconcile
|
||||
#: field:easy.reconcile.advanced,date_base_on:0
|
||||
#: field:easy.reconcile.advanced.ref,date_base_on:0
|
||||
msgid "Date of reconcilation"
|
||||
msgstr "Date de lettrage"
|
||||
|
||||
#. module: account_advanced_reconcile
|
||||
#: field:easy.reconcile.advanced,journal_id:0
|
||||
#: field:easy.reconcile.advanced.ref,journal_id:0
|
||||
msgid "Journal"
|
||||
msgstr "Journal"
|
||||
|
||||
#. module: account_advanced_reconcile
|
||||
#: field:easy.reconcile.advanced,account_profit_id:0
|
||||
#: field:easy.reconcile.advanced.ref,account_profit_id:0
|
||||
msgid "Account Profit"
|
||||
msgstr "Compte de produit"
|
||||
|
||||
#. module: account_advanced_reconcile
|
||||
#: field:easy.reconcile.advanced,filter:0
|
||||
#: field:easy.reconcile.advanced.ref,filter:0
|
||||
msgid "Filter"
|
||||
msgstr "Filtre"
|
||||
|
||||
#. module: account_advanced_reconcile
|
||||
#: view:account.easy.reconcile:0
|
||||
msgid "Advanced. Partner and Ref"
|
||||
msgstr "Avancé. Partenaire et Réf."
|
||||
|
||||
#. module: account_advanced_reconcile
|
||||
#: view:account.easy.reconcile:0
|
||||
msgid "Match multiple debit vs multiple credit entries. Allow partial reconcilation. The lines should have the partner, the credit entry ref. is matched vs the debit entry ref. or name."
|
||||
msgstr "Le Lettrage peut s'effectuer sur plusieurs écritures de débit et crédit. Le Lettrage partiel est autorisé. Les écritures doivent avoir le même partenaire et la référence sur les écritures de crédit doit se retrouver dans la référence ou la description sur les écritures de débit."
|
||||
|
||||
#. module: account_advanced_reconcile
|
||||
#: model:ir.model,name:account_advanced_reconcile.model_easy_reconcile_advanced
|
||||
msgid "easy.reconcile.advanced"
|
||||
msgstr "easy.reconcile.advanced"
|
||||
|
||||
#. module: account_advanced_reconcile
|
||||
#: field:easy.reconcile.advanced,account_lost_id:0
|
||||
#: field:easy.reconcile.advanced.ref,account_lost_id:0
|
||||
msgid "Account Lost"
|
||||
msgstr "Compte de charge"
|
||||
|
||||
#. module: account_advanced_reconcile
|
||||
#: model:ir.model,name:account_advanced_reconcile.model_easy_reconcile_advanced_ref
|
||||
msgid "easy.reconcile.advanced.ref"
|
||||
msgstr "easy.reconcile.advanced.ref"
|
||||
|
||||
#. module: account_advanced_reconcile
|
||||
#: field:easy.reconcile.advanced,write_off:0
|
||||
#: field:easy.reconcile.advanced.ref,write_off:0
|
||||
msgid "Write off allowed"
|
||||
msgstr "Écart autorisé"
|
||||
|
||||
24
account_easy_reconcile/__init__.py
Executable file
24
account_easy_reconcile/__init__.py
Executable file
@@ -0,0 +1,24 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# Copyright 2012 Camptocamp SA (Guewen Baconnier)
|
||||
# Copyright (C) 2010 Sébastien Beau
|
||||
#
|
||||
# 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/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
import easy_reconcile
|
||||
import base_reconciliation
|
||||
import simple_reconciliation
|
||||
56
account_easy_reconcile/__openerp__.py
Executable file
56
account_easy_reconcile/__openerp__.py
Executable file
@@ -0,0 +1,56 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# Copyright 2012 Camptocamp SA (Guewen Baconnier)
|
||||
# Copyright (C) 2010 Sébastien Beau
|
||||
#
|
||||
# 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/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
{
|
||||
"name" : "Easy Reconcile",
|
||||
"version" : "1.1",
|
||||
"depends" : ["account", "base_scheduler_creator"
|
||||
],
|
||||
"author" : "Akretion,Camptocamp",
|
||||
"description": """
|
||||
This is a shared work between Akretion and Camptocamp in order to provide:
|
||||
- reconciliation facilities for big volume of transactions
|
||||
- setup different profiles of reconciliation by account
|
||||
- each profile can use many methods of reconciliation
|
||||
- this module is also a base to create others reconciliation methods
|
||||
which can plug in the profiles
|
||||
- a profile a reconciliation can be run manually or by a cron
|
||||
- monitoring of reconcilation runs with a few logs
|
||||
|
||||
2 simple reconciliation methods are integrated in this module, the simple
|
||||
reconciliations works on 2 lines (1 debit / 1 credit) and do not allows
|
||||
partial reconcilation, they also match on 1 key, partner or entry name.
|
||||
|
||||
You may be interested to install also the account_advanced_reconciliation
|
||||
module available at: https://code.launchpad.net/c2c-financial-addons
|
||||
This latter add more complex reconciliations, allows multiple lines and partial.
|
||||
|
||||
""",
|
||||
"website" : "http://www.akretion.com/",
|
||||
"category" : "Finance",
|
||||
"init_xml" : [],
|
||||
"demo_xml" : [],
|
||||
"update_xml" : ["easy_reconcile.xml"],
|
||||
'license': 'AGPL-3',
|
||||
"auto_install": False,
|
||||
"installable": True,
|
||||
|
||||
}
|
||||
207
account_easy_reconcile/base_reconciliation.py
Normal file
207
account_easy_reconcile/base_reconciliation.py
Normal file
@@ -0,0 +1,207 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# Copyright 2012 Camptocamp SA (Guewen Baconnier)
|
||||
# Copyright (C) 2010 Sébastien Beau
|
||||
#
|
||||
# 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.orm import AbstractModel
|
||||
from openerp.osv import fields
|
||||
from operator import itemgetter, attrgetter
|
||||
|
||||
|
||||
class easy_reconcile_base(AbstractModel):
|
||||
"""Abstract Model for reconciliation methods"""
|
||||
|
||||
_name = 'easy.reconcile.base'
|
||||
|
||||
_inherit = 'easy.reconcile.options'
|
||||
_auto = True # restore property set to False by AbstractModel
|
||||
|
||||
_columns = {
|
||||
'account_id': fields.many2one('account.account', 'Account', required=True),
|
||||
'partner_ids': fields.many2many('res.partner',
|
||||
string="Restrict on partners"),
|
||||
# other columns are inherited from easy.reconcile.options
|
||||
}
|
||||
|
||||
def automatic_reconcile(self, cr, uid, ids, context=None):
|
||||
"""
|
||||
:return: list of reconciled ids, list of partially reconciled entries
|
||||
"""
|
||||
if isinstance(ids, (int, long)):
|
||||
ids = [ids]
|
||||
assert len(ids) == 1, "Has to be called on one id"
|
||||
rec = self.browse(cr, uid, ids[0], context=context)
|
||||
return self._action_rec(cr, uid, rec, context=context)
|
||||
|
||||
def _action_rec(self, cr, uid, rec, context=None):
|
||||
"""Must be inherited to implement the reconciliation
|
||||
:return: list of reconciled ids
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
def _base_columns(self, rec):
|
||||
"""Mandatory columns for move lines queries
|
||||
An extra column aliased as `key` should be defined
|
||||
in each query."""
|
||||
aml_cols = (
|
||||
'id',
|
||||
'debit',
|
||||
'credit',
|
||||
'date',
|
||||
'period_id',
|
||||
'ref',
|
||||
'name',
|
||||
'partner_id',
|
||||
'account_id',
|
||||
'move_id')
|
||||
return ["account_move_line.%s" % col for col in aml_cols]
|
||||
|
||||
def _select(self, rec, *args, **kwargs):
|
||||
return "SELECT %s" % ', '.join(self._base_columns(rec))
|
||||
|
||||
def _from(self, rec, *args, **kwargs):
|
||||
return "FROM account_move_line"
|
||||
|
||||
def _where(self, rec, *args, **kwargs):
|
||||
where = ("WHERE account_move_line.account_id = %s "
|
||||
"AND account_move_line.reconcile_id IS NULL ")
|
||||
# it would be great to use dict for params
|
||||
# but as we use _where_calc in _get_filter
|
||||
# which returns a list, we have to
|
||||
# accomodate with that
|
||||
params = [rec.account_id.id]
|
||||
|
||||
if rec.partner_ids:
|
||||
where += " AND account_move_line.partner_id IN %s"
|
||||
params.append(tuple([l.id for l in rec.partner_ids]))
|
||||
return where, params
|
||||
|
||||
def _get_filter(self, cr, uid, rec, context):
|
||||
ml_obj = self.pool.get('account.move.line')
|
||||
where = ''
|
||||
params = []
|
||||
if rec.filter:
|
||||
dummy, where, params = ml_obj._where_calc(
|
||||
cr, uid, eval(rec.filter), context=context).get_sql()
|
||||
if where:
|
||||
where = " AND %s" % where
|
||||
return where, params
|
||||
|
||||
def _below_writeoff_limit(self, cr, uid, rec, lines,
|
||||
writeoff_limit, context=None):
|
||||
precision = self.pool.get('decimal.precision').precision_get(
|
||||
cr, uid, 'Account')
|
||||
keys = ('debit', 'credit')
|
||||
sums = reduce(
|
||||
lambda line, memo:
|
||||
dict((key, value + memo[key])
|
||||
for key, value
|
||||
in line.iteritems()
|
||||
if key in keys), lines)
|
||||
|
||||
debit, credit = sums['debit'], sums['credit']
|
||||
writeoff_amount = round(debit - credit, precision)
|
||||
return bool(writeoff_limit >= abs(writeoff_amount)), debit, credit
|
||||
|
||||
def _get_rec_date(self, cr, uid, rec, lines, based_on='end_period_last_credit', context=None):
|
||||
period_obj = self.pool.get('account.period')
|
||||
|
||||
def last_period(mlines):
|
||||
period_ids = [ml['period_id'] for ml in mlines]
|
||||
periods = period_obj.browse(
|
||||
cr, uid, period_ids, context=context)
|
||||
return max(periods, key=attrgetter('date_stop'))
|
||||
|
||||
def last_date(mlines):
|
||||
return max(mlines, key=itemgetter('date'))
|
||||
|
||||
def credit(mlines):
|
||||
return [l for l in mlines if l['credit'] > 0]
|
||||
|
||||
def debit(mlines):
|
||||
return [l for l in mlines if l['debit'] > 0]
|
||||
|
||||
if based_on == 'end_period_last_credit':
|
||||
return last_period(credit(lines)).date_stop
|
||||
if based_on == 'end_period':
|
||||
return last_period(lines).date_stop
|
||||
elif based_on == 'newest':
|
||||
return last_date(lines)['date']
|
||||
elif based_on == 'newest_credit':
|
||||
return last_date(credit(lines))['date']
|
||||
elif based_on == 'newest_debit':
|
||||
return last_date(debit(lines))['date']
|
||||
# reconcilation date will be today
|
||||
# when date is None
|
||||
return None
|
||||
|
||||
def _reconcile_lines(self, cr, uid, rec, lines, allow_partial=False, context=None):
|
||||
""" Try to reconcile given lines
|
||||
|
||||
:param list lines: list of dict of move lines, they must at least
|
||||
contain values for : id, debit, credit
|
||||
:param boolean allow_partial: if True, partial reconciliation will be
|
||||
created, otherwise only Full reconciliation will be created
|
||||
:return: tuple of boolean values, first item is wether the the entries
|
||||
have been reconciled or not, the second is wether the reconciliation
|
||||
is full (True) or partial (False)
|
||||
"""
|
||||
if context is None:
|
||||
context = {}
|
||||
|
||||
ml_obj = self.pool.get('account.move.line')
|
||||
writeoff = rec.write_off
|
||||
|
||||
keys = ('debit', 'credit')
|
||||
|
||||
line_ids = [l['id'] for l in lines]
|
||||
below_writeoff, sum_debit, sum_credit = self._below_writeoff_limit(
|
||||
cr, uid, rec, lines, writeoff, context=context)
|
||||
date = self._get_rec_date(
|
||||
cr, uid, rec, lines, rec.date_base_on, context=context)
|
||||
|
||||
rec_ctx = dict(context, date_p=date)
|
||||
if below_writeoff:
|
||||
if sum_credit < sum_debit:
|
||||
writeoff_account_id = rec.account_profit_id.id
|
||||
else:
|
||||
writeoff_account_id = rec.account_lost_id.id
|
||||
|
||||
period_id = self.pool.get('account.period').find(
|
||||
cr, uid, dt=date, context=context)[0]
|
||||
|
||||
ml_obj.reconcile(
|
||||
cr, uid,
|
||||
line_ids,
|
||||
type='auto',
|
||||
writeoff_acc_id=writeoff_account_id,
|
||||
writeoff_period_id=period_id,
|
||||
writeoff_journal_id=rec.journal_id.id,
|
||||
context=rec_ctx)
|
||||
return True, True
|
||||
elif allow_partial:
|
||||
ml_obj.reconcile_partial(
|
||||
cr, uid,
|
||||
line_ids,
|
||||
type='manual',
|
||||
context=rec_ctx)
|
||||
return True, False
|
||||
|
||||
return False, False
|
||||
|
||||
206
account_easy_reconcile/easy_reconcile.py
Normal file
206
account_easy_reconcile/easy_reconcile.py
Normal file
@@ -0,0 +1,206 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# Copyright 2012 Camptocamp SA (Guewen Baconnier)
|
||||
# Copyright (C) 2010 Sébastien Beau
|
||||
#
|
||||
# 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/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
import time
|
||||
from openerp.osv.orm import Model, AbstractModel
|
||||
from openerp.osv import fields
|
||||
from openerp.tools.translate import _
|
||||
from openerp.tools import DEFAULT_SERVER_DATETIME_FORMAT
|
||||
|
||||
|
||||
class easy_reconcile_options(AbstractModel):
|
||||
"""Options of a reconciliation profile, columns
|
||||
shared by the configuration of methods and by the
|
||||
reconciliation wizards. This allows decoupling
|
||||
of the methods with the wizards and allows to
|
||||
launch the wizards alone
|
||||
"""
|
||||
|
||||
_name = 'easy.reconcile.options'
|
||||
|
||||
def _get_rec_base_date(self, cr, uid, context=None):
|
||||
return [('end_period_last_credit', 'End of period of most recent credit'),
|
||||
('newest', 'Most recent move line'),
|
||||
('actual', 'Today'),
|
||||
('end_period', 'End of period of most recent move line'),
|
||||
('newest_credit', 'Date of most recent credit'),
|
||||
('newest_debit', 'Date of most recent debit')]
|
||||
|
||||
_columns = {
|
||||
'write_off': fields.float('Write off allowed'),
|
||||
'account_lost_id': fields.many2one('account.account', 'Account Lost'),
|
||||
'account_profit_id': fields.many2one('account.account', 'Account Profit'),
|
||||
'journal_id': fields.many2one('account.journal', 'Journal'),
|
||||
'date_base_on': fields.selection(_get_rec_base_date,
|
||||
required=True,
|
||||
string='Date of reconcilation'),
|
||||
'filter': fields.char('Filter', size=128),
|
||||
}
|
||||
|
||||
_defaults = {
|
||||
'write_off': 0.,
|
||||
'date_base_on': 'end_period_last_credit',
|
||||
}
|
||||
|
||||
|
||||
class account_easy_reconcile_method(Model):
|
||||
|
||||
_name = 'account.easy.reconcile.method'
|
||||
_description = 'reconcile method for account_easy_reconcile'
|
||||
|
||||
_inherit = 'easy.reconcile.options'
|
||||
_auto = True # restore property set to False by AbstractModel
|
||||
|
||||
_order = 'sequence'
|
||||
|
||||
def _get_all_rec_method(self, cr, uid, context=None):
|
||||
return [
|
||||
('easy.reconcile.simple.name', 'Simple. Amount and Name'),
|
||||
('easy.reconcile.simple.partner', 'Simple. Amount and Partner'),
|
||||
('easy.reconcile.simple.reference', 'Simple. Amount and Reference'),
|
||||
]
|
||||
|
||||
def _get_rec_method(self, cr, uid, context=None):
|
||||
return self._get_all_rec_method(cr, uid, context=None)
|
||||
|
||||
_columns = {
|
||||
'name': fields.selection(_get_rec_method, 'Type', size=128, required=True),
|
||||
'sequence': fields.integer('Sequence', required=True,
|
||||
help="The sequence field is used to order the reconcile method"),
|
||||
'task_id': fields.many2one('account.easy.reconcile', 'Task',
|
||||
required=True, ondelete='cascade'),
|
||||
}
|
||||
|
||||
_defaults = {
|
||||
'sequence': 1,
|
||||
}
|
||||
|
||||
def init(self, cr):
|
||||
""" Migration stuff, name is not anymore methods names
|
||||
but models name"""
|
||||
cr.execute("""
|
||||
UPDATE account_easy_reconcile_method
|
||||
SET name = 'easy.reconcile.simple.partner'
|
||||
WHERE name = 'action_rec_auto_partner'
|
||||
""")
|
||||
cr.execute("""
|
||||
UPDATE account_easy_reconcile_method
|
||||
SET name = 'easy.reconcile.simple.name'
|
||||
WHERE name = 'action_rec_auto_name'
|
||||
""")
|
||||
|
||||
|
||||
class account_easy_reconcile(Model):
|
||||
|
||||
_name = 'account.easy.reconcile'
|
||||
_description = 'account easy reconcile'
|
||||
|
||||
def _get_total_unrec(self, cr, uid, ids, name, arg, context=None):
|
||||
obj_move_line = self.pool.get('account.move.line')
|
||||
res = {}
|
||||
for task in self.browse(cr, uid, ids, context=context):
|
||||
res[task.id] = len(obj_move_line.search(
|
||||
cr, uid,
|
||||
[('account_id', '=', task.account.id),
|
||||
('reconcile_id', '=', False),
|
||||
('reconcile_partial_id', '=', False)],
|
||||
context=context))
|
||||
return res
|
||||
|
||||
def _get_partial_rec(self, cr, uid, ids, name, arg, context=None):
|
||||
obj_move_line = self.pool.get('account.move.line')
|
||||
res = {}
|
||||
for task in self.browse(cr, uid, ids, context=context):
|
||||
res[task.id] = len(obj_move_line.search(
|
||||
cr, uid,
|
||||
[('account_id', '=', task.account.id),
|
||||
('reconcile_id', '=', False),
|
||||
('reconcile_partial_id', '!=', False)],
|
||||
context=context))
|
||||
return res
|
||||
|
||||
_columns = {
|
||||
'name': fields.char('Name', size=64, required=True),
|
||||
'account': fields.many2one('account.account', 'Account', required=True),
|
||||
'reconcile_method': fields.one2many('account.easy.reconcile.method', 'task_id', 'Method'),
|
||||
'scheduler': fields.many2one('ir.cron', 'scheduler', readonly=True),
|
||||
'rec_log': fields.text('log', readonly=True),
|
||||
'unreconciled_count': fields.function(_get_total_unrec,
|
||||
type='integer', string='Fully Unreconciled Entries'),
|
||||
'reconciled_partial_count': fields.function(_get_partial_rec,
|
||||
type='integer', string='Partially Reconciled Entries'),
|
||||
}
|
||||
|
||||
def copy_data(self, cr, uid, id, default=None, context=None):
|
||||
if default is None:
|
||||
default = {}
|
||||
default = dict(default, rec_log=False, scheduler=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):
|
||||
return {'account_id': rec_method.task_id.account.id,
|
||||
'write_off': rec_method.write_off,
|
||||
'account_lost_id': rec_method.account_lost_id and \
|
||||
rec_method.account_lost_id.id,
|
||||
'account_profit_id': rec_method.account_profit_id and \
|
||||
rec_method.account_profit_id.id,
|
||||
'journal_id': rec_method.journal_id and rec_method.journal_id.id,
|
||||
'date_base_on': rec_method.date_base_on,
|
||||
'filter': rec_method.filter}
|
||||
|
||||
def run_reconcile(self, cr, uid, ids, context=None):
|
||||
if context is None:
|
||||
context = {}
|
||||
for rec_id in ids:
|
||||
rec = self.browse(cr, uid, rec_id, context=context)
|
||||
total_rec = 0
|
||||
total_partial_rec = 0
|
||||
details = []
|
||||
count = 0
|
||||
for method in rec.reconcile_method:
|
||||
count += 1
|
||||
|
||||
rec_model = self.pool.get(method.name)
|
||||
auto_rec_id = rec_model.create(
|
||||
cr, uid,
|
||||
self._prepare_run_transient(cr, uid, method, context=context),
|
||||
context=context)
|
||||
|
||||
rec_ids, partial_ids = rec_model.automatic_reconcile(
|
||||
cr, uid, auto_rec_id, context=context)
|
||||
|
||||
details.append(_('method %d : full: %d lines, partial: %d lines') % \
|
||||
(count, len(rec_ids), len(partial_ids)))
|
||||
|
||||
total_rec += len(rec_ids)
|
||||
total_partial_rec += len(partial_ids)
|
||||
|
||||
log = self.read(cr, uid, rec_id, ['rec_log'], context=context)['rec_log']
|
||||
log_lines = log and log.splitlines() or []
|
||||
log_lines[0:0] = [_("%s : %d lines have been fully reconciled" \
|
||||
" and %d lines have been partially reconciled (%s)") % \
|
||||
(time.strftime(DEFAULT_SERVER_DATETIME_FORMAT), total_rec,
|
||||
total_partial_rec, ' | '.join(details))]
|
||||
log = "\n".join(log_lines)
|
||||
self.write(cr, uid, rec_id, {'rec_log': log}, context=context)
|
||||
return True
|
||||
|
||||
124
account_easy_reconcile/easy_reconcile.xml
Normal file
124
account_easy_reconcile/easy_reconcile.xml
Normal file
@@ -0,0 +1,124 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<!-- account.easy.reconcile view -->
|
||||
<record id="account_easy_reconcile_form" model="ir.ui.view">
|
||||
<field name="name">account.easy.reconcile.form</field>
|
||||
<field name="priority">20</field>
|
||||
<field name="model">account.easy.reconcile</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Automatic Easy Reconcile">
|
||||
<separator colspan="4" string="Task Information" />
|
||||
<field name="name" select="1"/>
|
||||
<field name="account"/>
|
||||
<field name="unreconciled_count"/>
|
||||
<field name="reconciled_partial_count"/>
|
||||
<field name="scheduler"/>
|
||||
<separator colspan="4" string="Reconcile Method" />
|
||||
<notebook colspan="4">
|
||||
<page name="methods" string="Configuration">
|
||||
<field name="reconcile_method" colspan = "4" nolabel="1"/>
|
||||
</page>
|
||||
<page name="information" string="Information">
|
||||
<separator colspan="4" string="Simple. Amount and Name"/>
|
||||
<label string="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." colspan="4"/>
|
||||
|
||||
<separator colspan="4" string="Simple. Amount and Name"/>
|
||||
<label string="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." colspan="4"/>
|
||||
|
||||
</page>
|
||||
</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>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="account_easy_reconcile_tree" model="ir.ui.view">
|
||||
<field name="name">account.easy.reconcile.tree</field>
|
||||
<field name="priority">20</field>
|
||||
<field name="model">account.easy.reconcile</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Automatic Easy Reconcile">
|
||||
<field name="name"/>
|
||||
<field name="account"/>
|
||||
<field name="scheduler"/>
|
||||
<field name="unreconciled_count"/>
|
||||
<field name="reconciled_partial_count"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_account_easy_reconcile" model="ir.actions.act_window">
|
||||
<field name="name">Easy Automatic Reconcile</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">account.easy.reconcile</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="context">{'wizard_object' : 'account.easy.reconcile', 'function' : 'action_rec_auto', 'object_link' : 'account.easy.reconcile' }</field>
|
||||
</record>
|
||||
|
||||
|
||||
<!-- account.easy.reconcile.method view -->
|
||||
|
||||
<record id="account_easy_reconcile_method_form" model="ir.ui.view">
|
||||
<field name="name">account.easy.reconcile.method.form</field>
|
||||
<field name="priority">20</field>
|
||||
<field name="model">account.easy.reconcile.method</field>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Automatic Easy Reconcile Method">
|
||||
<field name="sequence"/>
|
||||
<field name="name"/>
|
||||
<field name="write_off"/>
|
||||
<field name="account_lost_id" attrs="{'required':[('write_off','>',0)]}"/>
|
||||
<field name="account_profit_id" attrs="{'required':[('write_off','>',0)]}"/>
|
||||
<field name="journal_id" attrs="{'required':[('write_off','>',0)]}"/>
|
||||
<field name="date_base_on"/>
|
||||
<field name="filter" groups="base.group_extended"/>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="account_easy_reconcile_method_tree" model="ir.ui.view">
|
||||
<field name="name">account.easy.reconcile.method.tree</field>
|
||||
<field name="priority">20</field>
|
||||
<field name="model">account.easy.reconcile.method</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree editable="top" string="Automatic Easy Reconcile Method">
|
||||
<field name="sequence"/>
|
||||
<field name="name"/>
|
||||
<field name="write_off"/>
|
||||
<field name="account_lost_id" attrs="{'required':[('write_off','>',0)]}"/>
|
||||
<field name="account_profit_id" attrs="{'required':[('write_off','>',0)]}"/>
|
||||
<field name="journal_id" attrs="{'required':[('write_off','>',0)]}"/>
|
||||
<field name="date_base_on"/>
|
||||
<field name="filter"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- menu item -->
|
||||
|
||||
<menuitem action="action_account_easy_reconcile" id="menu_easy_reconcile" parent="account.periodical_processing_reconciliation"/>
|
||||
|
||||
|
||||
<!-- button on the left -->
|
||||
|
||||
<record id="ir_action_create_scheduler_in_easy_reconcile" model="ir.values">
|
||||
<field name="key2">client_action_multi</field>
|
||||
<field name="model">account.easy.reconcile</field>
|
||||
<field name="name">Create a Scheduler</field>
|
||||
<field eval="'ir.actions.act_window,%d'%ref('base_scheduler_creator.action_scheduler_creator_wizard')" name="value"/>
|
||||
<field eval="True" name="object"/>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
118
account_easy_reconcile/i18n/fr.po
Normal file
118
account_easy_reconcile/i18n/fr.po
Normal file
@@ -0,0 +1,118 @@
|
||||
# Translation of OpenERP Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * account_easy_reconcile
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 6.1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2012-11-07 12:59+0000\n"
|
||||
"PO-Revision-Date: 2012-11-07 12:59+0000\n"
|
||||
"Last-Translator: <>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:account.easy.reconcile:0
|
||||
msgid "Information"
|
||||
msgstr "Information"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:account.easy.reconcile.method:0
|
||||
msgid "Automatic Easy Reconcile Method"
|
||||
msgstr "Méthode de léttrage 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 "Log"
|
||||
msgstr "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 "Automatic Easy Reconcile"
|
||||
msgstr "Léttrage 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 léttrage"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:account.easy.reconcile:0
|
||||
msgid "Start Auto Reconcilation"
|
||||
msgstr "Lancer le léttrage automatisé"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_name
|
||||
msgid "easy.reconcile.simple.name"
|
||||
msgstr "Léttrage automatisé.simple.Description"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_options
|
||||
msgid "easy.reconcile.options"
|
||||
msgstr "Léttrage automatisé.options"
|
||||
|
||||
#. 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.model,name:account_easy_reconcile.model_easy_reconcile_simple
|
||||
msgid "easy.reconcile.simple"
|
||||
msgstr "Léttrage automatisé.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 "Léttrage automatisé"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_reference
|
||||
msgid "easy.reconcile.simple.reference"
|
||||
msgstr "Léttrage automatisé.simple.réference"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:account.easy.reconcile:0
|
||||
msgid "Reconcile Method"
|
||||
msgstr "Méthode de léttrage"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_base
|
||||
msgid "easy.reconcile.base"
|
||||
msgstr "Léttrage automatisé.base"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:account.easy.reconcile:0
|
||||
msgid "Configuration"
|
||||
msgstr "Configuration"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_partner
|
||||
msgid "easy.reconcile.simple.partner"
|
||||
msgstr "Léttrage automatisé.simple.partenaire"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:account.easy.reconcile:0
|
||||
msgid "Task Information"
|
||||
msgstr "Information sur la tâche"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile
|
||||
msgid "account easy reconcile"
|
||||
msgstr "Léttrage automatisé"
|
||||
|
||||
13
account_easy_reconcile/security/ir.model.access.csv
Normal file
13
account_easy_reconcile/security/ir.model.access.csv
Normal file
@@ -0,0 +1,13 @@
|
||||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
access_easy_reconcile_options_acc_user,easy.reconcile.options,model_easy_reconcile_options,account.group_account_user,1,0,0,0
|
||||
access_account_easy_reconcile_method_acc_user,account.easy.reconcile.method,model_account_easy_reconcile_method,account.group_account_user,1,0,0,0
|
||||
access_account_easy_reconcile_acc_user,account.easy.reconcile,model_account_easy_reconcile,account.group_account_user,1,1,0,0
|
||||
access_easy_reconcile_simple_name_acc_user,easy.reconcile.simple.name,model_easy_reconcile_simple_name,account.group_account_user,1,0,0,0
|
||||
access_easy_reconcile_simple_partner_acc_user,easy.reconcile.simple.partner,model_easy_reconcile_simple_partner,account.group_account_user,1,0,0,0
|
||||
access_easy_reconcile_simple_reference_acc_user,easy.reconcile.simple.reference,model_easy_reconcile_simple_reference,account.group_account_user,1,0,0,0
|
||||
access_easy_reconcile_options_acc_mgr,easy.reconcile.options,model_easy_reconcile_options,account.group_account_user,1,0,0,0
|
||||
access_account_easy_reconcile_method_acc_mgr,account.easy.reconcile.method,model_account_easy_reconcile_method,account.group_account_user,1,1,1,1
|
||||
access_account_easy_reconcile_acc_mgr,account.easy.reconcile,model_account_easy_reconcile,account.group_account_user,1,1,1,1
|
||||
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_reference_acc_mgr,easy.reconcile.simple.reference,model_easy_reconcile_simple_reference,account.group_account_user,1,0,0,0
|
||||
|
122
account_easy_reconcile/simple_reconciliation.py
Normal file
122
account_easy_reconcile/simple_reconciliation.py
Normal file
@@ -0,0 +1,122 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# Copyright 2012 Camptocamp SA (Guewen Baconnier)
|
||||
# Copyright (C) 2010 Sébastien Beau
|
||||
#
|
||||
# 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.orm import AbstractModel, TransientModel
|
||||
|
||||
|
||||
class easy_reconcile_simple(AbstractModel):
|
||||
|
||||
_name = 'easy.reconcile.simple'
|
||||
_inherit = 'easy.reconcile.base'
|
||||
|
||||
# has to be subclassed
|
||||
# field name used as key for matching the move lines
|
||||
_key_field = None
|
||||
|
||||
def rec_auto_lines_simple(self, cr, uid, rec, lines, context=None):
|
||||
if context is None:
|
||||
context = {}
|
||||
|
||||
if self._key_field is None:
|
||||
raise ValueError("_key_field has to be defined")
|
||||
|
||||
count = 0
|
||||
res = []
|
||||
while (count < len(lines)):
|
||||
for i in range(count+1, len(lines)):
|
||||
writeoff_account_id = False
|
||||
if lines[count][self._key_field] != lines[i][self._key_field]:
|
||||
break
|
||||
|
||||
check = False
|
||||
if lines[count]['credit'] > 0 and lines[i]['debit'] > 0:
|
||||
credit_line = lines[count]
|
||||
debit_line = lines[i]
|
||||
check = True
|
||||
elif lines[i]['credit'] > 0 and lines[count]['debit'] > 0:
|
||||
credit_line = lines[i]
|
||||
debit_line = lines[count]
|
||||
check = True
|
||||
if not check:
|
||||
continue
|
||||
|
||||
reconciled, dummy = self._reconcile_lines(
|
||||
cr, uid, rec, [credit_line, debit_line],
|
||||
allow_partial=False, context=context)
|
||||
if reconciled:
|
||||
res += [credit_line['id'], debit_line['id']]
|
||||
del lines[i]
|
||||
break
|
||||
count += 1
|
||||
return res, [] # empty list for partial, only full rec in "simple" rec
|
||||
|
||||
def _simple_order(self, rec, *args, **kwargs):
|
||||
return "ORDER BY account_move_line.%s" % self._key_field
|
||||
|
||||
def _action_rec(self, cr, uid, rec, context=None):
|
||||
"""Match only 2 move lines, do not allow partial reconcile"""
|
||||
select = self._select(rec)
|
||||
select += ", account_move_line.%s " % self._key_field
|
||||
where, params = self._where(rec)
|
||||
where += " AND account_move_line.%s IS NOT NULL " % self._key_field
|
||||
|
||||
where2, params2 = self._get_filter(cr, uid, rec, context=context)
|
||||
query = ' '.join((
|
||||
select,
|
||||
self._from(rec),
|
||||
where, where2,
|
||||
self._simple_order(rec)))
|
||||
|
||||
cr.execute(query, params + params2)
|
||||
lines = cr.dictfetchall()
|
||||
return self.rec_auto_lines_simple(cr, uid, rec, lines, context)
|
||||
|
||||
|
||||
class easy_reconcile_simple_name(TransientModel):
|
||||
|
||||
_name = 'easy.reconcile.simple.name'
|
||||
_inherit = 'easy.reconcile.simple'
|
||||
_auto = True # False when inherited from AbstractModel
|
||||
|
||||
# has to be subclassed
|
||||
# field name used as key for matching the move lines
|
||||
_key_field = 'name'
|
||||
|
||||
|
||||
class easy_reconcile_simple_partner(TransientModel):
|
||||
|
||||
_name = 'easy.reconcile.simple.partner'
|
||||
_inherit = 'easy.reconcile.simple'
|
||||
_auto = True # False when inherited from AbstractModel
|
||||
|
||||
# has to be subclassed
|
||||
# field name used as key for matching the move lines
|
||||
_key_field = 'partner_id'
|
||||
|
||||
class easy_reconcile_simple_reference(TransientModel):
|
||||
|
||||
_name = 'easy.reconcile.simple.reference'
|
||||
_inherit = 'easy.reconcile.simple'
|
||||
_auto = True # False when inherited from AbstractModel
|
||||
|
||||
# has to be subclassed
|
||||
# field name used as key for matching the move lines
|
||||
_key_field = 'ref'
|
||||
180
account_statement_base_completion/i18n/fr.po
Normal file
180
account_statement_base_completion/i18n/fr.po
Normal file
@@ -0,0 +1,180 @@
|
||||
#. module: account_statement_base_completion
|
||||
#: view:account.statement.completion.rule:0
|
||||
msgid "Related Profiles"
|
||||
msgstr "Profils liés"
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: help:account.statement.completion.rule,sequence:0
|
||||
msgid "Lower means parsed first."
|
||||
msgstr "Plus petite séquence analysée en premier."
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: code:addons/account_statement_base_completion/statement.py:150
|
||||
#: code:addons/account_statement_base_completion/statement.py:182
|
||||
#: code:addons/account_statement_base_completion/statement.py:219
|
||||
#: code:addons/account_statement_base_completion/statement.py:252
|
||||
#, python-format
|
||||
msgid "Line named \"%s\" (Ref:%s) was matched by more than one partner."
|
||||
msgstr "La ligne nommée \"%s\" (Ref:%s) correspond à plusieurs partenaires."
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: field:account.bank.statement,completion_logs:0
|
||||
msgid "Completion Log"
|
||||
msgstr "Journal des complétions"
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: field:account.bank.statement.line,label:0
|
||||
msgid "Label"
|
||||
msgstr "Description"
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: help:account.bank.statement.line,label:0
|
||||
msgid ""
|
||||
"Generiy field to store a label given from the bank/office on which we "
|
||||
"can base the default/standard providen rule."
|
||||
msgstr ""
|
||||
"Ce champs permet de stocker une description complémentaire fournie par la banque."
|
||||
"Le lettrage avancé pourra être effectué sur ce critère."
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: model:ir.model,name:account_statement_base_completion.model_account_bank_statement
|
||||
msgid "Bank Statement"
|
||||
msgstr "Relevé bancaire"
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: field:account.statement.completion.rule,function_to_call:0
|
||||
msgid "Method"
|
||||
msgstr "Méthode"
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: code:addons/account_statement_base_completion/statement.py:352
|
||||
#, python-format
|
||||
msgid "Bank Statement ID %s has %s lines completed by %s"
|
||||
msgstr "Le relevé bancaire avec l'ID %s a %s lignes completées par %s"
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: field:account.bank.statement.line,additionnal_bank_fields:0
|
||||
msgid "Additionnal infos from bank"
|
||||
msgstr "Informations additionnelles de la banque"
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: view:account.statement.profile:0
|
||||
msgid "Auto-Completion Rules"
|
||||
msgstr "Règles d'auto-complétion"
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: help:account.bank.statement.line,additionnal_bank_fields:0
|
||||
msgid ""
|
||||
"Used by completion and import system. Adds every field that is present in "
|
||||
"your bank/office statement file"
|
||||
msgstr ""
|
||||
"Utilisé au niveau de l'auto-complétion et de l'import. Permet l'ajout de n'importe quel "
|
||||
"champs additionnel communiqué par la banque"
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: view:account.bank.statement:0
|
||||
msgid "Importation related infos"
|
||||
msgstr "Importation des informations liées"
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: model:ir.model,name:account_statement_base_completion.model_account_statement_profile
|
||||
msgid "Statement Profil"
|
||||
msgstr "Profil de relevé"
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: field:account.statement.completion.rule,name:0
|
||||
msgid "Name"
|
||||
msgstr "Nom"
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: constraint:account.statement.profile:0
|
||||
msgid "You need to put a partner if you tic the 'Force partner on bank move' !"
|
||||
msgstr ""
|
||||
"Vous devez indiquer un partenaire si vous avez coché 'Indiquer un partenaire sur la ligne d'écriture de la banque' !"
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: model:ir.model,name:account_statement_base_completion.model_account_bank_statement_line
|
||||
msgid "Bank Statement Line"
|
||||
msgstr "Ligne de relevé bancaire"
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: view:account.statement.completion.rule:0
|
||||
#: model:ir.actions.act_window,name:account_statement_base_completion.action_st_completion_rule_tree
|
||||
#: model:ir.ui.menu,name:account_statement_base_completion.menu_action_st_completion_rule_tree_menu
|
||||
msgid "Statement Completion Rule"
|
||||
msgstr "Règle d'auto-complétion du relevé"
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: model:ir.model,name:account_statement_base_completion.model_account_statement_completion_rule
|
||||
msgid "account.statement.completion.rule"
|
||||
msgstr "account.statement.completion.rule"
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: field:account.statement.completion.rule,profile_ids:0
|
||||
#: field:account.statement.profile,rule_ids:0
|
||||
msgid "Related statement profiles"
|
||||
msgstr "Profils liés"
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: constraint:account.bank.statement.line:0
|
||||
msgid ""
|
||||
"The amount of the voucher must be the same amount as the one on the "
|
||||
"statement line"
|
||||
msgstr ""
|
||||
"Le montant du justificatif doit être identique à celui de la ligne le "
|
||||
"concernant sur le relevé"
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: field:account.bank.statement.line,already_completed:0
|
||||
msgid "Auto-Completed"
|
||||
msgstr "Auto-Completé"
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: view:account.bank.statement:0
|
||||
msgid "Auto Completion"
|
||||
msgstr "Auto-complétion"
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: field:account.statement.completion.rule,sequence:0
|
||||
msgid "Sequence"
|
||||
msgstr "Séquence"
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: constraint:account.bank.statement:0
|
||||
msgid "The journal and period chosen have to belong to the same company."
|
||||
msgstr "Le journal et la période doivent appartenir à la même société."
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: field:res.partner,bank_statement_label:0
|
||||
msgid "Bank Statement Label"
|
||||
msgstr "Description de relevé bancaire"
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: help:account.bank.statement.line,already_completed:0
|
||||
msgid ""
|
||||
"When this checkbox is ticked, the auto-completion process/button will ignore "
|
||||
"this line."
|
||||
msgstr ""
|
||||
"Les lignes cochées seront ignorées lorsque vous cliquez sur le bouton auto-complétion"
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: help:res.partner,bank_statement_label:0
|
||||
msgid ""
|
||||
"Enter the various label found on your bank statement separated by a ; "
|
||||
"If one of this label is include in the bank statement line, "
|
||||
"the partner will be automatically filled (as long as you "
|
||||
"use this method/rules in your statement profile)."
|
||||
msgstr ""
|
||||
"Entrez les différentes descriptions/informations sur votre relevé bancaire séparées par un ';' "
|
||||
"Si l'une d'entre elles figure dans la ligne du relevé, le partenaire correspondant pourra"
|
||||
"être automatiquement retrouvé (à condition d'utiliser un règle de lettrage dans le profil)."
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: model:ir.model,name:account_statement_base_completion.model_res_partner
|
||||
msgid "Partner"
|
||||
msgstr "Partenaire"
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: view:account.bank.statement:0
|
||||
msgid "Completion Logs"
|
||||
msgstr "Journaux d'auto-complétion"
|
||||
@@ -113,7 +113,7 @@ class AccountStatementCompletionRule(Model):
|
||||
]
|
||||
|
||||
_columns={
|
||||
'sequence': fields.integer('Sequence', help="Lower means paresed first."),
|
||||
'sequence': fields.integer('Sequence', help="Lower means parsed first."),
|
||||
'name': fields.char('Name', size=128),
|
||||
'profile_ids': fields.many2many('account.statement.profile',
|
||||
rel='as_rul_st_prof_rel',
|
||||
|
||||
253
account_statement_base_import/i18n/fr.po
Normal file
253
account_statement_base_import/i18n/fr.po
Normal file
@@ -0,0 +1,253 @@
|
||||
#. module: account_statement_base_import
|
||||
#: view:credit.statement.import:0
|
||||
#: model:ir.actions.act_window,name:account_statement_base_import.statement_importer_action
|
||||
msgid "Import statement"
|
||||
msgstr "Import de relevé"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: model:ir.model,name:account_statement_base_import.model_credit_statement_import
|
||||
msgid "credit.statement.import"
|
||||
msgstr "credit.statement.import"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/statement.py:218
|
||||
#, python-format
|
||||
msgid "The statement cannot be created : %s"
|
||||
msgstr "Le relevé ne peut être créé : %s"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: field:credit.statement.import,input_statement:0
|
||||
msgid "Statement file"
|
||||
msgstr "Fichier à importer"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: view:account.statement.profile:0
|
||||
msgid "Import Logs"
|
||||
msgstr "Journaux d'import"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: field:credit.statement.import,journal_id:0
|
||||
msgid "Financial journal to use transaction"
|
||||
msgstr "Journal"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:100
|
||||
#, python-format
|
||||
msgid "Column %s not present in file"
|
||||
msgstr "Colonne %s non présente dans le fichier"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: view:account.statement.profile:0
|
||||
#: model:ir.ui.menu,name:account_statement_base_import.statement_importer_menu
|
||||
msgid "Import Bank Statement"
|
||||
msgstr "Importation de relevé"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: model:ir.model,name:account_statement_base_import.model_account_statement_profile
|
||||
msgid "Statement Profil"
|
||||
msgstr "Profil du relevé"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/statement.py:100
|
||||
#, python-format
|
||||
msgid "Commission line"
|
||||
msgstr "Ligne de commission"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: field:credit.statement.import,commission_account_id:0
|
||||
msgid "Commission account"
|
||||
msgstr "Compte de commission"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/statement.py:172
|
||||
#, python-format
|
||||
msgid "Column %s you try to import is not present in the bank statement line !"
|
||||
msgstr ""
|
||||
"La colonne %s que vous essayez d'importer n'est pas présente dans la ligne de relevé !"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/statement.py:71
|
||||
#, python-format
|
||||
msgid "Bank Statement ID %s have been imported with %s lines "
|
||||
msgstr "Le relevé avec l'ID %s a été importé avec %s lignes "
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: field:account.statement.profile,launch_import_completion:0
|
||||
msgid "Launch completion after import"
|
||||
msgstr "Lancer l'auto-complétion après import"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: field:credit.statement.import,partner_id:0
|
||||
msgid "Credit insitute partner"
|
||||
msgstr "Organisme bancaire"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/statement.py:160
|
||||
#, python-format
|
||||
msgid "No Profile !"
|
||||
msgstr "Aucun Profil !"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: view:account.statement.profile:0
|
||||
msgid "Import related infos"
|
||||
msgstr "Importation des informations liées"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: help:credit.statement.import,force_partner_on_bank:0
|
||||
msgid ""
|
||||
"Tic that box if you want to use the credit insitute "
|
||||
"partner in the "
|
||||
"counterpart of the treasury/banking move."
|
||||
msgstr ""
|
||||
"Cochez cette case si vous voulez utiliser comme partenaire "
|
||||
"l'organisme bancaire au niveau de la ligne de banque"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/wizard/import_statement.py:93
|
||||
#, python-format
|
||||
msgid "Please use a file with an extention"
|
||||
msgstr "Veuillez sélectionner un fichier avec une extension"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/statement.py:161
|
||||
#, python-format
|
||||
msgid "You must provide a valid profile to import a bank statement !"
|
||||
msgstr "Vous devez fournir un profil valide pour importer un relevé !"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: help:credit.statement.import,balance_check:0
|
||||
msgid ""
|
||||
"Tic that box if you want OpenERP to control the start/end "
|
||||
"balance before confirming "
|
||||
"a bank statement. If don't ticked, no balance control will be done."
|
||||
msgstr ""
|
||||
"Cochez cette case si vous souhaitez un contrôle du solde final "
|
||||
"avant la validation du relevé."
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:31
|
||||
#: code:addons/account_statement_base_import/parser/generic_file_parser.py:31
|
||||
#, python-format
|
||||
msgid "Please install python lib xlrd"
|
||||
msgstr "Veuillez installer la bibliothèque python xlrd"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:58
|
||||
#, python-format
|
||||
msgid "Invalide file type %s. please use csv or xls"
|
||||
msgstr "Type de fichier invalide : %s. Veuillez utiliser un csv ou un xls"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: field:account.statement.profile,last_import_date:0
|
||||
msgid "Last Import Date"
|
||||
msgstr "Date de dernier import"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: field:credit.statement.import,commission_analytic_id:0
|
||||
msgid "Commission analytic account"
|
||||
msgstr "Compte analytique de la commission"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: constraint:account.statement.profile:0
|
||||
msgid "You need to put a partner if you tic the 'Force partner on bank move' !"
|
||||
msgstr ""
|
||||
"Vous devez spécifier un partenaire si vous avez coché 'Forcer un partenaire sur la ligne de la banque' !"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/statement.py:217
|
||||
#, python-format
|
||||
msgid "Statement import error"
|
||||
msgstr "Erreur d'import de relevé"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: field:account.bank.statement.line,commission_amount:0
|
||||
msgid "Line Commission Amount"
|
||||
msgstr "Montant de la commission de la ligne"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/statement.py:171
|
||||
#, python-format
|
||||
msgid "Missing column !"
|
||||
msgstr "Colonne manquante !"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: field:account.statement.profile,rec_log:0
|
||||
msgid "log"
|
||||
msgstr "journal"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: field:account.statement.profile,import_type:0
|
||||
msgid "Type of import"
|
||||
msgstr "Type d'import"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: constraint:account.bank.statement.line:0
|
||||
msgid ""
|
||||
"The amount of the voucher must be the same amount as the one on the "
|
||||
"statement line"
|
||||
msgstr ""
|
||||
"Le montant du justificatif doit être identique à celui de la ligne le "
|
||||
"concernant sur le relevé"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: help:account.statement.profile,launch_import_completion:0
|
||||
msgid ""
|
||||
"Tic that box to automatically launch the completion on each "
|
||||
"imported file using this profile."
|
||||
msgstr ""
|
||||
"Cocher cette case pour lancer automatiquement l'auto-complétion sur"
|
||||
"chaque fichier importé avec ce profil."
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: field:credit.statement.import,profile_id:0
|
||||
msgid "Import configuration parameter"
|
||||
msgstr "Paramètres de configuration d'import"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/parser/parser.py:156
|
||||
#, python-format
|
||||
msgid "No buffer file given."
|
||||
msgstr "Pas de fichier tampon donné."
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: view:credit.statement.import:0
|
||||
msgid "Import Parameters Summary"
|
||||
msgstr "Résumé des paramètres d'import"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: field:credit.statement.import,balance_check:0
|
||||
msgid "Balance check"
|
||||
msgstr "Vérification des soldes"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: model:ir.model,name:account_statement_base_import.model_account_bank_statement_line
|
||||
msgid "Bank Statement Line"
|
||||
msgstr "Ligne de relevé bancaire"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: field:credit.statement.import,force_partner_on_bank:0
|
||||
msgid "Force partner on bank move"
|
||||
msgstr "Forcer un partenaire sur la ligne du compte de banque"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: field:credit.statement.import,file_name:0
|
||||
msgid "File Name"
|
||||
msgstr "Nom du fichier"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: field:credit.statement.import,receivable_account_id:0
|
||||
msgid "Force Receivable/Payable Account"
|
||||
msgstr "Forcer le compte Client/Fournisseur"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: help:account.statement.profile,import_type:0
|
||||
msgid ""
|
||||
"Choose here the method by which you want to import bank statement for this "
|
||||
"profile."
|
||||
msgstr ""
|
||||
"Choisissez la méthode d'import de relevé pour ce profil."
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: view:credit.statement.import:0
|
||||
msgid "Cancel"
|
||||
msgstr "Annulation"
|
||||
301
account_statement_ext/i18n/fr.po
Normal file
301
account_statement_ext/i18n/fr.po
Normal file
@@ -0,0 +1,301 @@
|
||||
#. module: account_statement_ext
|
||||
#: model:ir.actions.act_window,name:account_statement_ext.action_treasury_statement_profile_tree
|
||||
#: model:ir.ui.menu,name:account_statement_ext.menu_treasury_statement_profile_tree
|
||||
msgid "Bank Statements Profile"
|
||||
msgstr "Profil de relevé bancaire"
|
||||
|
||||
#. module: account_statement_ext
|
||||
#: code:addons/account_statement_ext/statement.py:423
|
||||
#, python-format
|
||||
msgid "Can not determine account"
|
||||
msgstr "Impossible de trouver le compte"
|
||||
|
||||
#. module: account_statement_ext
|
||||
#: constraint:account.move:0
|
||||
msgid "You can not create more than one move per period on centralized journal"
|
||||
msgstr ""
|
||||
"Vous ne pouvez pas créer plus d'un mouvement par période dans un journal "
|
||||
"centralisateur"
|
||||
|
||||
#. module: account_statement_ext
|
||||
#: view:account.statement.profile:0
|
||||
msgid "Import statement"
|
||||
msgstr "Importation du relevé"
|
||||
|
||||
#. module: account_statement_ext
|
||||
#: field:account.statement.profile,bank_statement_prefix:0
|
||||
msgid "Bank Statement Prefix"
|
||||
msgstr "Préfixe du N° de Relevé"
|
||||
|
||||
#. module: account_statement_ext
|
||||
#: field:account.bank.statement,profile_id:0
|
||||
msgid "Profil"
|
||||
msgstr "Profil"
|
||||
|
||||
#. module: account_statement_ext
|
||||
#: code:addons/account_statement_ext/statement.py:362
|
||||
#, python-format
|
||||
msgid "Please verify that an account is defined in the journal."
|
||||
msgstr "Veuillez vérifier que ce compte est défini au niveau du journal."
|
||||
|
||||
#. module: account_statement_ext
|
||||
#: code:addons/account_statement_ext/statement.py:361
|
||||
#, python-format
|
||||
msgid "Configuration Error !"
|
||||
msgstr "Erreur de configuration !"
|
||||
|
||||
#. module: account_statement_ext
|
||||
#: field:account.statement.profile,receivable_account_id:0
|
||||
msgid "Force Receivable/Payable Account"
|
||||
msgstr "Remplacer le compte client/fournisseur par défaut par "
|
||||
|
||||
#. module: account_statement_ext
|
||||
#: field:account.statement.profile,commission_account_id:0
|
||||
msgid "Commission account"
|
||||
msgstr "Compte de commission"
|
||||
|
||||
#. module: account_statement_ext
|
||||
#: view:account.bank.statement:0
|
||||
#: field:account.bank.statement,credit_partner_id:0
|
||||
msgid "Financial Partner"
|
||||
msgstr "Banque ou Organisme financier"
|
||||
|
||||
#. module: account_statement_ext
|
||||
#: code:addons/account_statement_ext/statement.py:307
|
||||
#: code:addons/account_statement_ext/statement.py:372
|
||||
#, python-format
|
||||
msgid "Error !"
|
||||
msgstr "Erreur !"
|
||||
|
||||
#. module: account_statement_ext
|
||||
#: field:account.statement.profile,partner_id:0
|
||||
msgid "Bank/Payment Office partner"
|
||||
msgstr "Banque ou Organisme financier"
|
||||
|
||||
#. module: account_statement_ext
|
||||
#: code:addons/account_statement_ext/statement.py:373
|
||||
#, python-format
|
||||
msgid "The account entries lines are not in valid state."
|
||||
msgstr "Les écritures comptables ne sont pas équilibrées."
|
||||
|
||||
#. module: account_statement_ext
|
||||
#: constraint:account.statement.profile:0
|
||||
msgid "You need to put a partner if you tic the 'Force partner on bank move' !"
|
||||
msgstr ""
|
||||
"Vous devez choisir un partenaire si vous cochez 'Remplacer le compte client/fournisseur' !"
|
||||
|
||||
#. module: account_statement_ext
|
||||
#: help:account.statement.profile,force_partner_on_bank:0
|
||||
msgid ""
|
||||
"Tic that box if you want to use the credit insitute "
|
||||
"partner in the "
|
||||
"counterpart of the intermediat/banking move."
|
||||
msgstr ""
|
||||
"Cochez cette case si vous voulez utiliser le partenaire financier dans "
|
||||
"la contrepartie de l'écriture."
|
||||
|
||||
#. module: account_statement_ext
|
||||
#: report:addons/account_statement_ext/report/bank_statement_report.mako:20
|
||||
msgid "Date"
|
||||
msgstr "Date"
|
||||
|
||||
#. module: account_statement_ext
|
||||
#: code:addons/account_statement_ext/statement.py:308
|
||||
#, python-format
|
||||
msgid "Journal item \"%s\" is not valid."
|
||||
msgstr "L'écriture \"%s\" n'est pas équilibrée."
|
||||
|
||||
#. module: account_statement_ext
|
||||
#: code:addons/account_statement_ext/statement.py:424
|
||||
#, python-format
|
||||
msgid "Please ensure that minimal properties are set"
|
||||
msgstr "Veuillez vérifiez que les propriétés minimales sont bien paramétrées"
|
||||
|
||||
#. module: account_statement_ext
|
||||
#: view:account.bank.statement:0
|
||||
msgid "Balance Check"
|
||||
msgstr "Contrôle sur solde final"
|
||||
|
||||
#. module: account_statement_ext
|
||||
#: view:account.bank.statement:0
|
||||
msgid "Profile Details"
|
||||
msgstr "Détails du profil"
|
||||
|
||||
#. module: account_statement_ext
|
||||
#: model:ir.model,name:account_statement_ext.model_account_statement_profile
|
||||
msgid "Statement Profil"
|
||||
msgstr "Profil du relevé"
|
||||
|
||||
#. module: account_statement_ext
|
||||
#: field:account.statement.profile,name:0
|
||||
msgid "Name"
|
||||
msgstr "Nom"
|
||||
|
||||
#. module: account_statement_ext
|
||||
#: field:account.statement.profile,commission_analytic_id:0
|
||||
msgid "Commission analytic account"
|
||||
msgstr "Compte analytique où affecter la commission"
|
||||
|
||||
#. module: account_statement_ext
|
||||
#: constraint:account.move:0
|
||||
msgid "The date of your Journal Entry is not in the defined period!"
|
||||
msgstr "La date de l'écriture n'est pas dans la période définie!"
|
||||
|
||||
#. module: account_statement_ext
|
||||
#: help:account.statement.profile,balance_check:0
|
||||
msgid ""
|
||||
"Tic that box if you want OpenERP to control the start/"
|
||||
"end balance before "
|
||||
"confirming a bank statement. If don't ticked, "
|
||||
"no balance control will "
|
||||
"be done."
|
||||
msgstr ""
|
||||
"Cochez cette case si vous voulez qu'OpenERP fasse "
|
||||
"une vérification au niveau du solde final avant confirmation."
|
||||
|
||||
#. module: account_statement_ext
|
||||
#: code:addons/account_statement_ext/report/bank_statement_report.py:40
|
||||
#: code:addons/account_statement_ext/report/bank_statement_report.py:48
|
||||
#, python-format
|
||||
msgid "BORDEREAU DE REMISE DE CHEQUES"
|
||||
msgstr "BORDEREAU DE REMISE DE CHEQUES"
|
||||
|
||||
#. module: account_statement_ext
|
||||
#: code:addons/account_statement_ext/statement.py:400
|
||||
#, python-format
|
||||
msgid "Statement %s is confirmed, journal items are created."
|
||||
msgstr "Le relevé %s est confirmé, les écritures comptables ont été générées."
|
||||
|
||||
#. module: account_statement_ext
|
||||
#: report:addons/account_statement_ext/report/bank_statement_report.mako:37
|
||||
msgid "Montant"
|
||||
msgstr "Montant"
|
||||
|
||||
#. module: account_statement_ext
|
||||
#: code:addons/account_statement_ext/statement.py:394
|
||||
#, python-format
|
||||
msgid "Error"
|
||||
msgstr "Erreur"
|
||||
|
||||
#. module: account_statement_ext
|
||||
#: help:account.statement.profile,partner_id:0
|
||||
msgid ""
|
||||
"Put a partner if you want to have it on the commission "
|
||||
"move (and optionaly on the counterpart "
|
||||
"of the intermediate/banking move if "
|
||||
"you tic the corresponding checkbox)."
|
||||
msgstr ""
|
||||
"Sélectionnez un partenaire si vous voulez l'avoir dans l'écriture comptable "
|
||||
"au niveau de la commision (et du compte de trésorerie selon les cas si vous cochez "
|
||||
"la case 'Indiquer un partenaire sur la ligne d'écriture de la banque ou organisme')."
|
||||
|
||||
#. module: account_statement_ext
|
||||
#: constraint:account.bank.statement.line:0
|
||||
msgid ""
|
||||
"The amount of the voucher must be the same amount as the one on the "
|
||||
"statement line"
|
||||
msgstr ""
|
||||
"Le montant du justificatif doit être identique à celui de la ligne le "
|
||||
"concernant sur le relevé"
|
||||
|
||||
#. module: account_statement_ext
|
||||
#: code:addons/account_statement_ext/report/bank_statement_report.py:57
|
||||
#, python-format
|
||||
msgid "Page"
|
||||
msgstr "Page"
|
||||
|
||||
#. module: account_statement_ext
|
||||
#: field:account.bank.statement,balance_check:0
|
||||
#: field:account.statement.profile,balance_check:0
|
||||
msgid "Balance check"
|
||||
msgstr "Activation contrôle du solde final"
|
||||
|
||||
#. module: account_statement_ext
|
||||
#: model:ir.model,name:account_statement_ext.model_account_bank_statement_line
|
||||
msgid "Bank Statement Line"
|
||||
msgstr "Ligne de relevé bancaire"
|
||||
|
||||
#. module: account_statement_ext
|
||||
#: model:ir.model,name:account_statement_ext.model_account_move
|
||||
msgid "Account Entry"
|
||||
msgstr "Écriture comptable"
|
||||
|
||||
#. module: account_statement_ext
|
||||
#: field:account.statement.profile,force_partner_on_bank:0
|
||||
msgid "Force partner on bank move"
|
||||
msgstr "Indiquer un partenaire sur la ligne d'écriture de la banque"
|
||||
|
||||
#. module: account_statement_ext
|
||||
#: report:addons/account_statement_ext/report/bank_statement_report.mako:33
|
||||
msgid "Reference"
|
||||
msgstr "Référence"
|
||||
|
||||
#. module: account_statement_ext
|
||||
#: code:addons/account_statement_ext/statement.py:380
|
||||
#, python-format
|
||||
msgid "No Analytic Journal !"
|
||||
msgstr "Pas de journal analytique trouvé !"
|
||||
|
||||
#. module: account_statement_ext
|
||||
#: code:addons/account_statement_ext/report/bank_statement_report.py:57
|
||||
#, python-format
|
||||
msgid "of"
|
||||
msgstr "de"
|
||||
|
||||
#. module: account_statement_ext
|
||||
#: field:account.statement.profile,bank_statement_ids:0
|
||||
msgid "Bank Statement Imported"
|
||||
msgstr "Relevé importé"
|
||||
|
||||
#. module: account_statement_ext
|
||||
#: field:account.bank.statement.line,period_id:0
|
||||
msgid "Period"
|
||||
msgstr "Période"
|
||||
|
||||
#. module: account_statement_ext
|
||||
#: constraint:account.bank.statement:0
|
||||
msgid "The journal and period chosen have to belong to the same company."
|
||||
msgstr "Le journal et la période doivent appartenir à la même société."
|
||||
|
||||
#. module: account_statement_ext
|
||||
#: model:ir.actions.report.xml,name:account_statement_ext.report_bank_statement_webkit
|
||||
#: model:ir.model,name:account_statement_ext.model_account_bank_statement
|
||||
msgid "Bank Statement"
|
||||
msgstr "Relevé bancaire"
|
||||
|
||||
#. module: account_statement_ext
|
||||
#: report:addons/account_statement_ext/report/bank_statement_report.mako:35
|
||||
msgid "Partenaire"
|
||||
msgstr "Partenaire"
|
||||
|
||||
#. module: account_statement_ext
|
||||
#: help:account.statement.profile,receivable_account_id:0
|
||||
msgid ""
|
||||
"Choose a receivable account to force the "
|
||||
"default debit/credit "
|
||||
"account (eg. an intermediat bank account instead "
|
||||
"of default debitors)."
|
||||
msgstr ""
|
||||
"Sélectionnez un compte de type client ou fournisseur afin de remplacer "
|
||||
"le compte client ou fournisseur par défaut"
|
||||
|
||||
#. module: account_statement_ext
|
||||
#: code:addons/account_statement_ext/statement.py:381
|
||||
#, python-format
|
||||
msgid "You have to assign an analytic journal on the '%s' journal!"
|
||||
msgstr "Vous devez associer un journal analytique au journal comptable '%s'."
|
||||
|
||||
#. module: account_statement_ext
|
||||
#: model:ir.actions.act_window,name:account_statement_ext.act_bank_statement_from_profile
|
||||
msgid "Open Statements"
|
||||
msgstr "Relevés ouverts"
|
||||
|
||||
#. module: account_statement_ext
|
||||
#: field:account.statement.profile,journal_id:0
|
||||
msgid "Financial journal to use for transaction"
|
||||
msgstr "Journal à utiliser pour cette écriture"
|
||||
|
||||
#. module: account_statement_ext
|
||||
#: report:addons/account_statement_ext/report/bank_statement_report.mako:19
|
||||
msgid "Bordereau"
|
||||
msgstr "Bordereau"
|
||||
Reference in New Issue
Block a user