31 Commits

Author SHA1 Message Date
6d57767987 corec bug 2024-01-12 11:16:29 +01:00
2438e20db2 Merge branch 'main' of https://gitea.lyc-lecastel.fr/pierre.renaudot/AP44 2024-01-12 11:12:38 +01:00
08f7cea2dc correction bug / netoyage du code 2024-01-12 11:12:03 +01:00
a00620beef Merge branch 'pagination-feature' 2024-01-12 11:10:35 +01:00
e6b8c87744 pagination 2024-01-12 11:06:07 +01:00
c990aed3d3 pagination gestion fiche 2024-01-11 15:55:07 +01:00
c5796a4bf2 reglages de bug 2024-01-11 15:49:42 +01:00
af3771e786 app ajout ficheAvalider 2024-01-11 11:41:51 +01:00
8aafdf565b menu ajout ficheAvalider 2024-01-11 10:58:15 +01:00
a2201a4eb3 Merge branch 'main' of https://gitea.lyc-lecastel.fr/pierre.renaudot/AP44 2024-01-11 09:14:14 +01:00
89273aced9 modification de la vue gestion fiche 2024-01-11 09:13:57 +01:00
4eac346ff2 ajout liste selon utilisateur 2024-01-11 09:13:35 +01:00
63eddbbc8b ajout liste gestion fiche 2024-01-09 13:04:51 +01:00
aa49401a47 bug correction 2024-01-09 10:52:03 +01:00
fcf292e823 correction bugs page newFiche 2024-01-07 16:26:43 +01:00
df7599ab9b mise à jour de la bdd pour les fiches de frais et suppression des hors forfait 2024-01-05 22:36:58 +01:00
f08b18fab5 ajout d'une fiche si non existante et test selon l'etat de la fiche courante 2024-01-03 23:59:50 +01:00
9f245f6578 page de connexion fonctionnelle avec bdd 2024-01-02 17:42:42 +01:00
85c00fde0a javascript et finalisation de la vue new fiche avant l'ajout de modification/ajout de fiche 2023-12-30 19:18:25 +01:00
d279249503 partie front et recup data (newFiche) 2023-12-26 21:49:15 +01:00
1db0ab4873 texte au dessus de la liste 2023-12-21 15:51:21 +01:00
53179a0a85 gestion de la liste 2023-12-21 14:12:13 +01:00
fa1bacb404 Merge branch 'main' of https://gitea.lyc-lecastel.fr/pierre.renaudot/AP44 2023-12-21 11:56:47 +01:00
e55df1b480 gestionFiche et connectionPDO 2023-12-21 11:56:22 +01:00
5b5e5cc28e liste des fraisForfaitaires 2023-12-21 11:54:30 +01:00
674514ed06 resolv merge + pdo 2023-12-21 10:52:21 +01:00
7fcee1a7bf modification pdo 2023-12-21 10:43:53 +01:00
30ccc68f7a affichage lstVisiteur dans gestionFiches 2023-12-21 10:16:37 +01:00
ce94d71198 finission page Nouvelle Fiche 2023-12-19 22:54:21 +01:00
280f10fc0b Design brut de la page nouvelle fiche de frais 2023-12-19 21:41:28 +01:00
c226069923 modification de l'index 2023-12-19 13:12:26 +01:00
40 changed files with 1427 additions and 2367 deletions

View File

@ -0,0 +1,87 @@
<?php
class Class_gestionFiche
{
private $pdo = null;
public static $NB_LIGNES_PAGINATION = 12;
public static $NB_LIGNES_FICHEAVALIDER = 15;
public function __construct(PdoGsb $pDO)
{
$this->pdo = $pDO->getPdoGsb();
}
public function getLesUtilisateurs(): array
{
$req = 'SELECT "uId", "uNom", "uPrenom" FROM utilisateur WHERE "uStatut"!=0 ORDER BY "uNom" ASC;';
$result = $this->pdo->prepare($req);
$result->execute();
return $result->fetchAll();
}
public function dateComplete(string $date): string
{
return substr($date, 0, 4) . '-' . substr($date, 4);
}
public function get_ficheAvalider(int $nPage): array
{
$decalage = ($nPage - 1) * $this::$NB_LIGNES_FICHEAVALIDER;
$req = 'SELECT "rMois", "rVisiteur", "rEtat", ROUND("rMontantValide", 2)
as "rMontantValide", "eLibelle", "uNom", "uPrenom"
from remboursement
INNER JOIN utilisateur ON utilisateur."uId"=remboursement."rVisiteur"
INNER JOIN etat ON etat."eId"=remboursement."rEtat"
where "rEtat"=\'CL\'
ORDER BY "rMois" ASC
LIMIT :nbLignes offset :decalage;';
$result = $this->pdo->prepare($req);
$result->bindParam('nbLignes', $this::$NB_LIGNES_FICHEAVALIDER);
$result->bindParam('decalage', $decalage);
$result->execute();
return $result->fetchAll();
}
public function get_nbFicheAvalider(): int
{
$req = 'SELECT COUNT(*) as "nbFicheAvalider" from remboursement
where "rEtat"=\'CL\'';
$result = $this->pdo->prepare($req);
$result->execute();
$result = $result->fetch();
return (int) $result['nbFicheAvalider'];
}
public function get_nbRemboursement(string $idUtilisateur): int
{
$req = 'SELECT COUNT(*) as "nbRemboursement" from remboursement WHERE "rVisiteur"= :userId;';
$result = $this->pdo->prepare($req);
$result->bindParam("userId", $idUtilisateur);
$result->execute();
$result = $result->fetch();
return (int) $result['nbRemboursement'];
}
public function get_Page(int $nPage, string $idUtilisateur): array
{
$decalage = ($nPage - 1) * $this::$NB_LIGNES_PAGINATION;
$req = 'SELECT "rMois", "rVisiteur", "rEtat", ROUND("rMontantValide", 2)
as "rMontantValide", "eLibelle"
FROM remboursement
INNER JOIN etat ON etat."eId"=remboursement."rEtat"
WHERE "rVisiteur"= :userId
ORDER BY "rDateModif" DESC LIMIT :nbLignes offset :decalage;';
$result = $this->pdo->prepare($req);
$result->bindParam('nbLignes', $this::$NB_LIGNES_PAGINATION);
$result->bindParam('decalage', $decalage);
$result->bindParam('userId', $idUtilisateur);
$result->execute();
return $result->fetchAll(PDO::FETCH_ASSOC);
}
}

218
Class/class.newFiche.php Normal file
View File

