Compare commits

..

20 Commits

Author SHA1 Message Date
tibo
fcd073c82a correction sur les comptyeurs de tailel de tableaux 2020-03-05 10:11:01 +00:00
tibo
6110bb4cad ajout import fonctions step 2 2020-03-04 13:09:17 +00:00
tibo
44bccfc692 ajout import focnitons step 1 2020-03-04 11:32:46 +00:00
tibo
5fc5065b6e nb_shipments dans import collectivités 2020-03-03 12:00:51 +00:00
tibo
24c3342ec1 correction gestion correcte progressBar 2020-03-03 11:58:42 +00:00
tibo
b0aaec1c91 ajout import des chapitres 2020-03-03 11:52:52 +00:00
tibo
61b873ae4f correction code marché 2020-03-03 07:41:27 +00:00
tibo
8e8136a818 ajout import marchés 2020-03-03 07:27:29 +00:00
tibo
093df5de53 les racines sont triées par plugin 2020-03-03 07:10:36 +00:00
tibo
603b76e1aa init_db stop on error 2020-03-03 07:08:47 +00:00
tibo
6f9290dfaa ignorer les changements de données 2020-03-03 07:06:30 +00:00
tibo
cc2ee726c0 correction removePlugin 2020-03-02 11:09:22 +00:00
tibo
d812ff0a69 rajouter la racine des ul dans index.html 2020-03-01 17:49:17 +00:00
tibo
cb7337dd4f faute de frappe enveloppes 2020-03-01 17:36:41 +00:00
tibo
a545400b27 enlever la suppression des parents 2020-03-01 17:34:42 +00:00
tibo
c696199ee6 ajout des phasages sur enveloppes 2020-03-01 17:32:21 +00:00
tibo
1f031e427a replace ul by div in index.html 2020-03-01 17:20:35 +00:00
tibo
b3c7a26e3b add api directory 2020-03-01 13:55:42 +00:00
tibo
be0fde7439 add two new import 2020-03-01 10:43:47 +00:00
tibo
5a988b4f59 rename import programmes 2020-03-01 10:12:02 +00:00
17 changed files with 895 additions and 9 deletions

48
api/credits.php Normal file
View File

@@ -0,0 +1,48 @@
<?php
/*
* Donne tous les parents d'un item, comme parents.php
* Rajoute une jointure sur les crédits
* Cela permet de r&écupérer le montant, et la réalisation
* Le montant est affecté directement à l'item
* La réalisation est la somem des crédits des enfants de l'item
*/
header('Content-Type: application/json');
try{
$pdo = new PDO('sqlite:../data/base.sqlite');
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
$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();
}
$where_clause = 'WHERE 1 = 1 ';
$where_clause .= 'AND item = '.$_REQUEST['item'];
$sql = '
WITH arbre (id, level, path, realisation) AS(
SELECT parent, 0, '['|| tree.parent || ']', (SELECT SUM(montant) FROM credit WHERE item in (SELECT item FROM tree st WHERE st.parent = tree.parent))
FROM tree
WHERE_CLAUSE
UNION ALL
SELECT parent, arbre.level+1, arbre.path||'['||tree.parent||']',(SELECT SUM(montant) FROM credit WHERE item in (SELECT item FROM tree st WHERE st.parent = tree.parent))
FROM tree
INNER JOIN arbre ON arbre.id = tree.item
) SELECT arbre.*, item.code, item.title, credit.montant FROM arbre
INNER JOIN item ON arbre.id = item.id
LEFT JOIN credit ON credit.item = item.id
ORDER BY path
';
$query = $pdo->prepare(str_replace('WHERE_CLAUSE',$where_clause,$sql));
$query->execute();
echo json_encode( $query->fetchAll(PDO::FETCH_ASSOC));
/*
* TODO : Cumuler les réalisatiosn sur les parents lorsque ceux-ci n'en n'ont pas
*/
?>

39
api/get.php Normal file
View File

@@ -0,0 +1,39 @@
<?php
header('Content-Type: application/json');
try{
$pdo = new PDO('sqlite:../data/base.sqlite');
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
$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();
}
$where_clause = 'WHERE 1 = 1';
//$where_clause .= ' AND path LIKE "%[1]%"';
$sql = '
WITH arbre (parent, id, link, code, name, level, path) AS (
SELECT 0, id, link, code, libelle, 0, "{" || plugin || "} [" || id || "]"
FROM v_items_tree WHERE parent IS NULL
UNION ALL
SELECT
v_items_tree.parent,
v_items_tree.id,
v_items_tree.link,
v_items_tree.code,
v_items_tree.libelle,
arbre.level+1,
arbre.path || " {" || v_items_tree.rank || "} [" || v_items_tree.id || "]"
FROM v_items_tree
INNER JOIN arbre ON v_items_tree.parent=arbre.id
) SELECT parent, id, link, code, name,level,path FROM arbre WHERE_CLAUSE ORDER BY path
';
$query = $pdo->prepare(str_replace('WHERE_CLAUSE',$where_clause,$sql));
$query->execute();
echo json_encode( $query->fetchAll(PDO::FETCH_ASSOC));
?>

