diff --git a/bin/import_11_nomenclatures.php b/bin/import_11_nomenclatures.php new file mode 100644 index 0000000..af04ed7 --- /dev/null +++ b/bin/import_11_nomenclatures.php @@ -0,0 +1,230 @@ + 'S'.$b['code']) return 1; + + return 0; +} + +function tri_chap_2($a , $b) +{ + if ('S'.$a['instruction'] < 'S'.$b['instruction']) return -1; + if ('S'.$a['instruction'] > 'S'.$b['instruction']) return 1; + + if ('S'.$a['code'] < 'S'.$b['code']) return -1; + if ('S'.$a['code'] > 'S'.$b['code']) return 1; + + return 0; +} + +require_once('smeti_db.inc.php'); + +SMETI_db::init(); + +echo 'Chargement collectivités '; +$sql = SMETI_db::$pdo->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 = 'Instructions Comptables'; + +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 = 'INSC'; +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; + +$libelle = 'Toutes Instructions'; +echo "Ajout d'une racine: '$libelle' "; +// Ajouter un item +SMETI_db::$libelle = $libelle; +SMETI_db::$code = 'INSCGLOB'; +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; + +$libelle = 'Chapitres'; +echo "Ajout d'une racine: '$libelle' "; +// Ajouter un item +SMETI_db::$libelle = $libelle; +SMETI_db::$code = 'INSCGLOBCHAP'; +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; + +echo 'Chargement des données (première passe)'.PHP_EOL; +$counter = 0; +$shipments = json_decode(file_get_contents("../data/json/BMO/04_CHAPITRES.json"), true); +$nb_shipments = count($shipments); +usort($shipments,'tri_chap_1'); +// On conserve les chapitres dans un tableau +// Ils seront réutilisés plus tard +$chapitres = []; +$chapitres[] = ['BIDON','BIDON']; +foreach($shipments as $element) +{ + // Gestion d'une barre de progression + progressBar($counter, $nb_shipments); + // Gestion d'une barre de progression + + // On ne tient pas compte des données incorrectes + if (!isset($element['code'])) continue; + if (!isset($element['libelle'])) continue; + + $n = count($chapitres); + for($i=0;$i<$n;$i++) + if ($chapitres[$i][0] == $element['code']) + break; + if ($i == $n) + { + // Rajouter un item + SMETI_db::$code = $element['code']; + SMETI_db::$libelle = $element['libelle']; + 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(); + + $chapitres[] = [SMETI_db::$code, SMETI_db::$libelle, SMETI_db::$item]; + } +} + +// Enlever la barre de progression +clearLine(); +// Enlever la barre de progression + +echo 'OK'.PHP_EOL; +echo 'Chargement des données (deuxième passe)'.PHP_EOL; +$counter = 0; + +// Décliner par instruction +// Commencer par empiler deux valeurs vides +$pile_index += 1; +$pile_code[$pile_index] = ''; +$pile_item[$pile_index] = 0; + +$pile_index += 1; +$pile_code[$pile_index] = ''; +$pile_item[$pile_index] = 0; + +usort($shipments,'tri_chap_2'); +$n = count($chapitres); +foreach($shipments as $element) +{ + // Gestion d'une barre de progression + progressBar($counter, $nb_shipments); + // Gestion d'une barre de progression + + if (!isset($element['code'])) continue; + if (!isset($element['libelle'])) continue; + + if ($element['instruction'] != $pile_code[$pile_index-1]) + { + $pile_index = 0; + + // Rajouter un item pour l'instruction + SMETI_db::$code = $element['instruction']; + SMETI_db::$libelle = 'Instruction '. $element['instruction']; + 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(); + $pile_index += 1; + $pile_code[$pile_index] = SMETI_db::$code; + $pile_item[$pile_index] = SMETI_db::$item; + // Conserver l'instruction dans un tableau + $instructions[] = [SMETI_db::$code, SMETI_db::$item]; + + $code = 'CHAP'.$element['instruction']; + $libelle = 'Chapitres '.$element['instruction']; + // Rajouter un item pour les chapitres + SMETI_db::$code = 'CHAP'.$element['instruction']; + SMETI_db::$libelle = 'Chapitres '. $element['instruction']; + 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(); + $pile_index += 1; + $pile_code[$pile_index] = SMETI_db::$code; + $pile_item[$pile_index] = SMETI_db::$item; + $last =''; + } + + if ($element['code'] == $last) continue; + for($i=0;$i<$n;$i++) + if ($chapitres[$i][0] == $element['code']) + break; + if ($i == $n) continue; + + // Rajouter un lien vers le chapitre + SMETI_db::$item = $chapitres[$i][2]; + SMETI_db::$link = 1; + 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(); + + // NB : on pourrait s'en passer en plaçant le chapitre dans la pile + $last = $element['code']; +} + +// Enlever la barre de progression +clearLine(); +echo 'OK'.PHP_EOL; +// Enlever la barre de progression + +?>