src/Repository/InscritRepository.php line 47

Open in your IDE?
  1. <?php
  2. namespace App\Repository;
  3. use App\Entity\Inscrit;
  4. use App\Entity\Site;
  5. use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
  6. use Doctrine\ORM\Query;
  7. use Doctrine\Persistence\ManagerRegistry;
  8. /**
  9.  * @extends ServiceEntityRepository<Inscrit>
  10.  *
  11.  * @method Inscrit|null find($id, $lockMode = null, $lockVersion = null)
  12.  * @method Inscrit|null findOneBy(array $criteria, array $orderBy = null)
  13.  * @method Inscrit[]    findAll()
  14.  * @method Inscrit[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
  15.  */
  16. class InscritRepository extends ServiceEntityRepository
  17. {
  18.     public function __construct(ManagerRegistry $registry)
  19.     {
  20.         parent::__construct($registryInscrit::class);
  21.     }
  22.     public function add(Inscrit $entitybool $flush false): void
  23.     {
  24.         $this->getEntityManager()->persist($entity);
  25.         if ($flush) {
  26.             $this->getEntityManager()->flush();
  27.         }
  28.     }
  29.     public function remove(Inscrit $entitybool $flush false): void
  30.     {
  31.         $this->getEntityManager()->remove($entity);
  32.         if ($flush) {
  33.             $this->getEntityManager()->flush();
  34.         }
  35.     }
  36. //    /**
  37. //     * @return Inscrit[] Returns an array of Inscrit objects
  38. //     */
  39.     public function findBySessionNotStart($site null$statut): array
  40.     {
  41.         $results$this->createQueryBuilder('i')
  42.             //->andWhere('i.session = :val')
  43.             //->setParameter('val', $value)
  44.             ->andWhere('i.isdelete = false');
  45.             if($statut != 'all'){
  46.                 $results->join('i.session''s''WITH''s.status = :statut')
  47.                 ->setParameter('statut'$statut);
  48.             }
  49.             //->setMaxResults(10)
  50.             if($site != null){
  51.                 $results->innerJoin('i.site','ss','with','i.site = :site')
  52.                         ->setParameter('site'$site);
  53.             }         
  54.         $results->orderBy('i.id''DESC');
  55.         return $results->getQuery()->getResult();
  56.     }
  57.     public function findBySessionNotStartTier($id): array
  58.     {
  59.         return $this->createQueryBuilder('i')
  60.             ->andWhere('i.tier = :val')
  61.             ->setParameter('val'$id)
  62.             ->andWhere('i.isdelete = false')
  63.             ->join('i.session''s''WITH''s.status = 1')
  64.             ->orderBy('i.id''DESC')
  65.             //->setMaxResults(10)
  66.             ->getQuery()
  67.             ->getResult()
  68.         ;
  69.     }
  70.     public function findInscritWithoutDiplome($session){
  71.         $db $this->getEntityManager(); //WHERE 
  72.         $sql $db->createQuery('
  73.             SELECT i,t from App\Entity\Inscrit i
  74.             INNER JOIN i.tier t
  75.             where i.session = :session
  76.             and i.statutinscrit = 2
  77.             and i.id not in (select identity(d.inscrit) from App\Entity\Diplome d where d.session =:session and d.isdelete = 0 ) 
  78.         ')->setParameter('session',$session);
  79.         $results $sql->getResult(Query::HYDRATE_ARRAY);
  80.         /*$stmt = $db->prepare($sql);
  81.         $stmt = $stmt->executeQuery(array('session' => $session));
  82.         $results = $stmt->fetchAllAssociative();*/
  83.         return $results;
  84.     }
  85.     public function findInscritSite($site){
  86.         $db $this->getEntityManager()->getConnection();
  87.         $sql 'Select 
  88.                     (SELECT count(i.id) as enattente 
  89.                         FROM `inscrit` i 
  90.                         inner join tier t on t.id = i.tier_id 
  91.                         WHERE statutinscrit_id=1 
  92.                         AND isdelete = false 
  93.                         and i.session_id 
  94.                         in (select s.id from session s where s.site_id = :site)
  95.                         ) as en_attente,
  96.                     (SELECT count(i.id) as valide 
  97.                         FROM `inscrit` i 
  98.                         inner join tier t on t.id = i.tier_id 
  99.                         WHERE statutinscrit_id <> 1 
  100.                         AND isdelete = false 
  101.                         and i.session_id 
  102.                         in (select s.id from session s where s.site_id = :site)
  103.                         ) as valide
  104.                 
  105.                 ';
  106.         $stmt $db->prepare($sql);
  107.         $stmt $stmt->executeQuery(['site' => $site]);
  108.         return $stmt->fetchAllAssociative();
  109.     }
  110.     public function findInscritSiteMonth($site){
  111.         $db $this->getEntityManager()->getConnection();
  112.         $sql '
  113.                 SELECT count(i.id) as valide, month(created_at) as month 
  114.                 FROM `inscrit` i 
  115.                 inner join tier t on t.id = i.tier_id 
  116.                 WHERE statutinscrit_id <> 1 
  117.                 AND isdelete = false
  118.                 
  119.                 and i.session_id in (select s.id from session s where s.site_id = :site) 
  120.                 
  121.                 GROUP by (month(created_at)) 
  122.                 order by month(created_at) asc 
  123.                 ';
  124.         $stmt $db->prepare($sql);
  125.         $stmt $stmt->executeQuery(['site' => $site]);
  126.         return $stmt->fetchAllAssociative();
  127.     }
  128.     /**
  129.      * //return inscriptions of a tier within user site if not admin or all
  130.      *
  131.      * @param [type] $tier
  132.      * @param [type] $datedebut
  133.      * @param [type] $datefin
  134.      * @param Site|null $site
  135.      * @return array
  136.      */
  137.     public function findByFilters($tier$datedebut$datefin, ?Site $site null): array
  138.     {
  139.         $query $this->createQueryBuilder('i')
  140.             ->join('i.uniteinscription''u')
  141.             ->join('u.carte''c')
  142.             ->andWhere('i.tier = :tier')
  143.             ->andWhere('u.createdat >= :datedebut')
  144.             ->andWhere('u.createdat <= :datefin')
  145.             ->setParameter('datedebut'$datedebut)
  146.             ->setParameter('datefin'$datefin)
  147.             ->setParameter('tier'$tier)
  148.         ;
  149.         if($site instanceof \App\Entity\Site && $site != null){
  150.             $query $query->andWhere('c.site = :user_site')
  151.                     ->setParameter('user_site'$site);
  152.         }
  153.         return $query->groupBy('u.id')
  154.                     ->orderBy('i.id''DESC')
  155.                     ->getQuery()
  156.                     ->getResult();
  157.     }
  158.     public function getWeekDigest(?Site $site null)
  159.     {
  160.         $datefin date('Y-m-d');
  161.         $datedebut date('Y-m-d'strtotime('-7 days'));
  162.         $filterinscritbysite $filtersessionbysite $filtercabysite "";
  163.         if($site instanceof \App\Entity\Site && $site != null){
  164.             $filterinscritbysite " AND inscrit.site_id = '".$site->getId()."' ";
  165.             $filtersessionbysite " AND session.site_id = '".$site->getId()."' ";
  166.             $filtercabysite " session.site_id= '".$site->getId()."' AND ";
  167.         }
  168.         $db $this->getEntityManager()->getConnection();
  169.         $sql "
  170.             SELECT (
  171.                 SELECT count(*)
  172.                 FROM inscrit
  173.                 WHERE inscrit.created_at >= '".$datedebut."' 
  174.                 AND inscrit.created_at <= '".$datefin."' 
  175.                 ".$filterinscritbysite."
  176.             ) AS nbr_inscrit,
  177.             (
  178.                 SELECT count(*)
  179.                 FROM session 
  180.                 WHERE session.start_date >='".$datedebut."' 
  181.                 AND session.start_date <= '".$datefin."'
  182.                 AND session.status_id = 2
  183.                 ".$filtersessionbysite."
  184.             ) as session_en_cours,
  185.             (
  186.                 SELECT count(*)
  187.                 FROM session 
  188.                 WHERE session.start_date >='".$datedebut."' 
  189.                 AND session.start_date <= '".$datefin."'
  190.                 AND session.status_id = 1
  191.                 ".$filtersessionbysite."
  192.             ) as session_planifie "
  193.             ;
  194.         $stmt $db->prepare($sql);
  195.         $stmt $stmt->executeQuery();
  196.         
  197.         $infos $stmt->fetchAllAssociative();
  198.         $sql "(
  199.             SELECT CONCAT(tier.firstname, ' ', tier.lastname) as inscrit_name,CONCAT(tier.telephone, ' ', tier.email) as inscrit_contact,inscrit.statutinscrit_id,tier.id as tier_id, financement.id AS financement_id, financement.type_f, financement.montant AS quote_part_montant_apres_rem, inscrit.id AS inscrit_id, type_inscrit.wording as type_inscrit_wording, status_inscrit.wording AS status_inscrit_wording, status_inscrit.position AS status_inscrit_position, COALESCE(SUM(reglement.montant), 0) as montant_regle, COALESCE(inscrit.remise,0) AS remise, (financement.montant - COALESCE(SUM(reglement.montant), 0)) AS restepayer, reglement.id AS reglement_id, session.id as session_id, type_f, '-' AS organisme_wording, session.site_id as site_id
  200.                     FROM financement 
  201.                     LEFT JOIN reglement ON (financement.id = reglement.financement_id)
  202.                     JOIN inscrit ON (financement.inscrit_id = inscrit.id) 
  203.                     JOIN type_inscrit ON(inscrit.typeinscrit_id = type_inscrit.id)
  204.                     JOIN status_inscrit ON(inscrit.statutinscrit_id = status_inscrit.id)
  205.                     JOIN session ON (inscrit.session_id = session.id)
  206.                     JOIN tier ON (inscrit.tier_id = tier.id)
  207.                     GROUP BY (financement.id)
  208.                     HAVING ".$filtercabysite." type_f=1 AND inscrit.statutinscrit_id =2
  209.                     ORDER BY financement.inscrit_id DESC
  210.             )
  211.             UNION
  212.             (
  213.             SELECT CONCAT(tier.firstname, ' ', tier.lastname) as inscrit_name,CONCAT(tier.telephone, ' ', tier.email) as inscrit_contact,inscrit.statutinscrit_id,tier.id as tier_id, financement.id AS financement_id, financement.type_f, financement.montant AS quote_part_montant_apres_rem, inscrit.id AS inscrit_id, type_inscrit.wording as type_inscrit_wording, status_inscrit.wording AS status_inscrit_wording, status_inscrit.position AS status_inscrit_position, COALESCE(SUM(reglement_facture_inscrit.montantregle), 0) as montant_regle, (COALESCE(inscrit.remise, 0) *(financement.montant/inscrit.montanttotal) ) as remise, (financement.montant - COALESCE(SUM(reglement_facture_inscrit.montantregle),0)) AS restepayer, reglement_facture_inscrit.id AS reglement_id, session.id as session_id, type_f, organisme.wwording AS organisme_wording, session.site_id as site_id
  214.                     FROM financement 
  215.                     LEFT JOIN organisme ON(financement.organisme_id = organisme.id)
  216.                     LEFT JOIN reglement_facture_inscrit ON (financement.id = reglement_facture_inscrit.financement_id)
  217.                     JOIN inscrit ON (financement.inscrit_id = inscrit.id) 
  218.                     JOIN type_inscrit ON(inscrit.typeinscrit_id = type_inscrit.id)
  219.                     JOIN status_inscrit ON(inscrit.statutinscrit_id = status_inscrit.id)
  220.                     JOIN session ON (inscrit.session_id = session.id)
  221.                     JOIN tier ON (inscrit.tier_id = tier.id)
  222.                     GROUP BY (financement.id)
  223.                     HAVING ".$filtercabysite." type_f=4 AND inscrit.statutinscrit_id =2
  224.                     ORDER BY financement.inscrit_id DESC
  225.             
  226.             )
  227.             UNION
  228.             (
  229.              SELECT CONCAT(tier.firstname, ' ', tier.lastname) as inscrit_name,CONCAT(tier.telephone, ' ', tier.email) as inscrit_contact,inscrit.statutinscrit_id,tier.id as tier_id,financement.id AS financement_id, financement.type_f, financement.montant AS quote_part_montant_apres_rem, inscrit.id AS inscrit_id, type_inscrit.wording as type_inscrit_wording, status_inscrit.wording AS status_inscrit_wording, status_inscrit.position AS status_inscrit_position, coalesce(SUM(reglement_facture_inscrit.montantregle), 0) as montant_regle, COALESCE(inscrit.remise, 0) AS remise, (financement.montant - coalesce(SUM(reglement_facture_inscrit.montantregle), 0)) AS restepayer, reglement_facture_inscrit.id AS reglement_id, session.id as session_id, type_f, entreprise.wording AS organisme_wording, session.site_id as site_id
  230.                     FROM financement
  231.                     LEFT JOIN entreprise ON (financement.entreprise_id = entreprise.id)
  232.                     LEFT JOIN reglement_facture_inscrit ON (financement.id = reglement_facture_inscrit.financement_id)
  233.                     JOIN inscrit ON (financement.inscrit_id = inscrit.id) 
  234.                     JOIN type_inscrit ON(inscrit.typeinscrit_id = type_inscrit.id)
  235.                     JOIN status_inscrit ON(inscrit.statutinscrit_id = status_inscrit.id)
  236.                     JOIN session ON (inscrit.session_id = session.id)
  237.                     JOIN tier ON (inscrit.tier_id = tier.id)
  238.                     GROUP BY (financement.id)
  239.                     HAVING ".$filtercabysite." type_f=2 AND inscrit.statutinscrit_id =2
  240.                     ORDER BY financement.inscrit_id DESC
  241.             )
  242.              UNION
  243.              (
  244.             SELECT CONCAT(tier.firstname, ' ', tier.lastname) as inscrit_name,CONCAT(tier.telephone, ' ', tier.email) as inscrit_contact,inscrit.statutinscrit_id,tier.id as tier_id, financement.id AS financement_id, financement.type_f, financement.montant AS quote_part_montant_apres_rem, inscrit.id AS inscrit_id, type_inscrit.wording as type_inscrit_wording, status_inscrit.wording AS status_inscrit_wording, status_inscrit.position AS status_inscrit_position, inscrit.montanttotal as montant_regle, COALESCE(inscrit.remise,0) AS remise,  0 AS restepayer, reglement.id AS reglement_id, session.id as session_id, type_f, 'CPF' AS organisme_wording, session.site_id as site_id
  245.                     FROM financement 
  246.                     LEFT JOIN reglement ON (financement.id = reglement.financement_id)
  247.                     JOIN inscrit ON (financement.inscrit_id = inscrit.id) 
  248.                     JOIN type_inscrit ON(inscrit.typeinscrit_id = type_inscrit.id)
  249.                     JOIN status_inscrit ON(inscrit.statutinscrit_id = status_inscrit.id)
  250.                     JOIN session ON (inscrit.session_id = session.id)
  251.                     JOIN tier ON (inscrit.tier_id = tier.id)
  252.                     GROUP BY (financement.id)
  253.                     HAVING ".$filtercabysite." type_f=3 AND inscrit.statutinscrit_id =2
  254.                     ORDER BY financement.inscrit_id DESC
  255.               )
  256.         ";
  257.         $stmt $db->prepare($sql);
  258.         $stmt $stmt->executeQuery();
  259.         $ca $stmt->fetchAllAssociative();
  260.         $tca $apresrem $rem $paye $rest 0.00;
  261.         foreach($ca as $insc)
  262.         {
  263.             $tca += (float)$insc["quote_part_montant_apres_rem"] + (float)$insc["remise"];
  264.             $rem += $insc["remise"];
  265.             $apresrem += $insc["quote_part_montant_apres_rem"];
  266.             $paye += $insc["montant_regle"];
  267.             $rest += $insc["restepayer"];
  268.         }
  269.         return array("inscrits" => $infos[0]["nbr_inscrit"], "encours" => $infos[0]["session_en_cours"], "planifie" => $infos[0]["session_planifie"], "datedebut" => $datedebut"datefin" => $datefin"ca" => $tca"remise" => $rem"apresremise" => $apresrem"paye" => $paye"reste" => $rest);
  270.     }
  271.     public function findElearningInscrits($site null): array
  272.     {
  273.         $results$this->createQueryBuilder('i')
  274.             ->andWhere('i.elearning IS NOT NULL')
  275.             ->andWhere('i.isdelete = false');
  276.             if($site != null){
  277.                 $results->innerJoin('i.site','ss','with','i.site = :site')
  278.                         ->setParameter('site'$site);
  279.             }         
  280.         $results->orderBy('i.id''DESC');
  281.         return $results->getQuery()->getResult();
  282.     }
  283.     public function findExamenInscrits($site null): array
  284.     {
  285.         $results$this->createQueryBuilder('i')
  286.             ->andWhere('i.examen IS NOT NULL')
  287.             ->andWhere('i.isdelete = false');
  288.             if($site != null){
  289.                 $results->innerJoin('i.site','ss','with','i.site = :site')
  290.                         ->setParameter('site'$site);
  291.             }         
  292.         $results->orderBy('i.id''DESC');
  293.         return $results->getQuery()->getResult();
  294.     }
  295.     public function findConduiteInscrits($site null): array
  296.     {
  297.         $results$this->createQueryBuilder('i')
  298.             ->andWhere('i.conduiteheure IS NOT NULL')
  299.             ->andWhere('i.isdelete = false');
  300.             if($site != null){
  301.                 $results->innerJoin('i.site','ss','with','i.site = :site')
  302.                         ->setParameter('site'$site);
  303.             }         
  304.         $results->orderBy('i.id''DESC');
  305.         return $results->getQuery()->getResult();
  306.     }
  307.     
  308. //    public function findOneBySomeField($value): ?Inscrit
  309. //    {
  310. //        return $this->createQueryBuilder('i')
  311. //            ->andWhere('i.exampleField = :val')
  312. //            ->setParameter('val', $value)
  313. //            ->getQuery()
  314. //            ->getOneOrNullResult()
  315. //        ;
  316. //    }
  317. }