35
api/parents.php Normal file
View File

@@ -0,0 +1,35 @@
<?php
header('Content-Type: application/json');
try{
$pdo = new PDO('sqlite:../data/base.sqlite');
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
$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();
}
$where_clause = 'WHERE 1 = 1 ';
$where_clause .= 'AND item = '.$_REQUEST['item'];
$sql = '
WITH arbre (id,level, path) AS(
SELECT parent, 0, '['|| tree.parent || ']'
FROM tree
WHERE_CLAUSE
UNION ALL
SELECT parent, arbre.level+1, arbre.path||'['||tree.parent||']'
FROM tree
INNER JOIN arbre ON arbre.id = tree.item
) SELECT arbre.*, item.code, item.title FROM arbre
INNER JOIN item ON arbre.id = item.id
ORDER BY path DESC
';
$query = $pdo->prepare(str_replace('WHERE_CLAUSE',$where_clause,$sql));
$query->execute();
echo json_encode( $query->fetchAll(PDO::FETCH_ASSOC));
?>

View File

@@ -32,8 +32,15 @@ SMETI_db::$parent = SMETI_db::$item;
echo 'OK'.PHP_EOL; echo 'OK'.PHP_EOL;
$shipments = json_decode(file_get_contents("../data/json/BMO/01_COLLECTIVITES.json"), true); $shipments = json_decode(file_get_contents("../data/json/BMO/01_COLLECTIVITES.json"), true);
$counter = 0;
$nb_shipments = count($shipments);
foreach($shipments as $element) foreach($shipments as $element)
{ {
// Gestion d'une barre de progression
progressBar($counter, $nb_shipments);
$counter += 1;
// Gestion d'une barre de progression
// Ajouter un item // Ajouter un item
SMETI_db::$code = $element['collcod']; SMETI_db::$code = $element['collcod'];
SMETI_db::$libelle = $element['collnom']; SMETI_db::$libelle = $element['collnom'];
@@ -49,5 +56,9 @@ foreach($shipments as $element)
SMETI_db::$child = SMETI_db::$item; SMETI_db::$child = SMETI_db::$item;
SMETI_db::$req3->execute(); SMETI_db::$req3->execute();
} }
// Enlever la barre de progression
clearLine();
echo 'OK'.PHP_EOL;
// Enlever la barre de progression
?> ?>

View File

