base_iban/base_iban.py : extracted IBAN check functionnality in a dedicated function...
authorAlexis de Lattre <alexis@via.ecp.fr>
Fri, 27 Jan 2012 18:49:31 +0000 (19:49 +0100)
committerAlexis de Lattre <alexis@via.ecp.fr>
Fri, 27 Jan 2012 18:49:31 +0000 (19:49 +0100)
l10n_fr_rib :
- add dependancy on base_iban
- we now have a single res.partner.bank.type with required RIB and optional IBAN
- adapted code and translations accordingly
- 'acc_number' field should not trigger _check_key function ; it already triggers the check_iban function.

bzr revid: alexis@via.ecp.fr-20120127184931-wudv91s96znzwjae

addons/base_iban/base_iban.py
addons/l10n_fr_rib/__openerp__.py
addons/l10n_fr_rib/bank.py
addons/l10n_fr_rib/bank_data.xml
addons/l10n_fr_rib/i18n/fr.po
addons/l10n_fr_rib/i18n/l10n_fr_rib.pot

index 3dac701..d99d07f 100644 (file)
@@ -95,27 +95,36 @@ class res_partner_bank(osv.osv):
             vals['acc_number'] = _pretty_iban(vals['acc_number'])
         return super(res_partner_bank, self).write(cr, uid, ids, vals, context)
 
+    def is_iban_valid(self, cr, uid, iban, context=None):
+        """Check if IBAN is valid or not
+        @param iban: IBAN as string
+        @return: True if IBAN is valid, False if IBAN is not valid
+        """
+        iban = _format_iban(iban).lower()
+        if iban[:2] in _iban_len and len(iban) != _iban_len[iban[:2]]:
+            return False
+        #the four first digits have to be shifted to the end
+        iban = iban[4:] + iban[:4]
+        #letters have to be transformed into numbers (a = 10, b = 11, ...)
+        iban2 = ""
+        for char in iban:
+            if char.isalpha():
+                iban2 += str(ord(char)-87)
+            else:
+                iban2 += char
+        #iban is correct if modulo 97 == 1
+        if not int(iban2) % 97 == 1:
+            return False
+        return True
+
     def check_iban(self, cr, uid, ids, context=None):
         '''
         Check the IBAN number
         '''
         for bank_acc in self.browse(cr, uid, ids, context=context):
-            if bank_acc.state not in ('iban', 'iban-rib'):
+            if bank_acc.state<>'iban':
                 continue
-            iban = _format_iban(bank_acc.acc_number).lower()
-            if iban[:2] in _iban_len and len(iban) != _iban_len[iban[:2]]:
-                return False
-            #the four first digits have to be shifted to the end
-            iban = iban[4:] + iban[:4]
-            #letters have to be transformed into numbers (a = 10, b = 11, ...)
-            iban2 = ""
-            for char in iban:
-                if char.isalpha():
-                    iban2 += str(ord(char)-87)
-                else:
-                    iban2 += char
-            #iban is correct if modulo 97 == 1
-            if not int(iban2) % 97 == 1:
+            if not self.is_iban_valid(cr, uid, bank_acc.acc_number, context=context):
                 return False
         return True
 
