From 843f30d82e23304386e7b2e7b3a09be4fb8a6a60 Mon Sep 17 00:00:00 2001 From: tibo Date: Sun, 1 Mar 2020 10:10:17 +0000 Subject: [PATCH] add bin directory --- bin/import_01_collectivites.php | 53 ++++++++++++ bin/import_02_budgets.php | 108 ++++++++++++++++++++++++ bin/import_03_services.php | 109 ++++++++++++++++++++++++ bin/import_10_ncmp.php | 141 ++++++++++++++++++++++++++++++++ bin/import_10_programmes.php | 107 ++++++++++++++++++++++++ bin/init_db.sh | 6 ++ bin/smeti_db.inc.php | 110 +++++++++++++++++++++++++ 7 files changed, 634 insertions(+) create mode 100644 bin/import_01_collectivites.php create mode 100644 bin/import_02_budgets.php create mode 100644 bin/import_03_services.php create mode 100644 bin/import_10_ncmp.php create mode 100644 bin/import_10_programmes.php create mode 100755 bin/init_db.sh create mode 100644 bin/smeti_db.inc.php diff --git a/bin/import_01_collectivites.php b/bin/import_01_collectivites.php new file mode 100644 index 0000000..aaa9e03 --- /dev/null +++ b/bin/import_01_collectivites.php @@ -0,0 +1,53 @@ +execute(); +SMETI_db::$item = SMETI_db::$pdo->lastInsertId(); +// Ajouter un lien sur cet item +SMETI_db::$link = 0; +SMETI_db::$req2->execute(); +SMETI_db::$item = SMETI_db::$pdo->lastInsertId(); +// Positionner ce lien comme parent +SMETI_db::$parent = SMETI_db::$item; +echo 'OK'.PHP_EOL; + +$shipments = json_decode(file_get_contents("../data/json/BMO/01_COLLECTIVITES.json"), true); +foreach($shipments as $element) +{ + // Ajouter un item + SMETI_db::$code = $element['collcod']; + SMETI_db::$libelle = $element['collnom']; + SMETI_db::$req1->execute(); + SMETI_db::$item = SMETI_db::$pdo->lastInsertId(); + + // Ajouter un lien + SMETI_db::$link = 0; + SMETI_db::$req2->execute(); + SMETI_db::$item = SMETI_db::$pdo->lastInsertId(); + + // Le rattacher à la racine + SMETI_db::$child = SMETI_db::$item; + SMETI_db::$req3->execute(); +} + +?> diff --git a/bin/import_02_budgets.php b/bin/import_02_budgets.php new file mode 100644 index 0000000..4c9e78f --- /dev/null +++ b/bin/import_02_budgets.php @@ -0,0 +1,108 @@ +prepare("SELECT code, item, libelle FROM v_items WHERE plugin = ( SELECT id FROM plugins WHERE libelle = 'Collectivités' )"); +$sql->execute(); +$coll = $sql->fetchAll(PDO::FETCH_NUM); +echo 'OK'.PHP_EOL; + +$libelle = 'Budgets'; + +echo 'VACUUM '; +SMETI_db::removePlugin($libelle); +echo 'OK'.PHP_EOL; + +echo "Ajout du plugin '$libelle' "; +SMETI_db::addPlugin($libelle); +echo 'OK'.PHP_EOL; + +echo "Plugin courant : '$libelle' "; +SMETI_db::setCurPlugin($libelle); +echo 'OK'.PHP_EOL; + +echo "Ajout d'une racine: '$libelle' "; +// Ajouter un item +SMETI_db::$libelle = $libelle; +SMETI_db::$code = 'BUDG'; +SMETI_db::$req1->execute(); +SMETI_db::$item = SMETI_db::$pdo->lastInsertId(); +// Ajouter un lien sur cet item +SMETI_db::$link = 0; +SMETI_db::$req2->execute(); +SMETI_db::$item = SMETI_db::$pdo->lastInsertId(); +// Positionner ce lien comme parent +SMETI_db::$parent = SMETI_db::$item; +echo 'OK'.PHP_EOL; + +$pile_index = 0; +$pile_code[$pile_index] = SMETI_db::$code; +$pile_item[$pile_index] = SMETI_db::$item; + +$pile_index += 1; +$pile_code[$pile_index] = ''; +$pile_item[$pile_index] = 0; + +echo 'Chargement des données'.PHP_EOL; +$counter = 0; +$shipments = json_decode(file_get_contents("../data/json/BMO/02_BUDGETS.json"), true); +$nb_shipments = count($shipments); +foreach($shipments as $element) +{ + // Gestion d'une barre de progression + progressBar($counter, $nb_shipments); + if (5000 == $counter++) break; + // Gestion d'une barre de progression + + // A-t-on changé de collectivité ? + if ($element['collcod'] != $pile_code[$pile_index]) + { + // chercher la collectivité + $n = count($coll); + for($i=0;$i<$n;$i++) + if ($element['collcod'] == $coll[$i][0]) + break; + if ($i == $n) continue; + // Revenir au niveau 'plugin' de la pile + $pile_index -= 1; + + // Ajout d'un lien (symbolique) + SMETI_db::$link = 1; + SMETI_db::$item = $coll[$i][1]; + SMETI_db::$req2->execute(); + // Ajout d'un noeud + SMETI_db::$child = SMETI_db::$pdo->lastInsertId(); + SMETI_db::$parent = $pile_item[$pile_index]; + SMETI_db::$req3->execute(); + + // Conserver ce noeud dans la pile + $pile_index += 1; + $pile_code[$pile_index] = $element['collcod']; + $pile_item[$pile_index] = SMETI_db::$child; + } + + // Rajouter le budget + // Rajouter un item + SMETI_db::$code = $element['colbcodbud']; + SMETI_db::$libelle = $element['colbnom']; + SMETI_db::$req1->execute(); + // Rajouter un lien + SMETI_db::$item = SMETI_db::$pdo->lastInsertId(); + SMETI_db::$link = 0; + SMETI_db::$req2->execute(); + // Rajouter un noeud + SMETI_db::$child = SMETI_db::$pdo->lastInsertId(); + SMETI_db::$parent = $pile_item[$pile_index]; + SMETI_db::$req3->execute(); +} + +// Enlever la barre de progression +clearLine(); +// Enlever la barre de progression + +echo 'OK'.PHP_EOL; + +?> diff --git a/bin/import_03_services.php b/bin/import_03_services.php new file mode 100644 index 0000000..9452561 --- /dev/null +++ b/bin/import_03_services.php @@ -0,0 +1,109 @@ +prepare("SELECT code, item, libelle FROM v_items WHERE plugin = ( SELECT id FROM plugins WHERE libelle = 'Collectivités' )"); +$sql->execute(); +$coll = $sql->fetchAll(PDO::FETCH_NUM); +echo 'OK'.PHP_EOL; + +$libelle = 'Services'; + +echo 'VACUUM '; +SMETI_db::removePlugin($libelle); +echo 'OK'.PHP_EOL; + +die; + +echo "Ajout du plugin '$libelle' "; +SMETI_db::addPlugin($libelle); +echo 'OK'.PHP_EOL; + +echo "Plugin courant : '$libelle' "; +SMETI_db::setCurPlugin($libelle); +echo 'OK'.PHP_EOL; + +echo "Ajout d'une racine: '$libelle' "; +// Ajouter un item +SMETI_db::$libelle = $libelle; +SMETI_db::$code = 'SERV'; +SMETI_db::$req1->execute(); +SMETI_db::$item = SMETI_db::$pdo->lastInsertId(); +// Ajouter un lien sur cet item +SMETI_db::$link = 0; +SMETI_db::$req2->execute(); +SMETI_db::$item = SMETI_db::$pdo->lastInsertId(); +// Positionner ce lien comme parent +SMETI_db::$parent = SMETI_db::$item; +echo 'OK'.PHP_EOL; + +$pile_index = 0; +$pile_code[$pile_index] = SMETI_db::$code; +$pile_item[$pile_index] = SMETI_db::$item; + +$pile_index += 1; +$pile_code[$pile_index] = ''; +$pile_item[$pile_index] = 0; + +echo 'Chargement des données'.PHP_EOL; +$counter = 0; +$shipments = json_decode(file_get_contents("../data/json/BMO/03_SERVICES.json"), true); +$nb_shipments = count($shipments); +foreach($shipments as $element) +{ + // Gestion d'une barre de progression + progressBar($counter, $nb_shipments); + if (5000 == $counter++) break; + // Gestion d'une barre de progression + + // A-t-on changé de collectivité ? + if ($element['collcod'] != $pile_code[$pile_index]) + { + // chercher la collectivité + $n = count($coll); + for($i=0;$i<$n;$i++) + if ($element['collcod'] == $coll[$i][0]) + break; + if ($i == $n) continue; + // Revenir au niveau 'plugin' de la pile + $pile_index -= 1; + + // Ajout d'un lien (symbolique) + SMETI_db::$link = 1; + SMETI_db::$item = $coll[$i][1]; + SMETI_db::$req2->execute(); + // Ajout d'un noeud + SMETI_db::$child = SMETI_db::$pdo->lastInsertId(); + SMETI_db::$parent = $pile_item[$pile_index]; + SMETI_db::$req3->execute(); + + // Conserver ce noeud dans la pile + $pile_index += 1; + $pile_code[$pile_index] = $element['collcod']; + $pile_item[$pile_index] = SMETI_db::$child; + } + + // Rajouter le service + SMETI_db::$code = $element['servcod']; + SMETI_db::$libelle = $element['servcod']; + SMETI_db::$req1->execute(); + // Rajouter un lien + SMETI_db::$item = SMETI_db::$pdo->lastInsertId(); + SMETI_db::$link = 0; + SMETI_db::$req2->execute(); + // Rajouter un noeud + SMETI_db::$child = SMETI_db::$pdo->lastInsertId(); + SMETI_db::$parent = $pile_item[$pile_index]; + SMETI_db::$req3->execute(); +} + +// Enlever la barre de progression +clearLine(); +// Enlever la barre de progression + +echo 'OK'.PHP_EOL; + +?> diff --git a/bin/import_10_ncmp.php b/bin/import_10_ncmp.php new file mode 100644 index 0000000..d5de8b3 --- /dev/null +++ b/bin/import_10_ncmp.php @@ -0,0 +1,141 @@ +prepare("SELECT code, item, libelle FROM v_items WHERE plugin = ( SELECT id FROM plugins WHERE libelle = 'Collectivités' )"); +$sql->execute(); +$coll = $sql->fetchAll(PDO::FETCH_NUM); +echo 'OK'.PHP_EOL; + +$libelle = 'Familles achats'; + +echo 'VACUUM '; +SMETI_db::removePlugin($libelle); +echo 'OK'.PHP_EOL; + +echo "Ajout du plugin '$libelle' "; +SMETI_db::addPlugin($libelle); +echo 'OK'.PHP_EOL; + +echo "Plugin courant : '$libelle' "; +SMETI_db::setCurPlugin($libelle); +echo 'OK'.PHP_EOL; + +echo "Ajout d'une racine: '$libelle' "; +// Ajouter un item +SMETI_db::$libelle = $libelle; +SMETI_db::$code = 'NCMP'; +SMETI_db::$req1->execute(); +SMETI_db::$item = SMETI_db::$pdo->lastInsertId(); +// Ajouter un lien sur cet item +SMETI_db::$link = 0; +SMETI_db::$req2->execute(); +SMETI_db::$item = SMETI_db::$pdo->lastInsertId(); +// Positionner ce lien comme parent +SMETI_db::$parent = SMETI_db::$item; +echo 'OK'.PHP_EOL; + +$pile_index = 0; +$pile_code[$pile_index] = SMETI_db::$code; +$pile_item[$pile_index] = SMETI_db::$item; + +$pile_index += 1; +$pile_code[$pile_index] = ''; +$pile_item[$pile_index] = 0; + +$pile_index += 1; +$pile_code[$pile_index] = ''; +$pile_item[$pile_index] = 0; + +echo 'Chargement des données'.PHP_EOL; +$counter = 0; +$shipments = json_decode(file_get_contents("../data/json/BMO/10_NOMCMP.json"), true); +$nb_shipments = count($shipments); +foreach($shipments as $element) +{ + // Gestion d'une barre de progression + progressBar($counter, $nb_shipments); + if (5000 == $counter++) break; + // Gestion d'une barre de progression + + // A-t-on changé de collectivité ? + if ($element['collcod'] != $pile_code[$pile_index-1]) + { + // chercher la collectivité + $n = count($coll); + for($i=0;$i<$n;$i++) + if ($element['collcod'] == $coll[$i][0]) + break; + if ($i == $n) continue; + // Revenir au niveau 'plugin' de la pile + $pile_index -= 2; + + // Ajout d'un lien (symbolique) + SMETI_db::$link = 1; + SMETI_db::$item = $coll[$i][1]; + SMETI_db::$req2->execute(); + // Ajout d'un noeud + SMETI_db::$child = SMETI_db::$pdo->lastInsertId(); + SMETI_db::$parent = $pile_item[$pile_index]; + SMETI_db::$req3->execute(); + + // Conserver ce noeud dans la pile + $pile_index += 1; + $pile_code[$pile_index] = $element['collcod']; + $pile_item[$pile_index] = SMETI_db::$child; + + // Rajouter un élément vide dans la pile + $pile_index += 1; + $pile_code[$pile_index] = ''; + $pile_item[$pile_index] = 0; + } + + // A-t-on changé de Catégorie de famille ? + if ($element['mpcacod'] != $pile_code[$pile_index]) + { + // Dépiler + $pile_index -= 1; + // Rajouter un item + SMETI_db::$code = 'MPCA'.$pile_code[$pile_index].$element['mpcacod']; + SMETI_db::$libelle = $element['mpnclib']; + SMETI_db::$req1->execute(); + // Rajouter un lien + SMETI_db::$item = SMETI_db::$pdo->lastInsertId(); + SMETI_db::$link = 0; + SMETI_db::$req2->execute(); + // Rajouter un noeud + SMETI_db::$child = SMETI_db::$pdo->lastInsertId(); + SMETI_db::$parent = $pile_item[$pile_index]; + SMETI_db::$req3->execute(); + // Empiler + $pile_index += 1; + $pile_code[$pile_index] = $element['mpcacod']; + $pile_item[$pile_index] = SMETI_db::$child; + } + if ($element['mpnccod'] == "") continue; + + // Rajouter la famille + // Rajouter un item + SMETI_db::$code = $element['mpnccod']; + SMETI_db::$libelle = $element['mpnclib']; + SMETI_db::$req1->execute(); + // Rajouter un lien + SMETI_db::$item = SMETI_db::$pdo->lastInsertId(); + SMETI_db::$link = 0; + SMETI_db::$req2->execute(); + // Rajouter un noeud + SMETI_db::$child = SMETI_db::$pdo->lastInsertId(); + SMETI_db::$parent = $pile_item[$pile_index]; + SMETI_db::$req3->execute(); +} + +// Enlever la barre de progression +clearLine(); +// Enlever la barre de progression + +echo 'OK'.PHP_EOL; + +?> diff --git a/bin/import_10_programmes.php b/bin/import_10_programmes.php new file mode 100644 index 0000000..c924efb --- /dev/null +++ b/bin/import_10_programmes.php @@ -0,0 +1,107 @@ +prepare("SELECT code, item, libelle FROM v_items WHERE plugin = ( SELECT id FROM plugins WHERE libelle = 'Collectivités' )"); +$sql->execute(); +$coll = $sql->fetchAll(PDO::FETCH_NUM); +echo 'OK'.PHP_EOL; + +$libelle = 'Programmes'; + +echo 'VACUUM '; +SMETI_db::removePlugin($libelle); +echo 'OK'.PHP_EOL; + +echo "Ajout du plugin '$libelle' "; +SMETI_db::addPlugin($libelle); +echo 'OK'.PHP_EOL; + +echo "Plugin courant : '$libelle' "; +SMETI_db::setCurPlugin($libelle); +echo 'OK'.PHP_EOL; + +echo "Ajout d'une racine: '$libelle' "; +// Ajouter un item +SMETI_db::$libelle = $libelle; +SMETI_db::$code = 'PROG'; +SMETI_db::$req1->execute(); +SMETI_db::$item = SMETI_db::$pdo->lastInsertId(); +// Ajouter un lien sur cet item +SMETI_db::$link = 0; +SMETI_db::$req2->execute(); +SMETI_db::$item = SMETI_db::$pdo->lastInsertId(); +// Positionner ce lien comme parent +SMETI_db::$parent = SMETI_db::$item; +echo 'OK'.PHP_EOL; + +$pile_index = 0; +$pile_code[$pile_index] = SMETI_db::$code; +$pile_item[$pile_index] = SMETI_db::$item; + +$pile_index += 1; +$pile_code[$pile_index] = ''; +$pile_item[$pile_index] = 0; + +echo 'Chargement des données'.PHP_EOL; +$counter = 0; +$shipments = json_decode(file_get_contents("../data/json/BMO/07_PROGRAMMES.json"), true); +$nb_shipments = count($shipments); +foreach($shipments as $element) +{ + // Gestion d'une barre de progression + progressBar($counter, $nb_shipments); + if (5000 == $counter++) break; + // Gestion d'une barre de progression + + // A-t-on changé de collectivité ? + if ($element['collcod'] != $pile_code[$pile_index]) + { + // chercher la collectivité + $n = count($coll); + for($i=0;$i<$n;$i++) + if ($element['collcod'] == $coll[$i][0]) + break; + if ($i == $n) continue; + // Revenir au niveau 'plugin' de la pile + $pile_index -= 1; + + // Ajout d'un lien (symbolique) + SMETI_db::$link = 1; + SMETI_db::$item = $coll[$i][1]; + SMETI_db::$req2->execute(); + // Ajout d'un noeud + SMETI_db::$child = SMETI_db::$pdo->lastInsertId(); + SMETI_db::$parent = $pile_item[$pile_index]; + SMETI_db::$req3->execute(); + + // Conserver ce noeud dans la pile + $pile_index += 1; + $pile_code[$pile_index] = $element['collcod']; + $pile_item[$pile_index] = SMETI_db::$child; + } + + // Rajouter le programme + SMETI_db::$code = $element['prognum']; + SMETI_db::$libelle = $element['proglib']; + SMETI_db::$req1->execute(); + // Rajouter un lien + SMETI_db::$item = SMETI_db::$pdo->lastInsertId(); + SMETI_db::$link = 0; + SMETI_db::$req2->execute(); + // Rajouter un noeud + SMETI_db::$child = SMETI_db::$pdo->lastInsertId(); + SMETI_db::$parent = $pile_item[$pile_index]; + SMETI_db::$req3->execute(); +} + +// Enlever la barre de progression +clearLine(); +// Enlever la barre de progression + +echo 'OK'.PHP_EOL; + +?> diff --git a/bin/init_db.sh b/bin/init_db.sh new file mode 100755 index 0000000..c6a3753 --- /dev/null +++ b/bin/init_db.sh @@ -0,0 +1,6 @@ +rm -f ../data/$1 +sqlite3 ../data/$1 < ../data/SQL/init.sql +for script in import_??_*.php +do + php $script ../data/$1 +done diff --git a/bin/smeti_db.inc.php b/bin/smeti_db.inc.php new file mode 100644 index 0000000..a9a4389 --- /dev/null +++ b/bin/smeti_db.inc.php @@ -0,0 +1,110 @@ +setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); + self::$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // ERRMODE_WARNING | ERRMODE_EXCEPTION | ERRMODE_SILENT + } catch(Exception $e) { + echo "Impossible d'accéder à la base de données SQLite : ".$e->getMessage(); + die(); + } + self::$req0 = self::$pdo->prepare('INSERT INTO plugins(libelle) VALUES(:libelle)'); + self::$req0->bindParam('libelle', self::$libelle, PDO::PARAM_STR); + + self::$req1 = self::$pdo->prepare('INSERT INTO items(plugin, code, libelle) VALUES(:plugin, :code, :libelle)'); + self::$req1->bindParam('plugin', self::$plugin, PDO::PARAM_INT); + self::$req1->bindParam('code', self::$code, PDO::PARAM_STR); + self::$req1->bindParam('libelle', self::$libelle, PDO::PARAM_STR); + + self::$req2 = self::$pdo->prepare('INSERT INTO links(link, item) VALUES(:link, :item)'); + self::$req2->bindParam('link', self::$link, PDO::PARAM_INT); + self::$req2->bindParam('item', self::$item, PDO::PARAM_INT); + + self::$req3 = self::$pdo->prepare('INSERT INTO nodes(child, parent, rank) VALUES(:child, :parent, :rank)'); + self::$req3->bindParam('child', self::$child, PDO::PARAM_INT); + self::$req3->bindParam('parent', self::$parent, PDO::PARAM_INT); + self::$req3->bindParam('rank', self::$rank, PDO::PARAM_INT); + } + + static function removePlugin($plugin_name) + { + $select_clause="SELECT id FROM plugins WHERE libelle = '$plugin_name'"; + // Parce que je n'ai pas réussi à faire correctement marcher le DELETE CASCADE ! + self::$pdo->exec("DELETE FROM nodes WHERE parent IN (SELECT DISTINCT id FROM items WHERE plugin IN ( $select_clause ))"); + self::$pdo->exec("DELETE FROM nodes WHERE child IN (SELECT DISTINCT id FROM items WHERE plugin IN ( $select_clause ))"); + self::$pdo->exec("DELETE FROM links WHERE item IN (SELECT DISTINCT id FROM items WHERE plugin IN ( $select_clause ))"); + self::$pdo->exec("DELETE FROM links WHERE link = 1 AND id IN ( SELECT id FROM v_items_tree WHERE parent IS NULL)"); + self::$pdo->exec("DELETE FROM items WHERE plugin IN ( $select_clause)"); + self::$pdo->exec("DELETE FROM plugins WHERE libelle = '$plugin_name' "); + // Parce que je n'ai pas réussi à faire correctement marcher le DELETE CASCADE ! + self::$pdo->exec('VACUUM'); + } + + static function addPlugin($plugin_name) + { + self::$libelle = $plugin_name; + self::$req0->execute(); + self::$plugin = self::$pdo->lastInsertId(); + } + + static function setCurPlugin($plugin_name) + { + $sql = self::$pdo->prepare("SELECT id FROM plugins WHERE libelle = '$plugin_name'"); + $sql->execute(); + $row = $sql->fetch(PDO::FETCH_NUM); + self::$plugin = $row[0]; + } +} + +?>