From 030074cf8336704afc6b7994d154050fdc0bb336 Mon Sep 17 00:00:00 2001
From: Laurent Destailleur <eldy@users.sourceforge.net>
Date: Mon, 26 Oct 2009 00:34:09 +0000
Subject: [PATCH] Fix: Data must be loaded in the correct order.

---
 htdocs/install/etape2.php                     | 840 +++++++++---------
 .../{llx_c_pays.sql => llx_00_c_pays.sql}     |   0
 ...llx_c_regions.sql => llx_10_c_regions.sql} |   0
 ...rtements.sql => llx_20_c_departements.sql} |   0
 ...countingaccount.sql => llx_accounting.sql} |   0
 htdocs/install/mysql/data/llx_c_ecotaxe.sql   |  76 +-
 htdocs/theme/eldy/eldy.css.php                |  13 +-
 7 files changed, 484 insertions(+), 445 deletions(-)
 rename htdocs/install/mysql/data/{llx_c_pays.sql => llx_00_c_pays.sql} (100%)
 rename htdocs/install/mysql/data/{llx_c_regions.sql => llx_10_c_regions.sql} (100%)
 rename htdocs/install/mysql/data/{llx_c_departements.sql => llx_20_c_departements.sql} (100%)
 rename htdocs/install/mysql/data/{llx_accountingaccount.sql => llx_accounting.sql} (100%)

