Script d'import de clients en masse

Bonjour,
pour tous ceux qui ont des soucis avec l’import de tiers en masse via dolibarr (comme moi)
j’ai créé un script qui s’inspire du vieux code disponible sur le wiki (wiki dolibarr : Importer_des_clients_en_automatique)
je l’ai testé avec la v13, aucun soucis, import de 960 client en quelques secondes.
Après je suis pas un grand codeur, il peut certainement être amélioré.
mais bon, si ca peut aider quelqu’un.
Je peux pas importer de fichier (suis nouveau) donc je colle le code ici.

<!doctype html public "-//W3C//DTD HTML 4.0 //EN">
<html>
<head>
       <title>importer des clients</title>
</head>
<body>

<?php
$sql_host= ""; // serveur de la DB
$sql_login= ""; // nom d'utilisateur
$sql_pass= ""; // mot de passe
$sql_base= ""; // nom de la base de données

// création d'un connexion
$conn = new mysqli($sql_host, $sql_login, $sql_pass);

echo "<h1>Import de clients dans Dolibarr</h1>";

// En case d'erreur on affiche un message, sinon on continue.
if ($conn->connect_error)
    die("Erreur de connexion: " . $conn->connect_error);
echo "Connexion établie.<br/>";

// On selectionne la base nécéssaire
$conn->select_db($sql_base);
if ($result = $conn->query("SELECT DATABASE()")) {
  $row = $result->fetch_row();
  printf("base selectionnée : %s.<br/>", $row[0]);
  $result->close();
}

// juste un flag de vérification pour plus tard.
$flag = 0;

echo "<h2>Création table temporaire</h2>";

// on vérifie si le fichier existe bien sinon, on arrête tout.
if(file_exists("./societe.csv"))
{
    // création d'une table temporaire pour stocker les données avant de tout inserer définitivement
    echo "fichier CSV détecté<br/>";
	$query_content="create table if not exists doli_societe_tmp (
	 code_client        varchar(15),
	 nom                varchar(60),
	 address            varchar(255),
     zip                varchar(10),
	 town               varchar(50),
	 phone              varchar(20),
	 fax                varchar(20),
	 email              varchar(128),
	 client             tinyint        DEFAULT 0,
	 fournisseur        tinyint        DEFAULT 0,
     tva_intra          varchar(20),
	 fk_pays            integer        DEFAULT 0
	);";

    // Si la table est bien crée ou qu'elle existe, on continue, sinon on affiche un erreur
    if($conn->query($query_content)) {
        echo "Table créée avec succès.<br/>";
        echo "<h3>Suppression du contenu déjà présent:</h3>";
        // on supprime toute de la table temporaire pour partir d'une table vide.
        $query_content="delete from doli_societe_tmp";
        // si la suppression s'est bien passée, on continue, sinon, on affiche un erreur.
        if($conn->query($query_content)) {
            echo "Contenu actuel supprimé<br/>";
            echo "<h3>Copie du contenu du fichier dans la table temporaire</h3>";
            // on charge les données du fichier 
            $query_content="LOAD DATA LOCAL INFILE 'societe.csv' into table doli_societe_tmp fields terminated by '\t' ENCLOSED BY '\"' lines terminated by '\n'";
            // Si les données sont bien inserées, on continue et on passe le flag a 1 pour la suite.
            if($conn->query($query_content)){
                echo "Insertions des données avec succès<br/>";
                $flag = 1;
            } else
                echo "Erreur lors de la copie des données: ".mysqli_error($conn)."<br/>";
        } else
            echo "Erreur lors de la suppression<br/>";
    } else
        echo "Erreur lors de la création; ".mysqli_error($conn);
} else
    echo "Aucun fichier CSV trouvé";

// Si le flag est a 1, on copie les données de la table temporaire vers la définitive
// Sinon, le script s'arrête. pas de bêtise.
if ($flag == 1) {
    echo "<h3>Copie des données dans le tableau officiel</h3>";
    $query_content="INSERT INTO doli_societe(code_client, nom, address, zip, town, phone, fax, email, client, fournisseur, tva_intra, fk_pays)
                    SELECT code_client, nom, address, zip, town, phone, fax, email, client, fournisseur, tva_intra, fk_pays FROM doli_societe_tmp";
    // Si tout est bien copié avec succès, on continue sinon on affiche une erreur.
    if($conn->query($query_content)) {
        echo "Copie données avec succès<br/>";
        echo "Mise à jours de date et user<br/>";
        // on met à jour la date d'insertion et l'ID du créateur
        $query_content="UPDATE doli_societe SET datec = '".date('Y-m-d H:m:s')."', fk_user_creat = 1";
        // On vérrifie que l'update s'est bien passé et on affiche un message.
        if($conn->query($query_content))
            echo "Mise à jours réussie<br /> FIN.";
        else
            echo "Erreur; ".mysqli_error($conn);
    } else
        echo "Erreur; ".mysqli_error($conn);
} else
    echo "Flag a zéro, le script s'arrête ici.";
// On cloture la connexion
$conn->close();
?>
</body>
</html>

import_client.php à placer dans scripts/tiers/ avec votre fichier societe.csv et à lancer depuis le navigateur.

fichier societe.csv :
les données doivent être dans l’ordre suivant la première table dans le code et séparé par des tabulations (ou alors il suffit d’adapter dans le code)

ne pas oublier d’adapter le préfixe des tables, en general c’est « llx_ ». chez moi c’est « doli_ »

Voilà, peut-être inutile, peut être pas, mais j’aurais partagé.

4 « J'aime »