[IMP] edi: fix bank info import/export
bzr revid: odo@openerp.com-20111102234116-rixugbnnq92ix7o6
This commit is contained in:
@@ -48,7 +48,11 @@ class res_company(osv.osv):
|
||||
result['logo'] = company.logo # already base64-encoded
|
||||
if company.paypal_account:
|
||||
result['paypal_account'] = company.paypal_account
|
||||
# bank info
|
||||
if company.bank_ids:
|
||||
result['bank_ids'] = res_partner_address.edi_m2m(cr, uid, company.bank_ids, context=context)
|
||||
# bank info: include only bank account supposed to be displayed in document footers
|
||||
res_partner_bank = self.pool.get('res.partner.bank')
|
||||
bank_ids = res_partner_bank.search(cr, uid, [('company_id','=',company.id),('footer','=',True)], context=context)
|
||||
if bank_ids:
|
||||
result['bank_ids'] = res_partner_address.edi_m2m(cr, uid,
|
||||
res_partner_bank.browse(cr, uid, bank_ids, context=context),
|
||||
context=context)
|
||||
return result
|
||||
|
||||
@@ -18,8 +18,12 @@
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
import logging
|
||||
|
||||
from osv import fields,osv
|
||||
from edi import EDIMixin
|
||||
from openerp import SUPERUSER_ID
|
||||
from tools.translate import _
|
||||
|
||||
RES_PARTNER_ADDRESS_EDI_STRUCT = {
|
||||
'name': True,
|
||||
@@ -54,6 +58,26 @@ class res_partner(osv.osv, EDIMixin):
|
||||
class res_partner_address(osv.osv, EDIMixin):
|
||||
_inherit = "res.partner.address"
|
||||
|
||||
def _get_bank_type(self, cr, uid, context=None):
|
||||
# first option: the "normal" bank type, installed by default
|
||||
res_partner_bank_type = self.pool.get('res.partner.bank.type')
|
||||
try:
|
||||
return self.pool.get('ir.model.data').get_object(cr, uid, 'base', 'bank_normal', context=context).code
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
# second option: create a new custom type for EDI or use it if already created, as IBAN type is
|
||||
# not always appropriate: we need a free-form bank type for max flexibility (users can correct
|
||||
# data manually after import)
|
||||
code, label = 'edi_generic', 'Generic Bank Type (auto-created for EDI)'
|
||||
bank_code_ids = res_partner_bank_type.search(cr, uid, [('code','=',code)], context=context)
|
||||
if not bank_code_ids:
|
||||
logging.getLogger('edi.res_partner').info('Normal bank account type is missing, creating '
|
||||
'a generic bank account type for EDI.')
|
||||
self.res_partner_bank_type.create(cr, SUPERUSER_ID, {'name': label,
|
||||
'code': label})
|
||||
return code
|
||||
|
||||
def edi_export(self, cr, uid, records, edi_struct=None, context=None):
|
||||
return super(res_partner_address,self).edi_export(cr, uid, records,
|
||||
edi_struct or dict(RES_PARTNER_ADDRESS_EDI_STRUCT),
|
||||
@@ -67,15 +91,16 @@ class res_partner_address(osv.osv, EDIMixin):
|
||||
partner = self._edi_get_object_by_external_id(cr, uid, edi_document['partner_id'][0],
|
||||
'res.partner', context=context)
|
||||
assert partner is not None
|
||||
import_ctx = dict(context, default_partner_id=partner.id)
|
||||
|
||||
# get the first bank type
|
||||
res_partner_bank_type = self.pool.get('res.partner.bank.type')
|
||||
bank_code_ids = res_partner_bank_type.search(cr, uid, [], context=context)
|
||||
assert bank_code_ids, 'Please define at least one "bank type" before importing bank accounts'
|
||||
import_ctx['default_state'] = res_partner_bank_type.browse(cr, uid, bank_code_ids[0]).code
|
||||
bank_ids = []
|
||||
import_ctx = dict(context,
|
||||
default_partner_id=partner.id,
|
||||
default_state=self._get_bank_type(cr, uid, context))
|
||||
for ext_bank_id, bank_name in edi_bank_ids:
|
||||
bank_ids.append(self.edi_import_relation(cr, uid, 'res.partner.bank',
|
||||
bank_name, ext_bank_id, context=import_ctx))
|
||||
try:
|
||||
self.edi_import_relation(cr, uid, 'res.partner.bank',
|
||||
bank_name, ext_bank_id, context=import_ctx)
|
||||
except osv.except_osv:
|
||||
# failed to import it, try again with unrestricted default type
|
||||
logging.getLogger('edi.res_partner').warning('Failed to import bank account using'
|
||||
'bank type: %s, ignoring', import_ctx['default_state'],
|
||||
exc_info=True)
|
||||
return result
|
||||
@@ -78,7 +78,7 @@
|
||||
"street": "Chaussee de Namur 40",
|
||||
"street2": "mailbox 34",
|
||||
"bank_ids": [
|
||||
["base:724f93ec-ddd0-11e0-88ec-701a04e25543.res_partner_bank-ZrTWzeDJzGbp","Sample bank: 123465789-156113"]
|
||||
["base:724f93ec-ddd0-11e0-88ec-701a04e25543.res_partner_bank-XiwqnxKWzGbp","Guys bank: 123477777-156113"]
|
||||
],
|
||||
},
|
||||
"order_line": [{
|
||||
@@ -117,7 +117,7 @@
|
||||
# check bank info on partner
|
||||
assert len(order_new.partner_id.bank_ids) == 1, "Expected 1 bank entry related to partner"
|
||||
bank_info = order_new.partner_id.bank_ids[0]
|
||||
assert bank_info.acc_number == "Sample bank: 123465789-156113", 'Expected "Sample bank: 123465789-156113", got %s' % bank_info.acc_number
|
||||
assert bank_info.acc_number == "Guys bank: 123477777-156113", 'Expected "Guys bank: 123477777-156113", got %s' % bank_info.acc_number
|
||||
|
||||
assert order_new.pricelist_id.name == 'Default Purchase Pricelist' , "Default Purchase Pricelist was not automatically assigned"
|
||||
assert order_new.amount_total == 350, "Amount total is not same"
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
"zip": "1367",
|
||||
"country_id": ["base:5af1272e-dd26-11e0-b65e-701a04e25543.be", "Belgium"],
|
||||
"bank_ids": [
|
||||
["base:5af1272e-dd26-11e0-b65e-701a04e25543.res_partner_bank-ZrTWzesfsdDJzGbp","Sample bank: 123465789-156113"]
|
||||
["base:5af1272e-dd26-11e0-b65e-701a04e25543.res_partner_bank-adaWadsadasdDJzGbp","Ladies bank: 032465789-156113"]
|
||||
],
|
||||
},
|
||||
"partner_id": ["purchase:5af1272e-dd26-11e0-b65e-701a04e25543.res_partner_test20", "jones white"],
|
||||
@@ -111,7 +111,7 @@
|
||||
# check bank info on partner
|
||||
assert len(order_new.partner_id.bank_ids) == 1, "Expected 1 bank entry related to partner"
|
||||
bank_info = order_new.partner_id.bank_ids[0]
|
||||
assert bank_info.acc_number == "Sample bank: 123465789-156113", 'Expected "Sample bank: 123465789-156113", got %s' % bank_info.acc_number
|
||||
assert bank_info.acc_number == "Ladies bank: 032465789-156113", 'Expected "Ladies bank: 032465789-156113", got %s' % bank_info.acc_number
|
||||
|
||||
assert order_new.pricelist_id.name == 'Public Pricelist' , "Public Price list was not automatically assigned"
|
||||
assert order_new.amount_total == 350, "Amount total is wrong"
|
||||
|
||||
Reference in New Issue
Block a user