AP44/Class/class.newFiche.php
2024-02-01 09:22:43 +01:00

233 lines
7.0 KiB
PHP

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