<?php
namespace App\Form;
use App\Entity\ContactInvestissementImmo;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
use Symfony\Component\Form\Extension\Core\Type\FileType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\NumberType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Validator\Constraints\File;
use Vich\UploaderBundle\Form\Type\VichFileType;
class ContactInvestissementImmoType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$cabinet = $options['cabinet'];
$builder
//projet
->add('purchasePrice', TextType::class, [
'label' => 'Prix d\'achat (en €)',
'required' => true,
'attr' => [
'class' => 'required formatted-number',
]
])
->add('contribution', ChoiceType::class, [
'label' => 'Apport ?',
'attr' => [
'class' => 'required'
],
'choices' => [
'Oui' => true,
'Non' => false,
],
'expanded' => true,
'multiple' => false
])
->add('amountContribution', TextType::class, [
'label' => 'Montant de l\'apport (en €)',
'required' => false,
'attr' => [
'class' => 'required formatted-number',
]
])
->add('bankLoan', ChoiceType::class, [
'label' => 'Prêt bancaire ?',
'attr' => [
'class' => 'required'
],
'choices' => [
'Oui' => true,
'Non' => false,
],
'expanded' => true,
'multiple' => false
])
->add('amountLoan', TextType::class, [
'label' => 'Montant du prêt (en €)',
'required' => false,
'attr' => [
'class' => 'formatted-number',
]
])
->add('durationLoan', TextType::class, [
'label' => 'Durée du prêt (En années)',
'required' => false,
'attr' => [
'class' => 'formatted-number',
]
])
->add('rateLoan', TextType::class, [
'label' => 'Taux du prêt annuel si connu (en %)',
'required' => false,
'attr' => [
'class' => 'formatted-taux',
]
])
->add('agencyFees', ChoiceType::class, [
'label' => 'Frais d\'agence ?',
'attr' => [
'class' => 'required'
],
'choices' => [
'Oui' => true,
'Non' => false,
],
'expanded' => true,
'multiple' => false
])
->add('agencyFeesAmount', TextType::class, [
'label' => 'Montant des frais d\'agence (en €)',
'required' => false,
'attr' => [
'class' => 'formatted-number',
]
])
->add('notaryFees', ChoiceType::class, [
'label' => 'Frais de notaire ?',
'attr' => [
'class' => 'required'
],
'choices' => [
'Oui' => true,
'Non' => false,
],
'expanded' => true,
'multiple' => false
])
->add('notaryFeesAmount', TextType::class, [
'label' => 'Montant des frais de notaire (en €)',
'required' => false,
'attr' => [
'class' => 'formatted-number',
]
])
->add('work', ChoiceType::class, [
'label' => 'Travaux à réalisés ?',
'attr' => [
'class' => 'required'
],
'choices' => [
'Oui' => true,
'Non' => false,
],
'expanded' => true,
'multiple' => false
])
->add('amountsWork', TextType::class, [
'label' => 'Montants des travaux (en €)',
'required' => false,
'attr' => [
'class' => 'formatted-number',
]
])
// immobilier
->add('businessStructure', ChoiceType::class, [
'label' => 'Forme juridique',
'choices' => [
'Nom propre' => 'Nom propre',
'SCI à l\'impôt sur revenu' => 'SCI à l\'impôt sur revenu',
'SCI à l\'impôt sur les sociétés' => 'SCI à l\'impôt sur les sociétés',
],
'placeholder' => 'Sélectionner',
'required' => true,
])
->add('numberProperties', TextType::class, [
'label' => 'Nombre de biens immobiliers',
'required' => true,
'attr' => [
'class' => 'required formatted-number',
'min' => 1,
]
])
->add('propertiesImmo', CollectionType::class, [
'label' => false,
'mapped' => false,
'entry_type' => ContactInvestissementImmoPropertyImmoType::class,
'entry_options' => [
'label' => false,
],
'allow_add' => true,
'allow_delete' => false,
'by_reference' => false,
'prototype_name' => '__property__',
])
// charges par biens
->add('propertiesCharges', CollectionType::class, [
'label' => false,
'mapped' => false,
'entry_type' => ContactInvestissementImmoPropertyChargesType::class,
'entry_options' => [
'label' => false,
],
'allow_add' => true,
'allow_delete' => false,
'by_reference' => false,
'prototype_name' => '__property__',
])
//
// // loyers par biens
->add('propertiesRent', CollectionType::class, [
'label' => false,
'mapped' => false,
'entry_type' => ContactInvestissementImmoPropertyRentType::class,
'entry_options' => [
'label' => false,
],
'allow_add' => true,
'allow_delete' => false,
'by_reference' => false,
'prototype_name' => '__property__',
])
//
// // foyer fiscal
->add('numberPartTax', ChoiceType::class, [
'label' => 'Nombre de parts fiscales',
'choices' => [
'1' => '1',
'1.5' => '1.5',
'2' => '2',
'2.5' => '2.5',
'3' => '3',
'3.5' => '3.5',
'4' => '4',
'4.5' => '4.5',
'5' => '5',
'5.5' => '5.5',
'6' => '6',
'6.5' => '6.5',
'7' => '7',
'7.5' => '7.5',
'8' => '8',
'8.5' => '8.5',
'9' => '9',
'9.5' => '9.5',
'10' => '10',
],
'required' => true,
])
->add('taxReferanceIncome', TextType::class, [
'label' => 'Revenu fiscal de référence (en €)',
'required' => true,
'attr' => [
'class' => 'required formatted-number',
]
])
// détails
->add('messageFree', TextareaType::class, [
'label' => 'Détails',
'required' => true,
'attr' => [
'placeholder' => 'Détails sur votre projet',
'class' => 'required',
],
])
->add('pdfFile', VichFileType::class, [
'label' => 'Joindre un document (facultatif)',
'required' => false,
'allow_delete' => true,
'download_uri' => false,
'delete_label' => 'Supprimer le fichier',
'attr' => [
'class' => 'form-control'
]
])
// recap
->add('name', TextType::class, [
'label' => 'Nom',
'required' => true,
])
->add('firstname', TextType::class, [
'label' => 'Prénom',
'required' => true,
])
->add('phone', TextType::class, [
'label' => 'Téléphone',
'required' => true,
])
->add('email', EmailType::class, [
'label' => 'Email',
'required' => true,
])
->add('adress', TextType::class, [
'label' => 'Adresse postal complète',
'required' => true,
])
->add('zipCode', TextType::class, [
'label' => 'Code postal',
'required' => true,
])
->add('city', TextType::class, [
'label' => 'Ville',
'required' => true,
])
->add('cgv', CheckboxType::class, [
'label' => false,
'required' => true,
'mapped' => false,
'attr' => [
'class' => 'required'
]
])
->add('paymentMethod', HiddenType::class, [
'data' => 'paypal', // Valeur par défaut
]);
;
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => ContactInvestissementImmo::class,
'cabinet' => null
]);
}
}