index 072f8f5..def01f6 100644 (file)
@@ -38,7 +38,7 @@ The module base_iban can be a useful addition to this module, because French ban
 The RIB and IBAN codes for a single account can be entered by recording two Bank Accounts in OpenERP: the first with the type "RIB", the second with the type "IBAN". 
 ''',
     'author' : u'Numérigraphe SARL',
-    'depends': ['base', 'account'],
+    'depends': ['account', 'base_iban'],
     'init_xml': ['bank_data.xml', ],
     'update_xml': ['bank_view.xml', ],
     'installable': True,
index 39d35a8..b6ae2a0 100644 (file)
@@ -31,7 +31,7 @@ class res_partner_bank(osv.osv):
         """Check the RIB key"""
         for bank_acc in self.browse(cr, uid, ids):
             # Ignore the accounts of type other than rib
-            if bank_acc.state not in ('rib', 'iban-rib'):
+            if bank_acc.state <> 'rib':
                 continue
             # Fail if the needed values are empty of too short 
             if (not bank_acc.bank_code
@@ -56,8 +56,8 @@ class res_partner_bank(osv.osv):
                             "codes: %s %s %s.") %
                             (bank_acc.key, bank_acc.bank_code,
                             bank_acc.office, bank_acc.rib_acc_number) )
-            if bank_acc.state == 'iban-rib':
-                if not self.check_iban(cr, uid, [bank_acc.id]):
+            if bank_acc.acc_number:
+                if not self.is_iban_valid(cr, uid, bank_acc.acc_number):
                     raise osv.except_osv(_('Error'),
                         _("The IBAN %s is not valid.") % bank_acc.acc_number)
         return True
@@ -84,7 +84,7 @@ class res_partner_bank(osv.osv):
     }
 
     _constraints = [(_check_key, 'Error message in raise',
-        ['acc_number', 'rib_acc_number', 'bank_code', 'office', 'key'])]
+         ['rib_acc_number', 'bank_code', 'office', 'key'])]
 
 res_partner_bank()
 
index bd01ed5..121cc21 100644 (file)
@@ -6,7 +6,7 @@
                RIB bank details
                -->
         <record id="bank_rib" model="res.partner.bank.type">
-            <field name="name">RIB Bank Details</field>
+            <field name="name">RIB and optional IBAN</field>
             <field name="code">rib</field>
         </record>
 
@@ -42,7 +42,7 @@
             <field name="name">acc_number</field>
             <field name="bank_type_id" ref="bank_rib"/>
             <field eval="False" name="required"/>
-            <field eval="True" name="readonly"/>
+            <field eval="False" name="readonly"/>
         </record>
         <record id="rib_bic_field" model="res.partner.bank.type.field">
             <field name="name">bank_bic</field>
             <field name="required" eval="False"/>
         </record>
 
-        <!-- IBAN and RIB -->
-        <record id="bank_iban_rib" model="res.partner.bank.type">
-            <field name="name">IBAN and RIB</field>
-            <field name="code">iban-rib</field>
-        </record>
-
-        <record id="iban_rib_bank_code_field" model="res.partner.bank.type.field">
-            <field name="name">bank_code</field>
-            <field name="bank_type_id" ref="bank_iban_rib"/>
-            <field eval="True" name="required"/>
-            <field eval="False" name="readonly"/>
-            <field name="size">5</field>
-        </record>
-        <record id="iban_rib_office_field" model="res.partner.bank.type.field">
-            <field name="name">office</field>
-            <field name="bank_type_id" ref="bank_iban_rib"/>
-            <field eval="True" name="required"/>
-            <field eval="False" name="readonly"/>
-            <field name="size">5</field>
-        </record>
-        <record id="iban_rib_rib_acc_number_field" model="res.partner.bank.type.field">
-            <field name="name">rib_acc_number</field>
-            <field name="bank_type_id" ref="bank_iban_rib"/>
-            <field eval="True" name="required"/>
-            <field eval="False" name="readonly"/>
-            <field name="size">11</field>
-        </record>
-        <record id="iban_rib_key_field" model="res.partner.bank.type.field">
-            <field name="name">key</field>
-            <field name="bank_type_id" ref="bank_iban_rib"/>
-            <field eval="True" name="required"/>
-            <field eval="False" name="readonly"/>
-            <field name="size">2</field>
-        </record>
-        <record id="iban_rib_acc_number_field" model="res.partner.bank.type.field">
-            <field name="name">acc_number</field>
-            <field name="bank_type_id" ref="bank_iban_rib"/>
-            <field eval="True" name="required"/>
-            <field eval="False" name="readonly"/>
-        </record>
-        <record id="iban_rib_bic_field" model="res.partner.bank.type.field">
-            <field name="name">bank_bic</field>
-            <field name="bank_type_id" ref="bank_iban_rib"/>
-            <field name="required" eval="0"/>
-        </record>
-
-
     </data>
 </openerp>
index 324c3f2..e648801 100644 (file)
@@ -6,8 +6,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: OpenERP Server 6.1rc1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-01-27 14:22+0000\n"
-"PO-Revision-Date: 2012-01-27 14:22+0000\n"
+"POT-Creation-Date: 2012-01-27 18:47+0000\n"
+"PO-Revision-Date: 2012-01-27 18:47+0000\n"
 "Last-Translator: <>\n"
 "Language-Team: \n"
 "MIME-Version: 1.0\n"
@@ -16,25 +16,16 @@ msgstr ""
 "Plural-Forms: \n"
 
 #. module: l10n_fr_rib
-#: model:res.partner.bank.type.field,name:l10n_fr_rib.iban_rib_office_field
-#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_office_field
-msgid "office"
-msgstr "Agence"
-
-#. module: l10n_fr_rib
-#: field:res.partner.bank,office:0
-msgid "Office Code"
-msgstr "Code agence"
+#: constraint:res.partner.bank:0
+msgid "\n"
+"Please define BIC/Swift code on bank for bank type IBAN Account to make valid payments"
+msgstr "\n"
+"Please define BIC/Swift code on bank for bank type IBAN Account to make valid payments"
 
 #. module: l10n_fr_rib
 #: model:res.partner.bank.type,name:l10n_fr_rib.bank_rib
-msgid "RIB Bank Details"
-msgstr "Relevé d'identité bancaire (RIB)"
-
-#. module: l10n_fr_rib
-#: help:res.partner.bank,key:0
-msgid "The key is a number allowing to check the correctness of the other codes."
-msgstr "La clé est un nombre permettant de vérifier que les autres codes sont corrects."
+msgid "RIB and optional IBAN"
+msgstr "RIB et IBAN optionnel"
 
 #. module: l10n_fr_rib
 #: field:res.partner.bank,rib_acc_number:0
@@ -42,9 +33,25 @@ msgid "RIB account number"
 msgstr "Numéro de compte RIB"
 
 #. module: l10n_fr_rib
-#: model:res.partner.bank.type,name:l10n_fr_rib.bank_iban_rib
-msgid "IBAN and RIB"
-msgstr "IBAN et RIB"
+#: field:res.partner.bank,bank_code:0
+msgid "Bank Code"
+msgstr "Code banque"
+
+#. module: l10n_fr_rib
+#: code:addons/l10n_fr_rib/bank.py:55
+#, python-format
+msgid "The RIB key %s does not correspond to the other codes: %s %s %s."
+msgstr "La clé RIB %s ne correspond pas aux autres codes : %s %s %s."
+
+#. module: l10n_fr_rib
+#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_office_field
+msgid "office"
+msgstr "Agence"
+
+#. module: l10n_fr_rib
+#: field:res.bank,rib_code:0
+msgid "RIB Bank Code"
+msgstr "Code banque RIB"
 
 #. module: l10n_fr_rib
 #: code:addons/l10n_fr_rib/bank.py:62
@@ -53,40 +60,34 @@ msgid "The IBAN %s is not valid."
 msgstr "L'IBAN %s n'est pas valide."
 
 #. module: l10n_fr_rib
-#: field:res.partner.bank,key:0
-msgid "Key"
-msgstr "Clé"
+#: model:ir.model,name:l10n_fr_rib.model_res_partner_bank
+msgid "Bank Accounts"
+msgstr "Comptes bancaires"
 
 #. module: l10n_fr_rib
-#: model:ir.model,name:l10n_fr_rib.model_res_bank
-msgid "Bank"
-msgstr "Banque"
+#: field:res.partner.bank,office:0
+msgid "Office Code"
+msgstr "Code agence"
 
 #. module: l10n_fr_rib
-#: constraint:res.partner.bank:0
-msgid "\n"
-"Please define BIC/Swift code on bank for bank type IBAN Account to make valid payments"
-msgstr "\n"
-"Please define BIC/Swift code on bank for bank type IBAN Account to make valid payments"
+#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_rib_acc_number_field
+msgid "rib_acc_number"
+msgstr "rib_acc_number"
 
 #. module: l10n_fr_rib
-#: model:res.partner.bank.type.field,name:l10n_fr_rib.iban_rib_bank_code_field
 #: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_bank_code_field
 msgid "bank_code"
 msgstr "bank_code"
 
 #. module: l10n_fr_rib
-#: model:res.partner.bank.type.field,name:l10n_fr_rib.iban_rib_key_field
 #: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_key_field
 msgid "key"
 msgstr "key"
 
 #. module: l10n_fr_rib
-#: code:addons/l10n_fr_rib/bank.py:54
-#: code:addons/l10n_fr_rib/bank.py:61
-#, python-format
-msgid "Error"
-msgstr "Error"
+#: help:res.partner.bank,key:0
+msgid "The key is a number allowing to check the correctness of the other codes."
+msgstr "La clé est un nombre permettant de vérifier que les autres codes sont corrects."
 
 #. module: l10n_fr_rib
 #: constraint:res.partner.bank:0
@@ -94,47 +95,34 @@ msgid "Error message in raise"
 msgstr "Error message in raise"
 
 #. module: l10n_fr_rib
-#: model:res.partner.bank.type.field,name:l10n_fr_rib.iban_rib_acc_number_field
-#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_acc_number_field
-msgid "acc_number"
-msgstr "acc_number"
+#: field:res.partner.bank,key:0
+msgid "Key"
+msgstr "Clé"
 
 #. module: l10n_fr_rib
-#: field:res.partner.bank,bank_code:0
-msgid "Bank Code"
-msgstr "Code banque"
+#: code:addons/l10n_fr_rib/bank.py:54
+#: code:addons/l10n_fr_rib/bank.py:61
+#, python-format
+msgid "Error"
+msgstr "Error"
 
 #. module: l10n_fr_rib
-#: model:res.partner.bank.type.field,name:l10n_fr_rib.iban_rib_bic_field
 #: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_bic_field
 msgid "bank_bic"
 msgstr "bank_bic"
 
 #. module: l10n_fr_rib
-#: field:res.bank,rib_code:0
-msgid "RIB Bank Code"
-msgstr "Code banque RIB"
-
-#. module: l10n_fr_rib
-#: model:ir.model,name:l10n_fr_rib.model_res_partner_bank
-msgid "Bank Accounts"
-msgstr "Comptes bancaires"
-
-#. module: l10n_fr_rib
-#: code:addons/l10n_fr_rib/bank.py:55
-#, python-format
-msgid "The RIB key %s does not correspond to the other codes: %s %s %s."
-msgstr "La clé RIB %s ne correspond pas aux autres codes : %s %s %s."
+#: model:res.partner.bank.type,format_layout:l10n_fr_rib.bank_rib
+msgid "%(bank_name)s: %(acc_number)s"
+msgstr "%(bank_name)s: %(acc_number)s"
 
 #. module: l10n_fr_rib
-#: model:res.partner.bank.type.field,name:l10n_fr_rib.iban_rib_rib_acc_number_field
-#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_rib_acc_number_field
-msgid "rib_acc_number"
-msgstr "rib_acc_number"
+#: model:ir.model,name:l10n_fr_rib.model_res_bank
+msgid "Bank"
+msgstr "Banque"
 
 #. module: l10n_fr_rib
-#: model:res.partner.bank.type,format_layout:l10n_fr_rib.bank_iban_rib
-#: model:res.partner.bank.type,format_layout:l10n_fr_rib.bank_rib
-msgid "%(bank_name)s: %(acc_number)s"
-msgstr "%(bank_name)s: %(acc_number)s"
+#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_acc_number_field
+msgid "acc_number"
+msgstr "acc_number"
 
index c2f6adb..bca587c 100644 (file)
@@ -6,8 +6,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: OpenERP Server 6.1rc1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-01-27 14:22+0000\n"
-"PO-Revision-Date: 2012-01-27 14:22+0000\n"
+"POT-Creation-Date: 2012-01-27 18:47+0000\n"
+"PO-Revision-Date: 2012-01-27 18:47+0000\n"
 "Last-Translator: <>\n"
 "Language-Team: \n"
 "MIME-Version: 1.0\n"
@@ -16,34 +16,40 @@ msgstr ""
 "Plural-Forms: \n"
 
 #. module: l10n_fr_rib
-#: model:res.partner.bank.type.field,name:l10n_fr_rib.iban_rib_office_field
-#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_office_field
-msgid "office"
+#: constraint:res.partner.bank:0
+msgid "\n"
+"Please define BIC/Swift code on bank for bank type IBAN Account to make valid payments"
 msgstr ""
 
 #. module: l10n_fr_rib
-#: field:res.partner.bank,office:0
-msgid "Office Code"
+#: model:res.partner.bank.type,name:l10n_fr_rib.bank_rib
+msgid "RIB and optional IBAN"
 msgstr ""
 
 #. module: l10n_fr_rib
-#: model:res.partner.bank.type,name:l10n_fr_rib.bank_rib
-msgid "RIB Bank Details"
+#: field:res.partner.bank,rib_acc_number:0
+msgid "RIB account number"
 msgstr ""
 
 #. module: l10n_fr_rib
-#: help:res.partner.bank,key:0
-msgid "The key is a number allowing to check the correctness of the other codes."
+#: field:res.partner.bank,bank_code:0
+msgid "Bank Code"
 msgstr ""
 
 #. module: l10n_fr_rib
-#: field:res.partner.bank,rib_acc_number:0
-msgid "RIB account number"
+#: code:addons/l10n_fr_rib/bank.py:55
+#, python-format
+msgid "The RIB key %s does not correspond to the other codes: %s %s %s."
 msgstr ""
 
 #. module: l10n_fr_rib
-#: model:res.partner.bank.type,name:l10n_fr_rib.bank_iban_rib
-msgid "IBAN and RIB"
+#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_office_field
+msgid "office"
+msgstr ""
+
+#. module: l10n_fr_rib
+#: field:res.bank,rib_code:0
+msgid "RIB Bank Code"
 msgstr ""
 
 #. module: l10n_fr_rib
@@ -53,38 +59,33 @@ msgid "The IBAN %s is not valid."
 msgstr ""
 
 #. module: l10n_fr_rib
-#: field:res.partner.bank,key:0
-msgid "Key"
+#: model:ir.model,name:l10n_fr_rib.model_res_partner_bank
+msgid "Bank Accounts"
 msgstr ""
 
 #. module: l10n_fr_rib
-#: model:ir.model,name:l10n_fr_rib.model_res_bank
-msgid "Bank"
+#: field:res.partner.bank,office:0
+msgid "Office Code"
 msgstr ""
 
 #. module: l10n_fr_rib
-#: constraint:res.partner.bank:0
-msgid "\n"
-"Please define BIC/Swift code on bank for bank type IBAN Account to make valid payments"
+#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_rib_acc_number_field
+msgid "rib_acc_number"
 msgstr ""
 
 #. module: l10n_fr_rib
-#: model:res.partner.bank.type.field,name:l10n_fr_rib.iban_rib_bank_code_field
 #: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_bank_code_field
 msgid "bank_code"
 msgstr ""
 
 #. module: l10n_fr_rib
-#: model:res.partner.bank.type.field,name:l10n_fr_rib.iban_rib_key_field
 #: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_key_field
 msgid "key"
 msgstr ""
 
 #. module: l10n_fr_rib
-#: code:addons/l10n_fr_rib/bank.py:54
-#: code:addons/l10n_fr_rib/bank.py:61
-#, python-format
-msgid "Error"
+#: help:res.partner.bank,key:0
+msgid "The key is a number allowing to check the correctness of the other codes."
 msgstr ""
 
 #. module: l10n_fr_rib
@@ -93,47 +94,34 @@ msgid "Error message in raise"
 msgstr ""
 
 #. module: l10n_fr_rib
-#: model:res.partner.bank.type.field,name:l10n_fr_rib.iban_rib_acc_number_field
-#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_acc_number_field
-msgid "acc_number"
+#: field:res.partner.bank,key:0
+msgid "Key"
 msgstr ""
 
 #. module: l10n_fr_rib
-#: field:res.partner.bank,bank_code:0
-msgid "Bank Code"
+#: code:addons/l10n_fr_rib/bank.py:54
+#: code:addons/l10n_fr_rib/bank.py:61
+#, python-format
+msgid "Error"
 msgstr ""
 
 #. module: l10n_fr_rib
-#: model:res.partner.bank.type.field,name:l10n_fr_rib.iban_rib_bic_field
 #: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_bic_field
 msgid "bank_bic"
 msgstr ""
 
 #. module: l10n_fr_rib
-#: field:res.bank,rib_code:0
-msgid "RIB Bank Code"
-msgstr ""
-
-#. module: l10n_fr_rib
-#: model:ir.model,name:l10n_fr_rib.model_res_partner_bank
-msgid "Bank Accounts"
-msgstr ""
-
-#. module: l10n_fr_rib
-#: code:addons/l10n_fr_rib/bank.py:55
-#, python-format
-msgid "The RIB key %s does not correspond to the other codes: %s %s %s."
+#: model:res.partner.bank.type,format_layout:l10n_fr_rib.bank_rib
+msgid "%(bank_name)s: %(acc_number)s"
 msgstr ""
 
 #. module: l10n_fr_rib
-#: model:res.partner.bank.type.field,name:l10n_fr_rib.iban_rib_rib_acc_number_field
-#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_rib_acc_number_field
-msgid "rib_acc_number"
+#: model:ir.model,name:l10n_fr_rib.model_res_bank
+msgid "Bank"
 msgstr ""
 
 #. module: l10n_fr_rib
-#: model:res.partner.bank.type,format_layout:l10n_fr_rib.bank_iban_rib
-#: model:res.partner.bank.type,format_layout:l10n_fr_rib.bank_rib
-msgid "%(bank_name)s: %(acc_number)s"
+#: model:res.partner.bank.type.field,name:l10n_fr_rib.rib_acc_number_field
+msgid "acc_number"
 msgstr ""