GSG – Mon stock est passé a zéro.

GSG Gestion de Granulés bois

EDITO 12/10/2018 – Seulement pour les versions inférieurs a v2.0

Vous êtes nombreux a me demander chaque année pourquoi mon stock de GSG est passé à zéro ou pourquoi il est négatif au début janvier. La réponse est simple. La période de calcule, comme vous avez pu remarqué, est de Janvier à Décembre de l’année en cours. Pour avoir un suivie de stock il vous faut créer la nouvelle période et reporté le nombre de sacs restants dans reliquat. Cela vous n’empêche pas d’ajouter ou modifier par la suite votre stock en cours. Un petit tuto en image explique mieux la procédure a suivre.

Procédure de création de nouvelle période
Gestion de Chauffage / Stock de Granulés (GSG).

  1. Relever la quantité de sacs restant dans onglet Statistiques en sélectionnant l’année précédente.
    Nous somme en 2017 donc nous sélectionnons 2016 et obtenons 135
    GSG_sacs_restants
  2. Maintenant il faut saisir cette quantité dans la case Reliquat de l’onglet administration/paramétrage
    Dans la case Stock vous pouvez saisir la quantité acheté en 2017 ou 0
    GSG_parametrage_administration
  3. Il vous reste d’appuyer sur le bouton Nouveau.
    GSG_parametrage_administration

Si plus tard vous faites acquisition de quelques sacs de granulés vous pouvez toujours saisir cette quantité dans la case stock puis appuyer sur le bouton MAJ pour mettre à jour votre Stock total.
GSG_parametrage_administration

💡  Attention de bien appuyer sur MAJ et NON Nouveau.

Si vous avez des questions n’hésitez pas de les poser ici 🙂

Articles Similaires