diff --git a/htdocs/install/etape2.php b/htdocs/install/etape2.php
index f3a9d9d7b57..3a966b0f565 100644
--- a/htdocs/install/etape2.php
+++ b/htdocs/install/etape2.php
@@ -58,424 +58,462 @@ dolibarr_install_syslog("etape2: Entering etape2.php page");
 
 
 /*
-*	View
-*/
+ *	View
+ */
 
 pHeader($langs->trans("CreateDatabaseObjects"),"etape4");
 
 
 if ($_POST["action"] == "set")
 {
-    print '<h3>'.$langs->trans("Database").'</h3>';
-
-    print '<table cellspacing="0" cellpadding="4" border="0" width="100%">';
-    $error=0;
-
-    $db = new DoliDb($conf->db->type,$conf->db->host,$conf->db->user,$conf->db->pass,$conf->db->name,$conf->db->port);
-    if ($db->connected == 1)
-    {
-        print "<tr><td>";
-        print $langs->trans("ServerConnection")." : $dolibarr_main_db_host</td><td>".$langs->trans("OK")."</td></tr>";
-        $ok = 1 ;
-    }
-    else
-    {
-        print "<tr><td>Erreur lors de la creation de : $dolibarr_main_db_name</td><td>".$langs->trans("Error")."</td></tr>";
-    }
-
-    if ($ok)
-    {
-        if($db->database_selected == 1)
-        {
-
-            dolibarr_install_syslog("etape2: Connexion reussie a la base : $dolibarr_main_db_name");
-        }
-        else
-        {
-            $ok = 0 ;
-        }
-    }
-
-
-    // Affiche version
-    if ($ok)
-    {
-        $version=$db->getVersion();
-        $versionarray=$db->getVersionArray();
-        print '<tr><td>'.$langs->trans("DatabaseVersion").'</td>';
-        print '<td>'.$version.'</td></tr>';
-        //print '<td align="right">'.join('.',$versionarray).'</td></tr>';
-    }
+	print '<h3>'.$langs->trans("Database").'</h3>';
+
+	print '<table cellspacing="0" cellpadding="4" border="0" width="100%">';
+	$error=0;
+
+	$db = new DoliDb($conf->db->type,$conf->db->host,$conf->db->user,$conf->db->pass,$conf->db->name,$conf->db->port);
+	if ($db->connected == 1)
+	{
+		print "<tr><td>";
+		print $langs->trans("ServerConnection")." : $dolibarr_main_db_host</td><td>".$langs->trans("OK")."</td></tr>";
+		$ok = 1 ;
+	}
+	else
+	{
+		print "<tr><td>Erreur lors de la creation de : $dolibarr_main_db_name</td><td>".$langs->trans("Error")."</td></tr>";
+	}
+
+	if ($ok)
+	{
+		if($db->database_selected == 1)
+		{
+
+			dolibarr_install_syslog("etape2: Connexion reussie a la base : $dolibarr_main_db_name");
+		}
+		else
+		{
+			$ok = 0 ;
+		}
+	}
+
+
+	// Affiche version
+	if ($ok)
+	{
+		$version=$db->getVersion();
+		$versionarray=$db->getVersionArray();
+		print '<tr><td>'.$langs->trans("DatabaseVersion").'</td>';
+		print '<td>'.$version.'</td></tr>';
+		//print '<td align="right">'.join('.',$versionarray).'</td></tr>';
+	}
 
 	$requestnb=0;
 
-    /**************************************************************************************
-    *
-    * Chargement fichiers tables/*.sql (non *.key.sql)
-    * A faire avant les fichiers *.key.sql
-    *
-    ***************************************************************************************/
-    if ($ok)
-    {
-        // We always choose in mysql directory (Conversion is done by driver to translate SQL syntax)
-        $dir = "mysql/tables/";
-
-        $ok = 0;
-        $handle=opendir($dir);
-        dolibarr_install_syslog("Open tables directory ".$dir." handle=".$handle,LOG_DEBUG);
-        $tablefound = 0;
-        while (($file = readdir($handle))!==false)
-        {
-            if (preg_match('/\.sql$/i',$file) && preg_match('/^llx_/i',$file) && ! preg_match('/\.key\.sql$/i',$file))
-            {
-                $tablefound++;
-
-            	$name = substr($file, 0, strlen($file) - 4);
-                $buffer = '';
-                $fp = fopen($dir.$file,"r");
-                if ($fp)
-                {
-                    while (!feof ($fp))
-                    {
-                        $buf = fgets($fp, 4096);
-                        if (substr($buf, 0, 2) <> '--')
-                        {
-							if ($choix != 1)	// All databases except Mysql
-							{
-								$buf=$db->convertSQLFromMysql($buf);
-							}
-
-                        	$buffer .= $buf;
-                        }
-                    }
-                    fclose($fp);
-
-                    $buffer=trim($buffer);
+	// To disable some code
+	$createtables=1;
+	$createkeys=1;
+	$createfunctions=1;
+	$createdata=1;
+
+	/**************************************************************************************
+	 *
+	 * Chargement fichiers tables/*.sql (non *.key.sql)
+	 * A faire avant les fichiers *.key.sql
+	 *
+	 ***************************************************************************************/
+	if ($ok && $createtables)
+	{
+		// We always choose in mysql directory (Conversion is done by driver to translate SQL syntax)
+		$dir = "mysql/tables/";
+
+		$ok = 0;
+		$handle=opendir($dir);
+		dolibarr_install_syslog("Open tables directory ".$dir." handle=".$handle,LOG_DEBUG);
+		$tablefound = 0;
+		$tabledata=array();
+		while (($file = readdir($handle))!==false)
+		{
+			if (preg_match('/\.sql$/i',$file) && preg_match('/^llx_/i',$file) && ! preg_match('/\.key\.sql$/i',$file))
+			{
+				$tablefound++;
+				$tabledata[]=$file;
+			}
+		}
+		closedir($handle);
+
+		// Sort list of data files on alphabetical order (load order is important)
+		sort($tabledata);
+		foreach($tabledata as $file)
+		{
+			$name = substr($file, 0, strlen($file) - 4);
+			$buffer = '';
+			$fp = fopen($dir.$file,"r");
+			if ($fp)
+			{
+				while (!feof ($fp))
+				{
+					$buf = fgets($fp, 4096);
+					if (substr($buf, 0, 2) <> '--')
+					{
+						if ($choix != 1)	// All databases except Mysql
+						{
+							$buf=$db->convertSQLFromMysql($buf);
+						}
 
-	                //print "<tr><td>Creation de la table $name/td>";
-					$requestnb++;
-					if ($conf->file->character_set_client == "UTF-8")
+						$buffer .= $buf;
+					}
+				}
+				fclose($fp);
+
+				$buffer=trim($buffer);
+
+				//print "<tr><td>Creation de la table $name/td>";
+				$requestnb++;
+				if ($conf->file->character_set_client == "UTF-8")
+				{
+					$buffer=utf8_encode($buffer);
+				}
+
+				dolibarr_install_syslog("Request: ".$buffer,LOG_DEBUG);
+				if ($db->query($buffer))
+				{
+					// print "<td>OK requete ==== $buffer</td></tr>";
+				}
+				else
+				{
+					if ($db->errno() == 'DB_ERROR_TABLE_ALREADY_EXISTS' ||
+					$db->errno() == 'DB_ERROR_TABLE_OR_KEY_ALREADY_EXISTS')
+					{
+						//print "<td>Deja existante</td></tr>";
+					}
+					else
+					{
+						print "<tr><td>".$langs->trans("CreateTableAndPrimaryKey",$name);
+						print "<br>\n".$langs->trans("Request").' '.$requestnb.' : '.$buffer;
+						print "\n</td>";
+						print "<td>".$langs->trans("Error")." ".$db->errno()." ".$db->error()."</td></tr>";
+						$error++;
+					}
+				}
+			}
+			else
+			{
+				print "<tr><td>".$langs->trans("CreateTableAndPrimaryKey",$name);
+				print "</td>";
+				print "<td>".$langs->trans("Error")." Failed to open file ".$dir.$file."</td></tr>";
+				$error++;
+				dolibarr_install_syslog("Failed to open file ".$dir.$file,LOG_ERR);
+			}
+		}
+
+		if ($tablefound)
+		{
+			if ($error == 0)
+			{
+				print '<tr><td>';
+				print $langs->trans("TablesAndPrimaryKeysCreation").'</td><td>'.$langs->trans("OK").'</td></tr>';
+				$ok = 1;
+			}
+		}
+		else
+		{
+			print "<tr><td>".$langs->trans("ErrorFailedToFindSomeFiles",$dir)."</td><td>".$langs->trans("Error")."</td></tr>";
+			dolibarr_install_syslog("Failed to find files to create database in directory ".$dir,LOG_ERR);
+		}
+	}
+
+
+	/***************************************************************************************
+	 *
+	 * Chargement fichiers tables/*.key.sql
+	 * A faire apres les fichiers *.sql
+	 *
+	 ***************************************************************************************/
+	if ($ok && $createkeys)
+	{
+		// We always choose in mysql directory (Conversion is done by driver to translate SQL syntax)
+		$dir = "mysql/tables/";
+
+		$okkeys = 0;
+		$handle=opendir($dir);
+		dolibarr_install_syslog("Open keys directory ".$dir." handle=".$handle,LOG_DEBUG);
+		$tablefound = 0;
+		$tabledata=array();
+		while (($file = readdir($handle))!==false)
+		{
+			if (preg_match('/\.sql$/i',$file) && preg_match('/^llx_/i',$file) && preg_match('/\.key\.sql$/i',$file))
+			{
+				$tablefound++;
+				$tabledata[]=$file;
+			}
+		}
+		closedir($handle);
+
+		// Sort list of data files on alphabetical order (load order is important)
+		sort($tabledata);
+		foreach($tabledata as $file)
+		{
+			$name = substr($file, 0, strlen($file) - 4);
+			//print "<tr><td>Creation de la table $name</td>";
+			$buffer = '';
+			$fp = fopen($dir.$file,"r");
+			if ($fp)
+			{
+				while (!feof ($fp))
+				{
+					$buf = fgets($fp, 4096);
+
+					// Cas special de lignes autorisees pour certaines versions uniquement
+					if ($choix == 1 && preg_match('/^--\sV([0-9\.]+)/i',$buf,$reg))
+					{
+						$versioncommande=explode('.',$reg[1]);
+						//print var_dump($versioncommande);
+						//print var_dump($versionarray);
+						if (sizeof($versioncommande) && sizeof($versionarray)
+						&& versioncompare($versioncommande,$versionarray) <= 0)
+						{
+							// Version qualified, delete SQL comments
+							$buf=preg_replace('/^--\sV([0-9\.]+)/i','',$buf);
+							//print "Ligne $i qualifiee par version: ".$buf.'<br>';
+						}
+					}
+					if ($choix == 2 && preg_match('/^--\sPOSTGRESQL\sV([0-9\.]+)/i',$buf,$reg))
 					{
-						$buffer=utf8_encode($buffer);
+						$versioncommande=explode('.',$reg[1]);
+						//print var_dump($versioncommande);
+						//print var_dump($versionarray);
+						if (sizeof($versioncommande) && sizeof($versionarray)
+						&& versioncompare($versioncommande,$versionarray) <= 0)
+						{
+							// Version qualified, delete SQL comments
+							$buf=preg_replace('/^--\sPOSTGRESQL\sV([0-9\.]+)/i','',$buf);
+							//print "Ligne $i qualifiee par version: ".$buf.'<br>';
+						}
 					}
 
+					// Ajout ligne si non commentaire
+					if (! preg_match('/^--/i',$buf)) $buffer .= $buf;
+				}
+				fclose($fp);
+
+				// Si plusieurs requetes, on boucle sur chaque
+				$listesql=explode(';',$buffer);
+				foreach ($listesql as $req)
+				{
+					$buffer=trim($req);
+					if ($buffer)
+					{
+						//print "<tr><td>Creation des cles et index de la table $name: '$buffer'</td>";
+						$requestnb++;
+						if ($conf->file->character_set_client == "UTF-8")
+						{
+							$buffer=utf8_encode($buffer);
+						}
+
+						dolibarr_install_syslog("Request: ".$buffer,LOG_DEBUG);
+						if ($db->query($buffer))
+						{
+							//print "<td>OK requete ==== $buffer</td></tr>";
+						}
+						else
+						{
+							if ($db->errno() == 'DB_ERROR_KEY_NAME_ALREADY_EXISTS' ||
+							$db->errno() == 'DB_ERROR_CANNOT_CREATE' ||
+							$db->errno() == 'DB_ERROR_PRIMARY_KEY_ALREADY_EXISTS' ||
+							$db->errno() == 'DB_ERROR_TABLE_OR_KEY_ALREADY_EXISTS' ||
+							preg_match('/duplicate key name/i',$db->error()))
+							{
+								//print "<td>Deja existante</td></tr>";
+								$key_exists = 1;
+							}
+							else
+							{
+								print "<tr><td>".$langs->trans("CreateOtherKeysForTable",$name);
+								print "<br>\n".$langs->trans("Request").' '.$requestnb.' : '.$db->lastqueryerror();
+								print "\n</td>";
+								print "<td>".$langs->trans("Error")." ".$db->errno()." ".$db->error()."</td></tr>";
+								$error++;
+							}
+						}
+					}
+				}
+			}
+			else
+			{
+				print "<tr><td>".$langs->trans("CreateOtherKeysForTable",$name);
+				print "</td>";
+				print "<td>".$langs->trans("Error")." Failed to open file ".$dir.$file."</td></tr>";
+				$error++;
+				dolibarr_install_syslog("Failed to open file ".$dir.$file,LOG_ERR);
+			}
+		}
+
+		if ($tablefound && $error == 0)
+		{
+			print '<tr><td>';
+			print $langs->trans("OtherKeysCreation").'</td><td>'.$langs->trans("OK").'</td></tr>';
+			$okkeys = 1;
+		}
+	}
+
+
+	/***************************************************************************************
+	 *
+	 * Chargement fichier functions.sql
+	 *
+	 ***************************************************************************************/
+	if ($ok && $createfunctions)
+	{
+		// For this file, we use directory according to database type
+		if ($choix==1) $dir = "mysql/functions/";
+		elseif ($choix==2) $dir = "pgsql/functions/";
+		elseif ($choix==3) $dir = "mssql/functions/";
+
+		// Creation donnees
+		$file = "functions.sql";
+		if (file_exists($dir.$file))
+		{
+			$fp = fopen($dir.$file,"r");
+			dolibarr_install_syslog("Open function file ".$dir.$file." handle=".$fp,LOG_DEBUG);
+			if ($fp)
+			{
+				$buffer='';
+				while (!feof ($fp))
+				{
+					$buf = fgets($fp, 4096);
+					if (substr($buf, 0, 2) <> '--')
+					{
+						$buffer .= $buf;
+					}
+				}
+				fclose($fp);
+			}
+
+			// Si plusieurs requetes, on boucle sur chaque
+			$buffer=preg_replace('/;\';/',";'§",$buffer);
+			$listesql=explode('§',$buffer);
+			foreach ($listesql as $buffer)
+			{
+				$buffer=trim($buffer);
+				if ($buffer)
+				{
 					dolibarr_install_syslog("Request: ".$buffer,LOG_DEBUG);
 					if ($db->query($buffer))
-	                {
-	                   // print "<td>OK requete ==== $buffer</td></tr>";
-	                }
-	                else
-	                {
-	                    if ($db->errno() == 'DB_ERROR_TABLE_ALREADY_EXISTS' ||
-	                        $db->errno() == 'DB_ERROR_TABLE_OR_KEY_ALREADY_EXISTS')
-	                    {
-	                        //print "<td>Deja existante</td></tr>";
-	                    }
-	                    else
-	                    {
-	                        print "<tr><td>".$langs->trans("CreateTableAndPrimaryKey",$name);
-	                        print "<br>\n".$langs->trans("Request").' '.$requestnb.' : '.$buffer;
-	                        print "\n</td>";
-	                        print "<td>".$langs->trans("Error")." ".$db->errno()." ".$db->error()."</td></tr>";
-	                        $error++;
-	                    }
-	                }
-                }
-                else
-                {
-	                print "<tr><td>".$langs->trans("CreateTableAndPrimaryKey",$name);
-	                print "</td>";
-	                print "<td>".$langs->trans("Error")." Failed to open file ".$dir.$file."</td></tr>";
-	                $error++;
-	                dolibarr_install_syslog("Failed to open file ".$dir.$file,LOG_ERR);
-                }
-        	}
-        }
-        closedir($handle);
-
-        if ($tablefound)
-        {
-	        if ($error == 0)
-	        {
-	            print '<tr><td>';
-	            print $langs->trans("TablesAndPrimaryKeysCreation").'</td><td>'.$langs->trans("OK").'</td></tr>';
-	            $ok = 1;
-	        }
-        }
-        else
-        {
-	        print "<tr><td>".$langs->trans("ErrorFailedToFindSomeFiles",$dir)."</td><td>".$langs->trans("Error")."</td></tr>";
-            dolibarr_install_syslog("Failed to find files to create database in directory ".$dir,LOG_ERR);
-         }
-    }
-
-
-    /***************************************************************************************
-    *
-    * Chargement fichiers tables/*.key.sql
-    * A faire apres les fichiers *.sql
-    *
-    ***************************************************************************************/
-    if ($ok)
-    {
-        // We always choose in mysql directory (Conversion is done by driver to translate SQL syntax)
-        $dir = "mysql/tables/";
-
-        $okkeys = 0;
-        $handle=opendir($dir);
-        dolibarr_install_syslog("Open keys directory ".$dir." handle=".$handle,LOG_DEBUG);
-        while (($file = readdir($handle))!==false)
-        {
-            if (preg_match('/\.sql$/i',$file) && preg_match('/^llx_/i',$file) && preg_match('/\.key\.sql$/i',$file))
-            {
-                $name = substr($file, 0, strlen($file) - 4);
-                //print "<tr><td>Creation de la table $name</td>";
-                $buffer = '';
-                $fp = fopen($dir.$file,"r");
-                if ($fp)
-                {
-                    while (!feof ($fp))
-                    {
-                        $buf = fgets($fp, 4096);
-
-                        // Cas special de lignes autorisees pour certaines versions uniquement
-                        if ($choix == 1 && preg_match('/^--\sV([0-9\.]+)/i',$buf,$reg))
-                        {
-                            $versioncommande=explode('.',$reg[1]);
-							//print var_dump($versioncommande);
-							//print var_dump($versionarray);
-                            if (sizeof($versioncommande) && sizeof($versionarray)
-                            	&& versioncompare($versioncommande,$versionarray) <= 0)
-                            {
-                            	// Version qualified, delete SQL comments
-                                $buf=preg_replace('/^--\sV([0-9\.]+)/i','',$buf);
-                                //print "Ligne $i qualifiee par version: ".$buf.'<br>';
-                            }
-                        }
-                        if ($choix == 2 && preg_match('/^--\sPOSTGRESQL\sV([0-9\.]+)/i',$buf,$reg))
-                        {
-                            $versioncommande=explode('.',$reg[1]);
-							//print var_dump($versioncommande);
-							//print var_dump($versionarray);
-                            if (sizeof($versioncommande) && sizeof($versionarray)
-                            	&& versioncompare($versioncommande,$versionarray) <= 0)
-                            {
-                            	// Version qualified, delete SQL comments
-                                $buf=preg_replace('/^--\sPOSTGRESQL\sV([0-9\.]+)/i','',$buf);
-                                //print "Ligne $i qualifiee par version: ".$buf.'<br>';
-                            }
-                        }
-
-                        // Ajout ligne si non commentaire
-                        if (! preg_match('/^--/i',$buf)) $buffer .= $buf;
-                    }
-                    fclose($fp);
-
-	                // Si plusieurs requetes, on boucle sur chaque
-	                $listesql=explode(';',$buffer);
-	                foreach ($listesql as $req)
-	                {
-	                	$buffer=trim($req);
-	                    if ($buffer)
-	                    {
-			                //print "<tr><td>Creation des cles et index de la table $name: '$buffer'</td>";
-							$requestnb++;
-							if ($conf->file->character_set_client == "UTF-8")
+					{
+						$ok = 1;
+					}
+					else
+					{
+						if ($db->errno() == 'DB_ERROR_RECORD_ALREADY_EXISTS')
+						{
+							// print "<tr><td>Insertion ligne : $buffer</td><td>
+						}
+						else
+						{
+							$ok = 0;
+							print $langs->trans("ErrorSQL")." : ".$db->errno()." - '$buffer' - ".$db->lastqueryerror()."<br>";
+						}
+					}
+				}
+			}
+
+			print "<tr><td>".$langs->trans("FunctionsCreation")."</td>";
+			if ($ok)
+			{
+				print "<td>".$langs->trans("OK")."</td></tr>";
+			}
+			else
+			{
+				print "<td>".$langs->trans("Error")."</td></tr>";
+				$ok = 1 ;
+			}
+
+		}
+	}
+
+
+	/***************************************************************************************
+	 *
+	 * Chargement fichier data.sql
+	 *
+	 ***************************************************************************************/
+	if ($ok && $createdata)
+	{
+		// We always choose in mysql directory (Conversion is done by driver to translate SQL syntax)
+		$dir = "mysql/data/";
+
+		// Insert data
+		$handle=opendir($dir);
+		dolibarr_install_syslog("Open directory data ".$dir." handle=".$handle,LOG_DEBUG);
+		$tablefound = 0;
+		$tabledata=array();
+		while (($file = readdir($handle))!==false)
+		{
+			if (preg_match('/\.sql$/i',$file) && preg_match('/^llx_/i',$file))
+			{
+				$tablefound++;
+				$tabledata[]=$file;
+			}
+		}
+		closedir($handle);
+
+		// Sort list of data files on alphabetical order (load order is important)
+		sort($tabledata);
+		foreach($tabledata as $file)
+		{
+			$name = substr($file, 0, strlen($file) - 4);
+			$fp = fopen($dir.$file,"r");
+			dolibarr_install_syslog("Open data file ".$dir.$file." handle=".$fp,LOG_DEBUG);
+			if ($fp)
+			{
+				while (!feof ($fp))
+				{
+					$buffer = fgets($fp, 4096);
+					$buffer = trim($buffer);
+					if ($buffer)
+					{
+						if (substr($buffer, 0, 2) == '--')
+						{
+							continue;
+						}
+
+						//dolibarr_install_syslog("Request: ".$buffer,LOG_DEBUG);
+						if ($db->query($buffer))
+						{
+							$ok = 1;
+						}
+						else
+						{
+							if ($db->errno() == 'DB_ERROR_RECORD_ALREADY_EXISTS')
 							{
-								$buffer=utf8_encode($buffer);
+								//print "<tr><td>Insertion ligne : $buffer</td><td>";
 							}
-
-							dolibarr_install_syslog("Request: ".$buffer,LOG_DEBUG);
-	                        if ($db->query($buffer))
-	                        {
-	                            //print "<td>OK requete ==== $buffer</td></tr>";
-	                        }
-	                        else
-	                        {
-	                            if ($db->errno() == 'DB_ERROR_KEY_NAME_ALREADY_EXISTS' ||
-	                                $db->errno() == 'DB_ERROR_CANNOT_CREATE' ||
-	                                $db->errno() == 'DB_ERROR_PRIMARY_KEY_ALREADY_EXISTS' ||
-	                                $db->errno() == 'DB_ERROR_TABLE_OR_KEY_ALREADY_EXISTS' ||
-	                                preg_match('/duplicate key name/i',$db->error()))
-	                            {
-	                                //print "<td>Deja existante</td></tr>";
-	                                $key_exists = 1;
-	                            }
-	                            else
-	                            {
-	                                print "<tr><td>".$langs->trans("CreateOtherKeysForTable",$name);
-	                                print "<br>\n".$langs->trans("Request").' '.$requestnb.' : '.$db->lastqueryerror();
-	                                print "\n</td>";
-	                                print "<td>".$langs->trans("Error")." ".$db->errno()." ".$db->error()."</td></tr>";
-	                                $error++;
-	                            }
-	                        }
-	                    }
-                	}
-                }
-                else
-                {
-	                print "<tr><td>".$langs->trans("CreateOtherKeysForTable",$name);
-	                print "</td>";
-	                print "<td>".$langs->trans("Error")." Failed to open file ".$dir.$file."</td></tr>";
-	                $error++;
-	                dolibarr_install_syslog("Failed to open file ".$dir.$file,LOG_ERR);
-                }
-            }
-
-        }
-        closedir($handle);
-
-        if ($error == 0)
-        {
-            print '<tr><td>';
-            print $langs->trans("OtherKeysCreation").'</td><td>'.$langs->trans("OK").'</td></tr>';
-            $okkeys = 1;
-        }
-    }
-
-
-    /***************************************************************************************
-    *
-    * Chargement fichier functions.sql
-    *
-    ***************************************************************************************/
-    if ($ok)
-    {
-    	// For this file, we use directory according to database type
-        if ($choix==1) $dir = "mysql/functions/";
-        elseif ($choix==2) $dir = "pgsql/functions/";
-        elseif ($choix==3) $dir = "mssql/functions/";
-
-        // Creation donnees
-        $file = "functions.sql";
-        if (file_exists($dir.$file))
-        {
-        	$fp = fopen($dir.$file,"r");
-        	dolibarr_install_syslog("Open function file ".$dir.$file." handle=".$fp,LOG_DEBUG);
-        	if ($fp)
-            {
-            	$buffer='';
-                while (!feof ($fp))
-                {
-                    $buf = fgets($fp, 4096);
-                    if (substr($buf, 0, 2) <> '--')
-                    {
-                        $buffer .= $buf;
-                    }
-                }
-                fclose($fp);
-            }
-
-            // Si plusieurs requetes, on boucle sur chaque
-            $buffer=preg_replace('/;\';/',";'§",$buffer);
-            $listesql=explode('§',$buffer);
-            foreach ($listesql as $buffer)
-            {
-                $buffer=trim($buffer);
-            	if ($buffer)
-                {
-					dolibarr_install_syslog("Request: ".$buffer,LOG_DEBUG);
-                	if ($db->query($buffer))
-                    {
-                        $ok = 1;
-                    }
-                    else
-                    {
-                        if ($db->errno() == 'DB_ERROR_RECORD_ALREADY_EXISTS')
-                        {
-                            // print "<tr><td>Insertion ligne : $buffer</td><td>
-                        }
-                        else
-                        {
-                            $ok = 0;
-                            print $langs->trans("ErrorSQL")." : ".$db->errno()." - '$buffer' - ".$db->lastqueryerror()."<br>";
-                        }
-                    }
-                }
-            }
-
-            print "<tr><td>".$langs->trans("FunctionsCreation")."</td>";
-            if ($ok)
-            {
-                print "<td>".$langs->trans("OK")."</td></tr>";
-            }
-            else
-            {
-                print "<td>".$langs->trans("Error")."</td></tr>";
-                $ok = 1 ;
-            }
-
-        }
-    }
-
-
-    /***************************************************************************************
-    *
-    * Chargement fichier data.sql
-    *
-    ***************************************************************************************/
-    if ($ok)
-    {
-        // We always choose in mysql directory (Conversion is done by driver to translate SQL syntax)
-        $dir = "mysql/data/";
-
-        // Insert data
-        $handle=opendir($dir);
-        dolibarr_install_syslog("Open directory data ".$dir." handle=".$handle,LOG_DEBUG);
-        while (($file = readdir($handle))!==false)
-        {
-            if (preg_match('/\.sql$/i',$file) && preg_match('/^llx_/i',$file))
-            {
-            	$name = substr($file, 0, strlen($file) - 4);
-                $buffer = '';
-                $fp = fopen($dir.$file,"r");
-                if ($fp)
-                {
-                	while (!feof ($fp))
-                	{
-                		$buffer = fgets($fp, 4096);
-                		//print "<tr><td>Insertion ligne : $buffer</td><td>";
-                		if (strlen(trim(str_replace("--","",$buffer))))
-                		{
-                			if ($db->query($buffer))
-                			{
-                				$ok = 1;
-                			}
-                			else
-                			{
-                				if ($db->errno() == 'DB_ERROR_RECORD_ALREADY_EXISTS')
-                				{
-                					//print "<tr><td>Insertion ligne : $buffer</td><td>";
-                				}
-                				else
-                				{
-                					$ok = 0;
-                					print $langs->trans("ErrorSQL")." : ".$db->errno()." - '$buffer' - ".$db->error()."<br>";
-                				}
-                			}
-                		}
-                	}
-                	fclose($fp);
-                }
-             }
-        }
-        closedir($handle);
-
-        print "<tr><td>".$langs->trans("ReferenceDataLoading")."</td>";
-        if ($ok)
-        {
-        	print "<td>".$langs->trans("OK")."</td></tr>";
-        }
-        else
-        {
-        	print "<td>".$langs->trans("Error")."</td></tr>";
-            $ok = 1 ;
-        }
-    }
-    print '</table>';
-
-    $db->close();
+							else
+							{
+								$ok = 0;
+								print $langs->trans("ErrorSQL")." : ".$db->lasterrno()." - ".$db->lastqueryerror()." - ".$db->lasterror()."<br>";
+							}
+						}
+					}
+				}
+				fclose($fp);
+			}
+		}
+
+		print "<tr><td>".$langs->trans("ReferenceDataLoading")."</td>";
+		if ($ok)
+		{
+			print "<td>".$langs->trans("OK")."</td></tr>";
+		}
+		else
+		{
+			print "<td>".$langs->trans("Error")."</td></tr>";
+			$ok = 1 ;
+		}
+	}
+	print '</table>';
+
+	$db->close();
 }
 
 pFooter(!$ok,$setuplang);
