Compare commits

...

38 Commits

Author SHA1 Message Date
pierre renaudot
06f4c05ad1 r 2024-02-01 11:12:27 +01:00
pierre renaudot
9eac39ad5e Merge branch 'main' of https://gitea.lyc-lecastel.fr/pierre.renaudot/AP44 2024-02-01 11:01:18 +01:00
0970030669 commentaire code + maj clic bouton GSB 2024-02-01 11:02:01 +01:00
pierre renaudot
9d9b7bf38c PSR et commentaires 2024-02-01 11:01:11 +01:00
pierre renaudot
1a7e420d20 valider fiche pour un comptable 2024-02-01 09:22:43 +01:00
1acc68b01b correctif pagination, disabled et maj remboursement 2024-01-29 14:12:57 +01:00
5fccd17767 correctif pagination, disabled et maj remboursement 2024-01-29 14:11:01 +01:00
pierre renaudot
2819759da7 Function de validation des fiches et reversement des frais HF 2024-01-29 14:06:39 +01:00
e4574d7ff4 derniers details 2024-01-18 11:57:40 +01:00
pierre renaudot
db1c54c442 Merge branch 'main' of https://gitea.lyc-lecastel.fr/pierre.renaudot/AP44 2024-01-18 10:27:19 +01:00
pierre renaudot
0859a68948 r 2024-01-18 10:27:01 +01:00
77d482c5dc Merge branch 'main' of https://gitea.lyc-lecastel.fr/pierre.renaudot/AP44 2024-01-18 10:24:13 +01:00
1a78fb2726 bug 2024-01-18 10:23:49 +01:00
pierre renaudot
865134080e reglage bug 2024-01-18 10:20:48 +01:00
pierre renaudot
6d57767987 corec bug 2024-01-12 11:16:29 +01:00
pierre renaudot
2438e20db2 Merge branch 'main' of https://gitea.lyc-lecastel.fr/pierre.renaudot/AP44 2024-01-12 11:12:38 +01:00
pierre renaudot
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
pierre renaudot
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
pierre renaudot
a2201a4eb3 Merge branch 'main' of https://gitea.lyc-lecastel.fr/pierre.renaudot/AP44 2024-01-11 09:14:14 +01:00
pierre renaudot
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
pierre renaudot
aa49401a47 bug correction 2024-01-09 10:52:03 +01:00
Pierr0
fcf292e823 correction bugs page newFiche 2024-01-07 16:26:43 +01:00
Pierr0
df7599ab9b mise à jour de la bdd pour les fiches de frais et suppression des hors forfait 2024-01-05 22:36:58 +01:00
Pierr0
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
Pierr0
9f245f6578 page de connexion fonctionnelle avec bdd 2024-01-02 17:42:42 +01:00
Pierr0
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
Pierr0
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
pierre renaudot
fa1bacb404 Merge branch 'main' of https://gitea.lyc-lecastel.fr/pierre.renaudot/AP44 2023-12-21 11:56:47 +01:00
pierre renaudot
5b5e5cc28e liste des fraisForfaitaires 2023-12-21 11:54:30 +01:00
40 changed files with 1388 additions and 2439 deletions

View File

@ -3,19 +3,103 @@
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();
}
/**
* Récupère tous les utilisateurs différents de 0
*/
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();
$result->execute();
return $result->fetchAll();
}
}
//Mode d'affichage de la date
public function dateComplete(string $date): string
{
return substr($date, 0, 4) . '-' . substr($date, 4);
}
/**
* Récupère les fiches a valider par le comptable et sépare les fiches de 12 en 12
*/
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();
}
/**
* Récupère toutes les fiches a valider avec comme état "CL"
*/
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'];
}
/**
* Récupère toutes les fiches remboursées
*/
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'];
}
/**
* Récupère le nombre de page a afficher en fonction du nombre de remboursement et du décallage de 12 en 12
*/
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 "rMois" 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);
}
}

