<?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 ;
}
?>