← Back
Editing: RebateType.php
<?php namespace App\Form; use App\Entity\AgencyPrestataire; use App\Entity\Prestataire; use App\Entity\Rebate; use App\Service\SolutionService; use Symfony\Bridge\Twig\Mime\TemplatedEmail; 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\SubmitType; use Symfony\Component\Form\Extension\Core\Type\TextareaType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormEvent; use Symfony\Component\Form\FormEvents; use Symfony\Component\Mailer\Exception\TransportExceptionInterface; use Symfony\Component\Mailer\MailerInterface; use Symfony\Component\Mime\Address; use Symfony\Component\OptionsResolver\OptionsResolver; class RebateType extends AbstractType { private MailerInterface $mailer; private ?string $emailFrom; public function __construct(MailerInterface $mailer, SolutionService $solutionService) { $this->mailer = $mailer; $this->emailFrom = $solutionService->getCurrent()->getEmail(); } /** * @return void */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add( 'apply', CheckboxType::class, ['required' => false, 'label' => 'Appliquer une réfaction', 'mapped' => false] ) ->add('factor', ChoiceType::class, [ 'choices' => [ '1' => 100, '0.90' => 90, '0.80' => 80, '0.75' => 75, ], ]) ->add('description', TextareaType::class, ['required' => false]) ->add('save', SubmitType::class) ->add( 'sendEmail', CheckboxType::class, ['required' => false, 'label' => 'Informer le prestataire par email', 'mapped' => false] ) ->addEventListener(FormEvents::PRE_SUBMIT, [$this, 'handlePreSubmit']) ->addEventListener(FormEvents::POST_SUBMIT, [$this, 'handlePostSubmit']) ->addEventListener(FormEvents::POST_SET_DATA, [$this, 'handleApplyCheckbox']); } /** * Assign default values if we want to remove entity. */ public function handlePreSubmit(FormEvent $event): void { $data = $event->getData(); $data['factor'] = 100; $data['description'] = ''; $event->setData($data); } /** * @throws TransportExceptionInterface */ public function handlePostSubmit(FormEvent $event): void { /** @var Rebate $data */ $data = $event->getData(); $form = $event->getForm(); $serviceData = $form->getParent()->getData(); /** @var Prestataire $provider */ $provider = $serviceData->getControle()->getAdresse()->getPrestataires()->first(); /** @var AgencyPrestataire $providerAgency */ $providerAgency = $provider->getAgencyPrestataires()->first(); if (true === $form['sendEmail']->getData()) { $email = (new TemplatedEmail()) ->from($this->emailFrom) ->to(new Address($providerAgency->getMailContact())) ->subject('Application de réfaction') // path of the Twig template to render ->htmlTemplate('emails/rebate_notification.html.twig') // pass variables (name => value) to the template ->context( [ 'provider' => $provider, 'providerAgency' => $providerAgency, 'control' => $serviceData->getControle(), 'rebate' => $data, ] ); $this->mailer->send($email); } } public function handleApplyCheckbox(FormEvent $event): void { $data = $event->getData(); $form = $event->getForm(); if ($data instanceof Rebate && $data->getId()) { $form['apply']->setData(true); } else { $form['apply']->setData(false); } } /** * @return void */ public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults([ 'data_class' => Rebate::class, ]); } }
Save File
Cancel