View File

@ -1,37 +1,235 @@
<?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)
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", "fMontant" FROM forfait';
$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();
}
public function endInter(string $id)
/**
* Liste les frais Forfetaires d'un user pour 1 mois
*/
public function listFraisForfaitForU(): array
{
$req = "UPDATE intervention
SET iHeureFin = NOW()
WHERE iCis = :cis AND iId = :idInter AND iHeureFin IS NULL";
$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;';
$cis = explode('-', $id)[0];
$idInter = explode('-', $id)[1];
$result = PdoBD::$monPdo->prepare($req);
$result->bindParam(':cis', $cis);
$result->bindParam(':idInter', $idInter);
$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(): array
{
$req = 'SELECT etat."eId" , etat."eLibelle"
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();
}
/**
* UPDATE LES INFOS DE LA FICHE
*/
public function updateRemboursement(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();
}
/**
* Passe la
*/
public function validSheet(): bool
{
$req = 'UPDATE remboursement
SET "rEtat" = \'RB\'
WHERE "rVisiteur" = :visiteur AND "rMois" = :mois;
';
$result = $this->pdo->prepare($req);
$result->bindParam('visiteur', $this->userId);
$result->bindParam('mois', $this->month);
return $result->execute();
}
}

View File

@ -1,5 +1,7 @@
<?php
/**
* Class PDO qui gère la base de donnée
*/
class PdoGsb
{
private static $serveur = 'pgsql:host=localhost';
@ -15,8 +17,6 @@ class PdoGsb
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()
{

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

@ -0,0 +1,55 @@
<?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();
$result = $result->fetch();
if ($result['pLibelle'] == 'comptable') {
$this->updateBdd();
}
return $result;
}
/**
* Update les lignes remboursement de la bdd a la connexion du comptable
*/
public function updateBdd(): void
{
$curMonth = date('Ym');
$prevMonth = DateTime::createFromFormat('Ym', $curMonth);
$prevMonth->modify('first day of last month');
$prevMonth = $prevMonth->format('Ym');
$req = 'SELECT updateEtat(:currentMonth, :previousMonth)';
$result = $this->pdo->prepare($req);
$result->bindParam('currentMonth', $curMonth);
$result->bindParam('previousMonth', $prevMonth);
$result->execute();
}
}

View File

@ -0,0 +1,72 @@
<?php
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':
$mttValid = 0;
//FRAIS FORFAITAIRES
foreach ($_REQUEST['fraisF'] as $value) {
$mttValid = $mttValid + $value['montant'];
$pdoNewFiche->updateFraisF(
$value['quantité'],
intval($value['montant']),
$value['id']
);
}
//FRAIS HORS FORFAIT
$nbJustif = 0;
foreach ($_REQUEST['fraisHF'] as $value) {
//SI le fraisHf ne possède pas d'id de la bdd
if ($value['id'] == NULL) {
$mttValid = $mttValid + $value['montant'];
$nbJustif = $nbJustif + 1;
$pdoNewFiche->addFraisHF(
$value['libelle'],
$value['date'],
$value['montant']
);
}
}
//mise a jour de la fiche remboursement
$pdoNewFiche->updateRemboursement($nbJustif, $mttValid);
break;
case 'valid':
$mttValid = 0;
//FRAIS FORFAITAIRES
foreach ($_REQUEST['fraisF'] as $value) {
$mttValid = $mttValid + $value['montant'];
$pdoNewFiche->updateFraisF(
$value['quantité'],
intval($value['montant']),
$value['id']
);
}
$nbJustif = $_REQUEST['nbJustif'];
//mise a jour de la fiche remboursement
$pdoNewFiche->updateRemboursement($nbJustif, $mttValid);
$pdoNewFiche->validSheet();
break;
case 'suprFraisHF':
$pdoNewFiche->suprLigneHF($_GET['idFrais']);
$pdoNewFiche->updateRemboursement($_GET['$nbJustif'], $_GET['mttValid']);
break;
case 'refusFraisHF':
$pdoNewFiche->accceptFrais(
$_GET['idFrais'],
boolval($_GET['state'])
);
break;
default:
# code...
break;
}

