src/Form/Notes/NoteType.php line 231

Open in your IDE?
  1. <?php
  2. namespace App\Form\Notes;
  3. use App\DataTransformer\Clients\IdToClientTransformer;
  4. use App\DataTransformer\Fournisseurs\IdToFournisseurTransformer;
  5. use App\DataTransformer\Utilisateur\IdToContactTransformer;
  6. use App\Entity\Adresses\Adresse;
  7. use App\Entity\Clients\Client;
  8. use App\Entity\Clients\ClientCategorie;
  9. use App\Entity\Fournisseurs\Fournisseur;
  10. use App\Entity\Localisation\Zone;
  11. use App\Entity\Notes\Categorie;
  12. use App\Entity\Notes\Note;
  13. use App\Entity\Utilisateur\Contact;
  14. use App\Entity\Utilisateur\Utilisateur;
  15. use App\Entity\Utilisateur\UtilisateurZoneGeographique;
  16. use App\Repository\Notes\CategorieRepository;
  17. use App\Repository\Utilisateur\UtilisateurRepository;
  18. use Doctrine\ORM\EntityManagerInterface;
  19. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  20. use Symfony\Component\DependencyInjection\ContainerAwareTrait;
  21. use Symfony\Component\DependencyInjection\ContainerInterface;
  22. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  23. use Symfony\Component\Form\AbstractType;
  24. use Symfony\Component\Form\ChoiceList\ChoiceList;
  25. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  26. use Symfony\Component\Form\Extension\Core\Type\DateTimeType;
  27. use Symfony\Component\Form\Extension\Core\Type\DateType;
  28. use Symfony\Component\Form\Extension\Core\Type\TextareaType;
  29. use Symfony\Component\Form\FormBuilderInterface;
  30. use Symfony\Component\Form\FormEvent;
  31. use Symfony\Component\Form\FormEvents;
  32. use Symfony\Component\Form\FormInterface;
  33. use Symfony\Component\HttpFoundation\RequestStack;
  34. use Symfony\Component\OptionsResolver\OptionsResolver;
  35. class NoteType extends AbstractType
  36. {
  37.     private EntityManagerInterface $entityManager;
  38.     private RequestStack $requestStack;
  39.     private ParameterBagInterface $params;
  40.     public function __construct(EntityManagerInterface $entityManagerParameterBagInterface $paramsRequestStack $requestStack)
  41.     {
  42.         $this->entityManager $entityManager;
  43.         $this->requestStack  $requestStack;
  44.         $this->params        $params;
  45.     }
  46.     public function buildForm(FormBuilderInterface $builder, array $options)
  47.     {
  48.         $entity   $builder->getData();
  49.         $entityID "";
  50.         //if($entity->getID() != NULL){
  51.         $entityID $entity->getID();
  52.         $builder
  53.             ->add('dateDebut'DateTimeType::class, ['widget' => 'single_text',])
  54.             ->add('dateFin'DateTimeType::class, ['widget' => 'single_text',])
  55.             ->add('libelle')
  56.             //->add('utilisateur')
  57.             ->add('utilisateur'EntityType::class, [
  58.                 'class'         => Utilisateur::class,
  59. //                //'choice_name'   => ChoiceList::fieldName($this, 'nomPrenom'),
  60.                 'choice_label'  => function (Utilisateur $utilisateur) {
  61.                     return $utilisateur->getNomPrenom();
  62.                 },
  63.                 'required'      => false,
  64.                 'query_builder' => function (UtilisateurRepository $er) use ($entity) {
  65.                     if (is_object($entity->getUtilisateur())) {
  66.                         return $er->createQueryBuilder('x')
  67.                                   ->where(' x.visible = 1 and (x.archive = 0 or x.id = '.$entity->getUtilisateur()->getId().' )')
  68.                                   ->setParameters([])
  69.                                   ->orderBy('x.prenom''ASC');
  70.                     } else {
  71.                         return $er->createQueryBuilder('x')
  72.                                   ->where('x.visible = 1 and (x.archive = 0)')
  73.                                   ->setParameters([])
  74.                                   ->orderBy('x.prenom''ASC');
  75.                     }
  76.                 },
  77.             ])
  78.             ->add('adresseVille')
  79.             ->add('adresseNumero')
  80.             ->add('adresseRue')
  81.             ->add('adresseCp')
  82.             ->add('adresseComplement')
  83.             ->add('adresseComplement2')
  84.             //->add('tempsTrajet')
  85.             //->add('recurrence')
  86.             ->add('alerte'ChoiceType::class, [
  87.                 'choices' => [
  88.                     'Aucune'                    => '',
  89.                     'Au moment de l\'événement' => '0',
  90.                     '5 minutes avant'           => '5',
  91.                     '10 minutes avant'          => '10',
  92.                     '15 minutes avant'          => '15',
  93.                     '30 minutes avant'          => '30',
  94.                     '1 heure avant'             => '60',
  95.                     '2 heures avant'            => '120',
  96.                     '1 jour avant'              => '2880',
  97.                     '2 jours avant'             => '5760',
  98.                     '1 semaine avant'           => '10080',
  99.                 ],
  100.                 // *this line is important*
  101.             ])
  102.             ->add('tempsTrajet'ChoiceType::class, [
  103.                 'choices' => [
  104.                     'Aucun'      => '0',
  105.                     '5 minutes'  => '5',
  106.                     '10 minutes' => '10',
  107.                     '15 minutes' => '15',
  108.                     '30 minutes' => '30',
  109.                     '45 minutes' => '45',
  110.                     '1 heure'    => '60',
  111.                     '1 heure 15' => '75',
  112.                     '1 heure 30' => '90',
  113.                     '1 heure 45' => '105',
  114.                     '2 heures '  => '120',
  115.                 ],
  116.                 // *this line is important*
  117.             ])
  118.             ->add('recurrence'ChoiceType::class, [
  119.                 'choices' => [
  120.                     'Aucune'            => '',
  121.                     'Tous les jours'    => 'jour',
  122.                     'Tous les semaines' => 'semaine',
  123.                     'Tous les mois'     => 'mois',
  124.                     'Tous les ans'      => 'an',
  125.                 ],
  126.                 // *this line is important*
  127.             ])
  128.             ->add('finRecurrence'DateType::class, [
  129.                                      'widget' => 'single_text',
  130.                                  ]
  131.             )
  132.             // ->add('dateSaisie', DateTimeType::class, array( 'pickerOptions' =>array('format' => 'dd/mm/yyyy hh:ii')))
  133.             ->add('dateRappel'DateTimeType::class, ['widget' => 'single_text',])
  134.             //->add('categorie')
  135.             ->add('categorie'EntityType::class, [
  136.                 'class'         => Categorie::class,
  137.                 //'choice_name'   => ChoiceList::fieldName($this, 'libelle'),
  138.                 'choice_label'  => function (Categorie $categorie) {
  139.                     return $categorie->getLibelle();
  140.                 },
  141.                 'required'      => false,
  142.                 'query_builder' => function (CategorieRepository $er) use ($entity) {
  143.                     if (== 1) {
  144.                         return $er->createQueryBuilder('x')
  145.                                   ->where('1=1')
  146.                                   ->setParameters([])
  147.                                   ->orderBy('x.libelle''ASC');
  148.                     } else {
  149.                         return $er->createQueryBuilder('x')
  150.                                   ->where('1=1')
  151.                                   ->setParameters([])
  152.                                   ->orderBy('x.libelle''ASC');
  153.                     }
  154.                 },
  155.             ])
  156.             ->add('statut')
  157.             //->add('message')
  158.             ->add('message'TextareaType::class, [
  159.                 'attr' => [
  160.                     'style'      => 'height:180px;',
  161.                     'class'      => 'tinymce',
  162.                     'data-theme' => 'bbcode'// Skip it if you want to use default theme
  163.                 ],
  164.             ])
  165.             ->add('prive'ChoiceType::class, [
  166.                 'label'    => 'Privé',
  167.                 'attr'     => [
  168.                     'class' => '_form-control',
  169.                 ],
  170.                 'choices'  => [['1' => 'Oui'], ['0' => 'Non']],
  171.                 'expanded' => true,
  172.                 'multiple' => false,
  173.                 'required' => true,
  174.             ])
  175.             ->add('client'EntityType::class, [
  176.                 'multiple' => false// Wether or not multiple values are allowed (default to false)
  177.                 'class'    => Client::class,
  178.                 'attr'     => [
  179.                     'class' => 'select2-hidden-accessible',
  180.                 ],
  181.             ])
  182.             ->add('fournisseur'EntityType::class, [
  183.                 'multiple' => false// Wether or not multiple values are allowed (default to false)
  184.                 'class'    => Fournisseur::class,
  185.                 'attr'     => [
  186.                     'class' => 'select2-hidden-accessible',
  187.                 ],
  188.             ])
  189.             ->add('contact'EntityType::class, [
  190.                 'multiple' => false// Wether or not multiple values are allowed (default to false)
  191.                 'class'    => Contact::class,
  192.                 'attr'     => [
  193.                     'class' => 'select2-hidden-accessible',
  194.                 ],
  195.             ])
  196.             ->add('contactFournisseur'EntityType::class, [
  197.                 'multiple' => false// Wether or not multiple values are allowed (default to false)
  198.                 'class'    => Contact::class,
  199.                 'attr'     => [
  200.                     'class' => 'select2-hidden-accessible',
  201.                 ],
  202.             ]);
  203.         $formModifier = function (FormInterface $formClient $client nullFournisseur $fournisseur null$entity$mode "") {
  204.             //$adresses = null === $client ? array() : $client->getAdresses();
  205.             //var_dump($form->getData());
  206.             if ($mode == "client") {
  207.                 /*
  208.                 $adresses = $this->entityManager->getRepository(Adresse::class)->findBy(array(
  209.                      'visible' => 1,
  210.                         'client' => $client->getId(),
  211.                 ));
  212.                 $adresses_siege = $this->entityManager->getRepository(Adresse::class)->findOneBy(array("id"=>$this->params->get('adresse_siege')));
  213.                 //$adresses[]=$adresses_siege;
  214.                 */
  215.                 //$adresses = $this->entityManager->getRepository(Adresse::class)->getAdresseClientNote($client->getId(),"");
  216.                 $adresses $this->entityManager->getRepository(Adresse::class)->findBy([
  217.                                                                                             'visible' => 1,
  218.                                                                                             'client'  => $client->getId(),
  219.                                                                                         ]);
  220.                 $adresses_siege $this->entityManager->getRepository(Adresse::class)->findOneBy(["id" => $this->params->get('adresse_siege')]);
  221.                 $adresses[]     = $adresses_siege;
  222.             } elseif ($mode == "fournisseur") {
  223.                 $adresses       $this->entityManager->getRepository(Adresse::class)->findBy([
  224.                                                                                                   'visible'     => 1,
  225.                                                                                                   'fournisseur' => $fournisseur->getId(),
  226.                                                                                               ]);
  227.                 $adresses_siege $this->entityManager->getRepository(Adresse::class)->findOneBy(["id" => $this->params->get('adresse_siege')]);
  228.                 //$adresses[]     = $adresses_siege;
  229.             } elseif (null === $client && null === $fournisseur) {
  230.                 $adresses = [];
  231.                 //adresses = $this->entityManager->getRepository(Adresse::class)->findBy(["id" => $this->params->get('adresse_siege')]);
  232.             } elseif ($client != null) {
  233.                 /*
  234.                 $adresses = $this->entityManager->getRepository(Adresse::class)->findBy(array(
  235.                      'visible' => 1,
  236.                         'client' => $client->getId(),
  237.                 ));
  238.                 */
  239.                 $fournisseur_id null;
  240.                 if ($fournisseur != null) {
  241.                     $fournisseur_id $fournisseur->getId();
  242.                 }
  243.                 $adresses       $this->entityManager->getRepository(Adresse::class)->getAdresseClientEtFournisseur($client->getId(), $fournisseur_id);
  244.                 $adresses_siege $this->entityManager->getRepository(Adresse::class)->findOneBy(["id" => $this->params->get('adresse_siege')]);
  245.                 //$adresses[]     = $adresses_siege;
  246.             } elseif ($fournisseur != null) {
  247.                 /*
  248.                     $adresses = $this->entityManager->getRepository(Adresse::class)->findBy(array(
  249.                          'visible' => 1,
  250.                             'fournisseur' => $fournisseur->getId(),
  251.                     ));
  252.                     */
  253.                 $client_id null;
  254.                 if ($client != null) {
  255.                     $client_id $client->getId();
  256.                 }
  257.                 $adresses       $this->entityManager->getRepository(Adresse::class)->getAdresseClientEtFournisseur($fournisseur->getId(), $client_id);
  258.                 $adresses_siege $this->entityManager->getRepository(Adresse::class)->findOneBy(["id" => $this->params->get('adresse_siege')]);
  259.                 //$adresses[]     = $adresses_siege;
  260.             }
  261.             if (is_object($entity->getAdresse()) && $entity->getAdresse()->getVisible() == false) {
  262.                 $adresses[] = $entity->getAdresse();
  263.             }
  264.             //if(is_object($entity->getAdresseFacturation()) && $entity->getAdresseFacturation()->getVisible() == false) $adresses[]= $entity->getAdresseFacturation();
  265.             $reglement null === $client ?: $client->getModeReglement();
  266.             $pro       "0";
  267.             if (is_object($client)) {
  268.                 $repo_client_categorie $this->entityManager->getRepository(ClientCategorie::class);
  269.                 $premiere_categorie    $repo_client_categorie->getCategorieRacinePourClient($client);
  270.                 if ( ! is_object($premiere_categorie)) {
  271.                     $pro "0";
  272.                 } elseif ( ! is_object($premiere_categorie->getCategorie())) {
  273.                     $pro "0";
  274.                 } elseif ( ! $premiere_categorie->getCategorie()->getProfessionnel()) {
  275.                     $pro "0";
  276.                 } else {
  277.                     $pro "1";
  278.                 }
  279.             }
  280.             /*if(is_object($client)) {
  281.                 if(is_object($client->getTypeClient())) {
  282.                     if($client->getTypeClient()->getId() == "2") $pro = "1";
  283.                 }
  284.             }*/
  285.             $repo_utilisateur_zone_geographique $this->entityManager->getRepository(UtilisateurZoneGeographique::class);
  286.             $repo_zone                          $this->entityManager->getRepository(Zone::class);
  287.             $dataTva       1;
  288.             $dataAtributes = [];
  289.             //print_r($adresses);
  290.             foreach ($adresses as $a) {
  291.                 $paysUe  "0";
  292.                 $dataTva 1;
  293.                 $pays_obj null;
  294.                 $pays_id  null;
  295.                 if ($a !== null && is_object($a->getPays())) {
  296.                     if ($a->getPays()->getId() != "370095" && $a->getPays()->getEurope()) {
  297.                         $paysUe "1";
  298.                     }
  299.                     if ($pro == && $a->getPays()->getId() != "370095") {
  300.                         $dataTva 0;
  301.                     }
  302.                     if ($pro == && $a->getPays()->getEurope() == false) {
  303.                         $dataTva 0;
  304.                     }
  305.                     $pays_obj $a->getPays();
  306.                     $pays_id  $a->getPays()->getId();
  307.                 }
  308.                 if (is_object($client) && is_object($client->getCompta()) && $client->getCompta()->getTva() == 0) {
  309.                     //    echo "eeee";
  310.                     $dataTva 0;
  311.                 }
  312.                 $data_societe               "";
  313.                 $data_numero                "";
  314.                 $data_rue                   "";
  315.                 $data_complement            "";
  316.                 $data_complement2           "";
  317.                 $data_cp                    "";
  318.                 $data_ville                 "";
  319.                 $data_secteur               "";
  320.                 $data_secteur_libelle       "";
  321.                 $data_secteur_obj           "";
  322.                 $data_commercial            "";
  323.                 $data_assistante_commercial "";
  324.                 $data_societe      $a->getSociete();
  325.                 $data_numero       $a->getNumero();
  326.                 $data_rue          $a->getRue();
  327.                 $data_complement   $a->getComplement();
  328.                 $data_complement_2 $a->getComplement2();
  329.                 if (is_object($a->getCodePostal())) {
  330.                     $data_cp $a->getCodePostal()->getCodePostal();
  331.                 }
  332.                 if (is_object($a->getVille())) {
  333.                     $data_ville $a->getVille()->getTitre();
  334.                 }
  335.                 if ($data_cp != "") {
  336.                     $data_secteur_obj $repo_zone->findSecteurGeograhiqueByCodePostal($data_cp$pays_id);
  337.                     //echo "XXX";
  338.                 }
  339.                 if ( ! is_object($data_secteur_obj) && is_object($pays_obj) && is_object($pays_obj->getSecteurGeographique())) {
  340.                     $data_secteur_obj $pays_obj;
  341.                     //echo "YYYY";
  342.                 }
  343.                 //echo "AAAA";
  344.                 if (is_object($data_secteur_obj) && is_object($data_secteur_obj->getSecteurGeographique())) {
  345.                     $data_secteur               $data_secteur_obj->getSecteurGeographique()->getId();
  346.                     $data_secteur_libelle       $data_secteur_obj->getSecteurGeographique()->getLibelle();
  347.                     $data_assistante_commercial $repo_utilisateur_zone_geographique->findAssistanteCommercialByCodePostal($data_secteur_obj->getSecteurGeographique());
  348.                     $data_commercial            $repo_utilisateur_zone_geographique->findCommercialByCodePostal($data_secteur_obj->getSecteurGeographique());
  349.                 }
  350.                 $adrTab = [
  351.                     'data-pro'                   => $pro,
  352.                     'data-ue'                    => $paysUe,
  353.                     'data-tva'                   => $dataTva,
  354.                     'data-societe'               => $data_societe,
  355.                     'data-numero'                => $data_numero,
  356.                     'data-rue'                   => $data_rue,
  357.                     'data-complement'            => $data_complement,
  358.                     'data-complement2'           => $data_complement2,
  359.                     'data-cp'                    => $data_cp,
  360.                     'data-ville'                 => $data_ville,
  361.                     'data-secteur'               => $data_secteur,
  362.                     'data-secteur-libelle'       => $data_secteur_libelle,
  363.                     'data-commercial'            => $data_commercial,
  364.                     'data-assistante-commercial' => $data_assistante_commercial,
  365.                 ];
  366.                 $dataAtributes[] = $adrTab;
  367.             }
  368.             $form->add('adresse'EntityType::class, [
  369.                 'class'       => Adresse::class,
  370.                 'placeholder' => '',
  371.                 'choices'     => $adresses,
  372.                 'choice_attr' => $dataAtributes,
  373.             ]);
  374.         };
  375. //        $builder->get('fournisseur')->addModelTransformer(new IdToFournisseurTransformer($this->entityManager));
  376. //        $builder->get('client')->addModelTransformer(new IdToClientTransformer($this->entityManager));
  377. //        $builder->get('contact')->addModelTransformer(new IdToContactTransformer($this->entityManager));
  378. //        $builder->get('contactFournisseur')->addModelTransformer(new IdToContactTransformer($this->entityManager));
  379.         //$builder->get('categorie')->addModelTransformer(new IdToCategorieNoteTransformer($this->entityManager));
  380.         $builder->addEventListener(
  381.             FormEvents::PRE_SET_DATA,
  382.             function (FormEvent $event) use ($formModifier$entity) {
  383.                 // this would be your entity, i.e. SportMeetup
  384.                 $data $event->getData();
  385.                 if (is_object($data->getAdresse()) && is_object($data->getAdresse()->getFournisseur())) {
  386.                     $formModifier($event->getForm(), null$data->getFournisseur(), $entity$mode "fournisseur");
  387.                     //echo "A";
  388.                     //exit;
  389.                 } elseif (is_object($data->getAdresse()) && is_object($data->getAdresse()->getClient())) {
  390.                     $formModifier($event->getForm(), $data->getClient(), null$entity$mode "client");
  391.                     //echo "B";
  392.                     //exit;
  393.                 } else {
  394.                     $formModifier($event->getForm(), $data->getClient(), $data->getFournisseur(), $entity);
  395.                     //echo "C";
  396.                     //exit;
  397.                 }
  398.             }
  399.         );
  400.         $builder->get('client')->addEventListener(
  401.             FormEvents::POST_SUBMIT,
  402.             function (FormEvent $event) use ($formModifier$entity) {
  403.                 // It's important here to fetch $event->getForm()->getData(), as
  404.                 // $event->getData() will get you the client data (that is, the ID)
  405.                 $client $event->getForm()->getData();
  406.                 //$fournisseur = $event->getForm()->getData()->getFournisseur();
  407.                 // since we've added the listener to the child, we'll have to pass on
  408.                 // the parent to the callback functions!
  409.                 $frn_temp $this->requestStack->getMainRequest()->request->get($this->getBlockPrefix());
  410.                 if (isset($frn_temp['fournisseur'])) {
  411.                     $frn_temp $this->entityManager->getRepository(Fournisseur::class)->find($frn_temp['fournisseur']);
  412.                     if ($client != null) {
  413.                         $formModifier($event->getForm()->getParent(), $client$frn_temp$entity);
  414.                     }
  415.                 }
  416.             }
  417.         );
  418.         $builder->get('fournisseur')->addEventListener(
  419.             FormEvents::POST_SUBMIT,
  420.             function (FormEvent $event) use ($formModifier$entity) {
  421.                 // It's important here to fetch $event->getForm()->getData(), as
  422.                 // $event->getData() will get you the client data (that is, the ID)
  423.                 $fournisseur $event->getForm()->getData();
  424.                 //$client = $event->getForm()->getData()->getClient();
  425.                 $client_temp $this->requestStack->getMainRequest()->request->get($this->getBlockPrefix());
  426.                 if (isset($client_temp['client'])) {
  427.                     $client_temp $this->entityManager->getRepository(Client::class)->find($client_temp);
  428.                     // since we've added the listener to the child, we'll have to pass on
  429.                     if ($fournisseur != null) {
  430.                         $formModifier($event->getForm()->getParent(), $client_temp$fournisseur$entity);
  431.                     }
  432.                 }
  433.             }
  434.         );
  435.     }
  436.     public function configureOptions(OptionsResolver $resolver)
  437.     {
  438.         $resolver->setDefaults([
  439.                                    'data_class' => Note::class,
  440.                                ]);
  441.     }
  442. //    public function getBlockPrefix():string
  443. //    {
  444. //        return 'dtc_notesbundle_note';
  445. //    }
  446.     public function getBlockPrefix(): string
  447.     {
  448.         return 'dtc_notesbundle_note';
  449.     }
  450. }