<?php
namespace Entrepreneurs\Bundle\Entrepreneur\Form;
use Entrepreneurs\Bundle\AppBundle\Propel\Civilite;
use Entrepreneurs\Bundle\AppBundle\Propel\Departement;
use Entrepreneurs\Bundle\AppBundle\Propel\DepartementQuery;
use Entrepreneurs\Bundle\AppBundle\Propel\EffectifEntreprise;
use Entrepreneurs\Bundle\AppBundle\Propel\EffectifEntrepriseQuery;
use Entrepreneurs\Bundle\AppBundle\Propel\Entrepreneur;
use Entrepreneurs\Bundle\AppBundle\Propel\FonctionEntrepreneur;
use Entrepreneurs\Bundle\AppBundle\Propel\FonctionEntrepreneurQuery;
use Entrepreneurs\Bundle\AppBundle\Propel\ModeCommunication;
use Entrepreneurs\Bundle\AppBundle\Propel\ModeCommunicationQuery;
use Entrepreneurs\Bundle\AppBundle\Propel\NePlusIntervenirRaison;
use Entrepreneurs\Bundle\AppBundle\Propel\NePlusIntervenirRaisonQuery;
use Entrepreneurs\Bundle\AppBundle\Propel\ProvenanceEntrepreneur;
use Entrepreneurs\Bundle\AppBundle\Propel\Reseau;
use Entrepreneurs\Bundle\AppBundle\Propel\ReseauQuery;
use Entrepreneurs\Bundle\AppBundle\Propel\SecteurActivite;
use Entrepreneurs\Bundle\AppBundle\Propel\SecteurActiviteQuery;
use Propel\Bundle\PropelBundle\Form\Type\ModelType;
use Propel\Runtime\ActiveQuery\Criteria;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\CountryType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Validator\Constraints\Blank;
use Symfony\Component\Validator\Constraints\Count;
use Symfony\Component\Validator\Constraints\Email;
use Symfony\Component\Validator\Constraints\IsTrue;
use Symfony\Component\Validator\Constraints\Length;
use Symfony\Component\Validator\Constraints\NotBlank;
class QuestionnaireType extends AbstractType
{
public const TYPE_RESEAU_ENTREPRENEUR = '%| Entrepreneur |%';
public function buildForm(FormBuilderInterface $builder, array $options)
{
$entrepreneur = $options['entrepreneur'];
$isFromSurvey2 = $options['isFromSurvey2'];
$isFromSignUp = $options['isFromSignUp'];
if (!$entrepreneur->getId()) {
if (!$isFromSurvey2 && !$isFromSignUp) {
$builder
->add('compte_existe', ChoiceType::class, [
'label' => 'Avez-vous déjà un compte "entrepreneur" chez 100 000 entrepreneurs ?',
'choices' => [
'Non' => 'Non',
'Oui' => 'Oui',
],
'mapped' => false,
'expanded' => true,
'constraints' => new NotBlank(),
])
;
}
$builder->add('email', EmailType::class, [
'label' => 'Mail',
'constraints' => [
new NotBlank(),
new Email([
'mode' => Email::VALIDATION_MODE_HTML5,
]),
],
])
;
}
$builder
->add('civilite', ChoiceType::class, [
'label' => 'Civilité',
'choices' => array_flip(Civilite::getChoiceList()),
'constraints' => new NotBlank(),
])
->add('nom', TextType::class, [
'label' => 'Nom',
'constraints' => new NotBlank(),
])
->add('prenom', TextType::class, [
'label' => 'Prénom',
'constraints' => new NotBlank(),
])
->add('telephone_1', TextType::class, [
'label' => 'Téléphone portable',
'constraints' => [
new NotBlank(),
new Length([
'min' => 10,
'max' => 20,
]),
],
])
->add('linkedin', TextType::class, [
'label' => 'LinkedIn',
'required' => false,
])
->add('adresse_1', TextType::class, [
'label' => 'Adresse de votre domicile',
'constraints' => new NotBlank(),
])
->add('code_postal', TextType::class, [
'label' => 'Code postal de votre domicile pour nous aider à géolocaliser des interventions proches de chez vous',
'constraints' => new NotBlank(),
])
->add('ville', TextType::class, [
'label' => 'Ville de votre domicile ',
'constraints' => new NotBlank(),
])
->add('pays', CountryType::class, [
'label' => 'Pays de votre domicile',
'preferred_choices' => ['FR'],
'attr' => [
'class' => 'form-control',
],
'constraints' => new NotBlank(),
])
->add('entreprise', TextType::class, [
'label' => 'Précisez le nom de votre structure',
'constraints' => new NotBlank(),
])
->add('meme_adresse', CheckboxType::class, [
'label' => 'Même adresse que la précédente',
'required' => false,
'mapped' => false,
])
->add('entreprise_adresse', TextType::class, [
'label' => 'Adresse de votre lieu de travail',
'constraints' => new NotBlank(),
])
->add('entreprise_ville', TextType::class, [
'label' => 'Ville de votre lieu de travail',
'constraints' => new NotBlank(),
])
->add('entreprise_code_postal', TextType::class, [
'label' => 'Code postal de votre lieu de travail',
'constraints' => new NotBlank(),
])
->add('entreprise_pays', CountryType::class, [
'label' => 'Pays de votre lieu de travail',
'preferred_choices' => ['FR'],
'attr' => [
'class' => 'form-control',
],
'constraints' => new NotBlank(),
])
->add('SecteurActivites', ModelType::class, [
'class' => SecteurActivite::class,
'label' => "Secteur(s) d'activité (plusieurs choix possibles)",
'attr' => ['placeholder' => "Secteur d'activité"],
'query' => SecteurActiviteQuery::createForReferentiel(),
'constraints' => new NotBlank(),
'multiple' => true,
])
->add('activite_principale', TextType::class, [
'label' => "Préciser l'activité",
'attr' => [
'placeholder' => "Préciser l'activité",
],
'constraints' => new NotBlank(),
])
->add('fonction', ModelType::class, [
'class' => FonctionEntrepreneur::class,
'label' => 'Quelle est votre fonction ?',
'constraints' => new NotBlank(),
'query' => FonctionEntrepreneurQuery::create()->filterByActif(true),
])
->add('entreprise_effectif', ModelType::class, [
'class' => EffectifEntreprise::class,
'query' => EffectifEntrepriseQuery::create()->filterForSelect(),
'placeholder' => "Quel est l'effectif de votre structure ?",
'label' => "Quel est l'effectif de votre structure ?",
'constraints' => new NotBlank(),
])
->add('reseaux', ModelType::class, [
'label' => "À quel(s) réseau(x) d'entrepreneurs appartenez-vous ?",
'class' => Reseau::class,
'multiple' => true,
'required' => true,
'query' => ReseauQuery::create()->filterByTypeReseau(self::TYPE_RESEAU_ENTREPRENEUR, Criteria::LIKE),
'constraints' => [
new Count([
'min' => 1,
'minMessage' => 'Le(s) réseau(x) sont requis',
]),
new NotBlank(),
],
])
->add('reseau_non_appartenance', CheckboxType::class, [
'label' => "Je n'appartiens pas à un réseau d'entrepreneurs.",
'required' => false,
])
->add('reseau_non_reference', CheckboxType::class, [
'label' => 'Je ne trouve pas mon réseau, je le précise ci-après.',
'required' => false,
])
->add('reseau_precision', TextType::class, [
'label' => 'Précision',
'attr' => ['placeholder' => "Précisez s'il vous plait"],
'required' => false,
'constraints' => new Blank([
'message' => 'Le(s) réseau(x) doit/doivent être vide(s)',
]),
])
->add('souhait_intervenir', ChoiceType::class, [
'label' => 'Souhaitez-vous intervenir cette année?',
'choices' => [
'Oui' => 'Oui',
'Non' => 'Non',
],
'constraints' => new NotBlank(),
])
->add('ne_plus_intervenir_raisons', ModelType::class, [
'label' => 'Pour quelle raison ne souhaitez-vous pas/plus intervenir ?',
'class' => NePlusIntervenirRaison::class,
'query' => NePlusIntervenirRaisonQuery::create()->filterByActif(true),
'multiple' => true,
'required' => false,
])
->add('ne_plus_intervenir_autre_precision', TextType::class, [
'label' => 'Si Autre, merci de préciser',
'attr' => [
'placeholder' => 'Pourquoi ne souhaite plus intervenir',
],
'required' => false,
])
->add('rythme_souhaite', ChoiceType::class, [
'label' => 'À quel rythme souhaitez-vous intervenir ?',
'placeholder' => 'À quel rythme souhaitez-vous intervenir ?',
'choices' => [
'Moins de 5 par an' => 'Moins de 5 par an',
'Plus de 5 par an' => 'Plus de 5 par an',
],
'constraints' => new NotBlank(),
])
->add('mode_communications', ModelType::class, [
'label' => 'Nous communiquons avec vous par mail, téléphone et SMS, mais auriez-vous une préférence à nous indiquer ?',
'class' => ModeCommunication::class,
'multiple' => true,
'query' => ModeCommunicationQuery::create()->filterByActif(true),
'constraints' => new NotBlank(),
])
->add('departements', ModelType::class, [
'label' => 'Dans quel(s) département(s) proche(s) de votre domicile et/ou lieu de travail êtes-vous
disponible ?',
'class' => Departement::class,
'query' => DepartementQuery::create()->filterByActif(true)->orderByNumero()->filterByNumero('00', Criteria::NOT_EQUAL),
'multiple' => true,
'constraints' => [
new Count([
'min' => 1,
'minMessage' => "Vous devez renseigner au minimum {{ limit }} département d'intervention.|Vous devez saisir au minimum {{ limit }} départements d'intervention.", ]
),
new NotBlank(),
],
])
->add('souhait_devenir_rt', ChoiceType::class, [
'label' => "Seriez-vous intéressé.e pour être un relais territorial ? (être l'ambassadeur bénévole de
l'association 100 000 entrepreneurs et nous aider à développer les témoignages auprès des jeunes
de votre territoire)",
'required' => true,
'placeholder' => '',
'choices' => [
Entrepreneur::ACCEPT_DEVENIR_RT => Entrepreneur::ACCEPT_DEVENIR_RT,
Entrepreneur::PK_PAS_DEVENIR_RT => Entrepreneur::PK_PAS_DEVENIR_RT,
Entrepreneur::REFUSE_DEVENIR_RT => Entrepreneur::REFUSE_DEVENIR_RT,
],
'constraints' => new NotBlank(),
])
;
if (!$entrepreneur->getId()) {
$builder
->add('provenance_entrepreneur', ModelType::class, [
'label' => 'Comment avez-vous connu 100 000 entrepreneurs ?',
'required' => false,
'placeholder' => 'Faites un choix',
'class' => ProvenanceEntrepreneur::class,
])
->add('provenance_precision', TextType::class, [
'label' => 'Précision',
'required' => false,
'attr' => ['placeholder' => "Précisez s'il vous plait"],
])
->add('provenance_commentaire', TextareaType::class, [
'label' => 'Précision',
'required' => false,
])
->add('reception_mailing_hebdo', CheckboxType::class, [
'label' => 'Je confirme que je souhaite recevoir des mails de la part de 100 000 entrepreneurs',
'required' => true,
'mapped' => false,
'constraints' => new IsTrue([
'message' => 'Vous devez accepter de recevoir des mails de la part de 100 000 entrepreneurs',
]),
])
->add('politique_confidentialite', CheckboxType::class, [
'required' => true,
'mapped' => false,
'constraints' => new IsTrue([
'message' => 'Vous devez accepter la politique de confidentialité de 100 000 entrepreneurs',
]),
])
;
}
$builder
->add('commentaire', TextType::class, [
'label' => "Quelle question auriez-vous aimé qu'on vous pose ? Une idée à nous soumettre ? Une dernière observation ou question ?",
'required' => false,
])
->add('enregistrer', SubmitType::class, [
'label' => 'Valider',
])
;
$builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) {
$form = $event->getForm();
$data = $event->getData();
if ('Non' === $data['souhait_intervenir']) {
$form
->add('ne_plus_intervenir_raisons', ModelType::class, [
'label' => 'Pour quelle raison ne souhaitez-vous pas/plus intervenir ?',
'class' => NePlusIntervenirRaison::class,
'multiple' => true,
'constraints' => new Count(['min' => 1, 'minMessage' => 'Le(s) raison(s) sont requise(s)']),
])
->add('rythme_souhaite', ChoiceType::class, [
'label' => 'À quel rythme souhaitez-vous intervenir ?',
'placeholder' => 'À quel rythme souhaitez-vous intervenir ?',
'choices' => [
'Moins de 5 par an' => 'Moins de 5 par an',
'Plus de 5 par an' => 'Plus de 5 par an',
],
'required' => false,
'constraints' => [],
])
->add('mode_communications', ModelType::class, [
'label' => 'Nous communiquons avec vous par mail, téléphone et SMS, mais auriez-vous une préférence à nous indiquer ?',
'class' => ModeCommunication::class,
'multiple' => true,
'required' => false,
'query' => ModeCommunicationQuery::create()->filterByActif(true),
'constraints' => [],
])
->add('departements', ModelType::class, [
'label' => 'Dans quel(s) département(s) proche(s) de votre domicile et/ou lieu de travail êtes-vous
disponible ? (2 chiffres, 3 chiffres pour Outre Mer - exemple : 11, 44, 972, 01)',
'class' => Departement::class,
'query' => DepartementQuery::create()->filterByActif(true)->orderByNumero()->filterByNumero('00', Criteria::NOT_EQUAL),
'multiple' => true,
'required' => false,
'constraints' => [],
])
->add('souhait_devenir_rt', ChoiceType::class, [
'label' => "Seriez-vous intéressé.e pour être un relais territorial ? (être l'ambassadeur de
l'association 100 000 entrepreneurs et nous aider à développer les témoignages auprès des jeunes
de votre territoire)",
'placeholder' => '',
'required' => false,
'choices' => [
Entrepreneur::ACCEPT_DEVENIR_RT => Entrepreneur::ACCEPT_DEVENIR_RT,
Entrepreneur::PK_PAS_DEVENIR_RT => Entrepreneur::PK_PAS_DEVENIR_RT,
Entrepreneur::REFUSE_DEVENIR_RT => Entrepreneur::REFUSE_DEVENIR_RT,
],
'constraints' => [],
])
;
}
if (isset($data['reseau_non_reference'])) {
$form->add('reseaux', ModelType::class, [
'label' => 'Réseau(x) d\'entrepreneurs',
'class' => Reseau::class,
'query' => ReseauQuery::create()->filterByTypeReseau(self::TYPE_RESEAU_ENTREPRENEUR, Criteria::LIKE),
'multiple' => true,
'required' => false,
])
->add('reseau_precision', TextType::class, [
'label' => 'Précision',
'attr' => ['placeholder' => "Précisez le(s) s'il vous plait"],
'required' => true,
'constraints' => new NotBlank(['message' => 'Le(s) réseau(x) ne doit/doivent pas être vide(s)']),
]);
} elseif (isset($data['reseau_non_appartenance'])) {
$form->add('reseaux', ModelType::class, [
'label' => 'Réseau(x) d\'entrepreneurs',
'class' => Reseau::class,
'query' => ReseauQuery::create()->filterByTypeReseau(self::TYPE_RESEAU_ENTREPRENEUR, Criteria::LIKE),
'multiple' => true,
'required' => false,
]);
} else {
$form->add('reseaux', ModelType::class, [
'label' => 'Réseau(x) d\'entrepreneurs',
'class' => Reseau::class,
'query' => ReseauQuery::create()->filterByTypeReseau(self::TYPE_RESEAU_ENTREPRENEUR, Criteria::LIKE),
'multiple' => true,
'required' => true,
'constraints' => new Count(['min' => 1, 'minMessage' => 'Le(s) réseau(x) sont requis']),
]);
}
});
return $builder;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Entrepreneur::class,
'isFromSurvey2' => false,
'isFromSignUp' => false,
]);
$resolver->setRequired(['entrepreneur']);
}
public function getBlockPrefix()
{
return 'inscription';
}
}