1048
1051
if partner_banks:
1049
1052
partner_ids = [x.partner_id.id for x in partner_banks]
1050
1053
elif transaction.remote_owner:
1051
iban = sepa.IBAN(transaction.remote_account)
1053
country_code = iban.countrycode
1054
elif transaction.remote_owner_country_code:
1055
country_code = transaction.remote_owner_country_code
1056
# fallback on the import parsers country code
1057
elif transaction.bank_country_code:
1058
country_code = transaction.bank_country_code
1059
elif company.partner_id and company.partner_id.country:
1060
country_code = company.partner_id.country.code
1063
partner_id = banktools.get_or_create_partner(
1054
country_id = banktools.get_country_id(
1055
self.pool, cr, uid, transaction, context=context)
1056
partner_id = banktools.get_partner(
1064
1057
self.pool, cr, uid, transaction.remote_owner,
1065
1058
transaction.remote_owner_address,
1066
1059
transaction.remote_owner_postalcode,
1067
1060
transaction.remote_owner_city,
1068
country_code, results['log'],
1069
customer=transaction.transferred_amount > 0,
1070
supplier=transaction.transferred_amount < 0,
1061
country_id, results['log'],
1071
1062
context=context)
1072
if transaction.remote_account:
1073
partner_bank_id = banktools.create_bank_account(
1074
self.pool, cr, uid, partner_id,
1075
transaction.remote_account,
1076
transaction.remote_owner,
1077
transaction.remote_owner_address,
1078
transaction.remote_owner_city,
1079
country_code, results['log'],
1080
bic=transaction.remote_bank_bic
1082
partner_banks = partner_bank_obj.browse(
1083
cr, uid, [partner_bank_id]
1086
partner_bank_id = None
1088
partner_ids = [partner_id]
1064
partner_ids = [partner_id]
1065
if transaction.remote_account:
1066
partner_bank_id = banktools.create_bank_account(
1067
self.pool, cr, uid, partner_id,
1068
transaction.remote_account,
1069
transaction.remote_owner,
1070
transaction.remote_owner_address,
1071
transaction.remote_owner_city,
1072
country_id, bic=transaction.remote_bank_bic,
1074
partner_banks = partner_bank_obj.browse(
1075
cr, uid, [partner_bank_id], context=context)
1093
1077
# Credit means payment... isn't it?
1094
1078
if (not move_info
1281
def unlink(self, cr, uid, ids, context=None):
1283
Unsplit if this if a split transaction
1285
for this in self.browse(cr, uid, ids, context):
1287
this.parent_id.write(
1288
{'transferred_amount':
1289
this.parent_id.transferred_amount + \
1290
this.transferred_amount,
1292
this.parent_id.refresh()
1293
return super(banking_import_transaction, self).unlink(
1294
cr, uid, ids, context=context)
1298
1297
# used in bank_import.py, converting non-osv transactions
1299
1298
'statement_id': 'statement',
1408
1407
class account_bank_statement_line(orm.Model):
1409
1408
_inherit = 'account.bank.statement.line'
1410
def _get_link_partner_ok(
1411
self, cr, uid, ids, name, args, context=None):
1413
Deliver the values of the function field that
1414
determines if the 'link partner' wizard is show on the
1418
for line in self.browse(cr, uid, ids, context):
1419
res[line.id] = bool(
1420
line.state == 'draft'
1421
and not line.partner_id
1422
and line.import_transaction_id
1423
and line.import_transaction_id.remote_owner
1424
and line.import_transaction_id.remote_account)
1411
1428
'import_transaction_id': fields.many2one(
1412
1429
'banking.import.transaction',
1413
'Import transaction', readonly=True, delete='cascade'),
1430
'Import transaction', readonly=True, ondelete='cascade'),
1414
1431
'match_multi': fields.related(
1415
1432
'import_transaction_id', 'match_multi', type='boolean',
1416
1433
string='Multi match', readonly=True),
1430
1447
'state': fields.selection(
1431
1448
[('draft', 'Draft'), ('confirmed', 'Confirmed')], 'State',
1432
1449
readonly=True, required=True),
1450
'parent_id': fields.many2one('account.bank.statement.line',
1452
'link_partner_ok': fields.function(
1453
_get_link_partner_ok, type='boolean',
1454
string='Can link partner'),
1450
1472
res = wizard_obj.create_act_window(cr, uid, res_id, context=context)
1475
def link_partner(self, cr, uid, ids, context=None):
1477
Get the appropriate partner or fire a wizard to create
1483
if isinstance(ids, (int, long)):
1486
# Check if the partner is already known but not shown
1487
# because the screen was not refreshed yet
1488
statement_line = self.browse(
1489
cr, uid, ids[0], context=context)
1490
if statement_line.partner_id:
1493
# Reuse the bank's partner if any
1494
if (statement_line.partner_bank_id and
1495
statement_line.partner_bank_id.partner_id):
1496
statement_line.write(
1497
{'partner_id': statement_line.partner_bank_id.partner_id.id})
1500
if (not statement_line.import_transaction_id or
1501
not statement_line.import_transaction_id.remote_account):
1502
raise osv.except_osv(
1504
_("No bank account available to link partner to"))
1506
# Check if the bank account was already been linked
1507
# manually to another transaction
1508
remote_account = statement_line.import_transaction_id.remote_account
1509
source_line_ids = self.search(
1511
[('import_transaction_id.remote_account', '=', remote_account),
1512
('partner_bank_id.partner_id', '!=', False),
1513
], limit=1, context=context)
1515
source_line = self.browse(
1516
cr, uid, source_line_ids[0], context=context)
1517
target_line_ids = self.search(
1519
[('import_transaction_id.remote_account', '=', remote_account),
1520
('partner_bank_id', '=', False),
1521
('state', '=', 'draft')], context=context)
1523
cr, uid, target_line_ids,
1524
{'partner_bank_id': source_line.partner_bank_id.id,
1525
'partner_id': source_line.partner_bank_id.partner_id.id,
1529
# Or fire the wizard to link partner and account
1530
wizard_obj = self.pool.get('banking.link_partner')
1531
res_id = wizard_obj.create(
1532
cr, uid, {'statement_line_id': ids[0]}, context=context)
1533
return wizard_obj.create_act_window(cr, uid, res_id, context=context)
1453
1535
def _convert_currency(
1454
1536
self, cr, uid, from_curr_id, to_curr_id, from_amount,
1455
1537
round=False, date=None, context=None):
1618
1708
'import_transaction_id': res},
1619
1709
context=context)
1621
account_bank_statement_line()
1711
def split_off(self, cr, uid, ids, amount, context=None):
1713
Create a child statement line with amount, deduce that from this line,
1714
change transactions accordingly
1719
transaction_pool = self.pool.get('banking.import.transaction')
1721
child_statement_ids = []
1722
for this in self.browse(cr, uid, ids, context):
1723
transaction_data = transaction_pool.copy_data(
1724
cr, uid, this.import_transaction_id.id)
1725
transaction_data['transferred_amount'] = amount
1726
transaction_data['message'] = (
1727
(transaction_data['message'] or '') + _(' (split)'))
1728
transaction_data['parent_id'] = this.import_transaction_id.id
1729
transaction_id = transaction_pool.create(
1734
context, transaction_no_duplicate_search=True))
1736
statement_line_data = self.copy_data(
1738
statement_line_data['amount'] = amount
1739
statement_line_data['name'] = (
1740
(statement_line_data['name'] or '') + _(' (split)'))
1741
statement_line_data['import_transaction_id'] = transaction_id
1742
statement_line_data['parent_id'] = this.id
1744
child_statement_ids.append(
1745
self.create(cr, uid, statement_line_data,
1747
this.write({'amount': this.amount - amount})
1749
return child_statement_ids
1624
1752
class account_bank_statement(orm.Model):