Compare commits
No commits in common. "main" and "v0.0.1.g-pr" have entirely different histories.
main
...
v0.0.1.g-p
@ -3,103 +3,24 @@
|
|||||||
class Class_gestionFiche
|
class Class_gestionFiche
|
||||||
{
|
{
|
||||||
private $pdo = null;
|
private $pdo = null;
|
||||||
public static $NB_LIGNES_PAGINATION = 12;
|
|
||||||
public static $NB_LIGNES_FICHEAVALIDER = 15;
|
|
||||||
|
|
||||||
|
|
||||||
public function __construct(PdoGsb $pDO)
|
public function __construct(PdoGsb $pDO)
|
||||||
{
|
{
|
||||||
$this->pdo = $pDO->getPdoGsb();
|
$this->pdo = $pDO->getPdoGsb();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Récupère tous les utilisateurs différents de 0
|
|
||||||
*/
|
|
||||||
public function getLesUtilisateurs(): array
|
public function getLesUtilisateurs(): array
|
||||||
{
|
{
|
||||||
$req = 'SELECT "uId", "uNom", "uPrenom" FROM utilisateur WHERE "uStatut"!=0 ORDER BY "uNom" ASC;';
|
$req = 'SELECT "uId", "uNom", "uPrenom" FROM utilisateur WHERE "uStatut"!=0 ORDER BY "uNom" ASC;';
|
||||||
$result = $this->pdo->prepare($req);
|
$result = $this->pdo->prepare($req);
|
||||||
$result->execute();
|
$result ->execute();
|
||||||
|
|
||||||
return $result->fetchAll();
|
return $result->fetchAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
//Mode d'affichage de la date
|
public function utilisateur(string $idUtilisateur): array
|
||||||
public function dateComplete(string $date): string
|
|
||||||
{
|
{
|
||||||
return substr($date, 0, 4) . '-' . substr($date, 4);
|
$req = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
}
|
||||||
* 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);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,12 +1,9 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
|
||||||
* OBJECT QUI GERE LA PARTIE AFFICHAGE ET MODIFICATION D'UNE FICHE
|
|
||||||
*/
|
|
||||||
|
|
||||||
class Class_newFiche
|
class Class_newFiche
|
||||||
{
|
{
|
||||||
private $pdo = null;
|
private $pdo = null;
|
||||||
|
|
||||||
private $month;
|
private $month;
|
||||||
private $userId;
|
private $userId;
|
||||||
|
|
||||||
@ -20,8 +17,7 @@ class Class_newFiche
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test et ajoute la fiche si elle n'existe pas dans remboursement
|
* Test et ajoute la fiche si elle n'existe pas
|
||||||
* et les ligneForfaitaires nulles liées
|
|
||||||
*/
|
*/
|
||||||
private function existingFile(): void
|
private function existingFile(): void
|
||||||
{
|
{
|
||||||
@ -69,7 +65,7 @@ class Class_newFiche
|
|||||||
*/
|
*/
|
||||||
public function listFraisHF(): array
|
public function listFraisHF(): array
|
||||||
{
|
{
|
||||||
$req = 'SELECT "lhId", to_char("lhDate", \'YYYY-mm-dd\') AS "lhDate",
|
$req = 'SELECT to_char("lhDate", \'YYYY-mm-dd\') AS "lhDate",
|
||||||
"lhLibelle", ROUND("lhMontant",2) as "lhMontant",
|
"lhLibelle", ROUND("lhMontant",2) as "lhMontant",
|
||||||
"lhJustificatif", "lhRefus"
|
"lhJustificatif", "lhRefus"
|
||||||
FROM remboursement
|
FROM remboursement
|
||||||
@ -106,130 +102,17 @@ class Class_newFiche
|
|||||||
return $result->fetch()['rMontantValide'];
|
return $result->fetch()['rMontantValide'];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public function getStatus(): string
|
||||||
* RETOURNE LE STATUS DE LA FICHE
|
|
||||||
*/
|
|
||||||
public function getStatus(): array
|
|
||||||
{
|
{
|
||||||
$req = 'SELECT etat."eId" , etat."eLibelle"
|
$req = 'select etat."eId" from remboursement
|
||||||
from remboursement
|
|
||||||
INNER JOIN etat on etat."eId" = remboursement."rEtat"
|
INNER JOIN etat on etat."eId" = remboursement."rEtat"
|
||||||
WHERE "rVisiteur" = :idVisiteur AND "rMois" = :mois;';
|
WHERE "rVisiteur" = :idVisiteur AND "rMois" = :mois ;';
|
||||||
|
|
||||||
$result = $this->pdo->prepare($req);
|
$result = $this->pdo->prepare($req);
|
||||||
$result->bindParam(':idVisiteur', $this->userId);
|
$result->bindParam(':idVisiteur', $this->userId);
|
||||||
$result->bindParam(':mois', $this->month);
|
$result->bindParam(':mois', $this->month);
|
||||||
$result->execute();
|
$result->execute();
|
||||||
|
|
||||||
return $result->fetch();
|
return $result->fetch()['eId'];
|
||||||
}
|
}
|
||||||
|
}
|
||||||
/**
|
|
||||||
* 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();
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,7 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
* Class PDO qui gère la base de donnée
|
|
||||||
*/
|
|
||||||
class PdoGsb
|
class PdoGsb
|
||||||
{
|
{
|
||||||
private static $serveur = 'pgsql:host=localhost';
|
private static $serveur = 'pgsql:host=localhost';
|
||||||
@ -17,6 +15,8 @@ class PdoGsb
|
|||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
PdoGsb::$pdo = new PDO(PdoGsb::$serveur . ';' . PdoGsb::$bdd, PdoGsb::$user, PdoGsb::$mdp);
|
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()
|
public function _destruct()
|
||||||
{
|
{
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* Class qui gère les user
|
* AJOUT COMPTABLE
|
||||||
**/
|
* INSERT INTO utilisateur
|
||||||
|
* VALUES('cpt1', 'Renaudot', 'Pierre', 'pr07', 'pr', 'rue saint éloi', 21110, 'Marliens', NOW(), 3, 3, 4, 27, NOW(), NOW(), '120cv', 'essence')
|
||||||
|
*/
|
||||||
class Class_user
|
class Class_user
|
||||||
{
|
{
|
||||||
private $pdo = null;
|
private $pdo = null;
|
||||||
@ -11,10 +13,7 @@ class Class_user
|
|||||||
$this->pdo = $pDO->getPdoGsb();
|
$this->pdo = $pDO->getPdoGsb();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public function connectUser(string $login, string $password): array
|
||||||
* 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"
|
$req = 'SELECT "uId", "uNom", "uPrenom", "uAdresse", "uCp", "uVille", "uSecteur", "uLabo", "parametre"."pLibelle"
|
||||||
FROM utilisateur
|
FROM utilisateur
|
||||||
@ -26,30 +25,7 @@ class Class_user
|
|||||||
$result->bindParam('login', $login);
|
$result->bindParam('login', $login);
|
||||||
$result->bindParam('pwd', $password);
|
$result->bindParam('pwd', $password);
|
||||||
$result->execute();
|
$result->execute();
|
||||||
$result = $result->fetch();
|
|
||||||
|
|
||||||
if ($result['pLibelle'] == 'comptable') {
|
return $result->fetch();
|
||||||
$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();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,72 +0,0 @@
|
|||||||
<?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;
|
|
||||||
}
|
|
@ -2,15 +2,10 @@
|
|||||||
require_once(__DIR__ . '/../Class/class.user.php');
|
require_once(__DIR__ . '/../Class/class.user.php');
|
||||||
|
|
||||||
$userClass = new Class_user($pdo);
|
$userClass = new Class_user($pdo);
|
||||||
|
|
||||||
if (isset($_POST['login']) && isset($_POST['password'])) {
|
if (isset($_POST['login']) && isset($_POST['password'])) {
|
||||||
//Récupère les données de l'utilisateur
|
//Récupère les données de l'utilisateur
|
||||||
$data = $userClass->connectUser($_POST['login'], $_POST['password']);
|
$data = $userClass->connectUser($_POST['login'], $_POST['password']);
|
||||||
|
|
||||||
if ($data == false) {
|
|
||||||
header('location: index.php');
|
|
||||||
}
|
|
||||||
|
|
||||||
//Si l'utilisateur existe ou pas
|
//Si l'utilisateur existe ou pas
|
||||||
if (count($data) === 0) {
|
if (count($data) === 0) {
|
||||||
header('location: index.php?direction=connexion&msg=errorco');
|
header('location: index.php?direction=connexion&msg=errorco');
|
||||||
@ -30,3 +25,64 @@ if (isset($_POST['login']) && isset($_POST['password'])) {
|
|||||||
} else {
|
} else {
|
||||||
include('vues/v_connexion.php');
|
include('vues/v_connexion.php');
|
||||||
}
|
}
|
||||||
|
die;
|
||||||
|
/*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
header('location: index.php?direction=home');
|
||||||
|
|
||||||
|
if (!isset($_REQUEST['action'])) {
|
||||||
|
$_REQUEST['action'] = 'demandeConnexion';
|
||||||
|
}
|
||||||
|
$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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
*/
|
||||||
|
@ -1,27 +0,0 @@
|
|||||||
<?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");
|
|
@ -1,30 +1,9 @@
|
|||||||
<?php
|
<?php
|
||||||
|
$_SESSION ["typeU"] = "comptable";
|
||||||
|
|
||||||
require_once(__DIR__ . '/../Class/class.gestionFiche.php');
|
require_once(__DIR__ . '/../Class/class.gestionFiche.php');
|
||||||
|
|
||||||
$typeU = $_SESSION['uType'];
|
|
||||||
$gestionFiche = new Class_gestionFiche($pdo);
|
$gestionFiche = new Class_gestionFiche($pdo);
|
||||||
|
|
||||||
$LesUtilisateurs = $gestionFiche->getLesUtilisateurs(); //RENVOIE LISTE USERS
|
$LesUtilisateurs = $gestionFiche->getLesUtilisateurs(); //RENVOIE LISTE USERS
|
||||||
|
|
||||||
// Gestion du selecteur selon le type user
|
|
||||||
if ($typeU == "comptable") {
|
|
||||||
if (isset($_REQUEST['selVisiteur'])) {
|
|
||||||
$userId = $_REQUEST['selVisiteur'];
|
|
||||||
} else {
|
|
||||||
$userId = $LesUtilisateurs[0]['uId'];
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$userId = $_SESSION['uId'];
|
|
||||||
}
|
|
||||||
|
|
||||||
//Pagination
|
|
||||||
if(isset($_GET['page']) && !empty($_GET['page'])){
|
|
||||||
$currentPage = (int) strip_tags($_GET['page']);
|
|
||||||
}else{
|
|
||||||
$currentPage = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
$pages = ceil($gestionFiche->get_nbRemboursement($userId) / $gestionFiche::$NB_LIGNES_PAGINATION);
|
|
||||||
$lesFiches = $gestionFiche->get_Page($currentPage, $userId);
|
|
||||||
|
|
||||||
include("vues/v_gestionFiches.php");
|
include("vues/v_gestionFiches.php");
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
include(__DIR__ . '/../vues/v_homePage.php');
|
include(__DIR__ . '/../vues/v_homePage.php');
|
@ -1,58 +1,44 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
|
||||||
* sudo date --set "YYYY-MM-DD HH:MM:SS"
|
|
||||||
*/
|
|
||||||
require_once(__DIR__ . '/../Class/class.newFiche.php');
|
require_once(__DIR__ . '/../Class/class.newFiche.php');
|
||||||
|
|
||||||
$typeUser = $_SESSION['uType']; //visiteur ou comptable
|
$typeUser = $_SESSION['uType']; //visiteur ou comptable
|
||||||
$userId = $_SESSION['uId']; //exemple: 'b34'
|
$userId = $_SESSION['uId']; //exemple: 'b34'
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gestion de la date selon la vue à afficher
|
* Gestion de la date selon la vue à afficher
|
||||||
*/
|
*/
|
||||||
if (isset($_GET['currentList'])) {
|
if (isset($_GET['currentList'])) {
|
||||||
|
|
||||||
//Date des req SQL et function
|
//Date des req SQL et function
|
||||||
$date = date('Ym');
|
$date = date('Ym');
|
||||||
|
|
||||||
//Timestamp de la date
|
//Date du header
|
||||||
$dateTimeStamp = strtotime(date('Y-m-\01'));
|
try {
|
||||||
|
//sudo timedatectl set-local-rtc 1
|
||||||
|
$format = new IntlDateFormatter(
|
||||||
|
'fr_FR',
|
||||||
|
IntlDateFormatter::FULL,
|
||||||
|
IntlDateFormatter::FULL,
|
||||||
|
'Europe/Paris',
|
||||||
|
IntlDateFormatter::GREGORIAN,
|
||||||
|
'MMMM Y'
|
||||||
|
);
|
||||||
|
$dateHeader = $format->format(time());
|
||||||
|
|
||||||
|
} catch (\Throwable $th) {
|
||||||
|
$dateHeader = date('F Y');
|
||||||
|
}
|
||||||
|
|
||||||
//Date du formulaire HF
|
//Date du formulaire HF
|
||||||
$dateFormHFMin = date('Y-m-\01');
|
$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)
|
$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'])) {
|
} elseif (isset($_GET['dateListing'])) {
|
||||||
//Données pour nourir la vue
|
$date = $_GET['dateListing'];
|
||||||
$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
|
$date = '202404';
|
||||||
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);
|
$newFiche = new Class_newFiche($pdo, $userId, $date);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -77,13 +63,7 @@ $totalFraisFiche = $newFiche->getMontantValide();
|
|||||||
* ETAT DE LA FICHE
|
* ETAT DE LA FICHE
|
||||||
*/
|
*/
|
||||||
$status = $newFiche->getStatus();
|
$status = $newFiche->getStatus();
|
||||||
if (
|
//$status = 'CR'; //créé
|
||||||
($status['eId'] == 'CL' && $typeUser == 'comptable')
|
$disabled = ($status !== 'CR') ? 'disabled' : '';
|
||||||
|| ($status['eId'] == 'CR' && $typeUser == 'visiteur')
|
|
||||||
) {
|
|
||||||
$disabled = '';
|
|
||||||
} else {
|
|
||||||
$disabled = 'disabled';
|
|
||||||
}
|
|
||||||
|
|
||||||
include(__DIR__ . '/../vues/v_newFiche.php');
|
include(__DIR__ . '/../vues/v_newFiche.php');
|
||||||
|
149
include/aide javascript.txt
Normal file
149
include/aide javascript.txt
Normal file
@ -0,0 +1,149 @@
|
|||||||
|
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;
|
37
include/appelIni.php
Normal file
37
include/appelIni.php
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
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']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
632
include/class.pdogsb.php
Normal file
632
include/class.pdogsb.php
Normal file
@ -0,0 +1,632 @@
|
|||||||
|
<?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évrier",
|
||||||
|
'03' => "Mars",
|
||||||
|
'04' => "Avril",
|
||||||
|
'05' => "Mai",
|
||||||
|
'06' => "Juin",
|
||||||
|
'07' => "Juillet",
|
||||||
|
'08' => "Août",
|
||||||
|
'09' => "Septembre",
|
||||||
|
'10' => "Octobre",
|
||||||
|
'11' => "Novembre",
|
||||||
|
'12' => "Dé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é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é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é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é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é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é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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
202
include/fct.inc.php
Normal file
202
include/fct.inc.php
Normal file
@ -0,0 +1,202 @@
|
|||||||
|
<?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épassé, 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é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']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
7
include/gsb.ini
Normal file
7
include/gsb.ini
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
[database]
|
||||||
|
driver = mysql
|
||||||
|
host = localhost
|
||||||
|
port = 3306
|
||||||
|
schema = gsb2021
|
||||||
|
username = root
|
||||||
|
password = root
|
118
include/menu.php
118
include/menu.php
@ -1,81 +1,75 @@
|
|||||||
<div class="col-auto col-md-3 col-xl-2 px-sm-2 px-0 bg-dark">
|
<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">
|
<div class="d-flex flex-column align-items-center align-items-sm-start px-3 pt-2 text-white min-vh-100">
|
||||||
<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">
|
<a href="/" 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>
|
<span class="fs-5 d-none d-sm-inline">GSB LABORATOIRE</span>
|
||||||
</a>
|
</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">
|
<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">
|
<li class="nav-item">
|
||||||
<a href="index.php" class="nav-link align-middle px-0">
|
<a href="index.php" class="nav-link align-middle px-0">
|
||||||
<i class="fs-4 bi-house"></i> <span class="ms-1 d-none d-sm-inline">Accueil</span>
|
<i class="fs-4 bi-house"></i> <span class="ms-1 d-none d-sm-inline">Home</span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<!--
|
<!--
|
||||||
Partie visiteur
|
Partie visiteur
|
||||||
-->
|
-->
|
||||||
<?php
|
<?php
|
||||||
if ($_SESSION['uType'] == 'visiteur'):
|
if($_SESSION['typeU'] == 'visiteur'):
|
||||||
?>
|
?>
|
||||||
<li>
|
<li>
|
||||||
<a href="#submenu1" data-bs-toggle="collapse" class="nav-link px-0 align-middle dropdown-toggle">
|
<a href="#submenu1" data-bs-toggle="collapse" class="nav-link px-0 align-middle">
|
||||||
<strong><i class="fs-4 bi-speedometer2"></i> <span class="ms-1 d-none d-sm-inline">Fiche de
|
<i class="fs-4 bi-speedometer2"></i> <span class="ms-1 d-none d-sm-inline">Fiche de frais</span>
|
||||||
frais</span></strong>
|
</a>
|
||||||
</a>
|
<ul class="collapse show nav flex-column ms-1" id="submenu1" data-bs-parent="#menu">
|
||||||
<ul class="collapse show nav flex-column ms-1" id="submenu1" data-bs-parent="#menu">
|
<li class="w-100">
|
||||||
<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 href="index.php?direction=gestionFiche" class="nav-link px-0"> <span
|
</a>
|
||||||
class="d-none d-sm-inline">Gérer ses fiches</span>
|
</li>
|
||||||
</a>
|
<li>
|
||||||
</li>
|
<a href="index.php?direction=nouvelleFiche¤tList" class="nav-link px-0"> <span class="d-none d-sm-inline">Fiche du mois</span>
|
||||||
<li>
|
</a>
|
||||||
<a href="index.php?direction=nouvelleFiche¤tList" class="nav-link px-0"> <span
|
</li>
|
||||||
class="d-none d-sm-inline">Fiche du mois</span>
|
</ul>
|
||||||
</a>
|
</li>
|
||||||
</li>
|
<li>
|
||||||
</ul>
|
<a href="#" class="nav-link px-0 align-middle">
|
||||||
</li>
|
<i class="fs-4 bi-table"></i> <span class="ms-1 d-none d-sm-inline">Visites</span></a>
|
||||||
<li>
|
</li>
|
||||||
<a href="#" class="nav-link px-0 align-middle dropdown-toggle">
|
<?php endif; if ($_SESSION['typeU'] == 'comptable'): ?>
|
||||||
<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
|
Partie comptable
|
||||||
-->
|
-->
|
||||||
<li>
|
<li>
|
||||||
<strong>
|
<a href="#submenu2" data-bs-toggle="collapse" class="nav-link px-0 align-middle">
|
||||||
<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>
|
||||||
<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="index.php?direction=gestionFiche" class="nav-link px-0"> <span class="d-none d-sm-inline">A valider</span>
|
||||||
</a>
|
</a>
|
||||||
</strong>
|
</li>
|
||||||
<ul class="collapse show nav flex-column ms-1" id="submenu2" data-bs-parent="#menu">
|
<li>
|
||||||
<li class="w-100">
|
<a href="#" class="nav-link px-0"> <span class="d-none d-sm-inline">Historique</span>
|
||||||
<a href="index.php?direction=gestionFiche" class="nav-link px-0"> <span
|
</a>
|
||||||
class="d-none d-sm-inline">gestion des fiches</span>
|
</li>
|
||||||
</a>
|
</ul>
|
||||||
</li>
|
</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; ?>
|
<?php endif; ?>
|
||||||
</ul>
|
</ul>
|
||||||
<hr>
|
<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="controleurs/c_deconnexion.php">Sign out</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
@ -7,6 +7,7 @@ $(document).ready(function () {
|
|||||||
* Partie enregistrement frais F
|
* Partie enregistrement frais F
|
||||||
*/
|
*/
|
||||||
$('.frsFrt').on('change', function (e) {
|
$('.frsFrt').on('change', function (e) {
|
||||||
|
console.log($(this).val())
|
||||||
val = $(this).val();
|
val = $(this).val();
|
||||||
val = val.replace(',', '.')
|
val = val.replace(',', '.')
|
||||||
|
|
||||||
@ -61,7 +62,7 @@ $(document).ready(function () {
|
|||||||
|
|
||||||
line.find('.btn').attr('id', 'frsSup-' + lastId)
|
line.find('.btn').attr('id', 'frsSup-' + lastId)
|
||||||
|
|
||||||
var line = $('<tr id="fraisHf-' + lastId + '" data-id="" class="fraisHF"></tr>');
|
var line = $('<tr id="fraisHf-' + lastId + '" class="fraisHF"></tr>');
|
||||||
var tdDate = $('<th scope="row" id="dateFrsHF"></th>');
|
var tdDate = $('<th scope="row" id="dateFrsHF"></th>');
|
||||||
tdDate.html(date.val());
|
tdDate.html(date.val());
|
||||||
var tdLibelle = $('<td id="LibelleFrsHF"></td>');
|
var tdLibelle = $('<td id="LibelleFrsHF"></td>');
|
||||||
@ -87,141 +88,29 @@ $(document).ready(function () {
|
|||||||
calcPrixTotalFrsHorsF();
|
calcPrixTotalFrsHorsF();
|
||||||
updatePrixTotal();
|
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
|
* Supprimer fraisHf
|
||||||
*/
|
*/
|
||||||
$(document).on('click', '.btnSuprFraisHf', function () {
|
$(document).on('click', '.btnSuprFraisHf', function () {
|
||||||
id = $(this).attr('id').split('-')[1]
|
id = $(this).attr('id').split('-')[1]
|
||||||
fiche = $('#idFiche').attr('data-id')
|
console.log(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()
|
$('#fraisHf-' + id).remove()
|
||||||
calcPrixTotalFrsHorsF();
|
calcPrixTotalFrsHorsF();
|
||||||
updatePrixTotal();
|
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
|
* Calcul prix total frais forfaitaires
|
||||||
*/
|
*/
|
||||||
function calcPrixTotalFrsF() {
|
function calcPrixTotalFrsF() {
|
||||||
|
|
||||||
var prixTotal = 0;
|
var prixTotal = 0;
|
||||||
$('td.mttFrsTotal').each(function () {
|
$('td[id^="totalFrs-"]').each(function () {
|
||||||
prixTotal += parseFloat($(this).html().replace('€', ''))
|
prixTotal += parseFloat($(this).html().replace('€', ''))
|
||||||
})
|
})
|
||||||
$('.prixTotalFrsF').html('<strong>TOTAL :</strong> ' + prixTotal.toFixed(2) + ' €')
|
$('.prixTotalFrsF').html('<strong>TOTAL :</strong> ' + prixTotal.toFixed(2) + ' €')
|
||||||
|
100
include/proceduresJava.js
Normal file
100
include/proceduresJava.js
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
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";}
|
||||||
|
}
|
15
index.php
15
index.php
@ -1,9 +1,20 @@
|
|||||||
<?php
|
<?php
|
||||||
session_start();
|
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");
|
require_once("Class/class.pdo.php");
|
||||||
|
|
||||||
$pdo = new PdoGsb();
|
$pdo = new PdoGsb();
|
||||||
|
$_SESSION['typeU'] = 'visiteur';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Direction si non renseigné et non connecté
|
* Direction si non renseigné et non connecté
|
||||||
@ -60,10 +71,6 @@ if (!isset($_REQUEST['direction']) && !isset($_SESSION['uId'])) {
|
|||||||
include(__DIR__ . "/controleurs/c_nouvelleFiche.php");
|
include(__DIR__ . "/controleurs/c_nouvelleFiche.php");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'ficheAvalider':
|
|
||||||
include(__DIR__ . "/controleurs/c_ficheAvalider.php");
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
include("controleurs/c_homePage.php");
|
include("controleurs/c_homePage.php");
|
||||||
break;
|
break;
|
||||||
|
112
sqlFunction.sql
112
sqlFunction.sql
@ -1,112 +0,0 @@
|
|||||||
|
|
||||||
--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;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
24
sqlFunction.txt
Normal file
24
sqlFunction.txt
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
|
||||||
|
--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;
|
||||||
|
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');
|
||||||
|
|
||||||
|
-- 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';
|
||||||
|
|
352
styles/stylesGSB.css
Normal file
352
styles/stylesGSB.css
Normal file
@ -0,0 +1,352 @@
|
|||||||
|
/* 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;
|
||||||
|
}
|
@ -1,6 +1,4 @@
|
|||||||
<!--
|
<!-- 03/05/2023 à 11H01 -->
|
||||||
Page formulaire de connexion
|
|
||||||
-->
|
|
||||||
<section class="vh-100 gradient-custom">
|
<section class="vh-100 gradient-custom">
|
||||||
<div class="container py-5 h-100">
|
<div class="container py-5 h-100">
|
||||||
<div class="row d-flex justify-content-center align-items-center h-100">
|
<div class="row d-flex justify-content-center align-items-center h-100">
|
||||||
@ -25,6 +23,8 @@
|
|||||||
<label class="form-label" for="typePasswordX">Mot-de-passe</label>
|
<label class="form-label" for="typePasswordX">Mot-de-passe</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- <p class="small mb-5 pb-lg-2"><a class="text-white-50" href="#!">Forgot password?</a></p> -->
|
||||||
|
|
||||||
<button class="btn btn-outline-light btn-lg px-5"
|
<button class="btn btn-outline-light btn-lg px-5"
|
||||||
type="submit">Connexion</button>
|
type="submit">Connexion</button>
|
||||||
</form>
|
</form>
|
||||||
@ -44,3 +44,26 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
<!--
|
||||||
|
|
||||||
|
<div id="contenu">
|
||||||
|
<h2>Identification utilisateur</h2>
|
||||||
|
|
||||||
|
|
||||||
|
<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>
|
||||||
|
|
||||||
|
</div>
|
10
vues/v_erreurs.php
Normal file
10
vues/v_erreurs.php
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<div class ="erreur">
|
||||||
|
<ul>
|
||||||
|
<?php
|
||||||
|
foreach($_REQUEST['erreurs'] as $erreur)
|
||||||
|
{
|
||||||
|
echo "<li>$erreur</li>";
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</ul>
|
||||||
|
</div>
|
@ -1,65 +0,0 @@
|
|||||||
<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; ?>
|
|
@ -2,31 +2,21 @@
|
|||||||
<div class="col-3 mb-4">
|
<div class="col-3 mb-4">
|
||||||
<br>
|
<br>
|
||||||
<?php
|
<?php
|
||||||
if ($typeU != 'comptable') {
|
if ($_SESSION['typeU'] != 'comptable') {
|
||||||
echo '<h3>Gérer mes fiches de frais</h3>';
|
echo '<h3>Gérer mes fiches de frais</h3>';
|
||||||
} else { ?>
|
} else {
|
||||||
|
echo '<h3>Gérer les fiches de frais de :</h3>';
|
||||||
<form action="index.php?direction=gestionFiche" method="POST">
|
echo '<select class="form-select" name="selVisiteur" id="">';
|
||||||
|
foreach ($LesUtilisateurs as $key => $value) {
|
||||||
<h3>Gérer les fiches de frais de :</h3>
|
$id = $value['uId'];
|
||||||
<select class="form-select" name="selVisiteur" id="">
|
$prenom = $value['uPrenom'];
|
||||||
<?php
|
$nom = $value['uNom'];
|
||||||
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 } ?>
|
|
||||||
|
|
||||||
|
echo '<option value="' . $id . '">' . $nom . " " . $prenom . "</option>";
|
||||||
|
}
|
||||||
|
echo '</select>';
|
||||||
|
}
|
||||||
|
?>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</center>
|
</center>
|
||||||
@ -42,54 +32,45 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<?php foreach ($lesFiches as $uneFiche): ?>
|
<tr>
|
||||||
<tr>
|
<th scope="row">Novembre</th>
|
||||||
<th scope="row">
|
<td>351 €</td>
|
||||||
<?= $gestionFiche->dateComplete($uneFiche['rMois']) ?>
|
<td>en cours...</td>
|
||||||
</th>
|
<td><a href="#">voir</a></td>
|
||||||
<td>
|
</tr>
|
||||||
<?= $uneFiche['rMontantValide'] ?> €
|
<tr>
|
||||||
</td>
|
<th scope="row">Octobre</th>
|
||||||
<td>
|
<td>1458 €</td>
|
||||||
<?= $uneFiche['eLibelle'] ?>
|
<td>en cours...</td>
|
||||||
</td>
|
<td><a href="#">voir</a></td>
|
||||||
<td><a
|
</tr>
|
||||||
href="index.php?direction=nouvelleFiche&userId=<?= $userId ?>&dateListing=<?= $uneFiche['rMois'] ?>">voir</a>
|
<tr>
|
||||||
</td>
|
<th scope="row">Septembre</th>
|
||||||
</tr>
|
<td>1112 €</td>
|
||||||
<?php endforeach ?>
|
<td>classé</td>
|
||||||
|
<td><a href="#">voir</a></td>
|
||||||
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
PAGINATION:
|
PAGINATION:// NE PAS TOUCHER
|
||||||
-->
|
-->
|
||||||
|
<div class="col-4 d-flex mx-auto">
|
||||||
<?php if ($pages > 1): ?>
|
<nav aria-label="...">
|
||||||
<div class="col-4 d-flex mx-auto">
|
<ul class="pagination">
|
||||||
<nav>
|
<li class="page-item disabled">
|
||||||
<ul class="pagination">
|
<a class="page-link">Previous</a>
|
||||||
<!-- Lien vers la page précédente (désactivé si on se trouve sur la 1ère page) -->
|
</li>
|
||||||
<li class="page-item <?= ($currentPage == 1) ? "disabled" : "" ?>">
|
<li class="page-item"><a class="page-link" href="#">1</a></li>
|
||||||
<a href="index.php?direction=gestionFiche&page=<?= $currentPage - 1 ?>&selVisiteur=<?= $userId ?>"
|
<li class="page-item active" aria-current="page">
|
||||||
class="page-link">Précédente</a>
|
<a class="page-link" href="#">2</a>
|
||||||
</li>
|
</li>
|
||||||
<?php for ($page = 1; $page <= $pages; $page++): ?>
|
<li class="page-item"><a class="page-link" href="#">3</a></li>
|
||||||
<!-- Lien vers chacune des pages (activé si on se trouve sur la page correspondante) -->
|
<li class="page-item">
|
||||||
<li class="page-item <?= ($currentPage == $page) ? "active" : "" ?>">
|
<a class="page-link" href="#">Next</a>
|
||||||
<a href="index.php?direction=gestionFiche&page=<?= $page ?>&selVisiteur=<?= $userId ?>"
|
</li>
|
||||||
class="page-link">
|
</ul>
|
||||||
<?= $page ?>
|
</nav>
|
||||||
</a>
|
</div>
|
||||||
</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 ?>
|
|
@ -1,33 +1,4 @@
|
|||||||
<h4 class="d-block mx-auto my-2 text-align-center">BONJOUR
|
<h4>BONJOUR VOUS ETES <?= strtoupper($_SESSION['uType']) ?></h4>
|
||||||
<?= strtoupper($_SESSION['uPrenom']) ?> NOUS SOMMES LE
|
<?php
|
||||||
<?= date('d-m-Y') ?>
|
|
||||||
</h4>
|
|
||||||
|
|
||||||
<div class="card">
|
var_dump($_SESSION);
|
||||||
<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>
|
|
||||||
|
@ -4,15 +4,6 @@
|
|||||||
<p>Mois de
|
<p>Mois de
|
||||||
<?= $dateHeader ?>
|
<?= $dateHeader ?>
|
||||||
</p>
|
</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>
|
</center>
|
||||||
<br>
|
<br>
|
||||||
<!--
|
<!--
|
||||||
@ -33,18 +24,18 @@
|
|||||||
<?php
|
<?php
|
||||||
foreach ($listeFraisForfaitaire as $key => $value):
|
foreach ($listeFraisForfaitaire as $key => $value):
|
||||||
?>
|
?>
|
||||||
<tr data-id="<?= $value['fId'] ?>" class="fraisForfaitaire">
|
<tr>
|
||||||
<th scope="row">
|
<th scope="row">
|
||||||
<?= $value['fLibelle'] ?>
|
<?= $value['fLibelle'] ?>
|
||||||
</th>
|
</th>
|
||||||
<td>
|
<td>
|
||||||
<input type="text" name="fraisForfait" class="form-control frsFrt" id="<?= $key ?>"
|
<input type="text" name="fraisForfait-<?= $value['fId'] ?>" class="form-control frsFrt"
|
||||||
value="<?= $value['lfQuantite'] ?>" <?= $disabled ?>>
|
id="<?= $key ?>" value="<?= $value['lfQuantite'] ?>" <?= $disabled ?>>
|
||||||
</td>
|
</td>
|
||||||
<td id="mttFrs-<?= $key ?>" data-price="<?= $value['fMontant'] ?>">
|
<td id="mttFrs-<?= $key ?>" data-price="<?= $value['fMontant'] ?>">
|
||||||
<?= $value['fMontant'] ?> €
|
<?= $value['fMontant'] ?> €
|
||||||
</td>
|
</td>
|
||||||
<td class="mttFrsTotal" id="totalFrs-<?= $key ?>">
|
<td id="totalFrs-<?= $key ?>">
|
||||||
<?= $value['fTotal'] ?>€
|
<?= $value['fTotal'] ?>€
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@ -79,8 +70,7 @@
|
|||||||
<?php
|
<?php
|
||||||
foreach ($listeFraisHf as $key => $value):
|
foreach ($listeFraisHf as $key => $value):
|
||||||
?>
|
?>
|
||||||
<tr id="fraisHf-<?= $key ?>" data-id="<?= $value['lhId'] ?>"
|
<tr id="fraisHf-<?= $key ?>" class="fraisHF <?= $value['lhRefus'] == 1 ? 'table-danger' : '' ?>">
|
||||||
class="fraisHF <?= $value['lhRefus'] == 1 ? 'table-danger' : '' ?>" data-id="<?= $value['lhId'] ?>">
|
|
||||||
<th scope="row" id="dateFrsHF">
|
<th scope="row" id="dateFrsHF">
|
||||||
<?= $value['lhDate'] ?>
|
<?= $value['lhDate'] ?>
|
||||||
</th>
|
</th>
|
||||||
@ -91,21 +81,16 @@
|
|||||||
<?= $value['lhMontant'] ?> €
|
<?= $value['lhMontant'] ?> €
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<?php
|
|
||||||
|
|
||||||
?>
|
|
||||||
<?= $value['lhJustificatif'] == 1 ? 'ok' : 'non fournis' ?>
|
<?= $value['lhJustificatif'] == 1 ? 'ok' : 'non fournis' ?>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<?php
|
<?php
|
||||||
if ($typeUser === 'comptable') { ?>
|
if ($typeUser === 'comptable') { ?>
|
||||||
<button type="button" class="btn btn-outline-primary btnRefuseFraisHf"
|
<button type="button" class="btn btn-outline-primary btnRefuseFraisHf" id="frsSup-<?= $key ?>" <?= $disabled ?>>
|
||||||
data-status="<?= $value['lhRefus'] | 0 ?>" id="frsSup-<?= $key ?>" <?= $disabled ?>>
|
Refuser
|
||||||
<?= ($value['lhRefus']) ? 'Accepter' : 'Refuser' ?>
|
|
||||||
</button>
|
</button>
|
||||||
<?php } elseif ($typeUser === 'visiteur') { ?>
|
<?php } elseif ($typeUser === 'visiteur') { ?>
|
||||||
<button type="button" class="btn btn-outline-primary btnSuprFraisHf" id="frsSup-<?= $key ?>"
|
<button type="button" class="btn btn-outline-primary btnSuprFraisHf" id="frsSup-<?= $key ?>" <?= $disabled ?>>
|
||||||
<?= $disabled ?>>
|
|
||||||
Supprimer
|
Supprimer
|
||||||
</button>
|
</button>
|
||||||
<?php } ?>
|
<?php } ?>
|
||||||
@ -118,29 +103,30 @@
|
|||||||
Formulaire d'ajout de frais HF
|
Formulaire d'ajout de frais HF
|
||||||
-->
|
-->
|
||||||
<?php
|
<?php
|
||||||
if ($disabled !== 'disabled' && $typeUser !== 'comptable'):
|
if ($disabled !== 'disabled'):
|
||||||
?>
|
?>
|
||||||
<tr class="newFraisForm">
|
<tr class="newFraisForm">
|
||||||
<td>
|
<td>
|
||||||
<!-- Date form -->
|
<!-- Date form -->
|
||||||
<input name="dateHf" class="form-control" id="dateHf" type="date" min="<?= $dateFormHFMin ?>"
|
<input name="dateHf" class="form-control" id="dateHf" type="date" min="<?= $dateFormHFMin ?>"
|
||||||
max="<?= $dateFormHFMax ?>">
|
max="<?= $dateFormHFMax ?>">
|
||||||
</td>
|
</td>
|
||||||
<td><input type="text" name="libelleHf" id="libelleHf" class="form-control"
|
<td><input type="text" name="libelleHf" id="libelleHf" class="form-control"
|
||||||
placeholder="saisir un titre"></td>
|
placeholder="saisir un titre"></td>
|
||||||
<td><input type="text" name="mttHf" id="mttHf" class="form-control" placeholder="Saisir un Montant">
|
<td><input type="text" name="mttHf" id="mttHf" class="form-control" placeholder="Saisir un Montant">
|
||||||
</td>
|
</td>
|
||||||
<td><input type="file" class="form-control"></td>
|
<td><input type="file" class="form-control"></td>
|
||||||
<td><button type="button" class="btn btn-outline-primary validFraisHF">Valider</button></td>
|
<td><button type="button" class="btn btn-outline-primary validFraisHF">Valider</button></td>
|
||||||
</tr>
|
</tr>
|
||||||
<?php endif ?>
|
<?php endif ?>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="2" class="border-0"></td>
|
<td colspan="2" class="border-0"></td>
|
||||||
<td class="table-primary" id="total-frais-HF">TOTAL: 0€</td>
|
<td class="table-primary" id="total-frais-HF">TOTAL: 0€</td> <!--COMPLETE HERE -->
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
<!-- <span class="border-3 border-bottom border-black col-10 mx-auto my-5 d-flex"></span> -->
|
||||||
<!-- TOTAL -->
|
<!-- TOTAL -->
|
||||||
<div style="position:fixed; bottom:5px; right:5px; margin:0; padding:5px 3px;">
|
<div style="position:fixed; bottom:5px; right:5px; margin:0; padding:5px 3px;">
|
||||||
<button type="button" class="btn btn-primary" id="total-fiche">
|
<button type="button" class="btn btn-primary" id="total-fiche">
|
||||||
@ -148,26 +134,22 @@
|
|||||||
<?= $totalFraisFiche ?>
|
<?= $totalFraisFiche ?>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
<!--
|
||||||
|
<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>
|
||||||
|
</div>
|
||||||
|
-->
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* Affiche le bouton si fiche non cloturé
|
* Affiche le bouton si fiche non cloturé
|
||||||
*/
|
*/
|
||||||
if ($disabled == ''):
|
if ($status === 'CR'):
|
||||||
?>
|
?>
|
||||||
<div class="col-3 d-flex mx-auto my-5 justify-content-center">
|
<div class="col-3 d-flex mx-auto my-5 justify-content-center">
|
||||||
<?php
|
<button type="button" class="btn btn-outline-primary btn-lg" data-uType="<?= $typeUser ?>">Envoyer la Fiche
|
||||||
if ($typeUser == 'comptable' && $status['eId'] == 'CL'): ?>
|
</button>
|
||||||
<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>
|
</div>
|
||||||
<?php endif ?>
|
<?php endif ?>
|
||||||
<script src="include/newFiche.js"></script>
|
<script src="../include/newFiche.js"></script>
|
||||||
<!-- <script src="../include/newFiche.js"></script> -->
|
|
7
vues/v_pied.php
Normal file
7
vues/v_pied.php
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
|
||||||
|
<!-- 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ée Le Castel à Dijon - BTS SIO - <img src='images/copyleft.png' style='text-align: center; vertical-align: middle;'> 03/05/2023 Blain Pascal";?></p>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
60
vues/v_unFraisForfaitaire.php
Normal file
60
vues/v_unFraisForfaitaire.php
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
<!-- 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é</th>
|
||||||
|
<th class="eltForfait">Nature de la dé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>
|
55
vues/v_unFraisHorsForfait.php
Normal file
55
vues/v_unFraisHorsForfait.php
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
<!-- 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é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épense invalidée sera marqué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 -->
|
Loading…
x
Reference in New Issue
Block a user