diff --git a/htdocs/install/mysql/data/llx_c_pays.sql b/htdocs/install/mysql/data/llx_00_c_pays.sql
similarity index 100%
rename from htdocs/install/mysql/data/llx_c_pays.sql
rename to htdocs/install/mysql/data/llx_00_c_pays.sql
diff --git a/htdocs/install/mysql/data/llx_c_regions.sql b/htdocs/install/mysql/data/llx_10_c_regions.sql
similarity index 100%
rename from htdocs/install/mysql/data/llx_c_regions.sql
rename to htdocs/install/mysql/data/llx_10_c_regions.sql
diff --git a/htdocs/install/mysql/data/llx_c_departements.sql b/htdocs/install/mysql/data/llx_20_c_departements.sql
similarity index 100%
rename from htdocs/install/mysql/data/llx_c_departements.sql
rename to htdocs/install/mysql/data/llx_20_c_departements.sql
diff --git a/htdocs/install/mysql/data/llx_accountingaccount.sql b/htdocs/install/mysql/data/llx_accounting.sql
similarity index 100%
rename from htdocs/install/mysql/data/llx_accountingaccount.sql
rename to htdocs/install/mysql/data/llx_accounting.sql
diff --git a/htdocs/install/mysql/data/llx_c_ecotaxe.sql b/htdocs/install/mysql/data/llx_c_ecotaxe.sql
index 4944570f153..db630463dbf 100644
--- a/htdocs/install/mysql/data/llx_c_ecotaxe.sql
+++ b/htdocs/install/mysql/data/llx_c_ecotaxe.sql
@@ -33,45 +33,45 @@
 --
 
 -- France (Organisme ERP)
