src/Form/Type/Elite/RechercheAvanceeType.php line 31

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. /**
  4.  * @author Mehrez Labidi
  5.  */
  6. namespace App\Form\Type\Elite;
  7. use App\Entity\Model\Annonces;
  8. use App\Entity\{
  9.     RaisonsCession,
  10.     Localisations,
  11.     SecteursActivite
  12. };
  13. use Doctrine\ORM\EntityManagerInterface;
  14. use Symfony\Component\Form\AbstractType;
  15. use Symfony\Component\Form\FormBuilderInterface;
  16. use Symfony\Component\OptionsResolver\OptionsResolver;
  17. use Symfony\Component\Form\Extension\Core\Type\{
  18.     ChoiceType,
  19.     TextType,
  20.     ButtonType,
  21.     HiddenType
  22. };
  23. use App\Form\Type\FormChoices;
  24. use App\Helper\Utils;
  25. use App\Form\DataTransformer\EliteRechercheAvanceeTransformer;
  26. use Symfony\Component\DependencyInjection\ParameterBag\ContainerBagInterface;
  27. class RechercheAvanceeType extends AbstractType {
  28.     private static $entityManager;
  29.     private static $parameters;
  30.     public function __construct(EntityManagerInterface $emContainerBagInterface $paramsEliteRechercheAvanceeTransformer $transformer) {
  31.         self::$entityManager $em;
  32.         self::$parameters $params;
  33.         $this->transformer $transformer;
  34.     }
  35.     /**
  36.      *
  37.      * @param FormBuilderInterface $builder
  38.      * @param array $options
  39.      */
  40.     public function buildForm(FormBuilderInterface $builder, array $options) {
  41.         /*         * *************************************************************** Localisation *************************************************** */
  42.         $builder->add('id_pays'ChoiceType::class,
  43.                 [
  44.                     "label" => "Pays",
  45.                     "required" => false,
  46.                     "choices" => FormChoices::selectionnerChoisir() + self::listPays(),
  47.                     "attr" => [
  48.                         "class" => "form-control"
  49.                     ]
  50.         ]);
  51.         $builder->add('id_region'ChoiceType::class,
  52.                 [
  53.                     "required" => false,
  54.                     "choices" => FormChoices::selectionnerChoisir(),
  55.                     "attr" => [
  56.                         "class" => "form-control"
  57.                     ],
  58.         ]);
  59.         $builder->add('id_departement'ChoiceType::class,
  60.                 [
  61.                     "required" => false,
  62.                     "choices" => FormChoices::selectionnerChoisir(),
  63.                     "attr" => [
  64.                         "class" => "form-control"
  65.                     ],
  66.         ]);
  67.         $builder->add('localisations_recherchees'HiddenType::class); // multi hidden
  68.         $builder->add('id_pays_exclus'ChoiceType::class,
  69.                 [
  70.                     "label" => "Pays",
  71.                     "required" => false,
  72.                     "choices" => FormChoices::selectionnerChoisir() + self::listPays(),
  73.                     "attr" => [
  74.                         "class" => "form-control"
  75.                     ]
  76.         ]);
  77.         $builder->add('id_region_exclus'ChoiceType::class,
  78.                 [
  79.                     "required" => false,
  80.                     "choices" => FormChoices::selectionnerChoisir(),
  81.                     "attr" => [
  82.                         "class" => "form-control"
  83.                     ],
  84.         ]);
  85.         $builder->add('id_departement_exclus'ChoiceType::class,
  86.                 [
  87.                     "required" => false,
  88.                     "choices" => FormChoices::selectionnerChoisir(),
  89.                     "attr" => [
  90.                         "class" => "form-control"
  91.                     ],
  92.         ]);
  93.         $builder->add('localisations_exclus'HiddenType::class); // multi hidden
  94.         /*         * *************************************************************** Secteur Activite *************************************************** */
  95.         $builder->add('id_secteur_activite1'ChoiceType::class,
  96.                 [
  97.                     "label" => "Secteur prédefini",
  98.                     'required' => false,
  99.                     "choices" => FormChoices::selectionnerChoisir() + self::getNomSecteurActivitieLevel1(),
  100.                     "attr" => [
  101.                         "autocomplete" => "off",
  102.                         "class" => "form-control"
  103.                     ]
  104.                 ]
  105.         );
  106.         $builder->add('id_secteur_activite2'ChoiceType::class,
  107.                 [
  108.                     'required' => false,
  109.                     "choices" => FormChoices::selectionnerChoisir(),
  110.                     "attr" => [
  111.                         "autocomplete" => "off",
  112.                         "class" => "form-control"
  113.                     ]
  114.                 ]
  115.         );
  116.         $builder->add('id_secteur_activite3'ChoiceType::class,
  117.                 [
  118.                     'required' => false,
  119.                     "choices" => FormChoices::selectionnerChoisir(),
  120.                     "attr" => [
  121.                         "autocomplete" => "off",
  122.                         "class" => "form-control"
  123.                     ]
  124.                 ]
  125.         );
  126.         $builder->add('id_secteurs_recherches'HiddenType::class); // multi hidden
  127.         $builder->add('id_secteur_activite1_exclus'ChoiceType::class,
  128.                 [
  129.                     "label" => "Secteur prédefini",
  130.                     'required' => false,
  131.                     "choices" => FormChoices::selectionnerChoisir() + self::getNomSecteurActivitieLevel1(),
  132.                     "attr" => [
  133.                         "autocomplete" => "off",
  134.                         "class" => "form-control"
  135.                     ]
  136.                 ]
  137.         );
  138.         $builder->add('id_secteur_activite2_exclus'ChoiceType::class,
  139.                 [
  140.                     'required' => false,
  141.                     "choices" => FormChoices::selectionnerChoisir(),
  142.                     "attr" => [
  143.                         "autocomplete" => "off",
  144.                         "class" => "form-control"
  145.                     ]
  146.                 ]
  147.         );
  148.         $builder->add('id_secteur_activite3_exclus'ChoiceType::class,
  149.                 [
  150.                     'required' => false,
  151.                     "choices" => FormChoices::selectionnerChoisir(),
  152.                     "attr" => [
  153.                         "autocomplete" => "off",
  154.                         "class" => "form-control"
  155.                     ]
  156.                 ]
  157.         );
  158.         $builder->add('id_secteurs_exclus'HiddenType::class); // multi hidden
  159.         $builder->add('mots_cle_recherche'TextType::class,
  160.                 [
  161.                     "required" => false,
  162.                     "label" => "Mots-clés",
  163.                     "attr" => [
  164.                         "placeholder" => "transport, services informatiques, ... ",
  165.                         "autocomplete" => "off",
  166.                         "class" => "form-control"
  167.                     ]
  168.                 ]
  169.         );
  170.         /*         * *************************************************************** Concernant la cession *************************************************** */
  171.         //          
  172.         // Capital cédé
  173.         $builder->add('type_cession'ChoiceType::class,
  174.                 [
  175.                     "required" => false,
  176.                     "choices" => FormChoices::selectionnerChoisir() + Utils::reverseArrayKeyValueValueKey(Annonces::$TYPE_CESSION),
  177.                     "attr" => [
  178.                         "class" => "form-control"
  179.                     ],
  180.         ]);
  181.         // Raison de la cession
  182.         $builder->add('id_raison_cession'ChoiceType::class,
  183.                 [
  184.                     "required" => false,
  185.                     "choices" => FormChoices::selectionnerChoisir() + self::listRaisonCession(),
  186.                     "attr" => [
  187.                         "class" => "form-control"
  188.                     ],
  189.         ]);
  190.         // Immobilier à vendre
  191.         $builder->add('immobilier_dans_prix_cession',
  192.                 ChoiceType::class,
  193.                 [
  194.                     'choices' => Utils::reverseArrayKeyValueValueKey(Annonces::$IMMOBILIER_DANS_PRIX_CESSION),
  195.                     'expanded' => true,
  196.                     'multiple' => false,
  197.                 ]
  198.         );
  199.         // Prix de cession
  200.         $builder->add('prix_cession_min'HiddenType::class, ["attr" => ["autocomplete" => "off""class" => "form-control""id" => "prix_cession_min"]]);
  201.         $builder->add('prix_cession_max'HiddenType::class, ["attr" => ["autocomplete" => "off""class" => "form-control""id" => "prix_cession_max"]]);
  202.         /*         * *************************************************************************** Concernant le repreneur *************************************************** */
  203.         //Type de repreneur
  204.         $builder->add('profil_repreneur_checkbox'ChoiceType::class,
  205.                 [
  206.                     'choices' => Utils::reverseArrayKeyValueValueKey(Annonces::$PROFIL_REPRENEUR),
  207.                     'expanded' => true,
  208.                     "label" => "Type de repreneur",
  209.                     'multiple' => true
  210.         ]);
  211.         //          Concernant le repreneur
  212.         // Apport demandé
  213.         $builder->add('apport_fp_min'HiddenType::class, ["attr" => ["autocomplete" => "off""class" => "form-control""id" => "apport_fp_min"]]);
  214.         $builder->add('apport_fp_max'HiddenType::class, ["attr" => ["autocomplete" => "off""class" => "form-control""id" => "apport_fp_max"]]);
  215.         /*         * *************************************************************** Situation financière *************************************************** */
  216.         //          
  217.         $builder->add('ca_n_min'HiddenType::class, ["attr" => ["autocomplete" => "off""class" => "form-control""id" => "ca_n_min"]]);
  218.         $builder->add('ca_n_max'HiddenType::class, ["attr" => ["autocomplete" => "off""class" => "form-control""id" => "ca_n_max"]]);
  219.         $builder->add('nb_personnes_min'HiddenType::class, ["attr" => ["autocomplete" => "off""class" => "form-control""id" => "nb_personnes_min"]]);
  220.         $builder->add('nb_personnes_max'HiddenType::class, ["attr" => ["autocomplete" => "off""class" => "form-control""id" => "nb_personnes_max"]]);
  221.         $builder->add('redressement_judiciaire',
  222.                 ChoiceType::class,
  223.                 [
  224.                     'choices' => array_merge(Utils::reverseArrayKeyValueValueKey(Annonces::$REDRESSEMENT_JUDICIAIRE), ["indifférent" => ""]),
  225.                     'expanded' => true,
  226.                     'multiple' => false,
  227.                 ]
  228.         );
  229.         /*         * *************************************************************** Mes critères ELITE *************************************************** */
  230.         $builder->add('criteres'HiddenType::class,
  231.                 [
  232.                     "required" => false,
  233.                     "attr" => [
  234.                         "id" => "criteres",
  235.                         "class" => "form-control"
  236.                     ]
  237.                 ]
  238.         );
  239.         /*         * ***************************************************************  *************************************************** */
  240.         $builder->add('submit'ButtonType::class,
  241.                 [
  242.                     "label" => "Valider mes critères",
  243.                     "attr" => [
  244.                         "class" => "button-rond bleu_fusacq",
  245.                         "id" => "submit"
  246.                     ]
  247.         ]);
  248.         $builder->addViewTransformer($this->transformertrue);
  249.     }
  250.     /**
  251.      * @param OptionsResolver $resolver
  252.      * @return void
  253.      */
  254.     public function configureOptions(OptionsResolver $resolver) {
  255.         $resolver->setDefaults(
  256.                 [
  257.                     'data_class' => null,
  258.                     'csrf_protection' => true,
  259.                     'allow_extra_fields' => true
  260.                 ]
  261.         );
  262.     }
  263.     /**
  264.      * @return string
  265.      */
  266.     public function getBlockPrefix() {
  267.         return '';
  268.     }
  269.     /**
  270.      * @return type
  271.      */
  272.     private static function listRaisonCession(): array {
  273.         $result self::$entityManager->getRepository(RaisonsCession::class)->getAll();
  274.         return !empty($result) ? array_combine(array_column($result"nom_raison_cession"), array_column($result"id_raison_cession")) : [];
  275.     }
  276.     /**
  277.      *
  278.      * @return type
  279.      */
  280.     public static function listPays(): array {
  281.         $prioList self::$parameters->get('app.pays_prioritaires_form');
  282.         $defaultList self::$entityManager->getRepository(Localisations::class)->getListPays();
  283.         $list $prio = [];
  284.         foreach ($defaultList as $pays) {
  285.             if (in_array($pays["id_localisation"], $prioList)) {
  286.                 $prio[] = $pays;
  287.             } else {
  288.                 $list[] = $pays;
  289.             }
  290.         }
  291.         switch ($_SESSION['codePays']) { // pour mettre en avant l indicatif du pays du site
  292.             case 'fr':
  293.                 $arr = ['id_localisation' => '33''nom_localisation' => 'France'];
  294.                 $prio $prio + [count($prio) => $arr];
  295.                 $prio array_unique(array_reverse($prio), SORT_REGULAR);
  296.                 break;
  297.             case 'ca':
  298.                 $arr = ['id_localisation' => '01''nom_localisation' => 'Canada'];
  299.                 $prio $prio + [count($prio) => $arr];
  300.                 $prio array_unique(array_reverse($prio), SORT_REGULAR);
  301.                 break;
  302.             case 'tn':
  303.                 $arr = ['id_localisation' => '216''nom_localisation' => 'Tunisie'];
  304.                 $prio $prio + [count($prio) => $arr];
  305.                 $prio array_unique(array_reverse($prio), SORT_REGULAR);
  306.                 break;
  307.             case 'be':
  308.                 $arr = ['id_localisation' => '32''nom_localisation' => 'Belgique'];
  309.                 $prio $prio + [count($prio) => $arr];
  310.                 $prio array_unique(array_reverse($prio), SORT_REGULAR);
  311.                 break;
  312.             case 'ch':
  313.                 $arr = ['id_localisation' => '41''nom_localisation' => 'Suisse'];
  314.                 $prio $prio + [count($prio) => $arr];
  315.                 $prio array_unique(array_reverse($prio), SORT_REGULAR);
  316.                 break;
  317.         }
  318.         $result array_merge($prio$list);
  319.         return !empty($result) ? array_combine(array_column($result"nom_localisation"), array_column($result"id_localisation")) : [];
  320.     }
  321.     /**
  322.      * @return type
  323.      */
  324.     public static function getNomSecteurActivitieLevel1(): array {
  325.         $result self::$entityManager->getRepository(SecteursActivite::class)->getNomSecteurActivitieLevel1();
  326.         return !empty($result) ? array_combine(array_column($result"nomSecteurActivite"), array_column($result"idSecteurActivite")) : [];
  327.     }
  328. }