@ -0,0 +1,218 @@
<?php
/**
* OBJECT QUI GERE LA PARTIE AFFICHAGE ET MODIFICATION D'UNE FICHE
*/
class Class_newFiche
{
private $pdo = null;
private $month;
private $userId;
public function __construct(PdoGsb $pDO, string $userId, string $month)
{
$this->pdo = $pDO->getPdoGsb();
$this->month = $month;
$this->userId = $userId;
$this->existingFile();
}
/**
* Test et ajoute la fiche si elle n'existe pas dans remboursement
* et les ligneForfaitaires nulles liées
*/
private function existingFile(): void
{
$req = 'SELECT newremboursement(:idUser, :month); ';
$result = $this->pdo->prepare($req);
$result->bindParam('idUser', $this->userId);
$result->bindParam('month', $this->month);
$result->execute();
}
/**
* Liste les frais forfaitaires
*/
public function listFraisForfaitaires(): array
{
$req = 'SELECT "fLibelle", NULL AS "lfQuantite", round("fMontant", 2) AS "fMontant", 0 AS "fTotal", "fId" FROM forfait';
$result = $this->pdo->prepare($req);
$result->execute();
return $result->fetchAll();
}
/**
* Liste les frais Forfetaires d'un user pour 1 mois
*/
public function listFraisForfaitForU(): array
{
$req = 'SELECT "fLibelle", "lfQuantite", ROUND("fMontant", 2) AS "fMontant", ROUND("lfQuantite" * "fMontant", 2) AS "fTotal", "fId"
FROM remboursement
INNER JOIN "ligne_forfait" ON "rVisiteur" = "lfVisiteur" AND "rMois" = "lfMois"
INNER JOIN "forfait" ON "fId" = "lfForfait"
WHERE "rVisiteur" = :idUser AND "rMois" = :monthF;';
$result = $this->pdo->prepare($req);
$result->bindParam('idUser', $this->userId);
$result->bindParam('monthF', $this->month);
$result->execute();
return $result->fetchAll();
}
/**
* Liste les frais hors forfait d'un user pour 1 mois
*/
public function listFraisHF(): array
{
$req = 'SELECT "lhId", to_char("lhDate", \'YYYY-mm-dd\') AS "lhDate",
"lhLibelle", ROUND("lhMontant",2) as "lhMontant",
"lhJustificatif", "lhRefus"
FROM remboursement
inner join "ligne_hors_forfait" on "rVisiteur" = "lhVisiteur"
AND "rMois" = "lhMois"
WHERE "rVisiteur" = :idVisiteur AND "rMois" = :mois
ORDER BY "lhDate";';
$result = $this->pdo->prepare($req);
$result->bindParam(':idVisiteur', $this->userId);
$result->bindParam(':mois', $this->month);
$result->execute();
return $result->fetchAll();
}
/**
* Fonction qui renvoie le prix total validé d'une fiche de frais
*
* AJOUTER UNE FONCTION QUI CREE LA FICHE DE FRAIS LORS DU SELECT SI CELLE CI N'EXISTE PAS
*/
public function getMontantValide(): float
{
$req = 'SELECT "rMontantValide"
FROM remboursement
WHERE "rVisiteur" = :idVisiteur AND "rMois" = :mois ;';
$result = $this->pdo->prepare($req);
$result->bindParam(':idVisiteur', $this->userId);
$result->bindParam(':mois', $this->month);
$result->execute();
return $result->fetch()['rMontantValide'];
}
/**
* RETOURNE LE STATUS DE LA FICHE
*/
public function getStatus(): string
{
$req = 'select etat."eId" from remboursement
INNER JOIN etat on etat."eId" = remboursement."rEtat"
WHERE "rVisiteur" = :idVisiteur AND "rMois" = :mois ;';
$result = $this->pdo->prepare($req);
$result->bindParam(':idVisiteur', $this->userId);
$result->bindParam(':mois', $this->month);
$result->execute();
return $result->fetch()['eId'];
}
/**
* UPDATE LES INFOS DE LA FICHE
*/
public function updateFile(int $nbJustif, float $mttValid): bool
{
$req = 'UPDATE remboursement
SET "rNbJustificatifs" = :nbJustif,
"rMontantValide" = :mttValid,
"rDateModif" = NOW()
WHERE "rVisiteur" = :idVisiteur AND "rMois" = :mois;';
$result = $this->pdo->prepare($req);
$result->bindParam(':nbJustif', $nbJustif);
$result->bindParam(':mttValid', $mttValid);
$result->bindParam(':idVisiteur', $this->userId);
$result->bindParam(':mois', $this->month);
return $result->execute();
}
/**
* AJOUTE LES LIGNES HF
*/
public function addFraisHF(string $libelle, string $date, float $montant): bool
{
$req = 'SELECT MAX("lhId")+1
FROM ligne_hors_forfait';
$result = $this->pdo->prepare($req);
$result->execute();
$idLigne = $result->fetch()[0];
$req = 'INSERT INTO ligne_hors_forfait
VALUES (:idLigne, :userId, :monthF, :libelle, :dateL, :mttF, \'true\', \'false\');';
$result = $this->pdo->prepare($req);
$result->bindParam(':idLigne', $idLigne);
$result->bindParam(':libelle', $libelle);
$result->bindParam(':dateL', $date);
$result->bindParam(':mttF', $montant);
$result->bindParam(':userId', $this->userId);
$result->bindParam(':monthF', $this->month);
return $result->execute();
}
/**
* Refuse ou accepte un frais HF
*/
public function accceptFrais(int $idFrais, bool $state)
{
$req = 'UPDATE ligne_hors_forfait
SET "lhRefus" = :stateF
WHERE "lhId" = :idFrais;';
$result = $this->pdo->prepare($req);
$state = ($state) ? 'false' : 'true';
$result->bindParam(':stateF', $state);
$result->bindParam(':idFrais', $idFrais);
return $result->execute();
}
/**
* UPDATE LA LIGNE FRAIS FORFAITAIRES
*/
public function updateFraisF(int $qttF, int $montant, string $idForfait): bool
{
$req = 'UPDATE ligne_forfait
SET "lfQuantite" = :qttF,
"lfMontant" = :mttF
WHERE "lfVisiteur" = :userId AND "lfMois" = :monthF AND "lfForfait" = :idForfait;';
$result = $this->pdo->prepare($req);
$result->bindParam(':qttF', $qttF);
$result->bindParam(':mttF', $montant);
$result->bindParam(':idForfait', $idForfait);
$result->bindParam(':userId', $this->userId);
$result->bindParam(':monthF', $this->month);
return $result->execute();
}
/**
* SUPPRIME LA LIGNE HF
*/
public function suprLigneHF(int $idLine): bool
{
$req = 'DELETE FROM ligne_hors_forfait
WHERE "lhId" = :idLine';
$result = $this->pdo->prepare($req);
$result->bindParam(':idLine', $idLine);
return $result->execute();
}
}

36
Class/class.pdo.php Normal file
View File

@ -0,0 +1,36 @@
<?php
/**
* Class PDO qui gère la base de donnée
*/
class PdoGsb
{
private static $serveur = 'pgsql:host=localhost';
private static $bdd = 'dbname=gsb2024';
private static $user = 'postgres';
private static $mdp = 'postgres';
private static $pdo;
private static $monPdoGsb = null;
/**
* Constructeur prive, cree l'instance de PDO qui sera sollicitee
* pour toutes les methodes de la classe
*/
public function __construct()
{
PdoGsb::$pdo = new PDO(PdoGsb::$serveur . ';' . PdoGsb::$bdd, PdoGsb::$user, PdoGsb::$mdp);
//PdoGsb::$monPdo->query("SET CHARACTER SET utf8");SET client_encoding = 'UTF8';
}
public function _destruct()
{
PdoGsb::$monPdo = null;
}
/**
* Fonction statique qui cree l'unique instance de la classe
* Appel : $instancePdoGsb = PdoGsb::getPdoGsb();
* @return pdo
*/
public function getPdoGsb()
{
return PdoGsb::$pdo;
}
}

32
Class/class.user.php Normal file
View File

@ -0,0 +1,32 @@
<?php
/**
* Class qui gère les user
**/
class Class_user
{
private $pdo = null;
public function __construct(PdoGsb $pDO)
{
$this->pdo = $pDO->getPdoGsb();
}
/**
* FONCTION QUI CONNECTE UN UTILISATEUR
*/
public function connectUser(string $login, string $password): array|bool
{
$req = 'SELECT "uId", "uNom", "uPrenom", "uAdresse", "uCp", "uVille", "uSecteur", "uLabo", "parametre"."pLibelle"
FROM utilisateur
INNER JOIN parametre ON "parametre"."pType" = \'statUti\'
AND "utilisateur"."uStatut" = "parametre"."pIndice"
WHERE "uLogin" = :login AND "uMdp" = :pwd ;';
$result = $this->pdo->prepare($req);
$result->bindParam('login', $login);
$result->bindParam('pwd', $password);
$result->execute();
return $result->fetch();
}
}

View File

@ -0,0 +1,46 @@
<?php
//var_dump($_REQUEST['fraisHF']);
require_once(__DIR__ . '/../Class/class.pdo.php');
require_once(__DIR__ . '/../Class/class.newFiche.php');
$id = explode('-', $_GET['fiche']); //id de la fiche "userID-date"
$pdo = new PdoGsb;
$pdoNewFiche = new Class_newFiche($pdo, $id[0], $id[1]);
switch ($_GET['action']) {
case 'update':
//FRAIS FORFAITAIRES
foreach ($_REQUEST['fraisF'] as $value) {
$pdoNewFiche->updateFraisF(
$value['quantité'],
intval($value['montant']),
$value['id']
);
}
//FRAIS HORS FORFAIT
foreach ($_REQUEST['fraisHF'] as $value) {
if ($value['id'] == NULL) {
$pdoNewFiche->addFraisHF(
$value['libelle'],
$value['date'],
$value['montant']
);
}
}
break;
case 'suprFraisHF':
$pdoNewFiche->suprLigneHF($_GET['idFrais']);
break;
case 'refusFraisHF':
$pdoNewFiche->accceptFrais(
$_GET['idFrais'],
boolval($_GET['state'])
);
break;
default:
# code...
break;
}

View File

@ -1,62 +1,32 @@
<?php
// ***************************************'
// Le CASTEL-BTS SIO/ PROJET PPE4 GSB '
// Programme: c_connexion.php v2.0 '
// Objet : gestion remboursements frais'
// Client : laboratoires GSB '
// Date : 03/05/2023 à 11H01 '
// Auteur : pascal-blain@wanadoo.fr '
//****************************************'
if (!isset($_REQUEST['action'])) {
$_REQUEST['action'] = 'demandeConnexion';
require_once(__DIR__ . '/../Class/class.user.php');
$userClass = new Class_user($pdo);
if (isset($_POST['login']) && isset($_POST['password'])) {
//Récupère les données de l'utilisateur
$data = $userClass->connectUser($_POST['login'], $_POST['password']);
if ($data == false) {
header('location: index.php');
}
//Si l'utilisateur existe ou pas
if (count($data) === 0) {
header('location: index.php?direction=connexion&msg=errorco');
} else {
$_SESSION['uId'] = $data['uId'];
$_SESSION['uNom'] = $data['uNom'];
$_SESSION['uPrenom'] = $data['uPrenom'];
$_SESSION['uAdresse'] = $data['uAdresse'];
$_SESSION['uCp'] = $data['uCp'];
$_SESSION['uVille'] = $data['uVille'];
$_SESSION['uSecteur'] = $data['uSecteur'];
$_SESSION['uLabo'] = $data['uLabo'];
$_SESSION['uType'] = $data['pLibelle'];
header('location: index.php?direction=home');
}
} else {
include('vues/v_connexion.php');
}
$action = $_REQUEST['action'];
switch ($action) {
case 'demandeConnexion': {
session_unset();
$param = $pdo->getParametre("adresse");
$_SESSION['adr1'] = $param[1]['pLibelle']; //rue
$_SESSION['adr2'] = $param[2]['pLibelle'] . ' ' . $param[3]['pLibelle']; //codePostal et ville
include("vues/v_entete.php");
include("vues/v_connexion.php");
break;
}
case 'valideConnexion': {
$login = $_REQUEST['login'];
$mdp = $_REQUEST['mdp'];
$utilisateur = $pdo->getInfosUtilisateur($login, $mdp);
if (!is_array($utilisateur)) {
include("vues/v_entete.php");
ajouterErreur("Login ou mot de passe incorrect");
include("vues/v_erreurs.php");
include("vues/v_connexion.php");
} else {
$id = $utilisateur['id'];
$nom = $utilisateur['nom'];
$prenom = $utilisateur['prenom'];
$statut = $utilisateur['statut'];
connecter($id, $nom, $prenom, $statut);
if (date('m') - 1 > 0) {
$leMoisPrecedent = date('Y') * 100 + date('m') - 1;
} else {
$leMoisPrecedent = (date('Y') - 1) * 100 + 12;
}
//penser ici à faire la cloture du mois précédent !
if ($statut == 'V') /* si le remboursement pour le mois courant n'existe pas (=0) il faut le créer*/{
$leMois = date('Ym');
$leRemboursement = $pdo->existeRemboursement($id, $leMois);
if ($leRemboursement == 0) {
$pdo->creeNouveauRemboursement($id, $leMois);
}
}
header('location: index.php?uc=etatFrais&action=voir');
}
break;
}
default: {
include("vues/v_entete.php");
include("vues/v_connexion.php");
break;
}
}
?>

View File

@ -0,0 +1,5 @@
<?php
session_start();
session_destroy();
header('location: ../index.php');

View File

@ -1,62 +0,0 @@
<?php
// ***************************************'
// Le CASTEL-BTS SIO/ PROJET PPE4 GSB '
// Programme: c_etatFrais.php '
// Objet : consultations des frais '
// Client : laboratoires GSB '
// Version : 3.0 '
// Date : 03/05/2023 à 14H09 '
// Auteur : pascal-blain@wanadoo.fr '
//****************************************'
$action = $_REQUEST['action'];
switch($action) {
case 'voir':
{
$nbRemboursementsAValider=$pdo->getNbRemboursementsAValider();
include("vues/v_entete.php");
if ($_SESSION['statut']!='1')
{
$lesVisiteurs=$pdo->getLesVisiteurs();
include("vues/v_choixVisiteur.php");
if ($_SESSION['idVisiteur']!=$visiteurChoisi) {unset($_REQUEST['lstMois']);$_SESSION['idVisiteur']=$visiteurChoisi;}
}
$idVisiteur = $_SESSION['idVisiteur'];
$lesMois=$pdo->getLesMoisDisponibles($idVisiteur);
include("vues/v_choixMois.php");
$_SESSION['leMois']= $moisChoisi;
$leMois=$_SESSION['leMois'];
$lesInfosRemboursement = $pdo->getInfosRemboursement($idVisiteur,$leMois);
$libEtat = $lesInfosRemboursement['libEtat'];
$montantValide = $lesInfosRemboursement['montantValide'];
$nbJustificatifs = $lesInfosRemboursement['nbJustificatifs'];
$dateModif = $lesInfosRemboursement['dateModif'];
$etatRemboursement = $lesInfosRemboursement['rEtat'];
$lesFraisForfait= $pdo->getLesFraisForfait($idVisiteur,$leMois);
$lesFraisHorsForfait = $pdo->getLesFraisHorsForfait($idVisiteur,$leMois);
$ajoutFraisPossible = $pdo->getAjoutFraisPossible($idVisiteur, $leMois, $etatRemboursement);
include("vues/v_etatFrais.php");
break;
}
case 'validerEtat':
{
// code à rédiger ici ...
/*
// il faut actualiser le code etat, la date, le nombre de justificatifs et le montant valide
$pdo->valideRemboursement($idVisiteur,$leMois);
$moisASelectionner = $leMois;
header ('location: index.php?uc=etatFrais&action=voir&lstMois='.$leMois);
break;*/
}
default :
{
echo 'erreur d\'aiguillage !'.$action;
break;
}
}
?>

View File

@ -0,0 +1,30 @@
<?php
$_SESSION["typeU"] = "comptable";
require_once(__DIR__ . '/../Class/class.gestionFiche.php');
$gestionFiche = new Class_gestionFiche($pdo);
$LesUtilisateurs = $gestionFiche->getLesUtilisateurs(); //RENVOIE LISTE USERS
if ($_SESSION["typeU"] == "comptable") {
if (isset($_REQUEST['selVisiteur'])) {
$userId = $_REQUEST['selVisiteur'];
} else {
$userId = $LesUtilisateurs[0]['uId'];
}
} else {
$userId = $_SESSION['uId'];
}
//Pagination
if(isset($_GET['page']) && !empty($_GET['page'])){
$currentPage = (int) strip_tags($_GET['page']);
}else{
$currentPage = 1;
}
$pages = ceil($gestionFiche->get_nbFicheAvalider() / $gestionFiche::$NB_LIGNES_FICHEAVALIDER);
$lesFiches = $gestionFiche->get_ficheAvalider($currentPage);
include("vues/v_fichesAvalider.php");

View File

@ -1,74 +0,0 @@
<?php
// *****************************************'
// Le CASTEL-BTS SIO/ PROJET PPE4 GSB '
// Programme: c_gererFraisForfaitaire.php '
// Objet : Ajout/modif/suppression frais'
// Client : laboratoires GSB '
// Version : 3.0 '
// Date : 03/05/2023 <20> 11H01 '
// Auteur : pascal-blain@wanadoo.fr '
//******************************************'
$idVisiteur = $_SESSION['idVisiteur'];
$leMois = $_SESSION['leMois'];
$action = $_REQUEST['action'];
//----------------------------------------- AJOUT
if ($action=='choix')
{
include("vues/v_entete.php");
$lesForfaitsPossibles= $pdo->getLesForfaitsPossibles();
$prixKm=$pdo->getPrixKm($idVisiteur,$leMois);
include("vues/v_ajoutFraisForfaitaire.php");
}
if ($action=='valider')
{// enregistrement de la ligne et retour vers l'etat des frais
$qte = $_REQUEST['zQte'];
if ($qte>0)
{ $forfait = $_REQUEST['zForfait'];
$montant = str_replace(",",".",$_REQUEST['zPrix']);
$montant = str_replace(" ","",$montant);
$pdo->ajoutFraisForfait($idVisiteur, $leMois, $forfait, $qte, $montant); //insertion dans la table;
}
$moisASelectionner = $leMois;
header ('location: index.php?uc=etatFrais&action=voir&lstMois='.$leMois);
}
//----------------------------------------- MODIFICATION
if ($action=='editer')
{
include("vues/v_entete.php");
$forfait = $_REQUEST['forfait'];
$unForfait = $pdo->getUnFraisForfait($idVisiteur, $leMois, $forfait);
include("vues/v_unFraisForfaitaire.php");
}
if ($action=='validerModifier')
{// mise <20> jour de la ligne et retour vers l'etat des frais
$qte = $_REQUEST['zQte'];
if ($qte>0)
{
$forfait = $_REQUEST['forfait'];
$pdo->majFraisForfait($idVisiteur, $leMois, $forfait, $qte); //mise <20> jour de la table;
}
$moisASelectionner = $leMois;
header ('location: index.php?uc=etatFrais&action=voir&lstMois='.$leMois);
}
//----------------------------------------- SUPPRESSION
if ($action=='supprimer')
{
include("vues/v_entete.php");
$forfait = $_REQUEST['forfait'];
$unForfait = $pdo->getUnFraisForfait($idVisiteur, $leMois, $forfait);
include("vues/v_unFraisForfaitaire.php");
}
if ($action=='validerSupprimer')
{// suppression de la ligne et retour vers l'etat des frais
$qte = $_REQUEST['zQte'];
if ($qte>0)
{
$forfait = $_REQUEST['forfait'];
$pdo->supprimerFraisForfait($idVisiteur, $leMois, $forfait); //suppession de la ligne dans la table;
}
$moisASelectionner = $leMois;
header ('location: index.php?uc=etatFrais&action=voir&lstMois='.$leMois);
}
?>

View File

@ -1,75 +0,0 @@
<?php
// *****************************************'
// Le CASTEL-BTS SIO/ PROJET PPE4 GSB '
// Programme: c_gererFraisHorsForfait.php '
// Objet : Ajout/modif/suppression frais'
// Client : laboratoires GSB '
// Version : 3.0 '
// Date : 03/05/2023 <20> 11H01 '
// Auteur v1: pascal-blain@wanadoo.fr '
//******************************************'
$idVisiteur = $_SESSION['idVisiteur'];
$leMois = $_SESSION['leMois'];
$action = $_REQUEST['action'];
//----------------------------------------- AJOUT
if ($action=='ajouter')
{
include("vues/v_entete.php");
include("vues/v_ajoutFraisHorsForfait.php");
}
if ($action=='valider')
{// enregistrement de la ligne et retour vers l'etat des frais
$date = $_REQUEST['zDate'];
if ($date>0)
{ $libelle=addslashes($_REQUEST['zLibelle']);
$montant = str_replace(",",".",$_REQUEST['zMontant']);
$montant = str_replace(" ","",$montant);
$pdo->ajoutFraisHorsForfait($idVisiteur, $leMois, $date, $libelle, $montant); //insertion dans la table;
}
$moisASelectionner = $leMois;
header ('location: index.php?uc=etatFrais&action=voir&lstMois='.$leMois);
}
//----------------------------------------- MODIFICATION
if ($action=='editer')
{
include("vues/v_entete.php");
$idFrais = $_REQUEST['idFrais'];
$unFrais = $pdo->getUnFraisHorsForfait($idFrais);
include("vues/v_unFraisHorsForfait.php");
}
if ($action=='validerModifier')
{// mise <20> jour de la ligne et retour vers l'etat des frais
$montant = $_REQUEST['zMontant'];
if ($montant>0)
{
$idFrais = $_REQUEST['idFrais'];
$date = $_REQUEST['zDate'];
$libelle=addslashes($_REQUEST['zLibelle']);
$montant = str_replace(",",".",$_REQUEST['zMontant']);
$montant = str_replace(" ","",$montant);
$pdo->majFraisHorsForfait($idFrais, $date, $libelle, $montant); //mise <20> jour de la table;
}
$moisASelectionner = $leMois;
header ('location: index.php?uc=etatFrais&action=voir&lstMois='.$leMois);
}
//----------------------------------------- SUPPRESSION
if ($action=='supprimer')
{
}
if ($action=='validerSupprimer')
{
$montant = $_REQUEST['zMontant'];
if ($montant>0)
{
}
}
?>

View File

@ -0,0 +1,33 @@
<?php
require_once(__DIR__ . '/../Class/class.gestionFiche.php');
$typeU = $_SESSION['uType'];
$gestionFiche = new Class_gestionFiche($pdo);
$LesUtilisateurs = $gestionFiche->getLesUtilisateurs(); //RENVOIE LISTE USERS
// Gestion du selecteur selon le type user
if ($typeU == "comptable") {
if (isset($_REQUEST['selVisiteur'])) {
$userId = $_REQUEST['selVisiteur'];
} else {
$userId = $LesUtilisateurs[0]['uId'];
}
} else {
$userId = $_SESSION['uId'];
}
//Pagination
if(isset($_GET['page']) && !empty($_GET['page'])){
$currentPage = (int) strip_tags($_GET['page']);
}else{
$currentPage = 1;
}
$pages = ceil($gestionFiche->get_nbRemboursement($userId) / $gestionFiche::$NB_LIGNES_PAGINATION);
$lesFiches = $gestionFiche->get_Page($currentPage, $userId);
include("vues/v_gestionFiches.php");

View File

@ -0,0 +1,3 @@
<?php
include(__DIR__ . '/../vues/v_homePage.php');

View File

@ -0,0 +1,85 @@
<?php
/**
* sudo date --set "YYYY-MM-DD HH:MM:SS"
*/
require_once(__DIR__ . '/../Class/class.newFiche.php');
$typeUser = $_SESSION['uType']; //visiteur ou comptable
$userId = $_SESSION['uId']; //exemple: 'b34'
/**
* Gestion de la date selon la vue à afficher
*/
if (isset($_GET['currentList'])) {
//Date des req SQL et function
$date = date('Ym');
//Timestamp de la date
$dateTimeStamp = strtotime(date('Y-m-\01'));
//Date du formulaire HF
$dateFormHFMin = date('Y-m-\01');
$dateFormHFMax = date("Y-m-t", mktime(0, 0, 0, date('m'), 1, date('Y'))); // retourne le dernier jour du mois (30 ou 31)
} elseif (isset($_GET['dateListing'])) {
//Données pour nourire la vue
$userId = $_REQUEST['userId'];
$date = $_REQUEST['dateListing'];
//Timestamp de la date
$dateTimeStamp = strtotime(substr($date, 0, 4) . '-' . substr($date, 4) . '-01');
//Date du formulaire HF
$dateFormHFMin = substr($date, 0, 4) . '-' . substr($date, 4) . '-01';
$dateFormHFMax = date("Y-m-t", mktime(0, 0, 0, date('m', $dateTimeStamp), 1, date('Y', $dateTimeStamp))); // retourne le dernier jour du mois (30 ou 31)
}
//Date du header en français
try {
//sudo timedatectl set-local-rtc 1
//sudo apt install php8.2-intl
//sudo service apache2 restart
$format = new IntlDateFormatter(
'fr_FR',
IntlDateFormatter::FULL,
IntlDateFormatter::FULL,
'Europe/Paris',
IntlDateFormatter::GREGORIAN,
'MMMM Y'
);
$dateHeader = $format->format($dateTimeStamp);
} catch (\Throwable $th) {
$dateHeader = date('F Y', $dateTimeStamp);
}
//Instance de l'objet newFiche qui gère toute la partie bdd
$newFiche = new Class_newFiche($pdo, $userId, $date);
/**
* Liste des frais forfaitaires du mois et de l'user :: sinon afficher les libelle
*/
$listeFraisForfaitaire = $newFiche->listFraisForfaitForU();
if (count($listeFraisForfaitaire) == 0) {
$listeFraisForfaitaire = $newFiche->listFraisForfaitaires();
}
/**
* Listes des frais HF
*/
$listeFraisHf = $newFiche->listFraisHF();
/**
* TOTAL DE LA FICHE
*/
$totalFraisFiche = $newFiche->getMontantValide();
/**
* ETAT DE LA FICHE
*/
$status = $newFiche->getStatus();
$disabled = ($status !== 'CR') ? 'disabled' : '';
include(__DIR__ . '/../vues/v_newFiche.php');

View File

@ -7,7 +7,7 @@ create table "affectation"("uId" VARCHAR(4) not null,"aDate" TIMESTAMP not null,
--
create table "automobile"("aId" SMALLINT not null,"aPuissance" VARCHAR(15),"aMotorisation" VARCHAR(7),"aMontant" NUMERIC(19,4),"aDate" TIMESTAMP,primary key("aId"));
--
create table "echantillonOffert"("uId" VARCHAR(4) not null,"vNum" SMALLINT not null,"mDepotLegal" VARCHAR(10) not null,"OFF_QTE" SMALLINT,primary key("uId","vNum","mDepotLegal"));
create table "echantillon_offert"("uId" VARCHAR(4) not null,"vNum" SMALLINT not null,"mDepotLegal" VARCHAR(10) not null,"OFF_QTE" SMALLINT,primary key("uId","vNum","mDepotLegal"));
--
create table "etat"("eId" VARCHAR(2) not null,"eLibelle" VARCHAR(30),"eOrdre" SMALLINT,primary key("eId"));
--
@ -15,9 +15,9 @@ create table "famille"("fCode" VARCHAR(3) not null,"fLibelle" VARCHAR(83),primar
--
create table "forfait"("fId" VARCHAR(3) not null,"fLibelle" VARCHAR(20),"fMontant" NUMERIC(19,4),primary key("fId"));
--
create table "ligneForfait"("lfVisiteur" VARCHAR(4) not null,"lfMois" VARCHAR(6) not null,"lfForfait" VARCHAR(3) not null,"lfQuantite" SMALLINT,"lfMontant" NUMERIC(19,4),primary key("lfVisiteur","lfMois","lfForfait"));
create table "ligne_forfait"("lfVisiteur" VARCHAR(4) not null,"lfMois" VARCHAR(6) not null,"lfForfait" VARCHAR(3) not null,"lfQuantite" SMALLINT,"lfMontant" NUMERIC(19,4),primary key("lfVisiteur","lfMois","lfForfait"));
--
create table "ligneHorsForfait"("lhId" INTEGER not null,"lhVisiteur" VARCHAR(4) not null,"lhMois" VARCHAR(6) not null,"lhLibelle" VARCHAR(80),"lhDate" TIMESTAMP,"lhMontant" NUMERIC(19,4),"lhJustificatif" BOOLEAN,"lhRefus" BOOLEAN,primary key("lhId"));
create table "ligne_hors_forfait"("lhId" INTEGER not null,"lhVisiteur" VARCHAR(4) not null,"lhMois" VARCHAR(6) not null,"lhLibelle" VARCHAR(80),"lhDate" TIMESTAMP,"lhMontant" NUMERIC(19,4),"lhJustificatif" BOOLEAN,"lhRefus" BOOLEAN,primary key("lhId"));
--
create table "medicament"("mDepotLegal" VARCHAR(10) not null,"mNomCommercial" VARCHAR(25),"mComposition" VARCHAR(255),"mEffets" VARCHAR(255),"mContreIndications" VARCHAR(255),"mPrix" REAL,"mFamille" VARCHAR(3) not null,primary key("mDepotLegal"));
--
@ -29,9 +29,9 @@ create table "praticien"("pNum" INTEGER not null,"pNom" VARCHAR(25),"pPrenom" VA
--
create table "remboursement"("rVisiteur" VARCHAR(4) not null,"rMois" VARCHAR(6) not null,"rNbJustificatifs" SMALLINT,"rMontantValide" NUMERIC(19,4),"rDateModif" TIMESTAMP,"rEtat" VARCHAR(2),primary key("rVisiteur","rMois"));
--
create table "typeParametre"("tpId" VARCHAR(7) not null,"tpLibelle" VARCHAR(70),"tpBooleen" BOOLEAN,"tpChoixMultiple" BOOLEAN,"tpCumul" BOOLEAN,primary key("tpId"));
create table "type_parametre"("tpId" VARCHAR(7) not null,"tpLibelle" VARCHAR(70),"tpBooleen" BOOLEAN,"tpChoixMultiple" BOOLEAN,"tpCumul" BOOLEAN,primary key("tpId"));
--
create table "typePraticien"("tCode" VARCHAR(2) not null,"tLibelle" VARCHAR(31),"tLieu" VARCHAR(31),primary key("tCode"));
create table "type_praticien"("tCode" VARCHAR(2) not null,"tLibelle" VARCHAR(31),"tLieu" VARCHAR(31),primary key("tCode"));
--
create table "utilisateur"("uId" VARCHAR(4) not null,"uNom" VARCHAR(30),"uPrenom" VARCHAR(30),"uLogin" VARCHAR(20) not null,"uMdp" VARCHAR(20),"uAdresse" VARCHAR(32),"uCp" VARCHAR(5),"uVille" VARCHAR(30),"uDateEmbauche" TIMESTAMP,"uSecteur" SMALLINT,"uLabo" VARCHAR(2),"uStatut" SMALLINT,"uRegion" SMALLINT,"uDateEnreg" TIMESTAMP,"uDateModif" TIMESTAMP,"uPuissance" VARCHAR(20),"uMotorisation" VARCHAR(20),primary key("uId"));
--
@ -140,7 +140,7 @@ insert into "automobile"("aId","aPuissance","aMotorisation","aMontant","aDate")
(20233,'jusqu''à 4CV','essence',0.68,'2023-9-1'),
(20234,'5 CV et au-delà','essence',0.71,'2023-9-1');
-- ----------------------------------------------------------------------------------------------
insert into "echantillonOffert"("uId","vNum","mDepotLegal","OFF_QTE") values
insert into "echantillon_offert"("uId","vNum","mDepotLegal","OFF_QTE") values
('a131',1,'PHYSOI8',3),
('a131',2,'LIDOXY23',1),
('a131',3,'JOVAI8',1),
@ -340,7 +340,7 @@ insert into "forfait"("fId","fLibelle","fMontant") values
('NUI','Nuitée Hôtel',80),
('REP','Repas Restaurant',25);
-- ----------------------------------------------------------------------------------------------
insert into "ligneForfait"("lfVisiteur","lfMois","lfForfait","lfQuantite","lfMontant") values
insert into "ligne_forfait"("lfVisiteur","lfMois","lfForfait","lfQuantite","lfMontant") values
('a131','202011','ETP',11,110),
('a131','202011','KM',777,0.62),
('a131','202011','NUI',16,80),
@ -4374,7 +4374,7 @@ insert into "ligneForfait"("lfVisiteur","lfMois","lfForfait","lfQuantite","lfMon
('f4','202312','NUI',4,80),
('f4','202312','REP',18,25);
-- ----------------------------------------------------------------------------------------------
insert into "ligneHorsForfait"("lhId","lhVisiteur","lhMois","lhLibelle","lhDate","lhMontant","lhJustificatif","lhRefus") values
insert into "ligne_hors_forfait"("lhId","lhVisiteur","lhMois","lhLibelle","lhDate","lhMontant","lhJustificatif","lhRefus") values
(16166,'b34','202011','repas avec praticien','2020-11-15',50,true,false),
(16167,'bp','202011','repas avec praticien','2020-11-25',44,true,false),
(16168,'e24','202011','Voyage SNCF','2020-11-3',36,true,false),
@ -9290,7 +9290,7 @@ insert into "remboursement"("rVisiteur","rMois","rNbJustificatifs","rMontantVali
('f4','202310',2,3536.64,'2023-11-19','CL'),
('f4','202312',2,1681.7,'2024-1-28','RB');
-- ----------------------------------------------------------------------------------------------
insert into "typeParametre"("tpId","tpLibelle","tpBooleen","tpChoixMultiple","tpCumul") values
insert into "type_parametre"("tpId","tpLibelle","tpBooleen","tpChoixMultiple","tpCumul") values
('adresse','Coordonnées de l''entreprise',true,true,true),
('catProf','Catégorie Socioprofessionnelle',true,true,true),
('emploi','emploi',false,true,true),
@ -9305,7 +9305,7 @@ insert into "typeParametre"("tpId","tpLibelle","tpBooleen","tpChoixMultiple","tp
('statJur','statut juridique',false,true,true),
('statUti','Statut de l''utilisateur',true,true,true);
-- ----------------------------------------------------------------------------------------------
insert into "typePraticien"("tCode","tLibelle","tLieu") values
insert into "type_praticien"("tCode","tLibelle","tLieu") values
('MH','Médecin Hospitalier','Hopital ou clinique'),
('MV','Médecine de Ville','Cabinet'),
('PH','Pharmacien Hospitalier','Hopital ou clinique'),
@ -9596,16 +9596,16 @@ insert into "visite"("uId","vNum","pNum","vDate","vRapport","vMotif") values
-- contraintes d'intégrité référentielles
alter table "remboursement" add foreign key ("rEtat") references "etat"("eId");
alter table "medicament" add foreign key ("mFamille") references "famille"("fCode");
alter table "ligneForfait" add foreign key ("lfForfait") references "forfait"("fId");
alter table "echantillonOffert" add foreign key ("mDepotLegal") references "medicament"("mDepotLegal");
alter table "ligne_forfait" add foreign key ("lfForfait") references "forfait"("fId");
alter table "echantillon_offert" add foreign key ("mDepotLegal") references "medicament"("mDepotLegal");
alter table "observation" add foreign key ("mDepotLegal") references "medicament"("mDepotLegal");
alter table "observation" add foreign key ("pNum") references "praticien"("pNum");
alter table "visite" add foreign key ("pNum") references "praticien"("pNum");
alter table "ligneForfait" add foreign key ("lfVisiteur","lfMois") references "remboursement"("rVisiteur","rMois") on delete cascade on update cascade;
alter table "ligneHorsForfait" add foreign key ("lhVisiteur","lhMois") references "remboursement"("rVisiteur","rMois") on delete cascade on update cascade;
alter table "parametre" add foreign key ("pType") references "typeParametre"("tpId");
alter table "praticien" add foreign key ("pType") references "typePraticien"("tCode");
alter table "ligne_forfait" add foreign key ("lfVisiteur","lfMois") references "remboursement"("rVisiteur","rMois") on delete cascade on update cascade;
alter table "ligne_hors_forfait" add foreign key ("lhVisiteur","lhMois") references "remboursement"("rVisiteur","rMois") on delete cascade on update cascade;
alter table "parametre" add foreign key ("pType") references "type_parametre"("tpId");
alter table "praticien" add foreign key ("pType") references "type_praticien"("tCode");
alter table "affectation" add foreign key ("uId") references "utilisateur"("uId");
alter table "remboursement" add foreign key ("rVisiteur") references "utilisateur"("uId");
alter table "visite" add foreign key ("uId") references "utilisateur"("uId");
alter table "echantillonOffert" add foreign key ("uId","vNum") references "visite"("uId","vNum");
alter table "echantillon_offert" add foreign key ("uId","vNum") references "visite"("uId","vNum");

View File

@ -1,149 +0,0 @@
http://www.toutjavascript.com/savoir/savoir06_2.php3
En javascript, la concat<61>nation se fait avec le caract<63>re plus (+) ou bien grace <20> la m<>thode concat().
Dans les deux exemples ci-dessous, la variable cha<68>ne 3 contient la cha<68>ne "Bonjour tout le monde" :
var chaine1 = "Bonjour ";
var chaine2 = "tout le monde";
var chaine3 = chaine1+chaine2;
L'exemple ci-dessus est <20>quivalent <20> l'exemple suivant :
var chaine1 = "Bonjour ";
var chaine2 = "tout le monde";
var chaine3 = chaine1.concat(chaine2);
---------------------------------------------------------
indexOf: Retourne la position d'une sous-cha<68>ne (lettre ou groupe de lettres) dans une cha<68>ne de caract<63>re, en effectuant la recherche de gauche <20> droite, <20> partir de la position sp<73>cifi<66>e en param<61>tre. Retourne -1 si la sous-cha<68>ne n'est pas trouv<75>e dans la cha<68>ne principale.
var Chaine = 'Comment <20>a marche?';
var Sous_Chaine = 'mar';
var Sous_Chaine_2 = 'zzz';
var Resultat = Chaine.indexOf(Sous_Chaine); //Retourne 11
var Resultat = Chaine.indexOf(Sous_Chaine_2); //Retourne -1
---------------------------------------------------------
Pour r<>cup<75>rer l'indice la ligne s<>lectionn<6E>e :
this.form.elements['liste'].selectedIndex
Pour r<>cup<75>rer le nombre de lignes :
this.form.elements['liste'].options.length
Pour r<>cup<75>rer la valeur de la ligne s<>lectionn<6E>e :
this.form.elements['liste'].options[this.form.elements['liste'].selectedIndex].value
En JavaScript, la structure d'un <20>l<EFBFBD>ment de type SELECT reprend ce sch<63>ma :
name Nom de la liste
selectedIndex Indice de la ligne s<>lectionn<6E>e (ligne 1 : indice=0)
options Tableau des lignes
length Nombre de lignes
value Valeur d'une ligne
text Libell<6C> d'une ligne
---------------------------------------------------------
<FORM>
<INPUT type="text" name="zonedetexte" value="Valeur initiale">
<INPUT type="button" value="Changer le contenu"
onClick=' this.form.zonedetexte.value="NOUVEAU" '>
</FORM>
Gr<EFBFBD>ce <20> this.form, on peut acc<63>der au formulaire de l'<27>l<EFBFBD>ment en cours.
---------------------------------------------------------
Pour donner le focus au champ texte du haut de cette page, il faut appeler la m<>thode focus() sur cet <20>l<EFBFBD>ment.
document.forms["general"].elements["champ1"].focus()
Pour donner le focus <20> un champ de formulaire <20> l'ouverture de la page, il faut ajouter cette ligne dans la balise BODY :
onLoad="document.forms['nomduform'].elements['nomchamp'].focus()"
--------------------------------------------------------
Pour manipuler les nombres en javascript, il faut utiliser l'objet Math.
abs()
x=Math.abs(y);
La m<>thode abs() renvoie la valeur absolue (valeur positive) de y. Il supprime en quelque sorte le signe n<>gatif d'un nombre.
y = 4;
x = math.abs(y);
x = Math.abs(4);
x = math.abs(-4);
ont comme r<>sultat
x = 4
ceil()
x=Math.ceil(y);
La m<>thode ceil() renvoie l'entier sup<75>rieur ou <20>gal <20> y.
Attention ! Cette fonction n'arrondit pas le nombre.
Comme montr<74> dans l'exemple, si y = 1.01, la valeur de x sera mise <20> 2.
y=1.01;
x=Math.ceil(y);
a comme r<>sultat 2.
floor()
x=Math.floor(y);
La m<>thode floor() renvoie l'entier inf<6E>rieur ou <20>gal <20> y.
Attention ! Cette fonction n'arrondit pas le nombre.
Comme montr<74> dans l'exemple, si y = 1.99, la valeur de x sera mise <20> 1.
y=1.999;
x=Math.floor(y);
a comme r<>sultat 1.
round()
x=Math.round(y);
La m<>thode round() arrondit le nombre <20> l'entier le plus proche.
y=20.355;
x=Math.round(y);
a comme r<>sultat
x=20;
Attention ! Certains calculs r<>clament une plus grande pr<70>cision. Pour avoir deux d<>cimales apr<70>s la virgule, on utilisera la formule :
x=(Math.round(y*100))/100;
et dans ce cas
x=20.36;
max()
x=Math.max(y,z);
La m<>thode max(y,z) renvoie le plus grand des 2 nombres y et z.
y=20; z=10;
x=Math.max(y,z);
a comme r<>sultat
x=20;
min()
x=Math.min(y,z);
La m<>thode min(y,z) renvoie le plus petit des 2 nombres y et z.
y=20; z=10;
x=Math.min(y,z);
a comme r<>sultat
x=10;

View File

@ -1,34 +0,0 @@
stocker le nom d'utilisateur et le mot de passe dans la classe n'est pas une très bonne idée pour le code mis en production ... Une bonne solution consiste a stocker les paramètres de connexion à la base de données dans un fichier .ini et à en restreindre l'accès. Par exemple de cette façon:
private static $serveur='mysql:host=localhost';
private static $bdd='dbname=gsb2021';
private static $user='root' ;
private static $mdp='root' ;
gsb.ini:
[database]
driver = mysql
host = localhost
port = 3306
schema = gsb2021
username = root
password = root
Database connection:
<?php
class MyPDO extends PDO
{
public function __construct($file = 'gsb.ini')
{
if (!$settings = parse_ini_file($file, TRUE)) throw new exception('acces impossible ' . $file . '.');
$dns = $settings['database']['driver'] .
':host=' . $settings['database']['host'] .
((!empty($settings['database']['port'])) ? (';port=' . $settings['database']['port']) : '') .
';dbname=' . $settings['database']['schema'];
parent::__construct($dns, $settings['database']['username'], $settings['database']['password']);
}
}
?>

View File

@ -1,632 +0,0 @@
<?php
/** derniere modification le 124/12/2023 à 09h40 par Pascal BLAIN (attention a la casse !)
* Classe d'acces aux donnees.
* Utilise les services de la classe PDO pour l'application GSB
* Les attributs sont tous statiques, les 4 premiers pour la connexion
* $monPdo de type PDO
* $monPdoGsb qui contiendra l'unique instance de la classe
* @link http://www.php.net/manual/fr/book.pdo.php
*/
class PdoGsb
{
private static $serveur = 'pgsql:host=localhost';
private static $bdd = 'dbname=gsb2024';
private static $user = 'postgres';
private static $mdp = 'postgres';
private static $monPdo;
private static $monPdoGsb = null;
/**
* Constructeur prive, cree l'instance de PDO qui sera sollicitee
* pour toutes les methodes de la classe
*/
private function __construct()
{
PdoGsb::$monPdo = new PDO(PdoGsb::$serveur . ';' . PdoGsb::$bdd, PdoGsb::$user, PdoGsb::$mdp);
//PdoGsb::$monPdo->query("SET CHARACTER SET utf8");SET client_encoding = 'UTF8';
}
public function _destruct()
{
PdoGsb::$monPdo = null;
}
/**
* Fonction statique qui cree l'unique instance de la classe
* Appel : $instancePdoGsb = PdoGsb::getPdoGsb();
* @return l'unique objet de la classe PdoGsb
*/
public static function getPdoGsb()
{
if (PdoGsb::$monPdoGsb == null) {
PdoGsb::$monPdoGsb = new PdoGsb();
}
return PdoGsb::$monPdoGsb;
}
/**
* Retourne les informations d'un utilisateur
* @param $login
* @param $mdp
* @return l'id, le nom et le prenom sous la forme d'un tableau associatif
*/
public function getInfosUtilisateur($login, $mdp)
{
$req = "select \"uId\" as id, \"uNom\" as nom, \"uPrenom\" as prenom, \"uStatut\" as statut
from utilisateur
where \"uLogin\"='$login'
and \"uMdp\"='$mdp'";
$req = $this->entourerNoms($req);
//echo $req;
$rs = PdoGsb::$monPdo->query($req);
if ($rs === false) {
afficherErreurSQL("Probleme lors de la lecture ..", $req, PdoGsb::$monPdo->errorInfo());
}
$ligne = $rs->fetch();
return $ligne;
}
/**
* Retourne les informations de la table Visiteur
* @return un tableau associatif
*/
public function getLesVisiteurs()
{
}
/**
* Retourne deux valeurs indiquant si un ajout de frais est possible
* @param $idVisiteur
* @param $mois sous la forme aaaamm
* @paral etatRemboursement
*/
public function getAjoutFraisPossible($idVisiteur, $leMois, $etatRemboursement)
{
$possible = array('forfait' => "non", 'horsForfait' => "non", 'modifComptable' => 'non');
if ($_SESSION['statut'] == '1' && $etatRemboursement == 'CR') {
$req = "select count(*) as nbForfaits
from forfait
where fId not in (select lfForfait
from ligneForfait
where lfVisiteur='$idVisiteur'
and lfMois = '$leMois')";
//$req = $this->entourerNoms($req);
$rs = PdoGsb::$monPdo->query($req);
if ($rs === false) {
afficherErreurSQL("Probleme lors de la lecture ..", $req, PdoGsb::$monPdo->errorInfo());
}
$laLigne = $rs->fetch();
if ($laLigne['nbForfaits'] == 0 ? $possible = array('forfait' => "non", 'horsForfait' => "oui", 'modifComptable' => 'non') : $possible = array('forfait' => "oui", 'horsForfait' => "oui", 'modifComptable' => 'non'))
;
} else {
if ($_SESSION['statut'] != '1' && $etatRemboursement == 'CL') {
$possible = array('forfait' => "non", 'horsForfait' => "non", 'modifComptable' => "oui");
}
}
return $possible;
}
/**
* Retourne les informations pour ajout d'un nouveau frais forfaitaire
* @param $idVisiteur
* @param $mois sous la forme aaaamm
* @return l'id, le libell, le montant sous la forme d'un tableau associatif
*/
public function getLesForfaitsPossibles()
{
$req = "select \"fId\", \"fLibelle\", \"fMontant\"
from forfait";
//$req = $this->entourerNoms($req);
$rs = PdoGsb::$monPdo->query($req);
if ($rs === false) {
afficherErreurSQL("Probleme lors de la lecture ..", $req, PdoGsb::$monPdo->errorInfo());
}
$lesLignes = $rs->fetchAll();
return $lesLignes;
}
/**
* Retourne le tarif KM pour un motorisation et une puissance donnee a une date
*/
public function getPrixKm($idVisiteur, $leMois)
{
$laDate = substr($leMois, 0, 4) . '-' . substr($leMois, 4, 2) . '-01';
$req = "SELECT 1;";
$rs = PdoGsb::$monPdo->query($req);
if ($rs === false) {
afficherErreurSQL("Probleme lors de la lecture ..", $req, PdoGsb::$monPdo->errorInfo());
}
$laLigne = $rs->fetch();
return $laLigne;
}
/**
* Retourne sous forme d'un tableau associatif toutes les lignes de frais hors forfait concernees par les deux arguments
* @param $idVisiteur
* @param $mois sous la forme aaaamm
* @return tous les champs des lignes de frais hors forfait sous la forme d'un tableau associatif
*/
public function getLesFraisHorsForfait($idVisiteur, $mois)
{
$req = "SELECT 1;";
//$req = $this->entourerNoms($req);
$rs = PdoGsb::$monPdo->query($req);
if ($rs === false) {
afficherErreurSQL("Probleme lors de la lecture ..", $req, PdoGsb::$monPdo->errorInfo());
}
$lesLignes = $rs->fetchAll();
return $lesLignes;
}
/**
*/
public function getLesFraisReportes($idVisiteur, $mois, $justifies)
{
$req = "SELECT 1;";
//$req = $this->entourerNoms($req);
$rs = PdoGsb::$monPdo->query($req);
if ($rs === false) {
afficherErreurSQL("Probleme lors de la lecture ..", $req, PdoGsb::$monPdo->errorInfo());
}
$lesLignes = $rs->fetchAll();
return $lesLignes;
}
/**
* Retourne le nombre de justificatif d'un Visiteurpour un mois donnee
* @param $idVisiteur
* @param $mois sous la forme aaaamm
* @return le nombre entier de justificatifs
*/
public function getNbjustificatifs($idVisiteur, $mois)
{
$req = "SELECT 1;";
//$req = $this->entourerNoms($req);
$rs = PdoGsb::$monPdo->query($req);
if ($rs === false) {
afficherErreurSQL("Probleme lors de la lecture ..", $req, PdoGsb::$monPdo->errorInfo());
}
$laLigne = $rs->fetch();
return $laLigne['nb'];
}
/**
* Retourne le montant valide pour un remboursement (cumul des frais forfaitaires et des autres depenses (hors forfaits)
* @param $idVisiteur
* @param $mois sous la forme aaaamm
* @return le montant
*/
public function getMontantValide($idVisiteur, $mois)
{
$req = "SELECT 1;";
//$req = $this->entourerNoms($req);
$rs = PdoGsb::$monPdo->query($req);
if ($rs === false) {
afficherErreurSQL("Probleme lors de la lecture ..", $req, PdoGsb::$monPdo->errorInfo());
}
$laLigne = $rs->fetch();
$montantValide = $laLigne['montant'];
return $montantValide;
}
/**
* Retourne sous forme d'un tableau associatif toutes les lignes de frais au forfait concernees par les deux arguments
* @param $idVisiteur
* @param $mois sous la forme aaaamm
* @return l'id, le libelle et la quantite sous la forme d'un tableau associatif
*/
public function getLesFraisForfait($idVisiteur, $mois)
{
$req = "SELECT 1;";
//$req = $this->entourerNoms($req);
$rs = PdoGsb::$monPdo->query($req);
if ($rs === false) {
afficherErreurSQL("Probleme lors de la lecture ..", $req, PdoGsb::$monPdo->errorInfo());
}
$lesLignes = $rs->fetchAll();
return $lesLignes;
}
/**
* Met a jour la table ligneForfait pour un Visiteur et un mois donne en enregistrant le nouveau montant
* @param $idVisiteur
* @param $mois sous la forme aaaamm
* @param $qte
*/
public function getUnFraisForfait($idVisiteur, $mois, $forfait)
{
$req = "select lfVisiteur, lfMois, lfForfait, lfQuantite, lfMontant, fLibelle
from ligneForfait inner join forfait on ligneForfait.lfForfait=forfait.fId
where lfVisiteur= '$idVisiteur'
and lfMois = '$mois'
and lfForfait = '$forfait'";
//$req = $this->entourerNoms($req);
$rs = PdoGsb::$monPdo->query($req);
if ($rs === false) {
afficherErreurSQL("Probleme lors de la lecture ..", $req, PdoGsb::$monPdo->errorInfo());
}
$laLigne = $rs->fetch();
return $laLigne;
}
/**
* Met a jour la table ligneForfait pour un Visiteur et un mois donne en enregistrant le nouveau montant
* @param $idVisiteur
* @param $mois sous la forme aaaamm
* @param $qte
*/
public function majFraisForfait($idVisiteur, $mois, $forfait, $qte)
{
$req = "SELECT 1;";
//$req = $this->entourerNoms($req);
PdoGsb::$monPdo->exec($req);
}
/**
* supprime une ligneForfait pour un Visiteur et un mois donne
* @param $idVisiteur
* @param $mois sous la forme aaaamm
* @param $forfait
*/
public function supprimerFraisForfait($idVisiteur, $mois, $forfait)
{
$req = $req = "SELECT 1;";
//$req = $this->entourerNoms($req);
PdoGsb::$monPdo->exec($req);
}
/**
* ajoute une ligne dans la table ligneForfait pour un Visiteur et un mois donne
* @param $idVisiteur
* @param $mois sous la forme aaaamm
* @param $forfait
* @param $qte
* @param $montant
*/
public function ajoutFraisForfait($idVisiteur, $mois, $forfait, $qte, $montant)
{
$req = "SELECT 1;";
//$req = $this->entourerNoms($req);
PdoGsb::$monPdo->exec($req);
}
/**
* Met a jour la table ligneForfait pour un Visiteur et un mois donne en enregistrant le nouveau montant
* @param $idVisiteur
* @param $mois sous la forme aaaamm
* @param $qte
*/
public function getUnFraisHorsForfait($idFrais)
{
$req = $req = "SELECT 1;";
//$req = $this->entourerNoms($req);
$rs = PdoGsb::$monPdo->query($req);
if ($rs === false) {
afficherErreurSQL("Probleme lors de la lecture ..", $req, PdoGsb::$monPdo->errorInfo());
}
$laLigne = $rs->fetch();
return $laLigne;
}
/**
* Met ajour la table ligneHorsForfait (nouvelles valeurs)
*/
public function majFraisHorsForfait($idFrais, $date, $libelle, $montant)
{
$dateFr = dateFrancaisVersAnglais($date);
$req = "SELECT 1;";
//$req = $this->entourerNoms($req);
PdoGsb::$monPdo->exec($req);
}
/**
* Met a jour la table ligneHorsForfait pour report au mois suivant
*/
public function transfertFraisHorsForfait($idFrais, $mois)
{
$req = "SELECT 1;";
//$req = $this->entourerNoms($req);
PdoGsb::$monPdo->exec($req);
}
/**
* Cree un nouveau frais hors forfait pour un Visiteurun mois donne a partir des parametres
* @param $idVisiteur
* @param $mois sous la forme aaaamm
* @param $libelle : le libelle du frais
* @param $date : la date du frais au format français jj//mm/aaaa
* @param $montant : le montant
*/
public function ajoutFraisHorsForfait($idVisiteur, $mois, $date, $libelle, $montant)
{
$dateFr = dateFrancaisVersAnglais($date);
$req = "SELECT 1;";
//$req = $this->entourerNoms($req);
PdoGsb::$monPdo->exec($req);
}
/**
* Supprime le frais hors forfait dont l'id est passe en argument
* @param $idFrais
*/
public function supprimerFraisHorsForfait($idFrais, $libelle)
{
}
/**
* Retourne les mois pour lesquel un Visiteura une fiche de frais
* @param $idVisiteur
* @return un tableau associatif de clefs un mois -aaaamm- et de valeurs l'anne et le mois correspondant
*/
public function getLesMoisDisponibles($idVisiteur)
{
$tabMois = array('01' => "Janvier",
'02' => "F&eacute;vrier",
'03' => "Mars",
'04' => "Avril",
'05' => "Mai",
'06' => "Juin",
'07' => "Juillet",
'08' => "Ao&ucirc;t",
'09' => "Septembre",
'10' => "Octobre",
'11' => "Novembre",
'12' => "D&eacute;cembre");
$req = "select \"rMois\" as mois
from remboursement
where \"rVisiteur\"='$idVisiteur' ";
if ($_SESSION['statut'] <> '1') {
$req = $req . "and \"rEtat\"<>'CR'";
}
$req = $req . " order by \"rMois\" desc limit 12";
//$req = $this->entourerNoms($req);
$rs = PdoGsb::$monPdo->query($req);
$lesMois = array();
$laLigne = $rs->fetch();
while ($laLigne != null) {
$mois = $laLigne['mois'];
$numAnnee = substr($mois, 0, 4);
$numMois = $tabMois[substr($mois, 4, 2)];
$lesMois["$mois"] = array("mois" => "$mois", "numAnnee" => "$numAnnee", "numMois" => "$numMois");
$laLigne = $rs->fetch();
}
return $lesMois;
}
/**
*/
public function existeRemboursement($idVisiteur, $mois)
{
$req = "select count(*) as nb
from remboursement
where \"rVisiteur\"='$idVisiteur'
and \"rMois\"='$mois'";
//$req = $this->entourerNoms($req);
$rs = PdoGsb::$monPdo->query($req);
$laLigne = $rs->fetch();
return $laLigne['nb'];
}
/**
*/
public function getNbRemboursementsAValider()
{
$req = "SELECT 1 as nb;";
//$req = $this->entourerNoms($req);
$rs = PdoGsb::$monPdo->query($req);
$laLigne = $rs->fetch();
return $laLigne['nb'];
}
/**
*/
public function creeNouveauRemboursement($idVisiteur, $mois)
{
$req = "SELECT 1;";
//$req = $this->entourerNoms($req);
PdoGsb::$monPdo->exec($req);
}
/**
* Retourne les informations d'une fiche de frais d'un Visiteur pour un mois donne
* @param $idVisiteur
* @param $mois sous la forme aaaamm
* @return un tableau avec des champs de jointure entre une fiche de frais et la ligne d'etat
*/
public function getInfosRemboursement($idVisiteur, $mois)
{
$req = "SELECT 1;";
//$req = $this->entourerNoms($req);
$rs = PdoGsb::$monPdo->query($req);
if ($rs === false) {
afficherErreurSQL("Probleme lors de la lecture ..", $req, PdoGsb::$monPdo->errorInfo());
}
$laLigne = $rs->fetch();
return $laLigne;
}
/**
* Actualise le montant valide et le nb de justificatifs recus
*/
public function valideRemboursement($idVisiteur, $mois)
{
$NbJustificatifs = $this->getNbjustificatifs($idVisiteur, $mois);
$montantValide = $this->getMontantValide($idVisiteur, $mois);
$req = "SELECT 1;";
//$req = $this->entourerNoms($req);
PdoGsb::$monPdo->exec($req);
}
/**
* Modifie l'etat et la date de modification d'une fiche de frais
* Modifie le champ idEtat et met la date de modif a aujourd'hui
* @param $idVisiteur
* @param $mois sous la forme aaaamm
*/
public function majRemboursement($idVisiteur, $mois, $etat)
{
$req = "update remboursement set \"rEtat\" = '$etat', \"rDateModif\" = now()
where \"rVisiteur\"='$idVisiteur'
and \"rMois\"='$mois'";
PdoGsb::$monPdo->exec($req);
}
/**
* Clos les fiches de frais
* Modifie le champ idEtat et met la date de modif a aujourd'hui
*/
public function clotureMois($mois)
{
$req = "SELECT 1;";
//$req = $this->entourerNoms($req);
//PdoGsb::$monPdo->exec($req);
}
/**
* Retourne les informations de la table TYPEPARAMETRE
*/
public function getLesParametres()
{
$req = "SELECT \"tlId\", \"tlLibelle\", \"tlBooleen\", \"tlChoixMultiple\", \"tlCumul\"
FROM \"typeParametre\"
ORDER BY \"tlLibelle\";";
$req = $this->entourerNoms($req);
$rs = PdoGsb::$monPdo->query($req);
if ($rs === false) {
afficherErreurSQL("Probleme lors de la recherche dans la base de donn&eacute;es.", $req, PdoGsb::$monPdo->errorInfo());
}
$lesLignes = $rs->fetchAll();
return $lesLignes;
}
/**
* Retourne dans un tableau associatif les informations de la table PARAMETRE (pour un type particulier)
*/
public function getParametre($type)
{
$req = "SELECT \"pIndice\", \"pLibelle\"
FROM parametre
WHERE \"pType\"='$type'
ORDER by \"pIndice\";";
//echo $req;
//$req = $this->entourerNoms($req);
$rs = PdoGsb::$monPdo->query($req);
if ($rs === false) {
afficherErreurSQL("Probleme lors de la recherche des parametres dans la base de donn&eacute;es.", $req, PdoGsb::$monPdo->errorInfo());
}
$lesLignes = $rs->fetchAll();
return $lesLignes;
}
/**
* Retourne dans un tableau associatifles informations de la table PARAMETRE (pour un type particulier)
*/
public function getInfosParam($type, $valeur)
{
if ($valeur == "NULL") {
$req = "SELECT \"pType\", max(\"pIndice\")+1 AS pIndice, ' ' AS pLibelle, \"tlLibelle\", \"pPlancher\", \"pPlafond\"
FROM parametre INNER JOIN \"typeParametre\" ON \"typeParametre\".\"tlId\"=parametre.\"pType\"
WHERE pType='$type';";
} else {
$req = "SELECT \"pType\", \"pIndice\", \"pLibelle\", \"tlLibelle\", \"pPlancher\", \"pPlafond\"
FROM parametre INNER JOIN \"typeParametre\" ON \"typeParametre\".\"tlId\"=parametre.\"pType\"
WHERE \"pType\"='$type'
AND \"pIndice\" like '$valeur';";
}
$req = $this->entourerNoms($req);
$rs = PdoGsb::$monPdo->query($req);
if ($rs === false) {
afficherErreurSQL("Probleme lors de la recherche dans la base de donn&eacute;es.", $req, PdoGsb::$monPdo->errorInfo());
}
$ligne = $rs->fetch();
return $ligne;
}
/**
* Met a jour une ligne de la table PARAMETRE
*/
public function majParametre($type, $valeur, $libelle, $territoire, $dep, $plancher, $plafond)
{
$req = "UPDATE parametre SET \"pLibelle\"='$libelle', \"pPlancher\"=$plancher, \"pPlafond\"=$plafond
WHERE \"pType\"='$type'
AND \"pIndice\"=$valeur;";
//$req = $this->entourerNoms($req);
$rs = PdoGsb::$monPdo->exec($req);
if ($rs === false) {
afficherErreurSQL("Probleme lors de la mise a jour des parametres dans la base de donn&eacute;es.", $req, PdoGsb::$monPdo->errorInfo());
}
}
/**
* supprime une ligne de la table PARAMETRE
*/
public function supprimeParametre($type, $valeur)
{
$req = "DELETE
FROM parametre
WHERE \"pType\"='$type'
AND \"pIndice\"=$valeur;";
//$req = $this->entourerNoms($req);
$rs = PdoGsb::$monPdo->exec($req);
if ($rs === false) {
afficherErreurSQL("Probleme lors de la suppression d'un parametre dans la base de donn&eacute;es.", $req, PdoGsb::$monPdo->errorInfo());
}
}
/**
* ajoute une ligne dans la table PARAMETRE
*/
public function ajoutParametre($type, $valeur, $libelle, $territoire, $dep, $plancher, $plafond)
{
$req = "INSERT INTO parametre
(\"pType\", \"pIndice\", \"pLibelle\", \"pPlancher\", \"pPlafond\")
VALUES ('$type', $valeur, '$libelle', $plancher, $plafond);";
//$req = $this->entourerNoms($req);
$rs = PdoGsb::$monPdo->exec($req);
if ($rs === false) {
afficherErreurSQL("Probleme lors de l'insertion d'un parametre dans la base de donn&eacute;es.", $req, PdoGsb::$monPdo->errorInfo());
}
}
/**
* Fonction pour entourer les noms de tables et de champs par des guillemets doubles
*/
private function entourerNoms($requete)
{
$pattern = '/SELECT(.*?)[\n\r\s]FROM/i';
echo 'le patron : ' . $pattern . ' la requete : ' . $requete;
preg_match_all($pattern, $requete, $matches);
if (isset($matches[1])) {
var_dump($matches);
foreach ($matches[1] as $match) {
// Ajouter des guillemets doubles autour des noms de tables et de champs
$noms_entoures = preg_replace_callback('/\b([A-Za-z_][A-Za-z0-9_]*)\b/', function ($match) {
return '\"' . $match[0] . '\"';
}, $match);
$requete = str_replace($match, $noms_entoures, $requete);
}
}
//echo $requete;
return $requete;
}
}
?>

View File

@ -1,202 +0,0 @@
<?php
/**
* Fonctions pour l'application GSB
* @package default
* @author PB et GM
* @version 3.0 version MVC modifiee le 03/05/2023 à 11H01 par Blain Pascal
*/
/**
* Teste si un quelconque visiteur est connecté
* @return vrai ou faux
*/
function estConnecte(){
return isset($_SESSION['idUtilisateur']);
}
/**
* Enregistre dans une variable session les infos d'un visiteur
* @param $idUtilisateur
* @param $idVisiteur
* @param $nom
* @param $prenom
* @param $typeUtilisateur
*/
function connecter($id,$nom,$prenom,$statut){
$_SESSION['idUtilisateur']= $id;
$_SESSION['idVisiteur']= $id;
$_SESSION['nom']= $nom;
$_SESSION['prenom']= $prenom;
$_SESSION['statut']= $statut;
if ($statut=='1') $_SESSION['typeUtilisateur'] = 'Visiteur';
if ($statut=='2') $_SESSION['typeUtilisateur'] = 'Administrateur';
if ($statut=='0') $_SESSION['typeUtilisateur'] = 'Comptable';
}
/**
* Detruit la session active
*/
function deconnecter(){
session_destroy();
}
/**
* Transforme une date au format français jj/mm/aaaa vers le format anglais aaaa-mm-jj
* @param $madate au format jj/mm/aaaa
* @return la date au format anglais aaaa-mm-jj
*/
function dateFrancaisVersAnglais($maDate){
@list($jour,$mois,$annee) = explode('/',$maDate);
return date('Y-m-d',mktime(0,0,0,$mois,$jour,$annee));
}
/**
* Transforme une date au format format anglais aaaa-mm-jj vers le format français jj/mm/aaaa
* @param $madate au format aaaa-mm-jj
* @return la date au format format français jj/mm/aaaa
*/
function dateAnglaisVersFrancais($maDate)
{
@list($annee,$mois,$jour)=explode('-',$maDate);
$date="$jour"."/".$mois."/".$annee;
return $date;
}
/**
* retourne le mois au format aaaamm selon le jour dans le mois
* @param $date au format jj/mm/aaaa
* @return le mois au format aaaamm
*/
function getMois($date)
{
@list($jour,$mois,$annee) = explode('/',$date);
if(strlen($mois) == 1){
$mois = "0".$mois;
}
return $annee.$mois;
}
/* gestion des erreurs*/
/**
* Indique si une valeur est un entier positif ou nul
* @param $valeur
* @return vrai ou faux
*/
function estEntierPositif($valeur)
{
return preg_match("/[^0-9]/", $valeur) == 0;
}
/**
* Indique si un tableau de valeurs est constitué d'entiers positifs ou nuls
* @param $tabEntiers : le tableau
* @return vrai ou faux
*/
function estTableauEntiers($tabEntiers)
{
$ok = true;
foreach($tabEntiers as $unEntier)
{
if(!estEntierPositif($unEntier)){$ok=false;}
}
return $ok;
}
/**
* Vérifie si une date est inférieure d'un an à la date actuelle
* @param $dateTestee
* @return vrai ou faux
*/
function estDateDepassee($dateTestee)
{
$dateActuelle=date("d/m/Y");
@list($jour,$mois,$annee) = explode('/',$dateActuelle);
$annee--;
$AnPasse = $annee.$mois.$jour;
@list($jourTeste,$moisTeste,$anneeTeste) = explode('/',$dateTestee);
return ($anneeTeste.$moisTeste.$jourTeste < $AnPasse);
}
/**
* Vérifie la validité du format d'une date française jj/mm/aaaa
* @param $date
* @return vrai ou faux
*/
function estDateValide($date){
$tabDate = explode('/',$date);
$dateOK = true;
if (count($tabDate) != 3) {
$dateOK = false;
}
else {
if (!estTableauEntiers($tabDate)) {
$dateOK = false;
}
else {
if (!checkdate($tabDate[1], $tabDate[0], $tabDate[2])) {
$dateOK = false;
}
}
}
return $dateOK;
}
/**
* Verifie que le tableau de frais ne contient que des valeurs numeriques
* @param $lesFrais
* @return vrai ou faux
*/
function lesQteFraisValides($lesFrais){
return estTableauEntiers($lesFrais);
}
/**
* Vérifie la validité des trois arguments : la date, le libellé du frais et le montant
* des message d'erreurs sont ajoutés au tableau des erreurs
* @param $dateFrais
* @param $libelle
* @param $montant
*/
function valideInfosFrais($dateFrais,$libelle,$montant){
if($dateFrais==""){
ajouterErreur("Le champ date ne doit pas etre vide");
}
else{
if(!estDatevalide($dateFrais)){
ajouterErreur("Date invalide");
}
else{
if(estDateDepassee($dateFrais)){
ajouterErreur("date d'enregistrement du frais d&eacute;pass&eacute;, plus de 1 an");
}
}
}
if($libelle == ""){
ajouterErreur("Le champ description ne peut pas etre vide");
}
if($montant == ""){
ajouterErreur("Le champ montant ne peut pas etre vide");
}
else
if( !is_numeric($montant) ){
ajouterErreur("Le champ montant doit être num&eacute;rique");
}
}
/**
* Ajoute le libelle d'une erreur au tableau des erreurs
* @param $msg : le libellé de l'erreur
*/
function ajouterErreur($msg){
if (! isset($_REQUEST['erreurs'])){
$_REQUEST['erreurs']=array();
}
$_REQUEST['erreurs'][]=$msg;
}
/**
* Retoune le nombre de lignes du tableau des erreurs
* @return le nombre d'erreurs
*/
function nbErreurs(){
if (!isset($_REQUEST['erreurs'])){
return 0;
}
else{
return count($_REQUEST['erreurs']);
}
}
?>

View File

@ -1,7 +0,0 @@
[database]
driver = mysql
host = localhost
port = 3306
schema = gsb2021
username = root
password = root

View File

@ -1,71 +1,81 @@
<div class="col-auto col-md-3 col-xl-2 px-sm-2 px-0 bg-dark">
<div class="d-flex flex-column align-items-center align-items-sm-start px-3 pt-2 text-white min-vh-100">
<a href="/" class="d-flex align-items-center pb-3 mb-md-0 me-md-auto text-white text-decoration-none">
<span class="fs-5 d-none d-sm-inline">GSB LABORATOIRE</span>
<strong><span class="fs-5 d-none d-sm-inline">GSB LABORATOIRE</span></strong>
</a>
<div class="dropdown pb-4">
<a href="#" class="d-flex align-items-center text-white text-decoration-none dropdown-toggle"
id="dropdownUser1" data-bs-toggle="dropdown" aria-expanded="false">
<span class="d-none d-sm-inline mx-1">
<?= $_SESSION['uNom'] . ' (' . $_SESSION['uType'] . ')' ?>
</span>
</a>
<ul class="dropdown-menu dropdown-menu-dark text-small shadow" aria-labelledby="dropdownUser1">
<li><a class="dropdown-item" href="controleurs/c_deconnexion.php">Sign out</a></li>
</ul>
</div>
<ul class="nav nav-pills flex-column mb-sm-auto mb-0 align-items-center align-items-sm-start" id="menu">
<li class="nav-item">
<a href="../index.php" class="nav-link align-middle px-0">
<a href="index.php" class="nav-link align-middle px-0">
<i class="fs-4 bi-house"></i> <span class="ms-1 d-none d-sm-inline">Home</span>
</a>
</li>
<!--
Partie visiteur
-->
<li>
<a href="#submenu1" data-bs-toggle="collapse" class="nav-link px-0 align-middle">
<i class="fs-4 bi-speedometer2"></i> <span class="ms-1 d-none d-sm-inline">Fiche de frais</span>
</a>
<ul class="collapse show nav flex-column ms-1" id="submenu1" data-bs-parent="#menu">
<li class="w-100">
<a href="vues/v_gestionFiches.php" class="nav-link px-0"> <span class="d-none d-sm-inline">Gérer ses fiches</span>
</a>
</li>
<li>
<a href="#" class="nav-link px-0"> <span class="d-none d-sm-inline">Nouvelle Fiche</span>
</a>
</li>
</ul>
</li>
<li>
<a href="#" class="nav-link px-0 align-middle">
<i class="fs-4 bi-table"></i> <span class="ms-1 d-none d-sm-inline">Visites</span></a>
</li>
<!--
Partie visiteur
-->
<?php
if ($_SESSION['uType'] == 'visiteur'):
?>
<li>
<a href="#submenu1" data-bs-toggle="collapse" class="nav-link px-0 align-middle dropdown-toggle">
<strong><i class="fs-4 bi-speedometer2"></i> <span class="ms-1 d-none d-sm-inline">Fiche de
frais</span></strong>
</a>
<ul class="collapse show nav flex-column ms-1" id="submenu1" data-bs-parent="#menu">
<li class="w-100">
<a href="index.php?direction=gestionFiche" class="nav-link px-0"> <span
class="d-none d-sm-inline">Gérer ses fiches</span>
</a>
</li>
<li>
<a href="index.php?direction=nouvelleFiche&currentList" class="nav-link px-0"> <span
class="d-none d-sm-inline">Fiche du mois</span>
</a>
</li>
</ul>
</li>
<li>
<a href="#" class="nav-link px-0 align-middle dropdown-toggle">
<strong><i class="fs-4 bi-table"></i> <span
class="ms-1 d-none d-sm-inline">Visites</span></a></strong>
</li>
<?php endif;
if ($_SESSION['uType'] == 'comptable'): ?>
<!--
Partie comptable
-->
<li>
<a href="#submenu2" data-bs-toggle="collapse" class="nav-link px-0 align-middle">
<i class="fs-4 bi-speedometer2"></i> <span class="ms-1 d-none d-sm-inline">Fiche de frais</span>
</a>
<ul class="collapse show nav flex-column ms-1" id="submenu2" data-bs-parent="#menu">
<li class="w-100">
<a href="#" class="nav-link px-0"> <span class="d-none d-sm-inline">A valider</span>
<li>
<strong>
<a href="#submenu2" data-bs-toggle="collapse" class="nav-link px-0 align-middle dropdown-toggle">
<i class="fs-4 bi-speedometer2"></i> <span class="ms-1 d-none d-sm-inline">Fiche de frais</span>
</a>
</li>
<li>
<a href="#" class="nav-link px-0"> <span class="d-none d-sm-inline">Historique</span>
</a>
</li>
</ul>
</li>
</strong>
<ul class="collapse show nav flex-column ms-1" id="submenu2" data-bs-parent="#menu">
<li class="w-100">
<a href="index.php?direction=gestionFiche" class="nav-link px-0"> <span
class="d-none d-sm-inline">A valider</span>
</a>
</li>
<li>
<a href="index.php?direction=ficheAvalider" class="nav-link px-0"> <span
class="d-none d-sm-inline">fiches a vérifier</span>
</a>
</li>
</ul>
</li>
<?php endif; ?>
</ul>
<hr>
<div class="dropdown pb-4">
<a href="#" class="d-flex align-items-center text-white text-decoration-none dropdown-toggle"
id="dropdownUser1" data-bs-toggle="dropdown" aria-expanded="false">
<span class="d-none d-sm-inline mx-1">Nom</span>
</a>
<ul class="dropdown-menu dropdown-menu-dark text-small shadow" aria-labelledby="dropdownUser1">
<li><a class="dropdown-item" href="#">Settings</a></li>
<li><a class="dropdown-item" href="#">Profile</a></li>
<li>
<hr class="dropdown-divider">
</li>
<li><a class="dropdown-item" href="#">Sign out</a></li>
</ul>
</div>
</div>
</div>

219
include/newFiche.js Normal file
View File

@ -0,0 +1,219 @@
$(document).ready(function () {
calcPrixTotalFrsF();
calcPrixTotalFrsHorsF();
updatePrixTotal();
/**
* Partie enregistrement frais F
*/
$('.frsFrt').on('change', function (e) {
console.log($(this).val())
val = $(this).val();
val = val.replace(',', '.')
if ($.isNumeric(val)) {
/**
* Calcul le prix de la ligne
*/
id = $(this).attr('id')
formTotal = $('#totalFrs-' + id)
mttFrs = $('#mttFrs-' + id).attr('data-price')
formTotal.html((val * mttFrs).toFixed(2) + ' €');
calcPrixTotalFrsF();
updatePrixTotal();
}
})
/**
* Enregistrement frais HF
*/
$('.validFraisHF').on('click', function () {
let date = $('#dateHf')
let libelle = $('#libelleHf')
let montant = $('#mttHf')
let canAdd = true;
if (date.val() == "") {
canAdd = false;
date.css("border-color", "red")
} else {
date.css("border-color", "var(--bs-border-color)")
}
if (libelle.val() == "") {
canAdd = false;
libelle.css("border-color", "red")
} else {
libelle.css("border-color", "var(--bs-border-color)")
}
if (montant.val() == "") {
canAdd = false;
montant.css("border-color", "red")
} else {
montant.css("border-color", "var(--bs-border-color)")
}
if (canAdd == true) {
var line = $('tr.fraisHF:first').clone();
lastId = $('tr.fraisHF').length
line.find('.btn').attr('id', 'frsSup-' + lastId)
var line = $('<tr id="fraisHf-' + lastId + '" data-id="" class="fraisHF"></tr>');
var tdDate = $('<th scope="row" id="dateFrsHF"></th>');
tdDate.html(date.val());
var tdLibelle = $('<td id="LibelleFrsHF"></td>');
tdLibelle.html(libelle.val());
var tdMtt = $('<td id="MttFrsHF"></td>');
tdMtt.html(parseFloat(montant.val().replace(',', '.')).toFixed(2) + ' €');
var tdJust = $('<td></td>');
var btn = $('<td><button type="button" class="btn btn-outline-primary btnSuprFraisHf" id="frsSup-' + lastId + '">Supprimer</button></td>')
$(line).append(tdDate)
$(line).append(tdLibelle)
$(line).append(tdMtt)
$(line).append(tdJust)
$(line).append(btn)
line.insertBefore('.newFraisForm')
date.val('')
libelle.val('')
montant.val('')
}
calcPrixTotalFrsHorsF();
updatePrixTotal();
})
})
/**
* Refus d'un frais HF pour un comptable
*/
$(document).on('click', '.btnRefuseFraisHf', function () {
idFrais = $(this).parent().parent().attr('data-id')
fiche = $('#idFiche').attr('data-id')
etatLigne = $(this).attr('data-status')
console.log(etatLigne)
//set on refus
$.ajax({
// url: "../controleurs/c_actionFiche.php?action=refusFraisHF&fiche=" + fiche + "&idFrais=" + idFrais + "&state=" + etatLigne,
url: "controleurs/c_actionFiche.php?action=refusFraisHF&fiche=" + fiche + "&idFrais=" + idFrais + "&state=" + etatLigne,
method: "POST",
}).done(function () {
location.reload();
})
})
/**
* Supprimer fraisHf
*/
$(document).on('click', '.btnSuprFraisHf', function () {
id = $(this).attr('id').split('-')[1]
fiche = $('#idFiche').attr('data-id')
idFrais = $(this).parent().parent().attr('data-id')
//SUPPRIME DE LA BD
$.ajax({
url: "controleurs/c_actionFiche.php?action=suprFraisHF&fiche=" + fiche + "&idFrais=" + idFrais,
// url: "../controleurs/c_actionFiche.php?action=suprFraisHF&fiche=" + fiche + "&idFrais=" + idFrais,
method: "POST",
})
$('#fraisHf-' + id).remove()
calcPrixTotalFrsHorsF();
updatePrixTotal();
})
/**
* PARTIE ENVOIE DE LA FICHE
*/
$(document).on('click', '#sendFileBtn', function () {
//FRAIS FORFAITAIRES
var listeFraisF = []
$('tr.fraisForfaitaire').each(function () {
quantite = parseInt($(this).find('.frsFrt').val())
montant = parseFloat($(this).find('.mttFrsTotal').html())
id = $(this).attr('data-id')
tabData = {
'quantité': quantite,
'montant': montant,
'id': id
}
listeFraisF.push(tabData);
})
//FRAIS HF
var listeFraisHf = []
$('tr.fraisHF').each(function () {
date = $(this).find('#dateFrsHF').html()
libelle = $(this).find('#LibelleFrsHF').html()
montant = parseFloat($(this).find('#MttFrsHF').html())
id = $(this).attr('data-id')
tabData = {
'date': date,
'libelle': libelle,
'montant': montant,
'id': id
}
listeFraisHf.push(tabData);
})
data = {
fraisF: listeFraisF,
fraisHF: listeFraisHf
}
fiche = $('#idFiche').attr('data-id')
$.ajax({
url: "controleurs/c_actionFiche.php?action=update&fiche=" + fiche,
// url: "../controleurs/c_actionFiche.php?action=update&fiche=" + fiche,
method: "POST",
data: data,
}).done(function () {
location.reload();
})
})
/**
* Calcul prix total frais forfaitaires
*/
function calcPrixTotalFrsF() {
var prixTotal = 0;
$('td.mttFrsTotal').each(function () {
prixTotal += parseFloat($(this).html().replace('€', ''))
})
$('.prixTotalFrsF').html('<strong>TOTAL :</strong> ' + prixTotal.toFixed(2) + ' €')
$('.prixTotalFrsF').attr('data-prix', prixTotal.toFixed(2))
}
/**
* Calcul prix total frais hors forfait
*/
function calcPrixTotalFrsHorsF() {
console.log($('td#MttFrsHF').length)
if ($('td#MttFrsHF').length == 0) {
vf
}
var prixTotal = 0;
$('td#MttFrsHF').each(function () {
prixTotal += parseFloat($(this).html().replace('€', ''))
})
$('#total-frais-HF').html('<strong>TOTAL :</strong> ' + prixTotal.toFixed(2) + ' €')
$('#total-frais-HF').attr('data-prix', prixTotal.toFixed(2))
}
/**
* Calcul prix total de la fiche
*/
function updatePrixTotal() {
var total = parseFloat($('#total-frais-HF').attr('data-prix'))
total += parseFloat($('.prixTotalFrsF').attr('data-prix'))
$('#total-fiche').html('<strong>TOTAL :</strong> ' + total.toFixed(2) + ' €')
}

View File

@ -1,44 +0,0 @@
<?php
session_start();
// ***************************************'
// Le CASTEL-BTS SIO/ PROJET PPE4 GSB '
// Programme: index.php '
// Objet : Gestion des frais '
// Client : laboratoires GSB '
// Version : 3.0 '
// Date : 03/05/2023 à 11H01 '
// Auteur v1: pascal-blain@wanadoo.fr '
//****************************************'
require_once("include/fct.inc.php");
require_once("include/class.pdogsb.php");
$pdo = PdoGsb::getPdoGsb();
$estConnecte = estConnecte();
// on vrifie que l'utilisateur est authentifi
if (!isset($_REQUEST['uc']) || !$estConnecte) {
$_REQUEST['uc'] = 'connexion';
}
// on analyse le cas d'utilisation en cours ...
$uc = $_REQUEST['uc'];
switch ($uc) {
case 'connexion': {
include("controleurs/c_connexion.php");
break;
}
case 'etatFrais': {
include("controleurs/c_etatFrais.php");
break;
}
case 'gererFraisForfaitaire': {
include("controleurs/c_gererFraisForfaitaire.php");
break;
}
case 'gererFraisHorsForfait': {
include("controleurs/c_gererFraisHorsForfait.php");
break;
}
}
include("vues/v_pied.php");
?>

View File

@ -1,37 +1,77 @@
<?php
session_start();
require_once("Class/class.pdo.php");
$pdo = new PdoGsb();
/**
* Direction si non renseigné et non connecté
*/
if (!isset($_REQUEST['direction']) && !isset($_SESSION['uId'])) {
$_REQUEST['direction'] = 'connexion';
} elseif (!isset($_REQUEST['direction']) && isset($_SESSION['uId'])) {
$_REQUEST['direction'] = 'home';
}
?>
<!DOCTYPE html>
<html lang="en">
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Page accueil</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"
integrity="sha384-C6RzsynM9kWDrMNeT87bh95OGNyZPhcTNXj1NW7RuBCsyN/o0jlpcV8Qyq46cDfL"
crossorigin="anonymous"></script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Page accueil</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"
integrity="sha384-C6RzsynM9kWDrMNeT87bh95OGNyZPhcTNXj1NW7RuBCsyN/o0jlpcV8Qyq46cDfL"
crossorigin="anonymous"></script>
<script src="https://code.jquery.com/jquery-3.7.1.js"
integrity="sha256-eKhayi8LEQwp4NKxN+CfCh+3qOVUtJn3QNZ0TciWLP4=" crossorigin="anonymous"></script>
</head>
<body>
<div class="container-fluid">
<div class="row flex-nowrap">
<?php include('include/menu.php') ?>
<div class="col py-3">
<h3>Left Sidebar with Submenus</h3>
<p class="lead">
An example 2-level sidebar with collasible menu items. The menu functions like an "accordion" where
only a single
menu is be open at a time. While the sidebar itself is not toggle-able, it does responsively shrink
in width on smaller screens.</p>
<ul class="list-unstyled">
<li>
<h5>Responsive</h5> shrinks in width, hides text labels and collapses to icons only on mobile
</li>
</ul>
</div>
</div>
</div>
<div class="container-fluid">
<div class="row flex-nowrap">
<?php
if (!isset($_SESSION['uId'])) {
$_REQUEST['direction'] = 'connexion';
} else {
include('include/menu.php');
}
?>
<div class="col py-3">
<?php
switch ($_REQUEST['direction']) {
case 'connexion':
include("controleurs/c_connexion.php");
break;
case 'gestionFiche':
include(__DIR__ . "/controleurs/c_gestionFiche.php");
break;
case 'home':
include("controleurs/c_homePage.php");
break;
case 'nouvelleFiche':
include(__DIR__ . "/controleurs/c_nouvelleFiche.php");
break;
case 'ficheAvalider':
include(__DIR__ . "/controleurs/c_ficheAvalider.php");
break;
default:
include("controleurs/c_homePage.php");
break;
}
?>
</div>
</div>
</div>
</body>
</html>

55
sqlFunction.sql Normal file
View File

@ -0,0 +1,55 @@
--Fonction pour créer une fiche si celle-ci n'existe pas
CREATE OR REPLACE FUNCTION newRemboursement(userId CHAR(10), monthFile CHAR(10)) RETURNS int AS $$
DECLARE
returnValue INT;
forfaitRecord RECORD;
BEGIN
SELECT COUNT(*) INTO returnValue
FROM remboursement
WHERE "rVisiteur" = userId AND "rMois" = monthFile;
IF returnValue = 0 THEN
-- Ajoute une nouvelle ligne à la table remboursement
INSERT INTO remboursement
VALUES(userId, monthFile, 0, 0, CURRENT_DATE, 'CR');
-- Parcours des lignes de la table forfait pour insérer dans ligne_hors_forfait
FOR forfaitRecord IN SELECT * FROM forfait LOOP
INSERT INTO ligne_forfait
VALUES(userId, monthFile, forfaitRecord."fId", 0, 0);
END LOOP;
-- Mettre à jour la valeur de returnValue après l'insertion
returnValue := 1; -- Valeur pour indiquer qu'une ligne a été insérée
END IF;
RETURN returnValue;
END;
$$ LANGUAGE 'plpgsql';
--AJOUTE LES LIGNES HF
INSERT ligne_hors_forfait
("lhVisiteur", "lhMois", "lhLibelle", "lhDate", "lhMontant", "lhJustificatif", "lhRefus")
VALUES (:userId, :monthF, :libelle, :dateL, :mttF, 'true', 'false');
--UPDATE LES LIGNES HF SI REFUS
UPDATE ligne_hors_forfait
SET "lhRefus" = 'true'
WHERE "rVisiteur" = '' AND "rMois" = '' AND "lhId" = '';
--UPDATE LES LIGNE FORFAIT
UPDATE ligne_forfait
SET "lfQuantite" = :qttF,
"lfMontant" = :mttF
WHERE "rVisiteur" = :userId AND "rMois" = :monthF AND "lfForfait" = :idForfait;

View File

@ -1,352 +0,0 @@
/* Styles des divisions principales de la page : modifié le 4 janvier par Pascal Blain*/
#navigation {
position: relative;
float: right;
top : -2.75em;
right: 2em;
padding: 0em;
color: rgb(0,85,227);
}
#sommaire {
float: right;
margin-top : 20px;
margin-right: -30px;
padding: 0em;
color: rgb(0,85,227);
}
#sommaire ul {
padding:0;
margin:0;
list-style-type:none;
}
#sommaire li
{
vertical-align: middle;
margin-left:2px;
float:left; /*pour IE*/
}
#sommaire ul li a
{
vertical-align: middle;
display:block;
float:left;
width:150px;
text-decoration:none;
text-align:center;
/* background-color:#6495ED;
color:black;
padding:5px;
border-width:2px;
border-style:solid;
border-color:#DCDCDC #696969 #696969 #DCDCDC; /*pour avoir un effet "outset" avec IE */
}
#sommaire ul li a:hover
{
color: rgb(0,85,227);
font-size: 16px; /*
background-color:#D3D3D3;
border-color: #696969 #DCDCDC #DCDCDC #696969; */
}
body{
background-color: #77AADD;
background-image: url(imgs/FONDGLOBAL.jpg);
background-repeat: repeat-x;
margin:0% 0%;
padding : 0.6em;
font-family:"Trebuchet MS",Verdana,Geneva,Arial,Helvetica,sans-serif;
font-size:0.8em;
}
#page {
background-color:white;
width : 65%;
margin : auto ;
border : 0.2em solid black;
padding : 0.1em;
}
#entete{
background-color:rgb(72,198,236);
color : #980101;
border: solid 0.1em #980101;
height: 122px;
padding: 0em;
border-collapse: separate;
}
#pied{
clear : both;
border : solid 0.2em #980101;
margin-left : 18%;
margin-top : 1em;
padding:0.4em;
padding: 0.2em;
border-collapse: separate;
}
#menu{
position: relative;
float:right;
right: 0px;
margin-top : -100px;
margin-left: -10px;
padding: 0em;
background-color:transparent;
color: rgb(0,85,227);
width: 160px;
}
#contenu{
border: none;
padding: 1.3em;
background-color: white;
border-left : groove 0.8em #980101;
margin-top : 1.2em;
margin-left: 18%;
/* permet de fixer une hauteur mini sur les navigateurs modernes */
min-height:27em;
/* pour obtenir le même effet sur IE, sachant que si le contenu dépasse, il
"poussera" la hauteur en ne respectant pas la norme. On se joue de ses lacunes
*/
height:27em;
}
/* pour rétablir le mauvais effet sur les nav. modernes */
html>body #contenu{
height:auto;
}
/* style à appliquer à la balise ul d'identifiant menulist */
ul#menuList{
list-style:none;
margin:0px;
padding:0px;
width:98%;
font-size: 1em;
}
/* style à appliquer aux éléments de la balise ul d'identifiant menulist */
ul#menuList li {
position:relative;
margin:0px;
padding:0px;
}
/* apparences des liens dans listes et sous-listes non numérotées */
ul#menuList a {
color:rgb(0,85,227);
display:block;
text-decoration:none;
width:100%;
}
ul#menuList a:hover {
background: rgb(0,85,227);
color: white;
}
#entete #logoGSB {
float : left;
width : 191px;
height : 122px;
}
#entete h1 {
margin-top : 50px;
margin-right: 20px;
font-size : x-large;
text-align: right;
}
#contenu pre {
width:95%;
overflow : scroll;
}
#contenu h2 {
font-size : large;
text-align:left;
margin:0;
margin-bottom:0.5em;
}
.logoValidW3c {
display: inline;
}
#libValidW3c{
display : inline;
vertical-align:middle;
}
/* Style des formulaires */
.corpsForm {
border : solid 0.1em #000;
border-bottom-width:1px;
margin-bottom : 0em;
width : 95%;
}
.piedForm {
border-bottom-width : 0.1em;
border-left-width : 0.1em;
border-right-width : 0.1em;
border-top-width : 0em;
border-style : solid;
border-color : #000;
text-align:right ;
width : 95%;
margin-top:0em;
}
form {
margin-bottom:1em;
}
.corpsForm legend {
font-weight:bold;
font-size:1.2em;
}
.corpsForm label{
float: left;
text-align:right;
width:33%;
margin: 0;
padding: 0 .5em 0 0;
line-height: 1.8;
}
input, button, textarea, select{
font-family:"Trebuchet MS", sans-serif;
font-size : 1em;
}
button{
width : 60px;
height : 30px;
text-align:center;
vertical-align:middle;
}
input:hover, textarea:hover, select:hover{
background-color : #FAFAE6;
cursor : pointer;
}
/* Le texte des messages d'erreur est de couleur rose sur fond ocre et de
taille de caractères légèrement supérieure à la normale */
.erreur{
background-color:rgb(237,210,229);
color:rgb(203,28,128);
font-size:1.1em;
margin-left:200px;
width:75%;
}
.centre {
text-align:center;
}
.info {
background-color:rgb(178,207,81);
color : white;
font-size:1.1em;
width : 95%
}
.encadre {
border : solid 0.1em #000;
width : 100%;
}
/* Style pour les liens de la page principale */
#contenu .corpsTexte {
width:80%;
font-size:1.2em;
}
/* Style pour les liens de la page principale */
#contenu a {
font-size : 1.1em;
color:gray;
text-decoration:none;
}
#contenu a:hover {
text-decoration:underline;
background-color : #D9BB7A;
font-size : 1em;
}
/* Style pour les parties importantes de la page principale */
#contenu strong {
font-weight:bold;
}
/* Styles pour les tableaux de la page principale */
#contenu table {
background-color:#FFF;
border : 0.1em solid #777777;
color:black;
margin-right : auto ;
margin-left:0.3em;
border-collapse : collapse;
}
/* Style pour les lignes d'en-tête des tableaux */
#contenu th {
background-color:#77AADD;
height:21px;
text-align:left;
vertical-align:top;
font-weight:bold;
border-bottom:0.1em solid #777777;
font-size:1.1em;
}
#contenu td {
border :1px solid #777777;
}
#contenu h3 {
font-size : 1.2em;
}
table.listeLegere {
margin-bottom : 0.5em;
}
/* Tableaux quadrillés utilisés pour l'affichage de listes avec contenu léger*/
table.listeLegere th, table.listeLegere td {
border : dotted rgb(178,207,81) 0.1em;
padding:0.5em;
vertical-align : top;
}
table.listeLegere caption {
font-size : 1.1em;
text-align : left;
margin-bottom : 0.3em;
}
table.listeLegere td {
vertical-align:top;
font-weight:normal;
}
table.listeLegere th.eltForfait{
width:320px;
color:black;
}
table.listeLegere th.date, table.listeLegere th.montant{
width:70px;
color:black;
}
table.listeLegere th.libelle{
width:405px;
color:black;
}
#contenu h2 {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 14px;
font-weight: bold;
color: #1D2941;
text-decoration: none;
border : 1px solid #6988BE;
padding-left: 25px;
background-color: #E9F1FE;
height : 28px;
}
#contenu img {
height : 21px;
border-style: none;
float : left;
}
#contenu li img:hover {
height : 26px;
}