-INSERT INTO `llx_c_ecotaxe` (`rowid`, `code`, `libelle`, `price`, `organization`, `fk_pays`, `active`) VALUES ( 1, 'ER-A-A', 'Materiels electriques < 0,2kg', 0.01000000, 'ERP', 1, 1);
-INSERT INTO `llx_c_ecotaxe` (`rowid`, `code`, `libelle`, `price`, `organization`, `fk_pays`, `active`) VALUES ( 2, 'ER-A-B', 'Materiels electriques >= 0,2 kg et < 0,5 kg', 0.03000000, 'ERP', 1, 1);
-INSERT INTO `llx_c_ecotaxe` (`rowid`, `code`, `libelle`, `price`, `organization`, `fk_pays`, `active`) VALUES ( 3, 'ER-A-C', 'Materiels electriques >= 0,5 kg et < 1 kg', 0.04000000, 'ERP', 1, 1);
-INSERT INTO `llx_c_ecotaxe` (`rowid`, `code`, `libelle`, `price`, `organization`, `fk_pays`, `active`) VALUES ( 4, 'ER-A-D', 'Materiels electriques >= 1 kg et < 2 kg', 0.13000000, 'ERP', 1, 1);
-INSERT INTO `llx_c_ecotaxe` (`rowid`, `code`, `libelle`, `price`, `organization`, `fk_pays`, `active`) VALUES ( 5, 'ER-A-E', 'Materiels electriques >= 2 kg et < 4kg', 0.21000000, 'ERP', 1, 1);
-INSERT INTO `llx_c_ecotaxe` (`rowid`, `code`, `libelle`, `price`, `organization`, `fk_pays`, `active`) VALUES ( 6, 'ER-A-F', 'Materiels electriques >= 4 kg et < 8 kg', 0.42000000, 'ERP', 1, 1);
-INSERT INTO `llx_c_ecotaxe` (`rowid`, `code`, `libelle`, `price`, `organization`, `fk_pays`, `active`) VALUES ( 7, 'ER-A-G', 'Materiels electriques >= 8 kg et < 15 kg', 0.84000000, 'ERP', 1, 1);
-INSERT INTO `llx_c_ecotaxe` (`rowid`, `code`, `libelle`, `price`, `organization`, `fk_pays`, `active`) VALUES ( 8, 'ER-A-H', 'Materiels electriques >= 15 kg et < 20 kg', 1.25000000, 'ERP', 1, 1);
-INSERT INTO `llx_c_ecotaxe` (`rowid`, `code`, `libelle`, `price`, `organization`, `fk_pays`, `active`) VALUES ( 9, 'ER-A-I', 'Materiels electriques >= 20 kg et < 30 kg', 1.88000000, 'ERP', 1, 1);
-INSERT INTO `llx_c_ecotaxe` (`rowid`, `code`, `libelle`, `price`, `organization`, `fk_pays`, `active`) VALUES (10, 'ER-A-J', 'Materiels electriques >= 30 kg', 3.34000000, 'ERP', 1, 1);
-INSERT INTO `llx_c_ecotaxe` (`rowid`, `code`, `libelle`, `price`, `organization`, `fk_pays`, `active`) VALUES (11, 'ER-M-1', 'TV, Moniteurs < 9kg', 0.84000000, 'ERP', 1, 1);
-INSERT INTO `llx_c_ecotaxe` (`rowid`, `code`, `libelle`, `price`, `organization`, `fk_pays`, `active`) VALUES (12, 'ER-M-2', 'TV, Moniteurs >= 9kg et < 15kg', 1.67000000, 'ERP', 1, 1);
-INSERT INTO `llx_c_ecotaxe` (`rowid`, `code`, `libelle`, `price`, `organization`, `fk_pays`, `active`) VALUES (13, 'ER-M-3', 'TV, Moniteurs >= 15kg et < 30kg', 3.34000000, 'ERP', 1, 1);
-INSERT INTO `llx_c_ecotaxe` (`rowid`, `code`, `libelle`, `price`, `organization`, `fk_pays`, `active`) VALUES (14, 'ER-M-4', 'TV, Moniteurs >= 30 kg', 6.69000000, 'ERP', 1, 1);
+INSERT INTO llx_c_ecotaxe (rowid, code, libelle, price, organization, fk_pays, active) VALUES ( 1, 'ER-A-A', 'Materiels electriques < 0,2kg', 0.01000000, 'ERP', 1, 1);
+INSERT INTO llx_c_ecotaxe (rowid, code, libelle, price, organization, fk_pays, active) VALUES ( 2, 'ER-A-B', 'Materiels electriques >= 0,2 kg et < 0,5 kg', 0.03000000, 'ERP', 1, 1);
+INSERT INTO llx_c_ecotaxe (rowid, code, libelle, price, organization, fk_pays, active) VALUES ( 3, 'ER-A-C', 'Materiels electriques >= 0,5 kg et < 1 kg', 0.04000000, 'ERP', 1, 1);
+INSERT INTO llx_c_ecotaxe (rowid, code, libelle, price, organization, fk_pays, active) VALUES ( 4, 'ER-A-D', 'Materiels electriques >= 1 kg et < 2 kg', 0.13000000, 'ERP', 1, 1);
+INSERT INTO llx_c_ecotaxe (rowid, code, libelle, price, organization, fk_pays, active) VALUES ( 5, 'ER-A-E', 'Materiels electriques >= 2 kg et < 4kg', 0.21000000, 'ERP', 1, 1);
+INSERT INTO llx_c_ecotaxe (rowid, code, libelle, price, organization, fk_pays, active) VALUES ( 6, 'ER-A-F', 'Materiels electriques >= 4 kg et < 8 kg', 0.42000000, 'ERP', 1, 1);
+INSERT INTO llx_c_ecotaxe (rowid, code, libelle, price, organization, fk_pays, active) VALUES ( 7, 'ER-A-G', 'Materiels electriques >= 8 kg et < 15 kg', 0.84000000, 'ERP', 1, 1);
+INSERT INTO llx_c_ecotaxe (rowid, code, libelle, price, organization, fk_pays, active) VALUES ( 8, 'ER-A-H', 'Materiels electriques >= 15 kg et < 20 kg', 1.25000000, 'ERP', 1, 1);
+INSERT INTO llx_c_ecotaxe (rowid, code, libelle, price, organization, fk_pays, active) VALUES ( 9, 'ER-A-I', 'Materiels electriques >= 20 kg et < 30 kg', 1.88000000, 'ERP', 1, 1);
+INSERT INTO llx_c_ecotaxe (rowid, code, libelle, price, organization, fk_pays, active) VALUES (10, 'ER-A-J', 'Materiels electriques >= 30 kg', 3.34000000, 'ERP', 1, 1);
+INSERT INTO llx_c_ecotaxe (rowid, code, libelle, price, organization, fk_pays, active) VALUES (11, 'ER-M-1', 'TV, Moniteurs < 9kg', 0.84000000, 'ERP', 1, 1);
+INSERT INTO llx_c_ecotaxe (rowid, code, libelle, price, organization, fk_pays, active) VALUES (12, 'ER-M-2', 'TV, Moniteurs >= 9kg et < 15kg', 1.67000000, 'ERP', 1, 1);
+INSERT INTO llx_c_ecotaxe (rowid, code, libelle, price, organization, fk_pays, active) VALUES (13, 'ER-M-3', 'TV, Moniteurs >= 15kg et < 30kg', 3.34000000, 'ERP', 1, 1);
+INSERT INTO llx_c_ecotaxe (rowid, code, libelle, price, organization, fk_pays, active) VALUES (14, 'ER-M-4', 'TV, Moniteurs >= 30 kg', 6.69000000, 'ERP', 1, 1);
 
 -- France (Organisme Ecologic)
