commit 2c14ce45e68896dd584e36e034dc4db779bfca66 Author: glenux Date: Fri May 1 08:39:36 2009 +0000 casdastre: initial import. diff --git a/DAajoute.php b/DAajoute.php new file mode 100644 index 0000000..3025107 --- /dev/null +++ b/DAajoute.php @@ -0,0 +1,183 @@ +logCheck(); + + $page->startScript(); + include("includes/scriptJS_DA.inc.php"); + $page->endScript(); + + $page->startHeader(); +?> + + + +endHeader(); + +$familles = donne_familles(); +$unite="* unité"; + +switch($_POST["action"]) { + case "Ajouter": { + $famProd=$_POST["famille"]; + $prodSelect=$_POST["produit"]; + $quantiteDem=$_POST["quantite"]; + $prodUnit=$_POST["unite"]; + + if (!isset($_SESSION["demandeAchat"])){ + $_SESSION["demandeAchat"]=new DemandeAchat( + $_SESSION["userInfo"]->getID() + ); + } + $_SESSION["demandeAchat"]->ajouteLDA($famProd,$prodSelect,$quantiteDem); + }; + break; + case "Supprimer": { + if (isset($_SESSION["demandeAchat"])){ + $_SESSION["demandeAchat"]->supprimeLDA($_POST["Case_suppr"]); + } + // TODO: faire en sorte de supprimer le bug + // qui permet d'avoir des produits n'appartenant pas + // à la bonne famille + } ; + break; + case "Annuler": { + // TODO: faire en sorte de supprimer le bug + // qui permet d'avoir des produits n'appartenant pas + // à la bonne famille + }; break; + // TODO: lorsque l'on fait un Annuler faire en sorte que + // les produits correspondent bien à la famille + case "Valider": { + if (isset($_SESSION["demandeAchat"])){ + $_SESSION["demandeAchat"]->insereBD(); + unset($_SESSION["demandeAchat"]); + header("Location: DAliste.php"); + } + }; break; + default: break; +} + +$page->startContent(); + +?> + +
+ +

Demande d'Achat

+ +

Livraison

+
+Date et horaires +

Date : +" class="livraison" size="2" maxlength="2" /> +/ +" class="livraison" size="2" maxlength="2" max="12" /> +/ +" class="livraison" size="4" maxlength="4" min="2004" /> +

+

+Horaire : +

    +
  • +A partir de + h + +
  • +
  • +Jusqu'à + h + +
  • +
+

+
+ +

Ajout d'un nouveau produit

+
+ + +

+ + +Quantité : + +

+

+" /> + + +

+ +_ligneIdx>0){ + print "
\n"; + print "Lignes de demandes d'achat\n"; + print $_SESSION["demandeAchat"]->toHTML(1); + + + print "
\n"; + print ""; } +} +?> +
+
+endContent(); +print $page->toHTML(); +?> diff --git a/DAliste.php b/DAliste.php new file mode 100644 index 0000000..7523bcf --- /dev/null +++ b/DAliste.php @@ -0,0 +1,72 @@ +logCheck(); + + $page->startHeader(); + ?> + + + +endHeader(); + + $listeDA_cree=new ListeDA("CREE",$_SESSION["userInfo"]->getID()); + $listeDA_cree->loadListe(); + + switch($_POST["action"]) { + case "Supprimer": { + // TODO: supprimer demande d'achat de la table + // ainsi que les lda correspondant etc. + $listeDA_cree->supprimeDA($_POST["demande_achat"]); + }; + break; + default: break; + } + + $page->startContent(); + ?> + +
+ +

Demandes d'achats en cours

+ +

Demandes d'achats non traitées

+"; + + print $listeDA_cree->toHTML(); + if (count($listeDA_cree->_liste)>0){ + print ""; + } +print ""; + +?> + +

Demandes d'achat en cours de traitement

+ +getID()); +$listeDA_envoye->loadListe(); +print $listeDA_envoye->toHTML(0); +?> + +
+endContent(); +print $page->toHTML(); + +?> diff --git a/DAstock.php b/DAstock.php new file mode 100644 index 0000000..0919f55 --- /dev/null +++ b/DAstock.php @@ -0,0 +1,121 @@ +logCheck(); + + $page->startScript(); + include("includes/scriptJS_DA.inc.php"); + $page->endScript(); + + $page->startHeader(); + ?> + + + +endHeader(); + $page->startContent(); + + + switch($_POST["action"]) { + case "Accepter": { + if($_SESSION["produit"]) { + if($_SESSION["produit"]->exists()) { + $_SESSION["produit"]->_stock=$_POST["stock"]; + $_SESSION["produit"]->_seuil_min=$_POST["seuil_min"]; + $_SESSION["produit"]->_seuil_max=$_POST["seuil_max"]; + $_SESSION["produit"]->modifSeuils(); + unset($_SESSION["produit"]); + } + else { + $_SESSION["produit"]->_stock=$_POST["stock"]; + $_SESSION["produit"]->_seuil_min=$_POST["seuil_min"]; + $_SESSION["produit"]->_seuil_max=$_POST["seuil_max"]; + $_SESSION["produit"]->insereInfos(); + unset($_SESSION["produit"]); + } + } + };break; + + case "Modifier": { + $_SESSION["produit"]=new ProduitInterne($_POST["produit"], $_SESSION["userInfo"]->getSite()); + $_SESSION["produit"]->rempliVals(); + };break; + + case "Supprimer": { + if($_SESSION["produit"]) { + if($_SESSION["produit"]->exists()) { + $_SESSION["produit"]->supprProStck(); + } + unset($_SESSION["produit"]); + } + };break; + + + default: break; + } + ?> + +
+ +

Gestion des stocks

+ +
+ + + +

+ + +
+ + +

+ + +

+ + toHTML(); + } + ?> + +
+
+ +endContent(); + print $page->toHTML(); + ?> + + diff --git a/HEADER b/HEADER new file mode 100644 index 0000000..e69de29 diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..57806fe --- /dev/null +++ b/Makefile @@ -0,0 +1,34 @@ +PRJNAME=CasDAstre +GDATE:= $(shell date +"%Y-%m-%d_r%H%M") +GFILENAME:= $(PRJNAME)-$(GDATE).tar.bz2 +PATH_GFILENAME:= ../$(GFILENAME) +LOCALDIR=$(shell pwd) + + +all: nothing + +nothing: + # do nothing + + +update: clean + ./tools/cda-update + +myupdate: clean + ./tools/mycda-update + +clean: + rm -f *.php~ + $(MAKE) -C doc clean + +package: clean createpackage sendtoarchives + +createpackage: + #mv lib ../lib$(GDATE) + tar -cjvf $(PATH_GFILENAME) -C ../ $(PRJNAME) + #mv ../lib$(GDATE) lib + +sendtoarchives: + mkdir -p ../Archives + mv $(PATH_GFILENAME) ../Archives + diff --git a/README b/README new file mode 100644 index 0000000..e69de29 diff --git a/VERSION b/VERSION new file mode 100644 index 0000000..c0e4900 --- /dev/null +++ b/VERSION @@ -0,0 +1,2 @@ +hoplui eh +0.0 diff --git a/cache/README b/cache/README new file mode 100644 index 0000000..e69de29 diff --git a/classContFourn.php b/classContFourn.php new file mode 100644 index 0000000..05be0b9 --- /dev/null +++ b/classContFourn.php @@ -0,0 +1,15 @@ + diff --git a/commandes.php b/commandes.php new file mode 100644 index 0000000..9efad69 --- /dev/null +++ b/commandes.php @@ -0,0 +1,130 @@ +logCheck(); + +$page->startScript(); +?> + // prod_ref.options[makeselector.selectedIndex].text; */ + +function showDA(prod_ref){ + var refSelected=document.forms["cmd_gen"].reference.value; + + var lgth = document.forms["cmd_gen"].reference.options.length; + + for (i=0;iendScript(); +$page->startContent(); + + +switch($_POST["action"]){ + case "Ajouter": { + $refprod=$_POST["reference"]; + $fournisseur=$_POST["fourn_$refprod"]; + $LDAtab=&$_POST["da_$refprod"]; + if (!isset($_SESSION["commande"])){ + $_SESSION["commande"]=new Commande( + $_SESSION["userInfo"]->getID() + ); + } + $_SESSION["commande"]->ajouteLC($refprod,$LDAtab,$fournisseur); + + + }; break; + case "Supprimer": { + if (isset($_SESSION["commande"])){ + $_SESSION["commande"]->supprimeLC($_POST["ligneCom"]); + } + }; break; + case "Valider": { + $_SESSION["commande"]->valideLC(); + unset($_SESSION["commande"]); + print "Commandes effectuées"; + //header("Location: listecommandes.php"); + }; break; + default: break; +} +$cmdTool=new CmdTool(getFamilleFromAcheteur($_SESSION["userInfo"]->getID())); +$cmdTool->chargeRef(); +?> + +
+

Générer des commandes

+
+
+Lignes d'Achat en attente + +

Références des produits : + +

+ +_ref_in);$i++){ + $ref=$cmdTool->_ref_in[$i]; + print "

"; + print ""; + print "Demande d'achats correspondant à $ref"; + print ""; + print ""; + print $cmdTool->LDAtoHTML($ref); + print ""; + print ""; + print "Fournisseur disponibles pour $ref "; + print ""; + print ""; + print $cmdTool->FournToHTML($ref); + print ""; + print "

"; +} +?> + + +
+
+"; + print "Commandes en cours"; + print $_SESSION["commande"]->toHTML(); +} +?> + +"; +} +?> +
+ +
+ +endContent(); +print $page->toHTML(); + +?> diff --git a/config/README b/config/README new file mode 100644 index 0000000..e69de29 diff --git a/config/db.conf.php b/config/db.conf.php new file mode 100644 index 0000000..bd7e159 --- /dev/null +++ b/config/db.conf.php @@ -0,0 +1,21 @@ + diff --git a/data/bodyend.inc.php b/data/bodyend.inc.php new file mode 100644 index 0000000..5bc14a5 --- /dev/null +++ b/data/bodyend.inc.php @@ -0,0 +1,5 @@ + + + + + diff --git a/data/bodystart.inc.php b/data/bodystart.inc.php new file mode 100644 index 0000000..e6ffe81 --- /dev/null +++ b/data/bodystart.inc.php @@ -0,0 +1,12 @@ + + + + + + +
diff --git a/data/footer.inc.php b/data/footer.inc.php new file mode 100644 index 0000000..c5cada0 --- /dev/null +++ b/data/footer.inc.php @@ -0,0 +1,21 @@ + + + diff --git a/data/header.inc.php b/data/header.inc.php new file mode 100644 index 0000000..f9a9089 --- /dev/null +++ b/data/header.inc.php @@ -0,0 +1,20 @@ + + + + + + D'Astre.Net + + + + + + + + + diff --git a/data/menugauche.inc.php b/data/menugauche.inc.php new file mode 100644 index 0000000..ec706a5 --- /dev/null +++ b/data/menugauche.inc.php @@ -0,0 +1,64 @@ + + + diff --git a/doc/Makefile b/doc/Makefile new file mode 100644 index 0000000..7e15e01 --- /dev/null +++ b/doc/Makefile @@ -0,0 +1,58 @@ +LATEX = latex +PDFLATEX = pdflatex +PSLATEX = pslatex +DVIPDF = dvipdf +DVIPS = dvips +PS2PDF = ps2pdf +GDATE := $(shell date +"-%Y-%m-%d_r%H") +GFILENAME := CDC$(GDATE).tar.bz2 +LOCALDIR = $(shell pwd) +MAINFILE = rapport + + +PNGFILES := $(shell ls *.png 2> /dev/null ) +EPSFILES := $(patsubst %.png,%.eps,$(PNGFILES)) +PNG2EPSCC = convert +TEXFILES := $(MAINFILE).tex +DVIFILES := $(MAINFILE).dvi +PDFFILES := $(MAINFILE).pdf +PSFILES := $(MAINFILE).ps + +all: png2eps dvi dvi ps pdf pdf + +png2eps: $(EPSFILES) + +%.eps : %.png + @$(PNG2EPSCC) $< $@ + @echo -e "png2eps\t$< $@" + +clean: + rm -f rapport.dvi rapport.rtf rapport.pdf rapport.ps + rm -f *.out *.log *.toc *.aux + rm -f *.eps + rm -f *.tex~ + +pdf: $(TEXFILES) + $(PDFLATEX) $(TEXFILES) + +ps: $(TEXFILES) + $(DVIPS) $(DVIFILES) + +dvi: $(PRJFILES) + $(LATEX) $(TEXFILES) + +#mail: package sendmail +# +#pdfmail : +# make && make +# echo "Et voila le dernier pdf" | mutt lsr-dev -a $(PDFFILES) -s "[CDC] Rev$(GDATE) (en PDF)" +# +#sendmail: +# echo "Et voila" | mutt lsr-dev -a ../Archives/$(GFILENAME) -s "[CDC] Rev$(GDATE) (en TeX)" +# + +package: clean storefile + +#storefile: +# tar -cjvf ../$(GFILENAME) -C ../ cdc +# mv ../$(GFILENAME) ../Archives diff --git a/doc/acheteur.tex b/doc/acheteur.tex new file mode 100644 index 0000000..b4f64de --- /dev/null +++ b/doc/acheteur.tex @@ -0,0 +1,23 @@ +\section{L'acheteur} +\par L'acheteur a la possibilité de gérer les founisseurs. Les acheteurs sont clasés par famille de produits. A chaque connexion apparait la famille de produit à laquelle appartient l'acheteur. Chaque acheteur a la possibilié de faire des ajouts sur les fournisseurs, mais également de gérer les produits. + +\subsection{Ajout d'un fournisseur} + +\par Afin d'ajouter un fournisseur, l'acheteur doit cliquer sur le lien 'Gestion fournisseur'. Plusieurs informations sur les fournisseurs sont à saisir tel que le nom, adresse, numéro de téléphone, numéro de Siret(...). +\par Par ailleurs, la liste des fournisseurs déjà existants est affichée également en bas de page. + +\texima{ajoutfour}{12cm}{9cm} + +\subsection{Gestion des produits} + +\par La gestion des produits consistent à ajouter un produit. Pour cela, l'acheteur saisit les informations concernant le produit, c'est à dire la désignation, le tarif, ainsi que l'unité. + +\par Par ailleurs, il est nécessaire de saisir la reference du fournisseur ainsi que les références internes du produit , qui peut etre soit existant, soit nouveuax. Dans le cas d'une référence déjà connu, un menu déroulant apparait, et il suffit de sélection la référence que l'on souhaite ajouter. + +\par Voici comment apparaît la page . +\texima{ajoutproduit}{12cm}{9cm} + +\par Comme pour le magasinier, l'acheteur a la possibilité de revenir au sommaire ou de se deconnecter grâce au menu se trouvant sur la gauche. + +\subsection{Les commandes} + diff --git a/doc/ajoutfour.png b/doc/ajoutfour.png new file mode 100644 index 0000000..e82e870 Binary files /dev/null and b/doc/ajoutfour.png differ diff --git a/doc/ajoutproduit.png b/doc/ajoutproduit.png new file mode 100644 index 0000000..897febb Binary files /dev/null and b/doc/ajoutproduit.png differ diff --git a/doc/bd.tex b/doc/bd.tex new file mode 100644 index 0000000..e167a99 --- /dev/null +++ b/doc/bd.tex @@ -0,0 +1,28 @@ +\section{Base de données} + +\subsection{L'implémentation} +\par Le modèle conceptuel de données (MCD) ainsi que le schéma SQL de la base de donnée ont été généré avec le logiciel Gerwin\footnote{http://es.gnu.org/~jemarch/gerwin/} +Le MCD est disponnible au format Gerwin dans l'archive du projet : \verb+sql/MCDTrac.ger+. + +\subsection{Les scripts} + +\par Afin de manipuler plus facilement la base, une série de script \verb+.sql+ +est présente dans le répertoire \verb+sql/+ de l'archive de D'Astre.Net. +Ces scripts permettent la création, le remplissage, ainsi que la destruction de la base. + +Voici la nomenclature des scripts : +\begin{itemize} +\item {db-create-mcd.sql : génère les tables de la base à partir du MCD.} +\item {db-create-xxxx.sql : ajoute des tables spéciales hors-mcd.} +\item {db-fill-xxxx.sql : (ou xxxx est le nom de la table), permet de remplir la table avec des données de test.} +\item {db-drop.sql : permet de supprimer dans l'ordre les tables.} +\end{itemize} + +\par Pour plus de commodité, l'installation et la suppression de la base ont été simplifiés avec les scripts \verb+install.php+ et\verb+drop.php+ qui appellent les scripts \verb+.sql+ précédents dans le bon ordre. + +\subsection{Connexion à la base de données} +\par La connexion à la base de donnée aurait pu être gérée au niveau de la page, +mais pour plus de commodité au niveau de la conception cela n'a pas été le cas. +Cependant, la configuration de la base pour y accéder à partir de PHP a tout de +même été centralisée dans le fichier \verb+config/db.conf.php+. + diff --git a/doc/conclusion.tex b/doc/conclusion.tex new file mode 100644 index 0000000..567f762 --- /dev/null +++ b/doc/conclusion.tex @@ -0,0 +1,10 @@ +\par Finalement,le casdast a permis résoudre un cas concret. Nous avons pu constater l'evolution et les differents étapes d'un projet. + + +\section{Difficultés rencontrés} + + +\section {Avenir} + + + diff --git a/doc/couv.tex b/doc/couv.tex new file mode 100644 index 0000000..747489b --- /dev/null +++ b/doc/couv.tex @@ -0,0 +1,16 @@ +\title{Rapport du projet de Génie Logiciel : D'Astre.Net\\ \today} +\date{} +\author{\vspace{1cm} \\ {\sc Cours de Génie Logiciel} \\ + de Antoine Canet. \\~\\ + {\sc Université Paris 7 - Denis Diderot.} + \\ \vspace{3cm} \\ +\begin{tabular}{ r l l } +par & Roland LAURES & {\em $<$shamox77@mac.com$>$},\\ +& Glenn ROLLAND & {\em $<$glenux@fr.st$>$}, \\ +& Sebastian SCHAWOHL & {\em $<$stormrider@nerim.fr$>$}, \\ +& Rivka ZANA & {\em $<$rivka\_zan@hotmail.com$>$} + \end{tabular} +} +%\date{\today} +%\title{Janat} +\maketitle diff --git a/doc/creationDA.png b/doc/creationDA.png new file mode 100644 index 0000000..cd7ec5f Binary files /dev/null and b/doc/creationDA.png differ diff --git a/doc/creationDA.tex b/doc/creationDA.tex new file mode 100644 index 0000000..8001300 --- /dev/null +++ b/doc/creationDA.tex @@ -0,0 +1,31 @@ +\subsection{Création des demandes d'achat} +\par La page de création des demandes d'achat est composé de deux parties : +\itemize{begin} +\item{Livraison} : permettant de déterminer les horaires de préférences aux +quelles vous voulez être livré +\item{Ajout d'un nouveau produit} : permettant d'ajouter un produit à la +demande d'achat que vous allez créer. +\itemize{end} + +\subsubsection{Livraison} +\par L'utilisation est assez simple, il vous suffit d'indiquer dans chacun +des champs correspondants, la date (au format jour / mois / année (4 chiffres)) +et l'horaire. + +\subsubsection{Ajout d'un nouveau produit} +\par Dans cette partie, au début vous n'avez de présent que 2 menus déroulants et un champ. +les deux menus correspondent en partant de la gauche au choix de selection de la famille de +produit à laquelle le produit que vous voulez ajouter appartient, puis la référence +interne et la description interne du produit que vous désirer demander. Il ne vous +plus qu'à remplir le champ quantité et à valider votre ligne d'achat en cliquant +sur le bouton Ajouter juste en dessous, et vous aurez créé une ligne de votre demande +d'achat. Réitérer la manoeuvre afin de finir votre demande d'achat en y introduisant +plusieurs lignes d'achats (une seule reste possible). +\par Lorsque vous avez ajouter une ligne d'achat à votre demande d'achat, une sous-partie +apparraît où la liste des lignes de demandes d'achat que vous aurez rentré apparaitra. +Chaque ligne de cette liste est précédée d'une petite case qui vous permettra de selectionner +la ligne d'achat correspondant, et de la supprimer en cliquant (une fois qu'elle est selectionnée) +sur le bouton Supprimer se situant en dessous de la liste des lignes de demandes d'achats. +\par Une fois que vous avez fini de remplir votre demande d'achat avec vos lignes, cliquer sur le +bouton "Valider" se situant en bas au milieu afin de valider votre demande d'achat. Elle sera alors +prise en compte par le système. diff --git a/doc/demandeAchat.tex b/doc/demandeAchat.tex new file mode 100644 index 0000000..edb2055 --- /dev/null +++ b/doc/demandeAchat.tex @@ -0,0 +1,264 @@ +\section{Demande d'achat} + +\par Les demande d'achats sont gérées grâce à l'utilisation +des classes {\em LDachat} (\verb+/includes/libLDachat.inc.php+ et {\em ListeDA} \verb+/includes/liblisteDA.inc.php+) que nous détaillerons par la suite . + +Pour ne pas perdre les informations de page en page lors de la création de la +Demande d'achat, la variable de session \verb+$_SESSION["demandeAchat]"+ contient l'objet {\em DemandeAchat} correspondant à la demande en cours de création. + +\par Enfin, la classe {\em DemandeAchat} est composée d'une liste de {\em LDachat}, qui correspondent aux lignes de demande d'achat. + +\subsection{Classe LDachat} + +\par Comme dit précedemment, cette classe représente +une ligne d'achat. Elle est créée lorsque le magasinier +a choisi {\it ``Ajouter"} sur la page de création de demande d'achat. + +\lstset{language=PHP} +\begin{lstlisting} +class LDachat { + + function LDachat($fam, $prod, $qte,$da_id=-1); + +} +\end{lstlisting} + +\par Cette classe se compose uniquement de quelques champs représentant la famille de produits du produit +selectionné, la référence interne du produit, la quantité souhaitée et finalement le numéro de demande d'achat +rattaché. Tous ces champs sont initialisés grâce au constructeur. + + +\subsection{Classe DemandeAchat} + +\par Cette classe permet d'avoir un objet qui contient toutes les informations utiles pour pouvoir créer des demandes d'achats. Voici son prototype: + +\lstset{language=PHP} +\begin{lstlisting} +class DemandeAchat { + function DemandeAchat($id_mag); + function load($id_da); + function ajouteLDA($famProd,$prodSelect, + $quantiteDem,$prodUnit="kg"); + function supprimeLDA($Cases_supp); + function toHTML($editable=0); + function insereBD(); +} +\end{lstlisting} + +\subsubsection{Le constructeur} +\par Le constructeur doit : +\begin{itemize} +\item{initialiser le champ correspondant à l'identifiant du magasinier qui passe commande} +\item{créer un tableau vide, qui par la suite contiendra des lignes de demande d'achat} +\item{initialiser le champ qui correspond aux nombres de lignes d'achat} +\end{itemize} + +\subsubsection{Charger les lignes de demandes d'achat} +\par La fonction \verb+function load($id_da)+ permet de +remplir l'objet {\em DemandeAchat} en faisant une requête +sur la base de données +avec le numéro de demande d'achat souhaité. + +\subsubsection{Ajouter ou supprimer des lignes d'achats} +\par Les fonctions \verb+ajouteLDA(...)+ +et \verb+supprimeLDA($Cases_supp)+, permettent respectivement d'ajouter et de supprimer des lignes de la {\em DemandeAchat}. +\lstset{language=PHP} +\begin{lstlisting} +function ajouteLDA($famProd,$prodSelect, + $quantiteDem,$prodUnit="kg"){ + $lda = new LDachat($famProd, $prodSelect, + $quantiteDem); + $this->_ligneAchat[$this->_ligneIdx]=&$lda; + $this->_ligneIdx++; +} +\end{lstlisting} + +\lstset{language=PHP} +\begin{lstlisting} +function supprimeLDA($Cases_supp){ + // on cherche les lignes selectionnees + // pour la suppression + if (is_array($Cases_supp)){ + while( list($case,$val) = each($Cases_supp) ){ + // on supprime les lignes selectionnees + $idx=preg_replace("/Check_/","",$val); + unset($this->_ligneAchat[$idx]); + } + [...] + } +} +\end{lstlisting} + +\par Ces deux fonctions n'ont aucune incidence sur la base de donnée, +mais uniquement sur l'affichage et le contenu de l'objet {\em DemandeAchat} +courant. +En effet, lorsqu'un magasinier ``ajoute" un produit (il fait un clic sur +``Ajouter" sur la page \verb+DAajoute.php+), cela lui affiche une nouvelle +ligne d'achat dans le contenu de la demande d'achat, mais rien n'est modifié +dans la base tant qu'il ne clique pas sur "Valider". +Ainsi l'utilisateur peut commettre des erreurs, puis les corriger (suppression des lignes), sans laisser dans la base des lignes d'achat qui auraient malencontreusement prise en compte par des Acheteurs entrain de travailler... + + +\subsubsection{Affichage à l'écran} +\par Pour afficher une demande d'achat on utilise la fonction \verb+toHTML($editable=0)+. Le paramètre sert +uniquement pour différencier deux cas : +\begin{itemize} +\item{\$editable=0} Dans ce cas on affiche les lignes d'achats contenues dans la demande d'achat. +\item{\$editable=1} Dans ce cas précis, on affiche les lignes d'acahts avec une ``checkbox" devant, qui +servira pour une sélection (dans le cas où on voudrai pouvoir la supprimer) +\end{itemize} + +\subsubsection{Insertion dans la base de données} +\par Pour insérer une demande d'achat, il suffit de faire appel à la fonction \verb+insereBD()+. Celle-ci, insère +la demande d'achat, avec toutes ses lignes d'achats dans les tables correspondantes (en faisant attention d'avoir + les bons identifiants). + +\subsection{Autres fonctions pour les demandes d'achats} +\par Dans le fichier \verb+/includes/libLDachat.inc.php+, il n'y pas que les classes {\em LDachat} et +{\em DemandeAchat}, mais aussi d'autres fonctions utiles à la bonne mise en place des demandes d'achats. + +\subsubsection{Les menus déroulants} +\par Il y a deux fonctions qui créent des menus déroulants : +\begin{description} +\item{\verb+menu_deroulant_Produits($ref_int,$designation)+} Celle-ci concatène les deux chaînes de caractères +(référence interne et désignation du produit) passées en arguments et en crée une ``option" pour un menu déroulant. +\lstset{language=PHP} +\begin{lstlisting} +function menu_deroulant_Produits + ($ref_int, $designation) { + $ref_des = "".$ref_int." : " + .$designation; + echo ""; +} +\end{lstlisting} +\item{\verb+menu_deroulant_familleProd ($famille)+} Celle-ci genère une ``option", contenant le nom d'une famille +de produits, pour un menu déroulant. +\lstset{language=PHP} +\begin{lstlisting} +function menu_deroulant_familleProd + ($famille) { + echo ""; +} +\end{lstlisting} +\end{description} + +\subsubsection{Requêtes} +\par Deux fonctions interagissent avec la base de données : +\begin{description} +\item{\verb+donne_familles()+} Cette fonction retourne un tableau contenant tous les noms de familles de produits. +\item{\verb+trouve_produits($ref_famille)+} Cette fonction retourne un tableau contenant la référence interne d'un +produit, ainsi que sa désignation, appartenant à la famille de produits passée en argument. +\end{description} + + +\subsubsection{Conversion de PHP vers Javascript} +\par Le fichier \verb+/includes/scriptJS_DA.inc.php+ contient un script Javascript qui permet de mettre à jour +un menu déroulant en fonction du choix fait dans un autre menu déroulant. Or ces menus déroulants, contienent des +informations stockées dans la base de données. C'est pourquoi, on appelle les fonctions \verb+donne_familles()+ +et \verb+trouve_produits(...)+, dont on convertit le résultat en Javascript via la fonction \verb+convertToJS($var)+. +\par Voici le script Javascript qui illustre l'utilisation de cette fonction. + +\lstset{language=PHP} +\begin{lstlisting} +function changeFam_Prod(famille, listeProduits) { + + [...] + + make=famille.options[famille.selectedIndex].text; + + liste = new Array; + i=0; + + + + familles = new Array; + + + + + + +\end{lstlisting} + + +\subsection{Classe ListeDA} + +\par Les sources de cette classe sont dans le fichier \verb+/includes/liblisteDA.inc.php+. Cette classe sert à +avoir une liste de demandes d'achats, utile pour la page \verb+DAliste.php+, car dans cette page on est amené à +afficher toutes les demandes d'achats dont les lignes d'achat ont un certain état (\verb+'CREE'+ par exemple). + +\lstset{language=PHP} +\begin{lstlisting} +class ListeDA { + function ListeDA($libelle,$id_mag); + function ajouteDA(\$da); + function supprimeDA(\$Cases_supp); + function loadListe(); + function toHTML(); +} +\end{lstlisting} + +\subsubsection{Le constructeur} +\par Le constructeur initialise les champs de l'objet : nombre de demande d'achats contenues dans le tableau, + création du tableau, l'identifiant du magasinier et le libellé de l'état des lignes d'achats voulues. + +\subsubsection{Ajout et suppression à différentes échelles} +\par Pour ce qui est de l'ajout, fonction \verb+ajouteLDA($da)+, on ajoute la demande d'achat passée en paramètre, au +tableau qui contient toutes les demandes d'acahts, sans oublier d'incrémenter le nombre de demandes d'achats contenues. +\par Quand à la suppression, fonction \verb+supprimeDA(...)+, on regarde les demandes d'achats à supprimer +(tableau passé en argument) et ensuite on fait des suppressions succesives dans la base de données. On commence par +supprimer dans la table \verb+Etats_LA+, puis \verb+Ligne_d_achat+ et enfin \verb+Demande_d_achat+. + +\subsubsection{Chargement d'une liste de demande d'achats} +\par La fonction \verb+loadListe()+, fait une requête pour trouver toutes les demandes d'achats corespondant au +champ libellé de l'objet. Pour chaque résultat trouvé, on crée une nouvelle demande d'achat qu'on insère dans la +liste des demandes d'achats. Cette fonction sert à ``initialiser" la liste des demandes d'achats de l'objet. + +\subsubsection{Affichage} +\par L'affichage d'un objet se fait par sa fonction \verb+toHTML()+. diff --git a/doc/gestionDA.tex b/doc/gestionDA.tex new file mode 100644 index 0000000..6132576 --- /dev/null +++ b/doc/gestionDA.tex @@ -0,0 +1,16 @@ +\subsection{Gestion Demandes d'achat} + +\par Il y a deux grandes parties sur cette page : +\itemize{begin} +\item{Demandes d'achats non traitées} : représentant la liste des demandes d'achats qui n'ont pas encore +été traitéen tout ou en partie par un acheteur. +\item{Demandes d'achat en cours de traitement} : représentant la liste des demandes d'achats qui ont +subit au moins un début de traitement (si au moins une des lignes d'achats à fait l'objet d'une commande). +\itemize{end} + +\subsubsection{Demandes d'achats non traitées} +\par Dans cette parties, vous pouvez voir ou supprimer une demande d'achat que vous avez faites. Pour la +supprimer, il vous suffit de cocher la case à gauche du nom et numéros de votre demande d'achat, puis de +cliquer sur le bouton Supprimer situer en bas de la partie des demandes d'achats non traitées. + +\subsubsection{Demandes d'achat en cours de traitement} diff --git a/doc/gestionDesStocks.tex b/doc/gestionDesStocks.tex new file mode 100644 index 0000000..199146b --- /dev/null +++ b/doc/gestionDesStocks.tex @@ -0,0 +1,10 @@ +\subsection{Gestion des stocks} +\par Cette page sert à gérer la quantité de produit présent dans les stocks, les seuils minimum +et maximum correspondant à un produit. +\par Pour l'utiliser, il suffit de selectionner la famille de produit à laquelle le produit +appartient dans le premier menu déroulant (en haut à gauche), de selectionner dans le menu +déroulant juste à droite du premier le produit et enfin de cliquer sur le bouton Modifier. +\par Il apparaît alors un petit formulaire avec des champs représentant le stock actuel, +le seuil minimum et le seuil maximum. Mettez les valeurs que vous vouliez mettre et appuyez +sur le bouton Accepter en dessous du formulaire. Si vous voulez annuler cliquer sur le bouton +Annuler en haut à coté du bouton Modifier, et cliquez sur Accepter. diff --git a/doc/gestionfournisseur.tex b/doc/gestionfournisseur.tex new file mode 100644 index 0000000..7bbb4d2 --- /dev/null +++ b/doc/gestionfournisseur.tex @@ -0,0 +1,22 @@ +\subsection{Gestion des Fournisseur} + +\par Sur cette page, deux parties sont distingables : +\itemize{begin} +\item{Ajout de fournisseurs} +\item{Liste des fournisseurs existants} +\itemize{end} +\subsubsection{Ajout de fournisseurs} +\par Cette partie est composée des champs necessaires pour l'enregistrement d'un nouveau +fournisseur. À gauche de chaque champ, une étiquette permet d'identifier l'information à +laquelle il correspond. Une fois tous les champs rempli, validé l'ajout du fournisseur en +cliquant sur le bouton "Ajouter" à gauche du bouton Annuler dans cette même partie. + +\subsubsection{Liste des fournisseurs existants} +\par Cette petite partie est composée d'une liste de fournisseur, qui est la liste des +fournisseurs connus par le système. Une fois ajouter, un fournisseur n'est pas éternellement +enregistré et indélogeable du système, et peut être retirer. Pour en retirer un, cliquez +simplement sur la case se trouvant sur la même ligne que la petite description du fournisseur +que vous souaitez supprimer de votre liste. Vous pouvez en selectionner plusieurs afin d'en +supprimer plusieurs dans une même opération. Une fois que vous êtes sûr de votre selection, +cliquez sur le bouton Supprimer juste en bas de la liste des fournisseurs. Les fournisseurs +des lignes cochés se trouveront supprimés de votre liste. diff --git a/doc/gestionproduit.tex b/doc/gestionproduit.tex new file mode 100644 index 0000000..00be40e --- /dev/null +++ b/doc/gestionproduit.tex @@ -0,0 +1,35 @@ +\subsection{Gestion de Produits} + +\par Sur cette page, il y a 2 grosses parties : +\itemize{begin} +\item{Ajout de produits} +\item{Liste des produits} +\itemize{end} + +\subsubsection{Ajout de Produits} +\par Cette partie est composée de deux sous-parties : +\itemize{begin} +\item{Informations sur le produit} : Ici, on selectionne d'abord le fournisseur à l'aide du menu +déroulant, puis on entre la désignation du produit, puis le prix en fonction de l'unité, selectionnable +par l'intermédiare du menu déroulant. +\item{Références} : Dans cette sous-partie, on entre les références du produit à ajouter. Le premier +champ correspond à la référence utilisée par le fournisseur. Puis il faut choisir la référence interne +au Cas D'Astre. Si la référence existe déjà, cliquer sur le bouton à gauche du texte "Existante :" et +choisissez dans le menu déroulant, la référence correspondante. Si la référence n'existe pas, cliquez +sur le bouton à gauche du mot "Nouvelle", et entrez la référence interne dans le champ désigné comme +étant référence (en dessous du texte "Nouvelle") et entrez la description dans le champ "Description" +situé en dessous du dernier. +\itemize{end} +\par Afin d'ajouter correctement un nouveau produit faites bien attention à bien remplir tous les champs +nécessaires des deux sous-parties. + +\subsubsection{Listes des Produits} +\par Dans cette partie, une liste est visible composer des produits référencés dans le système +comme étant aux catalogue des fournisseurs de la catégorie à laquelle vous êtes associé (Aciers +et fontes, chimie, ...). Chaque ligne est constituée d'une case à cocher, le numéro interne de +produit, la description du produit, l'identifiant du fournisseur proposant ce produit, et la +référence du produit au sein de cette société. +\par Cette liste sert essentiellement à pouvoir supprimer la référence d'un produit (s'il n'est +plus au catalogue du fournisseur par exemple) du système. Pour le faire, il suffit de cocher la +case devant la ligne du/des produit(s) que l'on veut supprimer, et d'appuyer quand on en est sûr +sur le bouton Supprimer qui se trouve tout en bas de la liste. diff --git a/doc/installation.tex b/doc/installation.tex new file mode 100644 index 0000000..9668ee5 --- /dev/null +++ b/doc/installation.tex @@ -0,0 +1,180 @@ + +\section{Pré-requis} + +\subsection{Machine serveur} +D'Astre.Net nécessite, pour fonctionner : +\begin{itemize} +\item{un serveur web,} +\item{un interpréteur PHP 4.2,} +\item{un serveur de base de donnée relationnelle compatible SQL,} +\item{une connexion réseau permettant au serveur de communiquer avec + les machines clientes.} +\end{itemize} + +\subsection{Machines clientes} +\par Au niveau utilisateur, il est nécessaire d'avoir: +\begin{itemize} +\item{une connexion réseau permettant de contacter le serveur hébergeant + D'Astre.Net} +\item{un navigateur web supportant pleinement les normes du W3C: + XHTML 1.0 et CSS 2, ainsi que le langage JavaScript normalisé ECMA.} +\end{itemize}~ + +\par Nous conseillons l'utilisation d'un navigateur tel que +Mozilla 1.5\footnote{\url{http://www.frenchmozilla.org}}, +Mozilla-FireFox 0.7\footnote{\url{http://www.frenchmozilla.org}}, +Opera 6\footnote{\url{http://www.opera.com}}, +Safari 1.1\footnote{\url{http://www.apple.com/fr/}} ou versions supérieures. +\par Microsoft Internet Explorer 6 ne supportant complètement ni CSS 1, + ni CSS 2 nous ne pouvons garantir avec ce logiciel une parfaite navigation + sur les pages de D'Astre.Net. + +\section{Déploiement du logiciel} + +\subsection{Téléchargement} + +\par Vous pouvez vous procurer D'Astre.Net via +%TODO: (compléter) + +ou le télécharger sur le CVS : +%TODO: (compléter) + + +\subsection{Décompression du package} + +\par Une fois l'archive de D'Astre.Net récupérée, +il vous faudra +choisir un répertoire d'installation (désigné +par "\verb+/le/repertoire/d_installation+" +ici), faire en sorte qu'il soit accessible en lecture, +et y mettre le contenu de l'archive. + +\par Dans votre terminal, tapez : + +\lstset{language=csh} +\begin{lstlisting} +$ mkdir /le/repertoire/d_installation +$ chmod 755 /le/repertoire/d_installation +$ tar -xzvf archive.tar.gz +$ mv dastrenet/* /le/repertoire/d_installation +\end{lstlisting} + + +\subsection{Mise en place de la base de donnée} + +\subsubsection{Création de la base} + +\par Dans une console, connectez vous en tant qu'administrateur +sur la base donnée : +\lstset{language=csh} +\begin{lstlisting} +$ cd /le/repertoire/d_installation +$ mysql -u root -p +Enter password: (password) +[...] + +mysql> +\end{lstlisting} + +Ajoutez une nouvelle base nommée (nommée ici "\verb+dastre_base+") +à votre base de donnée : +\lstset{language=SQL,morekeywords={DATABASE}} +\begin{lstlisting} +mysql> CREATE DATABASE dastre_base; +Query OK, 1 row affected (0.07 sec) +\end{lstlisting} + + +\subsubsection{Création de l'utilisateur} + +\par Vous devez ensuite choisir un nouveau nom d'utilisateur +(et le mot de passe associé) qui serviront à accéder à la base +de D'Astre.Net. +On choisira pour la suite \verb+dastre_username+ pour représenter +l'identifiant de l'utilisateur et \verb+dastre_userpass+ pour son mot +de passe. + +\par Dans le shell de votre base de données (ouvert en tant qu'administrateur), tapez : +\lstset{language=SQL,% + morekeywords={DATABASE,DELETE,FLUSH,GRANT,UPDATE,TO,IDENTIFIED}% + } +\begin{lstlisting} +mysql> GRANT SELECT,INSERT,UPDATE, + -> DELETE,CREATE,ALTER,DROP + -> ON dastre_base.* + -> TO dastre_username@'serveur.domaine' + -> IDENTIFIED BY 'userpass'; +Query OK, 0 rows affected (1.16 sec) + +mysql> FLUSH privileges; +Query OK, 0 rows affected (0.36) +\end{lstlisting} + + +\subsection{Configuration du serveur web} + +\par Ensuite, il convient de configurer le serveur +web afin qu'il permette l'accès au logiciel sur le serveur \verb+serveur.domaine+, +via un nom DNS simple, par exemple \verb+dastre_url.serveur.domaine+. +Il faut pour cela, ajouter (ou modifier) un \verb+VirtualHost+ dans +la configuration du serveur web. + +\par Par exemple, pour un serveur Apache, on ajoutera les lignes +suivantes au fichier \verb+/etc/apache/httpd.conf+ (ou \verb+/etc/httpd/httpd.conf+). +\lstset{language=HTTPD} +\begin{lstlisting} + + DocumentRoot /le/repertoire/d_installation + ServerName dastre_url.serveur.domaine + +\end{lstlisting} + + +\subsection{Configuration du logiciel} + +Dans l'arborescence de D'Astre.Net, éditer le fichier +\verb+/config/db.conf.php+ qui fixe la configuration +du logiciel, et ajoutez ou remplacer-y les valeurs suivantes : + +\begin{itemize} +\item{ le nom du serveur \verb+SQL_SERVER+, } +\item{ le nom de la base de données \verb+SQL_BASE+,} +\item{ le nom de l'utilisateur \verb+SQL_USER+, } +\item{ le mot de passe de l'utilisateur \verb+SQL_PASSWD+. } +\end{itemize} +\par \lstset{language=PHP} +\begin{lstlisting} +define(SQL_SERVER,"serveur.domaine"); +define(SQL_BASE,"dastre_base"); +define(SQL_USER,"dastre_username"); +define(SQL_PASSWD,"dastre_userpass"); +\end{lstlisting} + +\subsection{Création des tables de la base} + +\par Une fois le logiciel installé, et les divers serveurs correctement +configurés, il convient de créer les tables utiles à D'Astre.Net dans +la base \verb+dastre_base+. +Pour cela, ouvrez un navigateur web, et connectez-vous sur : +\url{http://dastre\_url.serveur.domaine/sql/install.php}. + +\par Si toutes les requêtes sont executées avec succès, il ne reste plus +qu'a changer les droits d'accès au répertoire \verb+/sql+ de l'arborescence +de D'Astre.Net afin d'éviter qu'un utilisateur réinitialise la base. +\lstset{language=csh} +\begin{lstlisting} +$ cd /le/repertoire/d_installation +$ chmod 400 sql +\end{lstlisting} + +\par Normalement, à ce stade, D'Astre.Net est prêt à être utilisé. + +\subsection{En cas de problèmes} + +Si jamais il s'est produit une erreur durant de la création +des tables, vous pouvez à tout moment effacer ces dernières +et recommencer en suivant la démarche suivante : ouvrez un +navigateur web, et connectez-vous sur : +\url{http://dastre\_url.serveur.domaine/sql/drop.php}. + + diff --git a/doc/lib_generalite.tex b/doc/lib_generalite.tex new file mode 100644 index 0000000..2f184e9 --- /dev/null +++ b/doc/lib_generalite.tex @@ -0,0 +1,62 @@ + +\section{Généralité sur la construction d'une page de D'Astre.Net} +\subsection{Plusieurs étapes...} + +\par Toutes les pages de D'Astre.Net sont créées dynamiquement. +Leur construction se déroule selon les étapes suivantes : +\begin{itemize} +\item{initialisation de l'environnement,} +\item{chargement des librairies (définitions des classes et fonctions), } +\item{creation d'un objet \verb+Page+,} +\item{remplissage de l'objet \verb+Page+,} +\item{fermeture de l'objet \verb+Page+,} +\item{affichage de la page complete.} +\end{itemize} + +\newpage +\subsection{Plusieurs morceaux...} +\par Le développement était axé sur la modularité, cela nous facilitant l'intégration +de nouveaux élements à un module, ou en modifier le fonctionnement sans perturber le reste +du projet. + +\par Le projet est structuré de la façon suivante : +\begin{verbatim} +CasDAstre/ +|-- README // Instructions pour la compilation du projet +|-- Makefile // Règles de compilation +|-- images/ // Images et thèmes utilisés par le programme +| `-- *.tex // Rapport en LaTeX +|-- includes/ +| `-- *.inc.php // Classe utilisées par le programme +|-- config/ +| `-- *.conf.php // Configuration de Janat +|-- doc/ +| |-- *.tex // Rapport en LaTeX +| `-- Makefile // Regles de compilation +|-- styles/ +| `-- *.css // Feuilles de styles +|-- sql/ // Scripts SQL +| |-- MCDTrac.ger // Modèle Conceptuel de Données +| |-- db-install.php // Script qui execute les requêtes SQL +| |-- db-fill*.sql // Script qui remplit les tables +| `-- db-create*.sql // Script qui créer les tables +`-- *.php // Sources du programme + +\end{verbatim} + +\subsection{La nomenclature pour les fichiers} + +\subsubsection{Les scripts} + +Les scripts appelés directement dans le navigateur se trouvent +à la racine du logiciel. + +\subsubsection{Les classes et bibliothèques} + +\par Les classes se trouvent dans le répertoire includes/ du logiciel. +Une classe "\verb+maclasse+" donnée se retrouvera dans le fichier +\verb+libmaclasse.inc.php"*+". +\par Les bibliotheques de fonctions utiles pour un script \verb+monscript.php+, +se retrouveront soit dans le fichier de la classe principale associée au script, +soit dans un fichier \verb+libmonscript.inc.php+. + diff --git a/doc/libfournisseur.tex b/doc/libfournisseur.tex new file mode 100644 index 0000000..a64d0df --- /dev/null +++ b/doc/libfournisseur.tex @@ -0,0 +1,23 @@ +\section{Fournisseur} + +\lstset{language=PHP} +\begin{lstlisting} +class Fournisseur{ + Fournisseur($id,$nom,$adresse, + $famille, $tel, + $fax, $siret, $siren); + + toHTML(); +} +\end{lstlisting} + +\subsection{Construteur} +Le construteur a pour rôle d'initialiser les variables qui sont récuperées en paramêtre. + +\subsection{Affichage de la page} +\par La méthode \verb+toHTML()+ affiche tous les renseignements d'un fournisseur. + + + + + diff --git a/doc/liblistfournisseur.tex b/doc/liblistfournisseur.tex new file mode 100644 index 0000000..72d6d1a --- /dev/null +++ b/doc/liblistfournisseur.tex @@ -0,0 +1,40 @@ +\section{Liste des fournisseurs} + +\lstset{language=PHP} +\begin{lstlisting} +class ListeFournisseurs { + + function ListeFournisseurs($acheteurID); + function loadList(); + function setFamilleFromAcheteur($acheteurID); + function ajouteFournisseur($id,$nom, $adresse, + $famille, $tel, + $fax, $siret, + $siren); + function supprimeFournisseur($ids); + function loadList(); + function toHTML($editable=0); + +} +\end{lstlisting} + +\par Cette classe contient toutes les fonctions utiles pour la gestion d'une liste de fournisseurs. +\subsection{Constructeur} +\par Le constructeur s'occupe de paramétrer la classe afin de ne charger que les fournisseurs connus par l'Acheteur \verb+$acheteurID+. + +\par +\subsection{Lister tous les fournisseurs} +\par Afin de lister les fournisseurs, nous avons utilsé une requête pour récuperer tous les informations sur un fournisseur. Ainsi la fonction \verb+function loadList()+ permet de charger une liste à partir des éléments de la base de données. Cette fonction remplit le tableau de tous les fournisseurs. + +\subsection{Ajout d'un fournisseur} +\par Pour ajouter un fournisseur dans la base de données, nous avons utilisé l'instruction \verb+INSERT+. Par ailleurs après chaque ajout la fonction \verb+loadList()+ est nécessaire pour faire une mise à jour sur la liste des fournisseurs + +\subsection{Suppression d'un fournisseur} +\par Pour la suppression d'un fournisseur, nous avons utilisé la même procédure que celle de l'ajout, c'est à dire se connecter à la base de données, effectuer une requête et recharger la liste. Cependant pour la suppression d'un fournisseur nous avons utilisé l'instruction \verb+DELETE+. + +\subsection{Affichage de la page} +\par L'affichage de la page se fait à l'aide la fonction \verb+toHTML()+. +En fonction de la valeur du paramêtre booléen \verb+$editable+, la méthode +affiche soit tous les fournisseurs sous la formes d'un tableau +(quand \verb+$editable=1+), soit sous la forme d'une liste de sélection (quand \verb+$editable=0+). + diff --git a/doc/libpage.tex b/doc/libpage.tex new file mode 100644 index 0000000..6e83b54 --- /dev/null +++ b/doc/libpage.tex @@ -0,0 +1,73 @@ +\section{Page} + +Il s'agit de l'objet qui gère tous les composants de la page (en-têtes, scripts, contenu,pied-de-page) et qui gère l'autentification et qui unifie l'apparence des pages. + +\lstset{language=PHP} +\begin{lstlisting} +class Page{ +function logCheck($authorizedLevel=0); +function setTitle($title); +function startHeader(); +function endHeader(){; +function startScript(); +function endScript(); +function startContent(); +function endContent(); +function toHTML(); +} +\end{lstlisting} + +\subsection{Le constructeur} +\par Le construteur de cette classe à plusieurs rôles: +\begin{itemize} +\item{ il initialise les variables} +\item{ il lance une session. En effet, chaque personne qui se connecte sur le site a une session différente.} +\item{ il vérifie si le login est correct. } +\end{itemize} + +\subsection{Les vérifications des droits d'accès} +\par Il est nécessaire, sur chaque page, de vérifier l'identité de l'utilisateur, et +si nécessaire de le forcer a s'identifier correctement. +\par Pour ce faire, il faut appeller la méthode \verb+logCheck($authorizedlevel)+, où \verb+$authorizedlevel+ est le masque qui sera appliqué (fonction AND) bit-à-bit aux droits de l'utilisateur pour valider ou non l'accès à la page. + +\par En général, pour utiliser \verb+logCheck+, il faut : +\lstset{language=PHP} +\begin{lstlisting} +$page=new Page(__FILE__); +$_SESSION["referer"]=basename(__FILE__); +$page->logCheck(); + +\end{lstlisting} +afin que l'utilisateur qui n'était pas loggué revienne automatiquement sur la page courrante après s'être identifié. + +\subsection{L'affichage} +\par La fonction permettant l'affichage des pages est \verb+toHTML()+ +celle-ci assemble le contenu dynamique avec les fichiers suivants, afin de créer +une page de D'Astre.Net: +\begin{itemize} +\item{ \verb+header.inc.php+ :celui le chemin d'acces au +fonction ,et insert les bibiotheque nécessaire pour le fontionnement +du site } +\item{ \verb+bodystart.inc.php+ :ce fichier comprend toutes les balises du début de script html, par exemple :
...} +\item{ \verb+footer.inc.php+ :Le pied de page.} + \item{ \verb+bodyend.inc.php+ : celui-ci contient du code PHP et HTML gérant la fermeture de l'objet page, ajoutant un pied de page et affichant la page.} +\end{itemize} + +\subsection{Les buffers} +\par Pour que l'affichage des pages puisse se faire correctement d'un seul coup dans \verb+toHTML+, il est nécessaire de mettre en tampon toutes les données émises vers la sortie standard. Cela permet (entre autres) l'ajout d'en-têtes HTML à la page alors que le contenu de la page a déja été émis... +Les buffers sont utilisés a tous les niveaux : en-têtes, scripts JavaScript, contenu principal. + +Le contenu du buffer devra {\em impérativement} se trouver entre l'appel des méthodes \verb+startXXX()+ et \verb+endXXX()+. + +Par exemple, pour le contenu de la page : +\lstset{language=PHP} +\begin{lstlisting} +$page->startContent(); +?> + +voila le code PHP-HTML qui est mis en tampon +pour apparaitre a un endroit precis de la page +apres recomposition par toHTML. +endContent(); +\end{lstlisting} diff --git a/doc/libsecuremenu.tex b/doc/libsecuremenu.tex new file mode 100644 index 0000000..fe1c4cb --- /dev/null +++ b/doc/libsecuremenu.tex @@ -0,0 +1,99 @@ + +\section{SecureMenu } + + +\par Cette classe permet la création d'un menu dont les +élements ({\em items}) ne seront affichés qu'aux utilisateurs +ayant les droits d'accès suffisants pour y accéder. + +\subsection{Création d'un menu} + +Pour créer un menu, il suffit de créer un objet en appelant \verb+SecureMenu($level=0)+, où \verb+$level+ est le niveau d'accès nécessaire pour les futurs élements du menus si les droits d'accès ne leurs sont pas explicitement fixés. +Si \verb+$level+ n'est pas spécifié, alors les élements seront accessibles à tous par défaut. + +\par Pour créer un menu il suffit donc de : +\lstset{language=PHP} +\begin{lstlisting} +$exempleMenu1=new SecureMenu(); +$exempleMenu2=new SecureMenu(); +\end{lstlisting} + +\subsection{Ajouter des élements} +\par Pour l'ajout d'un élements, on fait appel à la fonction +\verb+addItem($identifiant,$titre,$page)+, où \verb+$identifiant+ +est l'identifiant interne de l'élément du menu, \verb+$titre+ est +le titre de l'élément, tel qu'il apparaîtra aux utilisateurs du menu, +\verb+$page+ est la page cible affichée lors d'un clic sur l'élément +du menu. + +\par Par exemple: +\lstset{language=PHP} +\begin{lstlisting} +$exempleMenu1->addItem("id_interne_sommaire", + "Sommaire", + "index.php"); +$exempleMenu1->addItem("id_interne2", + "Definitions" + "lexique.php"); +\end{lstlisting} +aura pour effet d'ajouter {\em "Sommaire"}\/ et {\em "Definitions"}\/ au menu, qui pointent +respectivement sur les pages "\verb+index.php+" et "\verb+lexique.php+" + +\subsection{Gestion des droits} +\par Par définition, une application utilisable par des utilisateurs n'ayant +pas le droit aux mêmes actions, doit explicitement {\em restreindre} certaines +zones à certaines personnes. +\par Pour ce faire, il est nécessaire d'indiquer quels "les droits d'accès" +autorisés aux zones restreintes, et indiquer a ces zones le droit d'accès de +l'utilisateur actuel. + +\subsubsection{Fixer les droits sur un élément} + +\par Pour fixer un droit d'accès (qui régira son affichage en fonction de l'utilisateur) +à un élement du menu, il suffit d'utiliser la méthode \verb+setItemLevel($identifiant,$level)+. Dans le prototype de cette fonction, \verb+$identifiant+ indique l'identifiant de +l'élément du menu (comme vu dans \verb+addItem(...)+) et \verb+$level+ est le "droit +d'accès minimum autorisé". + + +\subsubsection{Indiquer au menu les droits actuels} +\par Afin que le menu soit utilisable, il est nécessaire d'indiquer au menu les +droits de l'utilisateur courant par la méthode \verb+setCurrentLevel($level)+, où +\verb+$level+ est le "droit d'accès" de l'utilisateur courrant. + +Par exemple : +\lstset{language=PHP} +\begin{lstlisting} +$menu=new SecureMenu(0); +$menu->addItem("sommaire ", + "Sommaire", + "index.php"); +$menu->setItemLevel("sommaire", + 0); + +$menu->addItem("page_invisible", + "Acces Membres" + "membres.php"); +$menu->setItemLevel("page_invisible", + 1); + +$menu->setCurrentLevel(0); +\end{lstlisting} +aura pour effet de créer un menu dont seul l'élément {\em "Sommaire"} +sera affiché, car le droit d'accès de l'utilisateur indiqué est +insuffisant pour afficher l'entrée {\em "Acces Membres"} du menu. + + +\subsection{Utiliser le menu} + +\par Une fois que les éléments ont été ajoutés et les droits d'accès fixés, le menu +est prêt a être utilisé : il suffit d'appeller la méthode \verb+toHTML()+ qui génère +et renvoie le code HTML correspondant au menu à l'endroit où la fonction est appelée. + +\lstset{language=PHP} +\begin{lstlisting} +$menu=new SecureMenu(); +[...] +print $menu->toHTML(); +\end{lstlisting} + + diff --git a/doc/libuserinfo.tex b/doc/libuserinfo.tex new file mode 100644 index 0000000..8bea0cf --- /dev/null +++ b/doc/libuserinfo.tex @@ -0,0 +1,64 @@ + +\section{UserInfo} + +\par Cette classe permet de faire une distinction pour les differents utilisateurs. +Il est construit dans le fichier \verb+logcheck.php+ afin de permettre aux autres +pages de récupérer les informations sur l'utilisateur. + +\lstset{language=PHP} +\begin{lstlisting} + + function UserInfo($login, + $accesslevel, + $category, + $catid); + function getFirstName(); + function getSecondName(); + function getID(); + function getAccessLevel(); + +} +\end{lstlisting} + +\par {\'E}tant donné que les informations sur les utilisateurs +peuvent provenir de deux tables différentes, il eut été pénible +d'écrire systématiquement dans le code la récupération des bonnes +données. La classe UserInfo sert aussi à éviter cela, et a pour effet +d'alléger le code. + +\lstset{language=PHP} +\begin{lstlisting} +[...] +$switch($ category){ + case LIBUSERINFO_CAT_ACHETEUR: + $query="SELECT * FROM Acheteur " + ."WHERE ID_ACHETEUR='$catid' " + ."ORDER BY ID_ACHETEUR DESC LIMIT 0,1"; + break; + + case LIBUSERINFO_CAT_MAGASINIER: + $query="SELECT * FROM Magasinier " + ."WHERE ID_MAGASINIER='$catid' " + ."ORDER BY ID_MAGASINIER DESC LIMIT 0,1"; + break; + default: break; + +[...]; +} +\end{lstlisting} + + +\subsection{Autres informations} +Nous avons eu besoin de pouvoir recuperer les informations sur l'utilisateur de CasDAstres. C'est pourquoi certaines fonctions ont ete creer. +\subsubsection{Recupere le nom} +\verb+getFirstName+ Renseignement sur le nom de l'utisateur. En effet lors de la connection d'una acheteur ou d'un magazinier, le nom de la personne qui se connecte est récuperer a l'aide de cette fonction. + + +\subsubsection{Recupere le Prenom} +\verb+getSecondName+ Renseignement sur le prenom de l'utisateur. + +\subsubsection{Recupere l'identifiant} +\verb+getID+ Renseignement sur l'identifiant de l'utisateur. L'identifiant est une chaine de caractere. + + + diff --git a/doc/magasinier.tex b/doc/magasinier.tex new file mode 100644 index 0000000..d5e3c85 --- /dev/null +++ b/doc/magasinier.tex @@ -0,0 +1,38 @@ +\section{Magasinier} +\par Lors de la connexion du magasinier, deux parties apparaissent: +\begin{itemize} +\item{La page centrale qui explique toutes les actions qu'il peut faire.} +\item{Le sommaire lui permettant de passer d'une page à une autre.} +\end {itemize} + +\texima{magazinier}{12cm}{9cm} + + +\par Le magazinier a la possibilité de: +\begin{itemize} +\item{Créer une demande d'achat} +\item{Gerer les demande D'achat} +\item{Gerer les stoks} +\end{itemize} +Il peut a tous moments revenir a la page principale en cliquant sur le lien sommaire ou peut également se déconnecter grace au lien 'Déconnexion'. + +\subsection{Création d'une demande d'achat} +\subsubsection{Saisir une demande d'achat} +\par Apres avoir cliquer sur le lien Creation, l'utilisateur voit apparaitre cette page. +\texima{creationDA}{12cm}{9cm} + +\par Pour la création d'une demande d'achat, il s'uffit de saisir la plage d'horaire de livraison ainsi que la date à laquelle on souhaiterai être livré. +\par Evidement l'utilisateur doit sélection le produit en fonction de sa demande. Par ailleurs, pour chaque produit l'utilisateur doit lui affecter une quantité. Apres chaque ajout, une ligne est ajouté dans le tableaux qui suit. Ainsi, il est possible de supprimer un produit déjà ajouter à l'aide du bouton Supprimer. + +\subsubsection{Valider sa demande} +Apres avoir appuyer sur la touche 'Valider', apparait alors l'historique des demandes d'achat qui sont soit en cours de traitements soit non traités. Le magazinier peut ainsi supprimer les demandes qui ne sont pas encore traités. +\par Mais peut-on visualiser cette page sans effectuer une création d'une demande d'achat.?Oui, en effet, en cliquant sur le lien 'Gestion Demande d'achat'. + + +\subsection{Gestion d'une demande d'achat} +\par La gestion des demandes d'achat corespond a la page après avoir valider une demadne d'achar.Comme expliquer plus haut , il est possible de supprimer les demandes d'achat non traités. cette page affiche tous les produit concernant chaque demande achat. + + +\subsection{Gestion des stocks} + + diff --git a/doc/magazinier.png b/doc/magazinier.png new file mode 100644 index 0000000..917ebe1 Binary files /dev/null and b/doc/magazinier.png differ diff --git a/doc/rapport.tex b/doc/rapport.tex new file mode 100644 index 0000000..f643fa4 --- /dev/null +++ b/doc/rapport.tex @@ -0,0 +1,157 @@ +\documentclass[12pt,a4paper]{report} +\usepackage{a4wide} +\usepackage{geometry} +\usepackage{typehtml} +\usepackage[latin1]{inputenc} +\usepackage{listings} +\usepackage{color} + +%% définition des couleurs +\definecolor{hellgelb}{rgb}{1,1,0.8} + +%% définition des langages +\lstdefinelanguage{PHP}{ + morekeywords={and,array,break,case,continue,default,define,do,% + echo,else,elseif,exit,extends,for,global,if,include,includeonce,% + or,print,require,requireonce,return,static,switch,then,var,while,% + xor,foreach,as,class,function,new,extends}, + sensitive,% + morecomment=[l]\#,% + morecomment=[l]//,% + morecomment=[s]{/}{/},% + morestring=[b],% + morestring=[b]% + }[keywords,comments,strings] + +\lstdefinelanguage{HTTPD}{ + morekeywords={VirtualHost,DocumentRoot,ServerName},% + sensitive% + }[keywords,comments,strings] + + + +\lstset{basicstyle=\small,% + xleftmargin=2cm,% + xrightmargin=2cm,% + framextopmargin=.2cm,% + framexbottommargin=.2cm,% + framexleftmargin=.2cm,% + framexrightmargin=.2cm,% + backgroundcolor=\color{hellgelb},% + frame=trbl +} + +\lstdefinestyle{numbers}{numbers=left,stepnumber=10,numberstyle=\tiny,numbersep=10pt} + +\usepackage[french]{babel} +\usepackage{fancyheadings} +\usepackage{color} +\usepackage{float} + +\usepackage[cyr]{aeguill} % Police vectorielle TrueType, guillemets français +%\DeclareGraphicsExtensions{.jpg,.mps,.pdf,.png} % Formats d'images + + +\pagestyle{fancy} +\lhead[\sc{D'Astre.Net : gestion des achats}]{\sc{D'Astre.Net : gestion des achats}} +\rhead[\it{Projet de Génie Logiciel.}]{\it{Projet de Génie Logiciel.}} + +%--------------------------------------------------------------- +\newif\ifpdf +\ifx\pdfoutput\undefined +\pdffalse +\else +\pdfoutput=1 +\pdftrue +\fi + +\ifpdf +% ! The next three lines should be one ! +\usepackage[pdftex,colorlinks=true,urlcolor=blue,pdfstartview=FitH]{hyperref} +\pdfcompresslevel=9 +\hypersetup{ + pdftitle={RAPPORT DU PROJET DE POO ET BD}, + pdfauthor={ROLLAND Glenn, GRIN Thomas, ZANA Rivka}, + pdfsubject={JANAT}, + pdfkeywords={PROJET} + pdfcreator={GleNuX} +} +\usepackage[pdftex]{thumbpdf} % Vignettes +%\usepackage[pdftex, % +% bookmarks = true,% % Signets +% bookmarksnumbered = true,% % Signets numérotés +% pdfpagemode = None,% % Signets/vignettes fermé à l'ouverture +% pdfstartview = FitH,% % La page prend toute la largeur +% pdfpagelayout = SinglePage,% Vue par page +% colorlinks = true,% % Liens en couleur +% urlcolor = magenta,% % Couleur des liens externes +% pdfborder = {0 0 0}% % Style de bordure : ici, pas de bordure +% ]{hyperref} % Utilisation de HyperTeX + +\usepackage[pdftex]{graphicx} +% \usepackage[pdftex]{thumbpdf} +\else + \usepackage[dvips]{epsfig} + \usepackage{hyperref} + \usepackage[T1]{fontenc} +\fi + + +%--------------------------------------------------------------- +\begin{document} +%--------------------------------------------------------------- + +\newcommand{\texima}[3]{ +\begin{figure}[H] + \begin{center} + \ifpdf + % Dans le cas du PDF + % utiliser une image .png, .jpeg ou .jpg + \includegraphics[width=#2,height=#3]{#1.png} + \else + % et dans le cas du DVI / PS + % utiliser du .ps ou du .eps + \epsfig{figure=#1.eps,width=#2,height=#3} + \fi + \end{center} +\end{figure} +} +\newcommand{\texillustr}[3]{ + \ifpdf + % Dans le cas du PDF + % utiliser une image .png, .jpeg ou .jpg + \includegraphics[width=#2,height=#3]{#1.png} + \else + % et dans le cas du DVI / PS + % utiliser du .ps ou du .eps + \epsfig{figure=#1.eps,width=#2,height=#3} + \fi +} + + +\input{couv.tex} % Page de garde +\tableofcontents % Sommaire +\clearpage +\chapter{Introduction} +\chapter{Installation} +\input{installation.tex} +%% Documentation du code +\chapter{Documentation du code} +\input{lib_generalite.tex} +\input{bd.tex} +\input{libpage.tex} +\input{libfournisseur.tex} +\input{liblistfournisseur.tex} +\input{demandeAchat.tex} +%\input{libLDachat.tex} +\input{libsecuremenu.tex} +\input{libuserinfo.tex} +\chapter{Documentation pour l'utilisateur} + +\input{udoc_sommaire.tex} +\input{magasinier.tex} +\input{acheteur.tex} + +\chapter{Conclusion} +\input {conclusion.tex} +\end{document} diff --git a/doc/sommaire.png b/doc/sommaire.png new file mode 100644 index 0000000..935e620 Binary files /dev/null and b/doc/sommaire.png differ diff --git a/doc/udoc_sommaire.tex b/doc/udoc_sommaire.tex new file mode 100644 index 0000000..7c640fd --- /dev/null +++ b/doc/udoc_sommaire.tex @@ -0,0 +1,24 @@ +\section{Login} + +\par Pour utiliser D'Astre.Net, l'utilisateur doit se connecter sur \url{dastre_url.serveur.domaine}. + +\par La premiere page qui apparaît invite l'utilisateur à s'identifier. +L'utilisateur doit saisir son nom ainsi que son mot de passe, puis taper sur +la touche "Entrée" ou cliquer sur "\verb+Envoyer+". + + +\texima{sommaire}{12cm}{9cm} + +\section{Le Menu} + +\par Sur la gauche de l'écran est présent un menu spécifique à l'utilisateur. +Ce menu est composé de plusieurs rubriques (Informations, Actions, etc...), le +contenu de chaque rubrique étant indiqué sous le nom de la rubrique.\\ + +\par La rubrique "Information" indique l'utilisateur dont la session est ouverte, +et permet à celui-ci de quitter sa session à la fin de son travail. + +\par La page "Sommaire ramène l'utilisateur à la page d'entrée de D'Astre.Net. \\ + +\par Les autres rubriques correspondent à des pages spécifiques de l'application, +et leur accès est limité en fonction des droits d'accès de l'utilisateur. diff --git a/fournisseurs.php b/fournisseurs.php new file mode 100644 index 0000000..75e4c02 --- /dev/null +++ b/fournisseurs.php @@ -0,0 +1,118 @@ +startHeader(); +?> + + + +endHeader(); + + $page->logCheck(); + $page->startContent(); + + $listeFournisseurs=new ListeFournisseurs($_SESSION["userInfo"]->getID()); + ?> + +
+

Gestion des fournisseurs : + _familleName; ?> +

+ + ajouteFournisseur( + $_POST["id_nFour"], + $_POST["nom_nFour"], + $_POST["adr_nFour"], + $listeFournisseurs->_familleId, + $_POST["tel_nFour"], + $_POST["fax_nFour"], + $_POST["siret_nFour"], + $_POST["siren_nFour"] + ); + /* do nothing */ + break; + case "Supprimer": + $listeFournisseurs->supprimeFournisseur($_POST["box_fourn"]); + + break; + default: + break; + } + + ?> + +
+ Ajout de fournisseurs +
+

+ Identifiant pour le fournisseur : + +

+

+ Nom du fournisseur: + +

+

+ Adresse du fournisseur: + +

+

+ Famille de produits: + _familleName + . "(" . $listeFournisseurs->_familleId . ")"; + ?> +

+ Numéro de telephone: + +

+

+ Numéro de fax: + +

+

+ Numéro de SIRET: + +

+

+ Numéro de SIREN: + +

+ + +
+
+
+ Liste des fournisseurs existants +
+ + toHTML(1); + ?> +
+
+
+
+ endContent(); + $_SESSION["pageProvenance"]="fournisseur.php"; + + print $page->toHTML(); + ?> diff --git a/icones/README b/icones/README new file mode 100644 index 0000000..e69de29 diff --git a/icones/dastrenet.png b/icones/dastrenet.png new file mode 100644 index 0000000..8e0981a Binary files /dev/null and b/icones/dastrenet.png differ diff --git a/icones/users.png b/icones/users.png new file mode 100644 index 0000000..7f80123 Binary files /dev/null and b/icones/users.png differ diff --git a/images/background.jpg b/images/background.jpg new file mode 100644 index 0000000..a1bca2b Binary files /dev/null and b/images/background.jpg differ diff --git a/includes.inc.php b/includes.inc.php new file mode 100644 index 0000000..a285284 --- /dev/null +++ b/includes.inc.php @@ -0,0 +1,31 @@ + diff --git a/includes/README b/includes/README new file mode 100644 index 0000000..e69de29 diff --git a/includes/libLDachat.inc.php b/includes/libLDachat.inc.php new file mode 100644 index 0000000..4469f2d --- /dev/null +++ b/includes/libLDachat.inc.php @@ -0,0 +1,304 @@ +famille=$fam; + $this->produit=$prod; + $this->quantite=$qte; + $this->_da_id=$da_id; + } + } // FIN classe LDacaht + + class DemandeAchat { + var $_id_mag; + var $_ligneAchat; + var $_ligneIdx; + var $_numero; + + function DemandeAchat($id_mag){ + /* initialiser les var */ + $this->_id_mag=$id_mag; + $this->_ligneAchat=array(); + $this->_ligneIdx=0; + //$this->_numero=666; + } + + function load($id_da){ + // rempli l'objet DA a partir de la base pour l'id id_da + + $connexion = @mysql_connect(SQL_SERVER,SQL_USER,SQL_PASSWD); + + if(!$connexion) { + echo "Erreur serveur mysql $connexion"; + } + + $requete1="SELECT * FROM Ligne_d_achat " + ."WHERE numero_da=".$id_da; + $result1=mysql_db_query(SQL_BASE, $requete1, $connexion) + or die(mysql_error($connexion)); + + while($row=mysql_fetch_object($result1)) { + $prod_ref_in=$row->reference_interne; + $prod_qte=$row->quantite; + + + $requete2="SELECT nom_fam FROM Produit_Interne, Famille_de_produit " + ."WHERE Produit_Interne.reference_fam=Famille_de_produit.reference_fam " + ."AND reference_interne='$prod_ref_in'"; + $result2=mysql_db_query(SQL_BASE, $requete2, $connexion) + or die(mysql_error($connexion)); + + while($row=mysql_fetch_array($result2)) { + $this->ajouteLDA($row[0], + $prod_ref_in, + $prod_qte); + } + } + } + + function ajouteLDA($famProd,$prodSelect,$quantiteDem,$prodUnit="kg"){ + $lda = new LDachat($famProd, $prodSelect, $quantiteDem); + $this->_ligneAchat[$this->_ligneIdx]=&$lda; + $this->_ligneIdx++; + } + + function supprimeLDA($Cases_supp){ + // on cherche les lignes selectionnees pour la suppression + if (is_array($Cases_supp)){ + while( list($case,$val) = each($Cases_supp) ){ + // on supprime les lignes selectionnees + $idx=preg_replace("/Check_/","",$val); + unset($this->_ligneAchat[$idx]); + } + + // on reindexe les tableaux + $tmp_tab = array_values($this->_ligneAchat); + $this->_ligneAchat = $tmp_tab; + $this->_ligneIdx=count($this->_ligneAchat); + } + } + + function toHTML($editable=0){ + if ($this->_ligneIdx<1){ + $content=""; + } else { + + for($i=0;$i<$this->_ligneIdx;$i++) { + $content.="

"; + if ($editable){ + $content.=" "; + } + $content.=""; + $content.=$this->_ligneAchat[$i]->famille; + $content.=" "; + $content.=""; + $content.=$this->_ligneAchat[$i]->produit; + $content.=" "; + $content.=""; + $content.=$this->_ligneAchat[$i]->quantite; + $content.=" "; + $content.="\n"; + $content.="

"; + } + $content.="
"; + if ($editable){ + $content.="\n "; + } + } + return $content; + } + + + /* + * fonction qui insere la demande d'achat dans la base de donnees + */ + function insereBD() { + /* + * connexion a la base de donnees + */ + $connexion = @mysql_connect(SQL_SERVER,SQL_USER,SQL_PASSWD); + + if (!$connexion) { + echo "Erreur serveur mysql $connexion"; + } + + /* + * insertion dans la base de donnees + */ + do{ + $requete="SELECT max(numero_da) AS newId FROM Demande_d_achat"; + $resultat=mysql_db_query(SQL_BASE,$requete,$connexion) + or die(mysql_error($connexion)); + $row=mysql_fetch_object($resultat); + $id_DA=$row->newId; + if ($id_DA!= "NULL"){ + $id_DA+=1; + } else { + $id_DA=1; + } + + //TODO: remplacer la date bidon par une vraie + $date = date("Y")."-".date("m")."-".date("d"); + $requete="INSERT INTO Demande_d_achat (numero_da, date, id_magasinier) " + ."VALUES ('', '$date','".$this->_id_mag."')"; + $resultat=mysql_db_query(SQL_BASE,$requete,$connexion); + $numeroDA=mysql_insert_id(); + } while (!$resultat); + // insertion des lignes d'achat + for($i=0; $i<$this->_ligneIdx; $i++) { + $id_LDA=-1; + $requete=0; + $resultat=0; + do{ + $requete="SELECT max(numero_lda) AS newId from Ligne_d_achat"; + $resultat=mysql_db_query(SQL_BASE,$requete,$connexion) + or die(mysql_error($connexion)); + $row=mysql_fetch_object($resultat); + $id_LDA=$row->newId; + if ($id_LDA!= "NULL"){ + $id_LDA+=1; + } else { + $id_LDA=1; + } + + $requete="INSERT INTO Ligne_d_achat (numero_lda, " + ."numero_da, " + ."reference_interne, " + ."quantite) " + ."VALUES ('$id_LDA', '$numeroDA', " + ."'".$this->_ligneAchat[$i]->produit."', " + ."'".$this->_ligneAchat[$i]->quantite."');"; + $resultat=mysql_db_query(SQL_BASE,$requete,$connexion); + } while(!$resultat); + //TODO: corriger date + $date = date("Y")."-".date("m")."-".date("d"); + $requete="INSERT INTO Etats_LA " + ."(date,Libelle,numero_lda,quantite_recue) " + ."VALUES " + ."('$date','CREE','$id_LDA','0')"; + $resultat=mysql_db_query(SQL_BASE,$requete,$connexion) + or die(mysql_error($connexion)); + } // next lda + } + + }// END Class DemandeAchat + + + /* + * fonctions pour creer les menus deroulant + */ + function menu_deroulant_familleProd ($famille) { + echo "\n"; + } + + function menu_deroulant_Produits ($ref_int, $designation) { + $ref_des = "".$ref_int." : ".$designation; + echo "\n"; + } + + + + /* + * fonction qui donne les familles de produits + */ + function donne_familles() { + /* + * Connexion a la base de donnees + */ + + require("db.conf.php"); + $connexion = @mysql_connect(SQL_SERVER,SQL_USER,SQL_PASSWD); + + /* + * Requete et resultat + */ + $familles = array(); + $requete="SELECT nom_fam FROM Famille_de_produit"; + $resultat=mysql_db_query(SQL_BASE,$requete,$connexion) + or die($requete.":".mysql_error($connexion)); + + while ($ligneTab= mysql_fetch_array($resultat)) { + $familles[] = $ligneTab[0]; + } + + return $familles; + } + + + + + /* + * fonction qui cherche les produits en fonctions de la famille selectionnée + */ + function trouve_produits($ref_famille) { + + require("db.conf.php"); + $connexion = @mysql_connect(SQL_SERVER,SQL_USER,SQL_PASSWD); + + if (!$connexion) { + echo "Erreur serveur mysql $connexion"; + } + + /* on cherche les produits associes */ + $produits = array(); + $requetePROD="SELECT reference_interne, ". + "designation ". + "FROM Produit_Interne ". + "WHERE reference_fam=".$ref_famille; + $resultatPROD=mysql_db_query(SQL_BASE,$requetePROD,$connexion) + or die($requetePROD.":".mysql_error($connexion)); + + while ($lignePROD = mysql_fetch_array($resultatPROD)) { + $produits[] = $lignePROD[0]; + $produits[] = $lignePROD[1]; + } + + return $produits; + } + + + + /* + * fonction permettant de convertir du php en javascript + */ + function convertToJS($var) { + if (is_array($var)) { + $res = "["; + $array = array(); + foreach ($var as $a_var) { + $array[] = convertToJS($a_var); + } + return "(" . join(",", $array) . ")"; + } + elseif (is_bool($var)) { + return $var ? "true" : "false"; + } + elseif (is_int($var) || is_integer($var) || is_double($var) || is_float($var)) { + return $var; + } + elseif (is_string($var)) { + return "'" . addslashes(stripslashes($var)) . "'"; + } + // autres cas: objets, on ne les gère pas + return FALSE; + } + +} // defined LIBLDACHAT_INC + +?> diff --git a/includes/libcommandes.inc.php b/includes/libcommandes.inc.php new file mode 100644 index 0000000..a23cac5 --- /dev/null +++ b/includes/libcommandes.inc.php @@ -0,0 +1,340 @@ +_prod_in=$refprod; + $this->_prod_four=$ref_fourn; + $this->_LDAtab=$LDAtab; + $this->getLLDA(); + } + + function getLLDA(){ + $connexion = @mysql_connect(SQL_SERVER,SQL_USER,SQL_PASSWD); + if ($connexion){ + $this->_LLDAtab=array(); + for ($i=0;$i_LDAtab);$i++){ + $numDA=$this->_LDAtab[$i]; + $requete="SELECT LDA.numero_lda AS num_lda " + ."FROM Ligne_d_achat AS LDA, Etats_LA AS ELA " + ."WHERE LDA.numero_lda=ELA.numero_LDA " + ."AND Libelle='CREE' " + ."AND numero_da='$numDA' " + ."AND reference_interne='".$this->_prod_in."'"; + $resultat=mysql_db_query(SQL_BASE, $requete,$connexion); + if ($resultat){ + $row=mysql_fetch_object($resultat); + array_push($this->_LLDAtab,$row->num_lda); + } else { + print "".mysql_error($connexion).""; + } + } // for + mysql_close($connexion); + } else { + print "".mysql_error($connexion).""; + } + } + + function save($uid){ + $this->getLLDA(); + //TODO : auto-increment + $connexion = @mysql_connect(SQL_SERVER,SQL_USER,SQL_PASSWD); + if ($connexion){ + $requete="INSERT INTO Ligne_de_commande " + ."(numero_com,reference_fournisseur,quantite) " + ."VALUES ('-$uid','".$this->_prod_four."','".$this->getQte()."')"; + $resultat=mysql_db_query(SQL_BASE, $requete,$connexion) or + die(mysql_error($connexion)); + $numero_ldc=mysql_insert_id(); + + // updater l'état des lda + + for ($i=0;$i_LLDAtab);$i++){ + $requete="UPDATE Etats_LA " + ."SET numero_ldc='$numero_ldc',Libelle='COMM' " + ."WHERE numero_lda='".$this->_LLDAtab[$i]."'"; + $resultat=mysql_db_query(SQL_BASE, $requete,$connexion) or + die(mysql_error($connexion)); + } + mysql_close($connexion); + } else { + print "".mysql_error($connexion).""; + } + } + + function getQte(){ + //TODO: + // fait la somme des quantités des LDA + } + function getPrix(){ + //TODO: + // qua + } + + function toHTML(){ + $content=""; + $content.=$this->_prod_in; + $content.="   -   "; + $content.=$this->_prod_four; + return $content; + } + } + + class Commande { + var $_lignes; + var $_userID; + + function Commande($userId){ + $this->_userID=$userId; + } + + function valideLC(){ + $connexion = @mysql_connect(SQL_SERVER,SQL_USER,SQL_PASSWD); + if (!$connexion){ + print "".mysql_error($connexion).""; + } + // 1 .faire la liste des fournisseurs chez + // qui des commandes sont en attente + $requete="SELECT id_fournisseur " + ."FROM Ligne_de_commande AS LDC, ProduitFour AS PF " + ."WHERE LDC.reference_fournisseur=PF.reference_fournisseur " + ."AND numero_com='-".$this->_userID."' " + ."GROUP BY id_fournisseur"; + $resultatf=mysql_db_query(SQL_BASE, $requete,$connexion) or + die ("".mysql_error($connexion).""); + // 2 .pour chaque fournisseur : + while($fournisseur=mysql_fetch_object($resultatf)){ + // - créer une nouvelle commande + $date = date("Y")."-".date("m")."-".date("d"); + $requete="INSERT INTO Commande " + ."(date,id_acheteur,id_fournisseur) " + ."VALUES ('$date'," + ."'".$this->_userID."'," + ."'".$fournisseur->id_fournisseur."')"; + $resultat=mysql_db_query(SQL_BASE, $requete,$connexion) or + die ("".mysql_error($connexion).""); + $cmd_id=mysql_insert_id($connexion); + print ("Id commande : $cmd_id"); + // - associer les lignes de commandes à la commande + // ( changer l'etat ) + $requete="UPDATE Ligne_de_commande " + ."SET numero_com='$cmd_id' " + ."WHERE numero_com='-".$this->_userID."'"; + $resultat=mysql_db_query(SQL_BASE, $requete,$connexion) or + die ("".mysql_error($connexion).""); + } + mysql_close($connexion); + } + + function supprimeLC($Cases_supp){ + $connexion = @mysql_connect(SQL_SERVER,SQL_USER,SQL_PASSWD); + if (!$connexion){ + print "".mysql_error($connexion).""; + } + if (!is_array($Cases_supp)){ + die ("$Cases_supp must be an array !"); + } + $LDCtab=array(); + while( list($case,$val) = each($Cases_supp) ){ + // on supprime les lignes selectionnees + $LDCtab[]=$val; + } + + for ($i=0;$i".mysql_error($connexion).""); + + //supprime la ligne de commande + $requete="DELETE FROM Ligne_de_commande " + ."WHERE numero_ldc='".$LDCtab[$i]."'"; + $resultat=mysql_db_query(SQL_BASE, $requete,$connexion) or + die ("".mysql_error($connexion).""); + } + + mysql_close($connexion); + } + + function ajouteLC($refprod,&$LDAtab,$ref_fourn){ + $ligneCom=new LigneCommande($refprod,$LDAtab,$ref_fourn); + $ligneCom->save($this->_userID); + } + + + function toHTML(){ + $connexion = @mysql_connect(SQL_SERVER,SQL_USER,SQL_PASSWD); + if (!$connexion){ + print "".mysql_error($connexion).""; + } + // on récupere les lignes d'achats en cours + $requete="SELECT numero_ldc,reference_fournisseur " + ."FROM Ligne_de_commande AS LDC " + ."WHERE LDC.numero_com='-".$this->_userID."'"; + $resultat=mysql_db_query(SQL_BASE, $requete,$connexion) or + die ("".mysql_error($connexion).""); + $LDCtab=array(); + $LDCInfoTab=array(); + while ($row=mysql_fetch_object($resultat)){ + array_push($LDCtab,$row->numero_ldc); + array_push($LDCInfoTab,$row->reference_fournisseur); + } + + $content=""; + for ($i=0;$i"; + $content.="
"; + $content.="LDC°".$LDCtab[$i]." - "; + $content.="Ref fournisseur: ".$LDCInfoTab[$i]; + $content.="
"; + $requete="SELECT numero_da,LDA.reference_interne," + ."PI.designation,PI.unite,quantite " + ."FROM Etats_LA AS ELA, Ligne_d_achat as LDA, " + ."Produit_Interne AS PI " + ."WHERE numero_ldc='".$LDCtab[$i]."' " + ."AND LDA.reference_interne=PI.reference_interne " + ."AND ELA.numero_lda=LDA.numero_lda"; + $resultat=mysql_db_query(SQL_BASE, $requete,$connexion) or + die ("".mysql_error($connexion).""); + while($row=mysql_fetch_object($resultat)){ + $content.="
\n"; + $content.="DA°".$row->numero_da." - \n"; + $content.="".$row->reference_interne." : \n"; + $content.="".$row->designation." - \n"; + $content.="Qté: ".$row->quantite." \n"; + $content.="(".$row->unite.") \n"; + $content.="
\n"; + } + $content.=""; + } + $content.="
"; + $content.=""; + mysql_close($connexion); + return $content; + } + + } + + + class CmdTool { + var $_famille; + var $_ref_in; + var $_lda; + + function CmdTool($famille){ + $this->_famille=$famille; + } + + function FournToHTML($ref){ + $content=""; + $connexion = @mysql_connect(SQL_SERVER,SQL_USER,SQL_PASSWD); + if ($connexion){ + $requete="SELECT nom,F.id_fournisseur as idf,reference_fournisseur,prix,unite " + ."FROM ProduitFour AS PF,Fournisseur as F " + ."WHERE PF.id_fournisseur=F.id_fournisseur " + ."AND reference_interne='$ref'"; + $result=mysql_db_query(SQL_BASE,$requete,$connexion); + if ($result){ + $content.="\n"; + } else { + print "".mysql_error($connexion).""; + } + mysql_close($connexion); + } else { + print "".mysql_error($connexion).""; + } + return $content; + + } + + function LDAtoHTML($ref){ + $content=""; + $connexion = @mysql_connect(SQL_SERVER,SQL_USER,SQL_PASSWD); + if ($connexion){ + $requete="SELECT numero_da, LDA.numero_lda, quantite, Date " + ."FROM Ligne_d_achat AS LDA , Etats_LA AS ELA " + ."WHERE LDA.numero_lda=ELA.numero_lda " + ."AND Libelle='CREE' " + ."AND reference_interne='$ref'"; + $result=mysql_db_query(SQL_BASE,$requete,$connexion); + if ($result){ + $content.="\n"; + } else { + print "".mysql_error($connexion).""; + } + mysql_close($connexion); + } else { + print "".mysql_error($connexion).""; + } + return $content; + } + + function ReftoHTML(){ + $content=""; + for ($i=0;$i_ref_in);$i++){ + if ($i==0){ + $content.="\n"; + } + $content.="\n"; + } + return $content; + } + + + function chargeRef(){ + $connexion = @mysql_connect(SQL_SERVER,SQL_USER,SQL_PASSWD); + if ($connexion){ + $requete="SELECT LDA.reference_interne AS ref_in " + ."FROM Ligne_d_achat AS LDA, Etats_LA as ELA, Produit_Interne as PI " + ."WHERE LDA.numero_lda=ELA.numero_lda " + ."AND LDA.reference_interne=PI.reference_interne " + ."AND Libelle='CREE' " + ."AND reference_fam='".$this->_famille."' " + ."GROUP BY LDA.reference_interne"; + $result=mysql_db_query(SQL_BASE,$requete,$connexion); + if ($result){ + $this->_ref_in=array(); + while($row=mysql_fetch_object($result)){ + array_push($this->_ref_in,$row->ref_in); + } + } else { + print "".mysql_error($connexion).""; + } + mysql_close($connexion); + } else { + print "".mysql_error($connexion).""; + } + } //function + } // class +} +?> diff --git a/includes/liberrormsg.inc.php b/includes/liberrormsg.inc.php new file mode 100644 index 0000000..3ebb4b2 --- /dev/null +++ b/includes/liberrormsg.inc.php @@ -0,0 +1,16 @@ + diff --git a/includes/libfournisseurs.inc.php b/includes/libfournisseurs.inc.php new file mode 100644 index 0000000..ba71f41 --- /dev/null +++ b/includes/libfournisseurs.inc.php @@ -0,0 +1,44 @@ +_nom = $nom; + $this->_adresse = $adresse; + $this->_famille = $famille; + $this->_tel = $tel; + $this->_fax = $fax; + $this->_siret = $siret; + $this->_siren = $siren; + $this->_id = $id; + } + + function toHTML(){ + // affichage + $content=""; + $content.="_id."\" />\n"; + $content.="".$this->_id."\n"; + $content.="".$this->_nom."\n"; + $content.="".$this->_adresse."\n"; + $content.="".$this->_tel."\n"; + $content.="".$this->_fax."\n"; + $content.="".$this->_siret."\n"; + $content.="".$this->_siren."\n"; + return $content; + } + } +} +?> diff --git a/includes/liblisteDA.inc.php b/includes/liblisteDA.inc.php new file mode 100644 index 0000000..b2216b9 --- /dev/null +++ b/includes/liblisteDA.inc.php @@ -0,0 +1,146 @@ +_numDA=0; + $this->_liste=array(); + // si id_mag < 0 alors on prend tous les id_mag + $this->_id_mag=$id_mag; + $this->_libelle=$libelle; + } + + + function ajouteDA($da) { + //$da = new DemandeAchat(0); + $this->_liste[$this->_numDA]=&$da; + $this->_numDA++; + } + + function supprimeDA($Cases_supp) { + // on cherche les lignes selectionnees pour la suppression + if (is_array($Cases_supp)){ + while( list($case,$val) = each($Cases_supp) ){ + // on supprime les DA selectionnees de la BD + + // tout d'abord de la BD + $connexion = @mysql_connect(SQL_SERVER,SQL_USER,SQL_PASSWD); + + if(!$connexion) { + echo "Erreur serveur mysql $connexion"; + } + + // on supprime également les états des lignes d'achat + // associees + $requete="SELECT numero_lda FROM Ligne_d_achat " + ."WHERE numero_da='$val'"; + $result=mysql_db_query(SQL_BASE, $requete, $connexion) + or die(mysql_error($connexion)); + + while($row=mysql_fetch_object($result)) { + $requete_ela="DELETE FROM Etats_LA " + ."WHERE numero_lda='".$row->numero_lda."'"; + $result_ela=mysql_db_query(SQL_BASE, $requete_ela, $connexion); + if (!$result_ela){ + print ""; + print mysql_error($connexion); + print ""; + } + + } + // ainsi que les LDA elles-même + $requete_lda="DELETE FROM Ligne_d_achat " + ."WHERE numero_da='$val'"; + $resultat=mysql_db_query(SQL_BASE, $requete_lda, $connexion); + if (!$resultat){ + print ""; + print mysql_error($connexion); + print ""; + } + + // et enfin la demande + $requete="DELETE FROM Demande_d_achat " + ."WHERE numero_da='$val'"; + //.$this->_liste[$idx]->_numero."'"; + $result=mysql_db_query(SQL_BASE, $requete, $connexion) + or die(mysql_error($connexion)); + + // ensuite du tableau liste + } + + // on reindexe le tableau + $this->loadListe(); + } + } + + function loadListe() { + // rempli l'objet ListeDA a partir de la base pour l'id id_mag + $connexion = @mysql_connect(SQL_SERVER,SQL_USER,SQL_PASSWD); + + if(!$connexion) { + echo "Erreur serveur mysql $connexion"; + } + + if($libelle!="TOUTES") { + $requete="SELECT Ligne_d_achat.numero_da " + ."FROM Ligne_d_achat, Etats_LA, Demande_d_achat " + ."WHERE Libelle='".$this->_libelle."' "; + if ($this->_id_mag>0){ + $requete.="AND Demande_d_achat.id_magasinier='".$this->_id_mag."' "; + } + $requete.="AND Demande_d_achat.numero_da=Ligne_d_achat.numero_da " + ."AND Ligne_d_achat.numero_lda=Etats_LA.numero_lda " + ."GROUP BY Ligne_d_achat.numero_da"; + } + else { + $requete="SELECT numero_da FROM Demande_d_achat"; + if ($this->_id_mag>0){ + $requete.=" WHERE id_magasinier='".$this->_id_mag."'"; + } + } + + $result=mysql_db_query(SQL_BASE, $requete, $connexion) + or die(mysql_error($connexion)); + + $this->_numDA=0; + $this->_liste=array(); + while($row=mysql_fetch_array($result)) { + $da=new DemandeAchat($this->_id_mag); + $da->_numero=$row[0]; + $da->load($row[0]); + $this->ajouteDA($da); + } + + } + + function toHTML($editable=1) { + for($i=0; $i<$this->_numDA; $i++) { + $content.="
"; + $content.="\n"; + if ($editable) { + $content.="_liste[$i]->_numero."\" " + .">"; + } + $content.="Demande Achat n°".$this->_liste[$i]->_numero."\n"; + $content.=$this->_liste[$i]->toHTML(0); + $content.="
"; + $content.="
"; + } + return $content; + } + }// fin classe ListeDA + + } +?> diff --git a/includes/liblistefournisseurs.inc.php b/includes/liblistefournisseurs.inc.php new file mode 100644 index 0000000..ca2cf6a --- /dev/null +++ b/includes/liblistefournisseurs.inc.php @@ -0,0 +1,168 @@ +_fournisseurs=array(); + $this->_fournisseursIdx=0; + $this->_familleId=-1; + $this->_familleName="Aucune famille de produit trouvée"; + $this->setFamilleFromAcheteur($acheteurID); + $this->loadList(); + } + + function setFamilleFromAcheteur($acheteurID){ + $connexion = @mysql_connect(SQL_SERVER,SQL_USER,SQL_PASSWD); + if ($connexion){ + // preparation de la requete : + $requete="SELECT reference_fam,nom_fam " + ."FROM Famille_de_produit " + ."WHERE id_acheteur='$acheteurID' " + ."ORDER BY id_acheteur LIMIT 0,1"; + // envoie de la requete + $resultat=mysql_db_query(SQL_BASE,$requete,$connexion) + or die($requete.":".mysql_error($connexion)); + $row = mysql_fetch_object($resultat); + $this->_familleId=$row->reference_fam; + $this->_familleName=$row->nom_fam; + mysql_close($connexion); + } else { + mysql_error($connexion); + } + } + + function ajouteFournisseur($id,$nom, $adresse,$famille, + $tel, $fax, $siret, $siren) + { + //TODO: escaper les valeurs + $connexion = @mysql_connect(SQL_SERVER,SQL_USER,SQL_PASSWD); + if ($connexion){ + $requete="INSERT INTO Fournisseur " + ."(id_fournisseur,nom,adresse,telephone,fax,SIRET," + ."SIREN,reference_fam) " + ."VALUES ('$id','$nom','$adresse','$tel','$fax','$SIRET'," + ."'$SIREN','$famille')"; + $result=mysql_db_query(SQL_BASE,$requete,$connexion); + if (!$result){ + print "\nErreur :"; + print mysql_error($connexion); + print "\n\n"; + } + } else { + mysql_error($connexion); + } + mysql_close($connexion); + $this->loadList(); + } + + function supprimeFournisseur($ids){ + // on cherche les lignes selectionnees pour la suppression + //on supprime aussi les produits du fournisseur... + if (count($ids)>0){ + $connexion = @mysql_connect(SQL_SERVER,SQL_USER,SQL_PASSWD); + if ($connexion){ + while( list($case,$val) = each($ids) ){ + // on supprime les lignes selectionnees + $requete="DELETE FROM ProduitFour " + ."WHERE id_fournisseur='$val' "; + $resultat=mysql_db_query(SQL_BASE,$requete,$connexion); + if(!$resultat){ + print mysql_error($connexion); + } + + $requete="DELETE FROM Fournisseur " + ."WHERE id_fournisseur='$val' " + ."AND reference_fam='".$this->_familleId."'"; + $resultat=mysql_db_query(SQL_BASE,$requete,$connexion); + if(!$resultat){ + print mysql_error($connexion); + } + } + mysql_close($connexion); + } // connexion + } // count + $this->loadList(); + } + + function loadList(){ + // charge la liste des fournisseurs + $connexion = @mysql_connect(SQL_SERVER,SQL_USER,SQL_PASSWD); + if ($connexion){ + // preparation de la requete : + $requete="SELECT * " + ."FROM Fournisseur " + ."WHERE reference_fam='".$this->_familleId."' " + ."ORDER BY id_fournisseur"; + // envoie de la requete + $resultat=mysql_db_query(SQL_BASE,$requete,$connexion) + or die($requete.":".mysql_error($connexion)); + $this->_fournisseurs=array(); + $this->_fournisseursIdx=0; + while($row = mysql_fetch_object($resultat)){ + $four=new Fournisseur( + $row->id_fournisseur, + $row->nom, + $row->adresse, + $row->reference_fam, + $row->telephone, + $row->fax, + $row->SIRET, + $row->SIREN + ); + $this->_fournisseurs[$this->_fournisseursIdx]=$four; + $this->_fournisseursIdx+=1; + } + mysql_close($connexion); + } else { + mysql_error($connexion); + } + + } + + function toHTML($editable=0){ + $content=""; + if (!$editable){ + $content.="\n"; + } else { + if (count($this->_fournisseurs)>0){ + $content.="\n"; + } + } + return $content; + } + } + + } + ?> diff --git a/includes/liblisteproduits.inc.php b/includes/liblisteproduits.inc.php new file mode 100644 index 0000000..67c123e --- /dev/null +++ b/includes/liblisteproduits.inc.php @@ -0,0 +1,168 @@ +_prodIn=array(); + $this->_prodInInfo=array(); + $this->_prodFo=array(); + $this->_prodFoInfo=array(); + $this->_famille=$famille; + $this->chargeListeInterne(); + $this->chargeListeFournisseur(); + } + + function supprimeProduitFournisseur($ids){ + // on cherche les lignes selectionnees pour la suppression + if (count($ids)>0){ + $connexion = @mysql_connect(SQL_SERVER,SQL_USER,SQL_PASSWD); + if ($connexion){ + while( list($case,$val) = each($ids) ){ + // on supprime les lignes selectionnees + $requete="DELETE FROM ProduitFour " + ."WHERE reference_fournisseur='$val' "; + $resultat=mysql_db_query(SQL_BASE,$requete,$connexion); + if(!$resultat){ + print mysql_error($connexion); + } + } + mysql_close($connexion); + } // connexion + } // count + $this->chargeListeFournisseur(); + + } + + function ajouteProduitInterne($ref_in,$design,$unit){ + $connexion = @mysql_connect(SQL_SERVER,SQL_USER,SQL_PASSWD); + if ($connexion){ + $requete="INSERT INTO Produit_Interne " + ."( reference_interne, designation, unite, " + ."reference_fam )" + ."VALUES ('$ref_in','$design','$unit','".$this->_famille."')"; + $result=mysql_db_query(SQL_BASE,$requete,$connexion); + if (!$result){ + print "\nErreur :"; + print mysql_error($connexion); + print "\n\n"; + } + } else { + mysql_error($connexion); + } + mysql_close($connexion); + $this->chargeListeInterne(); + } + + function ajouteProduitFournisseur( + $fourn, + $design, + $prix, + $unit, + $ref_out, + $ref_in){ + $connexion = @mysql_connect(SQL_SERVER,SQL_USER,SQL_PASSWD); + if ($connexion){ + $requete="INSERT INTO ProduitFour " + ."( reference_fournisseur, designation, prix, " + ."unite,id_fournisseur,reference_interne )" + ."VALUES ('$ref_out','$design','$prix','$unit'," + ."'$fourn','$ref_in')"; + $result=mysql_db_query(SQL_BASE,$requete,$connexion); + if (!$result){ + print "\nErreur :"; + print mysql_error($connexion); + print "\n\n"; + } + } else { + mysql_error($connexion); + } + mysql_close($connexion); + $this->chargeListeFournisseur(); + } + + function listeFournisseurToHTML(){ + $content=""; + for ($i=0;$i_prodFo);$i++){ + $content.="

"; + $content.=$this->_prodFo[$i]->toHTML(1); + $content.="

"; + } + return $content; + + } + + function referencesHTML(){ + $content=""; + $content.=""; + return $content; + } + + function chargeListeFournisseur(){ + $connexion=@mysql_connect(SQL_SERVER,SQL_USER,SQL_PASSWD); + if ($connexion){ + $requete="SELECT reference_fournisseur,designation," + ."prix,unite,A.id_fournisseur,reference_interne " + ."FROM ProduitFour AS A, Fournisseur AS B " + ."WHERE A.id_fournisseur=B.id_fournisseur " + ."AND reference_fam='".$this->_famille."'"; + $resultat=mysql_db_query(SQL_BASE,$requete,$connexion); + if ($resultat){ + $this->_prodFo=array(); + $this->_prodFoInfo=array(); + while($row=mysql_fetch_object($resultat)){ + //TODO: + $produit=new ProduitFournisseur( + $row->reference_fournisseur, + $row->designation, + $row->prix, + $row->unite, + $row->id_fournisseur, + $row->reference_interne + ); + array_push($this->_prodFo,$produit); + } + } + mysql_close($connexion); + } else { + print mysql_error($connexion); + } // connexion + + } + + function chargeListeInterne(){ + $connexion=@mysql_connect(SQL_SERVER,SQL_USER,SQL_PASSWD); + if ($connexion){ + $requete="SELECT reference_interne,designation " + ."FROM Produit_Interne " + ."WHERE reference_fam='".$this->_famille."' " + ."GROUP BY reference_interne"; + $resultat=mysql_db_query(SQL_BASE,$requete,$connexion); + if ($resultat){ + $this->_prodIn=array(); + $this->_prodInInfo=array(); + while($row=mysql_fetch_object($resultat)){ + array_push($this->_prodIn,$row->reference_interne); + array_push($this->_prodInInfo,$row->designation); + } + } + mysql_close($connexion); + } else { + print mysql_error($connexion); + } // connexion + } //function + } // class +} // define +?> diff --git a/includes/libpage.inc.php b/includes/libpage.inc.php new file mode 100644 index 0000000..a04ed5e --- /dev/null +++ b/includes/libpage.inc.php @@ -0,0 +1,128 @@ +_referer=$referer; + $this->_basedir=dirname($referer); + $this->_script=array(); + $this->_header=array(); + $this->_currentScript=0; + $this->_currentHeader=0; + // initialiser les variables d'inclusion + + // lancer la session + session_start(); + // vérifier le login + } + + function logCheck($authorizedLevel=0){ + include("logcheck.php"); + /* TODO: prévoir un niveau de check */ + } + + function setTitle($title){ + + } + + function startHeader(){ + ob_start(); + } + + function endHeader(){ + $this->_header[$this->_currentHeader]=ob_get_contents(); + $this->_currentHeader=$this->_currentHeader+1; + ob_end_clean(); + } + + function startScript(){ + //TODO: faire en sorte de vérifier l'ordre des balises + ob_start(); + print "\n"; + $this->_script[$this->_currentScript]=ob_get_contents(); + $this->_currentScript=$this->_currentScript+1; + ob_end_clean(); + } + + function startContent(){ + //TODO: faire en sorte de vérifier l'ordre des balises + ob_start(); + } + + function endContent(){ + //TODO: faire en sorte de vérifier l'ordre des balises + $this->_content=ob_get_contents(); + ob_end_clean(); + } + + function toHTML(){ + $htmlCode=""; + + /* Start of page */ + ob_start(); + include("header.inc.php"); + $htmlCode.=ob_get_contents(); + ob_end_clean(); + + /* Headers */ + + for($i=0;$i<$this->_currentHeader;$i++) { + $htmlCode.=$this->_header[$i]; + } + + /* Javascript */ + $htmlCode.="\n"; + + /* Start of page */ + ob_start(); + include("bodystart.inc.php"); + $htmlCode.=ob_get_contents(); + ob_end_clean(); + + /* Content of page */ + $htmlCode.=$this->_content; + + /* Footer */ + ob_start(); + include("footer.inc.php"); + $htmlCode.=ob_get_contents(); + ob_end_clean(); + + /* End of page */ + ob_start(); + include("bodyend.inc.php"); + $htmlCode.=ob_get_contents(); + ob_end_clean(); + + return $htmlCode; + } + + } // end class + +} // end ifdef +?> diff --git a/includes/libproduits.inc.php b/includes/libproduits.inc.php new file mode 100644 index 0000000..ff00cc8 --- /dev/null +++ b/includes/libproduits.inc.php @@ -0,0 +1,259 @@ +reference_fam; + } else { + print "".mysql_error($connexion).""; + } + mysql_close($connexion); + }else { + echo "".mysql_error($connexion).""; + } + return $famille; + } + + /* + * classe qui represente les produits internes + * avec le stock courant et les differents seuils + */ + class ProduitInterne { + var $_ref_in; + var $_stock; + var $_seuil_min; + var $_seuil_max; + var $_id_site; + + function ProduitInterne($reference, $id_site) { + $this->_ref_in=$reference; + $this->_stock=0; + $this->_seuil_min=0; + $this->_seuil_max=0; + $this->_id_site=$id_site; + } + + /* + * fonction qui insere les infos d'un produit + * ds la BD lorsque celui-ci n'est pas connu + */ + function insereInfos(){ + $connexion = @mysql_connect(SQL_SERVER,SQL_USER,SQL_PASSWD); + + if(!$connexion) { + echo "".mysql_error($connexion).""; + } + + $requete="INSERT INTO Stocker (id_site, " + ."reference_interne, " + ."stock, " + ."seuil_min, " + ."seuil_max) " + ."VALUES ('".$this->_id_site."', " + ."'".$this->_ref_in."', " + ."'".$this->_stock."', " + ."'".$this->_seuil_min."', " + ."'".$this->_seuil_max."')"; + + $result=mysql_db_query(SQL_BASE, $requete, $connexion) + or die(mysql_error($connexion)); + + mysql_close($connexion); + } + + + /* + * fonction qui insere les nouvelles valeurs + * des seuils et du stock ds la BD + */ + function modifSeuils(){ + $connexion = @mysql_connect(SQL_SERVER,SQL_USER,SQL_PASSWD); + + if(!$connexion) { + echo "Erreur serveur mysql $connexion"; + } + + $requete="UPDATE Stocker " + ."SET stock='".$this->_stock."', " + ."seuil_min='".$this->_seuil_min."', " + ."seuil_max='".$this->_seuil_max."' " + ."WHERE id_site='".$this->_id_site."' " + ."AND reference_interne='".$this->_ref_in."' "; + $result=mysql_db_query(SQL_BASE, $requete, $connexion) + or die(mysql_error($connexion)); + mysql_close($connexion); + } + + + /* + * fonction qui permet l'effacement d'un produit de la table stocker + */ + function supprProStck(){ + $connexion = @mysql_connect(SQL_SERVER,SQL_USER,SQL_PASSWD); + + if(!$connexion) { + echo "Erreur serveur mysql $connexion"; + } + + $requete="DELETE FROM Stocker " + ."WHERE reference_interne='".$this->_ref_in."' " + ."AND id_site='".$this->_id_site."' "; + $result=mysql_db_query(SQL_BASE, $requete, $connexion) + or die(mysql_error($connexion)); + mysql_close($connexion); + } + + + + + /* + * fonction qui permet de savoir si le produit + * est deja insere dans la table Stocker + */ + function exists() { + // TODO: regarder dans la table Stocker si le produit y est + // si oui: return TRUE, else FALSE + $connexion=@mysql_connect(SQL_SERVER,SQL_USER,SQL_PASSWD); + + if(!$connexion) { + echo "Erreur serveur mysql $connexion"; + } + + $requete="SELECT reference_interne FROM Stocker " + ."WHERE reference_interne='".$this->_ref_in."' " + ."AND id_site='".$this->_id_site."' " + ."LIMIT 0,1"; + + $result=mysql_db_query(SQL_BASE,$requete,$connexion); + + $row=mysql_fetch_object($result); + + mysql_close($connexion); + + if($row) { + return 1; + } + else { + return 0; + } + } + + + /* + * fonction qui remplie l'objet produit avec les valeurs dans la base + * ou dans le cas d'un nouveau produit les initialisent a zero + */ + function rempliVals() { + if($this->exists()) { + $connexion=@mysql_connect(SQL_SERVER,SQL_USER,SQL_PASSWD); + + if(!$connexion) { + echo "Erreur serveur mysql $connexion"; + } + + $requete="SELECT stock, seuil_min, seuil_max FROM Stocker " + ."WHERE reference_interne='".$this->_ref_in."' " + ."AND id_site='".$this->_id_site."' " + ."LIMIT 0,1"; + + $result=mysql_db_query(SQL_BASE,$requete,$connexion); + + $row=mysql_fetch_object($result); + + // on rempli les champs avec les resultats de la requete + $this->_stock=$row->stock; + $this->_seuil_min=$row->seuil_min; + $this->_seuil_max=$row->seuil_max; + + mysql_close($connexion); + + } + else { + $this->_stock=0; + $this->_seuil_min=0; + $this->_seuil_max=0; + } + } + + + function toHTML(){ + $content.="
"; + $content.="\n"; + $content.="Modifier les informations du produit ".$this->_ref_in."\n"; + $content.="

