src/Controller/PropertiesTypesPublicController.php line 14

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Repository\Reference\ReferencePropertyTypeRepository;
  4. use App\Repository\Reference\ReferencePropertyContractTypeRepository;
  5. use App\Repository\Reference\ReferencePropertyLandTypeRepository;
  6. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  7. use Symfony\Component\HttpFoundation\JsonResponse;
  8. use Symfony\Component\Routing\Annotation\Route;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use App\Entity\Reference\ReferencePropertyDestination;
  11. class PropertiesTypesPublicController extends AbstractController
  12. {
  13.     private ReferencePropertyTypeRepository $referencePropertyTypeRepository;
  14.     private ReferencePropertyContractTypeRepository $referencePropertyContractTypeRepository;
  15.     private ReferencePropertyLandTypeRepository $referencePropertyLandTypeRepository;
  16.     private EntityManagerInterface $entityManager;
  17.     public function __construct(
  18.         EntityManagerInterface $entityManager,
  19.         ReferencePropertyTypeRepository $referencePropertyTypeRepository,
  20.         ReferencePropertyContractTypeRepository $referencePropertyContractTypeRepository,
  21.         ReferencePropertyLandTypeRepository $referencePropertyLandTypeRepository
  22.     ) {
  23.         $this->entityManager $entityManager;
  24.         $this->referencePropertyTypeRepository $referencePropertyTypeRepository;
  25.         $this->referencePropertyContractTypeRepository $referencePropertyContractTypeRepository;
  26.         $this->referencePropertyLandTypeRepository $referencePropertyLandTypeRepository;
  27.     }
  28.     /**
  29.      * @Route("/api/internal/properties_types",name="properties_types")
  30.      */
  31.     public function __invoke()
  32.     {
  33.         // Récupérer toutes les destinations.
  34.         $referencePropertyDestinations $this->entityManager
  35.                                         ->getRepository(ReferencePropertyDestination::class)->findAll();
  36.         // Simplifier le tableau des destinations.
  37.         $referencePropertyDestinationsCode array_map(function ($childArray) {
  38.             return $childArray->getCode();
  39.         }, $referencePropertyDestinations);
  40.         // Récupérer toutes les types.
  41.         $propertiesTypesArray = [
  42.             'PropertyType' => $this->referencePropertyTypeRepository->findAll(),
  43.             'ContractType' => $this->referencePropertyContractTypeRepository->findAll(),
  44.             'LandType' => $this->referencePropertyLandTypeRepository->findAll()
  45.         ];
  46.         // Simplifier les tableaux des types.
  47.         foreach ($propertiesTypesArray as $key => $value) {
  48.             $arrayName $key 'Simplified';
  49.             $$arrayName array_map(function ($childArray) {
  50.                 return ["code" => $childArray->getCode(), "name" => $childArray->getName()];
  51.             }, $value);
  52.         }
  53.         // Concatenation des code domaines avec les types associées.
  54.         $propertiesTypes array_map(function ($domaine)
  55.  use ($PropertyTypeSimplified$ContractTypeSimplified$LandTypeSimplified) {
  56.             if (
  57.                 $domaine === ReferencePropertyDestination::REFERENCE_PROPERTY_DESTINATION_TYPE_CODE_DWELLING
  58.             ) {
  59.                 return array_map(function ($type) use ($domaine) {
  60.                     return ["domaineCode" => $domaine"typeCode" => $type["code"], "typeName" => $type["name"]];
  61.                 }, $PropertyTypeSimplified);
  62.             } elseif (
  63.                 $domaine === ReferencePropertyDestination::REFERENCE_PROPERTY_DESTINATION_TYPE_CODE_COMMERCIAL_PROPERTY
  64.             ) {
  65.                 return array_map(function ($type) use ($domaine) {
  66.                     return ["domaineCode" => $domaine"typeCode" => $type["code"], "typeName" => $type["name"]];
  67.                 }, $ContractTypeSimplified);
  68.             } elseif (
  69.                 $domaine === ReferencePropertyDestination::REFERENCE_PROPERTY_DESTINATION_TYPE_CODE_LOT
  70.             ) {
  71.                 return array_map(function ($type) use ($domaine) {
  72.                     return ["domaineCode" => $domaine"typeCode" => $type["code"], "typeName" => $type["name"]];
  73.                 }, $LandTypeSimplified);
  74.             }
  75.         }, $referencePropertyDestinationsCode);
  76.         // Simplification de résultats.
  77.         $simplifiedPropertiesTypeArray = [];
  78.         foreach ($propertiesTypes as $subArray) {
  79.             $domaineCode $subArray[0]['domaineCode'];
  80.             foreach ($subArray as $item) {
  81.                 $typeCode $item['typeCode'];
  82.                 $typeName $item['typeName'];
  83.                 $simplifiedPropertiesTypeArray[$domaineCode '.' $typeCode] = $typeName;
  84.             }
  85.         }
  86.         return new JsonResponse($simplifiedPropertiesTypeArray);
  87.     }
  88. }