Logiciel d'inventaire

79687
,

Bonjour,

Je suis dans la création d'un logiciel pour faire un inventaire de stock physique avec différents zones, différents stock et plusieurs utilisateurs.

Chaque utilisateur se connecte avec un identifiant et mot de passe, ils sont associés a 1 stock et plusieurs zones.

Structure de la base de données :

 TABLE `comptage_zone` (
  `id_comptage` int(11) NOT NULL,
  `ref_id` int(11) NOT NULL,
  `user_id` int(11) NOT NULL,
  `lieu_id` int(11) NOT NULL,
  `zone_id` int(11) NOT NULL,
  `quantity` int(11) NOT NULL
)
TABLE `reserve` (
  `id` int(11) NOT NULL,
  `name` varchar(100) NOT NULL,
  `name2` varchar(255) NOT NULL,
  `name3` varchar(255) NOT NULL,
  `ref` varchar(30) NOT NULL,
  `family` varchar(30) NOT NULL
)

Le listing des articles se fait via une recherche :

    $query = "
      SELECT * FROM reserve 
      LEFT JOIN comptage_zone ON reserve.id = comptage_zone.ref_id
      WHERE ref LIKE '".$search."%'
      ORDER BY id 
      LIMIT 20
    ";

L'insertion de la quantité d'un article :

function comptage_zone($ref,$user,$lieu,$zone,$quantity){
        $bdd = mysqli_connect("localhost","user","mdp","database");
        $sql="SELECT *  FROM comptage_zone WHERE ref_id= $ref AND user_id= $user AND lieu_id= $lieu AND zone_id= $zone";
        if($result = mysqli_query($bdd,$sql)){}
                $row_cnt = mysqli_num_rows($result);
        if ($row_cnt==1){
                $sql = "UPDATE comptage_zone
                                SET
                                        quantity= $quantity
                                WHERE
                                        ref_id= $ref
                                AND     user_id= $user
                                AND     lieu_id= $lieu
                                AND     zone_id= $zone
                                ";
                $requete = mysqli_query($bdd,$sql);

                $_SESSION['flash']['success'] = "Le comptage a été mise a jour !";
                header('Location: zone.php?zone='.$zone.'&c='.$_SESSION['zone']);
                exit();
        }else {
                $sql = "INSERT INTO comptage_zone (
                        ref_id,
                        user_id,
                        lieu_id,
                        zone_id,
                        quantity)
                      VALUES(
                        $ref,
                        $user,
                        $lieu,
                        $zone,
                        $quantity)";
            $requete = mysqli_query($bdd,$sql);
            //  debug($sql);
            $_SESSION['flash']['success'] = "Le comptage a été ajouté !";
            header('Location: zone.php?zone='.$zone.'&c='.$_SESSION['zone']);
            exit();
        }
}

Si l'utilisateur 1 se connecte, il selection la zone 1 (pour exemple), il a bien le tableau avec les différentes articles qui s'affiche, il fait l'ajout d'une quantité sur la référence article 1.
Quand l'utilisateur 2 se connecte, qu'il sélectionne la même zone ou une autre zone, il peux voir la quantité que l'utilisateur 1 a mis.

Et cela me pose probleme que l'utilisateur 2 voir ce que l'utilisateur 1 a rentré, ainsi que la zone n'est pas la même !

J'ai essayé de modifier la recherche des articles comme ceci :

    $query = "
      SELECT * FROM reserve 
      LEFT JOIN comptage_zone ON reserve.id = comptage_zone.ref_id
      WHERE ref LIKE '".$search."%'
      AND user_id=".$_SESSION['auth']->user_id."
      AND lieu_id=".$_SESSION['auth']->lieu_id."
      AND zone_id=".$_SESSION['shop']."
      ORDER BY id 
      LIMIT 20
    ";

Mais cela rends l'article non disponible pour les autre utilsateurs.

J'aimerai trouvé la solution pour qu'un utilisateur voit uniquement les quantités qui a rentré et aussi dans la zone choisie.

Je reste disponible pour toute information supplémentaire
Merci d'avance pour votre aide,
Kristof

2 Réponse

35773
,

Bonjour,

Théoriquement si tu fais ça :

SELECT * FROM reserve 
      LEFT JOIN comptage_zone ON reserve.id = comptage_zone.ref_id AND comptage_zone.user_id=".$_SESSION['auth']->user_id."
      WHERE ref LIKE '".$search."%'
      AND lieu_id=".$_SESSION['auth']->lieu_id."
      AND zone_id=".$_SESSION['shop']."
      ORDER BY id 
      LIMIT 20

les champs de la table "comptage_zone" retournés par la requête auront une valeure NULL si "comptage_zone.user_id" ne correspond pas.

À tester ;-)

79687
,

Bonjour Soundboy39,

Merci pour ta réponse,

J'ai testé ta réponse mais malheuresement cela ne convient pas a ce que je souhaite avoir, car cela me montre toutes les entrées faite par tous les utilisateurs et je n'ai plus de visibilité sur les articles avec une quantité a zéro.

Je pensais de refaire mes tables de données pour avoir :
1 table commune avec les références des articles (table reserve)
1 table personnel pour chaque utilisateur (table comptage_zone_user1 - comptage_zone_user2 - etc )

ou sinon de chercher une solution avec une condition ou plusieurs pour résoudre ce problème.

Bonne journée