<?php
namespace App\Controller;
// begin token-guard ---------------------------------------------------------------------------------
use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
use Symfony\Component\Security\Csrf\CsrfToken;
use Symfony\Component\Security\Core\Exception\InvalidCsrfTokenException;
use Symfony\Component\Security\Guard\Authenticator\AbstractFormLoginAuthenticator;
// end token-guard ---------------------------------------------------------------------------------
// begin mochel meyer products --------------------------------------------------------------
use App\Service\DIVService;
use App\Service\LOGDEFService;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\Validator\Validator\ValidatorInterface; // contrôleur de contraintes
use Doctrine\Persistence\ManagerRegistry;
use Doctrine\ORM\Tools\Pagination\Paginator;
use App\Entity\CFPPI;
use App\Entity\CFLBF;
use App\Entity\CFTBF;
use App\Entity\CFCRO;
use App\Entity\CFPRJ;
use App\Entity\CFPFBTBF;
use App\Entity\CFPFBCRO;
use App\Entity\CFPFBEDE;
use App\Entity\CFPFBEDA;
use App\Entity\usr;
use App\Entity\usl;
class DefaultController extends AbstractController
{
// some services, begin token-guard ---------------------------------------------------------------------------------
private $csrfTokenManager;
private $parambag;
private $logdefservice;
private $divservice;
public function __construct
(
CsrfTokenManagerInterface $csrfTokenManager,
ParameterBagInterface $parambag,
LOGDEFService $logdefservice,
DIVService $divservice,
)
{
$this->csrfTokenManager = $csrfTokenManager;
$this->parambag = $parambag;
$this->logdefservice = $logdefservice;
$this->divservice = $divservice;
}
// end some services, token-guard ---------------------------------------------------------------------------------
#[Route(path: '/', name: 'indexRedirect')]
public function indexRedirect(Request $request)
{
return $this->redirect($this->generateUrl('pageaccueil'));
}
#[Route(path: '/accueil', name: 'pageaccueil')]
public function index
(
Request $request,
ManagerRegistry $doctrine,
ValidatorInterface $validator
): Response
{
$em = $doctrine->getManager();
$user = $this->getUser();
if($user==null){ // protection ACL contre les lectures intempestives extérieures (saisie url directe)
$this->get('session')->getFlashBag()->add(
'Erreur',
'Impossible d\'accéder à la fonction demandée'
);
// renvoi page erreur
return $this->render('default\noaccess.html.twig',
array(
)
);
}
// USR identifié OK
$usrid = $user->getUsrid();
$prfid = $user->getPrfid()->getPrfid();
$prflib = $user->getPrfid()->getPrflib();
// vérif statu du compte (0,1,2)
$cptok=true;
$usr = $em->getRepository(usr::class)->findOneBy(array('usrid'=>$usrid));
if(($usr->getUsrstatut()==2)||($usr->getUsrstatut()==0)){
if($usr->getUsrstatut()==2){
$msg = "Votre compte est actuellement bloqué (nac)"; // non actif
}else{
$msg = "Votre compte est en attente de validation (ava)"; // attente validation
}
$this->get('session')->getFlashBag()->add(
"Erreur",
$msg
);
// renvoi page erreur
return $this->render('default\noaccess.html.twig',
array(
)
);
$cptok = false;
}else{
if($usr->getUsrdatchgpwd()!=null){ // vérification de la validité du pwd
$search_now = time();
$datchglimit = date('Y-m-d', mktime(0,0,0,date('m', $search_now),date('d', $search_now),date('Y', $search_now)-1));
if($usr->getUsrdatchgpwd()->format('Y-m-d')<=$datchglimit){
$pwdok = false;
}
}else{
$cptok = false;
}
if($cptok==false){ // modif pwd oblig
return $this->render('usr\pwdoubli.html.twig', array(
'msgcplt' => '',
'pwdchgoblig' => 1,
'fpwdemail' => ''
));
}
}
// =============== SUIVI LOGIN'S =====================
//var_dump($_SERVER);
if($cptok==true){
if(isset($_SERVER['HTTP_CACHE_CONTROL'])){ // variable temporaire, login réussi, mémo
if($_SERVER['HTTP_CACHE_CONTROL']=="max-age=0"){ // indicateur démarrage session
if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}else{
$ip = $_SERVER['REMOTE_ADDR']; // en général 127.0.0.1
}
$cook = '';
if(isset($_SERVER['HTTP_COOKIE'])){
$cook = str_replace('PHPSESSID=','',$_SERVER['HTTP_COOKIE']);
$pos = strpos($cook, ";");
if($pos>1){
$cook = substr($cook, 0, $pos-1);
}else{
$cook = substr($cook, 0, 254);
}
}
// enrgt dde : IP + Heure + login
$datdde = new \DateTime();
$usl = new usl;
$usl->setUslip($ip);
$usl->setUsldat($datdde);
$usl->setUsllogin($user->getUsername());
$usl->setUslctx('login');
$usl->setUslcook($cook);
$em->persist($usl);
$em->flush();
}
}
// =============================================
// màj usr ->date dernier log
$usrdatlog = new \DateTime();
$usrdatlog->createFromFormat("Y m d ", time());
$usr = $em->getRepository(usr::class)->findOneBy(array('usrid'=>$user->getUsrid()));
$usr->setUsrchgpwdtok(null);
$usr->setUsrdatddechgpwd(null);
$usr->setUsrdatlog($usrdatlog);
$em->persist($usr);
$em->flush();
// ========================================
// Si USR est admin, ouverture toujours sur le PPI de l'admin
// vérif CFPPI OK (existe et correspond à USR), si non saisie paramètres oblig
$ppi_param = $this->divservice->verif_cfppi_param($user);
$activ_menu = $this->divservice->verif_activ_menu($ppi_param[1]);
$cfppiid = $this->divservice->crypt_cfppiid($ppi_param[1]);
if($ppi_param[0]){ // passage obligé par les paramètres OK
// affichage menu gauche + page Mes outils
return $this->render('default\index.html.twig', array(
'base_dir' => realpath($this->parambag->get('kernel.project_dir').'/..').DIRECTORY_SEPARATOR,
'help_dir' => $this->parambag->get('dochelp_web_path'),
'prfid' => $prfid,
'prflib' => $prflib,
'cfppi_ok' => $ppi_param[0],
'cfppiid' => $cfppiid,
'activ_menu' => $activ_menu,
));
}else{ // saisie obligatoire des paramètres => ajout CFPPI
// période : amplitude max 10 ans
$anneeref = date("Y");
$lstanndeb = array();
$lstannfin = array();
for($i=0;$i<10;$i++){
$anneedeb = $anneeref + $i;
$anneefin = $anneeref + 10 - $i;
$lstanndeb[$anneedeb] = $anneedeb;
$lstannfin[$anneefin] = $anneefin;
}
// var_dump($lstannref);
$cfppi = new CFPPI();
$form_ajo = $this->createForm('App\Form\CFPPI_ajo', $cfppi, array(
'lstanndeb'=>$lstanndeb,
'lstannfin'=>$lstannfin,
));
$form_ajo->add('Enregistrer','Symfony\Component\Form\Extension\Core\Type\SubmitType',array(
'label'=>"Valider",
'attr'=>array('class'=>'btn btn-primary')
));
$form_ajo->add('Annuler', 'Symfony\Component\Form\Extension\Core\Type\ButtonType', array(
'label'=>"Retour",
'attr'=>array('class'=>'btn btn-primary', 'data-url'=>$this->generateUrl('app_logout'))
));
$form_ajo->handleRequest($request);
// vérif saisie form_ajo via validator annotations niveau Entity (après validation formulaire)
if($request->request->get('cfppi_ajo')){
// dd($request->request->get('cfppi_ajo'));
$errors = $validator->validate($cfppi);
if(count($errors) > 0) {
// dd($errors);
foreach($errors as $error){
$this->get('session')->getFlashBag()->add(
'Erreur',
$error->getmessage()
);
}
}
}else{
$errors = array();
}
if($request->request->get('cfppi_ajo')){ // ajout CFPPI
if($form_ajo->isValid()){ // si tout OK selon validator
// begin token-guard --------------------------------------------------------------------------------------------------------------
$postData = $request->request->get('cfppi_ajo');
$csrfToken = $postData['_token'];
if (false === $this->csrfTokenManager->isTokenValid(new CsrfToken('cfag44rotect', $csrfToken))) {
$cause = 4;
$this->get('session')->getFlashBag()->add(
'Erreur',
"Impossible d'accéder à la fonction demandée. (noto)" // bad token boy
);
return $this->redirect($this->generateUrl('pageaccueil')); // renvoi caval
// end token-guard --------------------------------------------------------------------------------------------------------------
}else{
$ppidatcre = new \DateTime();
$ppidatcre->createFromFormat("Y-m-d H:i:s", time());
$cfppi->setUSRID($user);
$cfppi->setPPIDATCRE($ppidatcre);
$cfppi->setPPIDATMOD($ppidatcre);
$em->persist($cfppi);
$em->flush();
$this->get('session')->getFlashBag()->add(
'Succès',
'Les paramètres ont été enregistrés avec succès.'
);
$this->divservice->cfppi_ajo_maj('ajo', $cfppi->getCFPPIID()); // création ou màj tables dépendantes du CFPPI
// redirection du form vers Accueil, accès complet à CF
$activ_menu = $this->divservice->verif_activ_menu($cfppiid);
$cfppiid = $this->divservice->crypt_cfppiid($cfppi->getCFPPIID());
// redirection du form vers Accueil, accès complet à CF
return $this->render('default\index.html.twig', array(
'base_dir' => realpath($this->parambag->get('kernel.project_dir').'/..').DIRECTORY_SEPARATOR,
'help_dir' => $this->parambag->get('dochelp_web_path'),
'prfid' => $prfid,
'prflib' => $prflib,
'cfppi_ok' => 1, // mais oui
'cfppiid' => $cfppiid,
'activ_menu' => $activ_menu
));
}
}
}
// infobubulles : fonds de roulement only
$lesdefs = array('fro');
$deflog = array();
foreach($lesdefs as $ladef){
$deflog[$ladef] = $this->logdefservice->get_unedef($ladef);
}
// $cfppiid = $this->divservice->crypt_cfppiid($cfppi->getCFPPIID());
// Affichage form nouv CFPPI
return $this->render('CFPPI\ajo.html.twig', array(
'orig' => 'ajo',
'help_dir' => $this->parambag->get('dochelp_web_path'), //forcreatmenu
'form_ajo' => $form_ajo->createView(),
'usrorg' => $user->getusrorg(),
'catlib' => $user->getcatid()->getcatlib(),
'cfppi_ok' => $ppi_param[0],
'cfppiid' => $cfppiid,
'deflog' => $deflog,
'errors' => $errors,
));
}
}
}
#[Route(path: '/savplus', name: 'savoirplus')]
public function ensavoirplus
(
Request $request,
ManagerRegistry $doctrine,
): Response
{
// affichage d'une page neutre : explications sur un des utilitaires
$em = $doctrine->getManager();
$user = $this->getUser();
if($user!=null){ // protection ACL contre les lectures intempestives extérieures (saisie url directe)
if(isset($_GET['wich'])){ // quel outil ?
switch($_GET['wich']){
case 'ppiplus':
return $this->render('default\ppiplus.html.twig', array());
break;
case 'modplus':
return $this->render('default\modplus.html.twig', array());
break;
case 'pfiplus':
return $this->render('default\pfiplus.html.twig', array());
break;
default:
$this->get('session')->getFlashBag()->add(
'error',
"Impossible d'accéder à la fonction demandée !"
);
return $this->redirect($this->generateUrl('pageaccueil')); // renvoi caval
break;
}
}else{ // protection ACL contre les lectures intempestives extérieures (saisie url directe)
$this->get('session')->getFlashBag()->add(
'Erreur',
"Impossible d'accéder à la fonction demandée !"
);
return $this->redirect($this->generateUrl('pageaccueil')); // renvoi caval
}
}else{ // protection ACL contre les lectures intempestives extérieures (saisie url directe)
$this->get('session')->getFlashBag()->add(
'Erreur',
"Impossible d'accéder à la fonction demandée !"
);
return $this->redirect($this->generateUrl('pageaccueil')); // renvoi caval
}
}
#[Route(path: '/accesssibilite', name: 'accesssibilite')]
public function accesssibilite
(
Request $request,
ManagerRegistry $doctrine,
): Response
{
return $this->render('default\accessibilite.html.twig', array());
}
#[Route(path: '/cgu', name: 'cgu')]
public function cgu
(
Request $request,
ManagerRegistry $doctrine,
): Response
{
return $this->render('default\cgu.html.twig', array());
}
#[Route(path: '/mentionslegales', name: 'mentionslegales')]
public function mentionslegales
(
Request $request,
ManagerRegistry $doctrine,
): Response
{
return $this->render('default\mentionslegales.html.twig', array());
}
// accès CFPPIID d'un user à partir de admin_usr_maj pour un admin
#[Route(path: '/ppi/admin/{CFPPIID}', name: 'ppi_admin')]
public function ppiadmin
(
$CFPPIID,
Request $request,
ManagerRegistry $doctrine,
ValidatorInterface $validator
): Response
{
$em = $doctrine->getManager();
$user = $this->getUser();
if($user==null){ // protection ACL contre les lectures intempestives extérieures (saisie url directe)
$this->get('session')->getFlashBag()->add(
'Erreur',
'Impossible d\'accéder à la fonction demandée'
);
return $this->redirect($this->generateUrl('pageaccueil')); // renvoi caval
}
// USR identifié OK, accès réservé admin + gestionnaire
$lstadmin = array_merge($this->divservice->getIdGestionnaire(), $this->divservice->getIdAdmin());
if(!in_array($user->getUsrid(), $lstadmin)){ // kontrol access
$this->get('session')->getFlashBag()->add(
'Erreur',
'Impossible d\'accéder à la fonction demandée'
);
return $this->redirect($this->generateUrl('pageaccueil')); // renvoi caval
}
$maj_poss = true; // tout est ok, modification PPI par l'admin possible
// USR ADMIN identifié OK
$prfid = $user->getPrfid()->getPrfid();
$prflib = $user->getPrfid()->getPrflib();
$cfppiid = $this->divservice->decrypt_cfppiid($CFPPIID);
$activ_menu = $this->divservice->verif_activ_menu($cfppiid);
// affichage menu gauche + page Mes outils
return $this->render('default\index.html.twig', array(
'base_dir' => realpath($this->parambag->get('kernel.project_dir').'/..').DIRECTORY_SEPARATOR,
'help_dir' => $this->parambag->get('dochelp_web_path'),
'prfid' => $prfid,
'prflib' => $prflib,
'cfppi_ok' => '1',
'cfppiid' => $CFPPIID,
'activ_menu' => $activ_menu,
));
}
// ===============================================================
// utilitaires litu
// ===============================================================
/**
* 2020...
* suppression des comptes vides créés avant 31-12-2014 (ok si exec après ouv.session)
* 2022-07-15
* suppression des comptes vides créés avant 31-12-2016 (ok si exec après ouv.session)
* suppression des simu prosper, fusion, cif vides
*/
#[Route(path: '/supUsrVide', name: 'supUsrVide')]
public function supUsrVide(Request $request)
{
// ATTENTION : à ne pas utilier ou mettre à niveau avec PRB...
$em = $doctrine->getManager();
$user = $this->getUser();
if($user->getusrid() == 11){ // vérif me
$nb_usr_supp=0;$nb_pro_supp=0;$nb_fu_supp=0;$nb_cif_supp=0;
$query = $em->getRepository(usr::class)->createQueryBuilder('usr');
$query
->select('usr')
->where('usr.usrdatcre <= :datcrelimit')
// ->setParameter('datcrelimit' , '2014-12-31')
->setParameter('datcrelimit' , '2016-12-31')
->orderBy('usr.usrdatcre', 'ASC')
;
$usrs = $query->getQuery()->getResult();
foreach($usrs as $usr){
$usrasupp = true;
// =================================== PROSPER
$pros = $em->getRepository(pro::class)->createQueryBuilder('pro')
->select('pro')
->where('pro.usrid = :usrid')
->setParameter('usrid' , $usr->getusrid())
->orderBy('pro.proid', 'ASC')
->getQuery()->getResult()
;
foreach($pros as $pro){
$proan = $em->getRepository(proan::class)->createQueryBuilder('proan')
->select('SUM(proan.PROAN_T1_a01+proan.PROAN_T1_a02+proan.PROAN_T1_a03+proan.PROAN_T1_a04+proan.PROAN_T1_a05+proan.PROAN_T1_a51+proan.PROAN_T1_b01+proan.PROAN_T1_b02+proan.PROAN_T1_b03+proan.PROAN_T1_b04+proan.PROAN_T1_b05+proan.PROAN_T1_c01+proan.PROAN_T1_c02+proan.PROAN_T1_c51+proan.PROAN_T1_x51+proan.PROAN_T1_x52+proan.PROAN_T2_a01+proan.PROAN_T2_a02+proan.PROAN_T2_a03+proan.PROAN_T2_a04+proan.PROAN_T2_a51+proan.PROAN_T2_a52+proan.PROAN_T2_a56+proan.PROAN_T2_a57+proan.PROAN_T3_a01+proan.PROAN_T3_a02+proan.PROAN_T3_a03+proan.PROAN_T3_a04+proan.PROAN_T3_a05+proan.PROAN_T3_a06+proan.PROAN_T3_a51+proan.PROAN_T3_b01+proan.PROAN_T3_b02+proan.PROAN_T3_b03+proan.PROAN_T3_b04+proan.PROAN_T3_b05+proan.PROAN_T3_b06+proan.PROAN_T3_b07+proan.PROAN_T3_b08+proan.PROAN_T3_b51+proan.PROAN_T3_x51+proan.PROAN_T4_a01+proan.PROAN_T4_a02+proan.PROAN_T4_a03+proan.PROAN_T4_a04+proan.PROAN_T4_a51+proan.PROAN_T4_a52) AS TOTO')
->where('proan.proid = :proid')
->setParameter('proid',$pro->getproid())
->groupBy('proan.proid')
->getQuery()
;
if($proan->getSingleScalarResult()==0){ // PRO à supprimer
foreach($pro->getPROANS() as $proan_a_sup){
$pro->removePROAN($proan_a_sup);
}
$em->persist($pro);
$em->flush();
$pro_a_supp = $em->getRepository(pro::class)->findOneBy(array('proid'=>$pro->getproid()));
$em->remove($pro_a_supp);
$em->flush();
$nb_pro_supp++;
}else{
$usrasupp = false; // USR à maintenir
}
}
// =================================== FUSION
$fus = $em->getRepository(fu_sim::class)->createQueryBuilder('fusim')
->select('fusim')
->where('fusim.usrid = :usrid')
->setParameter('usrid' , $usr->getusrid())
->orderBy('fusim.SIMID', 'ASC')
->getQuery()->getResult()
;
foreach($fus as $fu){
$fucomm = $em->getRepository(fu_comm::class)->createQueryBuilder('fucomm')
->select('SUM(fucomm.COMTHBAS+fucomm.COMTHPRO+fucomm.COMFBBAS+fucomm.COMFBPRO+fucomm.COMFNBBAS+fucomm.COMFNBPRO+fucomm.COMCFEBAS+fucomm.COMCFEPRO+fucomm.COMCVAE+fucomm.COMIFER+fucomm.COMTAFNB+fucomm.COMTASCOM+fucomm.COMDCRTP+fucomm.COMFNGIR+fucomm.COMCPS+fucomm.COMACNE) AS TOTO')
->where('fucomm.SIMID = :SIMID')
->setParameter('SIMID',$fu->getSIMID())
->groupBy('fucomm.SIMID')
->getQuery()
;
$totcomm = $fucomm->getOneOrNullResult();
if($totcomm==null){
$totcomm = 0;
}
$fuepci = $em->getRepository(fu_epci::class)->createQueryBuilder('fuepci')
->select('SUM(fuepci.EPCDGFPOP+fuepci.EPCCOMNBR+fuepci.EPCDGFHAB+fuepci.EPCCIF+fuepci.EPCTHTXDPT+fuepci.EPCTHBAS+fuepci.EPCTHPRO+fuepci.EPCTHPROC+fuepci.EPCFBBAS+fuepci.EPCFBPRO+fuepci.EPCFBPROC+fuepci.EPCFNBBAS+fuepci.EPCFNBPRO+fuepci.EPCFNBPROC+fuepci.EPCCFEBAS+fuepci.EPCCFEPRO+fuepci.EPCCFEPROC+fuepci.EPCCFEZBAS+fuepci.EPCCFEZPRO+fuepci.EPCCFEEBAS+fuepci.EPCCFEEPRO+fuepci.EPCCVAE+fuepci.EPCIFER+fuepci.EPCTAFNB+fuepci.EPCTASCOM+fuepci.EPCDCRTP+fuepci.EPCFNGIR+fuepci.EPCCPS+fuepci.EPCACNE+fuepci.EPCCOMCVAE+fuepci.EPCCOMIFER+fuepci.EPCCOMTAFNB+fuepci.EPCCOMTASCOM+fuepci.EPCCOMCPS+fuepci.EPCCOMACTP+fuepci.EPCCOMCT+fuepci.EPCCOMARF+fuepci.EPCCOMCSC+fuepci.EPCCOMFNGIR+fuepci.EPCCOMDCRTP+fuepci.EPCOM+fuepci.EPCCOMOM+fuepci.EPCRASS+fuepci.EPCCOMRASS+fuepci.EPCCOMDS+fuepci.EPCDOTBAS+fuepci.EPCDOTPERE+fuepci.EPCBONIF+fuepci.EPCMAJOR+fuepci.EPCGARANT+fuepci.EPCECRET) AS TOTO')
->where('fuepci.SIMID = :SIMID')
->setParameter('SIMID',$fu->getSIMID())
->groupBy('fuepci.SIMID')
->getQuery()
;
$totepci = $fuepci->getOneOrNullResult();
if($totepci==null){
$totepci = 0;
}
if(($totcomm==0)&&($totepci==0)){ // SIM à supprimer
foreach($fu->getFUCOMMS() as $fucomm_a_sup){
$fu->removeFUCOMM($fucomm_a_sup);
}
foreach($fu->getFUEPCIS() as $fuepci_a_sup){
$fu->removeFUEPCI($fuepci_a_sup);
}
$em->persist($fu);
$em->flush();
$fu_a_supp = $em->getRepository(fu_sim::class)->findOneBy(array('SIMID'=>$fu->getSIMID()));
$em->remove($fu_a_supp);
$em->flush();
$nb_fu_supp++;
}else{
$usrasupp = false; // USR à maintenir
}
}
// =================================== CIF
$cifs = $em->getRepository(cif_sim::class)->createQueryBuilder('cifsim')
->select('cifsim')
->where('cifsim.usrid = :usrid')
->setParameter('usrid' , $usr->getusrid())
->orderBy('cifsim.SIMID', 'ASC')
->getQuery()->getResult()
;
foreach($cifs as $cif){
$cifcomm = $em->getRepository('App:CIF_COMM23')->createQueryBuilder('cifcomm')
->select('SUM(cifcomm.COMDCRTP+cifcomm.COMFNGIR+cifcomm.COMTHPX+cifcomm.COMFBPX+cifcomm.COMFNBPX+cifcomm.COMCVAE+cifcomm.COMTAFNB+cifcomm.COMCFE+cifcomm.COMIFER+cifcomm.COMTASCOM+cifcomm.COMRASS+cifcomm.COMTEOM) AS TOTO')
->where('cifcomm.SIMID = :SIMID')
->setParameter('SIMID',$cif->getSIMID())
->groupBy('cifcomm.SIMID')
->getQuery()
;
$totcomm = $cifcomm->getOneOrNullResult();
if($totcomm==null){
$totcomm = 0;
}
$repo = $em->getRepository('App:CIF_EPCI1'); // simu epci
$cifepci = $repo->createQueryBuilder('cifepci')
->select('SUM(cifepci.EPCDGFPOP+cifepci.EPCCIF) AS TOTO')
->where('cifepci.SIMID = :SIMID')
->setParameter('SIMID',$cif->getSIMID())
->groupBy('cifepci.SIMID')
->getQuery()
;
$totepci = $cifepci->getOneOrNullResult();
if($totepci==null){
$totepci = 0;
}
if(($totcomm==0)&&($totepci==0)){ // SIM à supprimer
foreach($cif->getCIFCOMM23S() as $cifcomm_a_sup){
$cif->removeCIFCOMM23($cifcomm_a_sup);
}
foreach($cif->getCIFEPCIS() as $cifepci_a_sup){
$cif->removeCIFEPCI($cifepci_a_sup);
}
$em->persist($cif);
$em->flush();
$cif_a_supp = $em->getRepository(cif_sim::class)->findOneBy(array('SIMID'=>$cif->getSIMID()));
$em->remove($cif_a_supp);
$em->flush();
$nb_cif_supp++;
}else{
$usrasupp = false; // USR à maintenir
}
}
if($usrasupp==true){
$usr_a_supp = $em->getRepository(usr::class)->findOneBy(array('usrid'=>$usr->getusrid()));
$em->remove($usr_a_supp);
$em->flush();
$nb_usr_supp++;
}
}
// Message d'information
$this->get('session')->getFlashBag()->add(
'success',
'Nb USR supp: '.$nb_usr_supp.' Nb PRO supp: '.$nb_pro_supp.' Nb FUSION supp: '.$nb_fu_supp.' Nb CIF supp: '.$nb_cif_supp
//'il faut activer la fonction en premier'
);
return $this->render('default\index.html.twig', array(
'base_dir' => realpath($this->container->getParameter('kernel.root_dir').'/..').DIRECTORY_SEPARATOR,
'help_dir' => $this->container->getParameter('dochelp_web_path'),
'prfid' => 0,
'prflib' => 'nondef',
));
}else{ // erreur réservé admin
$this->get('session')->getFlashBag()->add(
'error',
'La page demandée n\'existe pas ! (adm)'
);
// Affichage page inexistante
return $this->render('default\noway.html.twig',
array(
'linkaccueil'=> 1,
'width'=> 1200,
'height'=> 300
)
);
}
}
/**
* suppression des simulations PROSPER stériles (ok si exec après ouv.session)
* @Route("/supProSteril", name="supProSteril")
*/
public function supProSteril(Request $request)
{
$em = $this->getDoctrine()->getManager();
$user = $this->getUser();
if($user->getusrid() == 11){ // vérif me
$i=0;
$repo = $em->getRepository('App:PRO');
$pros = $repo->createQueryBuilder('pro')
->select('pro')
->orderBy('pro.proid', 'ASC')
->getQuery()
->getResult()
;
foreach($pros as $pro){
$repo = $em->getRepository('App:PROAN');
$proan = $repo->createQueryBuilder('proan')
->select('SUM(proan.PROAN_T1_a01+proan.PROAN_T1_a02+proan.PROAN_T1_a03+proan.PROAN_T1_a04+proan.PROAN_T1_a05+proan.PROAN_T1_a51+proan.PROAN_T1_b01+proan.PROAN_T1_b02+proan.PROAN_T1_b03+proan.PROAN_T1_b04+proan.PROAN_T1_b05+proan.PROAN_T1_c01+proan.PROAN_T1_c02+proan.PROAN_T1_c51+proan.PROAN_T1_x51+proan.PROAN_T1_x52+proan.PROAN_T2_a01+proan.PROAN_T2_a02+proan.PROAN_T2_a03+proan.PROAN_T2_a04+proan.PROAN_T2_a51+proan.PROAN_T2_a52+proan.PROAN_T2_a56+proan.PROAN_T2_a57+proan.PROAN_T3_a01+proan.PROAN_T3_a02+proan.PROAN_T3_a03+proan.PROAN_T3_a04+proan.PROAN_T3_a05+proan.PROAN_T3_a06+proan.PROAN_T3_a51+proan.PROAN_T3_b01+proan.PROAN_T3_b02+proan.PROAN_T3_b03+proan.PROAN_T3_b04+proan.PROAN_T3_b05+proan.PROAN_T3_b06+proan.PROAN_T3_b07+proan.PROAN_T3_b08+proan.PROAN_T3_b51+proan.PROAN_T3_x51+proan.PROAN_T4_a01+proan.PROAN_T4_a02+proan.PROAN_T4_a03+proan.PROAN_T4_a04+proan.PROAN_T4_a51+proan.PROAN_T4_a52) AS TOTO')
->where('proan.proid = :proid')
->setParameter('proid',$pro->getproid())
->groupBy('proan.proid')
->getQuery()
;
if($proan->getSingleScalarResult()==0){ // PRO à supprimer
foreach($pro->getPROANS() as $proan_a_sup){
$pro->removePROAN($proan_a_sup);
}
$em->persist($pro);
$em->flush();
$pro_a_supp = $em->getRepository('App:PRO')->findOneBy(array('proid'=>$pro->getproid()));
$em->remove($pro_a_supp);
$em->flush();
}
}
// Message d'information
$this->get('session')->getFlashBag()->add(
'success',
'Les projets PROSPER sans données ont été supprimés avec succès'
//'il faut activer la fonction en premier'
);
return $this->render('default\index.html.twig', array(
'base_dir' => realpath($this->container->getParameter('kernel.root_dir').'/..').DIRECTORY_SEPARATOR,
'help_dir' => $this->container->getParameter('dochelp_web_path'),
'prfid' => 0,
'prflib' => 'nondef',
));
}else{ // erreur réservé admin
$this->get('session')->getFlashBag()->add(
'error',
'La page demandée n\'existe pas ! (adm)'
);
// Affichage page inexistante
return $this->render('default\noway.html.twig',
array(
'linkaccueil'=> 1,
'width'=> 400,
'height'=> 100
)
);
}
}
/**
* création des couples PRF, MEN manquants
* @Route("/prfMenAcc", name="crePrfMenAcc")
*/
public function crePrfMenAcc(Request $request)
{
$em = $this->getDoctrine()->getManager();
$user = $this->getUser();
if($user->getusrid() == 11){ // vérif me
$repo = $this->getDoctrine()->getManager()->getRepository('App:PRF');
$prfs = $repo->createQueryBuilder('prf')
->select('prf')
->orderBy('prf.prfid', 'ASC')
->getQuery()
->getResult()
;
$repo = $this->getDoctrine()->getManager()->getRepository('App:MEN');
$mens = $repo->createQueryBuilder('men')
->select('men')
->orderBy('men.MENID', 'ASC')
->getQuery()
->getResult()
;
$em = $this->getDoctrine()->getManager();
foreach($prfs as $prf){
$prfid_ec = $prf->getprfid();
foreach($mens as $men){
$repo = $this->getDoctrine()->getManager()->getRepository('App:PRF_MEN');
$prf_men = $repo->createQueryBuilder('prfmen')
->select('prfmen')
->where('prfmen.prfid = :prfid')
->setParameter('prfid',$prfid_ec)
->andwhere('prfmen.MENID = :MENID')
->setParameter('MENID',$men->getMENID())
->getQuery()
->getArrayResult()
;
if(count($prf_men)==0){ // ajouter le couple sans droit
/*
$PRF_MEN = new PRF_MEN;
$PRF_MEN->setprfid($prf);
$PRF_MEN->setMENID($men);
$PRF_MEN->setPRMACC(0);
$em->persist($PRF_MEN);
$em->flush();
*/
}
}
}
// Message d'information
$this->get('session')->getFlashBag()->add(
'success',
'Les couples PRF, MEN ont été ajoutés avec succès'
//'il faut activer la fonction en premier'
);
return $this->redirect($this->generateUrl('pageaccueil'));
}else{ // erreur réservé admin
$this->get('session')->getFlashBag()->add(
'error',
'La page demandée n\'existe pas ! (adm)'
);
// Affichage page inexistante
return $this->render('default\noway.html.twig',
array(
'linkaccueil'=> 1,
'width'=> 400,
'height'=> 100
)
);
}
}
/**
* ajout du compte 011bis pour chaque CFPPIID dans CFPFBTBF + CFPFBCRO et CFTBF + CFCRO
* @Route("/addClc011bis", name="addClc011bis")
*/
public function addClc011bis(Request $request)
{
$em = $this->getDoctrine()->getManager();
$user = $this->getUser();
if($user->getusrid() == 32){ // vérif dpf
$query = $em->getRepository(CFPPI::class)->createQueryBuilder('cfppi');
$query
->select('cfppi')
;
$cfppis = $query->getQuery()->getResult();
foreach($cfppis as $key=>$cfppi){
$timeframe = $this->divservice->get_cfppitimeframe($cfppi->getCFPPIID());
$annee_deb = $timeframe['annee_deb'];
$annee_fin = $timeframe['annee_fin'];
$ppi_nbann = $timeframe['ppi_nbann'];
// a) ajout d'une classe par PPI
$query = $em->getRepository(CFPFBTBF::class)->createQueryBuilder('cfpfbtbf');
$query
->select('cfpfbtbf.TBFID')
->where('cfpfbtbf.TBFCLC = :class011bis')
->setParameter('class011bis' , '011bis')
->andwhere('cfpfbtbf.CFPPIID = :cfppiid')
->setParameter('cfppiid' , $cfppi->getCFPPIID())
;
$cfpfbtbfs = $query->getQuery()->getArrayResult();
if(count($cfpfbtbfs)<=0){ // pas exist, tu crées
// ajout d'un enrgt dans CFTBF
$cfpfbtfb = new CFPFBTBF;
$cfpfbtfb->setTBFNAT('D'); // Indic.partie cible du tableau (Dépenses ou Recettes)
$cfpfbtfb->setTBFCLC('011bis'); // Classe comptable du groupe
$cfpfbtfb->setTBFORD('3'); // N°Ordre élt dans groupe Dépenses ou Recettes
$cfpfbtfb->setTBFTIT('Economie de charges à caractère général'); // Désignation de la classe comptable
$cfpfbtfb->setTBFFLG(1); // Flag mise en service, actif ou non
$cfpfbtfb->setTBFIDX(0); // Indexation, pourcentage à appliquer au montant 1° année
$cfpfbtfb->setTBFMT(0); // Montant 1° année si TBFIDX<>0
$cfpfbtfb->setCFPPIID($cfppi);
$em->persist($cfpfbtfb);
// pour le TBF, ajout des données annuelles dans CFPFBCRO pour toute la durée du PPI
for($ann=$annee_deb;$ann<=$annee_fin;$ann++){
// ajout de 1 enrgt dans CFPFBCRO
$cfpfbcro = new CFPFBCRO;
$cfpfbcro->setCRONAN($ann); // N° de l'année
// $cfpfbcro->setCROMT(0); // Montant (null autorisé)
$cfpfbcro->setTBFID($cfpfbtfb); // réf. de la ligne du tableau Budget Fonctionnement
$em->persist($cfpfbcro);
}
}
// b) idem pour chaque projet
$query = $em->getRepository(CFPRJ::class)->createQueryBuilder('cfprj');
$query
->select('cfprj')
->where('cfprj.CFPPIID = :cfppiid')
->setParameter('cfppiid' , $cfppi->getCFPPIID())
;
$cfprjs = $query->getQuery()->getResult();
foreach($cfprjs as $key=>$cfprj){
$query = $em->getRepository(CFTBF::class)->createQueryBuilder('cftbf');
$query
->select('cftbf.TBFID')
->where('cftbf.TBFCLC = :class011bis')
->setParameter('class011bis' , '011bis')
->andwhere('cftbf.PRJID = :cfprjid')
->setParameter('cfprjid' , $cfprj->getPRJID())
;
$cftbfs = $query->getQuery()->getArrayResult();
if(count($cftbfs)<=0){ // pas exist, tu crées
// ajout d'un enrgt dans CFTBF pour chaque PRJ
$cftbf = new CFTBF;
$cftbf->setTBFNAT('D'); // Indic.partie cible du tableau (Charges)
$cftbf->setTBFCLC('011bis'); // Classe comptable du groupe
$cftbf->setTBFORD('3'); // Ordonnancement classe
$cftbf->setTBFTIT('Economie de charges à caractère général'); // Désignation de la classe comptable
$cftbf->setPRJID($cfprj);
$em->persist($cftbf);
// pour chaque TBF, ajout des données annuelles dans CFCRO pour toute la durée du projet
for($i=$cfprj->getPRJANNDEB();$i<=$cfprj->getPRJANNFIN();$i++){
// ajout de 2 enrgt dans CFCRO (Hausse et Baisse)
$cfcro = new CFCRO;
$cfcro->setCRONAN($i); // N° de l'année
$cfcro->setCROMT(null); // Montant nuul ok dorénavant ;-)
$cfcro->setTBFID($cftbf); // réf. de la ligne du tableau Budget Fonctionnement
$em->persist($cfcro);
}
}
}
$em->flush(); // pour un ppi
}
// Message d'information
$this->get('session')->getFlashBag()->add(
'success',
'Nouvelle classe 011bis ajoutée'
);
return $this->redirect($this->generateUrl('pageaccueil'));
}else{ // erreur réservé admin
$this->get('session')->getFlashBag()->add(
'error',
'La page demandée n\'existe pas ! (adm)'
);
// Affichage page inexistante
return $this->render('default\noway.html.twig',
array(
'linkaccueil'=> 1,
'width'=> 400,
'height'=> 100
)
);
}
}
/**
* cryptage des mots de passe des utilisateurs
* @Route("/usrLogPwd", name="doLogPwd")
*/
public function doLogPwd(Request $request)
{
$em = $this->getDoctrine()->getManager();
$user = $this->getUser();
if($user->getusrid() == 11){ // vérif me
$repo = $this->getDoctrine()->getManager()->getRepository('App:USR');
$usr = $repo->createQueryBuilder('usr')
->select('usr')
->orderBy('usr.username', 'ASC') // USRLOGIN
->where('usr.password is null')
->andwhere('usr.usrid = :usrid')
->setParameter('usrid', 11)
->getQuery()
->getResult()
;
foreach($usr as $u){
$hash = $this->get('security.password_encoder')->encodePassword($u, $u->getUSRPWD());
$u->setPassword($hash);
$em = $this->getDoctrine()->getManager();
$em->persist($u);
$em->flush();
}
// Message d'information
$this->get('session')->getFlashBag()->add(
'success',
'Les mots de passe des utilisateurs ont été cryptés avec succès'
);
//var_dump($this->get('session'));
return $this->redirect($this->generateUrl('pageaccueil'));
}else{ // erreur réservé admin
$this->get('session')->getFlashBag()->add(
'error',
'La page demandée n\'existe pas ! (adm)'
);
// Affichage page inexistante
return $this->render('default\noway.html.twig',
array(
'linkaccueil'=> 0,
'width'=> 400,
'height'=> 100
)
);
}
}
/**
* Récupération + mémorisation URL courante pour redirection après login
*/
#[Route(path: '/storeRedirect', name: 'storeRedirect')]
public function storeRedirect(Request $request)
{
$currentUrl = $request->query->get('uri');
if($currentUrl=='logout'){
return $this->redirect($this->generateUrl('app_logout'));
}else{
return $this->redirect($currentUrl); // à vérifier
}
}
/**
* Vérif statut de la session courante (Contrôle d'accès utilisateur), si pas OK retour login
*/
#[Route(path: '/isalive', name: 'isalive')]
public function isalive(Request $request)
{
$results = (session_status() === PHP_SESSION_ACTIVE) ? TRUE : FALSE;
$response = new Response(json_encode($results));
return $response;
}
}