IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Créer un script de gestion de location de matériel


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 20
    Points : 21
    Points
    21
    Par défaut Créer un script de gestion de location de matériel
    Bonjour, je suis actuellement entrain d'essayer de créer un systeme de gestion de location de materiel pour une asso dans laquelle je suis.

    En gros mon systeme serait basé sur deux table sql, une contenant le stock d'origine qu'on a sous la forme:
    table stock_loc
    id, reference, nom, prix, quantite

    et une autre table nommée location:
    id, ref_client, date, ref_prodiut, quantite_produit

    les champs ref_produit et quantite_produit sont des champs textes ou je met un produit par ligne.ainsi que pour le champs date ou il y aura une date par ligne dans le cas de location sur plusieurs jours
    exemple:
    1, ref0001, 2011-MM-JJ \n 2011-MN-JD, produit001 \n produit002 \n produit003, quantite_produit001 \n quantite_produit002 \n quantite_produit003


    faire les bases de donnees ne me dérange pas, mais le probleme est que quand on veut ajouter une nouvelle location. Au debut on renseigne les dates que l'on souhaites ( a l'aide d'un form et d'un input ) ensuite quand on valide le formulaire pour aller a la seconde étape, j'aimerai effectuer une recherche dans la table location ou je puisse ainsi sortir tous les produits deja en location pour ses jours la et ensuite soustraire ce qui est deja loué au stock initiale pour ensuite proposer a l'aide de "select" la quantité souhaitée sans pouvoir depasser le nombre de produit restant dans cette catégorie.

    Sur papier sa fonctionne parfaitement, mais le probleme est que je ne vois pas du tout comment pouvoir coder sa.

    Donc si quelqu'un a une idée que se soit pour tout résoudre ou un point parmis tout ceux qui me posent problème.

    recapitulatif des problemes:
    1- extraire de la base de donnée les infos concernant les produits louées ainsi que leur quantité pour les jours selectionnés
    2- faire une comparaison entre le nombre de produits loués et le nombre de produit initiaux pour savoir combien ils en restent pour les jours selectionnées.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour, de quoi as-tu besoin exactement ?
    - d'un programmeur pour coder ?
    - de codes/scripts "tout fait" ?

    Pour l'instant, voici ce que tu peux lire :
    - PHP : Le tutoriel pour grands débutants pressés
    - Les meilleurs tutoriels SQL

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 20
    Points : 21
    Points
    21
    Par défaut
    je n'ai besoin ni l'un ni l'autre, mais surtout de savoir comment faire pour avoir dans ma table de location 2 champs dans lesquelle je peux mettre plusieur valeurs.

    donc ce que je n'arrive pas a faire c'est de faire la jonction entre réference et quantité.

    c'est a dire, dans un champs j'ai comme valeurs "ref001 \n ref002 \n ref003" et dans un autre, j'ai "quantité001 \n quantité002 \n quantité003 et ce que je cherche a faire c'est juste a faire en sorte qu'une fois que j'ai fais mon select dans ma base de donnée faire en sorte que

    ref001 = quantité001
    ref002 = quantité002
    ref03 = quantité003

  4. #4
    Invité
    Invité(e)
    Par défaut
    -> Une fois que tu sauras QUOI faire (en terme de conception, d'enchainement des évènements, ...),
    -> tu sauras COMMENT structurer ta base de données.
    -> La PROGRAMMATION ne vient qu'APRES.

    Pour commencer il faut au moins 4 tables :
    - clients : (id_client, nom_client, ...)
    - produits : (id_produit, ref_produit, nom_produit, ...)
    - stocks : (id_stock, id_produit, ...)
    - locations : (id_loc, ref_loc, id_client, listid_produit, date_loc, ...)

    NB : les tables stocks et produits pourrait n'en faire qu'une. -> c'est un CHOIX de conception (personnel ici) à faire !
    produits : contient les infos du produit (nom, réf., prix, .....)
    stocks : contient uniquement les "mouvements" du produit (quantité, date entrée en stock, date de renouvellement, .......)

    Ensuite, il faut relier ces tables entre elles.
    Les liens entre les tables :
    1 location <-> 1 client (=> reliés par id_client dans les 2 tables ?)
    1 location <-> plusieurs produits (=> liste d'id_produit ?, à mettre dans un champ listid_produit ??)
    1 stock <-> 1 produit (=> reliés par id_produit dans les 2 tables ?)
    ...
    etc.
    Dernière modification par Invité ; 04/08/2011 à 11h55.

  5. #5
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Un modèle de donné comme ça pourrait aller:


    Ce que tu dois manipuler ce sont les entrées de la relation `customers_rent_products`. Il suffit de mentionner dans cette table l'utilisateur, le produit, la date de location, le nombre de produits loués. Pour enlever une location il suffit d'enlever le tuple correspondant.

    Une requête d'insertion:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO `customers_rent_products` SET `customers_id`=1, `products_id`=1, `qt`=2
    Une requete de suppression:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DELETE FROM `customers_rent_products` WHERE `customers_id`=1 AND `products_id`=1
    Connaitre le nombre d'articles restants pour le produit 1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT *, `qt`-(SELECT SUM(`qt`) FROM `customers_rent_products` WHERE `products_id`=1) AS `qt_remaining` FROM  `products` WHERE `id`=1
    La source SQL de l'exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
    SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
    SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';
     
    CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
    USE `mydb` ;
     
    -- -----------------------------------------------------
    -- Table `mydb`.`products`
    -- -----------------------------------------------------
    CREATE  TABLE IF NOT EXISTS `mydb`.`products` (
      `id` BIGINT(25) NOT NULL AUTO_INCREMENT ,
      `ref` VARCHAR(90) NOT NULL ,
      `qt` INT NOT NULL DEFAULT 0 ,
      `label` TEXT NULL ,
      PRIMARY KEY (`id`) ,
      UNIQUE INDEX `ref_UNIQUE` (`ref` ASC) )
    ENGINE = InnoDB;
     
     
    -- -----------------------------------------------------
    -- Table `mydb`.`customers`
    -- -----------------------------------------------------
    CREATE  TABLE IF NOT EXISTS `mydb`.`customers` (
      `id` BIGINT(25) NOT NULL AUTO_INCREMENT ,
      `ref` VARCHAR(90) NOT NULL ,
      `name` VARCHAR(45) NOT NULL ,
      `surname` VARCHAR(45) NOT NULL ,
      `mail` VARCHAR(45) NOT NULL ,
      PRIMARY KEY (`id`) ,
      UNIQUE INDEX `ref_UNIQUE` (`ref` ASC) ,
      UNIQUE INDEX `mail_UNIQUE` (`mail` ASC) )
    ENGINE = InnoDB;
     
     
    -- -----------------------------------------------------
    -- Table `mydb`.`customers_rent_products`
    -- -----------------------------------------------------
    CREATE  TABLE IF NOT EXISTS `mydb`.`customers_rent_products` (
      `customers_id` BIGINT(25) NOT NULL ,
      `products_id` BIGINT(25) NOT NULL ,
      `date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
      `qt` INT NOT NULL ,
      PRIMARY KEY (`customers_id`, `products_id`) ,
      INDEX `fk_customers_has_products_products1` (`products_id` ASC) ,
      INDEX `fk_customers_has_products_customers` (`customers_id` ASC) ,
      CONSTRAINT `fk_customers_has_products_customers`
        FOREIGN KEY (`customers_id` )
        REFERENCES `mydb`.`customers` (`id` )
        ON DELETE NO ACTION
        ON UPDATE NO ACTION,
      CONSTRAINT `fk_customers_has_products_products1`
        FOREIGN KEY (`products_id` )
        REFERENCES `mydb`.`products` (`id` )
        ON DELETE NO ACTION
        ON UPDATE NO ACTION)
    ENGINE = InnoDB;
     
     
     
    SET SQL_MODE=@OLD_SQL_MODE;
    SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
    SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
    @jreaux: la table de stock selon moi est en trop car la quantité totale de produit est fixe et en DF avec l'id du produit. Vouloir conserver la quantité restante (total - location) caractérise un usage et peut aussi bien être calculé.
    Images attachées Images attachées  

  6. #6
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Avril 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 20
    Points : 21
    Points
    21
    Par défaut
    merci Benjamin Delespierre

    mais si j'ai bien comprit, customers_rent_product ne peut a chaque fois ne contenir qu'une seule reference d'objet louer ( avec la quantité qu'il desire) ?

    Donc j'en deduit, que si le client prend x produits, il faut que je fasse x insertion dans la table customers_rent_products ?

    par exemple, si il desire louer 3 pommes, 2 poires, 15cerises ( exemples entierement bidon )

    il faut que je realise 3 insertions dans la table customers_rent_products. une pour les pommes, une autre pour les poires et une derniere pour les cerises.

    et donc pour la supression je pense qu'il serait mieux de faire dans ce cas quelque chose en rapport avec la date de la loc, et l'id du client :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DELETE FROM `customers_rent_products` WHERE `customers_id`=1 AND `date`=date_de_la_loc_a_supr
    en tout cas je te remercie car d'un coup sa me parait plus simple en faisant une entrée par produit ( certe plus d'entrée dans la bdd mais au final facilité de gestion )

    @jreaux62: pour info la base client existe deja car j'en ai besoin pour d'autre application, mais j'en voyais aucun intérêt d'en parler car sa parais évident qu'elle existait.
    et a l'origine si je post sur ce forum c'est justement car c'est un forum d'entraide et que je souhaitais de l'aide, donc sa ne sert a rien de t'exciter après mois, alors qu’apparemment mon problème venais juste d'une histoire de gestion. et qu'au début justement je demandais juste une piste pour voir comment faire ce que je recherchais.

  7. #7
    Invité
    Invité(e)
    Par défaut
    [Edit] No comment ...
    Dernière modification par Invité ; 04/08/2011 à 11h52.

  8. #8
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Donc j'en deduit, que si le client prend x produits, il faut que je fasse x insertion dans la table customers_rent_products ?
    Oui, et d'ailleurs c'est bien plus flexible. Ainsi un même client peut faire plusieurs emprunts avec des dates différentes par exemple.

    et donc pour la supression je pense qu'il serait mieux de faire dans ce cas quelque chose en rapport avec la date de la loc, et l'id du client :
    Non pas forcément. A moins que le client en question ne ramène tous les produits en même temps pour une date donnée. Enfin après c'est à toi de voir en fonction de tes besoins.

Discussions similaires

  1. Faire un script qui me créer un script
    Par tripper.dim dans le forum Oracle
    Réponses: 8
    Dernier message: 30/11/2005, 11h11
  2. Comment créer un script?
    Par sitdown dans le forum Windows
    Réponses: 1
    Dernier message: 25/08/2005, 10h05
  3. [Export Données] [SQL] Créer un script d'export de données
    Par Tueur_a_gage dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 08/03/2005, 14h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo