[merge] upstream

This commit is contained in:
Leonardo Pistone
2014-02-17 16:57:15 +01:00
18 changed files with 538 additions and 67 deletions

View File

@@ -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,12 +99,15 @@ 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)
result = method_to_call(cr, uid, line, context)
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
return result
@@ -181,7 +184,7 @@ class AccountStatementCompletionRule(orm.Model):
inv = self._find_invoice(cr, uid, line, inv_type, context=context)
if inv:
# FIXME use only commercial_partner_id of invoice in 7.1
# this is for backward compatibility in 7.0 before
# this is for backward compatibility in 7.0 before
# the refactoring of res.partner
if hasattr(inv, 'commercial_partner_id'):
partner_id = inv.commercial_partner_id.id
@@ -415,7 +418,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()
@@ -426,10 +429,9 @@ class AccountStatementLine(orm.Model):
serialized = st_copy.setdefault(col.serialization_field, {})
serialized[k] = st_copy[k]
for k in to_json_k:
st_copy[k] = simplejson.dumps(st_copy[k])
st_copy[k] = simplejson.dumps(st_copy[k])
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
@@ -453,7 +455,7 @@ class AccountStatementLine(orm.Model):
when cheking security.
TODO / WARM: sparse fields are skipped by the method. IOW, if your
completion rule update an sparse field, the updated value will never
be stored in the database. It would be safer to call the update method
be stored in the database. It would be safer to call the update method
from the ORM for records updating this kind of fields.
"""
cols = self._get_available_columns([vals])
@@ -526,7 +528,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

View File

@@ -20,7 +20,6 @@
##############################################################################
import base64
import csv
from datetime import datetime
def UnicodeDictReader(utf8_data, **kwargs):
@@ -115,6 +114,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,
'balance_start': self.balance_start,
'balance_end_real': self.balance_end,
'date': self.statement_date
}
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
@@ -155,37 +167,6 @@ class BankStatementImportParser(object):
self._post(*args, **kwargs)
return self.result_row_list
def get_start_balance(self, *args, **kwargs):
"""
This is called by the importation method to set the balance start
amount in the bank statement.
return: float of the balance start (self.balance_start)
"""
return self.balance_start
def get_end_balance(self, *args, **kwargs):
"""
This is called by the importation method to set the balance end
amount in the bank statement.
return: float of the balance end (self.balance_end)
"""
return self.balance_end
def get_statement_name(self, *args, **kwargs):
"""
This is called by the importation method to set the statement
name in the bank statement.
return: string of the statement name (self.statement_name)
"""
return self.statement_name or '/'
def get_statement_date(self, *args, **kwargs):
"""
This is called by the importation method to set the statement
date in the bank statement.
return: datetime of the statement date (self.statement_date)
"""
return self.statement_date or datetime.now()
def itersubclasses(cls, _seen=None):
"""

View File

@@ -90,7 +90,7 @@ class AccountStatementProfil(Model):
statement_id, context):
"""
Hook to build the values of a line from the parser returned values. At
least it fullfill the statement_id and account_id. Overide it to add your
least it fullfill the statement_id and account_id. Override it to add your
own completion if needed.
:param dict of vals from parser for account.bank.statement.line (called by
@@ -126,14 +126,14 @@ class AccountStatementProfil(Model):
values['type'] = 'general'
return values
def _prepare_statement_vals(self, cr, uid, prof, parser, context=None):
return {
'profile_id': prof.id,
'name': parser.get_statement_name(),
'balance_start': parser.get_start_balance(),
'balance_end_real': parser.get_end_balance(),
}
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):
"""
@@ -168,8 +168,11 @@ class AccountStatementProfil(Model):
_("Column %s you try to import is not "
"present in the bank statement line!") % col)
st_vals = self._prepare_statement_vals(cr, uid, prof, parser, context=context)
statement_id = statement_obj.create(cr, uid, st_vals, context=context)
statement_vals = self.prepare_statement_vals(cr, uid, prof.id, result_row_list, parser, context)
statement_id = statement_obj.create(cr, uid,
statement_vals,
context=context)
if prof.receivable_account_id:
account_receivable = account_payable = prof.receivable_account_id.id
else:

View File

@@ -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': parser.get_statement_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"

View File

@@ -210,11 +210,13 @@ class AccountBankSatement(Model):
return super(AccountBankSatement, 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):
@@ -571,14 +573,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

View 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/>.
#
###############################################################################

View 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,
}

View 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>

View 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:

View 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:

View 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-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 ""

View 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-02-10 05:56+0000\n"
"X-Generator: Launchpad (build 16916)\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"

View 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:

View File

@@ -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>

View 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:

View File

@@ -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")

View File

@@ -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,

View 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>