View File

@ -1,75 +0,0 @@
<!-- Derniere modification le 03/05/2023 à 11H01 -->
<div id="contenu">
<h2>AJOUT FRAIS FORFAITAIRE</h2>
<form name="nouveauFraisForfaitaire" action="index.php?uc=gererFraisForfaitaire&action=valider" method="POST">
<table class="listeLegere">
<thead>
<tr>
<th class="date">Quantit&eacute;</th>
<th class="eltForfait">Nature de la d&eacute;pense</th>
<th class="montant">Prix</th>
<th class="montant">Montant</th>
</tr>
</thead>
<tbody>
<tr>
<td><input type="hidden" name="zMois" value="<?PHP echo $leMois; ?>">
<input type="text" name="zQte" onkeyup="calculer()" style="text-align:right;"></td>
<td><select name="zForfait" onchange="calculer()">
<?PHP
foreach ($lesForfaitsPossibles as $unForfait)
{echo'<option value="'.$unForfait['fId'].'" size="1">'.$unForfait['fLibelle'].'</option>';}
?>
</select>
</td>
<td><input type="text" name="zPrix" style="text-align:right;" disabled></td>
<td><input type="text" name="zMontant" style="text-align:right;" disabled></td>
</tr>
</tbody>
</table>
<?php echo 'Puissance du v&eacute;hicule : '.$prixKm['aPuissance'].' - Carburant : '.$prixKm['aMotorisation'].' (tarif en vigueur depuis le : '.$prixKm['aDate'].')'; ?>
<p align="right"><input type="image" name="zValider" alt="Valider" src="images/valider.jpg" onclick="valider()"><input type="image" name="zAnnuler" alt="Annuler" src="images/annuler.jpg" onclick="annuler()"></p>
</form>
</div>
<script src="include/proceduresJava.js" type="text/javascript"></script>
<script type="text/javascript">
function calculer()
{
<?php
$tarif = 'var tarif = [';
foreach ($lesForfaitsPossibles as $unForfait)
{
$tarif .= $unForfait['fMontant'].',';
}
$tarif .='];';
echo $tarif."\n";
?>
var iLeChoix = document.nouveauFraisForfaitaire.zForfait.selectedIndex;
var quantite = document.nouveauFraisForfaitaire.zQte.value;
if (!isNaN(quantite))
{
document.nouveauFraisForfaitaire.zMontant.value = format_euro(quantite * (parseInt(parseFloat(tarif[iLeChoix])*1000))/1000);
}
document.nouveauFraisForfaitaire.zPrix.value = format_euro((parseInt(parseFloat(tarif[iLeChoix])*1000))/1000);
}
function valider()
{
document.nouveauFraisForfaitaire.zPrix.disabled=false;
document.nouveauFraisForfaitaire.submit();
}
function annuler()
{
document.nouveauFraisForfaitaire.reset();
document.nouveauFraisForfaitaire.submit();
}
window.onload = function() { calculer(); };
</script>