View File

@ -1,64 +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 '
//****************************************'
header('location: index.php?direction=home');
require_once(__DIR__ . '/../Class/class.user.php');
if (!isset($_REQUEST['action'])) {
$_REQUEST['action'] = 'demandeConnexion';
$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,27 @@
<?php
require_once(__DIR__ . '/../Class/class.gestionFiche.php');
$gestionFiche = new Class_gestionFiche($pdo);
$LesUtilisateurs = $gestionFiche->getLesUtilisateurs(); //RENVOIE LISTE USERS
if ($_SESSION["uType"] == "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 à 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 à 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 à 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 à 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 à 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 à 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

@ -1,9 +1,30 @@
<?php
require_once(__DIR__ . '/../Class/class.gestionFiche.php');
$gestionFiche = new Class_gestionFiche($pdo);
$typeU = $_SESSION['uType'];
$gestionFiche = new Class_gestionFiche($pdo);
$LesUtilisateurs = $gestionFiche->getLesUtilisateurs(); //RENVOIE LISTE USERS
$_SESSION['typeU'] = 'comptable';
include("../vues/v_gestionFiches.php");
// 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

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

View File

@ -1,9 +1,89 @@
<?php
/**
* sudo date --set "YYYY-MM-DD HH:MM:SS"
*/
require_once(__DIR__ . '/../Class/class.newFiche.php');
$newFiche = new Class_newFiche($pdo);
$liste = $newFiche->listFraisForfaitaires();
$typeUser = $_SESSION['uType']; //visiteur ou comptable
$userId = $_SESSION['uId']; //exemple: 'b34'
var_dump($liste);
/**
* 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 nourir 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';
// retourne le dernier jour du mois (30 ou 31)
$dateFormHFMax = date("Y-m-t", mktime(0, 0, 0, date('m', $dateTimeStamp), 1, date('Y', $dateTimeStamp)));
}
//Date du header en français
try {
$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();
if (
($status['eId'] == 'CL' && $typeUser == 'comptable')
|| ($status['eId'] == 'CR' && $typeUser == 'visiteur')
) {
$disabled = '';
} else {
$disabled = 'disabled';
}
include(__DIR__ . '/../vues/v_newFiche.php');

View File

@ -1,149 +0,0 @@
http://www.toutjavascript.com/savoir/savoir06_2.php3
En javascript, la concaténation se fait avec le caractère plus (+) ou bien grace à la méthode concat().
Dans les deux exemples ci-dessous, la variable chaîne 3 contient la chaîne "Bonjour tout le monde" :
var chaine1 = "Bonjour ";
var chaine2 = "tout le monde";
var chaine3 = chaine1+chaine2;
L'exemple ci-dessus est équivalent à l'exemple suivant :
var chaine1 = "Bonjour ";
var chaine2 = "tout le monde";
var chaine3 = chaine1.concat(chaine2);
---------------------------------------------------------
indexOf: Retourne la position d'une sous-chaîne (lettre ou groupe de lettres) dans une chaîne de caractère, en effectuant la recherche de gauche à droite, à partir de la position spécifiée en paramètre. Retourne -1 si la sous-chaîne n'est pas trouvée dans la chaîne principale.
var Chaine = 'Comment ç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érer l'indice la ligne sélectionnée :
this.form.elements['liste'].selectedIndex
Pour récupérer le nombre de lignes :
this.form.elements['liste'].options.length
Pour récupérer la valeur de la ligne sélectionnée :
this.form.elements['liste'].options[this.form.elements['liste'].selectedIndex].value
En JavaScript, la structure d'un élément de type SELECT reprend ce schéma :
name Nom de la liste
selectedIndex Indice de la ligne sélectionnée (ligne 1 : indice=0)
options Tableau des lignes
length Nombre de lignes
value Valeur d'une ligne
text Libellé 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âce à this.form, on peut accéder au formulaire de l'élément en cours.
---------------------------------------------------------
Pour donner le focus au champ texte du haut de cette page, il faut appeler la méthode focus() sur cet élément.
document.forms["general"].elements["champ1"].focus()
Pour donner le focus à un champ de formulaire à 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érieur ou égal à y.
Attention ! Cette fonction n'arrondit pas le nombre.
Comme montré dans l'exemple, si y = 1.01, la valeur de x sera mise à 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érieur ou égal à y.
Attention ! Cette fonction n'arrondit pas le nombre.
Comme montré dans l'exemple, si y = 1.99, la valeur de x sera mise à 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 à 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écision. Pour avoir deux décimales aprè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,75 +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>
<a href="http://localhost:2080/gsb/AP44/index.php?direction=home" class="d-flex align-items-center pb-3 mb-md-0 me-md-auto text-white text-decoration-none">
<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">Déconnexion</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">
<i class="fs-4 bi-house"></i> <span class="ms-1 d-none d-sm-inline">Home</span>
<i class="fs-4 bi-house"></i> <span class="ms-1 d-none d-sm-inline">Accueil</span>
</a>
</li>
<!--
Partie visiteur
-->
<?php
if($_SESSION['typeU'] == '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="../controleurs/c_gestionFiche.php" 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" 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>
<?php endif; if ($_SESSION['typeU'] == 'comptable'): ?>
<!--
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="../controleurs/c_gestionFiche.php" 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">gestion des fiches</span>
</a>
</li>
<li>
<a href="index.php?direction=ficheAvalider" class="nav-link px-0"> <span
class="d-none d-sm-inline">fiches à valider</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>
</div>

250
include/newFiche.js Normal file
View File

@ -0,0 +1,250 @@
$(document).ready(function () {
calcPrixTotalFrsF();
calcPrixTotalFrsHorsF();
updatePrixTotal();
/**
* Partie enregistrement frais F
*/
$('.frsFrt').on('change', function (e) {
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')
//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();
})
})
/**
* Partie Validation fiche par le comptable
*/
$(document).on('click', '#validSheetBtn', 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);
})
nbFraisHf = $('tr.fraisHF').length
data = {
fraisF: listeFraisF,
nbJustif: nbFraisHf,
mttFrsHf: mttFrsHf
}
fiche = $('#idFiche').attr('data-id')
$.ajax({
url: "controleurs/c_actionFiche.php?action=valid&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() {
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,100 +0,0 @@
if(document.images) /* PRECHARGEMENT DE L IMAGE DANS LE CACHE DU NAVIGATEUR */
{
zTous = new Image;
zTous = "images/cocheR.gif";
}
function format_euro(valeur)
{
// formate un nombre avec 2 chiffres après la virgule et un espace separateur de milliers
var ndecimal=2;
var separateur=' ';
var deci=Math.round( Math.pow(10,ndecimal)*(Math.abs(valeur)-Math.floor(Math.abs(valeur)))) ;
var val=Math.floor(Math.abs(valeur));
if ((ndecimal==0)||(deci==Math.pow(10,ndecimal))) {val=Math.floor(Math.abs(valeur)); deci=0;}
var val_format=val+"";
var nb=val_format.length;
for (var i=1;i<4;i++)
{
if (val>=Math.pow(10,(3*i)))
{
val_format=val_format.substring(0,nb-(3*i))+separateur+val_format.substring(nb-(3*i));
}
}
if (ndecimal>0)
{
var decim="";
for (var j=0;j<(ndecimal-deci.toString().length);j++) {decim+="0";}
deci=decim+deci.toString();
val_format=val_format+","+deci;
}
if (parseFloat(valeur)<0) {val_format="-"+val_format;}
return val_format;
}
// ========================= fonctions de navigation dans les listes (mois/visiteurs)
function premier(statut)
{
if (statut=='V') {
document.choixM.lstMois.value = document.choixM.lstMois.options[0].value;
document.choixM.submit();}
else {
document.choixV.lstVisiteurs.value = document.choixV.lstVisiteurs.options[0].value;
document.choixV.submit();}
}
function precedent(statut)
{
if (statut=='V') {
document.choixM.lstMois.value = document.choixM.lstMois.options[Math.max(0,document.choixM.lstMois.selectedIndex-1)].value;
document.choixM.submit(statut);}
else {
document.choixV.lstVisiteurs.value = document.choixV.lstVisiteurs.options[Math.max(0,document.choixV.lstVisiteurs.selectedIndex-1)].value;
document.choixV.submit();}
}
function suivant(statut)
{
if (statut=='V') {
document.choixM.lstMois.value = document.choixM.lstMois.options[(Math.min((document.choixM.lstMois.options.length-1),document.choixM.lstMois.selectedIndex+1))].value;
document.choixM.submit();}
else {
document.choixV.lstVisiteurs.value = document.choixV.lstVisiteurs.options[(Math.min((document.choixV.lstVisiteurs.options.length-1),document.choixV.lstVisiteurs.selectedIndex+1))].value;
document.choixV.submit();}
}
function dernier(statut)
{
if (statut=='V') {
document.choixM.lstMois.value = document.choixM.lstMois.options[(document.choixM.lstMois.options.length-1)].value;
document.choixM.submit();}
else {
document.choixV.lstVisiteurs.value = document.choixV.lstVisiteurs.options[(document.choixV.lstVisiteurs.options.length-1)].value;
document.choixV.submit();}
}
// ========================= acivation/desactivation des cases a cocher "justificatifs" pour les frais hors forfaits
function tousLesJustificatifs(frm)
{
inputs = frm.getElementsByTagName("input");
var sens = frm.zSens.value;
for(i=0 ; i<inputs.length ; i++)
{
if(inputs[i].type=="checkbox")
{
if (sens=="off") {inputs[i].checked = true;} else {inputs[i].checked = false;};
}
}
if (sens=="off") {frm.zSens.value="on";} else {frm.zSens.value="off";}
}
function tousLesJustificatifs2(frm)
{
var sens = frm.zSens.value;
for (i = 0; i < frm.justificatifs.length; i++)
{
if (sens=="off") {frm.justificatifs[i].checked = true;} else {frm.justificatifs[i].checked = false;};
}
if (sens=="off") {frm.zSens.value="on";} else {frm.zSens.value="off";}
}

View File

@ -1,32 +1,22 @@
<?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("Class/class.pdo.php");
$pdo = new PdoGsb();
//$estConnecte = estConnecte();
$_SESSION['typeU'] = 'visiteur';
/*
if (!isset($_SESSION['userId'])) {
$_REQUEST['direction'] = 'connexion';
}
*/
if (!isset($_REQUEST['direction'])) {
/**
* 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">
@ -37,13 +27,19 @@ if (!isset($_REQUEST['direction'])) {
<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');
if (!isset($_SESSION['uId'])) {
$_REQUEST['direction'] = 'connexion';
} else {
include('include/menu.php');
}
?>
<div class="col py-3">
<?php
@ -53,7 +49,7 @@ if (!isset($_REQUEST['direction'])) {
break;
case 'gestionFiche':
include("controleurs/c_gestionFiche.php");
include(__DIR__ . "/controleurs/c_gestionFiche.php");
break;
case 'home':
@ -64,6 +60,10 @@ if (!isset($_REQUEST['direction'])) {
include(__DIR__ . "/controleurs/c_nouvelleFiche.php");
break;
case 'ficheAvalider':
include(__DIR__ . "/controleurs/c_ficheAvalider.php");
break;
default:
include("controleurs/c_homePage.php");
break;

112
sqlFunction.sql Normal file
View File

@ -0,0 +1,112 @@
--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';
--Fonction pour passer les fiches de "créé" à "saisi cloturé" ET passe les frais HF sur la fiche suivante
--dateN -> '202403'
CREATE OR REPLACE FUNCTION updateEtat(curMonth varchar(6), prevMonth varchar(6)) RETURNS bool AS $$
DECLARE
"listeVisiteur" RECORD;
curMontantValid FLOAT;
oldMontantValid FLOAT;
BEGIN
--Update les fiches Créées en cloturé si la date est inf au mois courant
UPDATE remboursement
SET "rEtat" = 'CL'
WHERE "rEtat" = 'CR' AND "rMois" < curMonth;
--Crée une Fiche pour tous les visiteurs qui n'ont pas de fiches mais dont les frais HF doivent être reportés
FOR "listeVisiteur" IN
SELECT "rVisiteur", SUM("lhMontant") as "montant" FROM remboursement
INNER JOIN ligne_hors_forfait ON "rVisiteur" = "lhVisiteur" AND "rMois" = "lhMois"
WHERE "rMois" <= curMonth AND "rEtat" = 'CL' AND "lhJustificatif" = FALSE AND "lhRefus" = FALSE
GROUP BY "rVisiteur"
LOOP
--Crée la demande si elle n'existe pas
PERFORM newRemboursement("listeVisiteur"."rVisiteur", curMonth);
--RECUP l'ancien montant
SELECT "rMontantValide" INTO curMontantValid
FROM remboursement
WHERE "rVisiteur" = "listeVisiteur"."rVisiteur" AND "rMois" = curMonth;
SELECT "rMontantValide" INTO oldMontantValid
FROM remboursement
WHERE "rVisiteur" = "listeVisiteur"."rVisiteur" AND "rMois" = prevMonth;
--Actualise les montants totaux de remboursement
UPDATE remboursement
SET "rMontantValide" = curMontantValid + "listeVisiteur"."montant"
WHERE "rVisiteur" = "listeVisiteur"."rVisiteur" AND "rMois" = curMonth;
UPDATE remboursement
SET "rMontantValide" = oldMontantValid - "listeVisiteur"."montant"
WHERE "rVisiteur" = "listeVisiteur"."rVisiteur" AND "rMois" = prevMonth;
END LOOP;
--Passe les lignes HF non validé avec justif
UPDATE ligne_hors_forfait
SET "lhMois" = curMonth
WHERE "lhMois" <= prevMonth AND "lhJustificatif" = FALSE AND "lhRefus" = FALSE;
--Passe le remboursement en validé
UPDATE remboursement
SET "rEtat" = 'VA'
WHERE "rEtat" = 'CL' AND "rMois" < prevMonth;
--UPDATE les 'vlaidée et mise en paiement en remboursé
UPDATE remboursement
SET "rEtat" = 'RB'
WHERE "rEtat" = "VA" AND 'rMois' > prevMonth;
RETURN true;
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ère modification le 03/05/2023 à 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,22 +1,46 @@
<!-- 03/05/2023 à 11H01 -->
<div id="contenu">
<h2>Identification utilisateur</h2>
<!--
Page formulaire de connexion
-->
<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">
<form method="POST" action="index.php?uc=connexion&action=valideConnexion">
<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>
<input type="submit" value="Valider" name="valider">
<input type="reset" value="Annuler" name="annuler">
</p>
</form>
<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>
<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>
<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>

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,10 +0,0 @@
<div class ="erreur">
<ul>
<?php
foreach($_REQUEST['erreurs'] as $erreur)
{
echo "<li>$erreur</li>";
}
?>
</ul>
</div>

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

65
vues/v_fichesAvalider.php Normal file
View File

@ -0,0 +1,65 @@
<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=<?= $uneFiche['rVisiteur'] ?>&dateListing=<?= $uneFiche['rMois'] ?>">voir</a>
</td>
</tr>
<?php endforeach ?>
</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 endif; ?>

View File

@ -1,13 +1,32 @@
<center>
<div class="col-3 mb-4">
<h3>Gerer mes fiches de frais</h3>
<br>
<?php
if ($_SESSION['typeU'] == 'comptable') {
echo '<select class="form-select" name="selVisiteur" id="">
<option value="visiteur1">Visiteur 1</option></select>';
}
?>
if ($typeU != 'comptable') {
echo '<h3>Gérer mes fiches de frais</h3>';
} else { ?>
<form action="index.php?direction=gestionFiche" method="POST">
<h3>Gérer les fiches de frais de :</h3>
<select class="form-select" name="selVisiteur" id="">
<?php
foreach ($LesUtilisateurs as $key => $value) {
$id = $value['uId'];
$prenom = $value['uPrenom'];
$nom = $value['uNom'];
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>
@ -23,41 +42,54 @@
</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>
<?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 endforeach ?>
</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>
<!--
PAGINATION:
-->
<?php if ($pages > 1): ?>
<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 endif ?>

View File

@ -1 +1,33 @@
<h4>BONJOUR VOUS ETES COMPTABLE</h4>
<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>

View File

@ -1,9 +1,23 @@
<center>
<h1>Nouvelle Fiche de frais</h1>
<h1>Fiche de frais</h1>
<br>
<p>Mois de Novembre 2023</p>
<p>Mois de
<?= $dateHeader ?>
</p>
<p class="color-grey" id='idFiche' data-id="<?= $userId . '-' . $date ?>">
ID:
<?= $userId . '-' . $date ?>
</p>
<p class="color-grey" id='idFiche'>
Status:
<?= $status['eLibelle'] ?>
</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">
@ -16,17 +30,39 @@
</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>
<th scope="row">Hotel</th>
<td><input type="text" class="form-control"></td>
<td>20 </td>
<td>400</td>
<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">
@ -39,31 +75,99 @@
<th>Valider</th>
</tr>
</thead>
<tbody class="table-group-divider border-secondary-subtle">
<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 scope="row">23/12/2023</td>
<td>Salle de réunion</td>
<td>130 </td>
<td>facture.pdf</td>
<td><button type="button" class="btn btn-outline-primary">Supprimer</button></td>
</tr>
<tr>
<td scope="row"><input class="form-control" type="date"></td>
<td><input type="text" class="form-control" placeholder="saisir un titre"></td>
<td><input type="text" 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">Valider</button></td>
<td colspan="2" class="border-0"></td>
<td class="table-primary" id="total-frais-HF">TOTAL: 0</td>
</tr>
</tbody>
</table>
</div>
<span class="border-3 border-bottom border-black col-10 mx-auto my-5 d-flex"></span>
<h3 class="fw-bold offset-1">Commentaire (facultatif)</h3>
<div class="col-8 d-flex mx-auto">
<textarea name="commentaireFiche" id="commentaireFiche" class="form-control border-black"></textarea>
<!-- 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>
<div class="col-3 d-flex mx-auto my-5 justify-content-center">
<button type="button" class="btn btn-outline-primary">Envoyer la Fiche</button>
</div>
<?php
/**
* Affiche le bouton si fiche non cloturé
*/
if ($disabled == ''):
?>
<div class="col-3 d-flex mx-auto my-5 justify-content-center">
<?php
if ($typeUser == 'comptable' && $status['eId'] == 'CL'): ?>
<button type="button" class="btn btn-outline-primary btn-lg" id="validSheetBtn"
data-uType="<?= $typeUser ?>">Valider
la Fiche
</button>
<?php else: ?>
<button type="button" class="btn btn-outline-primary btn-lg" id="sendFileBtn" data-uType="<?= $typeUser ?>">Envoyer
la Fiche
</button>
<?php endif ?>
</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 -->