-INSERT INTO `llx_c_ecotaxe` (`rowid`, `code`, `libelle`, `price`, `organization`, `fk_pays`, `active`) VALUES (15, 'EC-A-A', 'Materiels electriques  0,2 kg max', 0.00840000, 'Ecologic', 1, 1);
-INSERT INTO `llx_c_ecotaxe` (`rowid`, `code`, `libelle`, `price`, `organization`, `fk_pays`, `active`) VALUES (16, 'EC-A-B', 'Materiels electriques 0,21 kg min - 0,50 kg max', 0.02500000, 'Ecologic', 1, 1);
-INSERT INTO `llx_c_ecotaxe` (`rowid`, `code`, `libelle`, `price`, `organization`, `fk_pays`, `active`) VALUES (17, 'EC-A-C', 'Materiels electriques  0,51 kg min - 1 kg max', 0.04000000, 'Ecologic', 1, 1);
-INSERT INTO `llx_c_ecotaxe` (`rowid`, `code`, `libelle`, `price`, `organization`, `fk_pays`, `active`) VALUES (18, 'EC-A-D', 'Materiels electriques  1,01 kg min - 2,5 kg max', 0.13000000, 'Ecologic', 1, 1);
-INSERT INTO `llx_c_ecotaxe` (`rowid`, `code`, `libelle`, `price`, `organization`, `fk_pays`, `active`) VALUES (19, 'EC-A-E', 'Materiels electriques  2,51 kg min - 4 kg max', 0.21000000, 'Ecologic', 1, 1);
-INSERT INTO `llx_c_ecotaxe` (`rowid`, `code`, `libelle`, `price`, `organization`, `fk_pays`, `active`) VALUES (20, 'EC-A-F', 'Materiels electriques 4,01 kg min - 8 kg max', 0.42000000, 'Ecologic', 1, 1);
-INSERT INTO `llx_c_ecotaxe` (`rowid`, `code`, `libelle`, `price`, `organization`, `fk_pays`, `active`) VALUES (21, 'EC-A-G', 'Materiels electriques  8,01 kg min - 12 kg max', 0.63000000, 'Ecologic', 1, 1);
-INSERT INTO `llx_c_ecotaxe` (`rowid`, `code`, `libelle`, `price`, `organization`, `fk_pays`, `active`) VALUES (22, 'EC-A-H', 'Materiels electriques 12,01 kg min - 20 kg max', 1.05000000, 'Ecologic', 1, 1);
-INSERT INTO `llx_c_ecotaxe` (`rowid`, `code`, `libelle`, `price`, `organization`, `fk_pays`, `active`) VALUES (23, 'EC-A-I', 'Materiels electriques  20,01 kg min', 1.88000000, 'Ecologic', 1, 1);
-INSERT INTO `llx_c_ecotaxe` (`rowid`, `code`, `libelle`, `price`, `organization`, `fk_pays`, `active`) VALUES (24, 'EC-M-1', 'TV, Moniteurs 9 kg max', 0.84000000, 'Ecologic', 1, 1);
-INSERT INTO `llx_c_ecotaxe` (`rowid`, `code`, `libelle`, `price`, `organization`, `fk_pays`, `active`) VALUES (25, 'EC-M-2', 'TV, Moniteurs 9,01 kg min - 18 kg max', 1.67000000, 'Ecologic', 1, 1);
-INSERT INTO `llx_c_ecotaxe` (`rowid`, `code`, `libelle`, `price`, `organization`, `fk_pays`, `active`) VALUES (26, 'EC-M-3', 'TV, Moniteurs 18,01 kg min - 36 kg max', 3.34000000, 'Ecologic', 1, 1);
-INSERT INTO `llx_c_ecotaxe` (`rowid`, `code`, `libelle`, `price`, `organization`, `fk_pays`, `active`) VALUES (27, 'EC-M-4', 'TV, Moniteurs 36,01 kg min', 6.69000000, 'Ecologic', 1, 1);
+INSERT INTO llx_c_ecotaxe (rowid, code, libelle, price, organization, fk_pays, active) VALUES (15, 'EC-A-A', 'Materiels electriques  0,2 kg max', 0.00840000, 'Ecologic', 1, 1);
+INSERT INTO llx_c_ecotaxe (rowid, code, libelle, price, organization, fk_pays, active) VALUES (16, 'EC-A-B', 'Materiels electriques 0,21 kg min - 0,50 kg max', 0.02500000, 'Ecologic', 1, 1);
+INSERT INTO llx_c_ecotaxe (rowid, code, libelle, price, organization, fk_pays, active) VALUES (17, 'EC-A-C', 'Materiels electriques  0,51 kg min - 1 kg max', 0.04000000, 'Ecologic', 1, 1);
+INSERT INTO llx_c_ecotaxe (rowid, code, libelle, price, organization, fk_pays, active) VALUES (18, 'EC-A-D', 'Materiels electriques  1,01 kg min - 2,5 kg max', 0.13000000, 'Ecologic', 1, 1);
+INSERT INTO llx_c_ecotaxe (rowid, code, libelle, price, organization, fk_pays, active) VALUES (19, 'EC-A-E', 'Materiels electriques  2,51 kg min - 4 kg max', 0.21000000, 'Ecologic', 1, 1);
+INSERT INTO llx_c_ecotaxe (rowid, code, libelle, price, organization, fk_pays, active) VALUES (20, 'EC-A-F', 'Materiels electriques 4,01 kg min - 8 kg max', 0.42000000, 'Ecologic', 1, 1);
+INSERT INTO llx_c_ecotaxe (rowid, code, libelle, price, organization, fk_pays, active) VALUES (21, 'EC-A-G', 'Materiels electriques  8,01 kg min - 12 kg max', 0.63000000, 'Ecologic', 1, 1);
+INSERT INTO llx_c_ecotaxe (rowid, code, libelle, price, organization, fk_pays, active) VALUES (22, 'EC-A-H', 'Materiels electriques 12,01 kg min - 20 kg max', 1.05000000, 'Ecologic', 1, 1);
+INSERT INTO llx_c_ecotaxe (rowid, code, libelle, price, organization, fk_pays, active) VALUES (23, 'EC-A-I', 'Materiels electriques  20,01 kg min', 1.88000000, 'Ecologic', 1, 1);
+INSERT INTO llx_c_ecotaxe (rowid, code, libelle, price, organization, fk_pays, active) VALUES (24, 'EC-M-1', 'TV, Moniteurs 9 kg max', 0.84000000, 'Ecologic', 1, 1);
+INSERT INTO llx_c_ecotaxe (rowid, code, libelle, price, organization, fk_pays, active) VALUES (25, 'EC-M-2', 'TV, Moniteurs 9,01 kg min - 18 kg max', 1.67000000, 'Ecologic', 1, 1);
+INSERT INTO llx_c_ecotaxe (rowid, code, libelle, price, organization, fk_pays, active) VALUES (26, 'EC-M-3', 'TV, Moniteurs 18,01 kg min - 36 kg max', 3.34000000, 'Ecologic', 1, 1);
+INSERT INTO llx_c_ecotaxe (rowid, code, libelle, price, organization, fk_pays, active) VALUES (27, 'EC-M-4', 'TV, Moniteurs 36,01 kg min', 6.69000000, 'Ecologic', 1, 1);
 
 -- France (Organisme Eco-systemes)
