Skip to content

Commit bd64974

Browse files
author
Iryna Vyshnevska
committed
[IMP] updates for partenr_banks_to_show method
1 parent 35b0c63 commit bd64974

File tree

4 files changed

+45
-70
lines changed

4 files changed

+45
-70
lines changed

l10n_ch_base_bank/__manifest__.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,19 @@
1-
# Copyright 2012-2017 Camptocamp
1+
# Copyright 2012-2019 Camptocamp
22
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
33

44
{'name': 'Switzerland - Bank type',
55
'summary': 'Types and number validation for swiss electronic pmnt. DTA, ESR',
66
'version': '11.0.1.2.0',
77
'author': "Camptocamp,Odoo Community Association (OCA)",
88
'category': 'Localization',
9-
'website': 'http://www.camptocamp.com',
9+
'website': 'https://github.com/OCA/l10n-switzerland',
1010
'license': 'AGPL-3',
1111
'depends': ['account_payment_partner', 'base_iban'],
1212
'data': [
1313
'security/security.xml',
1414
'views/bank.xml',
1515
'views/invoice.xml',
1616
],
17-
'demo': [],
18-
'test': [],
1917
'auto_install': False,
2018
'installable': True,
21-
'images': []
2219
}

l10n_ch_base_bank/models/bank.py

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77

88
from odoo.addons.base_iban.models.res_partner_bank import normalize_iban
99

10+
# bic for all switzerland's post offices is defined
11+
CH_POST_BIC = 'POFICHBEXXX'
12+
1013

1114
class BankCommon(object):
1215

@@ -119,7 +122,7 @@ def _check_postal_num(self):
119122

120123
@api.multi
121124
def is_swiss_post(self):
122-
return self.bic == 'POFICHBEXXX'
125+
return self.bic == CH_POST_BIC
123126

124127
@api.multi
125128
def name_get(self):
@@ -216,6 +219,12 @@ class ResPartnerBank(models.Model, BankCommon):
216219
'The ISR adherent number/ccp pair must be unique !'),
217220
]
218221

222+
@api.model
223+
def _get_supported_account_types(self):
224+
rslt = super(ResPartnerBank, self)._get_supported_account_types()
225+
rslt.append(('postal', _('Postal')))
226+
return rslt
227+
219228
@api.depends('acc_number')
220229
def _compute_acc_type(self):
221230
todo = self.env['res.partner.bank']
@@ -274,7 +283,7 @@ def _update_acc_name(self):
274283
part_name = self.env['res.partner'].browse(partner_id)[0].name
275284
self.acc_number = self._compute_name_ccp(part_name, self.ccp)
276285