13 Thoughts to “GSG – Mon stock est passé a zéro.”

  1. mikebzh44

    Bonjour.

    Je vais prochainement être équipé d’un poêle à pellets et je viens d’installer ton logiciel sur une machine de test.

    Tout est OK sauf qu’à l’ouverture de la page principale, j’ai des messages d’erreur :

    ( ! ) Notice: Undefined index: json in C:\wamp\www\gsg\config\json.php on line 9
    Call Stack
    # Time Memory Function Location
    1 0.0011 410248 {main}( ) ..\index.php:0
    2 0.0030 520416 include_once( ‘C:\wamp\www\gsg\config\json.php’ ) ..\index.php:8

    ( ! ) Notice: Undefined index: an in C:\wamp\www\gsg\config\json.php on line 11
    Call Stack
    # Time Memory Function Location
    1 0.0011 410248 {main}( ) ..\index.php:0
    2 0.0030 520416 include_once( ‘C:\wamp\www\gsg\config\json.php’ ) ..\index.php:8

    ( ! ) Notice: Undefined variable: Tannee in C:\wamp\www\gsg\config\json.php on line 136
    Call Stack
    # Time Memory Function Location
    1 0.0011 410248 {main}( ) ..\index.php:0
    2 0.0030 520416 include_once( ‘C:\wamp\www\gsg\config\json.php’ ) ..\index.php:8

    ( ! ) Notice: Undefined variable: Ttotalconso in C:\wamp\www\gsg\config\json.php on line 137
    Call Stack
    # Time Memory Function Location
    1 0.0011 410248 {main}( ) ..\index.php:0
    2 0.0030 520416 include_once( ‘C:\wamp\www\gsg\config\json.php’ ) ..\index.php:8

    ( ! ) Notice: Undefined variable: Ttotalcout in C:\wamp\www\gsg\config\json.php on line 138
    Call Stack
    # Time Memory Function Location
    1 0.0011 410248 {main}( ) ..\index.php:0
    2 0.0030 520416 include_once( ‘C:\wamp\www\gsg\config\json.php’ ) ..\index.php:8

    Pour les 2 premières erreurs, j’ai corrigé le début du fichier json.php :

    require(‘config.inc.php’);
    if (isset($_GET[‘json’]))
    $json = htmlspecialchars($_GET[“json”]);
    else
    $json=0;
    //on determine l’année en cours par deffaut
    if (isset($_GET[‘annees_list’]))
    $annees_list = htmlspecialchars($_GET[“annees_list”]);
    else
    $annees_list=date(‘Y’);

    Pour les 3 autres erreurs, c’est juste que tu utilises des variables (Tannee, Ttotalconso, Ttotalcout) pour concaténer les données mais elles ne sont pas initialisées.

    De plus, en ajoutant les séparateurs ‘,’, tu es obligé de faire tes substr pour virer la dernière virgule qui ne sert à rien.

    Voilà, un code plus propre :

    $TabAnnee = array();
    $TabConso = array();
    $TabCout = array();
    $TabHisto = mysql_query(“SELECT * FROM `Cout_consomme_an` “, $Conn) or die(mysql_error());
    $nbr_ligne = mysql_num_rows($TabHisto);
    while ($r = mysql_fetch_array($TabHisto)) {
    $TabAnnee[] = $r[‘annee’];
    $TabConso[] = $r[‘totalconso’];
    $TabCout[] = $r[‘totalcout’];
    }
    $Tannee=implode(‘, ‘, $TabAnnee);
    $Ttotalconso=implode(‘, ‘, $TabConso);
    $Ttotalcout=implode(‘, ‘, $TabCout);

    1. R.Syrek

      Merci pour ta contribution.
      je vais le modifier

  2. mikebzh44

    Sinon, pour pinailler, tu utilises souvent (dans cet article ou dans les pages PHP), le terme calcul avec e (calculE ou calculEs), il n’y en a pas.

    Pour remplir la combo-box des années dans la page des statistiques :

    index.php :

    <?php
    $fin = count($annees);
    $flag_an = 0;
    foreach ($annees as $value)
    {
    if ($value != $annees_list)
    echo '’.$value.” ;
    else
    {
    echo ”.$value.” ;
    $flag_an = 1;
    }
    }
    if ($flag_an == 0)
    echo ”.$annees_list.” ;
    ?>

    json.php :

    //Creation de tableau annees avec les valeurs uniques
    $res = mysql_query(“SELECT DISTINCT YEAR(`time`) AS annee FROM `granules_conso`”, $Conn) or die(mysql_error());
    $annees = array();
    while($data=mysql_fetch_array($res))
    $annees[] = $data[“annee”];

    et aussi :

    //on détermine l’année en cours par defaut
    if (isset($_GET[‘an’]))
    $annees_list = htmlspecialchars($_GET[“an”]);
    else
    $annees_list=date(‘Y’);

  3. mikebzh44

    Salut.

    Tiens, une version corrigée et optimisée (pour ne faire que le minimum de requêtes SQL) :

    Edit: Mise à jour en téléchargement.

  4. mikebzh44

    Correction du fichier verif.php pour ne pas avoir d’erreur lors de l’extraction des paramètres de l’URL selon le type de formulaire validé :

    <?php
    /*****************************************************************************/
    /*** File : verif.inc.php ***/
    /*** Author : R.SYREK ***/
    /*** WWW : http://domotique-home.fr ***/
    /*** Note : Configuration file ***/
    /*****************************************************************************/

    include_once('config/config.inc.php');

    $msg = htmlentities($_POST['msg']);

    if ($msg == 1)
    {
    $stock = htmlspecialchars($_GET["stock"]);
    $prixsac = htmlentities($_POST['prixsac']);
    $reliquat = htmlentities($_POST['reliquat']);
    if(empty($stock))
    {
    echo "alert(\”Veuillez renseigner le champ \253Nombre de sacs achet\351s\273.\”);”;
    header (“Refresh: 0;URL=admin.php”);
    exit();
    }
    if(empty($prixsac))
    {
    echo “alert(\”Veuillez renseigner le champ \253Prix de sac\273\”);”;
    header (“Refresh: 0;URL=admin.php”);
    exit();
    }
    try
    {
    $bdd = new PDO(‘mysql:host=’.$hostname.’;dbname=’.$database, $username, $password);
    }
    catch(Exception $e)
    {
    die(‘Erreur : ‘.$e->getMessage());
    }
    $reponse = $bdd->query(“SELECT MAX(id) as DId FROM domotique_granules_stock”);
    $donnees= $reponse->fetch();
    $lastID = $donnees[‘DId’];
    $bdd->exec(“UPDATE domotique_granules_stock SET stockIni = $stock, prixsac = $prixsac, reliquat = $reliquat WHERE id = $lastID”);
    echo “alert(\”Les donn\351es ont bien \351t\351 enregistr\351es.\”);”;
    header (“Refresh: 0;URL=admin.php”);
    }

    if ($msg == 11)
    {
    $stock = htmlspecialchars($_GET[“stock”]);
    $prixsac = htmlentities($_POST[‘prixsac’]);
    $reliquat = htmlentities($_POST[‘reliquat’]);
    if(empty($stock))
    {
    echo “alert(\”Veuillez renseigner le champ \253Nombre de sacs achet\351s\273.\”);”;
    header (“Refresh: 0;URL=admin.php”);
    exit();
    }
    if(empty($prixsac))
    {
    echo “alert(\”Veuillez renseigner le champ \253Prix de sac\273\”);”;
    header (“Refresh: 0;URL=admin.php”);
    exit();
    }
    try
    {
    $bdd = new PDO(‘mysql:host=’.$hostname.’;dbname=’.$database, $username, $password);
    }
    catch(Exception $e)
    {
    die(‘Erreur : ‘.$e->getMessage());
    }
    $bdd->exec(“INSERT INTO domotique_granules_stock(stockIni, prixsac, reliquat) VALUES($stock, $prixsac, $reliquat)”);
    echo “alert(\”Les donn\351es ont bien \351t\351 enregistr\351es.\”);”;
    header (“Refresh: 0;URL=admin.php”);
    }

    if ($msg == 2)
    {
    $date1 = htmlentities($_POST[‘date1’]);
    $date1 = substr($date1,6,4).”-“.substr($date1,3,2).”-“.substr($date1,0,2);
    $date1 = date(‘Y-m-d’, strtotime($date1));
    $date2 = htmlentities($_POST[‘date2’]);
    $date2 = substr($date2,6,4).”-“.substr($date2,3,2).”-“.substr($date2,0,2);
    $date2 = date(‘Y-m-d’, strtotime($date2));
    $date3 = htmlentities($_POST[‘date3’]);
    $date3 = substr($date3,6,4).”-“.substr($date3,3,2).”-“.substr($date3,0,2);
    $date3 = date(‘Y-m-d’, strtotime($date3));
    try
    {
    $bdd = new PDO(‘mysql:host=’.$hostname.’;dbname=’.$database, $username, $password);
    }
    catch(Exception $e)
    {
    die(‘Erreur : ‘.$e->getMessage());
    }
    $bdd->exec(“UPDATE domotique_granules_entretiens SET regulier = ‘$date1’, mensuel = ‘$date2’, annuel = ‘$date3’ WHERE id = 1”);
    echo “alert(\”Les donn\351es ont bien \351t\351 enregistr\351es.\”);”;
    header (“Refresh: 0;URL=admin.php”);
    }

    if ($msg == 3)
    {
    $info = htmlentities($_POST[‘info’]);
    try
    {
    $bdd = new PDO(‘mysql:host=’.$hostname.’;dbname=’.$database, $username, $password);
    }
    catch(Exception $e)
    {
    die(‘Erreur : ‘.$e->getMessage());
    }
    $bdd->exec(“UPDATE domotique_granules_entretiens SET info = $info WHERE id = 1”);
    echo “alert(\”Les donn\351es ont bien \351t\351 enregistr\351es.\”);”;
    header (“Refresh: 0;URL=admin.php”);
    }

    if ($msg == 4)
    {
    $PushingBox = htmlentities($_POST[‘PushingBox’]);
    $PushingBoxTitre1 = htmlentities(addslashes($_POST[‘PushingBoxTitre1’]));
    $PushingBoxMsg1 = htmlentities(addslashes($_POST[‘PushingBoxMsg1’]));
    $PushingBoxTitre2 = htmlentities(addslashes($_POST[‘PushingBoxTitre2’]));
    $PushingBoxMsg2 = htmlentities(addslashes($_POST[‘PushingBoxMsg2’]));
    $PushingBoxTitre3 = htmlentities(addslashes($_POST[‘PushingBoxTitre3’]));
    $PushingBoxMsg3 = htmlentities(addslashes($_POST[‘PushingBoxMsg3’]));
    try
    {
    $bdd = new PDO(‘mysql:host=’.$hostname.’;dbname=’.$database, $username, $password);
    }
    catch(Exception $e)
    {
    die(‘Erreur : ‘.$e->getMessage());
    }
    $bdd->exec(“UPDATE domotique_granules_entretiens SET PushingBox = ‘$PushingBox’, PushingBoxTitre1 = ‘$PushingBoxTitre1’, PushingBoxMsg1 = ‘$PushingBoxMsg1’, PushingBoxTitre2 = ‘$PushingBoxTitre2’, PushingBoxMsg2 = ‘$PushingBoxMsg2’, PushingBoxTitre3 = ‘$PushingBoxTitre3’, PushingBoxMsg3 = ‘$PushingBoxMsg3’ WHERE id = 1”);
    echo “alert(\”Les donn\351es ont bien \351t\351 enregistr\351es.\”);”;
    header (“Refresh: 0;URL=admin.php”);
    }
    ?>

    1. R.Syrek

      Un grand merci à toi.
      J’ai ajouté tes modifications + quelques modifs de mon coté.
      Le fichier est en téléchargement en version 1.6

      1. mikebzh44

        Avec plaisir 😉

        Par contre, la page de téléchargement pointe toujours sur la v1.5 :

        http://domotique-home.fr/gestion-de-chauffage-stock-de-granules-gsg/#download

        1. R.Syrek

          Essai de supprimer ton cache j’ai bien 1.6.

  5. mikebzh44

    Effectivement, ça marche mieux maintenant :p

    Sinon, dans admin.php, j’ai rajouté un test supplémentaire :

    if (isset($_GET[‘an’]))
    $annees_list = htmlspecialchars($_GET[“an”]);
    else
    {
    $results = mysqli_query($Conn, “SELECT YEAR(`time`) AS annee FROM `granules_stock` ORDER BY time DESC LIMIT 1”) or die(mysql_error());
    $row = mysqli_fetch_array($results);
    $annees_list = $row[‘annee’];
    if (is_null($annees_list))
    $annees_list = date(‘Y’);
    }

    Car j’ai purgé la base de tes données pour n’avoir que mes futures consommations et ça plantait car annees_list était null.

    1. R.Syrek

      OK, attention tu as oublié de modifier le mysql_error() en mysqli_error().
      😉

  6. mikebzh44

    Ta version 1.6 n’embarque pas le fichier verif.php que j’avais donné dans un de mes commentaires précédents (celui de 10 janvier 2017 at 10 h 08 min)

    1. R.Syrek

      si c’est bon maintenant

Leave a Comment


La période de vérification reCAPTCHA a expiré. Veuillez recharger la page.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.