78 lines
3.0 KiB
Python
78 lines
3.0 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
import logging
|
|
|
|
from odoo.addons.account.tests.common import AccountTestInvoicingCommon
|
|
from odoo.exceptions import UserError
|
|
from odoo.tests import tagged
|
|
|
|
_logger = logging.getLogger(__name__)
|
|
|
|
@tagged('post_install_l10n', 'post_install', '-at_install')
|
|
class QRPrintTest(AccountTestInvoicingCommon):
|
|
|
|
@classmethod
|
|
@AccountTestInvoicingCommon.setup_country('ch')
|
|
def setUpClass(cls):
|
|
super().setUpClass()
|
|
# the partner must be located in Switzerland.
|
|
cls.partner = cls.env['res.partner'].create({
|
|
'name': 'Bobby',
|
|
'country_id': cls.env.ref('base.ch').id,
|
|
})
|
|
# The bank account must be QR-compatible
|
|
cls.qr_bank_account = cls.env['res.partner.bank'].create({
|
|
'acc_number': "CH4431999123000889012",
|
|
'partner_id': cls.env.company.partner_id.id,
|
|
})
|
|
cls.correct_invoice_chf = cls.env['account.move'].create({
|
|
'move_type': 'out_invoice',
|
|
'partner_id': cls.partner.id,
|
|
'partner_bank_id': cls.qr_bank_account.id,
|
|
'currency_id': cls.env.ref('base.CHF').id,
|
|
'invoice_date': '2019-01-01',
|
|
'invoice_line_ids': [(0, 0, {'product_id': cls.product_a.id})],
|
|
})
|
|
|
|
cls.correct_invoice_eur = cls.env['account.move'].create({
|
|
'move_type': 'out_invoice',
|
|
'partner_id': cls.partner.id,
|
|
'partner_bank_id': cls.qr_bank_account.id,
|
|
'currency_id': cls.env.ref('base.EUR').id,
|
|
'invoice_date': '2019-01-01',
|
|
'invoice_line_ids': [(0, 0, {'product_id': cls.product_a.id})],
|
|
})
|
|
|
|
cls.wrong_partner_invoice = cls.env['account.move'].create({
|
|
'move_type': 'out_invoice',
|
|
'partner_id': cls.partner_a.id,
|
|
'partner_bank_id': cls.qr_bank_account.id,
|
|
'currency_id': cls.env.ref('base.EUR').id,
|
|
'invoice_date': '2019-01-01',
|
|
'invoice_line_ids': [(0, 0, {'product_id': cls.product_a.id})],
|
|
})
|
|
|
|
def print_qr_bill(self, invoice):
|
|
try:
|
|
invoice.action_invoice_sent()
|
|
return True
|
|
except UserError as e:
|
|
_logger.warning(str(e))
|
|
return False
|
|
|
|
def test_print_qr(self):
|
|
self.correct_invoice_chf.action_post()
|
|
self.assertTrue(self.print_qr_bill(self.correct_invoice_chf))
|
|
|
|
#The QR can also be printed if the currency is EUR
|
|
self.env.ref('base.EUR').active = True
|
|
self.correct_invoice_eur.action_post()
|
|
self.assertTrue(self.print_qr_bill(self.correct_invoice_eur))
|
|
|
|
#A normal invoice will be printed if the partner is not from Switzerland
|
|
self.wrong_partner_invoice.action_post()
|
|
self.assertTrue(self.print_qr_bill(self.wrong_partner_invoice))
|
|
|
|
#However, a qr bill can't be printed with those infos
|
|
self.assertFalse(self.wrong_partner_invoice.l10n_ch_is_qr_valid)
|