277-
@api.multi
286+
@api.model
278287
def _compute_name_ccp(self, partner_name, ccp):
279288
"""This method makes sure to generate a unique name"""
280289
if partner_name and ccp:
@@ -349,7 +358,7 @@ def onchange_acc_number_set_swiss_bank(self):
349358
bank = (
350359
self.env['res.bank'].search([('ccp', '=', ccp)], limit=1) or
351360
bank or
352-
self.env['res.bank'].search([('bic', '=', 'POFICHBEXXX')],
361+
self.env['res.bank'].search([('bic', '=', CH_POST_BIC)],
353362
limit=1))
354363
elif self.acc_type == 'iban':
355364
if not bank:
@@ -369,10 +378,9 @@ def onchange_acc_number_set_swiss_bank(self):
369378

370379
@api.onchange('ccp')
371380
def onchange_ccp_set_acc_number(self):
372-
"""If ccp changes and it's a postal bank update acc_number to ccp
373-
we don't want make acc_number as computed to have possibility set it
374-
manually and also avoid to shadow other logic on acc_number if exist
375-
"""
381+
# If ccp changes and it's a postal bank update acc_number to ccp
382+
# we don't want make acc_number as computed to have possibility set it
383+
# manually and also avoid to shadow other logic on acc_number if exist
376384
if self.acc_type == 'iban':
377385
return
378386

@@ -395,7 +403,7 @@ def onchange_ccp_set_acc_number(self):
395403
if ccp and self.is_swiss_postal_num(ccp) and not self.bank_id.id:
396404
bank = (self.env['res.bank'].search([('ccp', '=', ccp)], limit=1)
397405
or
398-
self.env['res.bank'].search([('bic', '=', 'POFICHBEXXX')],
406+
self.env['res.bank'].search([('bic', '=', CH_POST_BIC)],
399407
limit=1))
400408
if not bank.is_swiss_post():
401409
self._update_acc_name()
@@ -405,7 +413,7 @@ def onchange_ccp_set_acc_number(self):
405413

406414
@api.onchange('bank_id')
407415
def onchange_bank_set_acc_number(self):
408-
""" Track bank change to update acc_name if needed"""
416+
# Track bank change to update acc_name if needed
409417
if not self.bank_id or self.acc_type == 'iban':
410418
return
411419
if self.bank_id.is_swiss_post():
@@ -415,9 +423,7 @@ def onchange_bank_set_acc_number(self):
415423

416424
@api.onchange('partner_id')
417425
def onchange_partner_set_acc_number(self):
418-
"""
419-
when acc_number was computed automatically we call regeneration
420-
as partner name is part of acc_number
421-
"""
426+
# When acc_number was computed automatically we call regeneration
427+
# as partner name is part of acc_number
422428
if self.acc_type == 'bank' and self.ccp:
423429
self._update_acc_name()

l10n_ch_base_bank/models/invoice.py

Lines changed: 18 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
1-
# Copyright 2012 Nicolas Bessi (Camptocamp SA)
2-
# Copyright 2015 Yannick Vaucher (Camptocamp SA)
1+
# Copyright 2012-2019 Camptocamp
32
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
4-
from odoo import models, api, _
3+
from odoo import models, api, fields, _
54
from odoo.tools import mod10r
65
from odoo import exceptions
76

@@ -73,20 +72,15 @@ def onchange_reference(self):
7372
def _check_bank_type_for_type_isr(self):
7473
for invoice in self:
7574
if invoice.reference_type == 'isr':
76-
bank_acc = invoice.partner_bank_id
75+
bank_acc = invoice.partner_banks_to_show()
7776
if not (bank_acc.acc_type == 'postal' or
7877
bank_acc.acc_type != 'postal' and
7978
(bank_acc.ccp or bank_acc.bank_id.ccp)):
80-
if invoice.type in ('in_invoice', 'in_refund'):
81-
raise exceptions.ValidationError(
82-
_('ISR Reference type needs a postal account'
83-
' number on the customer.')
84-
)
85-
else:
86-
raise exceptions.ValidationError(
87-
_('ISR Reference type needs a postal account'
88-
' number on your company')
89-
)
79+
raise exceptions.ValidationError(
80+
_("Bank account shouldn't be empty, for IRS reference "
81+
"type, you can set it manually or set appropriate"
82+
" payment mode.")
83+
)
9084
return True
9185

9286
@api.multi
@@ -121,40 +115,15 @@ def _check_isr(self):
121115
invoice._is_isr_reference()
122116
return True
123117

124-
def write(self, vals):
125-
"""Override to update partner_bank_id before constraints if needed and
126-
to be consistent with create
118+
def partner_banks_to_show(self):
119+
"""
120+
Extend method from account_payment_partner to add specific
121+
logic for switzerland bank payments if base method does not give
122+
a result
127123
"""
128-
if not self.partner_bank_id or not vals.get('partner_bank_id'):
129-
type_defined = vals.get('type') or self.type
130-
if type_defined == 'out_invoice':
131-
banks = self.partner_banks_to_show()
132-
if banks:
133-
vals['partner_bank_id'] = banks[0].id
134-
return super().write(vals)
135-
136-
@api.model
137-
def create(self, vals):
138-
"""We override create in order to have customer invoices
139-
generated by the comercial flow as on change partner is
140-
not systemtically call"""
141-
type_defined = vals.get('type') or self.env.context.get('type', False)
142-
if type_defined == 'out_invoice' and not vals.get('partner_bank_id'):
143-
partner = self.env.user.company_id.partner_id
144-
vals['partner_bank_id'] = self._get_bank_id(
145-
partner, vals.get('journal_id'), vals.get('reference_type'),
146-
)
147-
return super(AccountInvoice, self).create(vals)
148124

149-
def _get_bank_id(self, partner, journal_id, ref_type):
150-
if journal_id:
151-
return self.env['account.journal'].browse(journal_id). \
152-
bank_account_id.id
153-
if ref_type == 'isr':
154-
bank_ids = partner.bank_ids.filtered(
155-
lambda s: s.acc_type == 'postal'
156-
)
157-
else:
158-
bank_ids = partner.bank_ids
159-
if bank_ids:
160-
return bank_ids[0].id
125+
res = super().partner_banks_to_show()
126+
if not res:
127+
if self.journal_id:
128+
return self.journal_id.bank_account_id
129+
return res

l10n_ch_base_bank/tests/test_search_invoice.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ def setUp(self):
1818
bank_account = self.env['res.partner.bank'].create({
1919
'partner_id': self.company.partner_id.id,
2020
'bank_id': bank.id,
21-
'acc_number': 'Bank/CCP 01-1234-1',
21+
'acc_number': '01-1234-1',
2222
})
2323
self.company.partner_id.bank_ids = bank_account
2424
self.partner = self.env['res.partner'].create(
@@ -29,14 +29,15 @@ def setUp(self):
2929
'type': 'bank',
3030
'code': 'BNK42',
3131
'bank_id': bank.id,
32-
'bank_acc_number': '01-1234-1',
32+
'bank_acc_number': '10-8060-7',
3333
})
3434

3535
def assert_find_ref(self, reference, operator, value):
3636
values = {
3737
'partner_id': self.partner.id,
3838
'type': 'out_invoice',
3939
'reference_type': 'isr',
40+
'journal_id': self.bank_journal.id,
4041
'reference': reference,
4142
}
4243
invoice = self.env['account.invoice'].create(values)
@@ -50,8 +51,8 @@ def assert_not_find_ref(self, reference, operator, value):
5051
'partner_id': self.partner.id,
5152
'type': 'out_invoice',
5253
'reference_type': 'isr',
53-
'reference': reference,
5454
'journal_id': self.bank_journal.id,
55+
'reference': reference,
5556
}
5657
self.env['account.invoice'].create(values)
5758
found = self.env['account.invoice'].search(
@@ -116,6 +117,7 @@ def test_search_other_field(self):
116117
'type': 'out_invoice',
117118
'reference_type': 'isr',
118119
'reference': '27 29990 00000 00001 70400 25019',
120+
'journal_id': self.bank_journal.id,
119121
}
120122
invoice = self.env['account.invoice'].create(values)
121123
found = self.env['account.invoice'].search(
@@ -129,6 +131,7 @@ def test_search_unary_operator(self):
129131
'type': 'out_invoice',
130132
'reference_type': 'isr',
131133
'reference': '27 29990 00000 00001 70400 25019',
134+
'journal_id': self.bank_journal.id,
132135
}
133136
invoice = self.env['account.invoice'].create(values)
134137
found = self.env['account.invoice'].search(

0 commit comments

Comments
 (0)