<?php
declare(strict_types=1);
/**
* @author Mehrez Labidi
*/
namespace App\Form\Type\Elite;
use App\Entity\Model\Annonces;
use App\Entity\{
RaisonsCession,
Localisations,
SecteursActivite
};
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\{
ChoiceType,
TextType,
ButtonType,
HiddenType
};
use App\Form\Type\FormChoices;
use App\Helper\Utils;
use App\Form\DataTransformer\EliteRechercheAvanceeTransformer;
use Symfony\Component\DependencyInjection\ParameterBag\ContainerBagInterface;
class RechercheAvanceeType extends AbstractType {
private static $entityManager;
private static $parameters;
public function __construct(EntityManagerInterface $em, ContainerBagInterface $params, EliteRechercheAvanceeTransformer $transformer) {
self::$entityManager = $em;
self::$parameters = $params;
$this->transformer = $transformer;
}
/**
*
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options) {
/* * *************************************************************** Localisation *************************************************** */
$builder->add('id_pays', ChoiceType::class,
[
"label" => "Pays",
"required" => false,
"choices" => FormChoices::selectionnerChoisir() + self::listPays(),
"attr" => [
"class" => "form-control"
]
]);
$builder->add('id_region', ChoiceType::class,
[
"required" => false,
"choices" => FormChoices::selectionnerChoisir(),
"attr" => [
"class" => "form-control"
],
]);
$builder->add('id_departement', ChoiceType::class,
[
"required" => false,
"choices" => FormChoices::selectionnerChoisir(),
"attr" => [
"class" => "form-control"
],
]);
$builder->add('localisations_recherchees', HiddenType::class); // multi hidden
$builder->add('id_pays_exclus', ChoiceType::class,
[
"label" => "Pays",
"required" => false,
"choices" => FormChoices::selectionnerChoisir() + self::listPays(),
"attr" => [
"class" => "form-control"
]
]);
$builder->add('id_region_exclus', ChoiceType::class,
[
"required" => false,
"choices" => FormChoices::selectionnerChoisir(),
"attr" => [
"class" => "form-control"
],
]);
$builder->add('id_departement_exclus', ChoiceType::class,
[
"required" => false,
"choices" => FormChoices::selectionnerChoisir(),
"attr" => [
"class" => "form-control"
],
]);
$builder->add('localisations_exclus', HiddenType::class); // multi hidden
/* * *************************************************************** Secteur Activite *************************************************** */
$builder->add('id_secteur_activite1', ChoiceType::class,
[
"label" => "Secteur prédefini",
'required' => false,
"choices" => FormChoices::selectionnerChoisir() + self::getNomSecteurActivitieLevel1(),
"attr" => [
"autocomplete" => "off",
"class" => "form-control"
]
]
);
$builder->add('id_secteur_activite2', ChoiceType::class,
[
'required' => false,
"choices" => FormChoices::selectionnerChoisir(),
"attr" => [
"autocomplete" => "off",
"class" => "form-control"
]
]
);
$builder->add('id_secteur_activite3', ChoiceType::class,
[
'required' => false,
"choices" => FormChoices::selectionnerChoisir(),
"attr" => [
"autocomplete" => "off",
"class" => "form-control"
]
]
);
$builder->add('id_secteurs_recherches', HiddenType::class); // multi hidden
$builder->add('id_secteur_activite1_exclus', ChoiceType::class,
[
"label" => "Secteur prédefini",
'required' => false,
"choices" => FormChoices::selectionnerChoisir() + self::getNomSecteurActivitieLevel1(),
"attr" => [
"autocomplete" => "off",
"class" => "form-control"
]
]
);
$builder->add('id_secteur_activite2_exclus', ChoiceType::class,
[
'required' => false,
"choices" => FormChoices::selectionnerChoisir(),
"attr" => [
"autocomplete" => "off",
"class" => "form-control"
]
]
);
$builder->add('id_secteur_activite3_exclus', ChoiceType::class,
[
'required' => false,
"choices" => FormChoices::selectionnerChoisir(),
"attr" => [
"autocomplete" => "off",
"class" => "form-control"
]
]
);
$builder->add('id_secteurs_exclus', HiddenType::class); // multi hidden
$builder->add('mots_cle_recherche', TextType::class,
[
"required" => false,
"label" => "Mots-clés",
"attr" => [
"placeholder" => "transport, services informatiques, ... ",
"autocomplete" => "off",
"class" => "form-control"
]
]
);
/* * *************************************************************** Concernant la cession *************************************************** */
//
// Capital cédé
$builder->add('type_cession', ChoiceType::class,
[
"required" => false,
"choices" => FormChoices::selectionnerChoisir() + Utils::reverseArrayKeyValueValueKey(Annonces::$TYPE_CESSION),
"attr" => [
"class" => "form-control"
],
]);
// Raison de la cession
$builder->add('id_raison_cession', ChoiceType::class,
[
"required" => false,
"choices" => FormChoices::selectionnerChoisir() + self::listRaisonCession(),
"attr" => [
"class" => "form-control"
],
]);
// Immobilier à vendre
$builder->add('immobilier_dans_prix_cession',
ChoiceType::class,
[
'choices' => Utils::reverseArrayKeyValueValueKey(Annonces::$IMMOBILIER_DANS_PRIX_CESSION),
'expanded' => true,
'multiple' => false,
]
);
// Prix de cession
$builder->add('prix_cession_min', HiddenType::class, ["attr" => ["autocomplete" => "off", "class" => "form-control", "id" => "prix_cession_min"]]);
$builder->add('prix_cession_max', HiddenType::class, ["attr" => ["autocomplete" => "off", "class" => "form-control", "id" => "prix_cession_max"]]);
/* * *************************************************************************** Concernant le repreneur *************************************************** */
//Type de repreneur
$builder->add('profil_repreneur_checkbox', ChoiceType::class,
[
'choices' => Utils::reverseArrayKeyValueValueKey(Annonces::$PROFIL_REPRENEUR),
'expanded' => true,
"label" => "Type de repreneur",
'multiple' => true
]);
// Concernant le repreneur
// Apport demandé
$builder->add('apport_fp_min', HiddenType::class, ["attr" => ["autocomplete" => "off", "class" => "form-control", "id" => "apport_fp_min"]]);
$builder->add('apport_fp_max', HiddenType::class, ["attr" => ["autocomplete" => "off", "class" => "form-control", "id" => "apport_fp_max"]]);
/* * *************************************************************** Situation financière *************************************************** */
//
$builder->add('ca_n_min', HiddenType::class, ["attr" => ["autocomplete" => "off", "class" => "form-control", "id" => "ca_n_min"]]);
$builder->add('ca_n_max', HiddenType::class, ["attr" => ["autocomplete" => "off", "class" => "form-control", "id" => "ca_n_max"]]);
$builder->add('nb_personnes_min', HiddenType::class, ["attr" => ["autocomplete" => "off", "class" => "form-control", "id" => "nb_personnes_min"]]);
$builder->add('nb_personnes_max', HiddenType::class, ["attr" => ["autocomplete" => "off", "class" => "form-control", "id" => "nb_personnes_max"]]);
$builder->add('redressement_judiciaire',
ChoiceType::class,
[
'choices' => array_merge(Utils::reverseArrayKeyValueValueKey(Annonces::$REDRESSEMENT_JUDICIAIRE), ["indifférent" => ""]),
'expanded' => true,
'multiple' => false,
]
);
/* * *************************************************************** Mes critères ELITE *************************************************** */
$builder->add('criteres', HiddenType::class,
[
"required" => false,
"attr" => [
"id" => "criteres",
"class" => "form-control"
]
]
);
/* * *************************************************************** *************************************************** */
$builder->add('submit', ButtonType::class,
[
"label" => "Valider mes critères",
"attr" => [
"class" => "button-rond bleu_fusacq",
"id" => "submit"
]
]);
$builder->addViewTransformer($this->transformer, true);
}
/**
* @param OptionsResolver $resolver
* @return void
*/
public function configureOptions(OptionsResolver $resolver) {
$resolver->setDefaults(
[
'data_class' => null,
'csrf_protection' => true,
'allow_extra_fields' => true
]
);
}
/**
* @return string
*/
public function getBlockPrefix() {
return '';
}
/**
* @return type
*/
private static function listRaisonCession(): array {
$result = self::$entityManager->getRepository(RaisonsCession::class)->getAll();
return !empty($result) ? array_combine(array_column($result, "nom_raison_cession"), array_column($result, "id_raison_cession")) : [];
}
/**
*
* @return type
*/
public static function listPays(): array {
$prioList = self::$parameters->get('app.pays_prioritaires_form');
$defaultList = self::$entityManager->getRepository(Localisations::class)->getListPays();
$list = $prio = [];
foreach ($defaultList as $pays) {
if (in_array($pays["id_localisation"], $prioList)) {
$prio[] = $pays;
} else {
$list[] = $pays;
}
}
switch ($_SESSION['codePays']) { // pour mettre en avant l indicatif du pays du site
case 'fr':
$arr = ['id_localisation' => '33', 'nom_localisation' => 'France'];
$prio = $prio + [count($prio) => $arr];
$prio = array_unique(array_reverse($prio), SORT_REGULAR);
break;
case 'ca':
$arr = ['id_localisation' => '01', 'nom_localisation' => 'Canada'];
$prio = $prio + [count($prio) => $arr];
$prio = array_unique(array_reverse($prio), SORT_REGULAR);
break;
case 'tn':
$arr = ['id_localisation' => '216', 'nom_localisation' => 'Tunisie'];
$prio = $prio + [count($prio) => $arr];
$prio = array_unique(array_reverse($prio), SORT_REGULAR);
break;
case 'be':
$arr = ['id_localisation' => '32', 'nom_localisation' => 'Belgique'];
$prio = $prio + [count($prio) => $arr];
$prio = array_unique(array_reverse($prio), SORT_REGULAR);
break;
case 'ch':
$arr = ['id_localisation' => '41', 'nom_localisation' => 'Suisse'];
$prio = $prio + [count($prio) => $arr];
$prio = array_unique(array_reverse($prio), SORT_REGULAR);
break;
}
$result = array_merge($prio, $list);
return !empty($result) ? array_combine(array_column($result, "nom_localisation"), array_column($result, "id_localisation")) : [];
}
/**
* @return type
*/
public static function getNomSecteurActivitieLevel1(): array {
$result = self::$entityManager->getRepository(SecteursActivite::class)->getNomSecteurActivitieLevel1();
return !empty($result) ? array_combine(array_column($result, "nomSecteurActivite"), array_column($result, "idSecteurActivite")) : [];
}
}