mirror of
https://github.com/OCA/account-reconcile.git
synced 2025-01-20 12:27:39 +02:00
Add new completion rules to set a specific account in function of regex on name
This commit is contained in:
21
account_statement_regex_account_completion/__init__.py
Normal file
21
account_statement_regex_account_completion/__init__.py
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Author: Laurent Mignon
|
||||||
|
# Copyright 2013 'ACSONE SA/NV'
|
||||||
|
#
|
||||||
|
# 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
|
||||||
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:
|
||||||
12
account_statement_regex_account_completion/data.xml
Normal file
12
account_statement_regex_account_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_10" model="account.statement.completion.rule">
|
||||||
|
<field name="name">Match from bank account number (Nomal or IBAN))</field>
|
||||||
|
<field name="sequence">10</field>
|
||||||
|
<field name="function_to_call">get_from_bank_account</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</data>
|
||||||
|
</openerp>
|
||||||
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'))
|
||||||
|
return res
|
||||||
|
|
||||||
|
_columns = {
|
||||||
|
'function_to_call': fields.selection(_get_functions, 'Method'),
|
||||||
|
'regexp': 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 regexp, 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.regexp, 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,92 @@
|
|||||||
|
# -*- 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}
|
||||||
|
self.completion_rule_id = self.registry("account.statement.completion.rule").create(self.cr, self.uid, rule_vals)
|
||||||
|
|
||||||
|
# Create the profile
|
||||||
|
self.journal_id = self.ref("account.bank_journal")
|
||||||
|
self.profile_id = self.registry("account.statement.profile").create(self.cr, self.uid, {
|
||||||
|
"name": "TEST",
|
||||||
|
"commission_account_id": self.ref("account.a_recv"),
|
||||||
|
"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
|
||||||
|
})
|
||||||
|
|
||||||
|
# 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_line = self.account_bank_statement_line_obj.browse(self.cr, self.uid, self.statement_line_id)
|
||||||
|
# before import, the
|
||||||
|
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, self.statement_line_id)
|
||||||
|
self.assertEquals(self.partner_id, statement_line.partner_id['id'], "Missing expected partner id after completion")
|
||||||
Reference in New Issue
Block a user