2011-08-15 14:21:41 +00:00
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
#
# 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/>.
#
##############################################################################
2012-12-06 14:56:32 +00:00
from openerp . tools . translate import _
from openerp . osv import fields , osv
2011-08-15 14:21:41 +00:00
class bank ( osv . osv ) :
_inherit = " res.partner.bank "
_columns = {
' journal_id ' : fields . many2one ( ' account.journal ' , ' Account Journal ' , help = " This journal will be created automatically for this bank account when you save the record " ) ,
2012-02-01 12:50:42 +00:00
' currency_id ' : fields . related ( ' journal_id ' , ' currency ' , type = " many2one " , relation = ' res.currency ' , readonly = True ,
string = " Currency " , help = " Currency of the related account journal. " ) ,
2011-08-15 14:21:41 +00:00
}
2012-03-05 17:41:11 +00:00
def create ( self , cr , uid , data , context = None ) :
2011-08-15 14:21:41 +00:00
result = super ( bank , self ) . create ( cr , uid , data , context = context )
self . post_write ( cr , uid , [ result ] , context = context )
return result
2012-03-05 17:41:11 +00:00
def write ( self , cr , uid , ids , data , context = None ) :
2011-08-15 14:21:41 +00:00
result = super ( bank , self ) . write ( cr , uid , ids , data , context = context )
self . post_write ( cr , uid , ids , context = context )
return result
2011-11-07 12:43:37 +00:00
def _prepare_name ( self , bank ) :
" Return the name to use when creating a bank journal "
2013-01-31 13:30:11 +00:00
return ( bank . bank_name or ' ' ) + ' ' + ( bank . acc_number or ' ' )
2011-11-07 12:43:37 +00:00
2012-09-13 11:46:09 +00:00
def _prepare_name_get ( self , cr , uid , bank_dicts , context = None ) :
""" Add ability to have %(currency_name)s in the format_layout of res.partner.bank.type """
2012-11-23 10:36:57 +00:00
currency_ids = list ( set ( data [ ' currency_id ' ] [ 0 ] for data in bank_dicts if data . get ( ' currency_id ' ) ) )
2012-09-13 11:46:09 +00:00
currencies = self . pool . get ( ' res.currency ' ) . browse ( cr , uid , currency_ids , context = context )
currency_name = dict ( ( currency . id , currency . name ) for currency in currencies )
for data in bank_dicts :
2012-11-23 09:53:37 +00:00
data [ ' currency_name ' ] = data . get ( ' currency_id ' ) and currency_name [ data [ ' currency_id ' ] [ 0 ] ] or ' '
2012-09-13 11:46:09 +00:00
return super ( bank , self ) . _prepare_name_get ( cr , uid , bank_dicts , context = context )
2012-07-10 23:35:03 +00:00
2012-03-05 17:41:11 +00:00
def post_write ( self , cr , uid , ids , context = None ) :
2011-11-15 06:40:57 +00:00
if isinstance ( ids , ( int , long ) ) :
ids = [ ids ]
2011-08-15 14:21:41 +00:00
obj_acc = self . pool . get ( ' account.account ' )
obj_data = self . pool . get ( ' ir.model.data ' )
2011-11-15 12:42:26 +00:00
2011-08-15 14:21:41 +00:00
for bank in self . browse ( cr , uid , ids , context ) :
if bank . company_id and not bank . journal_id :
# Find the code and parent of the bank account to create
dig = 6
current_num = 1
2013-06-10 11:04:01 +00:00
ids = obj_acc . search ( cr , uid , [ ( ' type ' , ' = ' , ' liquidity ' ) , ( ' company_id ' , ' = ' , bank . company_id . id ) , ( ' parent_id ' , ' != ' , False ) ] , context = context )
2011-08-15 14:21:41 +00:00
# No liquidity account exists, no template available
if not ids : continue
[FIX] account: account type of account created on bank account creation
When creating a new bank account
e.g. Accounting > Configuration > Accounts >
Setup your Bank Accounts
When the user leaves the journal blank,
a journal, and an account associated to this
journal, are automatically created.
The account type of the account created could be wrong,
as it used the account type of the parent of the first
account of internal type `Liquidity`, which
could not be an account of account type Cash or Bank, but of
account type 'View', and such an account type does not
have the right delivery forward method, in order to report
correctly the amounts when closing a fiscal year.
Instead of using the account type of the parent,
it should actually uses the account type of the sibbling,
which have a correct delivery forward method
opw-647311
2015-08-14 08:40:57 +00:00
sibbling_acc_bank = obj_acc . browse ( cr , uid , ids [ 0 ] , context = context )
ref_acc_bank = sibbling_acc_bank . parent_id
2011-08-15 14:21:41 +00:00
while True :
new_code = str ( ref_acc_bank . code . ljust ( dig - len ( str ( current_num ) ) , ' 0 ' ) ) + str ( current_num )
ids = obj_acc . search ( cr , uid , [ ( ' code ' , ' = ' , new_code ) , ( ' company_id ' , ' = ' , bank . company_id . id ) ] )
if not ids :
break
current_num + = 1
2011-11-07 12:43:37 +00:00
name = self . _prepare_name ( bank )
2011-08-15 14:21:41 +00:00
acc = {
2011-11-07 12:43:37 +00:00
' name ' : name ,
2011-08-15 14:21:41 +00:00
' code ' : new_code ,
' type ' : ' liquidity ' ,
[FIX] account: account type of account created on bank account creation
When creating a new bank account
e.g. Accounting > Configuration > Accounts >
Setup your Bank Accounts
When the user leaves the journal blank,
a journal, and an account associated to this
journal, are automatically created.
The account type of the account created could be wrong,
as it used the account type of the parent of the first
account of internal type `Liquidity`, which
could not be an account of account type Cash or Bank, but of
account type 'View', and such an account type does not
have the right delivery forward method, in order to report
correctly the amounts when closing a fiscal year.
Instead of using the account type of the parent,
it should actually uses the account type of the sibbling,
which have a correct delivery forward method
opw-647311
2015-08-14 08:40:57 +00:00
' user_type ' : sibbling_acc_bank . user_type . id ,
2011-08-15 14:21:41 +00:00
' reconcile ' : False ,
' parent_id ' : ref_acc_bank . id ,
' company_id ' : bank . company_id . id ,
}
acc_bank_id = obj_acc . create ( cr , uid , acc , context = context )
jour_obj = self . pool . get ( ' account.journal ' )
new_code = 1
while True :
code = _ ( ' BNK ' ) + str ( new_code )
ids = jour_obj . search ( cr , uid , [ ( ' code ' , ' = ' , code ) ] , context = context )
if not ids :
break
new_code + = 1
#create the bank journal
vals_journal = {
2011-11-07 12:43:37 +00:00
' name ' : name ,
2011-08-15 14:21:41 +00:00
' code ' : code ,
' type ' : ' bank ' ,
' company_id ' : bank . company_id . id ,
' analytic_journal_id ' : False ,
' default_credit_account_id ' : acc_bank_id ,
' default_debit_account_id ' : acc_bank_id ,
}
journal_id = jour_obj . create ( cr , uid , vals_journal , context = context )
self . write ( cr , uid , [ bank . id ] , { ' journal_id ' : journal_id } , context = context )
return True
2011-11-22 08:51:38 +00:00
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: