Notice: Undefined index
Posté : 04 mars 2015, 16:13
Bonjour, j'ai fait un fichier php qui me permet d'afficher un dérouler pour sélectionner un visiteur et qu'après avoir cliquer sur le bouton << Lancer >> qu'il m'affiche la fiche saisie par ce visiteur où moi en étant Administrateur, je peut la modifier et enrengistré l'opération. Mon problème est que j'arrive a voir la liste dérouler du choix du visiteur, il y a un tableau avec une erreur : << Notice: Undefined index: idValidation On line 431 >> et quand je clique quand même sur le bouton << Lancer >> , la liste de déroulé disparaît et m'affiche une page vierge, mais le bouton << Lancer >> Reste seulement. Normalement, le liste de choix devais rester avec le bouton lancer et en dessous il devait afficher la fiche saisi par le visiteur en question sélectionné. J'essaye de voir mon erreur, mais je n'y arrive pas. Je vous fais donc Part du fichier php
Ensuite je vous fais part de l'autre fichier php qui fais appelle au Fonction demandé par ce fichier php
<?php
/**
* Script de controle et d'affichage du cas d'utilisation "Valider une fiche de frais"
* @package default
* @author GSB
*/
$repInclude = './include/';
require($repInclude . "_init.inc.php");
// page inaccessible si visiteur non connecté
if ( ! estUserConnecte() ) {
?>
<script language="Javascript">
<!--
document.location.replace("cSeConnecter.php");
// -->
</script>';
<?php
}
// Supprime toutes les variables SESSION si action bouton annuler
if (isset($_POST['effacer'])){
unset($_SESSION['idValidation']);
unset($_SESSION['moisValidation']);
unset($_SESSION['etatFiche']);
unset($_SESSION['nomValidation']);
unset($_SESSION['prenomValidation']);
}
require($repInclude . "_entete.inc.html");
require($repInclude . "_sommaire.inc.php");
// page inaccessible si comptable non connecté
if ($_SESSION["metierUtilisateur"] != 'comptable'){
?>
<script language="Javascript">
<!--
document.location.replace("cAccueil.php");
// -->
</script>';
<?php
}
/* -- DEBUT RECCUPERATION DONNEES ENVOYEES PAR POST -- */
// acquisition de l'étape du traitement
$etape=lireDonnee("etape","demanderSaisie");
// acquisition des quantités des éléments forfaitisés
$tabQteEltsForfait=lireDonneePost("txtEltsForfait", "");
// acquisition des données d'une nouvelle ligne hors forfait
$idLigneHF = lireDonnee("idLigneHF", "");
$dateHF = lireDonnee("txtDateHF", "");
$libelleHF = lireDonnee("txtLibelleHF", "");
$montantHF = lireDonnee("txtMontantHF", "");
//Mise à jour du nombre de justificatifs
$nbJustificatifs = lireDonnee("nbJustificatifs", "");
if ($etape == "validerSaisie") {
// l'utilisateur valide les éléments forfaitisés
// vérification des quantités des éléments forfaitisés
$ok = verifierEntiersPositifs($tabQteEltsForfait);
if (!$ok) {
ajouterErreur($tabErreurs, "Chaque quantité doit être renseignée et être numérique positive.");
}
else {
// mise à jour des quantités des éléments forfaitisés
modifierEltsForfait($idConnexion, $_SESSION['moisValidation'], $_SESSION['idValidation'], $tabQteEltsForfait);
calculMontantTotalValide($idConnexion, $_SESSION['idValidation'], $_SESSION['moisValidation']);
?>
<script>
alert("Les valeurs des élements forfaitisés ont bien été changé. Merci");
</script>
<?php
}
}
elseif ($etape == "validerRefusLigneHF") {
refuserLigneHF($idConnexion, $idLigneHF);
calculMontantTotalValide($idConnexion, $_SESSION['idValidation'], $_SESSION['moisValidation']);
?>
<script>
alert("Votre Refus à bien été pris en compte . Merci");
</script>
<?php
}
elseif ($etape == "reporterLigneHF") {
$req = reporterEltsHorsForfaitFicheFrais($idConnexion, $_SESSION['moisValidation'], $_SESSION['idValidation'], $idLigneHF);
$reporter = mysql_query($req, $idConnexion);
echo $reporter;
?>
<script>
alert("La ligne hors forfait à été reportée au mois suivant !");
</script>
<?php
}
elseif ($etape == "validerValidationLigneHF") {
accepterLigneHF($idConnexion, $idLigneHF);
calculMontantTotalValide($idConnexion, $_SESSION['idValidation'], $_SESSION['moisValidation']);
?>
<script>
alert("Votre validation à bien été pris en compte. Merci");
</script>
<?php
}
elseif ($etape == "changerNbJustificatifs") {
changerNbJustificatifs($idConnexion, $_SESSION['idValidation'], $_SESSION['moisValidation'], $nbJustificatifs );
calculMontantTotalValide($idConnexion, $_SESSION['idValidation'], $_SESSION['moisValidation']);
?>
<script>
alert("Le nombre de justificatifs à bien été mis à jour. Merci");
</script>
<?php
}
?>
<div id="contenu">
<h2>Valider une fiche de frais</h2>
<div id="centerPrincipale">
<?php
if (!empty ($_POST['idValidation'])) {
$_SESSION['idValidation'] = $_POST['idValidation'];
$infoValidation = obtenirDetailUser($idConnexion, $_SESSION['idValidation']);
$_SESSION['nomValidation'] = $infoValidation['nom'];
$_SESSION['prenomValidation'] = $infoValidation['prenom'];
}
if (!empty ($_POST['moisValidation'])) {
$_SESSION['moisValidation'] = $_POST['moisValidation'];
}
if (!empty ($_POST['etatFiche'])) {
$_SESSION['etatFiche'] = $_POST['etatFiche'];
}
$id = array();
$nom = array();
$prenom = array();
$visiteurs = obtenirListeVisiteurs();
while($row=mysql_fetch_array($visiteurs)) {
$id[]=$row['id'];
$nom[]=$row['nom'];
$prenom[]=$row['prenom'];
}
$compteTableau = count($nom);
/* ------- SI ID EST ENVOYE ------- */
if (isset ($_SESSION['idValidation'])) {
/* ------- SI ID & MOIS SONT ENVOYES ------- */
if (isset ($_SESSION['moisValidation']) && isset ($_SESSION['idValidation']) && !isset ($_SESSION['etatFiche'])) {
$tabFicheFrais = obtenirDetailFicheFrais($idConnexion, $_SESSION['moisValidation'], $_SESSION['idValidation']);
if ($tabFicheFrais["idEtat"] == 'CR' || $tabFicheFrais["idEtat"] == 'VA'){
?>
<p style="font-weight:bold;font-size:19px;"><?php echo $_SESSION['nomValidation']; ?> - <?php echo $_SESSION['prenomValidation']; ?> </p>
<form method="post" action="cValidationFicheFrais.php" class="formulairesAnnulation">
<p style="color:red;font-weight:bold;">Cliquez sur le bouton ci-dessous pour retourner à la selection du visiteur</p>
<input type="submit" value="Annuler" name="effacer">
</form>
<hr />
<h3>Fiche de frais du mois de <span style="font-weight:bold;color:#0055E3"><?php echo obtenirLibelleMois(intval(substr($_SESSION['moisValidation'],4,2))) . " "?></span> :
<em style="color:#0055E3"><?php echo $tabFicheFrais["libelleEtat"]; ?> </em>
depuis le <em><?php echo date('d/m/Y', strtotime($tabFicheFrais["dateModif"])); ?></em></h3>
<div class="encadre">
<h3>Changer l'état de la fiche : </h3>
<form action="cValidationFicheFrais.php" method="post">
<select id="etatFiche" name="etatFiche">
<option value="CR" selected="selected" id="chgmEtCree">CREER(EN COURS)</option>
<option value="VA" id="chgmEtValid">VALIDER</option>
</select>
<button id="start">executer</button>
</form>
<p>Montant validé : <?php echo $tabFicheFrais["montantValide"] ;?></p>
<form action="cValidationFicheFrais.php" method="post">
<div class="corpsForm">
<input type="hidden" name="etape" value="validerSaisie" />
<fieldset>
<legend>Eléments forfaitisés</legend>
<?php
// demande de la requête pour obtenir la liste des éléments
// forfaitisés du visiteur connecté pour le mois demandé
$req = obtenirReqEltsForfaitFicheFrais($_SESSION['moisValidation'], $_SESSION['idValidation']);
$idJeuEltsFraisForfait = mysql_query($req, $idConnexion);
echo mysql_error($idConnexion);
$lgEltForfait = mysql_fetch_assoc($idJeuEltsFraisForfait);
while ( is_array($lgEltForfait) ) {
$idFraisForfait = $lgEltForfait["idFraisForfait"];
$libelle = $lgEltForfait["libelle"];
$quantite = $lgEltForfait["quantite"];
?>
<p>
<label for="<?php echo $idFraisForfait ?>">* <?php echo $libelle; ?> : </label>
<input type="text" id="<?php echo $idFraisForfait ?>"
name="txtEltsForfait[<?php echo $idFraisForfait ?>]"
size="10" maxlength="5"
title="Entrez la quantité de l'élément forfaitisé"
value="<?php echo $quantite; ?>" />
</p>
<?php
$lgEltForfait = mysql_fetch_assoc($idJeuEltsFraisForfait);
}
mysql_free_result($idJeuEltsFraisForfait);
?>
</fieldset>
</div>
<div class="piedForm">
<p>
<input id="ok" type="submit" value="Valider" size="20"
title="Enregistrer les nouvelles valeurs des éléments forfaitisés" />
<input id="annuler" type="reset" value="Effacer" size="20" />
</p>
</div>
</form>
<table class="listeLegere">
<caption>Descriptif des éléments hors forfait :</caption>
<tr>
<th class="date">Date</th>
<th class="libelle">Libellé</th>
<th class="montant">Montant</th>
</tr>
<?php
// demande de la requête pour obtenir la liste des éléments hors
// forfait du visiteur connecté pour le mois demandé
$req = obtenirReqEltsHorsForfaitFicheFrais($_SESSION['moisValidation'], $_SESSION['idValidation']);
$idJeuEltsHorsForfait = mysql_query($req, $idConnexion);
$lgEltHorsForfait = mysql_fetch_assoc($idJeuEltsHorsForfait);
// parcours des éléments hors forfait
while ( is_array($lgEltHorsForfait) ) {
?>
<tr>
<td><?php echo date('d/m/Y', strtotime($lgEltHorsForfait["date"])) ; ?></td>
<td><?php echo filtrerChainePourNavig($lgEltHorsForfait["libelle"]) ; ?></td>
<td><?php echo $lgEltHorsForfait["montant"] ; ?></td>
<td>
<?php
$verif = preg_match("/REFUSE/i", $lgEltHorsForfait["libelle"]);
if (!$verif){
?>
<form action="cValidationFicheFrais.php" method="POST">
<input type='hidden' value='validerRefusLigneHF' name='etape' />
<input type='hidden' value='<?php echo $lgEltHorsForfait["id"]; ?>' name ='idLigneHF' />
<input type ="submit" value="REFUSER" name="refus" style="background-color:red;color:white;" />
</form>
<?php
}
else {
?>
<form action="cValidationFicheFrais.php" method="POST">
<input type='hidden' value='validerValidationLigneHF' name='etape' />
<input type='hidden' value='<?php echo $lgEltHorsForfait["id"]; ?>' name ='idLigneHF' />
<input type ="submit" value="ACCEPTER" name="acceptation" style="background-color:green;color:white;" />
</form>
<?php
}
?>
</td>
<td>
<form action="cValidationFicheFrais.php" method="POST">
<input type='hidden' value='reporterLigneHF' name='etape' />
<input type='hidden' value='<?php echo $lgEltHorsForfait["id"]; ?>' name ='idLigneHF' />
<input type ="submit" value="REPORTER" name="reporter" style="background-color:orange;color:white;" />
</form>
</td>
</tr>
<?php
$lgEltHorsForfait = mysql_fetch_assoc($idJeuEltsHorsForfait);
}
mysql_free_result($idJeuEltsHorsForfait);
?>
</table>
</div>
<form action="" method="POST">
<label for="nbJustificatifs" ><strong>Nombre de justificatifs envoyés </strong>(Changez la valeur et validez pour mettre à jour)</label>
<input type="number" value='<?php echo $tabFicheFrais["nbJustificatifs"];?>' name="nbJustificatifs"/>
<input type="hidden" name="etape" value="changerNbJustificatifs" />
<input type="submit" value='Valider' name="changerNbJustificatifs"/>
</form>
</div>
<?php
}
else {
$moisValidation = $_SESSION['moisValidation'];
$nomMoisValidation = intval(substr($moisValidation, 4, 2));
$anneeValidation = intval(substr($moisValidation, 0, 4));
?>
<p>La fiche de frais de <strong>" <?php echo $_SESSION['nomValidation']; ?> - <?php echo $_SESSION['prenomValidation']; ?> Pour le mois de <?php echo obtenirLibelleMois($nomMoisValidation);?> (<?php echo $anneeValidation;?>) à déjà été validée . Son statut actuel est : " <span style="color:red;font-weight:bold;"><?php echo $tabFicheFrais["libelleEtat"]; ?></span> " </strong> </p>
<a href="cSuivrePaiementFicheFrais.php" style="color:red;font-weight:bold;Font-size:17px">Cliquez ici pour pouvoir suivre l'etat de la fiche ou le modifier</a>
<hr style='margin-top:35px;margin-bottom:35px;'>
<form method="post" action="cValidationFicheFrais.php" class="formulairesAnnulation">
<p style="color:red;font-weight:bold;">Cliquez sur le bouton ci-dessous pour retourner à la selection du visiteur</p>
<input type="submit" value="Annuler" name="effacer">
</form>
<?php
}
die();
}
}
/* ------- SI ID & MOIS & ETAT SONT ENVOYES ------- */ // MAJ ETAT DE FICHE ICI!!
elseif (isset ($_SESSION['idValidation']) && isset ($_SESSION['moisValidation']) && isset ($_SESSION['etatFiche']) && ( ($_SESSION['etatFiche'] == "CR") || ($_SESSION['etatFiche'] == "VA") ) ){
modifierEtatFicheFrais($idConnexion, $_SESSION['moisValidation'], $_SESSION['idValidation'], $_SESSION['etatFiche']);
$moisValidation = $_SESSION['moisValidation'];
$nomMoisValidation = intval(substr($moisValidation, 4, 2));
$anneeValidation = intval(substr($moisValidation, 0, 4));
calculMontantTotalValide($idConnexion, $_SESSION['idValidation'], $_SESSION['moisValidation']);
?>
<p>L'état à été définit sur <strong>" <?php echo convertionEtatFicheFrais($_SESSION['etatFiche']); ?> " </strong> pour le mois de <?php echo obtenirLibelleMois($nomMoisValidation);?> (<?php echo $anneeValidation;?>) de <?php echo $_SESSION['nomValidation']; ?> - <?php echo $_SESSION['prenomValidation']; ?> , Merci.</p>
<a href="cAccueil.php" style="color:red;font-weight:bold">Cliquez ici pour retourner à l'acceuil maintenant !</a>
<?php
unset($_SESSION['idValidation']);
unset($_SESSION['moisValidation']);
unset($_SESSION['etatFiche']);
die();
}
/* ------- SI ID VISTEUR N'A PAS ETE SAISI ------- */
if (!isset ($_SESSION['idValidation'])) {
?>
<h3>Choisissez le visiteur concerné:</h3>
<form action="cValidationFicheFrais.php" method="post">
<input type="hidden" name="nom" value="validerConsult" />
<select id="list" name="idValidation">
<?php
for ($i = 0; $i <= $compteTableau -1 ; $i++) {
?>
<option id="<?php echo $i ; ?>" value="<?php echo $id[$i];?>" ><?php echo $nom[$i]. " - " .$prenom[$i];?></option>
<?php
}
}
?>
</select>
<button id="start">Lancer</button>
</form>
<?php
$req = obtenirReqMoisFicheFrais($_SESSION['idValidation']);
$idJeuMois = mysql_query($req, $idConnexion);
$lgMois = mysql_fetch_assoc($idJeuMois);
if (!empty($lgMois)){
?>
<p style="font-weight:bold;font-size:19px;"><?php echo $_SESSION['nomValidation']; ?> - <?php echo $_SESSION['prenomValidation']; ?> </p>
<form method="post" action="cValidationFicheFrais.php">
<p style="color:red;font-weight:bold;">Cliquez sur le bouton ci-dessous pour retourner à la selection du visiteur</p>
<input type="submit" value="Annuler" name="effacer">
</form>
<hr />
<h3>Choisissez maintenant le mois pour </h3>
<form action="cValidationFicheFrais.php" method="post">
<input type="hidden" name="etape" value="validerConsult" />
<select id="mois" name="moisValidation">
<?php
// on propose tous les mois pour lesquels le visiteur a une fiche de frais
while ( is_array($lgMois) ) {
$mois = $lgMois["mois"];
$noMois = intval(substr($mois, 4, 2));
$annee = intval(substr($mois, 0, 4));
?>
<option value="<?php echo $mois; ?>"><?php echo obtenirLibelleMois($noMois) . " " . $annee; ?></option>
<?php
$lgMois = mysql_fetch_assoc($idJeuMois);
}
mysql_free_result($idJeuMois);
?>
</select>
<button id="start">Lancer</button>
</form>
</div>
<?php
}
?>
Ensuite je vous fais part de l'autre fichier php qui fais appelle au Fonction demandé par ce fichier php
<?php
/**
* Regroupe les fonctions d'acces de donnees.
* @author GSB & MATTHIAS DIEUDONNE
* @package default
*/
/**
* Se connecte au serveur de données MySql.
* Se connecte au serveur de données MySql à partir de valeurs
* prédéfinies de connexion (hôte, compte utilisateur et mot de passe).
* Retourne l'identifiant de connexion si succès obtenu, le booléen false
* si problème de connexion.
* @param string nom base de donnees
* @param string identifiant acces bdd
* @param string mot de passe acces bdd
* @return resource identifiant de connexion
*/
function connecterServeurBD() { //Informations enlevé par securité pour le fichier .rar
$hote = "localhost";
$login = "root";
$mdp = "";
return mysql_connect($hote, $login, $mdp);
}
/**
* Sélectionne (rend active) la base de données.
* Sélectionne (rend active) la BD prédéfinie gsb_frais sur la connexion
* identifiée par $idCnx. Retourne true si succès, false sinon.
* @param resource $idCnx identifiant de connexion
* @return boolean succès ou échec de sélection BD
*/
function activerBD($idCnx) {
$bd = "gsb_test";
$query = "SET CHARACTER SET utf8";
// Modification du jeu de caractères de la connexion
$res = mysql_query($query, $idCnx);
$ok = mysql_select_db($bd, $idCnx);
return $ok;
}
/**
* Ferme la connexion au serveur de données.
* Ferme la connexion au serveur de données identifiée par l'identifiant de
* connexion $idCnx.
* @param resource $idCnx identifiant de connexion
* @return void
*/
function deconnecterServeurBD($idCnx) {
mysql_close($idCnx);
}
/**
* Echappe les caractères spéciaux d'une chaîne.
* Envoie la chaîne $str échappée, càd avec les caractères considérés spéciaux
* par MySql (tq la quote simple) précédés d'un \, ce qui annule leur effet spécial
* @param string $str chaîne à échapper
* @return string chaîne échappée
*/
function filtrerChainePourBD($str) {
if ( ! get_magic_quotes_gpc() ) {
// si la directive de configuration magic_quotes_gpc est activée dans php.ini,
// toute chaîne reçue par get, post ou cookie est déjà échappée
// par conséquent, il ne faut pas échapper la chaîne une seconde fois
$str = mysql_real_escape_string($str);
}
return $str;
}
/**
* Fournit les informations sur un Utilisateur demandé.
* Retourne les informations de l'utilisateur d'id $unId sous la forme d'un tableau
* associatif dont les clés sont les noms des colonnes(id, nom, prenom).
* @param resource $idCnx identifiant de connexion
* @param string $unId id de l'utilisateur
* @return array tableau associatif de l'utilisateur
*/
function obtenirDetailUser($idCnx, $unId) {
$id = filtrerChainePourBD($unId);
$requete = "SELECT id, nom, prenom , metier FROM User WHERE id='" . $id . "'";
$idJeuRes = mysql_query($requete, $idCnx);
$ligne = false;
if ( $idJeuRes ) {
$ligne = mysql_fetch_assoc($idJeuRes);
mysql_free_result($idJeuRes);
}
return $ligne ;
}
/**
* Fournit la liste de tous les Visiteurs
* Retourne les informations des utilisateur d'un tableau
* associatif dont les clés sont les noms des colonnes(id, nom, prenom).
* @return listeVisiteurs tableau associatif du Visiteur
*/
function obtenirListeVisiteurs() {
$requete = "SELECT id, nom , prenom FROM User WHERE metier = 'visiteur' ORDER BY nom ASC";
$listeVisiteurs = mysql_query($requete);
return $listeVisiteurs ;
}
/**
* Fournit les informations d'une fiche de frais.
* Retourne les informations de la fiche de frais du mois de $unMois (MMAAAA)
* sous la forme d'un tableau associatif dont les clés sont les noms des colonnes
* (nbJustitificatifs, idEtat, libelleEtat, dateModif, montantValide).
* @param resource $idCnx identifiant de connexion
* @param string $unMois mois demandé (MMAAAA)
* @param string $unIdVisiteur id Visiteur
* @return array tableau associatif de la fiche de frais
*/
function obtenirDetailFicheFrais($idCnx, $unMois, $unIdVisiteur) {
$unMois = filtrerChainePourBD($unMois);
$unIdVisiteur = filtrerChainePourBD($unIdVisiteur);
$ligne = false;
$requete="SELECT IFNULL(nbJustificatifs,0) AS nbJustificatifs, Etat.id AS idEtat, libelle AS libelleEtat, dateModif, montantValide, mois, idVisiteur
FROM FicheFrais inner join Etat on idEtat = Etat.id
WHERE idVisiteur='" . $unIdVisiteur . "' AND mois='" . $unMois . "'";
$idJeuRes = mysql_query($requete, $idCnx);
if ( $idJeuRes ) {
$ligne = mysql_fetch_assoc($idJeuRes);
}
mysql_free_result($idJeuRes);
return $ligne ;
}
/**
* Fournit la liste de toutes les fiches de frais par Etat
* Retourne la liste des fiches de frais enregistrées comprenant l'Etat $Etat
* @param resource $idCnx identifiant de connexion
* @param string $Etat et l'Etat d'une fiche (CL/CR/VA/RB)
* @return requete tableau associatif de liste fiche de frais
*/
function obtenirListeFicheFraisEtat($idCnx,$Etat) {
/*$Etat = filtrerChainePourBD ($Etat);*/
$requete="SELECT ff.mois , ff.nbJustificatifs, ff.montantValide, ff.dateModif, vis.id, vis.nom , vis.prenom, et.id AS idMiseEnForme, et.libelle FROM FicheFrais AS ff JOIN User AS vis On vis.id = ff.idVisiteur JOIN Etat AS et ON ff.idEtat = et.id WHERE vis.metier = 'visiteur' AND ff.idEtat IN (" . $Etat.") ORDER BY ff.dateModif DESC" ;
return $requete ;
}
/**
* Fournit les informations sur les tarrifs de rembroursement appliqués
* @return requete tableau associatif de liste fiche de frais
*/
function obtenirTarifsForfait() {
$requete="SELECT libelle, montant FROM `FraisForfait" ;
return $requete ;
}
/**
* Vérifie si une fiche de frais existe ou non.
* Retourne true si la fiche de frais du mois de $unMois (MMAAAA) du Visiteur
* $idVisiteur existe, false sinon.
* @param resource $idCnx identifiant de connexion
* @param string $unMois mois demandé (MMAAAA)
* @param string $unIdVisiteur id Visiteur
* @return booléen existence ou non de la fiche de frais
*/
function existeFicheFrais($idCnx, $unMois, $unIdVisiteur) {
$unMois = filtrerChainePourBD($unMois);
$unIdVisiteur = filtrerChainePourBD($unIdVisiteur);
$requete = "SELECT idVisiteur FROM FicheFrais WHERE idVisiteur='" . $unIdVisiteur .
"' AND mois='" . $unMois . "'";
$idJeuRes = mysql_query($requete, $idCnx);
$ligne = false ;
if ( $idJeuRes ) {
$ligne = mysql_fetch_assoc($idJeuRes);
mysql_free_result($idJeuRes);
}
// si $ligne est un tableau, la fiche de frais existe, sinon elle n'exsite pas
return is_array($ligne) ;
}
/**
* Fournit le mois de la dernière fiche de frais d'un Visiteur.
* Retourne le mois de la dernière fiche de frais du Visiteur d'id $unIdVisiteur.
* @param resource $idCnx identifiant de connexion
* @param string $unIdVisiteur id Visiteur
* @return string dernier mois sous la forme AAAAMM
*/
function obtenirDernierMoisSaisi($idCnx, $unIdVisiteur) {
$unIdVisiteur = filtrerChainePourBD($unIdVisiteur);
$requete = "SELECT max(mois) AS dernierMois FROM FicheFrais WHERE idVisiteur='" .
$unIdVisiteur . "'";
$idJeuRes = mysql_query($requete, $idCnx);
$dernierMois = false ;
if ( $idJeuRes ) {
$ligne = mysql_fetch_assoc($idJeuRes);
$dernierMois = $ligne["dernierMois"];
mysql_free_result($idJeuRes);
}
return $dernierMois;
}
/**
* Ajoute une nouvelle fiche de frais et les éléments forfaitisés associés,
* Ajoute la fiche de frais du mois de $unMois (MMAAAA) du Visiteur
* $idVisiteur, avec les éléments forfaitisés associés dont la quantité initiale
* est affectée à 0. Clôt éventuellement la fiche de frais précédente du Visiteur.
* @param resource $idCnx identifiant de connexion
* @param string $unMois mois demandé (MMAAAA)
* @param string $unIdVisiteur id Visiteur
* @return void
*/
function ajouterFicheFrais($idCnx, $unMois, $unIdVisiteur) {
$unMois = filtrerChainePourBD($unMois);
$unIdVisiteur = filtrerChainePourBD($unIdVisiteur);
// modification de la dernière fiche de frais du Visiteur
$dernierMois = obtenirDernierMoisSaisi($idCnx, $unIdVisiteur);
$laDerniereFiche = obtenirDetailFicheFrais($idCnx, $dernierMois, $unIdVisiteur);
if ( is_array($laDerniereFiche) && $laDerniereFiche['idEtat']=='CR'){
modifierEtatFicheFrais($idCnx, $dernierMois, $unIdVisiteur, 'CL');
}
// ajout de la fiche de frais à l'état Créé
$requete = "insert into FicheFrais (idVisiteur, mois, nbJustificatifs, montantValide, idEtat, dateModif) values ('"
. $unIdVisiteur
. "','" . $unMois . "',0,NULL, 'CR', '" . date("Y-m-d") . "')";
mysql_query($requete, $idCnx);
// ajout des éléments forfaitisés
$requete = "SELECT id FROM FraisForfait";
$idJeuRes = mysql_query($requete, $idCnx);
if ( $idJeuRes ) {
$ligne = mysql_fetch_assoc($idJeuRes);
while ( is_array($ligne) ) {
$idFraisForfait = $ligne["id"];
// insertion d'une ligne frais forfait dans la base
$requete = "insert into LigneFraisForfait (idVisiteur, mois, idFraisForfait, quantite)
values ('" . $unIdVisiteur . "','" . $unMois . "','" . $idFraisForfait . "',0)";
mysql_query($requete, $idCnx);
// passage au frais forfait suivant
$ligne = mysql_fetch_assoc ($idJeuRes);
}
mysql_free_result($idJeuRes);
}
}
/**
* Ajoute une nouvelle fiche de frais et les éléments forfaitisés associés,
* Ajoute la fiche de frais du mois de $unMois (MMAAAA) du Visiteur
* $idVisiteur, avec les éléments forfaitisés associés dont la quantité initiale
* est affectée à 0.Ne CLOS PAS la fiche de frais précédente du Visiteur.
* @param resource $idCnx identifiant de connexion
* @param string $unMois mois demandé (MMAAAA)
* @param string $unIdVisiteur id Visiteur
* @return void
*/
function ajouterFicheFraisSansCloture($idCnx, $unMois, $unIdVisiteur) {
$unMois = filtrerChainePourBD($unMois);
$unIdVisiteur = filtrerChainePourBD($unIdVisiteur);
// modification de la dernière fiche de frais du Visiteur
$dernierMois = obtenirDernierMoisSaisi($idCnx, $unIdVisiteur);
$laDerniereFiche = obtenirDetailFicheFrais($idCnx, $dernierMois, $unIdVisiteur);
// ajout de la fiche de frais à l'état Créé
$requete = "insert into FicheFrais (idVisiteur, mois, nbJustificatifs, montantValide, idEtat, dateModif) values ('"
. $unIdVisiteur
. "','" . $unMois . "',0,NULL, 'CR', '" . date("Y-m-d") . "')";
mysql_query($requete, $idCnx);
// ajout des éléments forfaitisés
$requete = "SELECT id FROM FraisForfait";
$idJeuRes = mysql_query($requete, $idCnx);
if ( $idJeuRes ) {
$ligne = mysql_fetch_assoc($idJeuRes);
while ( is_array($ligne) ) {
$idFraisForfait = $ligne["id"];
// insertion d'une ligne frais forfait dans la base
$requete = "insert into LigneFraisForfait (idVisiteur, mois, idFraisForfait, quantite)
values ('" . $unIdVisiteur . "','" . $unMois . "','" . $idFraisForfait . "',0)";
mysql_query($requete, $idCnx);
// passage au frais forfait suivant
$ligne = mysql_fetch_assoc ($idJeuRes);
}
mysql_free_result($idJeuRes);
}
}
/**
* Retourne le texte de la requête SELECT concernant les mois pour lesquels un
* Visiteur a une fiche de frais.
*
* La requête de sélection fournie permettra d'obtenir les mois (AAAAMM) pour
* lesquels le Visiteur $unIdVisiteur a une fiche de frais.
* @param string $unIdVisiteur id Visiteur
* @return string texte $req de la requête SELECT
*/
function obtenirReqMoisFicheFrais($unIdVisiteur) {
$unIdVisiteur = filtrerChainePourBD($unIdVisiteur);
$req = "SELECT mois FROM FicheFrais WHERE idVisiteur ='"
. $unIdVisiteur . "' ORDER BY mois DESC ";
return $req ;
}
/**
* Retourne le texte de la requête SELECT concernant les éléments forfaitisés
* d'un Visiteur pour un mois donnés.
*
* La requête de sélection fournie permettra d'obtenir l'id, le libellé et la
* quantité des éléments forfaitisés de la fiche de frais du Visiteur
* d'id $idVisiteur pour le mois $mois
* @param string $unMois mois demandé (MMAAAA)
* @param string $unIdVisiteur id Visiteur
* @return string texte $requete de la requête SELECT
*/
function obtenirReqEltsForfaitFicheFrais($unMois, $unIdVisiteur) {
$unMois = filtrerChainePourBD($unMois);
$unIdVisiteur = filtrerChainePourBD($unIdVisiteur);
$requete = "SELECT idFraisForfait, libelle, quantite FROM LigneFraisForfait
inner join FraisForfait on FraisForfait.id = LigneFraisForfait.idFraisForfait
WHERE idVisiteur='" . $unIdVisiteur . "' AND mois='" . $unMois . "'";
return $requete;
}
/**
* Calcul de la somme Du forfait pour la fiche PDF d'un utilisateur d'un mois demandé
*
* @param string $unMois id unMois
* @param string $unIdVisiteur id Visiteur
* @return string texte $requete de la requête SELECT
*/
function sommeForfaitValidePDF($unMois, $unIdVisiteur) {
$unMois = filtrerChainePourBD($unMois);
$unIdVisiteur = filtrerChainePourBD($unIdVisiteur);
$requete ="SELECT ROUND(SUM(ff.montant * lff.quantite) + (SELECT vis.coeffVoiture * lff.quantite FROM User AS vis JOIN LigneFraisForfait AS lff ON vis.id = lff.idVisiteur WHERE vis.metier = 'visiteur' AND vis.id ='" . $unIdVisiteur . "' AND lff.mois ='" . $unMois . "' AND lff.idFraisForfait = 'KM'), 2)
FROM LigneFraisForfait AS lff
JOIN FraisForfait AS ff on ff.id = lff.idFraisForfait
WHERE ff.id <> 'KM' AND idVisiteur='" . $unIdVisiteur . "' AND mois='" . $unMois . "'";
return $requete;
}
/**
* Calcul de la somme Des élements hors forfaits accepté ( ou non refusés) pour la fiche PDF d'un utilistateur d'un mois demandé
*
* @param string $unMois id unMois
* @param string $unIdVisiteur id Visiteur
* @return string texte $requetede la requête SELECT
*/
function sommeHorsForfaitValidePDF($unMois, $unIdVisiteur) {
$unMois = filtrerChainePourBD($unMois);
$unIdVisiteur = filtrerChainePourBD($unIdVisiteur);
$requete = "SELECT IFNULL(SUM(montant),0) FROM LigneFraisHorsForfait
WHERE libelle NOT LIKE '%REFUSE%' AND idVisiteur='" . $unIdVisiteur . "' AND mois='" . $unMois . "'";
return $requete;
}
/**
* Retourne le texte de la requête SELECT concernant les éléments hors forfait
* d'un Visiteur pour un mois donnés.
*
* La requête de sélection fournie permettra d'obtenir l'id, la date, le libellé
* et le montant des éléments hors forfait de la fiche de frais du Visiteur
* d'id $idVisiteur pour le mois $mois
* @param string $unMois mois demandé (AAAAMM)
* @param string $unIdVisiteur id Visiteur
* @return string texte $requete de la requête SELECT
*/
function obtenirReqEltsHorsForfaitFicheFrais($unMois, $unIdVisiteur) {
$unMois = filtrerChainePourBD($unMois);
$unIdVisiteur = filtrerChainePourBD($unIdVisiteur);
$requete = "SELECT id, date, libelle, montant FROM LigneFraisHorsForfait
WHERE idVisiteur='" . $unIdVisiteur
. "' AND mois='" . $unMois . "'";
return $requete;
}
/**
* Permet le repport aumois suivant d'un élément hors forfait
*
* Si la fiche du mois suivant n'existe pas elle est crée.
* @param string $unMois mois demandé (AAAAMM)
* @param string $unIdVisiteur id Visiteur
* @return string texte de la requête SELECT
*/
function reporterEltsHorsForfaitFicheFrais($idCnx, $unMois, $unIdVisiteur, $unIdLIgeHorsForfait) {
$unMois = filtrerChainePourBD($unMois);
$unIdVisiteur = filtrerChainePourBD($unIdVisiteur);
$unIdLIgeHorsForfait = filtrerChainePourBD($unIdLIgeHorsForfait);
list($annee, $mois) = sscanf($unMois, "%04d%02d");
// Si le mois en cours est déja 12 (décembre , ou + s'il y a une erreur dans la base de données , le repport en janvier et effectué en augmentant l'année de 1)
if($mois >= "12")
{
$mois = '01';
$annee = $annee++;
$moisComplet = $annee . $mois;
}
else
{
$mois = $mois + 1;
$mois = str_pad($mois, 2, '0', STR_PAD_LEFT);
$moisComplet = $annee . $mois;
}
$requete = "UPDATE LigneFraisHorsForfait SET mois = '" .$moisComplet. "' WHERE id = '" .$unIdLIgeHorsForfait. "'";
$existeFicheFrais = existeFicheFrais($idCnx, $moisComplet, $unIdVisiteur);
// si elle n'existe pas, on la crée avec les élements frais forfaitisés à 0
if ( !$existeFicheFrais ) {
ajouterFicheFraisSansCloture($idCnx, $moisComplet , $unIdVisiteur);
return $requete;
}
else
{
return $requete;
}
}
/**
* Supprime une ligne hors forfait.
* Supprime dans la BD la ligne hors forfait d'id $unIdLigneHF
* @param resource $idCnx identifiant de connexion
* @param string $unIdLigneHF id de la ligne hors forfait
* @return void
*/
function supprimerLigneHF($idCnx, $unIdLigneHF) {
$unIdLigneHF = filtrerChainePourBD($unIdLigneHF);
$requete = "delete FROM LigneFraisHorsForfait WHERE id = " . $unIdLigneHF;
mysql_query($requete, $idCnx);
}
/**
* Met à jour une ligne Hors forfait
* Met à jour en refusant dans la BD la ligne hors forfait d'id $unIdLigneHF
* Cas de REFUS
* @param resource $idCnx identifiant de connexion
* @param string $unIdLigneHF id de la ligne hors forfait
* @return void
*/
function refuserLigneHF($idCnx, $unIdLigneHF) {
$unIdLigneHF = filtrerChainePourBD($unIdLigneHF);
$requeteVerif = "SELECT COUNT(*) FROM LigneFraisHorsForfait WHERE id = ". $unIdLigneHF ." AND libelle LIKE '%ACCEPTE%'" ; //Verifie si la ligne contient "ACCEPTE"
$requeteEffectuee = mysql_query($requeteVerif, $idCnx);
$nb_retour=mysql_fetch_row($requeteEffectuee) ;// Retourne le resultat du Count SQL
if($nb_retour[0] == 1){
// Si la ligne contient déjà accepté on remplace par refusé
$requete = "UPDATE LigneFraisHorsForfait SET libelle = REPLACE(libelle, 'ACCEPTE', 'REFUSE') WHERE id = ". $unIdLigneHF;
$requeteEffectuee = mysql_query($requete, $idCnx);
}
else{
// Si la ligne ne contient pas accepté on ajouté refusé
$requete = "UPDATE LigneFraisHorsForfait SET libelle = CONCAT(\"REFUSE - \", libelle) WHERE id = " . $unIdLigneHF;
$requeteEffectuee = mysql_query($requete, $idCnx);
}
return ;
}
/**
* Met à jour une ligne Hors forfait
* Met à jour en acceptant dans la BD la ligne hors forfait d'id $unIdLigneHF
* CAA d'ACCEPTATION
* @param resource $idCnx identifiant de connexion
* @param string $unIdLigneHF id de la ligne hors forfait
* @return void
*/
function accepterLigneHF($idCnx, $unIdLigneHF) {
$unIdLigneHF = filtrerChainePourBD($unIdLigneHF);
$requeteVerif = "SELECT COUNT(*) FROM LigneFraisHorsForfait WHERE id = ". $unIdLigneHF ." AND libelle LIKE '%REFUSE%'" ; //Check si la ligne contient "REFUSE"
$requeteEffectuee = mysql_query($requeteVerif, $idCnx);
$nbLignAffectees = mysql_num_rows($requeteEffectuee); //Retourne le nombre de ligne du SELECT
if($nbLignAffectees == 1){
// Si la ligne contient déjà refusé on remplace par accepté
$requete = "UPDATE LigneFraisHorsForfait SET libelle = REPLACE(libelle, 'REFUSE', 'ACCEPTE') WHERE id = ". $unIdLigneHF;
$requeteEffectuee = mysql_query($requete, $idCnx);
}
else{
// Si la ligne ne contient pas refusé , on ajoute accepté
$requete = "UPDATE LigneFraisHorsForfait SET libelle = CONCAT(\"ACCEPTE - \", libelle) WHERE id = " . $unIdLigneHF . " AND libelle NOT LIKE '%ACCEPTE%'" ;
$requeteEffectuee = mysql_query($requete, $idCnx);
}
return ;
}
/**
* Calcul du montant total dans le cas ou la fiche est deja au moins validée
* @param resource $idCnx identifiant de connexion
* @param string $unIdLigneHF id de la ligne hors forfait
* @return void
*/
function calculMontantTotalValide($idCnx, $unIdVisiteur, $mois)
{
$unIdVisiteur = filtrerChainePourBD($unIdVisiteur);
$mois = filtrerChainePourBD($mois);
$requeteVeriff = "SELECT idEtat FROM FicheFrais WHERE idVisiteur = '" . $unIdVisiteur . "' AND mois = '" . $mois . "' AND idEtat <> 'CR' ";
$requeteEffectuee = mysql_query($requeteVeriff, $idCnx);
$rows = mysql_num_rows($requeteEffectuee);
if ($rows != 0) // Si la table est au moins validée , on calcul
{
$requeteMaj = "UPDATE FicheFrais SET montantValide =
(SELECT SUM(ff.montant * lff.quantite /* Somme de toutes les quantités differentes de KM ( voir WHERE )*/ ) + (/* Calcul sous requêtes du KM uniquement liaison table visiteur pour Coeff voiture et quantité dans FicheFrais*/ SELECT vis.coeffVoiture * lff.quantite FROM User AS vis JOIN LigneFraisForfait AS lff ON vis.id = lff.idVisiteur WHERE vis.metier = 'visiteur' AND vis.id = '" . $unIdVisiteur . "' AND lff.mois = '" . $mois . "' AND lff.idFraisForfait = 'KM') + IFNULL((SELECT SUM(montant) FROM LigneFraisHorsForfait WHERE libelle NOT LIKE '%REFUSE%' AND idVisiteur = '" . $unIdVisiteur . "' AND mois = '" . $mois . "' ),0) AS sommeTotal
FROM FraisForfait AS ff
JOIN LigneFraisForfait AS lff ON ff.id = lff.idFraisForfait
WHERE ff.id <> 'KM' AND lff.idVisiteur = '" . $unIdVisiteur . "' AND lff.mois = '" . $mois . " ')
WHERE idVisiteur = '" . $unIdVisiteur . "' AND mois = '" . $mois . "'"; //Check si la ligne contient "REFUSE"
$requeteEffectuee = mysql_query($requeteMaj, $idCnx);
}
else // Si la table est seulement crée on met le montant à NULL
{
$requeteVeriff = "UPDATE FicheFrais SET montantValide = NULL WHERE idVisiteur = '" . $unIdVisiteur . "' AND mois = '" . $mois . "'";
$requeteEffectuee = mysql_query($requeteVeriff, $idCnx);
}
}
/**
* Met à jour une ligne justificatifs
* Met à jour la ligne du justificatif
* @param resource $idCnx identifiant de connexion
* @param string $unIdVisiteur id du Visiteur concerné
* @return void
*/
function changerNbJustificatifs($idCnx, $unIdVisiteur, $unMois, $nbJustificatifs) {
$unIdVisiteur = filtrerChainePourBD($unIdVisiteur);
$unMois = filtrerChainePourBD($unMois);
$nbJustificatifs = filtrerChainePourBD($nbJustificatifs);
$requete = 'UPDATE FicheFrais SET nbJustificatifs = '. $nbJustificatifs .' WHERE idVisiteur = "' . $unIdVisiteur. '" AND mois="'. $unMois .'"';
mysql_query($requete, $idCnx);
}
/**
* Ajoute une nouvelle ligne hors forfait.
* Insère dans la BD la ligne hors forfait de libellé $unLibelleHF du montant
* $unMontantHF ayant eu lieu à la date $uneDateHF pour la fiche de frais du mois
* $unMois du Visiteur d'id $unIdVisiteur
* @param resource $idCnx identifiant de connexion
* @param string $unMois mois demandé (AAMMMM)
* @param string $unIdVisiteur id du Visiteur
* @param string $uneDateHF date du frais hors forfait
* @param string $unLibelleHF libellé du frais hors forfait
* @param double $unMontantHF montant du frais hors forfait
* @return void
*/
function ajouterLigneHF($idCnx, $unMois, $unIdVisiteur, $uneDateHF, $unLibelleHF, $unMontantHF) {
$unLibelleHF = filtrerChainePourBD($unLibelleHF);
$uneDateHF = filtrerChainePourBD(convertirDateFrancaisVersAnglais($uneDateHF));
$unMois = filtrerChainePourBD($unMois);
$unMontantHF = filtrerChainePourBD($unMontantHF);
$requete = "insert into LigneFraisHorsForfait(idVisiteur, mois, date, libelle, montant)
values ('" . $unIdVisiteur . "','" . $unMois . "','" . $uneDateHF . "','" . $unLibelleHF . "'," . $unMontantHF .")";
mysql_query($requete, $idCnx);
}
/**
* Modifie les quantités des éléments forfaitisés d'une fiche de frais.
* Met à jour les éléments forfaitisés contenus
* dans $desEltsForfaits pour le Visiteur $unIdVisiteur et
* le mois $unMois dans la table LigneFraisForfait, après avoir filtré
* (annulé l'effet de certains caractères considérés comme spéciaux par
* MySql) chaque donnée
* @param resource $idCnx identifiant de connexion
* @param string $unMois mois demandé (MMAAAA)
* @param string $unIdVisiteur id Visiteur
* @param array $desEltsForfait tableau des quantités des éléments hors forfait
* avec pour clés les identifiants des frais forfaitisés
* @return void
*/
function modifierEltsForfait($idCnx, $unMois, $unIdVisiteur, $desEltsForfait) {
$unMois=filtrerChainePourBD($unMois);
$unIdVisiteur=filtrerChainePourBD($unIdVisiteur);
foreach ($desEltsForfait AS $idFraisForfait => $quantite) {
$requete = "update LigneFraisForfait set quantite = " . $quantite
. " WHERE idVisiteur = '" . $unIdVisiteur . "' AND mois = '"
. $unMois . "' AND idFraisForfait='" . $idFraisForfait . "'";
mysql_query($requete, $idCnx);
}
}
/**
* Contrôle les informations de connexionn d'un utilisateur.
* Vérifie si les informations de connexion $unLogin, $unMdp sont ou non valides.
* Retourne les informations de l'utilisateur sous forme de tableau associatif
* dont les clés sont les noms des colonnes (id, nom, prenom, login, mdp)
* si login et mot de passe existent, le booléen false sinon.
* @param resource $idCnx identifiant de connexion
* @param string $unLogin login
* @param string $unMdp mot de passe
* @return array tableau associatif ou booléen false
*/
function verifierInfosConnexion($idCnx, $unLogin, $unMdp) {
$unLogin = filtrerChainePourBD($unLogin);
$unMdp = filtrerChainePourBD($unMdp);
// le mot de passe est crypté dans la base avec la fonction de hachage md5
$req = "SELECT id, nom, prenom, login, mdp FROM User WHERE login='".$unLogin."' AND mdp='" . $unMdp . "'";
$idJeuRes = mysql_query($req, $idCnx);
$ligne = false;
if ( $idJeuRes ) {
$ligne = mysql_fetch_assoc($idJeuRes);
mysql_free_result($idJeuRes);
}
return $ligne;
}
/**
* Modifie l'état et la date de modification d'une fiche de frais
* Met à jour l'état de la fiche de frais du Visiteur $unIdVisiteur pour
* le mois $unMois à la nouvelle valeur $unEtat et passe la date de modif à
* la date d'aujourd'hui
* @param resource $idCnx identifiant de connexion
* @param string $unIdVisiteur
* @param string $unMois mois sous la forme aaaamm
* @return void
*/
function modifierEtatFicheFrais($idCnx, $unMois, $unIdVisiteur, $unEtat) {
$unIdVisiteur = filtrerChainePourBD($unIdVisiteur);
$unEtat = filtrerChainePourBD($unEtat);
$requete = "update FicheFrais set idEtat = '" . $unEtat .
"', dateModif = now() WHERE idVisiteur ='" .
$unIdVisiteur . "' AND mois = '". $unMois . "'";
mysql_query($requete, $idCnx);
}
/**
* Converti les initiales de L'état en Chaine de caractéres compléte
* La variable $Etat est converti en sa valeur complete $EtatComplet
* @param string $Etat
* @param string $EtatComplet
* @return $Etat
*/
function convertionEtatFicheFrais($Etat) {
$unEtat = filtrerChainePourBD($Etat);
switch ($unEtat) {
case "CR":
$EtatComplet = "Creation";
break;
case "VA":
$EtatComplet = "Validation";
break;
case "RB":
$EtatComplet = "Remboursement";
break;
case "CL":
$EtatComplet = "Cloture";
break;
}
return $EtatComplet ;
}
?>