From 5ce358483331f2b2a095d2dbe1c77e9edcc6f6e2 Mon Sep 17 00:00:00 2001
From: momegahed <mome@odoo.com>
Date: Mon, 19 Sep 2022 08:21:46 +0000
Subject: [PATCH] [FIX] l10n_ch: QR-Invoice don't work for LI customers

Issue :
- Liechtenstein adapted the same QR-Invoice as Switzerland.
However, Odoo only allows the issuance of QR-Invoices to
swiss customers

https://www.llb.li/en/private/paying-and-saving/payment-services/qr-bill#:~:text=Standing%20orders%20based%20on%20orange%20payment%20slips%20can%20no%20longer%20be%20processed%20after%2030%20September%202022.%20Therefore%2C%20these%20standing%20orders%20need%20to%20be%20newly%20set%20up%20on%20the%20basis%20of%20QR%20bills.

Fix:
- Allow LI users to be issued QR-Invoices

OPW-2977644

closes odoo/odoo#100470

Related: odoo/enterprise#34168
Signed-off-by: Josse Colpaert <jco@odoo.com>
---
 addons/l10n_ch/__init__.py                      |  4 ++--
 addons/l10n_ch/models/account_bank_statement.py |  2 +-
 addons/l10n_ch/models/account_invoice.py        |  2 +-
 addons/l10n_ch/models/res_bank.py               | 12 ++++++------
 4 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/addons/l10n_ch/__init__.py b/addons/l10n_ch/__init__.py
index 45936de37a47..90db0bcc0568 100644
--- a/addons/l10n_ch/__init__.py
+++ b/addons/l10n_ch/__init__.py
@@ -14,8 +14,8 @@ def load_translations(env):
 def init_settings(env):
     '''If the company is localized in Switzerland, activate the cash rounding by default.
     '''
-    # The cash rounding is activated by default only if the company is localized in Switzerland.
-    for company in env['res.company'].search([('partner_id.country_id.code', '=', "CH")]):
+    # The cash rounding is activated by default only if the company is localized in Switzerland or Liechtenstein.
+    for company in env['res.company'].search([('partner_id.country_id.code', 'in', ["CH", "LI"])]):
         res_config_id = env['res.config.settings'].create({
             'company_id': company.id,
             'group_cash_rounding': True
diff --git a/addons/l10n_ch/models/account_bank_statement.py b/addons/l10n_ch/models/account_bank_statement.py
index 53c144f38935..818c0ed584e0 100644
--- a/addons/l10n_ch/models/account_bank_statement.py
+++ b/addons/l10n_ch/models/account_bank_statement.py
@@ -9,7 +9,7 @@ class AccountBankStatementLine(models.Model):
     _inherit = "account.bank.statement.line"
 
     def _find_or_create_bank_account(self):
-        if self.company_id.country_id.code == 'CH' and _is_l10n_ch_postal(self.account_number):
+        if self.company_id.country_id.code in ('CH', 'LI') and _is_l10n_ch_postal(self.account_number):
             bank_account = self.env['res.partner.bank'].search(
                 [('company_id', '=', self.company_id.id),
                  ('sanitized_acc_number', 'like', self.account_number + '%'),
diff --git a/addons/l10n_ch/models/account_invoice.py b/addons/l10n_ch/models/account_invoice.py
index a1a58cbdbbd1..4a222f97d1a4 100644
--- a/addons/l10n_ch/models/account_invoice.py
+++ b/addons/l10n_ch/models/account_invoice.py
@@ -244,7 +244,7 @@ class AccountMove(models.Model):
     @api.depends('move_type', 'partner_bank_id', 'payment_reference')
     def _compute_l10n_ch_isr_needs_fixing(self):
         for inv in self:
-            if inv.move_type == 'in_invoice' and inv.company_id.country_id.code == "CH":
+            if inv.move_type == 'in_invoice' and inv.company_id.country_id.code in ('CH', 'LI'):
                 partner_bank = inv.partner_bank_id
                 if partner_bank:
                     needs_isr_ref = partner_bank._is_qr_iban() or partner_bank._is_isr_issuer()
diff --git a/addons/l10n_ch/models/res_bank.py b/addons/l10n_ch/models/res_bank.py
index d535aa5ccdc2..e8774c956679 100644
--- a/addons/l10n_ch/models/res_bank.py
+++ b/addons/l10n_ch/models/res_bank.py
@@ -89,11 +89,11 @@ class ResPartnerBank(models.Model):
     def _compute_l10n_ch_show_subscription(self):
         for bank in self:
             if bank.partner_id:
-                bank.l10n_ch_show_subscription = bank.partner_id.ref_company_ids.country_id.code =='CH'
+                bank.l10n_ch_show_subscription = bank.partner_id.ref_company_ids.country_id.code in ('CH', 'LI')
             elif bank.company_id:
-                bank.l10n_ch_show_subscription = bank.company_id.country_id.code == 'CH'
+                bank.l10n_ch_show_subscription = bank.company_id.country_id.code in ('CH', 'LI')
             else:
-                bank.l10n_ch_show_subscription = self.env.company.country_id.code == 'CH'
+                bank.l10n_ch_show_subscription = self.env.company.country_id.code in ('CH', 'LI')
 
     @api.depends('acc_number', 'acc_type')
     def _compute_sanitized_acc_number(self):
@@ -146,7 +146,7 @@ class ResPartnerBank(models.Model):
         CHXX 0900 0XXX XXXX XXXX K
         Where 09000 is the clearing number
         """
-        return iban.startswith('CH') and iban[4:9] == CLEARING
+        return iban.startswith(('CH', 'LI')) and iban[4:9] == CLEARING
 
     @api.model
     def _pretty_postal_num(self, number):
@@ -278,7 +278,7 @@ class ResPartnerBank(models.Model):
         """
         self.ensure_one()
 
-        return self.sanitized_acc_number.startswith('CH')\
+        return self.sanitized_acc_number.startswith(('CH', 'LI'))\
                and self.acc_type == 'iban'\
                and self._check_qr_iban_range(self.sanitized_acc_number)
 
@@ -308,7 +308,7 @@ class ResPartnerBank(models.Model):
 
             return self.acc_type == 'iban' and \
                    self.partner_id.country_id.code == 'CH' and \
-                   (not debtor_partner or debtor_partner.country_id.code == 'CH') \
+                   (not debtor_partner or debtor_partner.country_id.code in ('CH', 'LI')) \
                    and currency.name in ('EUR', 'CHF')
 
         return super()._eligible_for_qr_code(qr_method, debtor_partner, currency)
-- 
GitLab