OrganizationRepository.php 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Repository\Organization;
  4. use App\Entity\Organization\Organization;
  5. use App\Enum\Organization\PrincipalTypeEnum;
  6. use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
  7. use Doctrine\ORM\Query\ResultSetMapping;
  8. use Doctrine\Persistence\ManagerRegistry;
  9. /**
  10. * @method Organization|null find($id, $lockMode = null, $lockVersion = null)
  11. * @method Organization|null findOneBy(array $criteria, array $orderBy = null)
  12. * @method Organization[] findAll()
  13. * @method Organization[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
  14. */
  15. class OrganizationRepository extends ServiceEntityRepository
  16. {
  17. public function __construct(ManagerRegistry $registry)
  18. {
  19. parent::__construct($registry, Organization::class);
  20. }
  21. /**
  22. * Vérifie si l'organisation est un dernier parent : possède des enfants mais ces enfants ne possèdent pas d'enfant
  23. * @param Organization $organization
  24. * @return bool
  25. */
  26. public function isLastParent(Organization $organization): bool {
  27. $sql = sprintf("
  28. SELECT
  29. IF( (SELECT o.id
  30. FROM Organization as o
  31. WHERE o.id=neto.organization_id
  32. AND o.principalType IN('%s','%s','%s','%s','%s','%s')) IS NOT NULL ,0,1) AS is_last_parent
  33. FROM
  34. NetworkOrganization as neto
  35. WHERE
  36. neto.parent_id = %d
  37. and (neto.endDate is null or neto.endDate = \"0000-00-00\" or neto.endDate > CURDATE())
  38. GROUP BY is_last_parent
  39. ORDER BY is_last_parent DESC",
  40. PrincipalTypeEnum::NATIONAL_FEDERATION(),
  41. PrincipalTypeEnum::REGIONAL_FEDERATION(),
  42. PrincipalTypeEnum::LOCAL_FEDERATION(),
  43. PrincipalTypeEnum::GROUPMENT(),
  44. PrincipalTypeEnum::DEPARTEMENTAL_FEDERATION(),
  45. PrincipalTypeEnum::DELEGATION(),
  46. $organization->getId()
  47. );
  48. $rsm = new ResultSetMapping();
  49. $rsm->addScalarResult('is_last_parent', 'is_last_parent', 'integer');
  50. $query = $this->getEntityManager()->createNativeQuery($sql, $rsm);
  51. $result = $query->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY);
  52. foreach ($result as $a_tmp) {
  53. if ($a_tmp['is_last_parent']) {
  54. return true;
  55. }
  56. }
  57. return false;
  58. }
  59. }