From 1ad15d681d4a827776304d81f1e4a50e7c450309 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Tue, 3 Aug 2004 19:52:57 +0000 Subject: [PATCH] =?UTF-8?q?New:=20Ajout=20du=20controle=20de=20la=20cl=E9?= =?UTF-8?q?=20RIB=20lors=20de=20la=20saisie=20d'un=20compte=20bancaire.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- htdocs/compta/bank/account.class.php | 31 ++++++++++++++++-- htdocs/compta/bank/bank.lib.php | 48 +++++++++++++++++++++++----- htdocs/compta/bank/config.php | 5 +-- htdocs/compta/bank/fiche.php | 42 +++++++++++++++--------- 4 files changed, 98 insertions(+), 28 deletions(-) diff --git a/htdocs/compta/bank/account.class.php b/htdocs/compta/bank/account.class.php index cff4590e18f..470d003ce4f 100644 --- a/htdocs/compta/bank/account.class.php +++ b/htdocs/compta/bank/account.class.php @@ -174,13 +174,28 @@ class Account } } } + /* - * + * Creation du compte bancaire * */ Function create() { - $sql = "INSERT INTO ".MAIN_DB_PREFIX."bank_account (datec, label) values (now(),'$this->label');"; + // Chargement librairie pour acces fonction controle RIB + require_once DOL_DOCUMENT_ROOT . '/compta/bank/bank.lib.php'; + + if (! verif_rib($this->code_banque,$this->code_guichet,$this->number,$this->cle_rib)) { + $this->error="Le contrôle de la clé indique que les informations de votre compte bancaire sont incorrectes."; + return false; + } + + if (! $pcgnumber) { + // TODO + // Prendre comme de numero compte comptable pour le compte bancaire, le numero par defaut pour plan de compte actif + $pcgnumber="51"; + } + + $sql = "INSERT INTO ".MAIN_DB_PREFIX."bank_account (datec, label, account_number) values (now(),'$this->label','$pcgnumber');"; if ($this->db->query($sql)) { if ($this->db->affected_rows()) @@ -201,6 +216,16 @@ class Account print $this->db->error(); } } + + /* + * + * + */ + Function error() + { + return $this->error; + } + /* * * @@ -281,7 +306,7 @@ class Account } else { - print $this->db->error(); + print $this->db->error(); } } /* diff --git a/htdocs/compta/bank/bank.lib.php b/htdocs/compta/bank/bank.lib.php index 888298287ff..a6f3400dac0 100644 --- a/htdocs/compta/bank/bank.lib.php +++ b/htdocs/compta/bank/bank.lib.php @@ -1,6 +1,7 @@ - * Copyright (C) 2003 Jean-Louis Bergamo + * Copyright (C) 2003 Jean-Louis Bergamo + * Copyright (C) 2004 Laurent Destailleur * * $Id$ * $Source$ @@ -21,13 +22,44 @@ * or see http://www.gnu.org/ */ -Function bank_delete_line($db, $rowid) { - $sql = "DELETE FROM ".MAIN_DB_PREFIX."bank WHERE rowid=$rowid"; - $result = $db->query($sql); - if ($result) { - $sql = "DELETE FROM ".MAIN_DB_PREFIX."bank_class WHERE lineid=$rowid"; - $result = $db->query($sql); - } +/*! \file bank.lib.php + \brief librairie contenant les fonctions bancaires. + \author Laurent Destailleur + \version $Revision$ + + Ensemble des fonctions en rappor avec les modules bancaires +*/ + + + +/*! + \brief Verifie le RIB d'un compte bancaire grace à sa clé + \param code banque + \param code_guichet + \param numero_compte + \param cle + \return true si les infos sont bonnes, false si la clé ne correspond pas +*/ + +function verif_rib($code_banque , $code_guichet , $num_compte , $cle) { + $coef = array(62, 34, 3) ; + // Concatenation des differents codes. + $rib = strtolower($code_banque.$code_guichet.$num_compte.$cle); + // On remplca les eventuelles lettres par des chiffres. + $rib = strtr($rib, "abcdefghijklmnopqrstuvwxyz","12345678912345678912345678"); + + // Separation du rib en 3 groupes de 7 + 1 groupe de 2. + // Multiplication de chaque groupe par les coef du tableau + for ($i=0, $s=0; $i<3; $i++) { + $code = substr($rib, 7 * $i, 7) ; + $s += (0 + $code) * $coef[$i] ; + } + + // Soustraction du modulo 97 de $s à 97 pour obtenir la clé RIB + $cle_rib = 97 - ($s % 97) ; + if ($cle_rib == $cle) { return true; } + return false; } + ?> diff --git a/htdocs/compta/bank/config.php b/htdocs/compta/bank/config.php index b93467df448..336f5eb50f0 100644 --- a/htdocs/compta/bank/config.php +++ b/htdocs/compta/bank/config.php @@ -43,6 +43,7 @@ print "\n"; $sql = "SELECT rowid, label,number,bank,clos from ".MAIN_DB_PREFIX."bank_account"; $result = $db->query($sql); +$var=false; if ($result) { $var=True; @@ -54,8 +55,8 @@ if ($result) while ($i < $num) { $objp = $db->fetch_object( $i); - print "$objp->rowidrowid\">$objp->label$objp->bank $objp->number ".$yn[$objp->clos].""; - + $var=!$var; + print "$objp->rowidrowid\">$objp->label$objp->bank $objp->number ".$yn[$objp->clos].""; $i++; } diff --git a/htdocs/compta/bank/fiche.php b/htdocs/compta/bank/fiche.php index e4a7a76b4db..f93c7518acf 100644 --- a/htdocs/compta/bank/fiche.php +++ b/htdocs/compta/bank/fiche.php @@ -29,6 +29,7 @@ if (!$user->admin && !$user->rights->compta->bank) llxHeader(); + if ($_POST["action"] == 'add') { $account = new Account($db,0); @@ -36,7 +37,7 @@ if ($_POST["action"] == 'add') $account->bank = $_POST["bank"]; $account->label = $_POST["label"]; - $account->courant = $_POST["courant"]; + $account->courant = $_POST["courant"]=='yes'?1:0; $account->clos = $_POST["clos"]; $account->code_banque = $_POST["code_banque"]; @@ -54,6 +55,13 @@ if ($_POST["action"] == 'add') $account->date_solde = mktime(12,0,0,$_POST["remonth"],$_POST["reday"],$_POST["reyear"]); $id = $account->create($user->id); + if (! $id) { + $message=$account->error(); + $_GET["action"]='create'; // Force chargement page creation + } + else { + $_GET["id"]=$id; // Force chargement page en mode edition + } } if ($_POST["action"] == 'update') @@ -90,6 +98,8 @@ if ($_GET["action"] == 'create') { print_titre("Nouveau compte bancaire"); + if ($message) { print "
$message

\n"; } + print '
'; print ''; print ''; @@ -97,36 +107,38 @@ if ($_GET["action"] == 'create') print ''; print ''; - print ''; + print ''; print ''; - print ''; + print ''; print ''; - print ''; - print ''; - print ''; - print ''; + print ''; + print ''; + print ''; + print ''; print ''; - print ''; + print ''; print ''; - print ''; + print ''; print ''; - print ''; + print ''; print '"; print ''; - print ''; + print ''; print '"; print ''; @@ -139,7 +151,7 @@ if ($_GET["action"] == 'create') print ''; print ''; - print ''; + print ''; print ''; print '
Banque
Libellé
Code BanqueCode GuichetNuméroClé RIB
Clé IBAN
Identifiant BIC
Compte Courant
'; + $form=new Form($db); + print $form->selectyesno("courant",isset($_POST["courant"])?$_POST["courant"]:1); + print '
Domiciliation'; - print "
Nom propriétaire du compte
Adresse propriétaire du compte'; - print "
Solde
'; }