SMETI store ITEMS
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 

48 строки
1.6 KiB

<?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
 */
?>