mirror of
https://github.com/OCA/account-reconcile.git
synced 2025-01-20 12:27:39 +02:00
[Fix] Merge
This commit is contained in:
@@ -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 7.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2014-01-21 11:54+0000\n"
|
||||
"PO-Revision-Date: 2014-01-21 11:54+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 ""
|
||||
|
||||
#. module: account_advanced_reconcile
|
||||
#: field:easy.reconcile.advanced,account_id:0
|
||||
#: field:easy.reconcile.advanced.ref,account_id:0
|
||||
msgid "Account"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_advanced_reconcile
|
||||
#: model:ir.model,name:account_advanced_reconcile.model_account_easy_reconcile_method
|
||||
msgid "reconcile method for account_easy_reconcile"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_advanced_reconcile
|
||||
#: field:easy.reconcile.advanced,journal_id:0
|
||||
#: field:easy.reconcile.advanced.ref,journal_id:0
|
||||
msgid "Journal"
|
||||
msgstr ""
|
||||
|
||||
#. 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 ""
|
||||
|
||||
#. module: account_advanced_reconcile
|
||||
#: view:account.easy.reconcile:0
|
||||
msgid "Match multiple debit vs multiple credit entries. Allow partial reconciliation. The lines should have the partner, the credit entry ref. is matched vs the debit entry ref. or name."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_advanced_reconcile
|
||||
#: field:easy.reconcile.advanced,filter:0
|
||||
#: field:easy.reconcile.advanced.ref,filter:0
|
||||
msgid "Filter"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_advanced_reconcile
|
||||
#: view:account.easy.reconcile:0
|
||||
msgid "Advanced. Partner and Ref"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_advanced_reconcile
|
||||
#: field:easy.reconcile.advanced,date_base_on:0
|
||||
#: field:easy.reconcile.advanced.ref,date_base_on:0
|
||||
msgid "Date of reconciliation"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_advanced_reconcile
|
||||
#: model:ir.model,name:account_advanced_reconcile.model_easy_reconcile_advanced
|
||||
msgid "easy.reconcile.advanced"
|
||||
msgstr ""
|
||||
|
||||
#. 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 ""
|
||||
|
||||
#. module: account_advanced_reconcile
|
||||
#: model:ir.model,name:account_advanced_reconcile.model_easy_reconcile_advanced_ref
|
||||
msgid "easy.reconcile.advanced.ref"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_advanced_reconcile
|
||||
#: field:easy.reconcile.advanced,write_off:0
|
||||
#: field:easy.reconcile.advanced.ref,write_off:0
|
||||
msgid "Write off allowed"
|
||||
msgstr ""
|
||||
|
||||
@@ -6,15 +6,16 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 6.1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2013-01-04 08:25+0000\n"
|
||||
"PO-Revision-Date: 2013-01-04 09:27+0100\n"
|
||||
"Last-Translator: Guewen Baconnier <guewen.baconnier@camptocamp.com>\n"
|
||||
"POT-Creation-Date: 2014-01-21 11:54+0000\n"
|
||||
"PO-Revision-Date: 2014-03-21 15:24+0000\n"
|
||||
"Last-Translator: Guewen Baconnier @ Camptocamp <Unknown>\n"
|
||||
"Language-Team: \n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: \n"
|
||||
"X-Launchpad-Export-Date: 2014-03-22 07:11+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
"Language: \n"
|
||||
|
||||
#. module: account_advanced_reconcile
|
||||
#: field:easy.reconcile.advanced,partner_ids:0
|
||||
@@ -47,8 +48,15 @@ msgstr "Compte de produit"
|
||||
|
||||
#. module: account_advanced_reconcile
|
||||
#: view:account.easy.reconcile:0
|
||||
msgid "Match multiple debit vs multiple credit entries. Allow partial reconciliation. 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."
|
||||
msgid ""
|
||||
"Match multiple debit vs multiple credit entries. Allow partial "
|
||||
"reconciliation. 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
|
||||
#: field:easy.reconcile.advanced,filter:0
|
||||
@@ -88,4 +96,3 @@ msgstr "easy.reconcile.advanced.ref"
|
||||
#: field:easy.reconcile.advanced.ref,write_off:0
|
||||
msgid "Write off allowed"
|
||||
msgstr "Écart autorisé"
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ Advanced reconciliation method for the module account_easy_reconcile
|
||||
Reconcile rules with transaction_ref
|
||||
|
||||
""",
|
||||
'version': '1.0',
|
||||
'version': '1.0.1',
|
||||
'author': 'Camptocamp',
|
||||
'category': 'Finance',
|
||||
'website': 'http://www.camptocamp.com',
|
||||
|
||||
@@ -30,7 +30,7 @@ class AccountMoveLine(Model):
|
||||
'transaction_ref': fields.char('Transaction Ref.', size=128),
|
||||
}
|
||||
|
||||
class AccountBankSatement(Model):
|
||||
class AccountBankStatement(Model):
|
||||
"""
|
||||
Inherit account.bank.statement class in order to set transaction_ref info on account.move.line
|
||||
"""
|
||||
@@ -43,7 +43,7 @@ class AccountBankSatement(Model):
|
||||
|
||||
if context is None:
|
||||
context = {}
|
||||
res = super(AccountBankSatement, self)._prepare_move_line_vals(
|
||||
res = super(AccountBankStatement, self)._prepare_move_line_vals(
|
||||
cr, uid, st_line, move_id, debit, credit,
|
||||
currency_id=currency_id,
|
||||
amount_currency=amount_currency,
|
||||
|
||||
@@ -0,0 +1,97 @@
|
||||
# Translation of OpenERP Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * account_advanced_reconcile_transaction_ref
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 7.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2014-01-21 11:55+0000\n"
|
||||
"PO-Revision-Date: 2014-01-21 11:55+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_transaction_ref
|
||||
#: field:easy.reconcile.advanced.transaction_ref,partner_ids:0
|
||||
msgid "Restrict on partners"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_advanced_reconcile_transaction_ref
|
||||
#: field:easy.reconcile.advanced.transaction_ref,account_id:0
|
||||
msgid "Account"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_advanced_reconcile_transaction_ref
|
||||
#: view:account.easy.reconcile:0
|
||||
msgid "Advanced. Partner and Transaction Ref"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_advanced_reconcile_transaction_ref
|
||||
#: view:account.easy.reconcile:0
|
||||
msgid "Match multiple debit vs multiple credit entries. Allow partial reconciliation. The lines should have the partner, the credit entry transaction ref. is matched vs the debit entry transaction ref. or name."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_advanced_reconcile_transaction_ref
|
||||
#: model:ir.model,name:account_advanced_reconcile_transaction_ref.model_easy_reconcile_advanced_transaction_ref
|
||||
msgid "easy.reconcile.advanced.transaction_ref"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_advanced_reconcile_transaction_ref
|
||||
#: field:account.move.line,transaction_ref:0
|
||||
msgid "Transaction Ref."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_advanced_reconcile_transaction_ref
|
||||
#: field:easy.reconcile.advanced.transaction_ref,journal_id:0
|
||||
msgid "Journal"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_advanced_reconcile_transaction_ref
|
||||
#: field:easy.reconcile.advanced.transaction_ref,account_profit_id:0
|
||||
msgid "Account Profit"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_advanced_reconcile_transaction_ref
|
||||
#: model:ir.model,name:account_advanced_reconcile_transaction_ref.model_account_bank_statement
|
||||
msgid "Bank Statement"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_advanced_reconcile_transaction_ref
|
||||
#: field:easy.reconcile.advanced.transaction_ref,filter:0
|
||||
msgid "Filter"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_advanced_reconcile_transaction_ref
|
||||
#: model:ir.model,name:account_advanced_reconcile_transaction_ref.model_account_easy_reconcile_method
|
||||
msgid "reconcile method for account_easy_reconcile"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_advanced_reconcile_transaction_ref
|
||||
#: field:easy.reconcile.advanced.transaction_ref,date_base_on:0
|
||||
msgid "Date of reconciliation"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_advanced_reconcile_transaction_ref
|
||||
#: model:ir.model,name:account_advanced_reconcile_transaction_ref.model_account_move_line
|
||||
msgid "Journal Items"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_advanced_reconcile_transaction_ref
|
||||
#: model:ir.model,name:account_advanced_reconcile_transaction_ref.model_easy_reconcile_advanced
|
||||
msgid "easy.reconcile.advanced"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_advanced_reconcile_transaction_ref
|
||||
#: field:easy.reconcile.advanced.transaction_ref,account_lost_id:0
|
||||
msgid "Account Lost"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_advanced_reconcile_transaction_ref
|
||||
#: field:easy.reconcile.advanced.transaction_ref,write_off:0
|
||||
msgid "Write off allowed"
|
||||
msgstr ""
|
||||
|
||||
@@ -6,14 +6,16 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 7.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2013-08-13 09:37+0000\n"
|
||||
"PO-Revision-Date: 2013-08-13 09:37+0000\n"
|
||||
"Last-Translator: <>\n"
|
||||
"POT-Creation-Date: 2014-01-21 11:55+0000\n"
|
||||
"PO-Revision-Date: 2014-03-21 15:25+0000\n"
|
||||
"Last-Translator: Vincent Renaville@camptocamp "
|
||||
"<vincent.renaville@camptocamp.com>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Plural-Forms: \n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-22 07:11+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: account_advanced_reconcile_transaction_ref
|
||||
#: field:easy.reconcile.advanced.transaction_ref,partner_ids:0
|
||||
@@ -32,8 +34,16 @@ msgstr "Avancé. Partenaire et Référence de transaction"
|
||||
|
||||
#. module: account_advanced_reconcile_transaction_ref
|
||||
#: view:account.easy.reconcile:0
|
||||
msgid "Match multiple debit vs multiple credit entries. Allow partial reconciliation. The lines should have the partner, the credit entry transaction ref. is matched vs the debit entry transaction 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 même référence de transaction sur les écritures de crédit doit se retrouver dans la référence de transaction ou la description sur les écritures de débit."
|
||||
msgid ""
|
||||
"Match multiple debit vs multiple credit entries. Allow partial "
|
||||
"reconciliation. The lines should have the partner, the credit entry "
|
||||
"transaction ref. is matched vs the debit entry transaction 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 même référence de transaction sur les écritures de crédit "
|
||||
"doit se retrouver dans la référence de transaction ou la description sur les "
|
||||
"écritures de débit."
|
||||
|
||||
#. module: account_advanced_reconcile_transaction_ref
|
||||
#: model:ir.model,name:account_advanced_reconcile_transaction_ref.model_easy_reconcile_advanced_transaction_ref
|
||||
@@ -94,4 +104,3 @@ msgstr "Compte de charge"
|
||||
#: field:easy.reconcile.advanced.transaction_ref,write_off:0
|
||||
msgid "Write off allowed"
|
||||
msgstr "Ecart autorisé"
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
|
||||
{
|
||||
"name": "Easy Reconcile",
|
||||
"version": "1.3.0",
|
||||
"version": "1.3.1",
|
||||
"depends": ["account"],
|
||||
"author": "Akretion,Camptocamp",
|
||||
"description": """
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
from openerp.osv import fields, osv, orm
|
||||
from openerp.tools.translate import _
|
||||
from openerp.tools import DEFAULT_SERVER_DATETIME_FORMAT
|
||||
from openerp.tools.translate import _
|
||||
|
||||
|
||||
class easy_reconcile_options(orm.AbstractModel):
|
||||
@@ -258,6 +259,58 @@ class account_easy_reconcile(orm.Model):
|
||||
_('There is no history of reconciled '
|
||||
'items on the task: %s.') % rec.name)
|
||||
|
||||
def _open_move_line_list(sefl, cr, uid, move_line_ids, name, context=None):
|
||||
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_unreconcile(self, cr, uid, ids, context=None):
|
||||
""" Open the view of move line with the unreconciled move lines
|
||||
"""
|
||||
|
||||
assert len(ids) == 1 , \
|
||||
"You can only open entries from one profile at a time"
|
||||
|
||||
obj_move_line = self.pool.get('account.move.line')
|
||||
res = {}
|
||||
for task in self.browse(cr, uid, ids, context=context):
|
||||
line_ids = obj_move_line.search(
|
||||
cr, uid,
|
||||
[('account_id', '=', task.account.id),
|
||||
('reconcile_id', '=', False),
|
||||
('reconcile_partial_id', '=', False)],
|
||||
context=context)
|
||||
|
||||
name = _('Unreconciled items')
|
||||
return self._open_move_line_list(cr, uid, line_ids, name, context=context)
|
||||
|
||||
def open_partial_reconcile(self, cr, uid, ids, context=None):
|
||||
""" Open the view of move line with the unreconciled move lines
|
||||
"""
|
||||
|
||||
assert len(ids) == 1 , \
|
||||
"You can only open entries from one profile at a time"
|
||||
|
||||
obj_move_line = self.pool.get('account.move.line')
|
||||
res = {}
|
||||
for task in self.browse(cr, uid, ids, context=context):
|
||||
line_ids = obj_move_line.search(
|
||||
cr, uid,
|
||||
[('account_id', '=', task.account.id),
|
||||
('reconcile_id', '=', False),
|
||||
('reconcile_partial_id', '!=', False)],
|
||||
context=context)
|
||||
name = _('Partial reconciled items')
|
||||
return self._open_move_line_list(cr, uid, line_ids, name, context=context)
|
||||
|
||||
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
|
||||
|
||||
@@ -13,11 +13,9 @@
|
||||
<button name="run_reconcile" class="oe_highlight"
|
||||
string="Start Auto Reconciliation" type="object"/>
|
||||
<button icon="STOCK_JUMP_TO" name="last_history_reconcile"
|
||||
class="oe_highlight"
|
||||
string="Display items reconciled on the last run"
|
||||
type="object"/>
|
||||
<button icon="STOCK_JUMP_TO" name="last_history_partial"
|
||||
class="oe_highlight"
|
||||
string="Display items partially reconciled on the last run"
|
||||
type="object"/>
|
||||
</header>
|
||||
@@ -29,9 +27,17 @@
|
||||
<field name="account"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
</group>
|
||||
<group>
|
||||
<group>
|
||||
<field name="unreconciled_count"/>
|
||||
<button icon="STOCK_JUMP_TO" name="open_unreconcile"
|
||||
string="Go to unreconciled items" type="object"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="reconciled_partial_count"/>
|
||||
<button icon="STOCK_JUMP_TO" name="open_partial_reconcile"
|
||||
string="Go to partial reconciled items" type="object"/>
|
||||
</group>
|
||||
</group>
|
||||
</group>
|
||||
<notebook colspan="4">
|
||||
|
||||
406
account_easy_reconcile/i18n/account_easy_reconcile.pot
Normal file
406
account_easy_reconcile/i18n/account_easy_reconcile.pot
Normal file
@@ -0,0 +1,406 @@
|
||||
# Translation of OpenERP Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * account_easy_reconcile
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 7.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2014-01-21 11:55+0000\n"
|
||||
"PO-Revision-Date: 2014-01-21 11:55+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
|
||||
#: code:addons/account_easy_reconcile/easy_reconcile_history.py:108
|
||||
#: view:easy.reconcile.history:0
|
||||
#: field:easy.reconcile.history,reconcile_ids:0
|
||||
#, python-format
|
||||
msgid "Reconciliations"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:account.easy.reconcile:0
|
||||
#: view:easy.reconcile.history:0
|
||||
msgid "Automatic Easy Reconcile History"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:account.easy.reconcile:0
|
||||
msgid "Information"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:account.easy.reconcile:0
|
||||
#: view:easy.reconcile.history:0
|
||||
msgid "Go to partially reconciled items"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: help:account.easy.reconcile.method,sequence:0
|
||||
msgid "The sequence field is used to order the reconcile method"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_history
|
||||
msgid "easy.reconcile.history"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: model:ir.actions.act_window,help:account_easy_reconcile.action_account_easy_reconcile
|
||||
msgid "<p class=\"oe_view_nocontent_create\">\n"
|
||||
" Click to add a reconciliation profile.\n"
|
||||
" </p><p>\n"
|
||||
" A reconciliation profile specifies, for one account, how\n"
|
||||
" the entries should be reconciled.\n"
|
||||
" You can select one or many reconciliation methods which will\n"
|
||||
" be run sequentially to match the entries between them.\n"
|
||||
" </p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_options
|
||||
msgid "easy.reconcile.options"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:easy.reconcile.history:0
|
||||
msgid "Group By..."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: field:account.easy.reconcile,unreconciled_count:0
|
||||
msgid "Unreconciled Items"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_base
|
||||
msgid "easy.reconcile.base"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: field:easy.reconcile.history,reconcile_line_ids:0
|
||||
msgid "Reconciled Items"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: field:account.easy.reconcile,reconcile_method:0
|
||||
msgid "Method"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:easy.reconcile.history:0
|
||||
msgid "7 Days"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: model:ir.actions.act_window,name:account_easy_reconcile.action_easy_reconcile_history
|
||||
msgid "Easy Automatic Reconcile History"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: field:easy.reconcile.history,date:0
|
||||
msgid "Run date"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:account.easy.reconcile:0
|
||||
msgid "Match one debit line vs one credit line. Do not allow partial reconciliation. The lines should have the same amount (with the write-off) and the same reference to be reconciled."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: model:ir.actions.act_window,name:account_easy_reconcile.act_easy_reconcile_to_history
|
||||
msgid "History Details"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:account.easy.reconcile:0
|
||||
msgid "Display items reconciled on the last run"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: field:account.easy.reconcile.method,name:0
|
||||
msgid "Type"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: field:account.easy.reconcile,company_id:0
|
||||
#: field:account.easy.reconcile.method,company_id:0
|
||||
#: field:easy.reconcile.history,company_id:0
|
||||
msgid "Company"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: field:account.easy.reconcile.method,account_profit_id:0
|
||||
#: field:easy.reconcile.base,account_profit_id:0
|
||||
#: field:easy.reconcile.options,account_profit_id:0
|
||||
#: field:easy.reconcile.simple,account_profit_id:0
|
||||
#: field:easy.reconcile.simple.name,account_profit_id:0
|
||||
#: field:easy.reconcile.simple.partner,account_profit_id:0
|
||||
#: field:easy.reconcile.simple.reference,account_profit_id:0
|
||||
msgid "Account Profit"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:easy.reconcile.history:0
|
||||
msgid "Todays' Reconcilations"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:account.easy.reconcile:0
|
||||
msgid "Simple. Amount and Name"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: field:easy.reconcile.base,partner_ids:0
|
||||
#: field:easy.reconcile.simple,partner_ids:0
|
||||
#: field:easy.reconcile.simple.name,partner_ids:0
|
||||
#: field:easy.reconcile.simple.partner,partner_ids:0
|
||||
#: field:easy.reconcile.simple.reference,partner_ids:0
|
||||
msgid "Restrict on partners"
|
||||
msgstr ""
|
||||
|
||||
#. 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 ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:easy.reconcile.history:0
|
||||
msgid "Today"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:easy.reconcile.history:0
|
||||
msgid "Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: field:account.easy.reconcile,last_history:0
|
||||
msgid "Last History"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:account.easy.reconcile:0
|
||||
msgid "Configuration"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: field:account.easy.reconcile,reconciled_partial_count:0
|
||||
#: field:easy.reconcile.history,partial_line_ids:0
|
||||
msgid "Partially Reconciled Items"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_partner
|
||||
msgid "easy.reconcile.simple.partner"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: field:account.easy.reconcile.method,write_off:0
|
||||
#: field:easy.reconcile.base,write_off:0
|
||||
#: field:easy.reconcile.options,write_off:0
|
||||
#: field:easy.reconcile.simple,write_off:0
|
||||
#: field:easy.reconcile.simple.name,write_off:0
|
||||
#: field:easy.reconcile.simple.partner,write_off:0
|
||||
#: field:easy.reconcile.simple.reference,write_off:0
|
||||
msgid "Write off allowed"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:account.easy.reconcile:0
|
||||
msgid "Automatic Easy Reconcile"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: field:account.easy.reconcile,account:0
|
||||
#: field:easy.reconcile.base,account_id:0
|
||||
#: field:easy.reconcile.simple,account_id:0
|
||||
#: field:easy.reconcile.simple.name,account_id:0
|
||||
#: field:easy.reconcile.simple.partner,account_id:0
|
||||
#: field:easy.reconcile.simple.reference,account_id:0
|
||||
msgid "Account"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: field:account.easy.reconcile.method,task_id:0
|
||||
msgid "Task"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: field:account.easy.reconcile,name:0
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:account.easy.reconcile:0
|
||||
msgid "Simple. Amount and Partner"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:account.easy.reconcile:0
|
||||
msgid "Start Auto Reconcilation"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_name
|
||||
msgid "easy.reconcile.simple.name"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: field:account.easy.reconcile.method,filter:0
|
||||
#: field:easy.reconcile.base,filter:0
|
||||
#: field:easy.reconcile.options,filter:0
|
||||
#: field:easy.reconcile.simple,filter:0
|
||||
#: field:easy.reconcile.simple.name,filter:0
|
||||
#: field:easy.reconcile.simple.partner,filter:0
|
||||
#: field:easy.reconcile.simple.reference,filter:0
|
||||
msgid "Filter"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:account.easy.reconcile:0
|
||||
msgid "Match one debit line vs one credit line. Do not allow partial reconciliation. The lines should have the same amount (with the write-off) and the same partner to be reconciled."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: field:easy.reconcile.history,easy_reconcile_id:0
|
||||
msgid "Reconcile Profile"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile_method
|
||||
msgid "reconcile method for account_easy_reconcile"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:account.easy.reconcile:0
|
||||
msgid "Start Auto Reconciliation"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: code:addons/account_easy_reconcile/easy_reconcile.py:257
|
||||
#, python-format
|
||||
msgid "Error"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: code:addons/account_easy_reconcile/easy_reconcile.py:258
|
||||
#, python-format
|
||||
msgid "There is no history of reconciled items on the task: %s."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:account.easy.reconcile:0
|
||||
msgid "Match one debit line vs one credit line. Do not allow partial reconciliation. The lines should have the same amount (with the write-off) and the same name to be reconciled."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: field:account.easy.reconcile.method,account_lost_id:0
|
||||
#: field:easy.reconcile.base,account_lost_id:0
|
||||
#: field:easy.reconcile.options,account_lost_id:0
|
||||
#: field:easy.reconcile.simple,account_lost_id:0
|
||||
#: field:easy.reconcile.simple.name,account_lost_id:0
|
||||
#: field:easy.reconcile.simple.partner,account_lost_id:0
|
||||
#: field:easy.reconcile.simple.reference,account_lost_id:0
|
||||
msgid "Account Lost"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:easy.reconcile.history:0
|
||||
msgid "Reconciliation Profile"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:account.easy.reconcile:0
|
||||
#: field:account.easy.reconcile,history_ids:0
|
||||
msgid "History"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:account.easy.reconcile:0
|
||||
#: view:easy.reconcile.history:0
|
||||
msgid "Go to reconciled items"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:account.easy.reconcile:0
|
||||
msgid "Profile Information"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:account.easy.reconcile.method:0
|
||||
msgid "Automatic Easy Reconcile Method"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:account.easy.reconcile:0
|
||||
msgid "Simple. Amount and Reference"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:account.easy.reconcile:0
|
||||
msgid "Display items partially reconciled on the last run"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: field:account.easy.reconcile.method,sequence:0
|
||||
msgid "Sequence"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple
|
||||
msgid "easy.reconcile.simple"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:easy.reconcile.history:0
|
||||
msgid "Reconciliations of last 7 days"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: field:account.easy.reconcile.method,date_base_on:0
|
||||
#: field:easy.reconcile.base,date_base_on:0
|
||||
#: field:easy.reconcile.options,date_base_on:0
|
||||
#: field:easy.reconcile.simple,date_base_on:0
|
||||
#: field:easy.reconcile.simple.name,date_base_on:0
|
||||
#: field:easy.reconcile.simple.partner,date_base_on:0
|
||||
#: field:easy.reconcile.simple.reference,date_base_on:0
|
||||
msgid "Date of reconciliation"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: code:addons/account_easy_reconcile/easy_reconcile_history.py:111
|
||||
#: view:easy.reconcile.history:0
|
||||
#: field:easy.reconcile.history,reconcile_partial_ids:0
|
||||
#, python-format
|
||||
msgid "Partial Reconciliations"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: field:account.easy.reconcile.method,journal_id:0
|
||||
#: field:easy.reconcile.base,journal_id:0
|
||||
#: field:easy.reconcile.options,journal_id:0
|
||||
#: field:easy.reconcile.simple,journal_id:0
|
||||
#: field:easy.reconcile.simple.name,journal_id:0
|
||||
#: field:easy.reconcile.simple.partner,journal_id:0
|
||||
#: field:easy.reconcile.simple.reference,journal_id:0
|
||||
msgid "Journal"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_reference
|
||||
msgid "easy.reconcile.simple.reference"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile
|
||||
msgid "account easy reconcile"
|
||||
msgstr ""
|
||||
|
||||
415
account_easy_reconcile/i18n/es.po
Normal file
415
account_easy_reconcile/i18n/es.po
Normal file
@@ -0,0 +1,415 @@
|
||||
# Spanish translation for banking-addons
|
||||
# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
|
||||
# This file is distributed under the same license as the banking-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2014.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: banking-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2014-01-21 11:55+0000\n"
|
||||
"PO-Revision-Date: 2014-04-02 21:56+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Spanish <es@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-04-03 06:06+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: code:addons/account_easy_reconcile/easy_reconcile_history.py:101
|
||||
#: field:easy.reconcile.history,reconcile_ids:0
|
||||
#, python-format
|
||||
msgid "Reconciliations"
|
||||
msgstr "Conciliaciones"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:account.easy.reconcile:0
|
||||
#: view:easy.reconcile.history:0
|
||||
msgid "Automatic Easy Reconcile History"
|
||||
msgstr "Historial de conciliación automática sencilla"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:account.easy.reconcile:0
|
||||
msgid "Information"
|
||||
msgstr "Información"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:account.easy.reconcile:0
|
||||
#: view:easy.reconcile.history:0
|
||||
msgid "Go to partially reconciled items"
|
||||
msgstr "Ir a los elementos parcialmente conciliados"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: help:account.easy.reconcile.method,sequence:0
|
||||
msgid "The sequence field is used to order the reconcile method"
|
||||
msgstr ""
|
||||
"El campo de secuencia se usa para ordenar los métodos de conciliación"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_history
|
||||
msgid "easy.reconcile.history"
|
||||
msgstr "easy.reconcile.history"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: model:ir.actions.act_window,help:account_easy_reconcile.action_account_easy_reconcile
|
||||
msgid ""
|
||||
"<p class=\"oe_view_nocontent_create\">\n"
|
||||
" Click to add a reconciliation profile.\n"
|
||||
" </p><p>\n"
|
||||
" A reconciliation profile specifies, for one account, how\n"
|
||||
" the entries should be reconciled.\n"
|
||||
" You can select one or many reconciliation methods which will\n"
|
||||
" be run sequentially to match the entries between them.\n"
|
||||
" </p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_options
|
||||
msgid "easy.reconcile.options"
|
||||
msgstr "easy.reconcile.options"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:easy.reconcile.history:0
|
||||
msgid "Group By..."
|
||||
msgstr "Agrupar por..."
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: field:account.easy.reconcile,unreconciled_count:0
|
||||
msgid "Unreconciled Items"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_base
|
||||
msgid "easy.reconcile.base"
|
||||
msgstr "easy.reconcile.base"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: field:easy.reconcile.history,reconcile_line_ids:0
|
||||
msgid "Reconciled Items"
|
||||
msgstr "Elementos conciliados"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: field:account.easy.reconcile,reconcile_method:0
|
||||
msgid "Method"
|
||||
msgstr "Método"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:easy.reconcile.history:0
|
||||
msgid "7 Days"
|
||||
msgstr "7 días"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: model:ir.actions.act_window,name:account_easy_reconcile.action_easy_reconcile_history
|
||||
msgid "Easy Automatic Reconcile History"
|
||||
msgstr "Historial de la conciliación automática sencilla"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: field:easy.reconcile.history,date:0
|
||||
msgid "Run date"
|
||||
msgstr "Fecha ejecucción"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:account.easy.reconcile:0
|
||||
msgid ""
|
||||
"Match one debit line vs one credit line. Do not allow partial "
|
||||
"reconciliation. The lines should have the same amount (with the write-off) "
|
||||
"and the same reference to be reconciled."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: model:ir.actions.act_window,name:account_easy_reconcile.act_easy_reconcile_to_history
|
||||
msgid "History Details"
|
||||
msgstr "Detalles del historial"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:account.easy.reconcile:0
|
||||
msgid "Display items reconciled on the last run"
|
||||
msgstr "Mostrar elementos conciliados en la última ejecucción"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: field:account.easy.reconcile.method,name:0
|
||||
msgid "Type"
|
||||
msgstr "Tipo"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: field:account.easy.reconcile,company_id:0
|
||||
#: field:account.easy.reconcile.method,company_id:0
|
||||
#: field:easy.reconcile.history,company_id:0
|
||||
msgid "Company"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: field:account.easy.reconcile.method,account_profit_id:0
|
||||
#: field:easy.reconcile.base,account_profit_id:0
|
||||
#: field:easy.reconcile.options,account_profit_id:0
|
||||
#: field:easy.reconcile.simple,account_profit_id:0
|
||||
#: field:easy.reconcile.simple.name,account_profit_id:0
|
||||
#: field:easy.reconcile.simple.partner,account_profit_id:0
|
||||
#: field:easy.reconcile.simple.reference,account_profit_id:0
|
||||
msgid "Account Profit"
|
||||
msgstr "Cuenta de ganancias"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:easy.reconcile.history:0
|
||||
msgid "Todays' Reconcilations"
|
||||
msgstr "Conciliaciones de hoy"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:account.easy.reconcile:0
|
||||
msgid "Simple. Amount and Name"
|
||||
msgstr "Simple. Cantidad y nombre"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: field:easy.reconcile.base,partner_ids:0
|
||||
#: field:easy.reconcile.simple,partner_ids:0
|
||||
#: field:easy.reconcile.simple.name,partner_ids:0
|
||||
#: field:easy.reconcile.simple.partner,partner_ids:0
|
||||
#: field:easy.reconcile.simple.reference,partner_ids:0
|
||||
msgid "Restrict on partners"
|
||||
msgstr "Restringir en las empresas"
|
||||
|
||||
#. 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 "Conciliación automática simple"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:easy.reconcile.history:0
|
||||
msgid "Today"
|
||||
msgstr "Hoy"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:easy.reconcile.history:0
|
||||
msgid "Date"
|
||||
msgstr "Fecha"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: field:account.easy.reconcile,last_history:0
|
||||
msgid "Last History"
|
||||
msgstr "Último historial"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:account.easy.reconcile:0
|
||||
msgid "Configuration"
|
||||
msgstr "Configuración"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: field:easy.reconcile.history,partial_line_ids:0
|
||||
msgid "Partially Reconciled Items"
|
||||
msgstr "Elementos parcialmente conciliados"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_partner
|
||||
msgid "easy.reconcile.simple.partner"
|
||||
msgstr "easy.reconcile.simple.partner"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: field:account.easy.reconcile.method,write_off:0
|
||||
#: field:easy.reconcile.base,write_off:0
|
||||
#: field:easy.reconcile.options,write_off:0
|
||||
#: field:easy.reconcile.simple,write_off:0
|
||||
#: field:easy.reconcile.simple.name,write_off:0
|
||||
#: field:easy.reconcile.simple.partner,write_off:0
|
||||
#: field:easy.reconcile.simple.reference,write_off:0
|
||||
msgid "Write off allowed"
|
||||
msgstr "Desajuste permitido"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:account.easy.reconcile:0
|
||||
msgid "Automatic Easy Reconcile"
|
||||
msgstr "Conciliación automática sencilla"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: field:account.easy.reconcile,account:0
|
||||
#: field:easy.reconcile.base,account_id:0
|
||||
#: field:easy.reconcile.simple,account_id:0
|
||||
#: field:easy.reconcile.simple.name,account_id:0
|
||||
#: field:easy.reconcile.simple.partner,account_id:0
|
||||
#: field:easy.reconcile.simple.reference,account_id:0
|
||||
msgid "Account"
|
||||
msgstr "Cuenta"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: field:account.easy.reconcile.method,task_id:0
|
||||
msgid "Task"
|
||||
msgstr "Tarea"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: field:account.easy.reconcile,name:0
|
||||
msgid "Name"
|
||||
msgstr "Nombre"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:account.easy.reconcile:0
|
||||
msgid "Simple. Amount and Partner"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:account.easy.reconcile:0
|
||||
msgid "Start Auto Reconcilation"
|
||||
msgstr "Iniciar conciliación automática"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_name
|
||||
msgid "easy.reconcile.simple.name"
|
||||
msgstr "easy.reconcile.simple.name"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: field:account.easy.reconcile.method,filter:0
|
||||
#: field:easy.reconcile.base,filter:0
|
||||
#: field:easy.reconcile.options,filter:0
|
||||
#: field:easy.reconcile.simple,filter:0
|
||||
#: field:easy.reconcile.simple.name,filter:0
|
||||
#: field:easy.reconcile.simple.partner,filter:0
|
||||
#: field:easy.reconcile.simple.reference,filter:0
|
||||
msgid "Filter"
|
||||
msgstr "Filtro"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:account.easy.reconcile:0
|
||||
msgid ""
|
||||
"Match one debit line vs one credit line. Do not allow partial "
|
||||
"reconciliation. The lines should have the same amount (with the write-off) "
|
||||
"and the same partner to be reconciled."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: field:easy.reconcile.history,easy_reconcile_id:0
|
||||
msgid "Reconcile Profile"
|
||||
msgstr "Perfil de conciliación"
|
||||
|
||||
#. 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étodo de conciliación para account_easy_reconcile"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:account.easy.reconcile:0
|
||||
msgid "Start Auto Reconciliation"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: code:addons/account_easy_reconcile/easy_reconcile.py:233
|
||||
#, python-format
|
||||
msgid "Error"
|
||||
msgstr "Error"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: code:addons/account_easy_reconcile/easy_reconcile.py:258
|
||||
#, python-format
|
||||
msgid "There is no history of reconciled items on the task: %s."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:account.easy.reconcile:0
|
||||
msgid ""
|
||||
"Match one debit line vs one credit line. Do not allow partial "
|
||||
"reconciliation. The lines should have the same amount (with the write-off) "
|
||||
"and the same name to be reconciled."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: field:account.easy.reconcile.method,account_lost_id:0
|
||||
#: field:easy.reconcile.base,account_lost_id:0
|
||||
#: field:easy.reconcile.options,account_lost_id:0
|
||||
#: field:easy.reconcile.simple,account_lost_id:0
|
||||
#: field:easy.reconcile.simple.name,account_lost_id:0
|
||||
#: field:easy.reconcile.simple.partner,account_lost_id:0
|
||||
#: field:easy.reconcile.simple.reference,account_lost_id:0
|
||||
msgid "Account Lost"
|
||||
msgstr "Cuenta de pérdidas"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:easy.reconcile.history:0
|
||||
msgid "Reconciliation Profile"
|
||||
msgstr "Perfil de conciliación"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:account.easy.reconcile:0
|
||||
#: field:account.easy.reconcile,history_ids:0
|
||||
msgid "History"
|
||||
msgstr "Historial"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:account.easy.reconcile:0
|
||||
#: view:easy.reconcile.history:0
|
||||
msgid "Go to reconciled items"
|
||||
msgstr "Ir a los elementos conciliados"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:account.easy.reconcile:0
|
||||
msgid "Profile Information"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:account.easy.reconcile.method:0
|
||||
msgid "Automatic Easy Reconcile Method"
|
||||
msgstr "Método de conciliación automática sencilla"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:account.easy.reconcile:0
|
||||
msgid "Simple. Amount and Reference"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:account.easy.reconcile:0
|
||||
msgid "Display items partially reconciled on the last run"
|
||||
msgstr "Mostrar elementos conciliados parcialmente en la última ejecucción"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: field:account.easy.reconcile.method,sequence:0
|
||||
msgid "Sequence"
|
||||
msgstr "Secuencia"
|
||||
|
||||
#. 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 "Conciliaciones de los últimos 7 días"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: field:account.easy.reconcile.method,date_base_on:0
|
||||
#: field:easy.reconcile.base,date_base_on:0
|
||||
#: field:easy.reconcile.options,date_base_on:0
|
||||
#: field:easy.reconcile.simple,date_base_on:0
|
||||
#: field:easy.reconcile.simple.name,date_base_on:0
|
||||
#: field:easy.reconcile.simple.partner,date_base_on:0
|
||||
#: field:easy.reconcile.simple.reference,date_base_on:0
|
||||
msgid "Date of reconciliation"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: code:addons/account_easy_reconcile/easy_reconcile_history.py:104
|
||||
#: field:easy.reconcile.history,reconcile_partial_ids:0
|
||||
#, python-format
|
||||
msgid "Partial Reconciliations"
|
||||
msgstr "Conciliaciones parciales"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: field:account.easy.reconcile.method,journal_id:0
|
||||
#: field:easy.reconcile.base,journal_id:0
|
||||
#: field:easy.reconcile.options,journal_id:0
|
||||
#: field:easy.reconcile.simple,journal_id:0
|
||||
#: field:easy.reconcile.simple.name,journal_id:0
|
||||
#: field:easy.reconcile.simple.partner,journal_id:0
|
||||
#: field:easy.reconcile.simple.reference,journal_id:0
|
||||
msgid "Journal"
|
||||
msgstr "Diario"
|
||||
|
||||
#. 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
|
||||
#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile
|
||||
msgid "account easy reconcile"
|
||||
msgstr "account easy reconcile"
|
||||
@@ -6,18 +6,19 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 6.1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2013-01-04 08:39+0000\n"
|
||||
"PO-Revision-Date: 2013-01-04 09:55+0100\n"
|
||||
"Last-Translator: Guewen Baconnier <guewen.baconnier@camptocamp.com>\n"
|
||||
"POT-Creation-Date: 2014-01-21 11:55+0000\n"
|
||||
"PO-Revision-Date: 2014-03-21 15:25+0000\n"
|
||||
"Last-Translator: Guewen Baconnier @ Camptocamp <Unknown>\n"
|
||||
"Language-Team: \n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: \n"
|
||||
"X-Launchpad-Export-Date: 2014-03-22 07:11+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
"Language: \n"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: code:addons/account_easy_reconcile/easy_reconcile_history.py:101
|
||||
#: code:addons/account_easy_reconcile/easy_reconcile_history.py:108
|
||||
#: view:easy.reconcile.history:0
|
||||
#: field:easy.reconcile.history,reconcile_ids:0
|
||||
#, python-format
|
||||
@@ -121,8 +122,13 @@ msgstr "Date de lancement"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:account.easy.reconcile:0
|
||||
msgid "Match one debit line vs one credit line. Do not allow partial reconciliation. The lines should have the same amount (with the write-off) and the same reference to be reconciled."
|
||||
msgstr "Lettre un débit avec un crédit ayant le même montant et la même référence. Le lettrage ne peut être partiel (écriture d'ajustement en cas d'écart)."
|
||||
msgid ""
|
||||
"Match one debit line vs one credit line. Do not allow partial "
|
||||
"reconciliation. The lines should have the same amount (with the write-off) "
|
||||
"and the same reference to be reconciled."
|
||||
msgstr ""
|
||||
"Lettre un débit avec un crédit ayant le même montant et la même référence. "
|
||||
"Le lettrage ne peut être partiel (écriture d'ajustement en cas d'écart)."
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: model:ir.actions.act_window,name:account_easy_reconcile.act_easy_reconcile_to_history
|
||||
@@ -140,15 +146,11 @@ msgid "Type"
|
||||
msgstr "Type"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: field:account.easy.reconcile.method,journal_id:0
|
||||
#: field:easy.reconcile.base,journal_id:0
|
||||
#: field:easy.reconcile.options,journal_id:0
|
||||
#: field:easy.reconcile.simple,journal_id:0
|
||||
#: field:easy.reconcile.simple.name,journal_id:0
|
||||
#: field:easy.reconcile.simple.partner,journal_id:0
|
||||
#: field:easy.reconcile.simple.reference,journal_id:0
|
||||
msgid "Journal"
|
||||
msgstr "Journal"
|
||||
#: field:account.easy.reconcile,company_id:0
|
||||
#: field:account.easy.reconcile.method,company_id:0
|
||||
#: field:easy.reconcile.history,company_id:0
|
||||
msgid "Company"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: field:account.easy.reconcile.method,account_profit_id:0
|
||||
@@ -281,35 +283,50 @@ msgstr "Filtre"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:account.easy.reconcile:0
|
||||
msgid "Match one debit line vs one credit line. Do not allow partial reconciliation. 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)."
|
||||
msgid ""
|
||||
"Match one debit line vs one credit line. Do not allow partial "
|
||||
"reconciliation. 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
|
||||
#: field:easy.reconcile.history,easy_reconcile_id:0
|
||||
msgid "Reconcile Profile"
|
||||
msgstr "Profil de réconciliation"
|
||||
|
||||
#. 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 Reconciliation"
|
||||
msgstr "Lancer le lettrage automatisé"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: code:addons/account_easy_reconcile/easy_reconcile.py:250
|
||||
#: code:addons/account_easy_reconcile/easy_reconcile.py:257
|
||||
#, python-format
|
||||
msgid "Error"
|
||||
msgstr "Erreur"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: code:addons/account_easy_reconcile/easy_reconcile.py:251
|
||||
#: code:addons/account_easy_reconcile/easy_reconcile.py:258
|
||||
#, python-format
|
||||
msgid "There is no history of reconciled items on the task: %s."
|
||||
msgstr "Il n'y a pas d'historique d'écritures lettrées sur la tâche: %s."
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: view:account.easy.reconcile:0
|
||||
msgid "Match one debit line vs one credit line. Do not allow partial reconciliation. 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)."
|
||||
msgid ""
|
||||
"Match one debit line vs one credit line. Do not allow partial "
|
||||
"reconciliation. 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
|
||||
#: field:account.easy.reconcile.method,account_lost_id:0
|
||||
@@ -386,7 +403,7 @@ msgid "Date of reconciliation"
|
||||
msgstr "Date de lettrage"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: code:addons/account_easy_reconcile/easy_reconcile_history.py:104
|
||||
#: code:addons/account_easy_reconcile/easy_reconcile_history.py:111
|
||||
#: view:easy.reconcile.history:0
|
||||
#: field:easy.reconcile.history,reconcile_partial_ids:0
|
||||
#, python-format
|
||||
@@ -394,9 +411,15 @@ msgid "Partial Reconciliations"
|
||||
msgstr "Lettrages partiels"
|
||||
|
||||
#. 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"
|
||||
#: field:account.easy.reconcile.method,journal_id:0
|
||||
#: field:easy.reconcile.base,journal_id:0
|
||||
#: field:easy.reconcile.options,journal_id:0
|
||||
#: field:easy.reconcile.simple,journal_id:0
|
||||
#: field:easy.reconcile.simple.name,journal_id:0
|
||||
#: field:easy.reconcile.simple.partner,journal_id:0
|
||||
#: field:easy.reconcile.simple.reference,journal_id:0
|
||||
msgid "Journal"
|
||||
msgstr "Journal"
|
||||
|
||||
#. module: account_easy_reconcile
|
||||
#: model:ir.model,name:account_easy_reconcile.model_easy_reconcile_simple_reference
|
||||
@@ -407,19 +430,3 @@ msgstr "easy.reconcile.simple.reference"
|
||||
#: model:ir.model,name:account_easy_reconcile.model_account_easy_reconcile
|
||||
msgid "account easy reconcile"
|
||||
msgstr "Lettrage automatisé"
|
||||
|
||||
#~ msgid "Unreconciled Entries"
|
||||
#~ msgstr "Écritures non lettrées"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Partially Reconciled Entries"
|
||||
#~ msgstr "Lettrages partiels"
|
||||
|
||||
#~ msgid "Task Information"
|
||||
#~ msgstr "Information sur la tâche"
|
||||
|
||||
#~ msgid "Reconcile Method"
|
||||
#~ msgstr "Méthode de lettrage"
|
||||
|
||||
#~ msgid "Log"
|
||||
#~ msgstr "Historique"
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
#
|
||||
|
||||
{'name': "Bank statement completion from bank account number",
|
||||
'version': '1.0',
|
||||
'version': '1.0.1',
|
||||
'author': 'ACSONE SA/NV',
|
||||
'maintainer': 'ACSONE SA/NV',
|
||||
'category': 'Finance',
|
||||
@@ -29,21 +29,20 @@
|
||||
'account_statement_base_completion',
|
||||
],
|
||||
'description': """
|
||||
Add a completion method based on the partner bank account number provided by the bank/office.
|
||||
Add a completion method based on the partner bank account number
|
||||
provided by the bank/office.
|
||||
|
||||
Completion will look in the partner with that bank account number to match the partner,
|
||||
then it will fill in the bank statement line with it to ease the reconciliation.
|
||||
Completion will look in the partner with that bank account number
|
||||
to match the partner, then it will fill in the bank statement line
|
||||
with it to ease the reconciliation.
|
||||
|
||||
""",
|
||||
'website': 'http://www.acsone.eu',
|
||||
'init_xml': [],
|
||||
'update_xml': [
|
||||
'data': [
|
||||
"data.xml",
|
||||
],
|
||||
'demo_xml': [],
|
||||
'test': [],
|
||||
'demo': [],
|
||||
'installable': True,
|
||||
'images': [],
|
||||
'auto_install': True,
|
||||
'auto_install': False,
|
||||
'license': 'AGPL-3',
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<data noupdate="1">
|
||||
|
||||
<record id="bank_statement_completion_rule_10" model="account.statement.completion.rule">
|
||||
<field name="name">Match from bank account number (Nomal or IBAN))</field>
|
||||
<field name="name">Match from bank account number (Normal or IBAN))</field>
|
||||
<field name="sequence">10</field>
|
||||
<field name="function_to_call">get_from_bank_account</field>
|
||||
</record>
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
# Translation of OpenERP Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * account_statement_bankaccount_completion
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 7.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2014-01-21 11:57+0000\n"
|
||||
"PO-Revision-Date: 2014-01-21 11:57+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_statement_bankaccount_completion
|
||||
#: help:account.bank.statement.line,partner_acc_number:0
|
||||
msgid "Account number of the partner"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_bankaccount_completion
|
||||
#: model:ir.model,name:account_statement_bankaccount_completion.model_account_bank_statement_line
|
||||
msgid "Bank Statement Line"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_bankaccount_completion
|
||||
#: code:addons/account_statement_bankaccount_completion/statement.py:68
|
||||
#, python-format
|
||||
msgid "Line named \"%s\" (Ref:%s) was matched by more than one partner for account number \"%s\"."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_bankaccount_completion
|
||||
#: field:account.bank.statement.line,partner_acc_number:0
|
||||
msgid "Account Number"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_bankaccount_completion
|
||||
#: model:ir.model,name:account_statement_bankaccount_completion.model_account_statement_completion_rule
|
||||
msgid "account.statement.completion.rule"
|
||||
msgstr ""
|
||||
|
||||
@@ -19,5 +19,5 @@
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
import statement
|
||||
import partner
|
||||
from . import partner
|
||||
from . import statement
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
##############################################################################
|
||||
|
||||
{'name': "Bank statement base completion",
|
||||
'version': '1.0',
|
||||
'version': '1.0.2',
|
||||
'author': 'Camptocamp',
|
||||
'maintainer': 'Camptocamp',
|
||||
'category': 'Finance',
|
||||
@@ -35,7 +35,6 @@
|
||||
|
||||
1) Match from statement line label (based on partner field 'Bank Statement Label')
|
||||
2) Match from statement line label (based on partner name)
|
||||
3) Match from statement line reference (based on SO number)
|
||||
3) Match from statement line reference (based on Invoice number)
|
||||
|
||||
You can easily override this module and add your own rules in your own one. The basic rules only
|
||||
@@ -58,15 +57,19 @@
|
||||
|
||||
""",
|
||||
'website': 'http://www.camptocamp.com',
|
||||
'init_xml': [],
|
||||
'update_xml': [
|
||||
'data': [
|
||||
'statement_view.xml',
|
||||
'partner_view.xml',
|
||||
'data.xml',
|
||||
'security/ir.model.access.csv',
|
||||
],
|
||||
'demo_xml': [],
|
||||
'test': [],
|
||||
'demo': [],
|
||||
'test': [
|
||||
'test/partner.yml',
|
||||
'test/invoice.yml',
|
||||
'test/supplier_invoice.yml',
|
||||
'test/completion_test.yml'
|
||||
],
|
||||
'installable': True,
|
||||
'images': [],
|
||||
'auto_install': False,
|
||||
|
||||
@@ -14,12 +14,6 @@
|
||||
<field name="function_to_call">get_from_label_and_partner_name</field>
|
||||
</record>
|
||||
|
||||
<record id="bank_statement_completion_rule_1" model="account.statement.completion.rule">
|
||||
<field name="name">Match from line reference (based on SO number)</field>
|
||||
<field name="sequence">50</field>
|
||||
<field name="function_to_call">get_from_ref_and_so</field>
|
||||
</record>
|
||||
|
||||
<record id="bank_statement_completion_rule_4" model="account.statement.completion.rule">
|
||||
<field name="name">Match from line reference (based on Invoice number)</field>
|
||||
<field name="sequence">40</field>
|
||||
|
||||
216
account_statement_base_completion/i18n/ab.po
Normal file
216
account_statement_base_completion/i18n/ab.po
Normal file
@@ -0,0 +1,216 @@
|
||||
# Abkhazian translation for banking-addons
|
||||
# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
|
||||
# This file is distributed under the same license as the banking-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2014.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: banking-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2014-01-21 11:57+0000\n"
|
||||
"PO-Revision-Date: 2014-04-02 23:04+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Abkhazian <ab@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-04-03 06:06+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: view:account.statement.completion.rule:0
|
||||
msgid "Related Profiles"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: help:account.bank.statement.line,label:0
|
||||
msgid ""
|
||||
"Generic field to store a label given from the bank/office on which we can "
|
||||
"base the default/standard providen rule."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: code:addons/account_statement_base_completion/statement.py:169
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Line named \"%s\" (Ref:%s) was matched by more than one partner while "
|
||||
"looking on %s invoices"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: field:account.bank.statement,completion_logs:0
|
||||
msgid "Completion Log"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: field:account.bank.statement.line,label:0
|
||||
msgid "Label"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: model:ir.model,name:account_statement_base_completion.model_account_bank_statement
|
||||
msgid "Bank Statement"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: field:account.statement.completion.rule,function_to_call:0
|
||||
msgid "Method"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: code:addons/account_statement_base_completion/statement.py:326
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Line named \"%s\" (Ref:%s) was matched by more than one partner while "
|
||||
"looking on partner by name"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: code:addons/account_statement_base_completion/statement.py:504
|
||||
#, python-format
|
||||
msgid "Statement ID %s auto-completed for %s lines completed"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: code:addons/account_statement_base_completion/statement.py:500
|
||||
#, python-format
|
||||
msgid ""
|
||||
"%s Bank Statement ID %s has %s lines completed by %s \n"
|
||||
"%s\n"
|
||||
"%s\n"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: model:ir.model,name:account_statement_base_completion.model_account_bank_statement_line
|
||||
msgid "Bank Statement Line"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: field:account.bank.statement.line,additionnal_bank_fields:0
|
||||
msgid "Additionnal infos from bank"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: view:account.statement.profile:0
|
||||
msgid "Auto-Completion Rules"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: view:account.bank.statement:0
|
||||
msgid "Importation related infos"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: code:addons/account_statement_base_completion/statement.py:159
|
||||
#: code:addons/account_statement_base_completion/statement.py:179
|
||||
#, python-format
|
||||
msgid "Invalid invoice type for completion: %"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: field:account.statement.completion.rule,name:0
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: model:ir.model,name:account_statement_base_completion.model_account_statement_profile
|
||||
msgid "Statement Profile"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: view:account.bank.statement:0
|
||||
msgid "Auto Completion"
|
||||
msgstr ""
|
||||
|
||||
#. 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 ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: model:ir.model,name:account_statement_base_completion.model_account_statement_completion_rule
|
||||
msgid "account.statement.completion.rule"
|
||||
msgstr ""
|
||||
|
||||
#. 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 ""
|
||||
|
||||
#. 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 ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: code:addons/account_statement_base_completion/statement.py:158
|
||||
#: code:addons/account_statement_base_completion/statement.py:178
|
||||
#, python-format
|
||||
msgid "System error"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: field:account.bank.statement.line,already_completed:0
|
||||
msgid "Auto-Completed"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: code:addons/account_statement_base_completion/statement.py:448
|
||||
#: code:addons/account_statement_base_completion/statement.py:466
|
||||
#, python-format
|
||||
msgid "ORM bypass error"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: field:account.statement.completion.rule,sequence:0
|
||||
msgid "Sequence"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: code:addons/account_statement_base_completion/statement.py:280
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Line named \"%s\" (Ref:%s) was matched by more than one partner while "
|
||||
"looking on partner label: %s"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: help:account.statement.completion.rule,sequence:0
|
||||
msgid "Lower means parsed first."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: field:res.partner,bank_statement_label:0
|
||||
msgid "Bank Statement Label"
|
||||
msgstr ""
|
||||
|
||||
#. 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 ""
|
||||
|
||||
#. 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 ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: model:ir.model,name:account_statement_base_completion.model_res_partner
|
||||
msgid "Partner"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: view:account.bank.statement:0
|
||||
msgid "Completion Logs"
|
||||
msgstr ""
|
||||
@@ -0,0 +1,199 @@
|
||||
# Translation of OpenERP Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * account_statement_base_completion
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 7.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2014-01-21 11:57+0000\n"
|
||||
"PO-Revision-Date: 2014-01-21 11:57+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_statement_base_completion
|
||||
#: view:account.statement.completion.rule:0
|
||||
msgid "Related Profiles"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: help:account.bank.statement.line,label:0
|
||||
msgid "Generic field to store a label given from the bank/office on which we can base the default/standard providen rule."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: code:addons/account_statement_base_completion/statement.py:169
|
||||
#, python-format
|
||||
msgid "Line named \"%s\" (Ref:%s) was matched by more than one partner while looking on %s invoices"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: field:account.bank.statement,completion_logs:0
|
||||
msgid "Completion Log"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: field:account.bank.statement.line,label:0
|
||||
msgid "Label"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: model:ir.model,name:account_statement_base_completion.model_account_bank_statement
|
||||
msgid "Bank Statement"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: field:account.statement.completion.rule,function_to_call:0
|
||||
msgid "Method"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: code:addons/account_statement_base_completion/statement.py:326
|
||||
#, python-format
|
||||
msgid "Line named \"%s\" (Ref:%s) was matched by more than one partner while looking on partner by name"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: code:addons/account_statement_base_completion/statement.py:504
|
||||
#, python-format
|
||||
msgid "Statement ID %s auto-completed for %s lines completed"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: code:addons/account_statement_base_completion/statement.py:500
|
||||
#, python-format
|
||||
msgid "%s Bank Statement ID %s has %s lines completed by %s \n"
|
||||
"%s\n"
|
||||
"%s\n"
|
||||
""
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: model:ir.model,name:account_statement_base_completion.model_account_bank_statement_line
|
||||
msgid "Bank Statement Line"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: field:account.bank.statement.line,additionnal_bank_fields:0
|
||||
msgid "Additionnal infos from bank"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: view:account.statement.profile:0
|
||||
msgid "Auto-Completion Rules"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: view:account.bank.statement:0
|
||||
msgid "Importation related infos"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: code:addons/account_statement_base_completion/statement.py:159
|
||||
#: code:addons/account_statement_base_completion/statement.py:179
|
||||
#, python-format
|
||||
msgid "Invalid invoice type for completion: %"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: field:account.statement.completion.rule,name:0
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: model:ir.model,name:account_statement_base_completion.model_account_statement_profile
|
||||
msgid "Statement Profile"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: view:account.bank.statement:0
|
||||
msgid "Auto Completion"
|
||||
msgstr ""
|
||||
|
||||
#. 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 ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: model:ir.model,name:account_statement_base_completion.model_account_statement_completion_rule
|
||||
msgid "account.statement.completion.rule"
|
||||
msgstr ""
|
||||
|
||||
#. 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 ""
|
||||
|
||||
#. 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 ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: code:addons/account_statement_base_completion/statement.py:158
|
||||
#: code:addons/account_statement_base_completion/statement.py:178
|
||||
#, python-format
|
||||
msgid "System error"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: field:account.bank.statement.line,already_completed:0
|
||||
msgid "Auto-Completed"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: code:addons/account_statement_base_completion/statement.py:448
|
||||
#: code:addons/account_statement_base_completion/statement.py:466
|
||||
#, python-format
|
||||
msgid "ORM bypass error"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: field:account.statement.completion.rule,sequence:0
|
||||
msgid "Sequence"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: code:addons/account_statement_base_completion/statement.py:280
|
||||
#, python-format
|
||||
msgid "Line named \"%s\" (Ref:%s) was matched by more than one partner while looking on partner label: %s"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: help:account.statement.completion.rule,sequence:0
|
||||
msgid "Lower means parsed first."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: field:res.partner,bank_statement_label:0
|
||||
msgid "Bank Statement Label"
|
||||
msgstr ""
|
||||
|
||||
#. 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 ""
|
||||
|
||||
#. 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 ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: model:ir.model,name:account_statement_base_completion.model_res_partner
|
||||
msgid "Partner"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: view:account.bank.statement:0
|
||||
msgid "Completion Logs"
|
||||
msgstr ""
|
||||
|
||||
@@ -1,66 +1,138 @@
|
||||
# French translation for banking-addons
|
||||
# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
|
||||
# This file is distributed under the same license as the banking-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2014.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: banking-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2014-01-21 11:57+0000\n"
|
||||
"PO-Revision-Date: 2014-03-21 15:17+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: French <fr@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-22 07:11+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. 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"
|
||||
msgstr ""
|
||||
|
||||
#. 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."
|
||||
"Generic field to store a label given from the bank/office on which we can "
|
||||
"base the default/standard providen rule."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: code:addons/account_statement_base_completion/statement.py:169
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Line named \"%s\" (Ref:%s) was matched by more than one partner while "
|
||||
"looking on %s invoices"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: field:account.bank.statement,completion_logs:0
|
||||
msgid "Completion Log"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: field:account.bank.statement.line,label:0
|
||||
msgid "Label"
|
||||
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"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: field:account.statement.completion.rule,function_to_call:0
|
||||
msgid "Method"
|
||||
msgstr "Méthode"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: code:addons/account_statement_base_completion/statement.py:352
|
||||
#: code:addons/account_statement_base_completion/statement.py:326
|
||||
#, 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"
|
||||
msgid ""
|
||||
"Line named \"%s\" (Ref:%s) was matched by more than one partner while "
|
||||
"looking on partner by name"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: code:addons/account_statement_base_completion/statement.py:504
|
||||
#, python-format
|
||||
msgid "Statement ID %s auto-completed for %s lines completed"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: code:addons/account_statement_base_completion/statement.py:500
|
||||
#, python-format
|
||||
msgid ""
|
||||
"%s Bank Statement ID %s has %s lines completed by %s \n"
|
||||
"%s\n"
|
||||
"%s\n"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: model:ir.model,name:account_statement_base_completion.model_account_bank_statement_line
|
||||
msgid "Bank Statement Line"
|
||||
msgstr ""
|
||||
|
||||
#. 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"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: view:account.statement.profile:0
|
||||
msgid "Auto-Completion Rules"
|
||||
msgstr "Règles d'auto-complétion"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: view:account.bank.statement:0
|
||||
msgid "Importation related infos"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: code:addons/account_statement_base_completion/statement.py:159
|
||||
#: code:addons/account_statement_base_completion/statement.py:179
|
||||
#, python-format
|
||||
msgid "Invalid invoice type for completion: %"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: field:account.statement.completion.rule,name:0
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: model:ir.model,name:account_statement_base_completion.model_account_statement_profile
|
||||
msgid "Statement Profile"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: view:account.bank.statement:0
|
||||
msgid "Auto Completion"
|
||||
msgstr ""
|
||||
|
||||
#. 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 ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: model:ir.model,name:account_statement_base_completion.model_account_statement_completion_rule
|
||||
msgid "account.statement.completion.rule"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: help:account.bank.statement.line,additionnal_bank_fields:0
|
||||
@@ -68,86 +140,54 @@ 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"
|
||||
msgstr ""
|
||||
|
||||
#. 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"
|
||||
#: code:addons/account_statement_base_completion/statement.py:158
|
||||
#: code:addons/account_statement_base_completion/statement.py:178
|
||||
#, python-format
|
||||
msgid "System error"
|
||||
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é"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: view:account.bank.statement:0
|
||||
msgid "Auto Completion"
|
||||
msgstr "Auto-complétion"
|
||||
#: code:addons/account_statement_base_completion/statement.py:448
|
||||
#: code:addons/account_statement_base_completion/statement.py:466
|
||||
#, python-format
|
||||
msgid "ORM bypass error"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: field:account.statement.completion.rule,sequence:0
|
||||
msgid "Sequence"
|
||||
msgstr "Séquence"
|
||||
msgstr ""
|
||||
|
||||
#. 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é."
|
||||
#: code:addons/account_statement_base_completion/statement.py:280
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Line named \"%s\" (Ref:%s) was matched by more than one partner while "
|
||||
"looking on partner label: %s"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: help:account.statement.completion.rule,sequence:0
|
||||
msgid "Lower means parsed first."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: field:res.partner,bank_statement_label:0
|
||||
msgid "Bank Statement Label"
|
||||
msgstr "Description de relevé bancaire"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: help:account.bank.statement.line,already_completed:0
|
||||
@@ -155,26 +195,22 @@ 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)."
|
||||
"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"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_completion
|
||||
#: view:account.bank.statement:0
|
||||
msgid "Completion Logs"
|
||||
msgstr "Journaux d'auto-complétion"
|
||||
msgstr ""
|
||||
|
||||
@@ -23,6 +23,7 @@ import traceback
|
||||
import sys
|
||||
import logging
|
||||
import simplejson
|
||||
import inspect
|
||||
|
||||
import psycopg2
|
||||
|
||||
@@ -73,14 +74,13 @@ class AccountStatementProfil(orm.Model):
|
||||
rel='as_rul_st_prof_rel'),
|
||||
}
|
||||
|
||||
def _get_callable(self, cr, uid, profile, context=None):
|
||||
def _get_rules(self, cr, uid, profile, context=None):
|
||||
if isinstance(profile, (int, long)):
|
||||
prof = self.browse(cr, uid, profile, context=context)
|
||||
else:
|
||||
prof = profile
|
||||
# We need to respect the sequence order
|
||||
sorted_array = sorted(prof.rule_ids, key=attrgetter('sequence'))
|
||||
return tuple((x.function_to_call for x in sorted_array))
|
||||
return sorted(prof.rule_ids, key=attrgetter('sequence'))
|
||||
|
||||
def _find_values_from_rules(self, cr, uid, calls, line, context=None):
|
||||
"""
|
||||
@@ -99,11 +99,14 @@ class AccountStatementProfil(orm.Model):
|
||||
if context is None:
|
||||
context = {}
|
||||
if not calls:
|
||||
calls = self._get_callable(cr, uid, line['profile_id'], context=context)
|
||||
calls = self._get_rules(cr, uid, line['profile_id'], context=context)
|
||||
rule_obj = self.pool.get('account.statement.completion.rule')
|
||||
|
||||
for call in calls:
|
||||
method_to_call = getattr(rule_obj, call)
|
||||
method_to_call = getattr(rule_obj, call.function_to_call)
|
||||
if len(inspect.getargspec(method_to_call).args) == 6:
|
||||
result = method_to_call(cr, uid, call.id, line, context)
|
||||
else:
|
||||
result = method_to_call(cr, uid, line, context)
|
||||
if result:
|
||||
result['already_completed'] = True
|
||||
@@ -132,7 +135,6 @@ class AccountStatementCompletionRule(orm.Model):
|
||||
return [
|
||||
('get_from_ref_and_invoice', 'From line reference (based on customer invoice number)'),
|
||||
('get_from_ref_and_supplier_invoice', 'From line reference (based on supplier invoice number)'),
|
||||
('get_from_ref_and_so', 'From line reference (based on SO number)'),
|
||||
('get_from_label_and_partner_field', 'From line label (based on partner field)'),
|
||||
('get_from_label_and_partner_name', 'From line label (based on partner name)')]
|
||||
|
||||
@@ -232,49 +234,6 @@ class AccountStatementCompletionRule(orm.Model):
|
||||
"""
|
||||
return self._from_invoice(cr, uid, line, 'customer', context=context)
|
||||
|
||||
# Should be private but data are initialised with no update XML
|
||||
def get_from_ref_and_so(self, cr, uid, st_line, context=None):
|
||||
"""
|
||||
Match the partner based on the SO number and the reference of the statement
|
||||
line. Then, call the generic get_values_for_line method to complete other values.
|
||||
If more than one partner matched, raise the ErrorTooManyPartner error.
|
||||
|
||||
:param int/long st_line: read of the concerned account.bank.statement.line
|
||||
:return:
|
||||
A dict of value that can be passed directly to the write method of
|
||||
the statement line or {}
|
||||
{'partner_id': value,
|
||||
'account_id': value,
|
||||
|
||||
...}
|
||||
"""
|
||||
st_obj = self.pool.get('account.bank.statement.line')
|
||||
res = {}
|
||||
if st_line:
|
||||
so_obj = self.pool.get('sale.order')
|
||||
so_id = so_obj.search(cr,
|
||||
uid,
|
||||
[('name', '=', st_line['ref'])],
|
||||
context=context)
|
||||
if so_id:
|
||||
if so_id and len(so_id) == 1:
|
||||
so = so_obj.browse(cr, uid, so_id[0], context=context)
|
||||
res['partner_id'] = so.partner_id.id
|
||||
elif so_id and len(so_id) > 1:
|
||||
raise ErrorTooManyPartner(_('Line named "%s" (Ref:%s) was matched by more '
|
||||
'than one partner while looking on SO by ref.') %
|
||||
(st_line['name'], st_line['ref']))
|
||||
st_vals = st_obj.get_values_for_line(cr,
|
||||
uid,
|
||||
profile_id=st_line['profile_id'],
|
||||
master_account_id=st_line['master_account_id'],
|
||||
partner_id=res.get('partner_id', False),
|
||||
line_type='customer',
|
||||
amount=st_line['amount'] if st_line['amount'] else 0.0,
|
||||
context=context)
|
||||
res.update(st_vals)
|
||||
return res
|
||||
|
||||
# Should be private but data are initialised with no update XML
|
||||
def get_from_label_and_partner_field(self, cr, uid, st_line, context=None):
|
||||
"""
|
||||
@@ -360,9 +319,12 @@ class AccountStatementCompletionRule(orm.Model):
|
||||
if not context['partner_memoizer']:
|
||||
return res
|
||||
st_obj = self.pool.get('account.bank.statement.line')
|
||||
sql = "SELECT id FROM res_partner WHERE name ~* %s and id in %s"
|
||||
pattern = ".*%s.*" % re.escape(st_line['name'])
|
||||
cr.execute(sql, (pattern, context['partner_memoizer']))
|
||||
# regexp_replace(name,'([^a-zA-Z0-9 -])', '\\\1', 'g'), 'i') escape the column name to avoid false positive. (ex 'jho..doe' -> 'joh\.\.doe'
|
||||
sql = """SELECT id FROM (
|
||||
SELECT id, regexp_matches(%s, regexp_replace(name,'([^[:alpha:]0-9 -])', %s, 'g'), 'i') AS name_match FROM res_partner
|
||||
WHERE id IN %s) AS res_patner_matcher
|
||||
WHERE name_match IS NOT NULL"""
|
||||
cr.execute(sql, (st_line['name'], r"\\\1", context['partner_memoizer']))
|
||||
result = cr.fetchall()
|
||||
if not result:
|
||||
return res
|
||||
@@ -373,7 +335,7 @@ class AccountStatementCompletionRule(orm.Model):
|
||||
res['partner_id'] = result[0][0]
|
||||
st_vals = st_obj.get_values_for_line(cr,
|
||||
uid,
|
||||
profile_id=st_line['porfile_id'],
|
||||
profile_id=st_line['profile_id'],
|
||||
master_account_id=st_line['master_account_id'],
|
||||
partner_id=res['partner_id'],
|
||||
line_type=False,
|
||||
@@ -478,7 +440,7 @@ class AccountStatementLine(orm.Model):
|
||||
"""
|
||||
statement_line_obj = self.pool['account.bank.statement.line']
|
||||
model_cols = statement_line_obj._columns
|
||||
sparse_fields = dict([(k , col) for k, col in model_cols.iteritems() if isinstance(col, fields.sparse) and col._type == 'char'])
|
||||
sparse_fields = dict([(k, col) for k, col in model_cols.iteritems() if isinstance(col, fields.sparse) and col._type == 'char'])
|
||||
values = []
|
||||
for statement in statement_store:
|
||||
to_json_k = set()
|
||||
@@ -493,7 +455,6 @@ class AccountStatementLine(orm.Model):
|
||||
values.append(st_copy)
|
||||
return values
|
||||
|
||||
|
||||
def _insert_lines(self, cr, uid, statement_store, context=None):
|
||||
""" Do raw insert into database because ORM is awfully slow
|
||||
when doing batch write. It is a shame that batch function
|
||||
@@ -530,7 +491,7 @@ class AccountStatementLine(orm.Model):
|
||||
sql_err.pgerror)
|
||||
|
||||
|
||||
class AccountBankSatement(orm.Model):
|
||||
class AccountBankStatement(orm.Model):
|
||||
"""
|
||||
We add a basic button and stuff to support the auto-completion
|
||||
of the bank statement once line have been imported or manually fullfill.
|
||||
@@ -554,18 +515,21 @@ class AccountBankSatement(orm.Model):
|
||||
"""
|
||||
user_name = self.pool.get('res.users').read(cr, uid, uid,
|
||||
['name'], context=context)['name']
|
||||
statement = self.browse(cr, uid, stat_id, context=context)
|
||||
number_line = len(statement.line_ids)
|
||||
|
||||
log = self.read(cr, uid, stat_id, ['completion_logs'],
|
||||
context=context)['completion_logs']
|
||||
log = log if log else ""
|
||||
|
||||
completion_date = datetime.datetime.now().strftime(DEFAULT_SERVER_DATETIME_FORMAT)
|
||||
message = (_("%s Bank Statement ID %s has %s lines completed by %s \n%s\n%s\n") %
|
||||
(completion_date, stat_id, number_imported, user_name, error_msg, log))
|
||||
message = (_("%s Bank Statement ID %s has %s/%s lines completed by %s \n%s\n%s\n") %
|
||||
(completion_date, stat_id, number_imported, number_line, user_name,
|
||||
error_msg, log))
|
||||
self.write(cr, uid, [stat_id], {'completion_logs': message}, context=context)
|
||||
|
||||
body = (_('Statement ID %s auto-completed for %s lines completed') %
|
||||
(stat_id, number_imported)),
|
||||
body = (_('Statement ID %s auto-completed for %s/%s lines completed') %
|
||||
(stat_id, number_imported, number_line)),
|
||||
self.message_post(cr, uid,
|
||||
[stat_id],
|
||||
body=body,
|
||||
@@ -589,7 +553,7 @@ class AccountBankSatement(orm.Model):
|
||||
ctx = context.copy()
|
||||
ctx['line_ids'] = tuple((x.id for x in stat.line_ids))
|
||||
b_profile = stat.profile_id
|
||||
rules = profile_obj._get_callable(cr, uid, b_profile, context=context)
|
||||
rules = profile_obj._get_rules(cr, uid, b_profile, context=context)
|
||||
profile_id = b_profile.id # Only for perfo even it gains almost nothing
|
||||
master_account_id = b_profile.receivable_account_id
|
||||
master_account_id = master_account_id.id if master_account_id else False
|
||||
|
||||
87
account_statement_base_completion/test/completion_test.yml
Normal file
87
account_statement_base_completion/test/completion_test.yml
Normal file
@@ -0,0 +1,87 @@
|
||||
-
|
||||
In order to test the banking framework, I first need to create a profile
|
||||
-
|
||||
!record {model: account.statement.profile, id: profile_test1}:
|
||||
name: Bank EUR Profile
|
||||
journal_id: account.bank_journal
|
||||
commission_account_id: account.a_expense
|
||||
company_id: base.main_company
|
||||
balance_check: True
|
||||
rule_ids:
|
||||
- bank_statement_completion_rule_4
|
||||
- bank_statement_completion_rule_5
|
||||
- bank_statement_completion_rule_2
|
||||
- bank_statement_completion_rule_3
|
||||
-
|
||||
Now I create a statement. I create statment lines separately because I need
|
||||
to find each one by XML id
|
||||
-
|
||||
!record {model: account.bank.statement, id: statement_test1}:
|
||||
name: Statement 2
|
||||
profile_id: profile_test1
|
||||
company_id: base.main_company
|
||||
-
|
||||
I create a statement line for a CI
|
||||
-
|
||||
!record {model: account.bank.statement.line, id: statement_line_ci}:
|
||||
name: Test autocompletion based on Customer Invoice Number
|
||||
statement_id: statement_test1
|
||||
ref: CI0001
|
||||
date: '2013-12-20'
|
||||
amount: 210.0
|
||||
-
|
||||
I create a statement line for a SI
|
||||
-
|
||||
!record {model: account.bank.statement.line, id: statement_line_si}:
|
||||
name: Test autocompletion based on Supplier Invoice Number
|
||||
statement_id: statement_test1
|
||||
ref: T2S12345
|
||||
date: '2013-12-19'
|
||||
amount: -65.0
|
||||
-
|
||||
I create a statement line for the Partner Name
|
||||
-
|
||||
!record {model: account.bank.statement.line, id: statement_line_partner_name}:
|
||||
name: Test autocompletion based on Partner Name Vauxoo
|
||||
statement_id: statement_test1
|
||||
ref: /
|
||||
date: '2013-12-17'
|
||||
amount: 600.0
|
||||
-
|
||||
I create a statement line for the Partner Label
|
||||
-
|
||||
!record {model: account.bank.statement.line, id: statement_line_partner_label}:
|
||||
name: test autocompletion based on text (XXX66Z) matching with partner form information (note that Ref does not exist)
|
||||
statement_id: statement_test1
|
||||
ref: ZU788
|
||||
date: '2013-12-24'
|
||||
amount: -932.4
|
||||
-
|
||||
I run the auto complete
|
||||
-
|
||||
!python {model: account.bank.statement}: |
|
||||
result = self.button_auto_completion(cr, uid, [ref("statement_test1")])
|
||||
-
|
||||
Now I can check that all is nice and shiny, line 1. I expect the Customer
|
||||
Invoice Number to be recognised.
|
||||
I Use _ref, because ref conflicts with the field ref of the statement line
|
||||
-
|
||||
!assert {model: account.bank.statement.line, id: statement_line_ci, string: Check completion by CI number}:
|
||||
- partner_id.id == _ref("base.res_partner_12")
|
||||
-
|
||||
Line 2. I expect the Supplier invoice number to be recognised. The supplier
|
||||
invoice was created by the account module demo data, and we confirmed it
|
||||
here.
|
||||
-
|
||||
!assert {model: account.bank.statement.line, id: statement_line_si, string: Check completion by SI number}:
|
||||
- partner_id.id == _ref("base.res_partner_17")
|
||||
-
|
||||
Line 3. I check that the partner name has been recognised.
|
||||
-
|
||||
!assert {model: account.bank.statement.line, id: statement_line_partner_name, string: Check completion by partner name}:
|
||||
- partner_id.name == 'Vauxoo'
|
||||
-
|
||||
Line 4. I check that the partner special label has been recognised.
|
||||
-
|
||||
!assert {model: account.bank.statement.line, id: statement_line_partner_label, string: Check completion by partner label}:
|
||||
- partner_id.id == _ref("base.res_partner_6")
|
||||
32
account_statement_base_completion/test/invoice.yml
Normal file
32
account_statement_base_completion/test/invoice.yml
Normal file
@@ -0,0 +1,32 @@
|
||||
-
|
||||
I create a customer Invoice to be found by the completion.
|
||||
-
|
||||
!record {model: account.invoice, id: invoice_for_completion_1}:
|
||||
account_id: account.a_recv
|
||||
company_id: base.main_company
|
||||
currency_id: base.EUR
|
||||
internal_number: CI0001
|
||||
invoice_line:
|
||||
- account_id: account.a_sale
|
||||
name: '[PCSC234] PC Assemble SC234'
|
||||
price_unit: 210.0
|
||||
quantity: 1.0
|
||||
product_id: product.product_product_3
|
||||
uos_id: product.product_uom_unit
|
||||
journal_id: account.bank_journal
|
||||
partner_id: base.res_partner_12
|
||||
reference_type: none
|
||||
-
|
||||
I confirm the Invoice
|
||||
-
|
||||
!workflow {model: account.invoice, action: invoice_open, ref: invoice_for_completion_1}
|
||||
-
|
||||
I check that the invoice state is "Open"
|
||||
-
|
||||
!assert {model: account.invoice, id: invoice_for_completion_1}:
|
||||
- state == 'open'
|
||||
-
|
||||
I check that it is given the number "CI0001"
|
||||
-
|
||||
!assert {model: account.invoice, id: invoice_for_completion_1, string: Check CI number}:
|
||||
- number == 'CI0001'
|
||||
5
account_statement_base_completion/test/partner.yml
Normal file
5
account_statement_base_completion/test/partner.yml
Normal file
@@ -0,0 +1,5 @@
|
||||
-
|
||||
I fill in the field Bank Statement Label in a Partner
|
||||
-
|
||||
!record {model: res.partner, id: base.res_partner_6}:
|
||||
bank_statement_label: XXX66Z
|
||||
31
account_statement_base_completion/test/supplier_invoice.yml
Normal file
31
account_statement_base_completion/test/supplier_invoice.yml
Normal file
@@ -0,0 +1,31 @@
|
||||
-
|
||||
I check that my invoice is a supplier invoice
|
||||
-
|
||||
!assert {model: account.invoice, id: account.demo_invoice_0, string: Check invoice type}:
|
||||
- type == 'in_invoice'
|
||||
-
|
||||
I add a reference to an existing supplier invoce
|
||||
-
|
||||
!python {model: account.invoice}: |
|
||||
self.write(cr, uid, ref('account.demo_invoice_0'), {
|
||||
'supplier_invoice_number': 'T2S12345'
|
||||
})
|
||||
-
|
||||
I check a second time that my invoice is still a supplier invoice
|
||||
-
|
||||
!assert {model: account.invoice, id: account.demo_invoice_0, string: Check invoice type 2}:
|
||||
- type == 'in_invoice'
|
||||
-
|
||||
Now I confirm it
|
||||
-
|
||||
!workflow {model: account.invoice, action: invoice_open, ref: account.demo_invoice_0}
|
||||
-
|
||||
I check that the supplier number is there
|
||||
-
|
||||
!assert {model: account.invoice, id: account.demo_invoice_0, string: Check supplier number}:
|
||||
- supplier_invoice_number == 'T2S12345'
|
||||
-
|
||||
I check a third time that my invoice is still a supplier invoice
|
||||
-
|
||||
!assert {model: account.invoice, id: account.demo_invoice_0, string: Check invoice type 3}:
|
||||
- type == 'in_invoice'
|
||||
27
account_statement_base_completion/tests/__init__.py
Normal file
27
account_statement_base_completion/tests/__init__.py
Normal file
@@ -0,0 +1,27 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
#
|
||||
# Authors: Laurent Mignon
|
||||
# Copyright (c) 2014 Acsone SA/NV (http://www.acsone.eu)
|
||||
# All Rights Reserved
|
||||
#
|
||||
# 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 . import test_base_completion
|
||||
|
||||
checks = [
|
||||
test_base_completion
|
||||
]
|
||||
@@ -0,0 +1,95 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
#
|
||||
# Authors: Laurent Mignon
|
||||
# Copyright (c) 2014 Acsone SA/NV (http://www.acsone.eu)
|
||||
# All Rights Reserved
|
||||
#
|
||||
# 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.tests import common
|
||||
import time
|
||||
from collections import namedtuple
|
||||
|
||||
name_completion_case = namedtuple("name_completion_case", ["partner_name", "line_label", "should_match"])
|
||||
NAMES_COMPLETION_CASES = [
|
||||
name_completion_case("Acsone", "Line for Acsone SA", True),
|
||||
name_completion_case("Acsone", "Line for Acsone", True),
|
||||
name_completion_case("Acsone", "Acsone for line", True),
|
||||
name_completion_case("acsone", "Acsone for line", True),
|
||||
name_completion_case("Acsone SA", "Line for Acsone SA test", True),
|
||||
name_completion_case("Ac..ne", "Acsone for line", False),
|
||||
name_completion_case("é@|r{}", "Acsone é@|r{} for line", True),
|
||||
name_completion_case("Acsone", "A..one for line", False),
|
||||
name_completion_case("A.one SA", "A.one SA for line", True),
|
||||
name_completion_case("Acsone SA", "Line for Acsone ([^a-zA-Z0-9 -]) SA test", False),
|
||||
name_completion_case("Acsone ([^a-zA-Z0-9 -]) SA", "Line for Acsone ([^a-zA-Z0-9 -]) SA test", True),
|
||||
]
|
||||
|
||||
|
||||
class base_completion(common.TransactionCase):
|
||||
|
||||
def setUp(self):
|
||||
super(base_completion, self).setUp()
|
||||
self.company_a = self.browse_ref('base.main_company')
|
||||
self.profile_obj = self.registry("account.statement.profile")
|
||||
self.partner_obj = self.registry("res.partner")
|
||||
self.account_bank_statement_obj = self.registry("account.bank.statement")
|
||||
self.account_bank_statement_line_obj = self.registry("account.bank.statement.line")
|
||||
self.journal_id = self.ref("account.bank_journal")
|
||||
self.partner_id = self.ref('base.main_partner')
|
||||
self.account_id = self.ref("account.a_recv")
|
||||
self.partner_id = self.ref("base.res_partner_12")
|
||||
|
||||
def test_name_completion(self):
|
||||
"""Test complete partner_id from statement line label
|
||||
Test the automatic completion of the partner_id based if the name of the partner appears in
|
||||
the statement line label
|
||||
"""
|
||||
self.completion_rule_id = self.ref('account_statement_base_completion.bank_statement_completion_rule_3')
|
||||
# Create the profile
|
||||
self.profile_id = self.profile_obj.create(self.cr, self.uid, {
|
||||
"name": "TEST",
|
||||
"commission_account_id": self.account_id,
|
||||
"journal_id": self.journal_id,
|
||||
"rule_ids": [(6, 0, [self.completion_rule_id])]})
|
||||
# Create a bank statement
|
||||
self.statement_id = self.account_bank_statement_obj.create(self.cr, self.uid, {
|
||||
"balance_end_real": 0.0,
|
||||
"balance_start": 0.0,
|
||||
"date": time.strftime('%Y-%m-%d'),
|
||||
"journal_id": self.journal_id,
|
||||
"profile_id": self.profile_id
|
||||
})
|
||||
|
||||
for case in NAMES_COMPLETION_CASES:
|
||||
self.partner_obj.write(self.cr, self.uid, self.partner_id, {'name': case.partner_name})
|
||||
statement_line_id = self.account_bank_statement_line_obj.create(self.cr, self.uid, {
|
||||
'amount': 1000.0,
|
||||
'name': case.line_label,
|
||||
'ref': 'My ref',
|
||||
'statement_id': self.statement_id,
|
||||
})
|
||||
statement_line = self.account_bank_statement_line_obj.browse(self.cr, self.uid, statement_line_id)
|
||||
self.assertFalse(statement_line.partner_id, "Partner_id must be blank before completion")
|
||||
statement_obj = self.account_bank_statement_obj.browse(self.cr, self.uid, self.statement_id)
|
||||
statement_obj.button_auto_completion()
|
||||
statement_line = self.account_bank_statement_line_obj.browse(self.cr, self.uid, statement_line_id)
|
||||
if case.should_match:
|
||||
self.assertEquals(self.partner_id, statement_line.partner_id['id'],
|
||||
"Missing expected partner id after completion (partner_name: %s, line_name: %s)" % (case.partner_name, case.line_label))
|
||||
else:
|
||||
self.assertNotEquals(self.partner_id, statement_line.partner_id['id'],
|
||||
"Partner id should be empty after completion(partner_name: %s, line_name: %s)" % (case.partner_name, case.line_label))
|
||||
@@ -20,7 +20,7 @@
|
||||
##############################################################################
|
||||
|
||||
{'name': "Bank statement base import",
|
||||
'version': '1.0',
|
||||
'version': '1.1.1',
|
||||
'author': 'Camptocamp',
|
||||
'maintainer': 'Camptocamp',
|
||||
'category': 'Finance',
|
||||
|
||||
@@ -0,0 +1,289 @@
|
||||
# Translation of OpenERP Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * account_statement_base_import
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 7.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2014-01-21 11:58+0000\n"
|
||||
"PO-Revision-Date: 2014-01-21 11:58+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_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 ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: view:account.statement.profile:0
|
||||
msgid "Historical Import Logs"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: model:ir.model,name:account_statement_base_import.model_credit_statement_import
|
||||
msgid "credit.statement.import"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: field:credit.statement.import,input_statement:0
|
||||
msgid "Statement file"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/statement.py:168
|
||||
#, python-format
|
||||
msgid "Column %s you try to import is not present in the bank statement line!"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/statement.py:162
|
||||
#, python-format
|
||||
msgid "Nothing to import"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: field:credit.statement.import,journal_id:0
|
||||
msgid "Financial journal to use transaction"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:108
|
||||
#, python-format
|
||||
msgid "Column %s not present in file"
|
||||
msgstr ""
|
||||
|
||||
#. 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 ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:54
|
||||
#, python-format
|
||||
msgid "User Error"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/statement.py:223
|
||||
#, python-format
|
||||
msgid "The statement cannot be created: %s"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/statement.py:167
|
||||
#, python-format
|
||||
msgid "Missing column!"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/parser/parser.py:150
|
||||
#, python-format
|
||||
msgid "No buffer file given."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:107
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:171
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:205
|
||||
#, python-format
|
||||
msgid "Invalid data"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: field:account.statement.profile,launch_import_completion:0
|
||||
msgid "Launch completion after import"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: field:credit.statement.import,partner_id:0
|
||||
msgid "Credit insitute partner"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: view:account.statement.profile:0
|
||||
msgid "Import related infos"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/statement.py:163
|
||||
#, python-format
|
||||
msgid "The file is empty"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/wizard/import_statement.py:90
|
||||
#, python-format
|
||||
msgid "Please use a file with an extention"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:172
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:206
|
||||
#, python-format
|
||||
msgid "Value %s of column %s is not valid.\n"
|
||||
" Please check the line with ref %s:\n"
|
||||
" \n"
|
||||
" Detail: %s"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:29
|
||||
#: code:addons/account_statement_base_import/parser/generic_file_parser.py:30
|
||||
#, python-format
|
||||
msgid "Please install python lib xlrd"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:160
|
||||
#, python-format
|
||||
msgid " It should be YYYY-MM-DD for column: %s value: %s \n"
|
||||
" \n"
|
||||
" \n"
|
||||
" Please check the line with ref: %s \n"
|
||||
" \n"
|
||||
" Detail: %s"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: field:account.statement.profile,last_import_date:0
|
||||
msgid "Last Import Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: model:ir.model,name:account_statement_base_import.model_account_statement_profile
|
||||
msgid "Statement Profile"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/statement.py:222
|
||||
#, python-format
|
||||
msgid "Statement import error"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:193
|
||||
#, python-format
|
||||
msgid "Please modify the cell formatting to date format for column: %s value: %s\n"
|
||||
" Please check the line with ref: %s\n"
|
||||
" \n"
|
||||
" Detail: %s"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:192
|
||||
#, python-format
|
||||
msgid "Date format is not valid"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: field:account.statement.profile,import_type:0
|
||||
msgid "Type of import"
|
||||
msgstr ""
|
||||
|
||||
#. 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 ""
|
||||
|
||||
#. 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 ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/statement.py:154
|
||||
#, python-format
|
||||
msgid "No Profile!"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:159
|
||||
#, python-format
|
||||
msgid "Date format is not valid."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: field:credit.statement.import,profile_id:0
|
||||
msgid "Import configuration parameter"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: field:account.statement.profile,rec_log:0
|
||||
msgid "log"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: view:credit.statement.import:0
|
||||
msgid "Import Parameters Summary"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: field:credit.statement.import,balance_check:0
|
||||
msgid "Balance check"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: field:credit.statement.import,force_partner_on_bank:0
|
||||
msgid "Force partner on bank move"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: field:credit.statement.import,file_name:0
|
||||
msgid "File Name"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:55
|
||||
#, python-format
|
||||
msgid "Invalid file type %s. Please use csv or xls"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/statement.py:155
|
||||
#, python-format
|
||||
msgid "You must provide a valid profile to import a bank statement!"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/statement.py:83
|
||||
#, python-format
|
||||
msgid "Statement ID %s have been imported with %s lines."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: field:credit.statement.import,receivable_account_id:0
|
||||
msgid "Force Receivable/Payable Account"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:164
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:174
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:198
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:208
|
||||
#, python-format
|
||||
msgid "Missing"
|
||||
msgstr ""
|
||||
|
||||
#. 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 ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: view:credit.statement.import:0
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#. 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 ""
|
||||
|
||||
305
account_statement_base_import/i18n/es.po
Normal file
305
account_statement_base_import/i18n/es.po
Normal file
@@ -0,0 +1,305 @@
|
||||
# Spanish translation for banking-addons
|
||||
# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
|
||||
# This file is distributed under the same license as the banking-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2014.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: banking-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2014-01-21 11:58+0000\n"
|
||||
"PO-Revision-Date: 2014-04-02 22:23+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Spanish <es@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-04-03 06:06+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. 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 "Importar extracto"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: view:account.statement.profile:0
|
||||
msgid "Historical Import Logs"
|
||||
msgstr ""
|
||||
|
||||
#. 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
|
||||
#: field:credit.statement.import,input_statement:0
|
||||
msgid "Statement file"
|
||||
msgstr "Archivo de extracto"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/statement.py:168
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Column %s you try to import is not present in the bank statement line!"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/statement.py:162
|
||||
#, python-format
|
||||
msgid "Nothing to import"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: field:credit.statement.import,journal_id:0
|
||||
msgid "Financial journal to use transaction"
|
||||
msgstr "Diario contable a usar"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:102
|
||||
#, python-format
|
||||
msgid "Column %s not present in file"
|
||||
msgstr "La columna %s no está presente en el archivo"
|
||||
|
||||
#. 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 "Importar extracto bancario"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:54
|
||||
#, python-format
|
||||
msgid "User Error"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/statement.py:223
|
||||
#, python-format
|
||||
msgid "The statement cannot be created: %s"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/statement.py:167
|
||||
#, python-format
|
||||
msgid "Missing column!"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/parser/parser.py:166
|
||||
#, python-format
|
||||
msgid "No buffer file given."
|
||||
msgstr "No se ha proporcionado ningún búfer de archivo."
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:107
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:171
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:205
|
||||
#, python-format
|
||||
msgid "Invalid data"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: field:account.statement.profile,launch_import_completion:0
|
||||
msgid "Launch completion after import"
|
||||
msgstr "Lanzar el completado después de la importación"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: field:credit.statement.import,partner_id:0
|
||||
msgid "Credit insitute partner"
|
||||
msgstr "Empresa para el agente financiero"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: view:account.statement.profile:0
|
||||
msgid "Import related infos"
|
||||
msgstr "Importar información relacionada"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/statement.py:163
|
||||
#, python-format
|
||||
msgid "The file is empty"
|
||||
msgstr ""
|
||||
|
||||
#. 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 "Use por favor un archivo con extensión"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:172
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:206
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Value %s of column %s is not valid.\n"
|
||||
" Please check the line with ref %s:\n"
|
||||
" \n"
|
||||
" Detail: %s"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:29
|
||||
#: code:addons/account_statement_base_import/parser/generic_file_parser.py:31
|
||||
#, python-format
|
||||
msgid "Please install python lib xlrd"
|
||||
msgstr "Por favor instale la librería de Python xlrd"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:160
|
||||
#, python-format
|
||||
msgid ""
|
||||
" It should be YYYY-MM-DD for column: %s value: %s \n"
|
||||
" \n"
|
||||
" \n"
|
||||
" Please check the line with ref: %s \n"
|
||||
" \n"
|
||||
" Detail: %s"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: field:account.statement.profile,last_import_date:0
|
||||
msgid "Last Import Date"
|
||||
msgstr "Última fecha de importación"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: model:ir.model,name:account_statement_base_import.model_account_statement_profile
|
||||
msgid "Statement Profile"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/statement.py:234
|
||||
#, python-format
|
||||
msgid "Statement import error"
|
||||
msgstr "Error de importación del extracto"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:193
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Please modify the cell formatting to date format for column: %s value: %s\n"
|
||||
" Please check the line with ref: %s\n"
|
||||
" \n"
|
||||
" Detail: %s"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:192
|
||||
#, python-format
|
||||
msgid "Date format is not valid"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: field:account.statement.profile,import_type:0
|
||||
msgid "Type of import"
|
||||
msgstr "Tipo de importación"
|
||||
|
||||
#. 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 ""
|
||||
|
||||
#. 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 ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/statement.py:154
|
||||
#, python-format
|
||||
msgid "No Profile!"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:159
|
||||
#, python-format
|
||||
msgid "Date format is not valid."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: field:credit.statement.import,profile_id:0
|
||||
msgid "Import configuration parameter"
|
||||
msgstr "Parámetros de configuración de la importación"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: field:account.statement.profile,rec_log:0
|
||||
msgid "log"
|
||||
msgstr "registro"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: view:credit.statement.import:0
|
||||
msgid "Import Parameters Summary"
|
||||
msgstr "Resumen de parámetros de importación"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: field:credit.statement.import,balance_check:0
|
||||
msgid "Balance check"
|
||||
msgstr "Comprobar saldo"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: field:credit.statement.import,force_partner_on_bank:0
|
||||
msgid "Force partner on bank move"
|
||||
msgstr "Forzar empresa en el apunte bancario"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: field:credit.statement.import,file_name:0
|
||||
msgid "File Name"
|
||||
msgstr "Nombre del archivo"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:55
|
||||
#, python-format
|
||||
msgid "Invalid file type %s. Please use csv or xls"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/statement.py:155
|
||||
#, python-format
|
||||
msgid "You must provide a valid profile to import a bank statement!"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/statement.py:83
|
||||
#, python-format
|
||||
msgid "Statement ID %s have been imported with %s lines."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: field:credit.statement.import,receivable_account_id:0
|
||||
msgid "Force Receivable/Payable Account"
|
||||
msgstr "Forzar cuenta a cobrar/a pagar"
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:164
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:174
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:198
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:208
|
||||
#, python-format
|
||||
msgid "Missing"
|
||||
msgstr ""
|
||||
|
||||
#. 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 ""
|
||||
"Escoja aquí el método con el que quiere importar el extracto bancario para "
|
||||
"este perfil."
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: view:credit.statement.import:0
|
||||
msgid "Cancel"
|
||||
msgstr "Cancelar"
|
||||
|
||||
#. 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 ""
|
||||
@@ -1,243 +1,287 @@
|
||||
# French translation for banking-addons
|
||||
# Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014
|
||||
# This file is distributed under the same license as the banking-addons package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2014.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: banking-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2014-01-21 11:58+0000\n"
|
||||
"PO-Revision-Date: 2014-03-21 15:17+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: French <fr@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-22 07:11+0000\n"
|
||||
"X-Generator: Launchpad (build 16967)\n"
|
||||
|
||||
#. 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é"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: view:account.statement.profile:0
|
||||
msgid "Historical Import Logs"
|
||||
msgstr ""
|
||||
|
||||
#. 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"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: field:credit.statement.import,input_statement:0
|
||||
msgid "Statement file"
|
||||
msgstr "Fichier à importer"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: view:account.statement.profile:0
|
||||
msgid "Import Logs"
|
||||
msgstr "Journaux d'import"
|
||||
#: code:addons/account_statement_base_import/statement.py:168
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Column %s you try to import is not present in the bank statement line!"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/statement.py:162
|
||||
#, python-format
|
||||
msgid "Nothing to import"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: field:credit.statement.import,journal_id:0
|
||||
msgid "Financial journal to use transaction"
|
||||
msgstr "Journal"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:100
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:108
|
||||
#, python-format
|
||||
msgid "Column %s not present in file"
|
||||
msgstr "Colonne %s non présente dans le fichier"
|
||||
msgstr ""
|
||||
|
||||
#. 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
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:54
|
||||
#, 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 "
|
||||
msgid "User Error"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/statement.py:223
|
||||
#, python-format
|
||||
msgid "The statement cannot be created: %s"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/statement.py:167
|
||||
#, python-format
|
||||
msgid "Missing column!"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/parser/parser.py:150
|
||||
#, python-format
|
||||
msgid "No buffer file given."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:107
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:171
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:205
|
||||
#, python-format
|
||||
msgid "Invalid data"
|
||||
msgstr ""
|
||||
|
||||
#. 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"
|
||||
msgstr ""
|
||||
|
||||
#. 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 !"
|
||||
msgstr ""
|
||||
|
||||
#. 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
|
||||
#: code:addons/account_statement_base_import/statement.py:163
|
||||
#, python-format
|
||||
msgid "The file is empty"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/wizard/import_statement.py:90
|
||||
#, 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
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:172
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:206
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Value %s of column %s is not valid.\n"
|
||||
" Please check the line with ref %s:\n"
|
||||
" \n"
|
||||
" Detail: %s"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:29
|
||||
#: code:addons/account_statement_base_import/parser/generic_file_parser.py:30
|
||||
#, python-format
|
||||
msgid "Please install python lib xlrd"
|
||||
msgstr "Veuillez installer la bibliothèque python xlrd"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:58
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:160
|
||||
#, 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"
|
||||
msgid ""
|
||||
" It should be YYYY-MM-DD for column: %s value: %s \n"
|
||||
" \n"
|
||||
" \n"
|
||||
" Please check the line with ref: %s \n"
|
||||
" \n"
|
||||
" Detail: %s"
|
||||
msgstr ""
|
||||
|
||||
#. 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
|
||||
#: model:ir.model,name:account_statement_base_import.model_account_statement_profile
|
||||
msgid "Statement Profile"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/statement.py:222
|
||||
#, python-format
|
||||
msgid "Statement import error"
|
||||
msgstr "Erreur d'import de relevé"
|
||||
msgstr ""
|
||||
|
||||
#. 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
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:193
|
||||
#, python-format
|
||||
msgid "Missing column !"
|
||||
msgstr "Colonne manquante !"
|
||||
msgid ""
|
||||
"Please modify the cell formatting to date format for column: %s value: %s\n"
|
||||
" Please check the line with ref: %s\n"
|
||||
" \n"
|
||||
" Detail: %s"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: field:account.statement.profile,rec_log:0
|
||||
msgid "log"
|
||||
msgstr "journal"
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:192
|
||||
#, python-format
|
||||
msgid "Date format is not valid"
|
||||
msgstr ""
|
||||
|
||||
#. 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."
|
||||
"Tic that box to automatically launch the completion on each imported file "
|
||||
"using this profile."
|
||||
msgstr ""
|
||||
|
||||
#. 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 ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/statement.py:154
|
||||
#, python-format
|
||||
msgid "No Profile!"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:159
|
||||
#, python-format
|
||||
msgid "Date format is not valid."
|
||||
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"
|
||||
msgstr ""
|
||||
|
||||
#. 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é."
|
||||
#: field:account.statement.profile,rec_log:0
|
||||
msgid "log"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: view:credit.statement.import:0
|
||||
msgid "Import Parameters Summary"
|
||||
msgstr "Résumé des paramètres d'import"
|
||||
msgstr ""
|
||||
|
||||
#. 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"
|
||||
msgstr ""
|
||||
|
||||
#. 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"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: field:credit.statement.import,file_name:0
|
||||
msgid "File Name"
|
||||
msgstr "Nom du fichier"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:55
|
||||
#, python-format
|
||||
msgid "Invalid file type %s. Please use csv or xls"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/statement.py:155
|
||||
#, python-format
|
||||
msgid "You must provide a valid profile to import a bank statement!"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/statement.py:83
|
||||
#, python-format
|
||||
msgid "Statement ID %s have been imported with %s lines."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: field:credit.statement.import,receivable_account_id:0
|
||||
msgid "Force Receivable/Payable Account"
|
||||
msgstr "Forcer le compte Client/Fournisseur"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:164
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:174
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:198
|
||||
#: code:addons/account_statement_base_import/parser/file_parser.py:208
|
||||
#, python-format
|
||||
msgid "Missing"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_base_import
|
||||
#: help:account.statement.profile,import_type:0
|
||||
@@ -245,9 +289,15 @@ 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"
|
||||
msgstr ""
|
||||
|
||||
#. 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 ""
|
||||
|
||||
@@ -35,24 +35,24 @@ def float_or_zero(val):
|
||||
|
||||
class FileParser(BankStatementImportParser):
|
||||
"""
|
||||
Generic abstract class for defining parser for .csv or .xls file format.
|
||||
Generic abstract class for defining parser for .csv, .xls or .xlsx file format.
|
||||
"""
|
||||
|
||||
def __init__(self, parse_name, ftype='csv', extra_fields=None, header=None, **kwargs):
|
||||
"""
|
||||
:param char: parse_name: The name of the parser
|
||||
:param char: ftype: extension of the file (could be csv or xls)
|
||||
:param char: ftype: extension of the file (could be csv, xls or xlsx)
|
||||
:param dict: extra_fields: extra fields to add to the conversion dict. In the format
|
||||
{fieldname: fieldtype}
|
||||
:param list: header : specify header fields if the csv file has no header
|
||||
"""
|
||||
|
||||
super(FileParser, self).__init__(parse_name, **kwargs)
|
||||
if ftype in ('csv', 'xls'):
|
||||
self.ftype = ftype
|
||||
if ftype in ('csv', 'xls' ,'xlsx'):
|
||||
self.ftype = ftype[0:3]
|
||||
else:
|
||||
raise except_osv(_('User Error'),
|
||||
_('Invalid file type %s. Please use csv or xls') % ftype)
|
||||
_('Invalid file type %s. Please use csv, xls or xlsx') % ftype)
|
||||
self.conversion_dict = {
|
||||
'ref': unicode,
|
||||
'label': unicode,
|
||||
@@ -81,7 +81,7 @@ class FileParser(BankStatementImportParser):
|
||||
|
||||
def _parse(self, *args, **kwargs):
|
||||
"""
|
||||
Launch the parsing through .csv or .xls depending on the
|
||||
Launch the parsing through .csv, .xls or .xlsx depending on the
|
||||
given ftype
|
||||
"""
|
||||
|
||||
@@ -128,7 +128,7 @@ class FileParser(BankStatementImportParser):
|
||||
|
||||
def _parse_xls(self):
|
||||
"""
|
||||
:return: dict of dict from xls file (line/rows)
|
||||
:return: dict of dict from xls/xlsx file (line/rows)
|
||||
"""
|
||||
wb_file = tempfile.NamedTemporaryFile()
|
||||
wb_file.write(self.filebuffer)
|
||||
@@ -180,7 +180,7 @@ class FileParser(BankStatementImportParser):
|
||||
def _from_xls(self, result_set, conversion_rules):
|
||||
"""
|
||||
Handle the converstion from the dict and handle date format from
|
||||
an .xls file.
|
||||
an .csv, .xls or .xlsx file.
|
||||
"""
|
||||
for line in result_set:
|
||||
for rule in conversion_rules:
|
||||
|
||||
@@ -20,12 +20,13 @@
|
||||
##############################################################################
|
||||
import base64
|
||||
import csv
|
||||
from datetime import datetime
|
||||
|
||||
|
||||
def UnicodeDictReader(utf8_data, **kwargs):
|
||||
sniffer = csv.Sniffer()
|
||||
pos = utf8_data.tell()
|
||||
sample_data = utf8_data.read(1024)
|
||||
sample_data = utf8_data.read(2048)
|
||||
utf8_data.seek(pos)
|
||||
dialect = sniffer.sniff(sample_data, delimiters=',;\t')
|
||||
csv_reader = csv.DictReader(utf8_data, dialect=dialect, **kwargs)
|
||||
@@ -49,6 +50,10 @@ class BankStatementImportParser(object):
|
||||
self.result_row_list = None
|
||||
# The file buffer on which to work on
|
||||
self.filebuffer = None
|
||||
self.balance_start = None
|
||||
self.balance_end = None
|
||||
self.statement_name = None
|
||||
self.statement_date = None
|
||||
|
||||
@classmethod
|
||||
def parser_for(cls, parser_name):
|
||||
@@ -110,6 +115,19 @@ class BankStatementImportParser(object):
|
||||
"""
|
||||
return NotImplementedError
|
||||
|
||||
def get_st_vals(self):
|
||||
"""
|
||||
This method return a dict of vals that ca be passed to
|
||||
create method of statement.
|
||||
:return: dict of vals that represent additional infos for the statement
|
||||
"""
|
||||
return {
|
||||
'name': self.statement_name or '/',
|
||||
'balance_start': self.balance_start,
|
||||
'balance_end_real': self.balance_end,
|
||||
'date': self.statement_date or datetime.now()
|
||||
}
|
||||
|
||||
def get_st_line_vals(self, line, *args, **kwargs):
|
||||
"""
|
||||
Implement a method in your parser that must return a dict of vals that can be
|
||||
|
||||
@@ -26,17 +26,19 @@ import datetime
|
||||
from openerp.osv.orm import Model
|
||||
from openerp.osv import fields, osv
|
||||
from parser import new_bank_statement_parser
|
||||
from openerp.tools.config import config
|
||||
|
||||
|
||||
class AccountStatementProfil(Model):
|
||||
_inherit = "account.statement.profile"
|
||||
|
||||
def get_import_type_selection(self, cr, uid, context=None):
|
||||
"""
|
||||
Has to be inherited to add parser
|
||||
"""
|
||||
"""This is the method to be inherited for adding the parser"""
|
||||
return [('generic_csvxls_so', 'Generic .csv/.xls based on SO Name')]
|
||||
|
||||
def _get_import_type_selection(self, cr, uid, context=None):
|
||||
return self.get_import_type_selection(cr, uid, context=context)
|
||||
|
||||
_columns = {
|
||||
'launch_import_completion': fields.boolean(
|
||||
"Launch completion after import",
|
||||
@@ -46,12 +48,15 @@ class AccountStatementProfil(Model):
|
||||
# we remove deprecated as it floods logs in standard/warning level sob...
|
||||
'rec_log': fields.text('log', readonly=True), # Deprecated
|
||||
'import_type': fields.selection(
|
||||
get_import_type_selection,
|
||||
_get_import_type_selection,
|
||||
'Type of import',
|
||||
required=True,
|
||||
help="Choose here the method by which you want to import bank"
|
||||
"statement for this profile."),
|
||||
}
|
||||
|
||||
_defaults = {
|
||||
'import_type': 'generic_csvxls_so'
|
||||
}
|
||||
|
||||
def _write_extra_statement_lines(
|
||||
@@ -85,7 +90,11 @@ class AccountStatementProfil(Model):
|
||||
context=context)
|
||||
return True
|
||||
|
||||
def prepare_statetement_lines_vals(
|
||||
#Deprecated remove on V8
|
||||
def prepare_statetement_lines_vals(self, *args, **kwargs):
|
||||
return self.prepare_statement_lines_vals(*args, **kwargs)
|
||||
|
||||
def prepare_statement_lines_vals(
|
||||
self, cr, uid, parser_vals, account_payable, account_receivable,
|
||||
statement_id, context):
|
||||
"""
|
||||
@@ -101,6 +110,7 @@ class AccountStatementProfil(Model):
|
||||
:return: dict of vals that will be passed to create method of statement line.
|
||||
"""
|
||||
statement_obj = self.pool.get('account.bank.statement')
|
||||
statement_line_obj = self.pool['account.bank.statement.line']
|
||||
values = parser_vals
|
||||
values['statement_id'] = statement_id
|
||||
date = values.get('date')
|
||||
@@ -117,9 +127,18 @@ class AccountStatementProfil(Model):
|
||||
context=context)
|
||||
values['period_id'] = periods[0]
|
||||
period_memoizer[date] = periods[0]
|
||||
values['type'] = 'general'
|
||||
values = statement_line_obj._add_missing_default_values(cr, uid, values, context)
|
||||
return values
|
||||
|
||||
def prepare_statement_vals(self, cr, uid, profile_id, result_row_list, parser, context):
|
||||
"""
|
||||
Hook to build the values of the statement from the parser and
|
||||
the profile.
|
||||
"""
|
||||
vals = {'profile_id': profile_id}
|
||||
vals.update(parser.get_st_vals())
|
||||
return vals
|
||||
|
||||
def statement_import(self, cr, uid, ids, profile_id, file_stream, ftype="csv", context=None):
|
||||
"""
|
||||
Create a bank statement with the given profile and parser. It will fullfill the bank statement
|
||||
@@ -153,9 +172,11 @@ class AccountStatementProfil(Model):
|
||||
_("Column %s you try to import is not "
|
||||
"present in the bank statement line!") % col)
|
||||
|
||||
statement_vals = self.prepare_statement_vals(cr, uid, prof.id, result_row_list, parser, context)
|
||||
statement_id = statement_obj.create(cr, uid,
|
||||
{'profile_id': prof.id},
|
||||
statement_vals,
|
||||
context=context)
|
||||
|
||||
if prof.receivable_account_id:
|
||||
account_receivable = account_payable = prof.receivable_account_id.id
|
||||
else:
|
||||
@@ -166,7 +187,7 @@ class AccountStatementProfil(Model):
|
||||
statement_store = []
|
||||
for line in result_row_list:
|
||||
parser_vals = parser.get_st_line_vals(line)
|
||||
values = self.prepare_statetement_lines_vals(
|
||||
values = self.prepare_statement_lines_vals(
|
||||
cr, uid, parser_vals, account_payable, account_receivable, statement_id,
|
||||
context)
|
||||
statement_store.append(values)
|
||||
@@ -201,10 +222,14 @@ class AccountStatementProfil(Model):
|
||||
context)
|
||||
|
||||
except Exception:
|
||||
statement_obj.unlink(cr, uid, [statement_id], context=context)
|
||||
error_type, error_value, trbk = sys.exc_info()
|
||||
st = "Error: %s\nDescription: %s\nTraceback:" % (error_type.__name__, error_value)
|
||||
st += ''.join(traceback.format_tb(trbk, 30))
|
||||
#TODO we should catch correctly the exception with a python
|
||||
#Exception and only re-catch some special exception.
|
||||
#For now we avoid re-catching error in debug mode
|
||||
if config['debug_mode']:
|
||||
raise
|
||||
raise osv.except_osv(_("Statement import error"),
|
||||
_("The statement cannot be created: %s") % st)
|
||||
return statement_id
|
||||
|
||||
@@ -97,6 +97,7 @@ class CreditPartnerStatementImporter(orm.TransientModel):
|
||||
req_id = req_id[0]
|
||||
importer = self.browse(cr, uid, req_id, context)
|
||||
ftype = self._check_extension(importer.file_name)
|
||||
context['file_name'] = importer.file_name
|
||||
sid = self.pool.get(
|
||||
'account.statement.profile').statement_import(
|
||||
cr,
|
||||
|
||||
@@ -2,9 +2,11 @@ from openerp.tools.translate import _
|
||||
import datetime
|
||||
from openerp.osv import orm, fields
|
||||
|
||||
|
||||
def float_or_zero(val):
|
||||
return float(val) if val else 0.0
|
||||
|
||||
|
||||
class AccountStatementProfil(orm.Model):
|
||||
_inherit = "account.statement.profile"
|
||||
|
||||
@@ -22,7 +24,7 @@ class AccountStatementProfil(orm.Model):
|
||||
commission_analytic_id = profile.commission_analytic_id and profile.commission_analytic_id.id or False
|
||||
comm_values = {
|
||||
'name': 'IN ' + _('Commission line'),
|
||||
'date': datetime.datetime.now().date(),
|
||||
'date': parser.get_st_vals().get('date') or datetime.datetime.now(),
|
||||
'amount': global_commission_amount,
|
||||
'partner_id': partner_id,
|
||||
'type': 'general',
|
||||
@@ -36,6 +38,7 @@ class AccountStatementProfil(orm.Model):
|
||||
statement_line_obj = self.pool.get('account.bank.statement.line')
|
||||
statement_line_obj.create(cr, uid, comm_values, context=context)
|
||||
|
||||
|
||||
class AccountStatementLineWithCommission(orm.Model):
|
||||
_inherit = "account.bank.statement.line"
|
||||
_columns = {
|
||||
@@ -45,6 +48,7 @@ class AccountStatementLineWithCommission(orm.Model):
|
||||
serialization_field='additionnal_bank_fields'),
|
||||
}
|
||||
|
||||
|
||||
class CreditPartnerStatementImporter(orm.TransientModel):
|
||||
_inherit = "credit.statement.import"
|
||||
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
# Translation of OpenERP Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * account_statement_commission
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 7.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2014-01-21 11:58+0000\n"
|
||||
"PO-Revision-Date: 2014-01-21 11:58+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_statement_commission
|
||||
#: field:credit.statement.import,commission_account_id:0
|
||||
msgid "Commission account"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_commission
|
||||
#: model:ir.model,name:account_statement_commission.model_account_bank_statement_line
|
||||
msgid "Bank Statement Line"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_commission
|
||||
#: model:ir.model,name:account_statement_commission.model_credit_statement_import
|
||||
msgid "credit.statement.import"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_commission
|
||||
#: field:credit.statement.import,commission_analytic_id:0
|
||||
msgid "Commission analytic account"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_commission
|
||||
#: model:ir.model,name:account_statement_commission.model_account_statement_profile
|
||||
msgid "Statement Profile"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_commission
|
||||
#: field:account.bank.statement.line,commission_amount:0
|
||||
msgid "Line Commission Amount"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_commission
|
||||
#: code:addons/account_statement_commission/commission.py:24
|
||||
#, python-format
|
||||
msgid "Commission line"
|
||||
msgstr ""
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
##############################################################################
|
||||
|
||||
{'name': "Bank statement extension and profiles",
|
||||
'version': '1.3.0',
|
||||
'version': '1.3.5',
|
||||
'author': 'Camptocamp',
|
||||
'maintainer': 'Camptocamp',
|
||||
'category': 'Finance',
|
||||
@@ -74,12 +74,13 @@
|
||||
""",
|
||||
'website': 'http://www.camptocamp.com',
|
||||
'data': ['statement_view.xml',
|
||||
'account_view.xml',
|
||||
'report/bank_statement_webkit_header.xml',
|
||||
'report.xml',
|
||||
'security/ir.model.access.csv',
|
||||
'security/ir_rule.xml'],
|
||||
'demo_xml': [],
|
||||
'test': [],
|
||||
'test': ['test/test_profile_related_fields.yml'],
|
||||
'installable': True,
|
||||
'images': [],
|
||||
'auto_install': False,
|
||||
|
||||
@@ -31,8 +31,11 @@ class account_move(Model):
|
||||
Delete the reconciliation when we delete the moves. This
|
||||
allow an easier way of cancelling the bank statement.
|
||||
"""
|
||||
reconcile_to_delete = []
|
||||
reconcile_obj = self.pool.get('account.move.reconcile')
|
||||
for move in self.browse(cr, uid, ids, context=context):
|
||||
for move_line in move.line_id:
|
||||
if move_line.reconcile_id:
|
||||
move_line.reconcile_id.unlink(context=context)
|
||||
reconcile_to_delete.append(move_line.reconcile_id.id)
|
||||
reconcile_obj.unlink(cr, uid, reconcile_to_delete, context=context)
|
||||
return super(account_move, self).unlink(cr, uid, ids, context=context)
|
||||
|
||||
17
account_statement_ext/account_view.xml
Normal file
17
account_statement_ext/account_view.xml
Normal file
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<record id="view_account_move_line_filter_add_statement" model="ir.ui.view">
|
||||
<field name="name">Journal Items add statement</field>
|
||||
<field name="model">account.move.line</field>
|
||||
<field name="inherit_id" ref="account.view_account_move_line_filter"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="/search/group/filter[@string='Period']" position="after">
|
||||
<filter string="Bank Statement" context="{'group_by': 'statement_id'}" icon="terp-partner"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
@@ -1,3 +1,4 @@
|
||||
## -*- coding: utf-8 -*-
|
||||
<!DOCTYPE html SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
|
||||
@@ -31,6 +31,7 @@ def fixed_write(self, cr, uid, ids, vals, context=None):
|
||||
I will do it when I have time."""
|
||||
res = super(stat_mod.account_bank_statement, self).write(cr, uid, ids,
|
||||
vals, context=context)
|
||||
if ids: # will be false for an new empty bank statement
|
||||
cr.execute("UPDATE account_bank_statement_line"
|
||||
" SET sequence = account_bank_statement_line.id + 1"
|
||||
" where statement_id in %s", (tuple(ids),))
|
||||
@@ -112,8 +113,13 @@ class AccountStatementProfile(Model):
|
||||
(_check_partner, "You need to put a partner if you tic the 'Force partner on bank move'!", []),
|
||||
]
|
||||
|
||||
_sql_constraints = [
|
||||
('name_uniq', 'unique (name, company_id)', 'The name of the bank statement must be unique !')
|
||||
]
|
||||
|
||||
class AccountBankSatement(Model):
|
||||
|
||||
|
||||
class AccountBankStatement(Model):
|
||||
"""
|
||||
We improve the bank statement class mostly for :
|
||||
- Removing the period and compute it from the date of each line.
|
||||
@@ -153,6 +159,23 @@ class AccountBankSatement(Model):
|
||||
|
||||
return profile_ids[0] if profile_ids else False
|
||||
|
||||
def _get_statement_from_profile(self, cr, uid, profile_ids, context=None):
|
||||
"""Stored function field trigger.
|
||||
|
||||
Weirdness warning: we are in the class account.bank.statement, but
|
||||
when the ORM calls this, self is an account.statement.profile.
|
||||
|
||||
Returns a list of account.bank.statement ids to recompute.
|
||||
|
||||
"""
|
||||
triggered = []
|
||||
for profile in self.browse(cr, uid, profile_ids, context=context):
|
||||
triggered += [st.id for st in profile.bank_statement_ids]
|
||||
return triggered
|
||||
|
||||
def _us(self, cr, uid, ids, context=None):
|
||||
return ids
|
||||
|
||||
_columns = {
|
||||
'profile_id': fields.many2one(
|
||||
'account.statement.profile',
|
||||
@@ -165,22 +188,35 @@ class AccountBankSatement(Model):
|
||||
type='many2one',
|
||||
relation='res.partner',
|
||||
string='Financial Partner',
|
||||
store=True,
|
||||
store={
|
||||
'account.bank.statement': (_us, ['profile_id'], 10),
|
||||
'account.statement.profile': (
|
||||
_get_statement_from_profile, ['partner_id'], 10),
|
||||
},
|
||||
readonly=True),
|
||||
'balance_check': fields.related(
|
||||
'profile_id',
|
||||
'balance_check',
|
||||
type='boolean',
|
||||
string='Balance check',
|
||||
store=True,
|
||||
readonly=True),
|
||||
store={
|
||||
'account.bank.statement': (_us, ['profile_id'], 10),
|
||||
'account.statement.profile': (
|
||||
_get_statement_from_profile, ['balance_check'], 10),
|
||||
},
|
||||
readonly=True
|
||||
),
|
||||
'journal_id': fields.related(
|
||||
'profile_id',
|
||||
'journal_id',
|
||||
type='many2one',
|
||||
relation='account.journal',
|
||||
string='Journal',
|
||||
store=True,
|
||||
store={
|
||||
'account.bank.statement': (_us, ['profile_id'], 10),
|
||||
'account.statement.profile': (
|
||||
_get_statement_from_profile, ['journal_id'], 10),
|
||||
},
|
||||
readonly=True),
|
||||
'period_id': fields.many2one(
|
||||
'account.period',
|
||||
@@ -202,14 +238,17 @@ class AccountBankSatement(Model):
|
||||
profile_obj = self.pool.get('account.statement.profile')
|
||||
profile = profile_obj.browse(cr, uid, vals['profile_id'], context=context)
|
||||
vals['journal_id'] = profile.journal_id.id
|
||||
return super(AccountBankSatement, self).create(cr, uid, vals, context=context)
|
||||
return super(AccountBankStatement, self
|
||||
).create(cr, uid, vals, context=context)
|
||||
|
||||
def _get_period(self, cr, uid, date, context=None):
|
||||
"""
|
||||
Find matching period for date, used in the statement line creation.
|
||||
"""
|
||||
"""Return matching period for a date."""
|
||||
if context is None:
|
||||
context = {}
|
||||
period_obj = self.pool.get('account.period')
|
||||
periods = period_obj.find(cr, uid, dt=date, context=context)
|
||||
local_context = context.copy()
|
||||
local_context['account_period_prefer_normal'] = True
|
||||
periods = period_obj.find(cr, uid, dt=date, context=local_context)
|
||||
return periods and periods[0] or False
|
||||
|
||||
def _check_company_id(self, cr, uid, ids, context=None):
|
||||
@@ -218,12 +257,17 @@ class AccountBankSatement(Model):
|
||||
move of period_id to the statement line
|
||||
"""
|
||||
for statement in self.browse(cr, uid, ids, context=context):
|
||||
# statement.company_id is a related store=True that for some
|
||||
# reason doesn't work in YAML tests. As a workaround, I unwind it
|
||||
# to statement.journal_id.company_id here.
|
||||
if (statement.period_id and
|
||||
statement.company_id.id != statement.period_id.company_id.id):
|
||||
statement.journal_id.company_id.id !=
|
||||
statement.period_id.company_id.id):
|
||||
return False
|
||||
for line in statement.line_ids:
|
||||
if (line.period_id and
|
||||
statement.company_id.id != line.period_id.company_id.id):
|
||||
statement.journal_id.company_id.id
|
||||
!= line.period_id.company_id.id):
|
||||
return False
|
||||
return True
|
||||
|
||||
@@ -243,8 +287,9 @@ class AccountBankSatement(Model):
|
||||
"""
|
||||
if context is None:
|
||||
context = {}
|
||||
res = super(AccountBankSatement, self)._prepare_move(
|
||||
cr, uid, st_line, st_line_number, context=context)
|
||||
res = super(AccountBankStatement, self
|
||||
)._prepare_move(cr, uid, st_line, st_line_number,
|
||||
context=context)
|
||||
ctx = context.copy()
|
||||
ctx['company_id'] = st_line.company_id.id
|
||||
period_id = self._get_period(cr, uid, st_line.date, context=ctx)
|
||||
@@ -273,7 +318,7 @@ class AccountBankSatement(Model):
|
||||
"""
|
||||
if context is None:
|
||||
context = {}
|
||||
res = super(AccountBankSatement, self)._prepare_move_line_vals(
|
||||
res = super(AccountBankStatement, self)._prepare_move_line_vals(
|
||||
cr, uid, st_line, move_id, debit, credit,
|
||||
currency_id=currency_id,
|
||||
amount_currency=amount_currency,
|
||||
@@ -297,9 +342,8 @@ class AccountBankSatement(Model):
|
||||
create the move from.
|
||||
:return: int/long of the res.partner to use as counterpart
|
||||
"""
|
||||
bank_partner_id = super(AccountBankSatement, self)._get_counter_part_partner(cr,
|
||||
uid,
|
||||
st_line,
|
||||
bank_partner_id = super(AccountBankStatement, self
|
||||
)._get_counter_part_partner(cr, uid, st_line,
|
||||
context=context)
|
||||
# get the right partner according to the chosen profile
|
||||
if st_line.statement_id.profile_id.force_partner_on_bank:
|
||||
@@ -530,8 +574,9 @@ class AccountBankSatement(Model):
|
||||
"""
|
||||
st = self.browse(cr, uid, st_id, context=context)
|
||||
if st.balance_check:
|
||||
return super(AccountBankSatement, self).balance_check(
|
||||
cr, uid, st_id, journal_type, context=context)
|
||||
return super(AccountBankStatement, self
|
||||
).balance_check(cr, uid, st_id, journal_type,
|
||||
context=context)
|
||||
else:
|
||||
return True
|
||||
|
||||
@@ -547,15 +592,11 @@ class AccountBankSatement(Model):
|
||||
import_config = self.pool.get("account.statement.profile").browse(
|
||||
cr, uid, profile_id, context=context)
|
||||
journal_id = import_config.journal_id.id
|
||||
account_id = import_config.journal_id.default_debit_account_id.id
|
||||
credit_partner_id = import_config.partner_id and import_config.partner_id.id or False
|
||||
return {'value': {'journal_id': journal_id,
|
||||
'account_id': account_id,
|
||||
'balance_check': import_config.balance_check,
|
||||
'credit_partner_id': credit_partner_id}}
|
||||
'balance_check': import_config.balance_check}}
|
||||
|
||||
|
||||
class AccountBankSatementLine(Model):
|
||||
class AccountBankStatementLine(Model):
|
||||
"""
|
||||
Override to compute the period from the date of the line, add a method to retrieve
|
||||
the values for a line from the profile. Override the on_change method to take care of
|
||||
@@ -565,14 +606,15 @@ class AccountBankSatementLine(Model):
|
||||
_inherit = "account.bank.statement.line"
|
||||
|
||||
def _get_period(self, cr, uid, context=None):
|
||||
"""
|
||||
Return a period from a given date in the context.
|
||||
"""
|
||||
"""Return matching period for a date."""
|
||||
if context is None:
|
||||
context = {}
|
||||
period_obj = self.pool['account.period']
|
||||
date = context.get('date')
|
||||
local_context = context.copy()
|
||||
local_context['account_period_prefer_normal'] = True
|
||||
try:
|
||||
periods = self.pool.get('account.period').find(cr, uid, dt=date)
|
||||
periods = period_obj.find(cr, uid, dt=date, context=local_context)
|
||||
except osv.except_osv:
|
||||
# if no period defined, we are certainly at installation time
|
||||
return False
|
||||
@@ -649,6 +691,11 @@ class AccountBankSatementLine(Model):
|
||||
# This can be quite a performance killer as we read ir.properity fields
|
||||
if partner_id:
|
||||
part = obj_partner.browse(cr, uid, partner_id, context=context)
|
||||
part = part.commercial_partner_id
|
||||
# When the method is called from bank statement completion,
|
||||
# ensure that the line's partner is a commercial
|
||||
# (accounting) entity
|
||||
res['partner_id'] = part.id
|
||||
pay_account = part.property_account_payable.id
|
||||
receiv_account = part.property_account_receivable.id
|
||||
# If no value, look on the default company property
|
||||
@@ -684,11 +731,9 @@ class AccountBankSatementLine(Model):
|
||||
Keep the same features as in standard and call super. If an account is returned,
|
||||
call the method to compute line values.
|
||||
"""
|
||||
res = super(AccountBankSatementLine, self).onchange_type(cr, uid,
|
||||
line_id,
|
||||
partner_id,
|
||||
line_type,
|
||||
context=context)
|
||||
res = super(AccountBankStatementLine, self
|
||||
).onchange_type(cr, uid, line_id, partner_id,
|
||||
line_type, context=context)
|
||||
if 'account_id' in res['value']:
|
||||
result = self.get_values_for_line(cr, uid,
|
||||
profile_id=profile_id,
|
||||
|
||||
78
account_statement_ext/test/test_profile_related_fields.yml
Normal file
78
account_statement_ext/test/test_profile_related_fields.yml
Normal file
@@ -0,0 +1,78 @@
|
||||
-
|
||||
In order to test the related fields in the profile, I first need to create a profile
|
||||
-
|
||||
!record {model: account.statement.profile, id: profile_test1}:
|
||||
name: Bank EUR Profile
|
||||
journal_id: account.bank_journal
|
||||
commission_account_id: account.a_expense
|
||||
company_id: base.main_company
|
||||
partner_id: base.res_partner_1
|
||||
journal_id: account.check_journal
|
||||
balance_check: True
|
||||
-
|
||||
I create a second profile
|
||||
-
|
||||
!record {model: account.statement.profile, id: profile_test2}:
|
||||
name: Second profile
|
||||
journal_id: account.bank_journal
|
||||
commission_account_id: account.a_expense
|
||||
company_id: base.main_company
|
||||
partner_id: base.res_partner_3
|
||||
journal_id: account.bank_journal
|
||||
balance_check: True
|
||||
-
|
||||
Now I create a statement.
|
||||
-
|
||||
!record {model: account.bank.statement, id: statement_test1}:
|
||||
name: Statement 1
|
||||
profile_id: profile_test1
|
||||
company_id: base.main_company
|
||||
-
|
||||
Now I check that the related data come from the profile
|
||||
-
|
||||
!assert {model: account.bank.statement, id: statement_test1, string: Initial data should come from the profile}:
|
||||
- balance_check is True
|
||||
- credit_partner_id.id == _ref('base.res_partner_1')
|
||||
- journal_id.id == _ref('account.check_journal')
|
||||
-
|
||||
Now I set the balance flag to False in the profile
|
||||
-
|
||||
!record {model: account.statement.profile, id: profile_test1}:
|
||||
balance_check: False
|
||||
-
|
||||
It should be false in the statement as well.
|
||||
-
|
||||
!assert {model: account.bank.statement, id: statement_test1, string: We should not check the balance}:
|
||||
- balance_check is False
|
||||
-
|
||||
Now I change the journal in the profile
|
||||
-
|
||||
!record {model: account.statement.profile, id: profile_test1}:
|
||||
journal_id: account.cash_journal
|
||||
-
|
||||
The journal should propagate to the statement
|
||||
-
|
||||
!assert {model: account.bank.statement, id: statement_test1, string: The journal should be updated}:
|
||||
- journal_id.id == _ref('account.cash_journal')
|
||||
-
|
||||
Now I change the partner in the profile
|
||||
-
|
||||
!record {model: account.statement.profile, id: profile_test1}:
|
||||
partner_id: base.res_partner_2
|
||||
-
|
||||
The partner should propagate to the statement
|
||||
-
|
||||
!assert {model: account.bank.statement, id: statement_test1, string: The partner should be updated}:
|
||||
- credit_partner_id.id == _ref('base.res_partner_2')
|
||||
-
|
||||
Now I change the profile associated to the statement.
|
||||
-
|
||||
!record {model: account.bank.statement, id: statement_test1}:
|
||||
profile_id: profile_test2
|
||||
-
|
||||
The statement should receive information from the new statement.
|
||||
-
|
||||
!assert {model: account.bank.statement, id: statement_test1, string: All information should be probagated from the new profile}:
|
||||
- balance_check is True
|
||||
- credit_partner_id.id == _ref('base.res_partner_3')
|
||||
- journal_id.id == _ref('account.bank_journal')
|
||||
22
account_statement_ext_point_of_sale/__init__.py
Normal file
22
account_statement_ext_point_of_sale/__init__.py
Normal file
@@ -0,0 +1,22 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# Author: Alexandre Fayolle
|
||||
# Copyright 2013 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 . import point_of_sale
|
||||
43
account_statement_ext_point_of_sale/__openerp__.py
Normal file
43
account_statement_ext_point_of_sale/__openerp__.py
Normal file
@@ -0,0 +1,43 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# Author: Nicolas Bessi, Joel Grand-Guillaume
|
||||
# Copyright 2011-2013 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/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
{'name': "Bank statement extension and profiles for Point of Sale",
|
||||
'version': '1.0.0',
|
||||
'author': 'Camptocamp',
|
||||
'maintainer': 'Camptocamp',
|
||||
'category': 'Point Of Sale',
|
||||
'complexity': 'normal',
|
||||
'depends': ['point_of_sale',
|
||||
'account_statement_ext',
|
||||
],
|
||||
'description': """
|
||||
Update the point of sale code to work with improved bank statements.
|
||||
""",
|
||||
'website': 'http://www.camptocamp.com',
|
||||
'data': [],
|
||||
'demo': [],
|
||||
'test': [],
|
||||
'installable': True,
|
||||
'images': [],
|
||||
'auto_install': True,
|
||||
'license': 'AGPL-3',
|
||||
'active': False,
|
||||
}
|
||||
123
account_statement_ext_point_of_sale/point_of_sale.py
Normal file
123
account_statement_ext_point_of_sale/point_of_sale.py
Normal file
@@ -0,0 +1,123 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# Author: Alexandre Fayolle
|
||||
# Copyright 2013 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.addons.point_of_sale.point_of_sale import pos_session as std_pos_session
|
||||
from openerp.osv import orm, osv
|
||||
from openerp.tools.translate import _
|
||||
|
||||
if not hasattr(std_pos_session, '_prepare_bank_statement'):
|
||||
# monkey patch to fix lp:1245375
|
||||
#
|
||||
# We replace pos_session.create with the implementation in
|
||||
# mp_create below which is essentially the same, only with a call
|
||||
# to self._prepare_bank_statement.
|
||||
#
|
||||
# The default implementation has been extracted in
|
||||
# mp_prepare_bank_statement below, and can be overridden in models
|
||||
# which _inherit pos.session
|
||||
#
|
||||
# This change has been proposed for merging to fix lp:125375
|
||||
def mp_prepare_bank_statement(self, cr, uid, pos_config, journal, context=None):
|
||||
bank_values = {
|
||||
'journal_id' : journal.id,
|
||||
'user_id' : uid,
|
||||
'company_id' : pos_config.shop_id.company_id.id
|
||||
}
|
||||
return bank_values
|
||||
|
||||
def mp_create(self, cr, uid, values, context=None):
|
||||
context = context or {}
|
||||
config_id = values.get('config_id', False) or context.get('default_config_id', False)
|
||||
if not config_id:
|
||||
raise osv.except_osv( _('Error!'),
|
||||
_("You should assign a Point of Sale to your session."))
|
||||
|
||||
# journal_id is not required on the pos_config because it does not
|
||||
# exists at the installation. If nothing is configured at the
|
||||
# installation we do the minimal configuration. Impossible to do in
|
||||
# the .xml files as the CoA is not yet installed.
|
||||
jobj = self.pool.get('pos.config')
|
||||
pos_config = jobj.browse(cr, uid, config_id, context=context)
|
||||
context.update({'company_id': pos_config.shop_id.company_id.id})
|
||||
if not pos_config.journal_id:
|
||||
jid = jobj.default_get(cr, uid, ['journal_id'], context=context)['journal_id']
|
||||
if jid:
|
||||
jobj.write(cr, uid, [pos_config.id], {'journal_id': jid}, context=context)
|
||||
else:
|
||||
raise osv.except_osv( _('error!'),
|
||||
_("Unable to open the session. You have to assign a sale journal to your point of sale."))
|
||||
|
||||
# define some cash journal if no payment method exists
|
||||
if not pos_config.journal_ids:
|
||||
journal_proxy = self.pool.get('account.journal')
|
||||
cashids = journal_proxy.search(cr, uid, [('journal_user', '=', True), ('type','=','cash')], context=context)
|
||||
if not cashids:
|
||||
cashids = journal_proxy.search(cr, uid, [('type', '=', 'cash')], context=context)
|
||||
if not cashids:
|
||||
cashids = journal_proxy.search(cr, uid, [('journal_user','=',True)], context=context)
|
||||
|
||||
jobj.write(cr, uid, [pos_config.id], {'journal_ids': [(6,0, cashids)]})
|
||||
|
||||
|
||||
pos_config = jobj.browse(cr, uid, config_id, context=context)
|
||||
bank_statement_ids = []
|
||||
for journal in pos_config.journal_ids:
|
||||
bank_values = self._prepare_bank_statement(cr, uid, pos_config, journal, context)
|
||||
statement_id = self.pool.get('account.bank.statement').create(cr, uid, bank_values, context=context)
|
||||
bank_statement_ids.append(statement_id)
|
||||
|
||||
values.update({
|
||||
'name' : pos_config.sequence_id._next(),
|
||||
'statement_ids' : [(6, 0, bank_statement_ids)],
|
||||
'config_id': config_id
|
||||
})
|
||||
return super(std_pos_session, self).create(cr, uid, values, context=context)
|
||||
|
||||
std_pos_session._prepare_bank_statement = mp_prepare_bank_statement
|
||||
std_pos_session.create = mp_create
|
||||
|
||||
|
||||
class pos_session(orm.Model):
|
||||
_inherit = 'pos.session'
|
||||
|
||||
def _prepare_bank_statement(self, cr, uid, pos_config, journal, context=None):
|
||||
""" Override the function _mp_create. To add the bank profile to the statement
|
||||
|
||||
Function That was previously added to pos.session model using monkey patching
|
||||
|
||||
"""
|
||||
|
||||
bank_values = super(pos_session, self)._prepare_bank_statement(cr, uid,
|
||||
pos_config,
|
||||
journal, context)
|
||||
user_obj = self.pool.get('res.users')
|
||||
profile_obj = self.pool.get('account.statement.profile')
|
||||
user = user_obj.browse(cr, uid, uid, context=context)
|
||||
defaults = self.pool['account.bank.statement'].default_get(cr, uid,
|
||||
['profile_id', 'period_id'],
|
||||
context=context)
|
||||
profile_ids = profile_obj.search(cr, uid,
|
||||
[('company_id', '=', user.company_id.id),
|
||||
('journal_id', '=', bank_values['journal_id'])],
|
||||
context=context)
|
||||
if profile_ids:
|
||||
defaults['profile_id'] = profile_ids[0]
|
||||
bank_values.update(defaults)
|
||||
return bank_values
|
||||
22
account_statement_no_invoice_import/__init__.py
Normal file
22
account_statement_no_invoice_import/__init__.py
Normal file
@@ -0,0 +1,22 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
###############################################################################
|
||||
#
|
||||
# module for OpenERP
|
||||
# Copyright (C) 2013-TODAY Akretion <http://www.akretion.com>.
|
||||
# @author Sébastien BEAU <sebastien.beau@akretion.com>
|
||||
#
|
||||
# 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/>.
|
||||
#
|
||||
###############################################################################
|
||||
|
||||
40
account_statement_no_invoice_import/__openerp__.py
Normal file
40
account_statement_no_invoice_import/__openerp__.py
Normal file
@@ -0,0 +1,40 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
###############################################################################
|
||||
#
|
||||
# module for OpenERP
|
||||
# Copyright (C) 2013-TODAY Akretion <http://www.akretion.com>.
|
||||
# @author Sébastien BEAU <sebastien.beau@akretion.com>
|
||||
#
|
||||
# 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': 'account bank statement no invoice import',
|
||||
'version': '0.1',
|
||||
'category': 'Generic Modules/Others',
|
||||
'license': 'AGPL-3',
|
||||
'description': """Module that remove the 'Import invoices' button on bank statement""",
|
||||
'author': 'Akretion',
|
||||
'website': 'http://www.akretion.com/',
|
||||
'depends': [
|
||||
'account_voucher',
|
||||
],
|
||||
'data': [
|
||||
'statement_view.xml',
|
||||
],
|
||||
'demo': [],
|
||||
'installable': True,
|
||||
'active': False,
|
||||
}
|
||||
21
account_statement_no_invoice_import/statement_view.xml
Normal file
21
account_statement_no_invoice_import/statement_view.xml
Normal file
@@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<!-- INHERITED VIEW FOR THE OBJECT : account_bank_statement -->
|
||||
|
||||
<record id="account_bank_statement_view_form" model="ir.ui.view">
|
||||
<field name="name">account_bank_statement_simple_view.account_bank_statement.view_form</field>
|
||||
<field name="model">account.bank.statement</field>
|
||||
<field name="inherit_id" ref="account_voucher.view_bank_statement_form_invoice" />
|
||||
<field eval="100" name="priority"/>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<button string="Import Invoices" position="replace">
|
||||
</button>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
22
account_statement_ofx_import/__init__.py
Normal file
22
account_statement_ofx_import/__init__.py
Normal file
@@ -0,0 +1,22 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# Author: Pedro Manuel Baeza Romero
|
||||
# Copyright 2013 Servicios Tecnológicos Avanzados
|
||||
#
|
||||
# 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 statement
|
||||
import parser
|
||||
49
account_statement_ofx_import/__openerp__.py
Normal file
49
account_statement_ofx_import/__openerp__.py
Normal file
@@ -0,0 +1,49 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# Author: Pedro Manuel Baeza Romero
|
||||
# Copyright 2013 Servicios Tecnológicos Avanzados
|
||||
# Financed by AB Internet (http://www.abinternet.co.uk/)
|
||||
#
|
||||
# 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': "Bank statement OFX import",
|
||||
'version': '1.0',
|
||||
'author': 'Servicios Tecnológicos Avanzados - Pedro M. Baeza',
|
||||
'maintainer': 'Pedro M. Baeza',
|
||||
'category': 'Finance',
|
||||
'complexity': 'normal',
|
||||
'depends': [
|
||||
'account_statement_base_import',
|
||||
],
|
||||
'external_dependencies': {
|
||||
'python': ['ofxparse'],
|
||||
},
|
||||
'description': """
|
||||
Allows to import OFX (Open Financial Exchange) statement files, using
|
||||
*account_statement_base_import* generic inheritance mechanism to import
|
||||
statements.
|
||||
|
||||
It requires ofxparse library to work.
|
||||
""",
|
||||
'website': 'http://www.serviciosbaeza.com',
|
||||
'data': [],
|
||||
'test': [],
|
||||
'installable': True,
|
||||
'images': [],
|
||||
'auto_install': False,
|
||||
'license': 'AGPL-3',
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
# Translation of OpenERP Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * account_statement_ofx_import
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 7.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2014-01-21 12:05+0000\n"
|
||||
"PO-Revision-Date: 2014-01-21 12:05+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_statement_ofx_import
|
||||
#: code:addons/account_statement_ofx_import/statement.py:34
|
||||
#, python-format
|
||||
msgid "OFX - Open Financial Exchange"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_ofx_import
|
||||
#: code:addons/account_statement_ofx_import/parser/ofx_parser.py:29
|
||||
#, python-format
|
||||
msgid "Please install python lib ofxparse"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_ofx_import
|
||||
#: model:ir.model,name:account_statement_ofx_import.model_account_statement_profile
|
||||
msgid "Statement Profile"
|
||||
msgstr ""
|
||||
|
||||
22
account_statement_ofx_import/parser/__init__.py
Normal file
22
account_statement_ofx_import/parser/__init__.py
Normal file
@@ -0,0 +1,22 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# Author: Pedro Manuel Baeza Romero
|
||||
# Copyright 2013 Servicios Tecnológicos Avanzados
|
||||
#
|
||||
# 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 . import ofx_parser
|
||||
|
||||
118
account_statement_ofx_import/parser/ofx_parser.py
Normal file
118
account_statement_ofx_import/parser/ofx_parser.py
Normal file
@@ -0,0 +1,118 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# Author: Pedro Manuel Baeza Romero
|
||||
# Copyright 2013 Servicios Tecnológicos Avanzados
|
||||
#
|
||||
# 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.tools.translate import _
|
||||
from account_statement_base_import.parser import BankStatementImportParser
|
||||
import tempfile
|
||||
import datetime
|
||||
|
||||
try:
|
||||
import ofxparse
|
||||
except:
|
||||
raise Exception(_('Please install python lib ofxparse'))
|
||||
|
||||
class OfxParser(BankStatementImportParser):
|
||||
"""
|
||||
Class for defining parser for OFX file format.
|
||||
"""
|
||||
|
||||
def __init__(self, parser_name, *args, **kwargs):
|
||||
"""
|
||||
"""
|
||||
super(OfxParser, self).__init__(parser_name, *args, **kwargs)
|
||||
|
||||
@classmethod
|
||||
def parser_for(cls, parser_name):
|
||||
"""
|
||||
Used by the new_bank_statement_parser class factory. Return true if
|
||||
the providen name is 'ofx_so'.
|
||||
"""
|
||||
return parser_name == 'ofx_so'
|
||||
|
||||
def _custom_format(self, *args, **kwargs):
|
||||
"""
|
||||
No other work on data are needed in this parser.
|
||||
"""
|
||||
return True
|
||||
|
||||
def _pre(self, *args, **kwargs):
|
||||
"""
|
||||
No pre-treatment needed for this parser.
|
||||
"""
|
||||
return True
|
||||
|
||||
def _parse(self, *args, **kwargs):
|
||||
"""
|
||||
Launch the parsing itself.
|
||||
"""
|
||||
ofx_file = tempfile.NamedTemporaryFile()
|
||||
ofx_file.seek(0)
|
||||
ofx_file.write(self.filebuffer)
|
||||
ofx_file.flush()
|
||||
ofx = ofxparse.OfxParser.parse(file(ofx_file.name))
|
||||
ofx_file.close()
|
||||
res = []
|
||||
for transaction in ofx.account.statement.transactions:
|
||||
res.append({
|
||||
'date': transaction.date,
|
||||
'amount': transaction.amount,
|
||||
'ref': transaction.type,
|
||||
'label': transaction.payee,
|
||||
})
|
||||
self.result_row_list = res
|
||||
return True
|
||||
|
||||
def _validate(self, *args, **kwargs):
|
||||
"""
|
||||
Nothing to do here. ofxparse trigger possible format errors.
|
||||
"""
|
||||
return True
|
||||
|
||||
def _post(self, *args, **kwargs):
|
||||
"""
|
||||
Nothing is needed to do after parsing.
|
||||
"""
|
||||
return True
|
||||
|
||||
def _post(self, *args, **kwargs):
|
||||
"""
|
||||
Nothing to do.
|
||||
"""
|
||||
return True
|
||||
|
||||
def get_st_line_vals(self, line, *args, **kwargs):
|
||||
"""
|
||||
This method must return a dict of vals that can be passed to create
|
||||
method of statement line in order to record it. It is the
|
||||
responsibility of every parser to give this dict of vals, so each one
|
||||
can implement his own way of recording the lines.
|
||||
:param: line: a dict of vals that represent a line of
|
||||
result_row_list
|
||||
:return: dict of values to give to the create method of statement
|
||||
line
|
||||
"""
|
||||
return {
|
||||
'name': line.get('label', line.get('ref', '/')),
|
||||
'date': line.get('date', datetime.datetime.now().date()),
|
||||
'amount': line.get('amount', 0.0),
|
||||
'ref': line.get('ref', '/'),
|
||||
'label': line.get('label', ''),
|
||||
}
|
||||
|
||||
35
account_statement_ofx_import/statement.py
Normal file
35
account_statement_ofx_import/statement.py
Normal file
@@ -0,0 +1,35 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# Author: Pedro Manuel Baeza Romero
|
||||
# Copyright 2013 Servicios Tecnológicos Avanzados
|
||||
#
|
||||
# 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.tools.translate import _
|
||||
from openerp.osv import fields, orm
|
||||
|
||||
class AccountStatementProfil(orm.Model):
|
||||
_inherit = "account.statement.profile"
|
||||
|
||||
def get_import_type_selection(self, cr, uid, context=None):
|
||||
"""
|
||||
Inherited from parent to add parser.
|
||||
"""
|
||||
selection = super(AccountStatementProfil, self
|
||||
).get_import_type_selection(cr, uid,
|
||||
context=context)
|
||||
selection.append(('ofx_so', _('OFX - Open Financial Exchange')))
|
||||
return selection
|
||||
23
account_statement_one_move/__init__.py
Normal file
23
account_statement_one_move/__init__.py
Normal file
@@ -0,0 +1,23 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
###############################################################################
|
||||
#
|
||||
# account_statement_one_move for OpenERP
|
||||
# Copyright (C) 2013-TODAY Akretion <http://www.akretion.com>.
|
||||
# @author Sébastien BEAU <sebastien.beau@akretion.com>
|
||||
#
|
||||
# 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 . import statement
|
||||
45
account_statement_one_move/__openerp__.py
Normal file
45
account_statement_one_move/__openerp__.py
Normal file
@@ -0,0 +1,45 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
###############################################################################
|
||||
#
|
||||
# account_statement_one_move for OpenERP
|
||||
# Copyright (C) 2013-TODAY Akretion <http://www.akretion.com>.
|
||||
# @author Sébastien BEAU <sebastien.beau@akretion.com>
|
||||
#
|
||||
# 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': 'Bank statement one move',
|
||||
'version': '0.1',
|
||||
'category': 'Generic Modules/Others',
|
||||
'license': 'AGPL-3',
|
||||
'description': """
|
||||
This module allows to group all lines of a bank statement in only one move.
|
||||
This feature is optional and can be activated with a checkbox in the bank
|
||||
statement's profile. This is very useful for credit card deposit for
|
||||
example, you won't have a move for each line.
|
||||
|
||||
""",
|
||||
'author': 'Akretion',
|
||||
'website': 'http://www.akretion.com/',
|
||||
'depends': ['account_statement_ext'],
|
||||
'data': [
|
||||
'statement_view.xml'
|
||||
],
|
||||
'demo': [],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'active': False,
|
||||
}
|
||||
225
account_statement_one_move/statement.py
Normal file
225
account_statement_one_move/statement.py
Normal file
@@ -0,0 +1,225 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
###############################################################################
|
||||
#
|
||||
# account_statement_one_move for OpenERP
|
||||
# Copyright (C) 2013-TODAY Akretion <http://www.akretion.com>.
|
||||
# @author Sébastien BEAU <sebastien.beau@akretion.com>
|
||||
#
|
||||
# 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 fields, orm, osv
|
||||
|
||||
|
||||
class AccountStatementProfile(orm.Model):
|
||||
_inherit = "account.statement.profile"
|
||||
_columns = {
|
||||
'one_move': fields.boolean(
|
||||
'Group Journal Items',
|
||||
help="Only one Journal Entry will be generated on the "
|
||||
"validation of the bank statement."),
|
||||
'split_transfer_line': fields.boolean(
|
||||
'Split Transfer Line',
|
||||
help="Two transfer lines will be automatically generated : one "
|
||||
"for the refunds and one for the payments.")
|
||||
}
|
||||
|
||||
class account_bank_statement(orm.Model):
|
||||
_inherit = "account.bank.statement"
|
||||
|
||||
def _prepare_move_line_vals(self, cr, uid, st_line, *args, **kwargs):
|
||||
res = super(account_bank_statement, self)._prepare_move_line_vals(cr, uid, st_line,
|
||||
*args, **kwargs)
|
||||
period_id = self._get_period(cr, uid, st_line.statement_id.date,
|
||||
context=kwargs.get('context'))
|
||||
if st_line.statement_id.profile_id.one_move:
|
||||
res.update({
|
||||
'period_id': period_id,
|
||||
'date': st_line.statement_id.date,
|
||||
'name': st_line.ref,
|
||||
})
|
||||
return res
|
||||
|
||||
|
||||
return res
|
||||
|
||||
def _prepare_move(self, cr, uid, st_line, st_line_number, context=None):
|
||||
res = super(account_bank_statement, self).\
|
||||
_prepare_move(cr, uid, st_line, st_line_number, context=context)
|
||||
res.update({
|
||||
'ref': st_line.statement_id.name,
|
||||
'name': st_line.statement_id.name,
|
||||
'date': st_line.statement_id.date,
|
||||
})
|
||||
return res
|
||||
|
||||
|
||||
def create_move_from_st_line(self, cr, uid, st_line_id, company_currency_id,
|
||||
st_line_number, context=None):
|
||||
if context is None:
|
||||
context = {}
|
||||
context['from_parent_object'] = True #For compability with module account_constraints
|
||||
account_move_obj = self.pool.get('account.move')
|
||||
account_bank_statement_line_obj = self.pool.get('account.bank.statement.line')
|
||||
st_line = account_bank_statement_line_obj.browse(cr, uid, st_line_id,
|
||||
context=context)
|
||||
st = st_line.statement_id
|
||||
|
||||
if st.profile_id.one_move:
|
||||
if not context.get('move_id'):
|
||||
move_vals = self._prepare_move(cr, uid, st_line, st_line_number, context=context)
|
||||
context['move_id'] = account_move_obj.create(cr, uid, move_vals, context=context)
|
||||
self.create_move_line_from_st_line(cr, uid, context['move_id'],
|
||||
st_line_id, company_currency_id,
|
||||
context=context)
|
||||
return context['move_id']
|
||||
else:
|
||||
return super(account_bank_statement, self).create_move_from_st_line(cr, uid, st_line_id,
|
||||
company_currency_id,
|
||||
st_line_number,
|
||||
context=context)
|
||||
|
||||
def create_move_line_from_st_line(self, cr, uid, move_id, st_line_id,
|
||||
company_currency_id, context=None):
|
||||
"""Create the account move line from the statement line.
|
||||
|
||||
:param int/long move_id: ID of the account.move
|
||||
:param int/long st_line_id: ID of the account.bank.statement.line to create the move line from.
|
||||
:param int/long company_currency_id: ID of the res.currency of the company
|
||||
:return: ID of the account.move created
|
||||
"""
|
||||
if context is None:
|
||||
context = {}
|
||||
res_currency_obj = self.pool.get('res.currency')
|
||||
account_move_line_obj = self.pool.get('account.move.line')
|
||||
account_bank_statement_line_obj = self.pool.get('account.bank.statement.line')
|
||||
st_line = account_bank_statement_line_obj.browse(cr, uid, st_line_id, context=context)
|
||||
st = st_line.statement_id
|
||||
|
||||
context.update({'date': st_line.date})
|
||||
acc_cur = ((st_line.amount<=0) and st.journal_id.default_debit_account_id) or st_line.account_id
|
||||
|
||||
context.update({
|
||||
'res.currency.compute.account': acc_cur,
|
||||
})
|
||||
amount = res_currency_obj.compute(cr, uid, st.currency.id,
|
||||
company_currency_id,
|
||||
st_line.amount,
|
||||
context=context)
|
||||
|
||||
bank_move_vals = self._prepare_bank_move_line(cr, uid, st_line, move_id, amount,
|
||||
company_currency_id, context=context)
|
||||
return account_move_line_obj.create(cr, uid, bank_move_vals, context=context)
|
||||
|
||||
def _valid_move(self, cr, uid, move_id, context=None):
|
||||
move_obj = self.pool.get('account.move')
|
||||
move = move_obj.browse(cr, uid, move_id, context=context)
|
||||
move_obj.post(cr, uid, [move_id], context=context)
|
||||
return True
|
||||
|
||||
|
||||
def _prepare_transfer_move_line_vals(self, cr, uid, st, name, amount, move_id, context=None):
|
||||
"""
|
||||
Prepare the dict of values to create the transfer move lines.
|
||||
"""
|
||||
account_id = st.profile_id.journal_id.default_debit_account_id.id
|
||||
partner_id = st.profile_id.partner_id and profile.partner_id.id or False
|
||||
if amount < 0.0:
|
||||
debit = 0.0
|
||||
credit = -amount
|
||||
else:
|
||||
debit = amount
|
||||
credit = 0.0
|
||||
vals = {
|
||||
'name': name,
|
||||
'date': st.date,
|
||||
'partner_id': partner_id,
|
||||
'statement_id': st.id,
|
||||
'account_id': account_id,
|
||||
'ref': name,
|
||||
'move_id': move_id,
|
||||
'credit': credit,
|
||||
'debit': debit,
|
||||
'journal_id': st.journal_id.id,
|
||||
'period_id': st.period_id.id,
|
||||
}
|
||||
return vals
|
||||
|
||||
|
||||
def create_move_transfer_lines(self, cr, uid, move, st, context=None):
|
||||
move_line_obj = self.pool.get('account.move.line')
|
||||
move_id = move.id
|
||||
refund = 0.0
|
||||
payment = 0.0
|
||||
transfer_lines = []
|
||||
transfer_line_ids = []
|
||||
#Calculate the part of the refund amount and the payment amount
|
||||
for move_line in move.line_id:
|
||||
refund -= move_line.debit
|
||||
payment += move_line.credit
|
||||
#Create 2 Transfer lines or One global tranfer line
|
||||
if st.profile_id.split_transfer_line:
|
||||
if refund:
|
||||
transfer_lines.append(['Refund Transfer', refund])
|
||||
if payment:
|
||||
transfer_lines.append(['Payment Transfer', payment])
|
||||
else:
|
||||
amount = payment + refund
|
||||
if amount:
|
||||
transfer_lines.append(['Transfer', amount])
|
||||
for transfer_line in transfer_lines:
|
||||
vals = self._prepare_transfer_move_line_vals(cr, uid, st,
|
||||
transfer_line[0],
|
||||
transfer_line[1],
|
||||
move_id,
|
||||
context=context)
|
||||
transfer_line_ids.append(move_line_obj.create(cr, uid, vals, context=context))
|
||||
return transfer_line_ids
|
||||
|
||||
|
||||
def button_confirm_bank(self, cr, uid, ids, context=None):
|
||||
st_line_obj = self.pool.get('account.bank.statement.line')
|
||||
move_obj = self.pool.get('account.move')
|
||||
if context is None:
|
||||
context = {}
|
||||
for st in self.browse(cr, uid, ids, context=context):
|
||||
super(account_bank_statement, self).button_confirm_bank(cr, uid, ids,
|
||||
context=context)
|
||||
if st.profile_id.one_move and context.get('move_id', False):
|
||||
move_id = context['move_id']
|
||||
move = move_obj.browse(cr, uid, move_id, context=context)
|
||||
transfe_line_ids = self.create_move_transfer_lines(cr, uid, move, st, context=context)
|
||||
self._valid_move(cr, uid, move_id, context=context)
|
||||
lines_ids = [x.id for x in st.line_ids]
|
||||
st_line_obj.write(cr, uid, lines_ids,
|
||||
{'move_ids': [(4, move_id, False)]},
|
||||
context=context)
|
||||
return True
|
||||
|
||||
def button_cancel(self, cr, uid, ids, context=None):
|
||||
done = []
|
||||
for st in self.browse(cr, uid, ids, context=context):
|
||||
if st.profile_id.one_move and st.line_ids:
|
||||
for move in st.line_ids[0].move_ids:
|
||||
if move.state != 'draft':
|
||||
move.button_cancel(context=context)
|
||||
move.unlink(context=context)
|
||||
st.write({'state':'draft'}, context=context)
|
||||
else:
|
||||
super(account_bank_statement, self).button_cancel(cr, uid, ids,
|
||||
context=context)
|
||||
return True
|
||||
|
||||
|
||||
26
account_statement_one_move/statement_view.xml
Normal file
26
account_statement_one_move/statement_view.xml
Normal file
@@ -0,0 +1,26 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
account_statement_one_move for OpenERP
|
||||
Copyright (C) 2013-TODAY Akretion <http://www.akretion.com>.
|
||||
The licence is in the file __openerp__.py
|
||||
-->
|
||||
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<!-- INHERITED VIEW FOR THE OBJECT : account_statement -->
|
||||
|
||||
<record id="account_statement_view_form" model="ir.ui.view">
|
||||
<field name="name">account_statement_one_move.account_statement.view_form</field>
|
||||
<field name="model">account.statement.profile</field>
|
||||
<field name="inherit_id" ref="account_statement_ext.statement_importer_view_form" />
|
||||
<field name="arch" type="xml">
|
||||
<field name="balance_check" position="after">
|
||||
<field name="one_move"/>
|
||||
<field name="split_transfer_line" attrs="{'invisible': [('one_move', '=', False)]}"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
32
account_statement_regex_account_completion/__init__.py
Normal file
32
account_statement_regex_account_completion/__init__.py
Normal file
@@ -0,0 +1,32 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# Authors: Laetitia Gangloff
|
||||
# Copyright (c) 2014 Acsone SA/NV (http://www.acsone.eu)
|
||||
# All Rights Reserved
|
||||
#
|
||||
# WARNING: This program as such is intended to be used by professional
|
||||
# programmers who take the whole responsibility of assessing all potential
|
||||
# consequences resulting from its eventual inadequacies and bugs.
|
||||
# End users who are looking for a ready-to-use solution with commercial
|
||||
# guarantees and support are strongly advised to contact a Free Software
|
||||
# Service Company.
|
||||
#
|
||||
# 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 . import statement
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
56
account_statement_regex_account_completion/__openerp__.py
Normal file
56
account_statement_regex_account_completion/__openerp__.py
Normal file
@@ -0,0 +1,56 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# Authors: Laetitia Gangloff
|
||||
# Copyright (c) 2014 Acsone SA/NV (http://www.acsone.eu)
|
||||
# All Rights Reserved
|
||||
#
|
||||
# WARNING: This program as such is intended to be used by professional
|
||||
# programmers who take the whole responsibility of assessing all potential
|
||||
# consequences resulting from its eventual inadequacies and bugs.
|
||||
# End users who are looking for a ready-to-use solution with commercial
|
||||
# guarantees and support are strongly advised to contact a Free Software
|
||||
# Service Company.
|
||||
#
|
||||
# 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": "Account Statement Regex Account Completion addon",
|
||||
"version": "0.1",
|
||||
"author": "ACSONE SA/NV",
|
||||
"category": "Other",
|
||||
"website": "http://www.acsone.eu",
|
||||
"depends": ["account_statement_base_completion",
|
||||
],
|
||||
"description": """
|
||||
|
||||
Account Statement Regex Account Completion addon
|
||||
=========================
|
||||
|
||||
- Add a completion method based on a specified regular expression
|
||||
and update account to use in the bank statement line with the specified account.
|
||||
""",
|
||||
"data": ['statement_view.xml',
|
||||
],
|
||||
"demo": [],
|
||||
"test": [],
|
||||
"active": False,
|
||||
"license": "AGPL-3",
|
||||
"installable": True,
|
||||
"auto_install": False,
|
||||
"application": False,
|
||||
}
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
@@ -0,0 +1,32 @@
|
||||
# Translation of OpenERP Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * account_statement_regex_account_completion
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 7.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2014-01-22 10:59+0000\n"
|
||||
"PO-Revision-Date: 2014-01-22 10: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_statement_regex_account_completion
|
||||
#: field:account.statement.completion.rule,regex:0
|
||||
msgid "Regular Expression"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_regex_account_completion
|
||||
#: field:account.statement.completion.rule,account_id:0
|
||||
msgid "Account to set"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_regex_account_completion
|
||||
#: model:ir.model,name:account_statement_regex_account_completion.model_account_statement_completion_rule
|
||||
msgid "account.statement.completion.rule"
|
||||
msgstr ""
|
||||
|
||||
32
account_statement_regex_account_completion/i18n/fr.po
Normal file
32
account_statement_regex_account_completion/i18n/fr.po
Normal file
@@ -0,0 +1,32 @@
|
||||
# Translation of OpenERP Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * account_statement_regex_account_completion
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 7.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2014-01-22 10:59+0000\n"
|
||||
"PO-Revision-Date: 2014-01-23 17:42+0000\n"
|
||||
"Last-Translator: Laetitia Gangloff (Acsone) <laetitia.gangloff@acsone.eu>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2014-03-14 07:02+0000\n"
|
||||
"X-Generator: Launchpad (build 16963)\n"
|
||||
|
||||
#. module: account_statement_regex_account_completion
|
||||
#: field:account.statement.completion.rule,regex:0
|
||||
msgid "Regular Expression"
|
||||
msgstr "Expression Régulière"
|
||||
|
||||
#. module: account_statement_regex_account_completion
|
||||
#: field:account.statement.completion.rule,account_id:0
|
||||
msgid "Account to set"
|
||||
msgstr "Compte à utiliser"
|
||||
|
||||
#. module: account_statement_regex_account_completion
|
||||
#: model:ir.model,name:account_statement_regex_account_completion.model_account_statement_completion_rule
|
||||
msgid "account.statement.completion.rule"
|
||||
msgstr "account.statement.completion.rule"
|
||||
75
account_statement_regex_account_completion/statement.py
Normal file
75
account_statement_regex_account_completion/statement.py
Normal file
@@ -0,0 +1,75 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# Authors: Laetitia Gangloff
|
||||
# Copyright (c) 2014 Acsone SA/NV (http://www.acsone.eu)
|
||||
# All Rights Reserved
|
||||
#
|
||||
# WARNING: This program as such is intended to be used by professional
|
||||
# programmers who take the whole responsibility of assessing all potential
|
||||
# consequences resulting from its eventual inadequacies and bugs.
|
||||
# End users who are looking for a ready-to-use solution with commercial
|
||||
# guarantees and support are strongly advised to contact a Free Software
|
||||
# Service Company.
|
||||
#
|
||||
# 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 Model
|
||||
from openerp.osv import fields
|
||||
|
||||
import re
|
||||
|
||||
|
||||
class AccountStatementCompletionRule(Model):
|
||||
"""Add a rule to complete account based on a regular expression"""
|
||||
|
||||
_inherit = "account.statement.completion.rule"
|
||||
|
||||
def _get_functions(self, cr, uid, context=None):
|
||||
res = super(AccountStatementCompletionRule, self)._get_functions(
|
||||
cr, uid, context=context)
|
||||
res.append(('set_account',
|
||||
'Set account for line labels matching a regular expression'))
|
||||
return res
|
||||
|
||||
_columns = {
|
||||
'function_to_call': fields.selection(_get_functions, 'Method'),
|
||||
'regex': fields.char('Regular Expression', size=128),
|
||||
'account_id': fields.many2one('account.account', string="Account to set"),
|
||||
}
|
||||
|
||||
def set_account(self, cr, uid, id, st_line, context=None):
|
||||
"""
|
||||
If line name match regex, update account_id
|
||||
Then, call the generic st_line method to complete other values.
|
||||
:param dict st_line: read of the concerned account.bank.statement.line
|
||||
:return:
|
||||
A dict of value that can be passed directly to the write method of
|
||||
the statement line or {}
|
||||
{'partner_id': value,
|
||||
'account_id' : value,
|
||||
...}
|
||||
"""
|
||||
name = st_line['name']
|
||||
res = {}
|
||||
if name:
|
||||
rule = self.browse(cr, uid, id, context=context)
|
||||
if re.match(rule.regex, name):
|
||||
res['account_id'] = rule.account_id.id
|
||||
return res
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
@@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<record id="statement_st_completion_rule_view_form" model="ir.ui.view">
|
||||
<field name="name">account.statement.completion.rule.view (account_statement_regex_account_completion)</field>
|
||||
<field name="model">account.statement.completion.rule</field>
|
||||
<field name="inherit_id" ref="account_statement_base_completion.statement_st_completion_rule_view_form" />
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<field name="function_to_call" position="after">
|
||||
<group colspan="2">
|
||||
<field name="regex" attrs="{'invisible':[('function_to_call','!=','set_account')],'required':[('function_to_call','=','set_account')]}"/>
|
||||
<field name="account_id" attrs="{'invisible':[('function_to_call','!=','set_account')],'required':[('function_to_call','=','set_account')]}"/>
|
||||
</group>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
36
account_statement_regex_account_completion/tests/__init__.py
Normal file
36
account_statement_regex_account_completion/tests/__init__.py
Normal file
@@ -0,0 +1,36 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# Authors: Laetitia Gangloff
|
||||
# Copyright (c) 2014 Acsone SA/NV (http://www.acsone.eu)
|
||||
# All Rights Reserved
|
||||
#
|
||||
# WARNING: This program as such is intended to be used by professional
|
||||
# programmers who take the whole responsibility of assessing all potential
|
||||
# consequences resulting from its eventual inadequacies and bugs.
|
||||
# End users who are looking for a ready-to-use solution with commercial
|
||||
# guarantees and support are strongly advised to contact a Free Software
|
||||
# Service Company.
|
||||
#
|
||||
# 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 . import test_regex_account_completion
|
||||
|
||||
checks = [
|
||||
test_regex_account_completion
|
||||
]
|
||||
|
||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
@@ -0,0 +1,91 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# Authors: Laetitia Gangloff
|
||||
# Copyright (c) 2014 Acsone SA/NV (http://www.acsone.eu)
|
||||
# All Rights Reserved
|
||||
#
|
||||
# WARNING: This program as such is intended to be used by professional
|
||||
# programmers who take the whole responsibility of assessing all potential
|
||||
# consequences resulting from its eventual inadequacies and bugs.
|
||||
# End users who are looking for a ready-to-use solution with commercial
|
||||
# guarantees and support are strongly advised to contact a Free Software
|
||||
# Service Company.
|
||||
#
|
||||
# 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.tests import common
|
||||
import time
|
||||
|
||||
ACC_NUMBER = "BE38733040385372"
|
||||
|
||||
|
||||
class test_regex_account_completion(common.TransactionCase):
|
||||
|
||||
def prepare(self):
|
||||
self.account_bank_statement_obj = self.registry("account.bank.statement")
|
||||
self.account_bank_statement_line_obj = self.registry("account.bank.statement.line")
|
||||
self.account_id = self.ref('account.a_expense')
|
||||
# create the completion rule
|
||||
rule_vals = {'function_to_call': 'set_account',
|
||||
'regex': '^My statement',
|
||||
'account_id': self.account_id}
|
||||
completion_rule_id = self.registry("account.statement.completion.rule").create(self.cr, self.uid, rule_vals)
|
||||
|
||||
# Create the profile
|
||||
journal_id = self.ref("account.bank_journal")
|
||||
profile_id = self.registry("account.statement.profile").create(self.cr, self.uid, {
|
||||
"name": "TEST",
|
||||
"commission_account_id": self.ref("account.a_recv"),
|
||||
"journal_id": journal_id,
|
||||
"rule_ids": [(6, 0, [completion_rule_id])]})
|
||||
|
||||
# Create a bank statement
|
||||
self.statement_id = self.account_bank_statement_obj.create(self.cr, self.uid, {
|
||||
"balance_end_real": 0.0,
|
||||
"balance_start": 0.0,
|
||||
"date": time.strftime('%Y-%m-%d'),
|
||||
"journal_id": journal_id,
|
||||
"profile_id": profile_id
|
||||
})
|
||||
|
||||
# Create two bank statement lines
|
||||
self.statement_line1_id = self.account_bank_statement_line_obj.create(self.cr, self.uid, {
|
||||
'amount': 1000.0,
|
||||
'name': 'My statement',
|
||||
'ref': 'My ref',
|
||||
'statement_id': self.statement_id,
|
||||
'partner_acc_number': ACC_NUMBER
|
||||
})
|
||||
|
||||
self.statement_line2_id = self.account_bank_statement_line_obj.create(self.cr, self.uid, {
|
||||
'amount': 2000.0,
|
||||
'name': 'My second statement',
|
||||
'ref': 'My second ref',
|
||||
'statement_id': self.statement_id,
|
||||
'partner_acc_number': ACC_NUMBER
|
||||
})
|
||||
|
||||
def test_00(self):
|
||||
"""Test the automatic completion on account
|
||||
"""
|
||||
self.prepare()
|
||||
statement_obj = self.account_bank_statement_obj.browse(self.cr, self.uid, self.statement_id)
|
||||
statement_obj.button_auto_completion()
|
||||
statement_line1 = self.account_bank_statement_line_obj.browse(self.cr, self.uid, self.statement_line1_id)
|
||||
self.assertEquals(self.account_id, statement_line1.account_id.id, "The account should be the account of the completion")
|
||||
statement_line2 = self.account_bank_statement_line_obj.browse(self.cr, self.uid, self.statement_line2_id)
|
||||
self.assertNotEqual(self.account_id, statement_line2.account_id.id, "The account should be not the account of the completion")
|
||||
25
account_statement_so_completion/__init__.py
Normal file
25
account_statement_so_completion/__init__.py
Normal file
@@ -0,0 +1,25 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
###############################################################################
|
||||
# #
|
||||
# Author: Joel Grand-Guillaume
|
||||
# Copyright 2011-2012 Camptocamp SA
|
||||
# #
|
||||
# Author: Leonardo Pistone <leonardo.pistone@camptocamp.com> #
|
||||
# Copyright 2013 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 . import statement
|
||||
52
account_statement_so_completion/__openerp__.py
Normal file
52
account_statement_so_completion/__openerp__.py
Normal file
@@ -0,0 +1,52 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
###############################################################################
|
||||
# #
|
||||
# Author: Joel Grand-Guillaume
|
||||
# Copyright 2011-2012 Camptocamp SA
|
||||
# #
|
||||
# Author: Leonardo Pistone <leonardo.pistone@camptocamp.com> #
|
||||
# Copyright 2013 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/>. #
|
||||
# #
|
||||
###############################################################################
|
||||
|
||||
{'name': "Bank statement Sale Order completion",
|
||||
'version': '0.1',
|
||||
'author': 'Camptocamp',
|
||||
'maintainer': 'Camptocamp',
|
||||
'category': 'Finance',
|
||||
'complexity': 'easy',
|
||||
'depends': ['account_statement_base_completion', 'sale'],
|
||||
'description': """
|
||||
This module improve the module account_statement_base_completion to add
|
||||
support for completion rules based on Sale Orders. This was initially part of
|
||||
the module account_statement_base_completion, but is now separate to keep
|
||||
dependencies separate.
|
||||
|
||||
This module provides the following rule:
|
||||
|
||||
1) Match from statement line reference (based on SO number)
|
||||
""",
|
||||
'website': 'http://www.camptocamp.com',
|
||||
'data': [
|
||||
'data.xml',
|
||||
],
|
||||
'test': [
|
||||
'test/completion_so_test.yml'],
|
||||
'installable': True,
|
||||
'images': [],
|
||||
'auto_install': True,
|
||||
'license': 'AGPL-3',
|
||||
}
|
||||
12
account_statement_so_completion/data.xml
Normal file
12
account_statement_so_completion/data.xml
Normal file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data noupdate="1">
|
||||
|
||||
<record id="bank_statement_completion_rule_1" model="account.statement.completion.rule">
|
||||
<field name="name">Match from line reference (based on SO number)</field>
|
||||
<field name="sequence">50</field>
|
||||
<field name="function_to_call">get_from_ref_and_so</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
@@ -0,0 +1,28 @@
|
||||
# Translation of OpenERP Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * account_statement_so_completion
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 7.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2014-01-21 12:04+0000\n"
|
||||
"PO-Revision-Date: 2014-01-21 12:04+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_statement_so_completion
|
||||
#: code:addons/account_statement_so_completion/statement.py:77
|
||||
#, python-format
|
||||
msgid "Line named \"%s\" (Ref:%s) was matched by more than one partner while looking on SO by ref."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_so_completion
|
||||
#: model:ir.model,name:account_statement_so_completion.model_account_statement_completion_rule
|
||||
msgid "account.statement.completion.rule"
|
||||
msgstr ""
|
||||
|
||||
94
account_statement_so_completion/statement.py
Normal file
94
account_statement_so_completion/statement.py
Normal file
@@ -0,0 +1,94 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
###############################################################################
|
||||
# #
|
||||
# Author: Joel Grand-Guillaume #
|
||||
# Copyright 2011-2012 Camptocamp SA #
|
||||
# #
|
||||
# Author: Leonardo Pistone <leonardo.pistone@camptocamp.com> #
|
||||
# Copyright 2013 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 fields, orm
|
||||
from tools.translate import _
|
||||
|
||||
from openerp.addons.account_statement_base_completion.statement import ErrorTooManyPartner
|
||||
|
||||
|
||||
class account_statement_completion_rule(orm.Model):
|
||||
|
||||
_name = "account.statement.completion.rule"
|
||||
_inherit = "account.statement.completion.rule"
|
||||
|
||||
def _get_functions(self, cr, uid, context=None):
|
||||
res = super(account_statement_completion_rule, self)._get_functions(
|
||||
cr, uid, context=context)
|
||||
res.append(
|
||||
('get_from_ref_and_so', 'From line reference (based on SO number)')
|
||||
)
|
||||
return res
|
||||
|
||||
# Should be private but data are initialised with no update XML
|
||||
def get_from_ref_and_so(self, cr, uid, st_line, context=None):
|
||||
"""
|
||||
Match the partner based on the SO number and the reference of the
|
||||
statement line. Then, call the generic get_values_for_line method to
|
||||
complete other values. If more than one partner matched, raise the
|
||||
ErrorTooManyPartner error.
|
||||
|
||||
:param int/long st_line: read of the concerned
|
||||
account.bank.statement.line
|
||||
|
||||
:return:
|
||||
A dict of value that can be passed directly to the write method of
|
||||
the statement line or {}
|
||||
{'partner_id': value,
|
||||
'account_id': value,
|
||||
|
||||
...}
|
||||
"""
|
||||
st_obj = self.pool.get('account.bank.statement.line')
|
||||
res = {}
|
||||
if st_line:
|
||||
so_obj = self.pool.get('sale.order')
|
||||
so_id = so_obj.search(cr,
|
||||
uid,
|
||||
[('name', '=', st_line['ref'])],
|
||||
context=context)
|
||||
if so_id:
|
||||
if so_id and len(so_id) == 1:
|
||||
so = so_obj.browse(cr, uid, so_id[0], context=context)
|
||||
res['partner_id'] = so.partner_id.id
|
||||
elif so_id and len(so_id) > 1:
|
||||
raise ErrorTooManyPartner(
|
||||
_('Line named "%s" (Ref:%s) was matched by more '
|
||||
'than one partner while looking on SO by ref.') %
|
||||
(st_line['name'], st_line['ref']))
|
||||
st_vals = st_obj.get_values_for_line(
|
||||
cr,
|
||||
uid,
|
||||
profile_id=st_line['profile_id'],
|
||||
master_account_id=st_line['master_account_id'],
|
||||
partner_id=res.get('partner_id', False),
|
||||
line_type='customer',
|
||||
amount=st_line['amount'] if st_line['amount'] else 0.0,
|
||||
context=context)
|
||||
res.update(st_vals)
|
||||
return res
|
||||
|
||||
_columns = {
|
||||
'function_to_call': fields.selection(_get_functions, 'Method'),
|
||||
}
|
||||
44
account_statement_so_completion/test/completion_so_test.yml
Normal file
44
account_statement_so_completion/test/completion_so_test.yml
Normal file
@@ -0,0 +1,44 @@
|
||||
-
|
||||
In order to test the banking framework for Sale Orders, I first need to
|
||||
create a profile
|
||||
-
|
||||
!record {model: account.statement.profile, id: profile_test_so}:
|
||||
name: Bank EUR Profile for SO
|
||||
journal_id: account.bank_journal
|
||||
commission_account_id: account.a_expense
|
||||
company_id: base.main_company
|
||||
balance_check: True
|
||||
rule_ids:
|
||||
- account_statement_base_completion.bank_statement_completion_rule_4
|
||||
- account_statement_base_completion.bank_statement_completion_rule_5
|
||||
- account_statement_base_completion.bank_statement_completion_rule_2
|
||||
- account_statement_base_completion.bank_statement_completion_rule_3
|
||||
- bank_statement_completion_rule_1
|
||||
-
|
||||
Now I create a statement. I create statment lines separately because I need
|
||||
to find each one by XML id
|
||||
-
|
||||
!record {model: account.bank.statement, id: statement_test_sale1}:
|
||||
name: Statement for SO
|
||||
profile_id: profile_test_so
|
||||
company_id: base.main_company
|
||||
-
|
||||
I create a statement line for a SO
|
||||
-
|
||||
!record {model: account.bank.statement.line, id: statement_line_so}:
|
||||
name: Test autocompletion based on Sale Order Number
|
||||
statement_id: statement_test_sale1
|
||||
ref: SO007
|
||||
date: '2013-12-20'
|
||||
amount: 14981.0
|
||||
-
|
||||
I run the auto complete
|
||||
-
|
||||
!python {model: account.bank.statement}: |
|
||||
result = self.button_auto_completion(cr, uid, [ref("statement_test_sale1")])
|
||||
-
|
||||
Now I can check that all is nice and shiny, line 1. I expect the Sale Order
|
||||
Number to be recognised.
|
||||
-
|
||||
!assert {model: account.bank.statement.line, id: statement_line_so, string: Check completion by SO number}:
|
||||
- partner_id.name == u'Luminous Technologies'
|
||||
@@ -48,7 +48,10 @@
|
||||
"data.xml",
|
||||
],
|
||||
'demo_xml': [],
|
||||
'test': [],
|
||||
'test': [
|
||||
'test/sale.yml',
|
||||
'test/completion_transactionid_test.yml',
|
||||
],
|
||||
'installable': True,
|
||||
'images': [],
|
||||
'auto_install': True,
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
# Translation of OpenERP Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * account_statement_transactionid_completion
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 7.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2014-01-21 12:02+0000\n"
|
||||
"PO-Revision-Date: 2014-01-21 12:02+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_statement_transactionid_completion
|
||||
#: code:addons/account_statement_transactionid_completion/statement.py:65
|
||||
#, python-format
|
||||
msgid "Line named \"%s\" (Ref:%s) was matched by more than one partner."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_transactionid_completion
|
||||
#: model:ir.model,name:account_statement_transactionid_completion.model_account_bank_statement_line
|
||||
msgid "Bank Statement Line"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_transactionid_completion
|
||||
#: help:account.bank.statement.line,transaction_id:0
|
||||
msgid "Transaction id from the financial institute"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_transactionid_completion
|
||||
#: model:ir.model,name:account_statement_transactionid_completion.model_account_statement_completion_rule
|
||||
msgid "account.statement.completion.rule"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_statement_transactionid_completion
|
||||
#: field:account.bank.statement.line,transaction_id:0
|
||||
msgid "Transaction ID"
|
||||
msgstr ""
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
-
|
||||
In order to test the banking framework, I first need to create a profile
|
||||
-
|
||||
!record {model: account.statement.profile, id: statement_profile_transactionid}:
|
||||
name: Bank EUR Profile (transaction ID)
|
||||
journal_id: account.bank_journal
|
||||
commission_account_id: account.a_expense
|
||||
company_id: base.main_company
|
||||
balance_check: True
|
||||
rule_ids:
|
||||
- bank_statement_completion_rule_4
|
||||
- account_statement_base_completion.bank_statement_completion_rule_4
|
||||
- account_statement_base_completion.bank_statement_completion_rule_5
|
||||
- account_statement_base_completion.bank_statement_completion_rule_2
|
||||
- account_statement_base_completion.bank_statement_completion_rule_3
|
||||
-
|
||||
Now I create a statement. I create statment lines separately because I need
|
||||
to find each one by XML id
|
||||
-
|
||||
!record {model: account.bank.statement, id: statement_transactionid_test1}:
|
||||
name: Statement with transaction ID
|
||||
profile_id: statement_profile_transactionid
|
||||
company_id: base.main_company
|
||||
-
|
||||
I create a statement line for a SO with transaction ID
|
||||
-
|
||||
!record {model: account.bank.statement.line, id: statement_line_transactionid}:
|
||||
name: Test autocompletion based on SO with transaction ID
|
||||
statement_id: statement_transactionid_test1
|
||||
transaction_id: XXX66Z
|
||||
ref: 6
|
||||
date: '2014-01-06'
|
||||
amount: 118.4
|
||||
-
|
||||
I run the auto complete
|
||||
-
|
||||
!python {model: account.bank.statement}: |
|
||||
result = self.button_auto_completion(cr, uid, [ref("statement_profile_transactionid")])
|
||||
-
|
||||
Now I can check that all is nice and shiny, line 1. I expect the SO has been
|
||||
recognised from the transaction ID.
|
||||
-
|
||||
!assert {model: account.bank.statement.line, id: statement_line_transactionid, string: Check completion by SO transaction ID}:
|
||||
- partner_id.name == u'Agrolait'
|
||||
11
account_statement_transactionid_completion/test/sale.yml
Normal file
11
account_statement_transactionid_completion/test/sale.yml
Normal file
@@ -0,0 +1,11 @@
|
||||
-
|
||||
I create a new Sale Order with transaction ID
|
||||
-
|
||||
!record {model: sale.order, id: so_with_transaction_id}:
|
||||
partner_id: base.res_partner_2
|
||||
note: Invoice after delivery
|
||||
payment_term: account.account_payment_term
|
||||
transaction_id: XXX66Z
|
||||
order_line:
|
||||
- product_id: product.product_product_7
|
||||
product_uom_qty: 8
|
||||
@@ -0,0 +1,21 @@
|
||||
# Translation of OpenERP Server.
|
||||
# This file contains the translation of the following modules:
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 7.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2014-01-21 12:02+0000\n"
|
||||
"PO-Revision-Date: 2014-01-21 12:02+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_statement_transactionid_import
|
||||
#: model:ir.model,name:account_statement_transactionid_import.model_account_statement_profile
|
||||
msgid "Statement Profile"
|
||||
msgstr ""
|
||||
|
||||
@@ -27,16 +27,21 @@ class TransactionIDFileParser(FileParser):
|
||||
bank statement.
|
||||
"""
|
||||
|
||||
def __init__(self, parse_name, ftype='csv'):
|
||||
conversion_dict = {'transaction_id': unicode,
|
||||
'label': unicode,
|
||||
'date': datetime.datetime,
|
||||
'amount': float,
|
||||
'commission_amount': float}
|
||||
# Order of cols does not matter but first row of the file has to be header
|
||||
keys_to_validate = ['transaction_id', 'label', 'date', 'amount', 'commission_amount']
|
||||
super(TransactionIDFileParser, self).__init__(parse_name, keys_to_validate=keys_to_validate,
|
||||
ftype=ftype, conversion_dict=conversion_dict)
|
||||
def __init__(self, parse_name, ftype='csv', extra_fields=None, header=None, **kwargs):
|
||||
"""
|
||||
Add transaction_id in header keys
|
||||
:param char: parse_name: The name of the parser
|
||||
:param char: ftype: extension of the file (could be csv or xls)
|
||||
:param dict: extra_fields: extra fields to add to the conversion dict. In the format
|
||||
{fieldname: fieldtype}
|
||||
:param list: header : specify header fields if the csv file has no header
|
||||
"""
|
||||
extra_fields = {'transaction_id': unicode}
|
||||
super(TransactionIDFileParser, self).__init__(parse_name, extra_fields=extra_fields,
|
||||
ftype=ftype, header=header, **kwargs)
|
||||
# ref is replaced by transaction_id thus we delete it from check
|
||||
self.keys_to_validate = [k for k in self.keys_to_validate if k != 'ref']
|
||||
del self.conversion_dict['ref']
|
||||
|
||||
@classmethod
|
||||
def parser_for(cls, parser_name):
|
||||
@@ -73,14 +78,3 @@ class TransactionIDFileParser(FileParser):
|
||||
'label': line.get('label', ''),
|
||||
'transaction_id': line.get('transaction_id', '/'),
|
||||
'commission_amount': line.get('commission_amount', 0.0)}
|
||||
|
||||
def _post(self, *args, **kwargs):
|
||||
"""
|
||||
Compute the commission from value of each line
|
||||
"""
|
||||
res = super(TransactionIDFileParser, self)._post(*args, **kwargs)
|
||||
val = 0.0
|
||||
for row in self.result_row_list:
|
||||
val += row.get('commission_amount', 0.0)
|
||||
self.commission_global_amount = val
|
||||
return res
|
||||
|
||||
58
base_transaction_id/i18n/base_transaction_id.pot
Normal file
58
base_transaction_id/i18n/base_transaction_id.pot
Normal file
@@ -0,0 +1,58 @@
|
||||
# Translation of OpenERP Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * base_transaction_id
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 7.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2014-01-21 12:03+0000\n"
|
||||
"PO-Revision-Date: 2014-01-21 12:03+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: base_transaction_id
|
||||
#: field:account.invoice,transaction_id:0
|
||||
#: field:sale.order,transaction_id:0
|
||||
msgid "Transaction id"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_transaction_id
|
||||
#: view:account.invoice:0
|
||||
msgid "Transactions datas"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_transaction_id
|
||||
#: help:sale.order,transaction_id:0
|
||||
msgid "Transaction id from the financial institute"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_transaction_id
|
||||
#: help:account.invoice,transaction_id:0
|
||||
msgid "Transction id from the financial institute"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_transaction_id
|
||||
#: model:ir.actions.act_window,name:base_transaction_id.prm_act
|
||||
msgid "Packing"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_transaction_id
|
||||
#: model:ir.model,name:base_transaction_id.model_account_invoice
|
||||
msgid "Invoice"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_transaction_id
|
||||
#: model:ir.model,name:base_transaction_id.model_stock_picking
|
||||
msgid "Picking List"
|
||||
msgstr ""
|
||||
|
||||
#. module: base_transaction_id
|
||||
#: model:ir.model,name:base_transaction_id.model_sale_order
|
||||
msgid "Sales Order"
|
||||
msgstr ""
|
||||
|
||||
32
invoicing_voucher_killer/i18n/invoicing_voucher_killer.pot
Normal file
32
invoicing_voucher_killer/i18n/invoicing_voucher_killer.pot
Normal file
@@ -0,0 +1,32 @@
|
||||
# Translation of OpenERP Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * invoicing_voucher_killer
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 7.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2014-01-21 12:00+0000\n"
|
||||
"PO-Revision-Date: 2014-01-21 12:00+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: invoicing_voucher_killer
|
||||
#: view:account.invoice:0
|
||||
msgid "Pay"
|
||||
msgstr ""
|
||||
|
||||
#. module: invoicing_voucher_killer
|
||||
#: model:res.groups,name:invoicing_voucher_killer.invoice_voucher_user
|
||||
msgid "Use voucher in Invoices"
|
||||
msgstr ""
|
||||
|
||||
#. module: invoicing_voucher_killer
|
||||
#: view:account.invoice:0
|
||||
msgid "Register Payment"
|
||||
msgstr ""
|
||||
|
||||
@@ -39,9 +39,9 @@ line will be take from imported line in this order:
|
||||
'author': 'Camptocamp',
|
||||
'website': 'http://www.camptocamp.com',
|
||||
'depends': ['account_voucher', 'account_payment'],
|
||||
'init_xml': [],
|
||||
'update_xml': [],
|
||||
'demo_xml': [],
|
||||
'data': [
|
||||
'statement_view.xml',
|
||||
],
|
||||
'test': [],
|
||||
'installable': True,
|
||||
'active': False,
|
||||
|
||||
27
statement_voucher_killer/i18n/statement_voucher_killer.pot
Normal file
27
statement_voucher_killer/i18n/statement_voucher_killer.pot
Normal file
@@ -0,0 +1,27 @@
|
||||
# Translation of OpenERP Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * statement_voucher_killer
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: OpenERP Server 7.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2014-01-21 12:00+0000\n"
|
||||
"PO-Revision-Date: 2014-01-21 12:00+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: statement_voucher_killer
|
||||
#: model:ir.model,name:statement_voucher_killer.model_account_statement_from_invoice_lines
|
||||
msgid "Entries by Statement from Invoices"
|
||||
msgstr ""
|
||||
|
||||
#. module: statement_voucher_killer
|
||||
#: model:ir.model,name:statement_voucher_killer.model_account_payment_populate_statement
|
||||
msgid "Account Payment Populate Statement"
|
||||
msgstr ""
|
||||
|
||||
20
statement_voucher_killer/statement_view.xml
Normal file
20
statement_voucher_killer/statement_view.xml
Normal file
@@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<!-- INHERITED VIEW FOR THE OBJECT : account_bank_statement -->
|
||||
|
||||
<record id="account_bank_statement_view_form" model="ir.ui.view">
|
||||
<field name="model">account.bank.statement</field>
|
||||
<field name="inherit_id" ref="account.view_bank_statement_form" />
|
||||
<field eval="100" name="priority"/>
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<field name="voucher_id" position="replace">
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
Reference in New Issue
Block a user