-INSERT INTO `llx_c_ecotaxe` (`rowid`, `code`, `libelle`, `price`, `organization`, `fk_pays`, `active`) VALUES (28, 'ES-M-1', 'TV, Moniteurs <= 20 pouces', 0.84000000, 'Eco-systemes', 1, 1);
-INSERT INTO `llx_c_ecotaxe` (`rowid`, `code`, `libelle`, `price`, `organization`, `fk_pays`, `active`) VALUES (29, 'ES-M-2', 'TV, Moniteurs > 20 pouces et <= 32 pouces', 3.34000000, 'Eco-systemes', 1, 1);
-INSERT INTO `llx_c_ecotaxe` (`rowid`, `code`, `libelle`, `price`, `organization`, `fk_pays`, `active`) VALUES (30, 'ES-M-3', 'TV, Moniteurs > 32 pouces et autres grands ecrans', 6.69000000, 'Eco-systemes', 1, 1);
-INSERT INTO `llx_c_ecotaxe` (`rowid`, `code`, `libelle`, `price`, `organization`, `fk_pays`, `active`) VALUES (31, 'ES-A-A', 'Ordinateur fixe, Audio home systems (HIFI), elements hifi separes', 0.84000000, 'Eco-systemes', 1, 1);
-INSERT INTO `llx_c_ecotaxe` (`rowid`, `code`, `libelle`, `price`, `organization`, `fk_pays`, `active`) VALUES (32, 'ES-A-B', 'Ordinateur portable, CD-RCR, VCR, lecteurs et enregistreurs DVD, instruments de musique et caisses de resonance, haut parleurs...', 0.25000000, 'Eco-systemes', 1, 1);
-INSERT INTO `llx_c_ecotaxe` (`rowid`, `code`, `libelle`, `price`, `organization`, `fk_pays`, `active`) VALUES (33, 'ES-A-C', 'Imprimante, photocopieur, telecopieur', 0.42000000, 'Eco-systemes', 1, 1);
-INSERT INTO `llx_c_ecotaxe` (`rowid`, `code`, `libelle`, `price`, `organization`, `fk_pays`, `active`) VALUES (34, 'ES-A-D', 'Accessoires, clavier, souris, PDA, imprimante photo, appareil photo, gps, telephone, repondeur, telephone sans fil, modem, telecommande, casque, camescope, baladeur mp3, radio portable, radio K7 et CD portable, radio reveil', 0.08400000, 'Eco-systemes', 1, 1);
-INSERT INTO `llx_c_ecotaxe` (`rowid`, `code`, `libelle`, `price`, `organization`, `fk_pays`, `active`) VALUES (35, 'ES-A-E', 'GSM', 0.00840000, 'Eco-systemes', 1, 1);
-INSERT INTO `llx_c_ecotaxe` (`rowid`, `code`, `libelle`, `price`, `organization`, `fk_pays`, `active`) VALUES (36, 'ES-A-F', 'Jouets et equipements de loisirs et de sports < 0,5 kg', 0.04200000, 'Eco-systemes', 1, 1);
-INSERT INTO `llx_c_ecotaxe` (`rowid`, `code`, `libelle`, `price`, `organization`, `fk_pays`, `active`) VALUES (37, 'ES-A-G', 'Jouets et equipements de loisirs et de sports > 0,5 kg', 0.17000000, 'Eco-systemes', 1, 1);
-INSERT INTO `llx_c_ecotaxe` (`rowid`, `code`, `libelle`, `price`, `organization`, `fk_pays`, `active`) VALUES (38, 'ES-A-H', 'Jouets et equipements de loisirs et de sports > 10 kg', 1.25000000, 'Eco-systemes', 1, 1);
+INSERT INTO llx_c_ecotaxe (rowid, code, libelle, price, organization, fk_pays, active) VALUES (28, 'ES-M-1', 'TV, Moniteurs <= 20 pouces', 0.84000000, 'Eco-systemes', 1, 1);
+INSERT INTO llx_c_ecotaxe (rowid, code, libelle, price, organization, fk_pays, active) VALUES (29, 'ES-M-2', 'TV, Moniteurs > 20 pouces et <= 32 pouces', 3.34000000, 'Eco-systemes', 1, 1);
+INSERT INTO llx_c_ecotaxe (rowid, code, libelle, price, organization, fk_pays, active) VALUES (30, 'ES-M-3', 'TV, Moniteurs > 32 pouces et autres grands ecrans', 6.69000000, 'Eco-systemes', 1, 1);
+INSERT INTO llx_c_ecotaxe (rowid, code, libelle, price, organization, fk_pays, active) VALUES (31, 'ES-A-A', 'Ordinateur fixe, Audio home systems (HIFI), elements hifi separes', 0.84000000, 'Eco-systemes', 1, 1);
+INSERT INTO llx_c_ecotaxe (rowid, code, libelle, price, organization, fk_pays, active) VALUES (32, 'ES-A-B', 'Ordinateur portable, CD-RCR, VCR, lecteurs et enregistreurs DVD, instruments de musique et caisses de resonance, haut parleurs...', 0.25000000, 'Eco-systemes', 1, 1);
+INSERT INTO llx_c_ecotaxe (rowid, code, libelle, price, organization, fk_pays, active) VALUES (33, 'ES-A-C', 'Imprimante, photocopieur, telecopieur', 0.42000000, 'Eco-systemes', 1, 1);
+INSERT INTO llx_c_ecotaxe (rowid, code, libelle, price, organization, fk_pays, active) VALUES (34, 'ES-A-D', 'Accessoires, clavier, souris, PDA, imprimante photo, appareil photo, gps, telephone, repondeur, telephone sans fil, modem, telecommande, casque, camescope, baladeur mp3, radio portable, radio K7 et CD portable, radio reveil', 0.08400000, 'Eco-systemes', 1, 1);
+INSERT INTO llx_c_ecotaxe (rowid, code, libelle, price, organization, fk_pays, active) VALUES (35, 'ES-A-E', 'GSM', 0.00840000, 'Eco-systemes', 1, 1);
+INSERT INTO llx_c_ecotaxe (rowid, code, libelle, price, organization, fk_pays, active) VALUES (36, 'ES-A-F', 'Jouets et equipements de loisirs et de sports < 0,5 kg', 0.04200000, 'Eco-systemes', 1, 1);
+INSERT INTO llx_c_ecotaxe (rowid, code, libelle, price, organization, fk_pays, active) VALUES (37, 'ES-A-G', 'Jouets et equipements de loisirs et de sports > 0,5 kg', 0.17000000, 'Eco-systemes', 1, 1);
+INSERT INTO llx_c_ecotaxe (rowid, code, libelle, price, organization, fk_pays, active) VALUES (38, 'ES-A-H', 'Jouets et equipements de loisirs et de sports > 10 kg', 1.25000000, 'Eco-systemes', 1, 1);
diff --git a/htdocs/theme/eldy/eldy.css.php b/htdocs/theme/eldy/eldy.css.php
index c56d9d5731b..41c3de7e4cc 100644
--- a/htdocs/theme/eldy/eldy.css.php
+++ b/htdocs/theme/eldy/eldy.css.php
@@ -775,6 +775,13 @@ border: 1px solid #9CACBB;
 border-collapse: collapse;
 }
 
+td.border {
+border-top: 1px solid #000000;
+border-right: 1px solid #000000;
+border-bottom: 1px solid #000000;
+border-left: 1px solid #000000;
+}
+
 
 table.noborder {
 border-collapse: collapse;
@@ -886,12 +893,6 @@ border-bottom: 1px solid #FFFFFF;
 white-space: nowrap;
 }
 
-td.border {
-border-top: 1px solid #000000;
-border-right: 1px solid #000000;
-border-bottom: 1px solid #000000;
-border-left: 1px solid #000000;
-}
 
 .pair	{
 background: #e6ebed;
-- 
GitLab