src/Form/ContactInvestissementImmoType.php line 21

Open in your IDE?
  1. <?php
  2. namespace App\Form;
  3. use App\Entity\ContactInvestissementImmo;
  4. use Symfony\Component\Form\AbstractType;
  5. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  6. use Symfony\Component\Form\Extension\Core\Type\CollectionType;
  7. use Symfony\Component\Form\Extension\Core\Type\FileType;
  8. use Symfony\Component\Form\Extension\Core\Type\EmailType;
  9. use Symfony\Component\Form\Extension\Core\Type\HiddenType;
  10. use Symfony\Component\Form\Extension\Core\Type\TextareaType;
  11. use Symfony\Component\Form\Extension\Core\Type\TextType;
  12. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  13. use Symfony\Component\Form\Extension\Core\Type\NumberType;
  14. use Symfony\Component\Form\FormBuilderInterface;
  15. use Symfony\Component\OptionsResolver\OptionsResolver;
  16. use Symfony\Component\Validator\Constraints\File;
  17. use Vich\UploaderBundle\Form\Type\VichFileType;
  18. class ContactInvestissementImmoType extends AbstractType
  19. {
  20.     public function buildForm(FormBuilderInterface $builder, array $options): void
  21.     {
  22.         $cabinet $options['cabinet'];
  23.         $builder
  24.             //projet
  25.             ->add('purchasePrice'TextType::class, [
  26.                 'label' => 'Prix d\'achat (en €)',
  27.                 'required' => true,
  28.                 'attr' => [
  29.                     'class' => 'required formatted-number',
  30.                 ]
  31.             ])
  32.             ->add('contribution'ChoiceType::class, [
  33.                 'label' => 'Apport ?',
  34.                 'attr' => [
  35.                     'class' => 'required'
  36.                 ],
  37.                 'choices' => [
  38.                     'Oui' => true,
  39.                     'Non' => false,
  40.                 ],
  41.                 'expanded' => true,
  42.                 'multiple' => false
  43.             ])
  44.             ->add('amountContribution'TextType::class, [
  45.                 'label' => 'Montant de l\'apport (en €)',
  46.                 'required' => false,
  47.                 'attr' => [
  48.                     'class' => 'required formatted-number',
  49.                 ]
  50.             ])
  51.             ->add('bankLoan'ChoiceType::class, [
  52.                 'label' => 'Prêt bancaire ?',
  53.                 'attr' => [
  54.                     'class' => 'required'
  55.                 ],
  56.                 'choices' => [
  57.                     'Oui' => true,
  58.                     'Non' => false,
  59.                 ],
  60.                 'expanded' => true,
  61.                 'multiple' => false
  62.             ])
  63.             ->add('amountLoan'TextType::class, [
  64.                 'label' => 'Montant du prêt (en €)',
  65.                 'required' => false,
  66.                 'attr' => [
  67.                     'class' => 'formatted-number',
  68.                 ]
  69.             ])
  70.             ->add('durationLoan'TextType::class, [
  71.                 'label' => 'Durée du prêt (En années)',
  72.                 'required' => false,
  73.                 'attr' => [
  74.                     'class' => 'formatted-number',
  75.                 ]
  76.             ])
  77.             ->add('rateLoan'TextType::class, [
  78.                 'label' => 'Taux du prêt annuel si connu (en %)',
  79.                 'required' => false,
  80.                 'attr' => [
  81.                     'class' => 'formatted-taux',
  82.                 ]
  83.             ])
  84.             ->add('agencyFees'ChoiceType::class, [
  85.                 'label' => 'Frais d\'agence ?',
  86.                 'attr' => [
  87.                     'class' => 'required'
  88.                 ],
  89.                 'choices' => [
  90.                     'Oui' => true,
  91.                     'Non' => false,
  92.                 ],
  93.                 'expanded' => true,
  94.                 'multiple' => false
  95.             ])
  96.             ->add('agencyFeesAmount'TextType::class, [
  97.                 'label' => 'Montant des frais d\'agence (en €)',
  98.                 'required' => false,
  99.                 'attr' => [
  100.                     'class' => 'formatted-number',
  101.                 ]
  102.             ])
  103.             ->add('notaryFees'ChoiceType::class, [
  104.                 'label' => 'Frais de notaire ?',
  105.                 'attr' => [
  106.                     'class' => 'required'
  107.                 ],
  108.                 'choices' => [
  109.                     'Oui' => true,
  110.                     'Non' => false,
  111.                 ],
  112.                 'expanded' => true,
  113.                 'multiple' => false
  114.             ])
  115.             ->add('notaryFeesAmount'TextType::class, [
  116.                 'label' => 'Montant des frais de notaire (en €)',
  117.                 'required' => false,
  118.                 'attr' => [
  119.                     'class' => 'formatted-number',
  120.                 ]
  121.             ])
  122.             ->add('work'ChoiceType::class, [
  123.                 'label' => 'Travaux à réalisés ?',
  124.                 'attr' => [
  125.                     'class' => 'required'
  126.                 ],
  127.                 'choices' => [
  128.                     'Oui' => true,
  129.                     'Non' => false,
  130.                 ],
  131.                 'expanded' => true,
  132.                 'multiple' => false
  133.             ])
  134.             ->add('amountsWork'TextType::class, [
  135.                 'label' => 'Montants des travaux (en  €)',
  136.                 'required' => false,
  137.                 'attr' => [
  138.                     'class' => 'formatted-number',
  139.                 ]
  140.             ])
  141.             // immobilier
  142.             ->add('businessStructure'ChoiceType::class, [
  143.                 'label' => 'Forme juridique',
  144.                 'choices' => [
  145.                     'Nom propre' => 'Nom propre',
  146.                     'SCI à l\'impôt sur revenu' => 'SCI à l\'impôt sur revenu',
  147.                     'SCI à l\'impôt sur les sociétés' => 'SCI à l\'impôt sur les sociétés',
  148.                 ],
  149.                 'placeholder' => 'Sélectionner',
  150.                 'required' => true,
  151.             ])
  152.             ->add('numberProperties'TextType::class, [
  153.                 'label' => 'Nombre de biens immobiliers',
  154.                 'required' => true,
  155.                 'attr' => [
  156.                     'class' => 'required formatted-number',
  157.                     'min' => 1,
  158.                 ]
  159.             ])
  160.             ->add('propertiesImmo'CollectionType::class, [
  161.                 'label' => false,
  162.                 'mapped' => false,
  163.                 'entry_type' => ContactInvestissementImmoPropertyImmoType::class,
  164.                 'entry_options' => [
  165.                     'label' => false,
  166.                 ],
  167.                 'allow_add' => true,
  168.                 'allow_delete' => false,
  169.                 'by_reference' => false,
  170.                 'prototype_name' => '__property__',
  171.             ])
  172.             // charges par biens
  173.             ->add('propertiesCharges'CollectionType::class, [
  174.                 'label' => false,
  175.                 'mapped' => false,
  176.                 'entry_type' => ContactInvestissementImmoPropertyChargesType::class,
  177.                 'entry_options' => [
  178.                     'label' => false,
  179.                 ],
  180.                 'allow_add' => true,
  181.                 'allow_delete' => false,
  182.                 'by_reference' => false,
  183.                 'prototype_name' => '__property__',
  184.             ])
  185. //
  186. //            // loyers par biens
  187.             ->add('propertiesRent'CollectionType::class, [
  188.                 'label' => false,
  189.                 'mapped' => false,
  190.                 'entry_type' => ContactInvestissementImmoPropertyRentType::class,
  191.                 'entry_options' => [
  192.                     'label' => false,
  193.                 ],
  194.                 'allow_add' => true,
  195.                 'allow_delete' => false,
  196.                 'by_reference' => false,
  197.                 'prototype_name' => '__property__',
  198.             ])
  199. //
  200. //            // foyer fiscal
  201.             ->add('numberPartTax'ChoiceType::class, [
  202.                 'label' => 'Nombre de parts fiscales',
  203.                 'choices' => [
  204.                     '1' => '1',
  205.                     '1.5' => '1.5',
  206.                     '2' => '2',
  207.                     '2.5' => '2.5',
  208.                     '3' => '3',
  209.                     '3.5' => '3.5',
  210.                     '4' => '4',
  211.                     '4.5' => '4.5',
  212.                     '5' => '5',
  213.                     '5.5' => '5.5',
  214.                     '6' => '6',
  215.                     '6.5' => '6.5',
  216.                     '7' => '7',
  217.                     '7.5' => '7.5',
  218.                     '8' => '8',
  219.                     '8.5' => '8.5',
  220.                     '9' => '9',
  221.                     '9.5' => '9.5',
  222.                     '10' => '10',
  223.                 ],
  224.                 'required' => true,
  225.             ])
  226.             ->add('taxReferanceIncome'TextType::class, [
  227.                 'label' => 'Revenu fiscal de référence (en €)',
  228.                 'required' => true,
  229.                 'attr' => [
  230.                     'class' => 'required formatted-number',
  231.                 ]
  232.             ])
  233.             // détails
  234.             ->add('messageFree'TextareaType::class, [
  235.                 'label' => 'Détails',
  236.                 'required' => true,
  237.                 'attr' => [
  238.                     'placeholder' => 'Détails sur votre projet',
  239.                     'class' => 'required',
  240.                 ],
  241.             ])
  242.             ->add('pdfFile'VichFileType::class, [
  243.                 'label' => 'Joindre un document (facultatif)',
  244.                 'required' => false,
  245.                 'allow_delete' => true,
  246.                 'download_uri' => false,
  247.                 'delete_label' => 'Supprimer le fichier',
  248.                 'attr' => [
  249.                     'class' => 'form-control'
  250.                 ]
  251.             ])
  252.             // recap
  253.             ->add('name'TextType::class, [
  254.                 'label' => 'Nom',
  255.                 'required' => true,
  256.             ])
  257.             ->add('firstname'TextType::class, [
  258.                 'label' => 'Prénom',
  259.                 'required' => true,
  260.             ])
  261.             ->add('phone'TextType::class, [
  262.                 'label' => 'Téléphone',
  263.                 'required' => true,
  264.             ])
  265.             ->add('email'EmailType::class, [
  266.                 'label' => 'Email',
  267.                 'required' => true,
  268.             ])
  269.             ->add('adress'TextType::class, [
  270.                 'label' => 'Adresse postal complète',
  271.                 'required' => true,
  272.             ])
  273.             ->add('zipCode'TextType::class, [
  274.                 'label' => 'Code postal',
  275.                 'required' => true,
  276.             ])
  277.             ->add('city'TextType::class, [
  278.                 'label' => 'Ville',
  279.                 'required' => true,
  280.             ])
  281.             ->add('cgv'CheckboxType::class, [
  282.                 'label' => false,
  283.                 'required' => true,
  284.                 'mapped' => false,
  285.                 'attr' => [
  286.                     'class' => 'required'
  287.                 ]
  288.             ])
  289.             ->add('paymentMethod'HiddenType::class, [
  290.                 'data' => 'paypal'// Valeur par défaut
  291.             ]);
  292.         ;
  293.     }
  294.     public function configureOptions(OptionsResolver $resolver): void
  295.     {
  296.         $resolver->setDefaults([
  297.             'data_class' => ContactInvestissementImmo::class,
  298.             'cabinet' => null
  299.         ]);
  300.     }
  301. }