View File

@ -1,39 +0,0 @@
<!-- ajout d'un frais hors forfaits / Derni<6E>re modification le 03/05/2023 <20> 11H01 par P. Blain -->
<div id="contenu">
<h2>AJOUT D'UN FRAIS HORS FORFAIT</h2>
<form name="unFraisHorsForfait" action="index.php?uc=gererFraisHorsForfait&action=valider" method="POST">
<table class="listeLegere">
<thead>
<tr>
<th class="date">Date</th>
<th class="eltForfait">Nature de la d&eacute;pense</th>
<th class="montant">Montant</th>
</tr>
</thead>
<tbody>
<tr>
<td><input type="hidden" name="zMois" value="<?PHP echo $leMois; ?>">
<input type="text" name="zDate" style="text-align:center;border:0;"></td>
<td><input type="text" name="zLibelle" style="text-align:left;border:0;" size='80' maxlength='80' ></td>
<td><input type="text" name="zMontant" style="text-align:right;border:0;"></td>
</tr>
</tbody>
</table>
<p align="right"><input type="image" name="zValider" alt="Valider" src="images/valider.jpg" onclick="valider()"><input type="image" name="zAnnuler" alt="Annuler" src="images/annuler.jpg" onclick="annuler()"></p>
</form>
</div>
<script type="text/javascript">
function valider()
{
document.unFraisHorsForfait.submit();
}
function annuler()
{
document.unFraisHorsForfait.reset();
document.unFraisHorsForfait.submit();
}
</script>
<!-- fin -->

