flectra/addons/l10n_ch/tests/test_l10n_ch_isr.py
2018-01-16 02:34:37 -08:00

110 lines
5.0 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo, Flectra. See LICENSE file for full copyright and licensing details.
import time
from flectra.addons.account.tests.account_test_classes import AccountingTestCase
from flectra.exceptions import ValidationError
class ISRTest(AccountingTestCase):
def create_invoice(self, currency_to_use='base.CHF'):
""" Generates a test invoice """
account_receivable = self.env['account.account'].search([('user_type_id', '=', self.env.ref('account.data_account_type_receivable').id)], limit=1)
currency = self.env.ref(currency_to_use)
partner_agrolait = self.env.ref("base.res_partner_2")
product = self.env.ref("product.product_product_4")
account_revenue = self.env['account.account'].search([('user_type_id', '=', self.env.ref('account.data_account_type_revenue').id)], limit=1)
invoice = self.env['account.invoice'].create({
'partner_id': partner_agrolait.id,
'reference_type': 'none',
'currency_id': currency.id,
'name': 'invoice to client',
'account_id': account_receivable.id,
'type': 'out_invoice',
'date_invoice': time.strftime('%Y') + '-12-22',
})
self.env['account.invoice.line'].create({
'product_id': product.id,
'quantity': 1,
'price_unit': 42,
'invoice_id': invoice.id,
'name': 'something',
'account_id': account_revenue.id,
})
invoice.action_invoice_open()
return invoice
def create_account(self, number):
""" Generates a test res.partner.bank. """
return self.env['res.partner.bank'].create({
'acc_number': number
})
def print_isr(self, invoice):
try:
invoice.isr_print()
return True
except ValidationError:
return False
def isr_not_generated(self, invoice):
""" Prints the given invoice and tests that no ISR generation is triggered. """
self.assertFalse(self.print_isr(invoice), 'No ISR should be generated for this invoice')
def isr_generated(self, invoice):
""" Prints the given invoice and tests that an ISR generation is triggered. """
self.assertTrue(self.print_isr(invoice), 'An ISR should have been generated')
def test_l10n_ch_postals(self):
#An account whose number is set to a valid postal number becomes a 'postal'
#account and sets its postal reference field.
account_test_postal_ok = self.create_account('010391391')
self.assertEqual(account_test_postal_ok.acc_type, 'postal', "A valid postal number in acc_number should set its type to 'postal'")
self.assertEqual(account_test_postal_ok.l10n_ch_postal, '010391391', "A postal account should have a postal reference identical to its account number")
#An account whose number is set to a non-postal value should not get the
#'postal' type
account_test_postal_wrong = self.create_account('010391394')
self.assertNotEqual(account_test_postal_wrong.acc_type, 'postal', "A non-postal account cannot be of type 'postal'")
#A swiss IBAN account contains a postal reference
account_test_iban_ok = self.create_account('CH6309000000250097798')
self.assertEqual(account_test_iban_ok.acc_type, 'iban', "The IBAN must be valid")
self.assertEqual(account_test_iban_ok.l10n_ch_postal, '000250097798', "A valid swiss IBAN should set the postal reference")
#A non-swiss IBAN must not allow the computation of a postal reference
account_test_iban_wrong = self.create_account('GR1601101250000000012300695')
self.assertEqual(account_test_iban_wrong.acc_type, 'iban', "The IBAN must be valid")
self.assertFalse(account_test_iban_wrong.l10n_ch_postal, "A valid swiss IBAN should set the postal reference")
def test_isr(self):
#Let us test the generation of an ISR for an invoice, first by showing an
#ISR report is only generated when Flectra has all the data it needs.
invoice_1 = self.create_invoice('base.CHF')
self.isr_not_generated(invoice_1)
#Now we add an account for payment to our invoice, but still cannot generate the ISR
test_account = self.create_account('250097798')
invoice_1.partner_bank_id = test_account
self.isr_not_generated(invoice_1)
#Finally, we add bank coordinates to our account. The ISR should now be available to generate
test_bank = self.env['res.bank'].create({
'name':'Money Drop',
'l10n_ch_postal_chf':'010391391'
})
test_account.bank_id = test_bank
self.isr_generated(invoice_1)
#Now, let us show that, with the same data, an invoice in euros does not generate any ISR (because the bank does not have any EUR postal reference)
invoice_2 = self.create_invoice('base.EUR')
invoice_2.partner_bank_id = test_account
self.isr_not_generated(invoice_2)