\n"; + $content.="Stock "; + $content.="_stock."\" />"; + $content.="

\n"; + $content.="

\n"; + $content.="Seuil minimum "; + $content.="_seuil_min."\" />"; + $content.="

\n"; + $content.="

\n"; + $content.="Seuil maximum "; + $content.="_seuil_max."\" />"; + $content.="

\n"; + $content.="
"; + $content.="
"; + $content.="
"; + $content.="

"; + $content.=""; + $content.=""; + $content.="

"; + $content.="
"; + + return $content; + } + + }// FIN classe ProduitInterne + + class ProduitFournisseur { + var $_ref_fo; + var $_desig; + var $_prix; + var $_unite; + var $_id_fo; + var $_ref_in; + + function ProduitFournisseur( + $ref_fo, + $desig, + $prix, + $unite, + $id_fo, + $ref_in){ + $this->_ref_fo=$ref_fo; + $this->_desig=$desig; + $this->_prix=$prix; + $this->_unite=$unite; + $this->_id_fo=$id_fo; + $this->_ref_in=$ref_in; + } + function toHTML($editable=0){ + $content=""; + if ($editable){ + $content.="_ref_fo."\" />\n"; + } + $content.="".$this->_ref_fo." \n"; + $content.="".$this->_desig." \n"; + $content.="".$this->_prix." \n"; + $content.="".$this->_unite." \n"; + $content.="".$this->_id_fo." \n"; + $content.="".$this->_ref_in." \n"; + return $content; + } + } + +} +?> diff --git a/includes/libsecuremenu.inc.php b/includes/libsecuremenu.inc.php new file mode 100644 index 0000000..b43c7f7 --- /dev/null +++ b/includes/libsecuremenu.inc.php @@ -0,0 +1,72 @@ +_title=$title; + $this->_name=array(); + $this->_url=array(); + $this->_visible=array(); + $this->_params=array(); + $this->_defaultLevel=$level; + } + + /* + * Ajoute une entrée au menu + */ + + function addItem($param,$name="",$url=""){ + array_push($this->_params,$param); + /* Verifie s'il s'agit d'un séparateur */ + $this->_name[$param]="$name"; + $this->_url[$param]="$url"; + $this->_level[$param]=$this->_defaultLevel; + } + + /* + * Active une entrée du menu + */ + function setItemLevel($param,$level){ + $this->_level[$param]=$level; + } + + function setCurrentLevel($level){ + if ($level<0) { $level =0; } + $this->_currentLevel=$level; + } + + function toHTML(){ + $answer="

".$this->_title."

"; + $answer.="_params as $param){ + if (($this->_level[$param] ^ $this->_currentLevel)>0){ + $answer.="
  • " + ."_url[$param] + ."\">" + .$this->_name[$param] + ."" + ."
  • \n"; + } + } + $answer.=""; + return $answer; + } + } +} + +?> diff --git a/includes/libuserinfo.inc.php b/includes/libuserinfo.inc.php new file mode 100644 index 0000000..06a1884 --- /dev/null +++ b/includes/libuserinfo.inc.php @@ -0,0 +1,85 @@ +0){ + $row=mysql_fetch_object($result); + $this->_firstName=$row->nom; + $this->_secondName=$row->prenom; + $this->_address=$row->adresse; + $this->_tel=$row->telephone; + $this->_fax=$row->fax; + $this->_site=$row->id_site; + $this->_accessLevel=$accesslevel; + $this->_id=$catid; + /* TODO: remplir l'objet avec les valeurs de la BD */ + } else { + mysql_error($connexion); + } + + mysql_close($connexion); + } + } + } + + + function getFirstName(){ + return $this->_firstName; + } + + function getSecondName(){ + return $this->_secondName; + } + + function getID(){ + return $this->_id; + } + + function getSite(){ + return $this->_site; + } + + function getAccessLevel(){ + return $this->_accessLevel; + } + } + + +} +?> diff --git a/includes/scriptJS_DA.inc.php b/includes/scriptJS_DA.inc.php new file mode 100644 index 0000000..3076fbe --- /dev/null +++ b/includes/scriptJS_DA.inc.php @@ -0,0 +1,53 @@ + diff --git a/index.php b/index.php new file mode 100644 index 0000000..a7f9c4d --- /dev/null +++ b/index.php @@ -0,0 +1,51 @@ +logCheck(); + +$page->startContent(); + +?> +
    +

    D'Astre.Net

    +

    +D'Astre.Net est la solution de gestion complète des achats et commandes fournisseurs +dans le réseau d'entreprise de D'Astre S.A. +

    + +

    Potentiel de l'application

    +

    +Les actions possibles sont : +

    +
      +
    • pour les acheteurs : +
        +
      • ajouter un fournisseur
      • +
      • ajouter un produit pour un fournisseur
      • +
      • lister les demandes d'achat en cours
      • +
      +
    • +
    • pour les magasiniers: +
        +
      • créer une demande d'achat
      • +
      • ajouter un produit à une demande d'achat (ligne de demande d'achat)
      • +
      +
    • +
    +une plate-forme permettant blablablabla. +blabla. +

    + +
    +
    + +endContent(); + +print $page->toHTML(); + +?> diff --git a/logcheck.php b/logcheck.php new file mode 100644 index 0000000..de8ae69 --- /dev/null +++ b/logcheck.php @@ -0,0 +1,51 @@ +0){ + $row=mysql_fetch_object($result); + $_SESSION["member"]=$row->login; + $_SESSION["userInfo"]=new UserInfo( + $row->login, + $row->accesslevel, + $row->category, + $row->idcat + ); + + } else { + // stopper la session... + //print "$securePass"; + //session_destroy(); + } + + //mysql_close($connexion); + } + +} + +if (!$_SESSION["member"]){ + header("Location: login.php"); +} + +?> diff --git a/login.php b/login.php new file mode 100644 index 0000000..48089ae --- /dev/null +++ b/login.php @@ -0,0 +1,39 @@ +logcheck(); */ + +$page->startContent(); + +/* include("header.inc.php"); */ +?> + +
    + +

    Page d'identification

    + +

    Veuillez vous identifier afin d'accéder à la page +. +

    + +
    " method="post"> +

    Utilisateur : + +

    +

    Mot de passe : + + +

    + +
    + +
    +
    + +endContent(); +print $page->toHTML(); + +?> diff --git a/logout.php b/logout.php new file mode 100644 index 0000000..1b6d7a2 --- /dev/null +++ b/logout.php @@ -0,0 +1,7 @@ + diff --git a/produits.php b/produits.php new file mode 100644 index 0000000..e892a52 --- /dev/null +++ b/produits.php @@ -0,0 +1,146 @@ +logCheck(); + $page->startContent(); + + $listeFournisseurs=new ListeFournisseurs($_SESSION["userInfo"]->getID()); + $listeProduits=new ListeProduits($listeFournisseurs->_familleId); + + switch($_POST["action"]){ + case "Ajouter": { + $ref_in=""; + switch($_POST["prod_refin_type"]){ + case "new": { $ref_in=$_POST["prod_refin_new"]; + $listeProduits->ajouteProduitInterne($ref_in,$_POST["prod_refin_design"],$_POST["prod_unit"]); + }; break; + case "old": { $ref_in=$_POST["prod_refin_old"]; + }; break; + default :break; + } + $listeProduits->ajouteProduitFournisseur( + $_POST["fournisseur"], + $_POST["prod_designation"], + $_POST["prod_prix"], + $_POST["prod_unit"], + $_POST["prod_ref"], + $ref_in + ); + }; + case "Supprimer": { + $listeProduits->supprimeProduitFournisseur($_POST["prod_id"]); + }; break; + break; + default: break; + } +$listeProduits->chargeListeInterne(); +$listeProduits->chargeListeFournisseur(); +?> + +
    +

    Gestion des produits : +_familleName; ?> +

    + +

    Ajout de produits

    +
    + +_fournisseurs)>0){ +?> +
    +Informations sur le produit +

    Fournisseurs +toHTML(0); +?> +

    +

    Désignation : + +

    + +

    Prix : + +€ / Unité : + +

    +
    +
    +Références +

    Reference fournisseur : + +

    +
    Reference interne :
    +
    +Existante : +referencesHTML(); +?> +
    +
    + +Nouvelle +
      +
    • Référence : +
    • +
    • +Description : +
    • +
    +
    +
    +

    +
    + + + + +

    Liste des produits

    +
    +Produits de la base +listeFournisseurToHTML(); +if (count($listeProduits->_prodFo)>0){ +print ""; +} +?> +
    + +
    +
    +
    + +endContent(); + +print $page->toHTML(); +?> diff --git a/sql/MCDTrac.ger b/sql/MCDTrac.ger new file mode 100644 index 0000000..75dae4c --- /dev/null +++ b/sql/MCDTrac.ger @@ -0,0 +1,584 @@ +CasDAstre +C:/Cygwin/home/SCHAWOHL/CasDAstre/sql/MCDTrac.ger +Anonymous GNUdist +18 +41 +0 0 1924 868 +16 +Magasinier +155 +502 +6 +id_magasinier int +nom varchar(32) +prenom varchar(32) +adresse varchar(32) +telephone varchar(10) +fax varchar(10) +1 +id_magasinier +2 +Se_situer +Emettre +Site +25 +683 +5 +id_site int +nom varchar(32) +adresse varchar(32) +telephone int +fax int +1 +id_site +4 +Se_situer +Appartenir +Se_faire_sur +Stocker +Ligne_d_achat +218 +223 +1 +numero_lda int +1 +numero_lda +4 +Comporter +Avoir +LA_donne_lieu_a_LC +LA_avoir_Etat +Demande_d_achat +285 +371 +2 +date date +numero_da int +1 +numero_da +3 +Emettre +Concerne +Comporter +Produit_Interne +126 +0 +3 +reference_interne varchar(32) +designation varchar(32) +unite varchar(8) +1 +reference_interne +4 +Avoir +PI_correspondre_PF +PI_appartient_FdP +Stocker +Acheteur +693 +675 +6 +id_acheteur int +nom varchar(32) +prenom varchar(32) +adresse varchar(32) +telephone varchar(10) +fax varchar(10) +1 +id_acheteur +3 +Appartenir +Rediger +A_s_occupe_FdP +Ligne_de_commande +686 +184 +1 +numero_ldc int +1 +numero_ldc +5 +Posseder +LA_donne_lieu_a_LC +Constituer +LL_correspondre_LC +LC_avoir_Etat +Livraison +1245 +776 +1 +numero_liv varchar(32) +1 +numero_liv +5 +Generer +Contribuer +Realiser +Contenir +Se_faire_sur +LigneLivraison +1663 +81 +1 +numero_lv varchar(32) +1 +numero_lv +4 +Apparaitre_dans +LL_correspondre_LC +LL_correspondre_LR +Contenir +Commande +695 +479 +5 +date date +date_livraison date +heure_livr_min time +heure_livr_max time +numero_com int +1 +numero_com +5 +Concerne +Rediger +Generer +Posseder +Effectuer +ProduitFour +657 +59 +4 +reference_fournisseur varchar(32) +designation varchar(32) +prix float +unite varchar(8) +1 +reference_fournisseur +4 +PI_correspondre_PF +Vendre +Constituer +Apparaitre_dans +Fournisseur +1217 +241 +7 +nom varchar(32) +adresse varchar(32) +telephone int +fax int +SIRET varchar(32) +SIREN varchar(32) +id_fournisseur varchar(32) +1 +id_fournisseur +4 +Vendre +Effectuer +Realiser +F_fournit_FdP +LigneReception +1663 +800 +1 +numero_lr int +1 +numero_lr +3 +LR_correspond_R +LL_correspondre_LR +LR_avoir_Etat +Reception +1483 +634 +1 +numero_recept int +1 +numero_recept +2 +Contribuer +LR_correspond_R +Etats_LA +470 +364 +3 +Date date +Libelle varchar(32) +id_ela int +1 +id_ela +3 +LA_avoir_Etat +LC_avoir_Etat +LR_avoir_Etat +Famille_de_produit +910 +15 +2 +nom_fam varchar(32) +reference_fam int +1 +reference_fam +3 +A_s_occupe_FdP +PI_appartient_FdP +F_fournit_FdP +29 +Se_situer +0 +157 +631 +0 +2 +Site +0 +N +Magasinier +1 +1 +Emettre +0 +157 +457 +0 +2 +Magasinier +0 +N +Demande_d_achat +1 +1 +Appartenir +0 +317 +720 +0 +2 +Acheteur +1 +1 +Site +0 +N +Rediger +0 +695 +598 +0 +2 +Commande +1 +1 +Acheteur +0 +N +Concerne +0 +333 +516 +0 +2 +Demande_d_achat +0 +N +Commande +1 +N +Comporter +0 +218 +302 +0 +2 +Demande_d_achat +1 +N +Ligne_d_achat +1 +1 +Generer +0 +1245 +555 +0 +2 +Commande +0 +N +Livraison +1 +1 +Posseder +0 +695 +333 +0 +2 +Commande +1 +N +Ligne_de_commande +1 +1 +Avoir +0 +218 +158 +1 +quantite float +2 +Ligne_d_achat +1 +1 +Produit_Interne +0 +N +Contribuer +0 +1461 +784 +0 +2 +Livraison +0 +1 +Reception +1 +N +Effectuer +0 +1237 +499 +0 +2 +Fournisseur +0 +N +Commande +1 +1 +Constituer +0 +470 +128 +1 +quantite float +2 +ProduitFour +0 +N +Ligne_de_commande +1 +1 +Realiser +0 +1428 +286 +1 +date date +2 +Livraison +1 +1 +Fournisseur +0 +N +LA_avoir_Etat +0 +430 +285 +0 +2 +Ligne_d_achat +1 +N +Etats_LA +0 +1 +LC_avoir_Etat +0 +595 +286 +0 +2 +Ligne_de_commande +1 +N +Etats_LA +0 +1 +LR_correspond_R +0 +1561 +715 +0 +2 +Reception +1 +N +LigneReception +1 +1 +LL_correspondre_LC +0 +1419 +192 +0 +2 +Ligne_de_commande +0 +N +LigneLivraison +1 +1 +Apparaitre_dans +0 +1415 +82 +1 +quantite float +2 +ProduitFour +0 +N +LigneLivraison +1 +1 +Vendre +0 +1139 +144 +0 +2 +ProduitFour +1 +1 +Fournisseur +1 +N +PI_correspondre_PF +0 +400 +89 +0 +2 +Produit_Interne +0 +N +ProduitFour +1 +1 +LL_correspondre_LR +0 +1649 +542 +0 +2 +LigneLivraison +0 +1 +LigneReception +1 +1 +Contenir +0 +1563 +249 +0 +2 +Livraison +1 +N +LigneLivraison +1 +1 +Se_faire_sur +0 +242 +784 +0 +2 +Livraison +1 +1 +Site +0 +N +LR_avoir_Etat +0 +470 +801 +1 +quantite_recue float +2 +Etats_LA +0 +1 +LigneReception +1 +N +LA_donne_lieu_a_LC +0 +421 +185 +1 +quantite float +2 +Ligne_d_achat +0 +N +Ligne_de_commande +1 +N +A_s_occupe_FdP +0 +924 +720 +0 +2 +Acheteur +1 +1 +Famille_de_produit +1 +1 +PI_appartient_FdP +0 +489 +30 +0 +2 +Produit_Interne +1 +1 +Famille_de_produit +1 +N +F_fournit_FdP +0 +1237 +30 +0 +2 +Famille_de_produit +0 +N +Fournisseur +1 +1 +Stocker +0 +25 +321 +3 +stock float +seuil_min float +seuil_max float +2 +Site +0 +N +Produit_Interne +1 +N diff --git a/sql/README b/sql/README new file mode 100644 index 0000000..1636b3c --- /dev/null +++ b/sql/README @@ -0,0 +1,8 @@ +README +------ + +Ordre d'execution des scripts SQL : +- db-create.sql (creation des tables du MCD) +- db-userbase-create.sql (ajout d'une table pour les password/acces) +- db-alter-inc.sql (auto-increment sur certains ID) +- db-users-fill.sql (remplissage des acces utilisateur) diff --git a/sql/db-alter-inc.sql b/sql/db-alter-inc.sql new file mode 100644 index 0000000..21a90d9 --- /dev/null +++ b/sql/db-alter-inc.sql @@ -0,0 +1,22 @@ + +ALTER TABLE casdastre.Acheteur CHANGE id_acheteur + id_acheteur INT(11) DEFAULT '0' NOT NULL AUTO_INCREMENT; + +ALTER TABLE casdastre.Magasinier CHANGE id_magasinier + id_magasinier INT(11) DEFAULT '0' NOT NULL AUTO_INCREMENT; + +ALTER TABLE casdastre.Demande_d_achat CHANGE numero_da + numero_da INT(11) DEFAULT '0' NOT NULL AUTO_INCREMENT; + +ALTER TABLE casdastre.Ligne_d_achat CHANGE numero_lda + numero_lda INT(11) DEFAULT '0' NOT NULL; + +ALTER TABLE casdastre.Etats_LA CHANGE id_ela + id_ela INT(11) DEFAULT '0' NOT NULL AUTO_INCREMENT; + +ALTER TABLE casdastre.Ligne_de_commande CHANGE numero_ldc + numero_ldc INT(11) DEFAULT '0' NOT NULL AUTO_INCREMENT; + +ALTER TABLE casdastre.Commande CHANGE numero_com + numero_com INT(11) DEFAULT '0' NOT NULL AUTO_INCREMENT; + diff --git a/sql/db-create-mcd.sql b/sql/db-create-mcd.sql new file mode 100644 index 0000000..dee87c5 --- /dev/null +++ b/sql/db-create-mcd.sql @@ -0,0 +1,322 @@ +-- Automatically generated by Gerwin +-- +-- Project CasDAstre +-- From file: /Users/warbrain/Sites/CasDAstre/sql/MCDTrac.ger +-- By: Anonymous GNUdist +-- +-- Using output format: mysql + + + +CREATE TABLE Magasinier ( + id_magasinier int NOT NULL, + nom varchar(32), + prenom varchar(32), + adresse varchar(32), + telephone varchar(10), + fax varchar(10), + id_site int NOT NULL +); + + +ALTER TABLE Magasinier ADD PRIMARY KEY (id_magasinier); + + + +CREATE TABLE Site ( + id_site int NOT NULL, + nom varchar(32), + adresse varchar(32), + telephone int, + fax int +); + + +ALTER TABLE Site ADD PRIMARY KEY (id_site); + + + +CREATE TABLE Ligne_d_achat ( + numero_lda int NOT NULL, + numero_da int NOT NULL, + reference_interne varchar(32), + quantite float +); + + +ALTER TABLE Ligne_d_achat ADD PRIMARY KEY (numero_lda); + + + +CREATE TABLE Demande_d_achat ( + date date, + numero_da int NOT NULL, + id_magasinier int NOT NULL +); + + +ALTER TABLE Demande_d_achat ADD PRIMARY KEY (numero_da); + + + +CREATE TABLE Produit_Interne ( + reference_interne varchar(32) NOT NULL, + designation varchar(32), + unite varchar(8), + reference_fam int NOT NULL +); + + +ALTER TABLE Produit_Interne ADD PRIMARY KEY (reference_interne); + + + +CREATE TABLE Acheteur ( + id_acheteur int NOT NULL, + nom varchar(32), + prenom varchar(32), + adresse varchar(32), + telephone varchar(10), + fax varchar(10), + id_site int +); + + +ALTER TABLE Acheteur ADD PRIMARY KEY (id_acheteur); + + + +CREATE TABLE Ligne_de_commande ( + numero_ldc int NOT NULL, + numero_com int NOT NULL, + reference_fournisseur varchar(32) NOT NULL, + quantite float +); + + +ALTER TABLE Ligne_de_commande ADD PRIMARY KEY (numero_ldc); + + + +CREATE TABLE Livraison ( + numero_liv varchar(32) NOT NULL, + numero_com int NOT NULL, + numero_recept int NOT NULL, + id_fournisseur varchar(32), + date date, + id_site int +); + + +ALTER TABLE Livraison ADD PRIMARY KEY (numero_liv); + + + +CREATE TABLE LigneLivraison ( + numero_lv varchar(32) NOT NULL, + numero_ldc int NOT NULL, + reference_fournisseur varchar(32) NOT NULL, + quantite float, + numero_lr int NOT NULL, + numero_liv varchar(32) NOT NULL +); + + +ALTER TABLE LigneLivraison ADD PRIMARY KEY (numero_lv); + + + +CREATE TABLE Commande ( + date date, + date_livraison date, + heure_livr_min time, + heure_livr_max time, + numero_com int NOT NULL, + id_acheteur int, + id_fournisseur varchar(32) NOT NULL +); + + +ALTER TABLE Commande ADD PRIMARY KEY (numero_com); + + + +CREATE TABLE ProduitFour ( + reference_fournisseur varchar(32) NOT NULL, + designation varchar(32), + prix float, + unite varchar(8), + id_fournisseur varchar(32) NOT NULL, + reference_interne varchar(32) NOT NULL +); + + +ALTER TABLE ProduitFour ADD PRIMARY KEY (reference_fournisseur); + + + +CREATE TABLE Fournisseur ( + nom varchar(32), + adresse varchar(32), + telephone int, + fax int, + SIRET varchar(32), + SIREN varchar(32), + id_fournisseur varchar(32) NOT NULL, + reference_fam int NOT NULL +); + + +ALTER TABLE Fournisseur ADD PRIMARY KEY (id_fournisseur); + + + +CREATE TABLE LigneReception ( + numero_lr int NOT NULL, + numero_recept int NOT NULL +); + + +ALTER TABLE LigneReception ADD PRIMARY KEY (numero_lr); + + + +CREATE TABLE Reception ( + numero_recept int NOT NULL +); + + +ALTER TABLE Reception ADD PRIMARY KEY (numero_recept); + + + +CREATE TABLE Etats_LA ( + Date date, + Libelle varchar(32), + id_ela int NOT NULL, + numero_lda int, + numero_ldc int, + numero_lr int NOT NULL, + quantite_recue float +); + + +ALTER TABLE Etats_LA ADD PRIMARY KEY (id_ela); + + + +CREATE TABLE Famille_de_produit ( + nom_fam varchar(32), + reference_fam int NOT NULL, + id_acheteur int NOT NULL +); + + +ALTER TABLE Famille_de_produit ADD PRIMARY KEY (reference_fam); + + + +CREATE TABLE Concerne ( + numero_da int NOT NULL, + numero_com int NOT NULL +); + + +ALTER TABLE Concerne ADD PRIMARY KEY (numero_da,numero_com); + + + +CREATE TABLE LA_donne_lieu_a_LC ( + numero_lda int NOT NULL, + numero_ldc int NOT NULL, + quantite float +); + + +ALTER TABLE LA_donne_lieu_a_LC ADD PRIMARY KEY (numero_lda,numero_ldc); + + + +CREATE TABLE Stocker ( + id_site int NOT NULL, + reference_interne varchar(32) NOT NULL, + stock float, + seuil_min float, + seuil_max float +); + + +ALTER TABLE Stocker ADD PRIMARY KEY (id_site,reference_interne); + + + +ALTER TABLE Magasinier ADD FOREIGN KEY (id_site) REFERENCES Site (id_site); + + + + +ALTER TABLE Ligne_d_achat ADD FOREIGN KEY (numero_da) REFERENCES Demande_d_achat (numero_da); +ALTER TABLE Ligne_d_achat ADD FOREIGN KEY (reference_interne) REFERENCES Produit_Interne (reference_interne); + + +ALTER TABLE Demande_d_achat ADD FOREIGN KEY (id_magasinier) REFERENCES Magasinier (id_magasinier); + + +ALTER TABLE Produit_Interne ADD FOREIGN KEY (reference_fam) REFERENCES Famille_de_produit (reference_fam); + + +ALTER TABLE Acheteur ADD FOREIGN KEY (id_site) REFERENCES Site (id_site); + + +ALTER TABLE Ligne_de_commande ADD FOREIGN KEY (numero_com) REFERENCES Commande (numero_com); +ALTER TABLE Ligne_de_commande ADD FOREIGN KEY (reference_fournisseur) REFERENCES ProduitFour (reference_fournisseur); + + +ALTER TABLE Livraison ADD FOREIGN KEY (numero_com) REFERENCES Commande (numero_com); +ALTER TABLE Livraison ADD FOREIGN KEY (numero_recept) REFERENCES Reception (numero_recept); +ALTER TABLE Livraison ADD FOREIGN KEY (id_fournisseur) REFERENCES Fournisseur (id_fournisseur); +ALTER TABLE Livraison ADD FOREIGN KEY (id_site) REFERENCES Site (id_site); + + +ALTER TABLE LigneLivraison ADD FOREIGN KEY (numero_ldc) REFERENCES Ligne_de_commande (numero_ldc); +ALTER TABLE LigneLivraison ADD FOREIGN KEY (reference_fournisseur) REFERENCES ProduitFour (reference_fournisseur); +ALTER TABLE LigneLivraison ADD FOREIGN KEY (numero_lr) REFERENCES LigneReception (numero_lr); +ALTER TABLE LigneLivraison ADD FOREIGN KEY (numero_liv) REFERENCES Livraison (numero_liv); + + +ALTER TABLE Commande ADD FOREIGN KEY (id_acheteur) REFERENCES Acheteur (id_acheteur); +ALTER TABLE Commande ADD FOREIGN KEY (id_fournisseur) REFERENCES Fournisseur (id_fournisseur); + + +ALTER TABLE ProduitFour ADD FOREIGN KEY (id_fournisseur) REFERENCES Fournisseur (id_fournisseur); +ALTER TABLE ProduitFour ADD FOREIGN KEY (reference_interne) REFERENCES Produit_Interne (reference_interne); + + +ALTER TABLE Fournisseur ADD FOREIGN KEY (reference_fam) REFERENCES Famille_de_produit (reference_fam); + + +ALTER TABLE LigneReception ADD FOREIGN KEY (numero_recept) REFERENCES Reception (numero_recept); + + + + +ALTER TABLE Etats_LA ADD FOREIGN KEY (numero_lda) REFERENCES Ligne_d_achat (numero_lda); +ALTER TABLE Etats_LA ADD FOREIGN KEY (numero_ldc) REFERENCES Ligne_de_commande (numero_ldc); +ALTER TABLE Etats_LA ADD FOREIGN KEY (numero_lr) REFERENCES LigneReception (numero_lr); + + +ALTER TABLE Famille_de_produit ADD FOREIGN KEY (id_acheteur) REFERENCES Acheteur (id_acheteur); + + +ALTER TABLE Concerne ADD FOREIGN KEY (numero_da) REFERENCES Demande_d_achat (numero_da); +ALTER TABLE Concerne ADD FOREIGN KEY (numero_com) REFERENCES Commande (numero_com); + + +ALTER TABLE LA_donne_lieu_a_LC ADD FOREIGN KEY (numero_lda) REFERENCES Ligne_d_achat (numero_lda); +ALTER TABLE LA_donne_lieu_a_LC ADD FOREIGN KEY (numero_ldc) REFERENCES Ligne_de_commande (numero_ldc); + + +ALTER TABLE Stocker ADD FOREIGN KEY (id_site) REFERENCES Site (id_site); +ALTER TABLE Stocker ADD FOREIGN KEY (reference_interne) REFERENCES Produit_Interne (reference_interne); + + diff --git a/sql/db-create-table-users.sql b/sql/db-create-table-users.sql new file mode 100644 index 0000000..590b81d --- /dev/null +++ b/sql/db-create-table-users.sql @@ -0,0 +1,22 @@ + +-- AccessLevel : -- +-- 1 : root -- +-- 2 : acheteur -- +-- 4 : magazinier -- +-- 8 : guest (read-only) -- + +-- Category : -- +-- 1 : acheteur -- +-- 2 : magazinier -- +-- 4 : none -- + +CREATE TABLE Users ( + login varchar(32) NOT NULL, + pass varchar(250) NOT NULL, + accesslevel int NOT NULL, + category varchar(4) NOT NULL, + idcat int +); + +ALTER TABLE Users ADD PRIMARY KEY (login); + diff --git a/sql/db-drop.sql b/sql/db-drop.sql new file mode 100644 index 0000000..963246b --- /dev/null +++ b/sql/db-drop.sql @@ -0,0 +1,21 @@ +drop table Acheteur; +drop table Commande; +drop table Fournisseur; +drop table Livraison; +drop table Magasinier; +drop table ProduitFour; +drop table Produit_Interne; +drop table Reception; +drop table Site; +drop table Stocker; +drop table Users; +drop table Famille_de_produit; +drop table Etats_LA; +drop table LigneLivraison; +drop table LigneReception; +drop table Ligne_d_achat; +drop table Ligne_de_commande; +drop table Demande_d_achat; +drop table LA_donne_lieu_a_LC; +drop table Concerne; + diff --git a/sql/db-fill-commande.sql b/sql/db-fill-commande.sql new file mode 100644 index 0000000..a750406 --- /dev/null +++ b/sql/db-fill-commande.sql @@ -0,0 +1,21 @@ +INSERT INTO Commande(date, date_livraison, heure_livr_min, heure_livr_max, numero_com, id_acheteur, id_fournisseur) + VALUES (16/09/2004,16/09/2004,'15:00','16:00',1,1,1); + + +INSERT INTO Commande(date, date_livraison, heure_livr_min, heure_livr_max, numero_com, id_acheteur, id_fournisseur) + VALUES (16/09/2004,24/10/2004,'10:00','12:00',2,2,1); + +INSERT INTO Commande(date, date_livraison, heure_livr_min, heure_livr_max, numero_com, id_acheteur, id_fournisseur) + VALUES (16/09/2004,24/10/2004,'10:00','12:00',3,2,'BMS'); + + +INSERT INTO Commande(date, date_livraison, heure_livr_min, heure_livr_max, numero_com, id_acheteur, id_fournisseur) + VALUES (23/08/2004,28/09/2004,'14:00','15:00',4,2,'GNU'); + + +INSERT INTO Commande(date, date_livraison, heure_livr_min, heure_livr_max, numero_com, id_acheteur, id_fournisseur) + VALUES (08/07/2003,10/10/2003,'10:00','12:00',5,2,'3'); + +INSERT INTO Commande(date, date_livraison, heure_livr_min, heure_livr_max, numero_com, id_acheteur, id_fournisseur) + VALUES (07/06/2004,10/06/2004,'13:00','17:00',6,2,'3'); + diff --git a/sql/db-fill-demandeDA.sql b/sql/db-fill-demandeDA.sql new file mode 100644 index 0000000..786f731 --- /dev/null +++ b/sql/db-fill-demandeDA.sql @@ -0,0 +1,21 @@ +INSERT INTO Demande_d_achat(date, numero_da, id_magasinier) + VALUES (10/12/2003,1,1); + +INSERT INTO Demande_d_achat(date, numero_da, id_magasinier) + VALUES (16/09/2004,2,2); + +INSERT INTO Demande_d_achat(date, numero_da, id_magasinier) + VALUES (23/07/2004,3,3); + +INSERT INTO Demande_d_achat(date, numero_da, id_magasinier) + VALUES (26/08/2004,4,3); +INSERT INTO Demande_d_achat(date, numero_da, id_magasinier) + VALUES (27/09/2004,5,4); +INSERT INTO Demande_d_achat(date, numero_da, id_magasinier) + VALUES (05/10/2004,6,4); +INSERT INTO Demande_d_achat(date, numero_da, id_magasinier) + VALUES (05/10/2003,6,4); +INSERT INTO Demande_d_achat(date, numero_da, id_magasinier) + VALUES (15/10/2003,7,6); + + diff --git a/sql/db-fill-famille_produit.sql b/sql/db-fill-famille_produit.sql new file mode 100644 index 0000000..2779875 --- /dev/null +++ b/sql/db-fill-famille_produit.sql @@ -0,0 +1,19 @@ + +-- Remplir la table des Famille_de_produit avec les informations sur les Famille_de_produit -- +-- 1 - Aciers et fontes +-- 2 - Métaux non ferreux +-- 3 - Produits chimiques +-- 4 - Outillage et divers + +INSERT INTO Famille_de_produit (reference_fam, nom_fam, id_acheteur) + VALUES ('1','Aciers et fontes','01'); + +INSERT INTO Famille_de_produit (reference_fam, nom_fam, id_acheteur) + VALUES ('2','Métaux non ferreux','02'); + +INSERT INTO Famille_de_produit (reference_fam, nom_fam, id_acheteur) + VALUES ('3','Produits chimiques','03'); + +INSERT INTO Famille_de_produit (reference_fam, nom_fam, id_acheteur) + VALUES ('4','Outillage et divers','04'); + diff --git a/sql/db-fill-fournisseur.sql b/sql/db-fill-fournisseur.sql new file mode 100644 index 0000000..036c037 --- /dev/null +++ b/sql/db-fill-fournisseur.sql @@ -0,0 +1,12 @@ +INSERT INTO Fournisseur (nom, adresse, telephone, fax, SIRET, SIREN,id_fournisseur, reference_fam) + VALUES ('Duppont','66 rue Jussieu', 0140002727, 0140002345,'4A474-985A23','I234lpi-45p',1,3); + + +INSERT INTO Fournisseur (nom, adresse, telephone, fax, SIRET, SIREN,id_fournisseur, reference_fam) + VALUES ('Blik','37 rue Blanchette', 009485327, 019432345,'4Anfkd-5A23','I-lpi-45p',2,3); + +INSERT INTO Fournisseur (nom, adresse, telephone, fax, SIRET, SIREN,id_fournisseur, reference_fam) + VALUES ('Francoisette','37 rue duchamps', 64509947, 049590345,'hjd-m44d-5A23','456IO-45p',3,3); + +INSERT INTO Fournisseur (nom, adresse, telephone, fax, SIRET, SIREN,id_fournisseur, reference_fam) + VALUES ('Carlosse','37 rue elysee', 0154546785, 0156778488,'ZZZ5-34d-5A67','677GF-45YU',4,3); diff --git a/sql/db-fill-ligne_d_achat.sql b/sql/db-fill-ligne_d_achat.sql new file mode 100644 index 0000000..2d70bb9 --- /dev/null +++ b/sql/db-fill-ligne_d_achat.sql @@ -0,0 +1,10 @@ +INSERT INTO Ligne_d_achat(numero_lda, numero_da, reference_interne, quantite) + VALUES (3,4,'A72',260); +INSERT INTO Ligne_d_achat(numero_lda, numero_da, reference_interne, quantite) + VALUES (4,3,'AC45',300); +INSERT INTO Ligne_d_achat(numero_lda, numero_da, reference_interne, quantite) + VALUES (5,2,'A77',780); +INSERT INTO Ligne_d_achat(numero_lda, numero_da, reference_interne, quantite) + VALUES (6,6,'A43',978); +INSERT INTO Ligne_d_achat(numero_lda, numero_da, reference_interne, quantite) + VALUES (7,1,'A33',780); diff --git a/sql/db-fill-ligne_de_commande.sql b/sql/db-fill-ligne_de_commande.sql new file mode 100644 index 0000000..f322a13 --- /dev/null +++ b/sql/db-fill-ligne_de_commande.sql @@ -0,0 +1,20 @@ +INSERT INTO Ligne_de_commande(numero_ldc, numero_com, reference_fournisseur, quantite) + VALUES (1,1,'FOO1',145); +INSERT INTO Ligne_de_commande(numero_ldc, numero_com, reference_fournisseur, quantite) + VALUES (2,2,'FOO2',770); +INSERT INTO Ligne_de_commande(numero_ldc, numero_com, reference_fournisseur, quantite) + VALUES (3,2,'FOO3',500); +INSERT INTO Ligne_de_commande(numero_ldc, numero_com, reference_fournisseur, quantite) + VALUES (4,1,'FOO2',65); +INSERT INTO Ligne_de_commande(numero_ldc, numero_com, reference_fournisseur, quantite) + VALUES (5,6,'FOO2',90); +INSERT INTO Ligne_de_commande(numero_ldc, numero_com, reference_fournisseur, quantite) + VALUES (6,5,'FOO1',480); +INSERT INTO Ligne_de_commande(numero_ldc, numero_com, reference_fournisseur, quantite) + VALUES (7,3,'FOO1',100); +INSERT INTO Ligne_de_commande(numero_ldc, numero_com, reference_fournisseur, quantite) + VALUES (8,3,'FOO3',800); +INSERT INTO Ligne_de_commande(numero_ldc, numero_com, reference_fournisseur, quantite) + VALUES (9,3,'FOO4',520); +INSERT INTO Ligne_de_commande(numero_ldc, numero_com, reference_fournisseur, quantite) + VALUES (10,4,'FOO4',260); diff --git a/sql/db-fill-produit_extern.sql b/sql/db-fill-produit_extern.sql new file mode 100644 index 0000000..5aa92cb --- /dev/null +++ b/sql/db-fill-produit_extern.sql @@ -0,0 +1,22 @@ + + + + +INSERT INTO ProduitFour (reference_fournisseur, designation, prix, id_fournisseur,reference_interne) + VALUES ('Four1','Vis a tête fraise',23,'1', 'M56'); + +INSERT INTO ProduitFour (reference_fournisseur, designation, prix, id_fournisseur,reference_interne) + VALUES ('F002','Ecrou de 3 a tete fraisa',6,'2', 'M56'); + +INSERT INTO ProduitFour (reference_fournisseur, designation, prix, id_fournisseur,reference_interne) + VALUES ('F003','Embou file D18',91,'1', 'M56'); + + +INSERT INTO ProduitFour (reference_fournisseur, designation, prix, id_fournisseur,reference_interne) + VALUES ('F004','Racord baisse pression',72,'3','P2'); + +INSERT INTO ProduitFour (reference_fournisseur, designation, prix, id_fournisseur,reference_interne) + VALUES ('F005','Petit verin',68,'4', 'P2'); + +INSERT INTO ProduitFour (reference_fournisseur, designation, prix, id_fournisseur,reference_interne) + VALUES ('F006','Pigon',56,'2', 'P2'); diff --git a/sql/db-fill-produit_interne.sql b/sql/db-fill-produit_interne.sql new file mode 100644 index 0000000..5bcd313 --- /dev/null +++ b/sql/db-fill-produit_interne.sql @@ -0,0 +1,49 @@ + +-- Remplir la table des Produit_Interne avec les informations sur les Produit_Interne -- + +-- reference_fam est la reference_fam de la famille de produit +-- 1 - Aciers et fontes +-- 2 - Métaux non ferreux +-- 3 - Produits chimiques +-- 4 - Outillage et divers + +-- Aciers et fontes +INSERT INTO Produit_Interne (reference_interne, designation, reference_fam) + VALUES ('A059','arbre flex','1'); + +INSERT INTO Produit_Interne (reference_interne, designation, reference_fam) + VALUES ('F109','fer solide','1'); + +INSERT INTO Produit_Interne (reference_interne, designation,reference_fam) + VALUES ('T059','titane','1'); + +-- Métaux non ferreux +INSERT INTO Produit_Interne (reference_interne, designation,reference_fam) + VALUES ('A72','Plaque aluminium','2'); + +INSERT INTO Produit_Interne (reference_interne, designation, reference_fam) + VALUES ('A07','Aluminium AC04','2'); + +-- Produits chimiques +INSERT INTO Produit_Interne (reference_interne, designation, reference_fam) + VALUES ('Ac56','Acide corrosif', '3'); + +INSERT INTO Produit_Interne (reference_interne, designation, reference_fam) + VALUES ('D01','Disolvant', '3'); + +INSERT INTO Produit_Interne (reference_interne, designation, reference_fam) + VALUES ('D78','Diluant', '3'); + +-- Outillage et divers +INSERT INTO Produit_Interne (reference_interne, designation, reference_fam) + VALUES ('M56','Marteau', '4'); + +INSERT INTO Produit_Interne (reference_interne, designation, reference_fam) + VALUES ('P23','Perceuse', '4'); + +INSERT INTO Produit_Interne (reference_interne, designation, reference_fam) + VALUES ('B001','Burin', '4'); + +INSERT INTO Produit_Interne (reference_interne, designation, reference_fam) + VALUES ('P2','Ensemble outils de precision', '4'); + diff --git a/sql/db-fill-site.sql b/sql/db-fill-site.sql new file mode 100644 index 0000000..5f738cd --- /dev/null +++ b/sql/db-fill-site.sql @@ -0,0 +1,12 @@ +INSERT INTO Site(id_site,nom,adresse,telephone,fax) +Values(4,'Usine Bouchard','45 rue Saint Honoré 75012','0140051595','0140051056'); + +INSERT INTO Site(id_site,nom,adresse,telephone,fax) +Values(5,'EquipeForce','36 allée des Genies Motreale','0454665687','0466049687'); + +INSERT INTO Site(id_site,nom,adresse,telephone,fax) +Values(6,'OutillageTop','125 av de Jean Jaures','0454665687','0466049687'); + +INSERT INTO Site(id_site,nom,adresse,telephone,fax) +Values(7,'OutilDemon','76 rue des astres','067686687','056749687'); + diff --git a/sql/db-fill-sites.sql b/sql/db-fill-sites.sql new file mode 100644 index 0000000..102c939 --- /dev/null +++ b/sql/db-fill-sites.sql @@ -0,0 +1,15 @@ + +-- Remplir la table des sites avec les informations sur les sites -- +-- 1 - Siège +-- 2 - Usine Pont-Quéau +-- 3 - Usine Boulogne + +INSERT INTO Site (id_site,nom, adresse, telephone, fax) + VALUES ('1','Siège','22 rue des petits bois','0142028035','0145360485'); + +INSERT INTO Site (id_site,nom, adresse, telephone, fax) + VALUES ('2','Usine Pont-Quéau','21 allée de Menfouest, Pont-Quéau 29180 Plogonnec','0242028035','0145360485'); + +INSERT INTO Site (id_site,nom, adresse, telephone, fax) + VALUES ('3','Usigne Boulogne','230 rue Damocles, 92350 Boulogne','0142070809','0142070809'); + diff --git a/sql/db-fill-users.sql b/sql/db-fill-users.sql new file mode 100644 index 0000000..5c97298 --- /dev/null +++ b/sql/db-fill-users.sql @@ -0,0 +1,34 @@ + +-- +INSERT INTO Users (login, pass, accesslevel, category, idcat) + VALUES ('emile.baud', 'd6af45a5d57343e2943460d318d7de4b', '15', 'OTH','3'); +-- login : emile.baud / kingofziuniverse -- + +-- +INSERT INTO Acheteur (nom, prenom, adresse, telephone, fax, id_site) + VALUES ('Pierre', 'D\'Angle', '27 place des Dolmen', '0116336110', '0123456789', '1'); +INSERT INTO Users (login, pass, accesslevel, category, idcat) + VALUES ('pierre.dangle', '9e8e37aeb4449d579e9a58ce02e9f2fd', '1', 'ACH', '1'); +-- login: pierre.dangle / password : bicycle -- + +-- +INSERT INTO Acheteur (nom, prenom, adresse, telephone, fax, id_site) + VALUES ('Charles', 'Roy', '27 rue du Trone', '0216736110', '0143436681', '1'); +INSERT INTO Users (login, pass, accesslevel, category, idcat) + VALUES ('charles.roy', 'b6d46f2791b61b4ad114b4183049b39c', '1', 'ACH', '2'); +-- login: charles.roy / password : charles.roy -- + +-- +INSERT INTO Magasinier (nom, prenom, adresse, telephone, fax, id_site) + VALUES ('Bob', 'Legras', '151 avenue Mayo', '0452361105', '0141239841', '1'); +INSERT INTO Users (login, pass, accesslevel, category, idcat) + VALUES ('monsieur.legras', '183840772d3a679f148b590e35200a7f', '2', 'MAG', '2'); +-- login: monsieur.legras / password : monsieur.legras -- + +-- +INSERT INTO Magasinier (nom, prenom, adresse, telephone, fax, id_site) + VALUES ('Jules', 'Schtöjninczec', '151 avenue du Tripalium', '0452361105', '0141239841', '1'); +INSERT INTO Users (login, pass, accesslevel, category, idcat) + VALUES ('monsieur.jules', '183840772d3a679f148b590e35200a7f', '2', 'MAG', '2'); +-- login: monsieur.legras / password : monsieur.legras -- + diff --git a/sql/drop.php b/sql/drop.php new file mode 100644 index 0000000..2a04aaa --- /dev/null +++ b/sql/drop.php @@ -0,0 +1,73 @@ +\n"; +print "\n"; +print "D'Astre.Net : Script d'installation \n"; +print ""; +print ""; +print ""; +echo "$include_path
    "; +echo "SQL_SERVER: ".SQL_SERVER."
    "; +echo "SQL_USER: ".SQL_USER."
    "; + + $files=array( + "db-drop.sql" + ); + +executeSQLFiles($files); + +print ""; + +?> diff --git a/sql/install.php b/sql/install.php new file mode 100644 index 0000000..2f47bc4 --- /dev/null +++ b/sql/install.php @@ -0,0 +1,85 @@ +\n"; +print "\n"; +print "D'Astre.Net : Script d'installation \n"; +print ""; +print ""; +print ""; +echo "$include_path
    "; +echo "SQL_SERVER: ".SQL_SERVER."
    "; +echo "SQL_USER: ".SQL_USER."
    "; + + $files=array( + "db-create-mcd.sql", + "db-create-table-users.sql", + "db-alter-inc.sql", + "db-fill-sites.sql", + "db-fill-users.sql", + "db-fill-famille_produit.sql", +/* "db-fill-fournisseur.sql", */ + "db-fill-produit_interne.sql", +/* "db-fill-produit_extern.sql", */ +/* "db-fill-magasinier.sql", */ +/* "db-fill-acheteur.sql", */ + /* "db-fill-demandeDA.sql", danger rivka */ + "db-fill-site.sql", + ); + +executeSQLFiles($files); + +print ""; + +?> diff --git a/sql/libdbmanip.inc.php b/sql/libdbmanip.inc.php new file mode 100644 index 0000000..e07dd13 --- /dev/null +++ b/sql/libdbmanip.inc.php @@ -0,0 +1,78 @@ +Traitement de $file...\n"; + print "
    \n"; + /*="db-create-mcd.sql"; */ + if (is_file($file)){ + $sqlfile=file_get_contents($file); + $queries=split("[\n\r]",$sqlfile); + foreach ($queries as $query){ + if (preg_match('/^\s*--/',$query)){ + /* ne rien faire */ + $oldq=""; + } else { + if (preg_match('/;\s*$/',$query)){ + // on récupere les vieux morceaux // + $query=$oldq.$query; + $oldq=""; + $query=preg_replace('/\s+/',' ',$query); + $query=preg_replace('/;\s*$/','',$query); + $query=preg_replace('/;\s*$/','',$query); + print "

    "; + print "\n$query\n"; + print "

    \n"; + print "

    \n"; + $result=mysql_db_query(SQL_BASE,$query,$connexion); + if (!$result){ + echo "\nErreur :"; + print mysql_error($connexion); + print "\n\n"; + } else { + echo "Succès.\n"; + } + print "

    \n"; + } else { + $oldq=$oldq.$query; + //print "$oldq
    "; + } + } + } + } else { + echo "" + . "Erreur : Le fichier $file n'existe pas !

    "; + } + print "
    \n"; + } + + mysql_close($connexion); + } + } +} +?> diff --git a/styles/columnContent.css b/styles/columnContent.css new file mode 100644 index 0000000..59273e9 --- /dev/null +++ b/styles/columnContent.css @@ -0,0 +1,28 @@ + +#columnContent { + position: absolute; + top: 60px; + left: 210px; + right: 10px; +} + +#columnContent h1 { + clear:both; + left: 0px; + right: 0px; + border: 0px none #000; + border-bottom: 2px solid #00f; + text-align: left; + color:#a00; +} + +#columnContent h2 { + clear:both; + left: 0px; + right: 0px; + border: 0px none #000; + border-bottom: 1px solid #00f; + text-align: left; +} + + diff --git a/styles/contenu.css b/styles/contenu.css new file mode 100644 index 0000000..37e4742 --- /dev/null +++ b/styles/contenu.css @@ -0,0 +1,87 @@ +#contenu { + float:top; + display:block; + border: 1px dashed #000; + padding: 10px; + background: white; +} + +#contenu form input { +background-color: #eef; +border: 1px solid #999; /* solid */ + +} + +#contenu legend img { +/* float: left; */ +border: 0px none #000; +margin: 0px; +margin-left: 5px; +margin-right: 10px; +} + +#contenu legend a { +display:inline; +color:blue; +font-weight: bold; +left: 0px; +right; +} + +#contenu legend a:hover { +background:#fc9; +left: 0px; +right: 0px; +} +#contenu form .info { +width: 150px; + margin: 1px; + height: 2em; + background: #ccc; + font-weight: bold; + margin-left: auto; +} + +#contenu form input.good { + width: 100px; + height: 2em; + background: #afa; +} + +#contenu form input.bad { + width: 100px; + height: 2em; + background: #faa; + left: 0px; + right: 0px; + text-align:center; +} + +#contenu input.chkbox { + height: 16px; + width: 16px; + background: #aaf; +} + +#contenu p img { +float: left; +border: 0px none #000; +margin: 0px; +margin-left: 15px; +margin-right: 10px; +} + +#contenu p a { +display:block; +color:blue; +font-weight: bold; +left: 0px; +right; +} + +#contenu p a:hover { +background:#fc9; +left: 0px; +right: 0px; +} + diff --git a/styles/contenuDA.css b/styles/contenuDA.css new file mode 100644 index 0000000..e73f5e5 --- /dev/null +++ b/styles/contenuDA.css @@ -0,0 +1,34 @@ +#contenuDA { + float:top; + display:block; + border: 1px dashed #000; + padding: 10px; + background: white; +} + +#contenuDA form .info { + /* width: 150px; */ + margin: 1px; + height: 2em; + background: #ccc; + font-weight: bold; + margin-left: auto; +} + +input.livraison { + margin-left: 2px; + margin-right: 2px; +} + + + + + + +span.DAproduit { +font-weight: bold; +} + +span.DAfamille { +font-style: italic; +} diff --git a/styles/footer.css b/styles/footer.css new file mode 100644 index 0000000..aaf50e9 --- /dev/null +++ b/styles/footer.css @@ -0,0 +1,34 @@ + +#footer { + float: top; + display:block; + padding: 10px; + text-align: center; + vertical-align: top; + font-family: helvetica, arial, sans-serif; + color: #fff; + font-weight: bold; + font-size: 90%; +} + +#footer span.validator { + float: left; + width: 160px; +margin: 0px; +padding: 0px; +padding-right: 10px; +border: 0px none #000; +border-right: 1px dashed #fff; +} + +#footer .validator a { + font-size: 90%; + display:block; +color:white; + text-decoration: none; + margin: 10px; +} +#footer .validator a:hover { + color: #ddf; + text-decoration: underline overline; +} diff --git a/styles/header.css b/styles/header.css new file mode 100644 index 0000000..a16ee3f --- /dev/null +++ b/styles/header.css @@ -0,0 +1,23 @@ + +#header { + top: 0px; + left: 0px; + right: 0px; + height: 40px; + color: white; +margin: 0px; +background: black; +border:0px; +border-bottom: 2px solid #fff; +} + +#header h1 { +margin: 0px; +} + +#header h1 img { +margin:0px; +margin-left:5px; +margin-right: 10px; +vertical-align: middle; +} diff --git a/styles/main.css b/styles/main.css new file mode 100644 index 0000000..fe1468b --- /dev/null +++ b/styles/main.css @@ -0,0 +1,85 @@ +body { +background: #444; +background-image: url("/images/background.jpg"); +background-repeat: repeat-both; +margin: 0px; +padding: 0px; +} + +span.error { +display:block; +color :red; +font-weight: bold; +} +hr.spacer { + display:block; + visibility:hidden; +} + +fieldset { +border-width: 2px; +} + +select { + background-color: #ddf; + border: 1px solid #999; /* solid */ + margin-left: auto; + margin-right: 10px; + text-align:center; +} + +form input,fieldset input { + background-color: #ddf; + border: 1px solid #999; /* solid */ + margin-left: auto; + margin-right: 10px; + text-align:center; +} + +input[type=submit],input[type=reset] { + border-width: 2px; +} + +input[type=checkbox], input[type=radio] { + width: 16px; + height: 16px; +} + +fieldset { +-moz-border-radius: 7px; +-moz-border-width: 2px; +} + +input.valider { + display:block; + float:center; + padding: 5px; + margin: 5px; + margin-left:auto; + margin-right:auto; + width: 300px; + color: #00a; +} + +.ligne0 { + margin: 0px; + padding: 3px; + background: #ffffcc; +} + +.ligne1 { +margin: 0px; +padding: 3px; +background: #ccffff; +} + +span.id_da { +font-style:italic; +} + +span.ref_in { + font-weight: bold; +} +span.designation { + font-weight: bold; +} diff --git a/styles/menuGauche.css b/styles/menuGauche.css new file mode 100644 index 0000000..a403782 --- /dev/null +++ b/styles/menuGauche.css @@ -0,0 +1,72 @@ +#menuGauche { +position: absolute; +top: 60px; +left: 10px; +width: 170px; +padding:0px; +padding-left: 5px; +padding-right: 5px; +padding-bottom: 5px; + +border: 1px dashed #000; /* inset */ +background: white; +background-image: url(/images/bgmenubar.png); +background-repeat: repeat-y; +} + +#menuGauche h1 { +font-size: 100%; +font-weight: bold; +text-align: center; +color: #fdd; +padding:0px; +margin: 0px; +margin-top: 5px; +padding-left:5px; +padding-right:5px; +border: 0px none #000; +/* border-top: 2px outset #f00; +border-right: 2px outset #f00; +border-bottom: 2px outset #f00; */ +background: black; +} + +#menuGauche ul { + padding: 0px; + padding-left:17px; +} + +#menuGauche p { +clear:both; +padding: 0px; +left: 0px; +right: 0px; +} + +#menuGauche p img { +float: left; +border: 0px none #000; +margin: 0px; +margin-left: 15px; +margin-right: 10px; +} + +#menuGauche p a { +display:block; +color:blue; +font-weight: bold; +left: 0px; +right; +} + +#menuGauche p a:hover { +background:#fc9; +left: 0px; +right: 0px; +} + +#menuGauche input.searcher { +width: 120px; +margin-left: 30px; +background: #eef; +} diff --git a/tools/cda-update b/tools/cda-update new file mode 100755 index 0000000..f45d314 --- /dev/null +++ b/tools/cda-update @@ -0,0 +1,24 @@ +#!/bin/bash + +SSH_USER=$1 +if [ $SSH_USER="" ]; then + SSH_USER=$USER +fi +LOCAL_CDA_DIR=$(pwd) +DIST_CDA_DIR=/home/$SSH_USER/public_html/CDA/ +DIST_CDA_SERV=ssh.shamox.ath.cx + +echo -e "User : \t$SSH_USER" +echo -e "Local Dir : \t$LOCAL_CDA_DIR" +echo -e "Remote Dir : \t$DIST_CDA_DIR" +echo -e "Server : \t$DIST_CDA_SERV" +echo -e -n "Erasing previous version... " +ssh -C $DIST_CDA_SERV -- mkdir -p $DIST_CDA_DIR +ssh -C $DIST_CDA_SERV -- rm -r $DIST_CDA_DIR +echo -e "done" +echo -e "Updating current version... " +ssh -C $DIST_CDA_SERV -- mkdir -p $DIST_CDA_DIR +( cd $LOCAL_CDA_DIR; \ + scp -C -r $LOCAL_CDA_DIR/* $SSH_USER@$DIST_CDA_SERV:$DIST_CDA_DIR ) +echo -e "Update done" + diff --git a/tools/md5-gen.php b/tools/md5-gen.php new file mode 100644 index 0000000..3b33558 --- /dev/null +++ b/tools/md5-gen.php @@ -0,0 +1,5 @@ +$md5pass

    "; +?>