SMETI store ITEMS
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

230 lines
6.8 KiB

<?php
function tri_chap_1($a , $b)
{
    if ('S'.$a['code'] < 'S'.$b['code']) return -1;
    if ('S'.$a['code'] > '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
?>