@@ -54,7 +54,7 @@ foreach($shipments as $element)
{ {
// Gestion d'une barre de progression // Gestion d'une barre de progression
progressBar($counter, $nb_shipments); progressBar($counter, $nb_shipments);
if (5000 == $counter++) break; $counter += 1;
// Gestion d'une barre de progression // Gestion d'une barre de progression
// A-t-on changé de collectivité ? // A-t-on changé de collectivité ?

View File

@@ -16,8 +16,6 @@ echo 'VACUUM ';
SMETI_db::removePlugin($libelle); SMETI_db::removePlugin($libelle);
echo 'OK'.PHP_EOL; echo 'OK'.PHP_EOL;
die;
echo "Ajout du plugin '$libelle' "; echo "Ajout du plugin '$libelle' ";
SMETI_db::addPlugin($libelle); SMETI_db::addPlugin($libelle);
echo 'OK'.PHP_EOL; echo 'OK'.PHP_EOL;
@@ -56,7 +54,7 @@ foreach($shipments as $element)
{ {
// Gestion d'une barre de progression // Gestion d'une barre de progression
progressBar($counter, $nb_shipments); progressBar($counter, $nb_shipments);
if (5000 == $counter++) break; $counter += 1;
// Gestion d'une barre de progression // Gestion d'une barre de progression
// A-t-on changé de collectivité ? // A-t-on changé de collectivité ?

View File

@@ -54,7 +54,7 @@ foreach($shipments as $element)
{ {
// Gestion d'une barre de progression // Gestion d'une barre de progression
progressBar($counter, $nb_shipments); progressBar($counter, $nb_shipments);
if (5000 == $counter++) break; $counter += 1;
// Gestion d'une barre de progression // Gestion d'une barre de progression
// A-t-on changé de collectivité ? // A-t-on changé de collectivité ?

View File

@@ -0,0 +1,157 @@
<?php
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 = 'Enveloppes';
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 = 'ENVE';
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/08_ENVELOPPES.json"), true);
$nb_shipments = count($shipments);
foreach($shipments as $element)
{
// Gestion d'une barre de progression
progressBar($counter, $nb_shipments);
$counter += 1;
// 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['enveann'] != $pile_code[$pile_index])
{
// Dépiler
$pile_index -= 1;
// Rajouter un item
SMETI_db::$code = 'ENVEAN'.$pile_code[$pile_index].$element['enveann'];
SMETI_db::$libelle = 'Millésime '. $element['enveann'];
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['enveann'];
$pile_item[$pile_index] = SMETI_db::$child;
}
// Rajouter un item
SMETI_db::$code = $element['envecod'];
SMETI_db::$libelle = $element['envelib'];
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();
SMETI_db::$parent = SMETI_db::$child;
// Rajouer un phasage par année
for ($i=0;$i<$element['envenbrann'];$i++)
{
$phasage = $element['enveann']+$i;
// Rajouter un item
SMETI_db::$code = $element['envecod'].$phasage;
SMETI_db::$libelle = $element['envecod'].' Phasage '.$phasage;;
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::$req3->execute();
}
}
// Enlever la barre de progression
clearLine();
// Enlever la barre de progression
echo 'OK'.PHP_EOL;
?>

142
bin/import_09_marches.php Normal file
View File

@@ -0,0 +1,142 @@
<?php
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 = 'Marchés';
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 = 'MARC';
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/09_MARCHES.json"), true);
$nb_shipments = count($shipments);
foreach($shipments as $element)
{
// Gestion d'une barre de progression
progressBar($counter, $nb_shipments);
$counter += 1;
// Gestion d'une barre de progression
// On ne reprend pas les vieux marchés
if (($element['marcdatlim']/10000) < 2019) continue;
// 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['marcann'] != $pile_code[$pile_index])
{
// Dépiler
$pile_index -= 1;
// Rajouter un item
SMETI_db::$code = 'MARC'.$pile_code[$pile_index].$element['marcann'];
SMETI_db::$libelle = 'Marchés '.$element['marcann'];
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['marcann'];
$pile_item[$pile_index] = SMETI_db::$child;
}
// Rajouter un item
SMETI_db::$code = sprintf("%04d%06d",$element['marcnum'],$element['marcnum']);
SMETI_db::$libelle = $element['marcobj'];
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;
?>

View File

@@ -58,7 +58,6 @@ foreach($shipments as $element)
{ {
// Gestion d'une barre de progression // Gestion d'une barre de progression
progressBar($counter, $nb_shipments); progressBar($counter, $nb_shipments);
if (5000 == $counter++) break;
// Gestion d'une barre de progression // Gestion d'une barre de progression
// A-t-on changé de collectivité ? // A-t-on changé de collectivité ?

240
bin/import_11_chapitres.php Normal file
View File

@@ -0,0 +1,240 @@
<?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();
// Rajouter un noeud
SMETI_db::$child = SMETI_db::$item;
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;
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();
// Rajouter un noeud
SMETI_db::$child = SMETI_db::$item;
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;
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);
$counter += 1;
// 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();
echo 'OK'.PHP_EOL;
// Enlever la barre de progression
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);
$counter += 1;
// 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::$child;
// Conserver l'instruction dans un tableau
$instructions[] = [SMETI_db::$code, SMETI_db::$item];
// 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::$child;
$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
?>

202
bin/import_12_fonctions.php Normal file
View File

@@ -0,0 +1,202 @@
<?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;
return tri_chap_1($a , $b);
}
require_once('smeti_db.inc.php');
SMETI_db::init();
// Activer le plugin
$libelle = 'Instructions Comptables';
echo "Plugin courant : '$libelle' ";
SMETI_db::setCurPlugin($libelle);
echo 'OK'.PHP_EOL;
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);
$nb_coll = count($coll);
echo 'OK'.PHP_EOL;
echo 'Chargement instructions comptables ';
$sql = SMETI_db::$pdo->prepare("SELECT code, id, libelle FROM v_items_tree WHERE parent in ( SELECT id FROM v_items WHERE code = 'INSC' )");
$sql->execute();
$instructions = $sql->fetchAll(PDO::FETCH_NUM);
$nb_instructions = count($instructions);
echo 'OK'.PHP_EOL;
// Se positonner sur l'instruction globale
for($i=0;$i<$nb_instructions;$i++)
if ($instructions[$i][0] == 'INSCGLOB')
break;
if ($i == $nb_instructions) die;
$pile_index = 0;
$pile_code[$pile_index] = $instructions[$i][0];
$pile_item[$pile_index] = $instructions[$i][1];
$libelle = 'Fonctions';
echo "Ajout d'une racine: '$libelle' ";
// Ajouter un item
SMETI_db::$libelle = $libelle;
SMETI_db::$code = 'INSCGLOBFONC';
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();
// Rajouter un noeud
SMETI_db::$child = SMETI_db::$item;
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;
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/05_FONCTIONS.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
$fonctions = [];
$fonctions[] = ['BIDON','BIDON'];
$record = 0;
foreach($shipments as $element)
{
// Gestion d'une barre de progression
progressBar($counter, $nb_shipments);
$counter += 1;
// 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($fonctions);
for($i=0;$i<$n;$i++)
if ($fonctions[$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();
$fonctions[] = [$element['code'], SMETI_db::$libelle, SMETI_db::$item];
$record += 1;
}
}
// Enlever la barre de progression
clearLine();
echo 'OK'.PHP_EOL;
// Enlever la barre de progression
echo 'Chargement des données (deuxième passe)'.PHP_EOL;
// Décliner par instruction
// Commencer par empiler deux valeurs vides
$pile_index += 1;
$pile_code[$pile_index] = '';
$pile_item[$pile_index] = 0;
$nb_fonctions = count($fonctions);
usort($shipments,'tri_chap_2');
$counter = 0;
$record = 0;
foreach($shipments as $element)
{
// Gestion d'une barre de progression
progressBar($counter, $nb_shipments);
$counter += 1;
// Gestion d'une barre de progression
if (!isset($element['code'])) continue;
if (!isset($element['libelle'])) continue;
if ($element['instruction'] != $pile_code[$pile_index-1])
{
// Se positonner sur l'instruction
for($i=0;$i<$nb_instructions;$i++)
if ($instructions[$i][0] == $element['instruction'])
break;
if ($i == $nb_instructions) continue;
$pile_index = 0;
$pile_code[$pile_index] = $instructions[$i][0];
$pile_item[$pile_index] = $instructions[$i][1];
// Rajouter un item pour les fonctions dans cette instruction
SMETI_db::$code = 'FONC'.$element['instruction'];
SMETI_db::$libelle = 'Fonctions '. $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::$child;
$last ='';
}
if ($element['code'] == $last) continue;
for($i=0;$i<$nb_fonctions;$i++)
if ($fonctions[$i][0] == 'C'.$element['code'])
break;
if ($i == $nb_fonctions) continue;
// Rajouter un lien vers la fonction
SMETI_db::$item = $fonctions[$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'];
$record += 1;
}
// Enlever la barre de progression
clearLine();
echo 'OK'.PHP_EOL;
// Enlever la barre de progression
?>

View File

@@ -3,4 +3,8 @@ sqlite3 ../data/$1 < ../data/SQL/init.sql
for script in import_??_*.php for script in import_??_*.php
do do
php $script ../data/$1 php $script ../data/$1
if [ $? -ne 0 ];
then
break
fi
done done

View File

@@ -81,8 +81,8 @@ class SMETI_db
{ {
$select_clause="SELECT id FROM plugins WHERE libelle = '$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 ! // 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 parent IN (SELECT DISTINCT id FROM v_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 nodes WHERE child IN (SELECT DISTINCT id FROM v_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 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 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 items WHERE plugin IN ( $select_clause)");

1
data/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
*.sqlite

Binary file not shown.

View File

@@ -11,7 +11,11 @@
<h2>SMETI store ITEMS</h2> <h2>SMETI store ITEMS</h2>
<ul class="ul_no_list" id="smeti_list"></ul> <!--<ul class="ul_no_list" id="smeti_list"></ul>-->
<div id="smeti_list">
Loading data ...
</div>
<script> <script>
/* /*
@@ -39,9 +43,15 @@ function afficherArbre()
var heritage = [ 'XXX' ]; var heritage = [ 'XXX' ];
var m14_ul = [ document.getElementById('smeti_list') ]; var m14_ul = [ document.getElementById('smeti_list') ];
var m14_span = [ null ]; var m14_span = [ null ];
var ul = document.createElement('ul');
while(m14_ul[0].firstChild) m14_ul[0].removeChild(m14_ul[0].firstChild); while(m14_ul[0].firstChild) m14_ul[0].removeChild(m14_ul[0].firstChild);
// Ajouter la racine des UL
ul.setAttribute('class','ul_no_list');
m14_ul[m14_ul.length-1].appendChild(ul);
m14_ul.push(ul);
liste_instructions.forEach(function(element){ liste_instructions.forEach(function(element){
// if (element.instruction != 'M14') return true; // if (element.instruction != 'M14') return true;
// if (element.type != courant) return true; // if (element.type != courant) return true;