<?php
declare(strict_types=1);
/**
* @Description: validation dynamique depot annonce acquisition : type acquereur perrsonne / societe
* @author Mehrez Labidi
*/
namespace App\Form\Type\DepotAnnonce;
use App\Services\API\ClientAPI;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use App\Validator\Constraints\Annee;
use App\Validator\Constraints\Montant;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Constraints\NotBlank;
use App\Form\Type\FormChoices;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use App\Form\DataTransformer\DataAnnonceTransformer;
class ValidatorTypeAcquereur implements EventSubscriberInterface {
/**
*
* @var type
*/
private $clientAPI;
/**
* @var DataAnnonceTransformer
*/
private $dataAnnonceTransformer;
public function __construct( DataAnnonceTransformer $dataAnnonceTransformer,clientAPI $clientAPI ) {
$this->dataAnnonceTransformer = $dataAnnonceTransformer;
$this->clientAPI = $clientAPI;
}
/**
* @return string[]
*/
public static function getSubscribedEvents(): array {
return [
FormEvents::PRE_SET_DATA => 'onPreSetData',
FormEvents::PRE_SUBMIT => 'onPreSubmit'
];
}
/**
*
* @param FormEvent $event
* @return void
*/
public function onPreSetData(FormEvent $event): void {
$this->validation($event);
}
/**
*
* @param FormEvent $event
* @return void
*/
public function onPreSubmit(FormEvent $event): void {
$this->validation($event);
}
/**
*
* @param type $event
*/
private function validation($event) {
$user = $event->getData();
$form = $event->getForm();
if (!empty($user['type_acquereur'])) {
// secteur_activite : 3 niveaux
$secteurActivite1 = FormChoices::selectionnerChoisir() + array_combine(
array_column($this->clientAPI->secteurActiviteFusacq(0), "nom_secteur_activite"),
array_column($this->clientAPI->secteurActiviteFusacq(0), "id_secteur_activite")
);
// la liste depend est un retour API
$form->add('id_secteur_activite1', ChoiceType::class,
[
'required' => true,
"constraints" => [new NotBlank(["message" => "Le champ secteur d'activite est obligatoire"])],
"choices" => $secteurActivite1,
"attr" => ["autocomplete" => "off"]
]) ;
// la liste depend du choix id_secteur_activite1
// $form->add('id_secteur_activite2', ChoiceType::class,
// [
// 'required' => false,
// "choices" => [],
// "attr" => ["autocomplete" => "off"]
// ]
// )->addEventSubscriber(new SecteurActivite2Listener($this->secteursActiviteManagers));
//
// // la liste depend du choix id_secteur_activite2
// $form->add('id_secteur_activite3',
// ChoiceType::class,
// [
// 'required' => false,
// "choices" => [],
// "attr" => ["autocomplete" => "off"]
// ]
// )->addEventSubscriber(new SecteurActivite3Listener($this->secteursActiviteManagers));
if ($user['type_acquereur'] == "personne") {
$form->add('date_creation_societe', TextType::class, ["constraints" => [new Annee()], "attr" => ["autocomplete" => "off"]]);
$form->add('ca_societe', TextType::class,
[
"required" => true,
"constraints" => [
new Assert\Length(['max' => 100, 'maxMessage' => "Le champ Chiffre d'affaires est trop long"])
], "attr" => ["autocomplete" => "off"]
]);
// obligatoire
$form->add('annee_naissance_repreneur', TextType::class, [
"constraints" => [
new Annee(),
new NotBlank(["message" => "Le champ année de naissance repreneur est obligatoire"])],
"attr" => ["autocomplete" => "off"]
]);
// obligatoire
$form->add('apport_perso_repreneur', TextType::class,
["constraints" =>
[
new NotBlank(["message" => "Le champ montant de l'apport personnel du repreneur est obligatoire"])
], "attr" => ["autocomplete" => "off"]
]);
// obligatoire
$form->add('formation_repreneur', TextareaType::class,
[
"constraints" => [
new NotBlank(["message" => "Le champ formation du repreneur est obligatoire"]),
new Assert\Length(['max' => 3000, 'maxMessage' => "Le champ Formation Repreneur est trop long "])
],
"attr" => ["rows" => 8, "placeholder" => "", "autocomplete" => "off"]
]
);
// obligatoire
$form->add('parcours_pro_repreneur', TextareaType::class,
[
"constraints" => [
new NotBlank(["message" => "Le champ Parcours professionnel du repreneur est obligatoire"]),
new Assert\Length(['max' => 3000, 'maxMessage' => "Le champ Parcours Pro Repreneur est trop long "])
],
"attr" => ["rows" => 8, "placeholder" => "", "autocomplete" => "off"]
]
);
$form->add('res_net_societe', TextType::class,
[
"required" => true,
"constraints" => [
new Assert\Length(['max' => 100, 'maxMessage' => "Le champ Résultat Net est trop long"])
], "attr" => ["autocomplete" => "off"]
]);
$form->add('nb_personnes_societe', TextType::class,
[
"required" => true,
"constraints" => [
new Assert\Length(['max' => 100, 'maxMessage' => "Le champ Nombre de collaborateurs est trop long"])
], "attr" => ["autocomplete" => "off"]
]);
$form->add('description_activite_societe', TextareaType::class,
["constraints" => [
new Assert\Length(['max' => 3000, 'maxMessage' => "Le champ description de l'activite societe est trop long"]),
],
"attr" => ["rows" => 8, "placeholder" => "", "autocomplete" => "off"]
]);
}
if ($user['type_acquereur'] == "societe") {
$form->add('description_activite_societe', TextareaType::class,
["constraints" => [
new Assert\Length(['max' => 3000, 'maxMessage' => "Le champ description de l'activite societe est trop long"]),
new NotBlank(["message" => "Le champ description de l'activite societe est obligatoire"])],
"attr" => ["rows" => 8, "placeholder" => "", "autocomplete" => "off"]
]
);
// obligatoire
$form->add('res_net_societe', TextType::class,
[
"required" => true,
"constraints" => [
new Assert\Length(['max' => 100, 'maxMessage' => "Le champ Résultat Net est trop long"])
], "attr" => ["autocomplete" => "off"]
]);
// obligatoire
$form->add('date_creation_societe', TextType::class,
[
"constraints" => [
new Annee(),
new NotBlank(["message" => "Le champ date création de la societe est obligatoire"]),
],
"attr" => ["autocomplete" => "off"]
]
);
$form->add('annee_naissance_repreneur', TextType::class, [
"constraints" => [
new Annee(),
],
"attr" => ["autocomplete" => "off"]
]);
// obligatoire
$form->add('ca_societe', TextType::class,
[
"required" => true,
"constraints" => [
new NotBlank(["message" => "Le champ Chiffre d'affaire societé est obligatoire"]),
new Assert\Length(['max' => 100, 'maxMessage' => "Le champ CA est trop long"])
], "attr" => ["autocomplete" => "off"]
]);
$form->add('nb_personnes_societe', TextType::class,
[
"required" => true,
"constraints" => [
new NotBlank(["message" => "Le champ nombre de collaborateurs est obligatoire"]),
new Assert\Length(['max' => 100, 'maxMessage' => "Le champ nombre de collaborateurs est trop long"])
], "attr" => ["autocomplete" => "off"]
]);
// obligatoire
$form->add('description_activite_societe', TextareaType::class,
[
"constraints" => [
new NotBlank(["message" => "Le champ description de l'activite de la societe est obligatoire"]),
new Assert\Length(['max' => 3000, 'maxMessage' => "Le champ description de l'activite de la societe est trop long "])
],
"attr" => ["rows" => 8, "placeholder" => "", "autocomplete" => "off"]
]
);
$form->add('nb_personnes_societe', TextType::class,
[
"required" => true,
"constraints" => [
new NotBlank(["message" => "Le champ Nombre de collaborateurs est obligatoire"]),
new Assert\Length(['max' => 100, 'maxMessage' => "Le champ Nombre de collaborateurs est trop long"])
], "attr" => ["autocomplete" => "off"]
]);
}
}
}
}