View File

@ -1,49 +0,0 @@
<!-- choix d'un mois / Derniere modification le 03/05/2023 à 11H01 par Pascal Blain -->
<script src="include/proceduresJava.js" type="text/javascript"></script>
<?php
if ($_SESSION['statut']=="1") {
$nbM=count($lesMois);
echo '
<div id="contenu">
<form name="choixM" action="index.php?uc=etatFrais&action=voir" method="post">
<h2>Etat de frais de ';} ?>
<select id="lstMois" name="lstMois" onchange="submit();">
<?php
if (!isset($_REQUEST['lstMois']))
{$moisChoisi = 'premier';}
else
{$moisChoisi=$_REQUEST['lstMois'];
}
$i=1;
foreach ($lesMois as $unMois)
{
if($unMois['mois'] == $moisChoisi or $moisChoisi == 'premier')
{echo "<option selected value=\"".$unMois['mois']."\">".$unMois['numMois']." ".$unMois['numAnnee']."</option>\n ";
$moisChoisi = $unMois['mois'];
$noM=$i;}
else
{echo "<option value=\"".$unMois['mois']."\">".$unMois['numMois']." ".$unMois['numAnnee']."</option>\n ";
$i=$i+1;}
}
echo '
</select></h2>';
?>
<!-- ============================================================== navigation dans les listes visiteurs et mois -->
<div id="navigation">
<input type="image" id="zPremier" alt="premier" src="images/goPremier.gif" onclick="premier(<?php echo "'".$_SESSION['statut']."'"; ?>)">
<input type="image" id="zPrecedent" alt="pr&eacute;c&eacute;dent" src="images/goPrecedent.gif" onclick="precedent(<?php echo "'".$_SESSION['statut']."'"; ?>)">
<?php
echo '
<input type="text" id="zNumero" alt="indice" value="'.$noM.'/'.$nbM.'" disabled="true" size="5" style="text-align:center;vertical-align:top;">';
?>
<input type="image" id="zSuivant" alt="premier" src="images/goSuivant.gif" onclick="suivant(<?php echo "'".$_SESSION['statut']."'"; ?>)">
<input type="image" id="zDernier" alt="premier" src="images/goDernier.gif" onclick="dernier(<?php echo "'".$_SESSION['statut']."'"; ?>)">
</div>
</form>
<!-- fin liste de choix -->

View File

@ -1,34 +0,0 @@
<!-- Choix d'un visiteur / Derniere modification le 03/05/2023 à 11H01 par Pascal Blain -->
<?php
if ($_SESSION['statut']!="1")
{
echo '
<div id="contenu">
<form name="choixV" action="index.php?uc=etatFrais&action=voir" method="post">
<h2>Etat de frais de
<select id="lstVisiteurs" name="lstVisiteurs" onchange="submit();">';
if (!isset($_REQUEST['lstVisiteurs']))
{$visiteurChoisi = 'premier';}
else
{
$visiteurChoisi=$_REQUEST['lstVisiteurs'];
}
echo '
</select>
Mois de ';
}
?>

View File

@ -1,4 +1,51 @@
<!-- 03/05/2023 à 11H01 -->
<section class="vh-100 gradient-custom">
<div class="container py-5 h-100">
<div class="row d-flex justify-content-center align-items-center h-100">
<div class="col-12 col-md-8 col-lg-6 col-xl-5">
<div class="card bg-dark text-white" style="border-radius: 1rem;">
<div class="card-body p-5 text-center">
<div class="mb-md-5 mt-md-4 pb-5">
<h2 class="fw-bold mb-2 text-uppercase">GSB Laboratoire</h2>
<p class="text-white-50 mb-5">Entrez votre login et mot-de-passe</p>
<form action="index.php" method="POST">
<div class="form-outline form-white mb-4">
<input type="text" id="typeEmailX"
class="form-control form-control-lg" name="login"/>
<label class="form-label" for="typeEmailX">Login</label>
</div>
<div class="form-outline form-white mb-4">
<input type="password" id="typePasswordX"
class="form-control form-control-lg" name="password"/>
<label class="form-label" for="typePasswordX">Mot-de-passe</label>
</div>
<!-- <p class="small mb-5 pb-lg-2"><a class="text-white-50" href="#!">Forgot password?</a></p> -->
<button class="btn btn-outline-light btn-lg px-5"
type="submit">Connexion</button>
</form>
<div class="d-flex justify-content-center text-center mt-4 pt-1">
<a href="#!" class="text-white"><i
class="fab fa-facebook-f fa-lg"></i></a>
<a href="#!" class="text-white"><i
class="fab fa-twitter fa-lg mx-4 px-2"></i></a>
<a href="#!" class="text-white"><i class="fab fa-google fa-lg"></i></a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<!--
<div id="contenu">
<h2>Identification utilisateur</h2>
@ -6,13 +53,13 @@
<form method="POST" action="index.php?uc=connexion&action=valideConnexion">
<p>
<p>
<label for="nom">Login*</label>
<input id="login" type="text" name="login" size="30" maxlength="45">
</p>
<p>
<label for="mdp">Mot de passe*</label>
<input id="mdp" type="password" name="mdp" size="30" maxlength="45">
<p>
<label for="mdp">Mot de passe*</label>
<input id="mdp" type="password" name="mdp" size="30" maxlength="45">
</p>
<input type="submit" value="Valider" name="valider">
<input type="reset" value="Annuler" name="annuler">

View File

@ -1,30 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<title>Intranet du Laboratoire Galaxy-Swiss Bourdin</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link href="./styles/stylesGSB.css" rel="stylesheet" type="text/css" />
<link rel="shortcut icon" type="image/x-icon" href="./images/favicon.ico" />
</head>
<body>
<div id="page">
<div id="entete">
<img src="./images/logo.jpg" id="logoGSB" alt="Laboratoire Galaxy-Swiss Bourdin" title="Laboratoire Galaxy-Swiss Bourdin" />
<?php if (isset($_SESSION['idUtilisateur']))
{echo '
<!-- affichage du menu / Derniere modification le 03/05/2023 à 11H01 par P. Blain -->
<div id="sommaire">
<ul>
<li><a href="" title="">&nbsp;</a></li>
<li><a href="" title="">&nbsp;</a>|</li>
<li><b>Bienvenue '.$_SESSION['prenom'].' '.strtoupper($_SESSION['nom']).'</b> ('.$_SESSION['typeUtilisateur'].')';
if ($_SESSION['statut']<>'1') {echo '<br /><i>Il y a '.$nbRemboursementsAValider.' demandes &agrave; valider</i>';}
echo ' </li>
<li><a href="index.php?uc=connexion&action=demandeConnexion" title="Se d&eacute;connecter"><img alt="déconnexion" src="images/deconnexion.png" border="0" height="26px"></a></li>
</ul>
</div>';} ?>
<br /><br /><h1>&Eacute;TAT DES FRAIS ENGAG&Eacute;S</h1>
<p style="text-align=left;"><?php echo $_SESSION['adr1'].'<br />'.$_SESSION['adr2'].'</p>';?>
</div>
<!-- fin affichage du menu -->

View File

@ -1,140 +0,0 @@
<!-- affichage du detail de la fiche frais / Derniere modification le 03/05/2023 à 11H01 par Pascal BLAIN -->
<div class="encadre">
<!-- ============================================================== frais forfaitaires -->
<table class="listeLegere">
<caption><h3>&emsp;&Eacute;l&eacute;ments forfaitis&eacute;s
<?php
if ($ajoutFraisPossible['forfait']=="oui") echo '
<a href="index.php?uc=gererFraisForfaitaire&action=choix" title="ajout frais forfaitaire">
<img alt="Ajouter un frais forfaitaire" src="images/ajouter.jpg" border="0">&nbsp;</a>
';?></h3>
</caption>
<thead>
<tr>
<th class="date">Quantit&eacute;</th>
<th class="eltForfait">Nature de la d&eacute;pense</th>
<th class="montant">Prix</th>
<th class="montant">Montant</th>
<?php
if ($ajoutFraisPossible['horsForfait']=="oui" or $ajoutFraisPossible['modifComptable']=="oui") {echo '
<th>&nbsp;</th>
<th>&nbsp;</th>';} ?>
</tr>
</thead>
<tbody>
<?php
$totalFraisForfait=0;
foreach ( $lesFraisForfait as $unFraisForfait )
{ echo '
<tr>
<td align="right">'.$unFraisForfait['lfQuantite'].'</td>
<td>'.$unFraisForfait['fLibelle'].'</td>
<td align="right">'.number_format($unFraisForfait['lfMontant'],2,',','.').'</td>
<td align="right">'.number_format($unFraisForfait['totalLigne'],2,',','.').'</td>';
if ($ajoutFraisPossible['horsForfait']=="oui" or $ajoutFraisPossible['modifComptable']=="oui") echo '
<td><a href="index.php?uc=gererFraisForfaitaire&action=editer&forfait='.$unFraisForfait['idfrais'].'"><img alt="modifier" src="images/editer.jpg" border="0"></a></td>
<td><a href="index.php?uc=gererFraisForfaitaire&action=supprimer&forfait='.$unFraisForfait['idfrais'].'"><img alt="supprimer" src="images/supprimer.jpg" border="0"></a></td>';
echo '
</tr>';
$totalFraisForfait=$totalFraisForfait + $unFraisForfait['totalLigne'];
}
echo '
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td align="right"><b>Total</b></td>
<td align="right"><b>'.number_format($totalFraisForfait,2,',','.').'</b></td>';
if ($ajoutFraisPossible['horsForfait']=="oui" or $ajoutFraisPossible['modifComptable']=="oui") {echo '
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>';}
?>
</tbody>
</table>
<!-- ============================================================== rappel des elements du remboursement -->
<form name="autresfrais" action="index.php?uc=etatFrais&action=validerEtat" method="post">
<div id="menu">
<ul>
<li>Etat : <b><?php echo $libEtat;?> </b></li>
<li>depuis le :<br /><b><?php echo $dateModif;?></b> </li>
<li>Justificatifs : <b><?php echo $nbJustificatifs; ?></b></li>
<li>Montant valid&eacute; : <br /><b><?php echo number_format($montantValide,2,',','.').' &euro;';?></b> </li><br />
<?php
if ($ajoutFraisPossible['modifComptable']=="oui") { echo '
<li style="list-style-type:none;"><img alt="validation de la demande de remboursement" src="images/validation.jpg" onClick="document.autresfrais.submit();"></li>';}
?>
</ul>
</div>
<!-- ============================================================== frais hors forfaits -->
<table class="listeLegere">
<caption><h3>&emsp;Autres d&eacute;penses (hors forfaits)
<?php
if ($ajoutFraisPossible['horsForfait']=="oui") echo '
<a href="index.php?uc=gererFraisHorsForfait&action=ajouter" title="ajout frais hors forfait">
<img alt="Ajouter un frais hors forfait" src="images/ajouter.jpg" border="0">&nbsp;</a>
';?></h3>
</caption>
<thead>
<tr>
<th class="date">Date</th>
<th class="libelle">Nature de la d&eacute;pense</th>
<th class="montant">Montant</th>
<?php
if ($ajoutFraisPossible['horsForfait']=="oui" or $ajoutFraisPossible['modifComptable']=="oui") {echo '
<th>&nbsp;</th>
<th>&nbsp;</th>';}
if ($ajoutFraisPossible['modifComptable']=="oui") {echo '
<th><img name="zTous" alt="valider tous les justificatifs" src="images/cocheB.gif" width="20px" onClick="tousLesJustificatifs(document.autresfrais);" onMouseOver="src=\'images/cocheR.gif\'" onMouseOut="src=\'images/cocheB.gif\'">
<input type="hidden" name="zSens" value="on"></th>';}
?>
</tr>
</thead>
<tbody>
<?php
$totalFraisHorsForfait=0;
foreach ( $lesFraisHorsForfait as $unFraisHorsForfait )
{if (substr($unFraisHorsForfait['lhLibelle'],0,6)<>'REFUSE') {$td='<td style="text-decoration:none;"';} else {$td='<td style="text-decoration:line-through; color:red;"';}
echo '<tr>'.
$td.'>'.$unFraisHorsForfait['lhDate'].'</td>'.
$td.'>'.$unFraisHorsForfait['lhLibelle'].'</td>'.
$td.' align="right">'.number_format($unFraisHorsForfait['lhMontant'],2,',','.').'</td>';
if ($ajoutFraisPossible['horsForfait']=="oui" or $ajoutFraisPossible['modifComptable']=="oui")
{echo '
<td><a href="index.php?uc=gererFraisHorsForfait&action=editer&idFrais='.$unFraisHorsForfait['lhId'].'"><img alt="modifier" src="images/editer.jpg" border="0"></a></td>
<td><img alt="supprimer" src="images/supprimer.jpg" border="0"></td>';
}
if ($ajoutFraisPossible['modifComptable']=="oui")
{if (substr($unFraisHorsForfait['lhLibelle'],0,6)<>'REFUSE')
{echo '<td><input type="checkbox" name="justificatifs[]" value="'.$unFraisHorsForfait['lhId'].'" checked onClick=""></td>';}
else
{echo '<td>&nbsp;</td>';}
}
$totalFraisHorsForfait=$totalFraisHorsForfait + $unFraisHorsForfait['lhMontant']; echo '
</tr>';
}
echo '
<tr>
<td>&nbsp;</td>
<td align="right"><b>Total</b></td>
<td align="right"><b>'.number_format($totalFraisHorsForfait,2,',','.').'</b></td>';
if ($ajoutFraisPossible['horsForfait']=="oui" or $ajoutFraisPossible['modifComptable']=="oui") {echo '
<td>&nbsp;</td>
<td>&nbsp;</td>';}
if ($ajoutFraisPossible['modifComptable']=="oui") {echo '
<td>&nbsp;</td>';} echo '
</tr>
</tbody>
</table>
</div>
<h3 align="center"><b>Total de la demande de remboursement de frais : '.number_format($totalFraisForfait + $totalFraisHorsForfait,2,',','.').' &euro;</b></h3>
</form>
</div>'; ?>

70
vues/v_fichesAvalider.php Normal file
View File

@ -0,0 +1,70 @@
<div class="text-center">
<br>
<h3>Fiches à valider</h3>
</div>
<div class="col-11 d-flex mx-auto">
<table class="table table-striped">
<thead>
<tr>
<th scope="col">Mois</th>
<th scope="col">Nom Fiche</th>
<th scope="col">Total</th>
<th scope="col">Statut</th>
<th scope="col">Détails</th>
</tr>
</thead>
<tbody>
<?php foreach ($lesFiches as $uneFiche) { ?>
<tr>
<th scope="row">
<?= $gestionFiche->dateComplete($uneFiche['rMois']) ?>
</th>
<td>
<?= $uneFiche['uNom'] ?>
<?= $uneFiche['uPrenom'] ?>
</td>
<td>
<?= $uneFiche['rMontantValide'] ?> €
</td>
<td>
<?= $uneFiche['eLibelle'] ?>
</td>
<td><a
href="index.php?direction=nouvelleFiche&userId=<?= $userId ?>&dateListing=<?= $uneFiche['rMois'] ?>">voir</a>
</td>
</tr>
<?php } ?>
</tbody>
</table>
</div>
<?php if ($pages > 0) { ?>
<div class="col-4 d-flex mx-auto">
<nav>
<ul class="pagination">
<!-- Lien vers la page précédente (désactivé si on se trouve sur la 1ère page) -->
<li class="page-item <?= ($currentPage == 1) ? "disabled" : "" ?>">
<a href="index.php?direction=ficheAvalider&page=<?= $currentPage - 1 ?>"
class="page-link">Précédente</a>
</li>
<?php for ($page = 1; $page <= $pages; $page++): ?>
<!-- Lien vers chacune des pages (activé si on se trouve sur la page correspondante) -->
<li class="page-item <?= ($currentPage == $page) ? "active" : "" ?>">
<a href="index.php?direction=ficheAvalider&page=<?= $page ?>"
class="page-link">
<?= $page ?>
</a>
</li>
<?php endfor ?>
<!-- Lien vers la page suivante (désactivé si on se trouve sur la dernière page) -->
<li class="page-item <?= ($currentPage == $pages) ? "disabled" : "" ?>">
<a href="index.php?direction=ficheAvalider&page=<?= $currentPage + 1 ?>"
class="page-link">Suivante</a>
</li>
</ul>
</nav>
</div>
<?php
};
?>

View File

@ -1,92 +1,97 @@
<!DOCTYPE html>
<html lang="en">
<center>
<div class="col-3 mb-4">
<br>
<?php
if ($typeU != 'comptable') {
echo '<h3>Gérer mes fiches de frais</h3>';
} else { ?>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Page accueil</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"
integrity="sha384-C6RzsynM9kWDrMNeT87bh95OGNyZPhcTNXj1NW7RuBCsyN/o0jlpcV8Qyq46cDfL"
crossorigin="anonymous"></script>
</head>
<form action="index.php?direction=gestionFiche" method="POST">
<?php
echo '<h3>Gérer les fiches de frais de :</h3>';
echo '<select class="form-select" name="selVisiteur" id="">';
foreach ($LesUtilisateurs as $key => $value) {
$id = $value['uId'];
$prenom = $value['uPrenom'];
$nom = $value['uNom'];
<body>
<div class="container-fluid">
<div class="row flex-nowrap">
<?php include('../include/menu.php') ?>
<div class="col py-3">
<center>
<div class="col-3 mb-4">
<h3>Gerer mes fiches de frais</h3>
<br>
<select class="form-select" name="selVisiteur" id="">
<option value="visiteur1">Visiteur 1</option>
</select>
</div>
</center>
<div class="col-11 d-flex mx-auto">
<table class="table table-striped">
<thead>
<tr>
<th scope="col">Mois</th>
<th scope="col">Total</th>
<th scope="col">Statut</th>
<th scope="col">Détails</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">Novembre</th>
<td>351 €</td>
<td>en cours...</td>
<td><a href="#">voir</a></td>
</tr>
<tr>
<th scope="row">Octobre</th>
<td>1458 €</td>
<td>en cours...</td>
<td><a href="#">voir</a></td>
</tr>
<tr>
<th scope="row">Septembre</th>
<td>1112 €</td>
<td>classé</td>
<td><a href="#">voir</a></td>
</tr>
</tbody>
</table>
</div>
<div class="col-4 d-flex mx-auto">
<nav aria-label="...">
<ul class="pagination">
<li class="page-item disabled">
<a class="page-link">Previous</a>
</li>
<li class="page-item"><a class="page-link" href="#">1</a></li>
<li class="page-item active" aria-current="page">
<a class="page-link" href="#">2</a>
</li>
<li class="page-item"><a class="page-link" href="#">3</a></li>
<li class="page-item">
<a class="page-link" href="#">Next</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
if ($id == $userId) {
echo '<option value="' . $id . '" selected>' . $nom . " " . $prenom . "</option>";
} else {
echo '<option value="' . $id . '">' . $nom . " " . $prenom . "</option>";
}
}
echo '</select>'; ?>
<button type="submit" class="btn btn-dark m-2">Selectionner</button>
<!-- Fin du formulaire -->
<?php }
?>
</div>
</center>
</body>
<div class="col-11 d-flex mx-auto">
<table class="table table-striped">
<thead>
<tr>
<th scope="col">Mois</th>
<th scope="col">Total</th>
<th scope="col">Statut</th>
<th scope="col">Détails</th>
</tr>
</thead>
<tbody>
<?php foreach ($lesFiches as $uneFiche) { ?>
<tr>
<th scope="row">
<?= $gestionFiche->dateComplete($uneFiche['rMois']) ?>
</th>
<td>
<?= $uneFiche['rMontantValide'] ?> €
</td>
<td>
<?= $uneFiche['eLibelle'] ?>
</td>
<td><a
href="index.php?direction=nouvelleFiche&userId=<?= $userId ?>&dateListing=<?= $uneFiche['rMois'] ?>">voir</a>
</td>
</tr>
<?php } ?>
</tbody>
</table>
</div>
</html>
<!--
PAGINATION:
-->
<?php if ($pages > 0) { ?>
<div class="col-4 d-flex mx-auto">
<nav>
<ul class="pagination">
<!-- Lien vers la page précédente (désactivé si on se trouve sur la 1ère page) -->
<li class="page-item <?= ($currentPage == 1) ? "disabled" : "" ?>">
<a href="index.php?direction=gestionFiche&page=<?= $currentPage - 1 ?>&selVisiteur=<?= $userId ?>"
class="page-link">Précédente</a>
</li>
<?php for ($page = 1; $page <= $pages; $page++): ?>
<!-- Lien vers chacune des pages (activé si on se trouve sur la page correspondante) -->
<li class="page-item <?= ($currentPage == $page) ? "active" : "" ?>">
<a href="index.php?direction=gestionFiche&page=<?= $page ?>&selVisiteur=<?= $userId ?>"
class="page-link">
<?= $page ?>
</a>
</li>
<?php endfor ?>
<!-- Lien vers la page suivante (désactivé si on se trouve sur la dernière page) -->
<li class="page-item <?= ($currentPage == $pages) ? "disabled" : "" ?>">
<a href="index.php?direction=gestionFiche&page=<?= $currentPage + 1 ?>&selVisiteur=<?= $userId ?>"
class="page-link">Suivante</a>
</li>
</ul>
</nav>
</div>
<?php
};
?>

30
vues/v_homePage.php Normal file
View File

@ -0,0 +1,30 @@
<h4 class="d-block mx-auto my-2 text-align-center">BONJOUR <?= strtoupper($_SESSION['uPrenom']) ?> NOUS SOMMES LE <?= date('d-m-Y') ?></h4>
<div class="card">
<div class="card-header">
Profil de l'utilisateur
</div>
<div class="card-body">
<div class="form-group">
<label for="type">Type:</label>
<input type="text" class="form-control" id="type" value="<?= $_SESSION['uType'] ?>" readonly>
</div>
<div class="form-group">
<label for="nom">Nom:</label>
<input type="text" class="form-control" id="nom" value="<?= $_SESSION['uPrenom'] ?>" readonly>
</div>
<div class="form-group">
<label for="prenom">Prénom:</label>
<input type="text" class="form-control" id="prenom" value="<?= $_SESSION['uNom'] ?>" readonly>
</div>
<div class="form-group">
<label for="secteur">Secteur:</label>
<input type="text" class="form-control" id="secteur" value="<?= $_SESSION['uLabo'] ?>" readonly>
</div>
<div class="form-group">
<label for="secteur">Adresse:</label>
<input type="text" class="form-control" id="secteur"
value="<?= $_SESSION['uAdresse'] . ' ' . $_SESSION['uCp'] . ' ' . $_SESSION['uVille'] ?>" readonly>
</div>
</div>
</div>

159
vues/v_newFiche.php Normal file
View File

@ -0,0 +1,159 @@
<center>
<h1>Fiche de frais</h1>
<br>
<p>Mois de
<?= $dateHeader ?>
</p>
<p class="color-grey" id='idFiche' data-id="<?= $userId . '-' . $date ?>">
ID:
<?= $userId . '-' . $date ?>
</p>
</center>
<br>
<!--
Liste des frais forfaitaires
-->
<h3 class="fw-bold offset-1">Frais forfaitaires</h3>
<div class="col-11 d-flex mx-auto my-3">
<table class="table table-striped-columns align-middle">
<thead class="table-dark">
<tr>
<th scope="col">Intitulé</th>
<th scope="col">Quantité</th>
<th scope="col">Montant</th>
<th scope="col">Total</th>
</tr>
</thead>
<tbody class="table-group-divider border-secondary-subtle">
<?php
foreach ($listeFraisForfaitaire as $key => $value):
?>
<tr data-id="<?= $value['fId'] ?>" class="fraisForfaitaire">
<th scope="row">
<?= $value['fLibelle'] ?>
</th>
<td>
<input type="text" name="fraisForfait" class="form-control frsFrt" id="<?= $key ?>"
value="<?= $value['lfQuantite'] ?>" <?= $disabled ?>>
</td>
<td id="mttFrs-<?= $key ?>" data-price="<?= $value['fMontant'] ?>">
<?= $value['fMontant'] ?> €
</td>
<td class="mttFrsTotal" id="totalFrs-<?= $key ?>">
<?= $value['fTotal'] ?>€
</td>
</tr>
<?php
endforeach;
?>
<tr>
<td colspan="3" class="border-0"></td>
<td class="prixTotalFrsF table-primary"></td>
</tr>
</tbody>
</table>
</div>
<span class="border-3 border-bottom border-black col-10 mx-auto my-5 d-flex"></span>
<!--
Listes des frais Hors Forfaits
-->
<h3 class="fw-bold offset-1">Hors forfait</h3>
<div class="col-11 d-flex mx-auto my-3">
<table class="table table-striped-columns align-middle">
<thead class="table-dark">
<tr>
<th>Date</th>
<th>Libelle</th>
<th>Montant</th>
<th>Justificatif</th>
<th>Valider</th>
</tr>
</thead>
<tbody class="table-group-divider border-secondary-subtle fraisHFGroup">
<?php
foreach ($listeFraisHf as $key => $value):
?>
<tr id="fraisHf-<?= $key ?>" data-id="<?= $value['lhId'] ?>"
class="fraisHF <?= $value['lhRefus'] == 1 ? 'table-danger' : '' ?>" data-id="<?= $value['lhId'] ?>">
<th scope="row" id="dateFrsHF">
<?= $value['lhDate'] ?>
</th>
<td id="LibelleFrsHF">
<?= $value['lhLibelle'] ?>
</td>
<td id="MttFrsHF">
<?= $value['lhMontant'] ?> €
</td>
<td>
<?php
?>
<?= $value['lhJustificatif'] == 1 ? 'ok' : 'non fournis' ?>
</td>
<td>
<?php
if ($typeUser === 'comptable') { ?>
<button type="button" class="btn btn-outline-primary btnRefuseFraisHf"
data-status="<?= $value['lhRefus'] | 0 ?>" id="frsSup-<?= $key ?>" <?= $disabled ?>>
<?= ($value['lhRefus']) ? 'Accepter' : 'Refuser' ?>
</button>
<?php } elseif ($typeUser === 'visiteur') { ?>
<button type="button" class="btn btn-outline-primary btnSuprFraisHf" id="frsSup-<?= $key ?>"
<?= $disabled ?>>
Supprimer
</button>
<?php } ?>
</td>
</tr>
<?php
endforeach;
?>
<!--
Formulaire d'ajout de frais HF
-->
<?php
if ($disabled !== 'disabled' && $typeUser !== 'comptable'):
?>
<tr class="newFraisForm">
<td>
<!-- Date form -->
<input name="dateHf" class="form-control" id="dateHf" type="date" min="<?= $dateFormHFMin ?>"
max="<?= $dateFormHFMax ?>">
</td>
<td><input type="text" name="libelleHf" id="libelleHf" class="form-control"
placeholder="saisir un titre"></td>
<td><input type="text" name="mttHf" id="mttHf" class="form-control" placeholder="Saisir un Montant">
</td>
<td><input type="file" class="form-control"></td>
<td><button type="button" class="btn btn-outline-primary validFraisHF">Valider</button></td>
</tr>
<?php endif ?>
<tr>
<td colspan="2" class="border-0"></td>
<td class="table-primary" id="total-frais-HF">TOTAL: 0€</td>
</tr>
</tbody>
</table>
</div>
<!-- TOTAL -->
<div style="position:fixed; bottom:5px; right:5px; margin:0; padding:5px 3px;">
<button type="button" class="btn btn-primary" id="total-fiche">
<strong>TOTAL : </strong>
<?= $totalFraisFiche ?>
</button>
</div>
<?php
/**
* Affiche le bouton si fiche non cloturé
*/
if ($status === 'CR'):
?>
<div class="col-3 d-flex mx-auto my-5 justify-content-center">
<button type="button" class="btn btn-outline-primary btn-lg" id="sendFileBtn" data-uType="<?= $typeUser ?>">Envoyer
la Fiche
</button>
</div>
<?php endif ?>
<script src="include/newFiche.js"></script>
<!-- <script src="../include/newFiche.js"></script> -->

View File

@ -1,7 +0,0 @@
<!-- Division pour le pied de page -->
<div>
<hr /><p style="text-align:center;"><img src="images/castel.png" style="vertical-align: middle;"><?php echo "Lyc&eacute;e Le Castel &agrave; Dijon - BTS SIO - <img src='images/copyleft.png' style='text-align: center; vertical-align: middle;'> 03/05/2023 Blain Pascal";?></p>
</div>
</body>
</html>

View File

@ -1,60 +0,0 @@
<!-- Derniere modification le 03/05/2023 à 11H01 à 15H11 -->
<div id="contenu">
<?php
if ($_REQUEST['action']=="supprimer")
{echo '<h2>SUPPRESSION D\'UN FRAIS FORFAITAIRE</h2>';
echo '<form name="unFraisForfaitaire" action="index.php?uc=gererFraisForfaitaire&action=validerSupprimer&forfait='.$unForfait['lfForfait'].'" method="POST">';}
else
{echo '<h2>EDITION D\'UN FRAIS FORFAITAIRE</h2>';
echo '<form name="unFraisForfaitaire" action="index.php?uc=gererFraisForfaitaire&action=validerModifier&forfait='.$unForfait['lfForfait'].'" method="POST">';}
?>
<table class="listeLegere">
<thead>
<tr>
<th class="date">Quantit&eacute;</th>
<th class="eltForfait">Nature de la d&eacute;pense</th>
<th class="montant">Prix</th>
<th class="montant">Montant</th>
</tr>
</thead>
<tbody>
<tr>
<td><input type="text" name="zQte" onkeyup="calculer()" style="text-align:right;border: 0;" value="<?php echo $unForfait['lfQuantite'].'"';if ($_REQUEST['action']=="supprimer") {echo ' disabled';}?>>
<input type="hidden" name="zMois" value="<?php echo $leMois; ?>"></td>
<td><input type="text" name="zForfait" value="<?php echo $unForfait['fLibelle']; ?>" style="text-align:left;border: 0;" disabled></td>
<td><input type="text" name="zPrix" value="<?php echo number_format($unForfait['lfMontant'],2,',','.'); ?>" style="text-align:right;border: 0;" disabled></td>
<td><input type="text" name="zMontant" value="<?php echo number_format($unForfait['lfQuantite']*$unForfait['lfMontant'],2,',','.'); ?>" style="text-align:right;border: 0;" disabled></td>
</tr>
</tbody>
</table>
<p align="right"><input type="image" id="zValider" alt="Oui" src="images/valider.jpg" onclick="valider()"><input type="image" name="zAnnuler" alt="Non" src="images/annuler.jpg" onclick="annuler()"></p>
</form>
</div>
<script src="include/proceduresJava.js" type="text/javascript"></script>
<script type="text/javascript">
function calculer()
{
if (!isNaN(document.unFraisForfaitaire.zQte.value)) {document.unFraisForfaitaire.zMontant.value=(parseFloat(document.unFraisForfaitaire.zPrix.value)*parseInt(document.unFraisForfaitaire.zQte.value))};
}
function valider()
{
document.unFraisForfaitaire.zQte.disabled=false;
document.unFraisForfaitaire.submit();
}
function annuler()
{
document.unFraisForfaitaire.zQte.disabled=false;
document.unFraisForfaitaire.zQte.value=0;
document.unFraisForfaitaire.submit();
}
window.onload = function() { calculer(); };
</script>

View File

@ -1,55 +0,0 @@
<!-- Derniere modification le 03/05/2023 à 11H01 -->
<div id="contenu">
<?php
if ($_REQUEST['action']=="supprimer")
{echo '<h2>SUPPRESSION D\'UN FRAIS HORS FORFAIT</h2>';
echo '
<form name="unFraisHorsForfait" action="index.php?uc=gererFraisHorsForfait&action=validerSupprimer&idFrais='.$unFrais['lhId'].'" method="POST">';}
else
{echo '<h2>EDITION D\'UN FRAIS HORS FORFAIT</h2>';
echo '
<form name="unFraisHorsForfait" action="index.php?uc=gererFraisHorsForfait&action=validerModifier&idFrais='.$unFrais['lhId'].'" method="POST">';}
?>
<table class="listeLegere">
<thead>
<tr>
<th class="date">Date</th>
<th class="eltForfait">Nature de la d&eacute;pense</th>
<th class="montant">Montant</th>
</tr>
</thead>
<tbody>
<tr>
<!-- insérer ici votre code -->
</tr>
</tbody>
</table>
<p align="right">
<?php if ($_REQUEST['action']=="supprimer" and $_SESSION['statut']!="1") {echo '
Si vous confirmez votre choix, la d&eacute;pense invalid&eacute;e sera marqu&eacute;e "REFUSEE")';} ?>
<input type="image" id="zValider" alt="Oui" src="images/valider.jpg" onclick="valider()">
<input type="image" name="zAnnuler" alt="Non" src="images/annuler.jpg" onclick="annuler()">
</p>
</form>
</div>
<script type="text/javascript">
function valider()
{
document.unFraisHorsForfait.zMontant.disabled=false;
document.unFraisHorsForfait.zLibelle.disabled=false;
document.unFraisHorsForfait.submit();
}
function annuler()
{
document.unFraisHorsForfait.zMontant.disabled=false;
document.unFraisHorsForfait.zMontant.value=0;
document.unFraisHorsForfait.submit();
}
</script>
<!-- fin -->