src/Form/GestionComerciale/DevisType.php line 187

Open in your IDE?
  1. <?php
  2. namespace App\Form\GestionComerciale;
  3. use App\DataTransformer\Articles\IdToMarqueTransformer;
  4. use App\DataTransformer\Clients\IdToClientTransformer;
  5. use App\DataTransformer\Localisation\IdToSecteurGeographiqueTransformer;
  6. use App\DataTransformer\Utilisateur\IdToContactTransformer;
  7. use App\Entity\Adresses\Adresse;
  8. use App\Entity\Clients\Client;
  9. use App\Entity\Clients\ClientCategorie;
  10. use App\Entity\GestionComerciale\Commande;
  11. use App\Entity\Localisation\SecteurGeographique;
  12. use App\Entity\Localisation\Zone;
  13. use App\Entity\Transporteurs\Transporteur;
  14. use App\Entity\Utilisateur\Contact;
  15. use App\Entity\Utilisateur\Utilisateur;
  16. use App\Entity\Utilisateur\UtilisateurZoneGeographique;
  17. use App\Entity\Vehicules\VehiculeClient;
  18. use App\Repository\Transporteurs\TransporteurRepository;
  19. use App\Repository\Utilisateur\UtilisateurRepository;
  20. use Doctrine\ORM\EntityManagerInterface;
  21. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  22. use Symfony\Component\Form\AbstractType;
  23. use Symfony\Component\Form\ChoiceList\ChoiceList;
  24. use Symfony\Component\Form\Extension\Core\Type\DateType;
  25. use Symfony\Component\Form\Extension\Core\Type\HiddenType;
  26. use Symfony\Component\Form\Extension\Core\Type\TextType;
  27. use Symfony\Component\Form\FormBuilderInterface;
  28. use Symfony\Component\Form\FormEvent;
  29. use Symfony\Component\Form\FormEvents;
  30. use Symfony\Component\Form\FormInterface;
  31. use Symfony\Component\OptionsResolver\OptionsResolver;
  32. class DevisType extends AbstractType
  33. {
  34.     private EntityManagerInterface $entityManager;
  35.     private $transformerClient;
  36.     public function __construct(EntityManagerInterface $entityManager,IdToClientTransformer $transformerClient)
  37.     {
  38.         $this->entityManager $entityManager;
  39.         $this->transformerClient $transformerClient;
  40.     }
  41.     /**
  42.      * @param FormBuilderInterface $builder
  43.      * @param array $options
  44.      */
  45.     public function buildForm(FormBuilderInterface $builder, array $options)
  46.     {
  47.         $builder
  48.             ->add('marge'HiddenType::class)
  49.             ->add('tauxMarge'HiddenType::class)
  50.             ->add('dureeValidite'DateType::class, [
  51.                                      'widget' => 'single_text',
  52.                                  ]
  53.             )
  54.             ->add('delaiRelance')
  55.             ->add('commercial'EntityType::class, [
  56.                 'class'         => Utilisateur::class,
  57.                 //'choice_name'   => ChoiceList::fieldName($this, 'nomPrenom'),
  58.                 'query_builder' => function (UtilisateurRepository $er) {
  59.                     return $er->createQueryBuilder('x')
  60.                               ->where('x.type = :type')
  61.                               ->setParameters(["type" => "4"])
  62.                               ->orderBy('x.nom''ASC');
  63.                 },
  64.             ])
  65.             ->add('assistanteCommercial'EntityType::class, [
  66.                 'class'         => Utilisateur::class,
  67.                 //'choice_name'   => ChoiceList::fieldName($this, 'nomPrenom'),
  68.                 'query_builder' => function (UtilisateurRepository $er) {
  69.                     return $er->createQueryBuilder('x')
  70.                               ->where('x.type = :type')
  71.                               ->setParameters(["type" => "5"])
  72.                               ->orderBy('x.nom''ASC');
  73.                 },
  74.             ])
  75.             ->add('francoPort')
  76.             ->add('fraisPortSupplementaire'TextType::class, ['attr' => ['class' => 'numeric']])
  77.             ->add('tauxTvaFraisPort'HiddenType::class)
  78.             ->add('dateApproximativeReception'DateType::class, [
  79.                                                   'widget' => 'single_text',
  80.                                               ]
  81.             )
  82.             ->add('totalPoids'HiddenType::class)
  83.             ->add('commentaire')
  84.             /*->add( 'statutCommande', EntityType::class, array(
  85.                     'class' => 'DTC\GestionComercialeBundle\Entity\StatutCommande',
  86.                     //'choice_name'   => ChoiceList::fieldName($this, 'libelle'),
  87.                     'query_builder' => function(StatutCommandeRepository $er )  {
  88.                         return $er->createQueryBuilder('x')
  89.                                   ->orderBy('x.libelle', 'ASC');
  90.                 }
  91.             ))
  92.             */
  93.             ->add('transporteur'EntityType::class, [
  94.                 'class'         => Transporteur::class,
  95. //                //'choice_name'   => ChoiceList::fieldName($this, 'libelle'),
  96.                 'required'      => false,
  97.                 'query_builder' => function (TransporteurRepository $er) {
  98.                     return $er->createQueryBuilder('x')
  99.                               ->orderBy('x.libelle''ASC');
  100.                 },
  101.             ])
  102.             ->add(
  103.                 'client',
  104.                 TextType::class,
  105.                 [
  106.                     'attr' => [
  107.                         'class' => 'select2-hidden-accessible',
  108.                     ],
  109.                 ]
  110.             )
  111.             /*
  112.             ->add('client', EntityType::class, [
  113.                 'multiple' => false, // Wether or not multiple values are allowed (default to false)
  114.                 'class'    => Client::class,
  115.                 'attr'  => [
  116.                     'class' => 'select2-hidden-accessible',
  117.                 ],
  118.             ])
  119.             */
  120.             ->add('secteurGeographique'EntityType::class, [
  121.                 'multiple' => false// Wether or not multiple values are allowed (default to false)
  122.                 'class'    => SecteurGeographique::class,
  123.                 'attr'  => [
  124.                     'class' => 'select2-hidden-accessible',
  125.                 ],
  126.             ])
  127.             ->add('contactFacturation'EntityType::class, [
  128.                 'multiple' => false// Wether or not multiple values are allowed (default to false)
  129.                 'class'    => Contact::class,
  130.                 'attr'  => [
  131.                     'class' => 'select2-hidden-accessible',
  132.                 ],
  133.             ])
  134.             ->add('contactLivraison'EntityType::class, [
  135.                 'multiple' => false// Wether or not multiple values are allowed (default to false)
  136.                 'class'    => Contact::class,
  137.                 'attr'  => [
  138.                     'class' => 'select2-hidden-accessible',
  139.                 ],
  140.             ])
  141.             ->add(
  142.                 'contactAcheteur',
  143.                 EntityType::class,
  144.                 [
  145.                     'multiple' => false// Wether or not multiple values are allowed (default to false)
  146.                     'class'    => Contact::class,
  147.                     'attr'  => [
  148.                         'class' => 'select2-hidden-accessible',
  149.                     ],
  150.                 ],
  151.             )
  152.             ->add('dateLivraisonSouhaitee'DateType::class, [
  153.                                               'widget' => 'single_text',
  154.                                           ]
  155.             )
  156.             ->add('nbColis')
  157.             ->add('telephone')
  158.             ->add('telephone2')
  159.             ->add('email');
  160.         $builder->add('referenceClient');
  161.         $builder->get('client')->addModelTransformer($this->transformerClient);
  162. //        $builder->get('contactFacturation')->addModelTransformer(new IdToContactTransformer($this->entityManager));
  163. //        $builder->get('contactLivraison')->addModelTransformer(new IdToContactTransformer($this->entityManager));
  164. //        $builder->get('contactAcheteur')->addModelTransformer(new IdToContactTransformer($this->entityManager));
  165. //
  166. //
  167. //
  168. //        $builder->get('client')->addModelTransformer(new IdToClientTransformer($this->entityManager));
  169. //         $builder->get('secteurGeographique')->addModelTransformer(new IdToSecteurGeographiqueTransformer($this->entityManager));
  170.         $formModifier = function (FormInterface $formClient $client null) {
  171.             $adresses null === $client ? [] : $client->getAdresses();
  172.             $pro "0";
  173.             if (is_object($client)) {
  174.                 $repo_client_categorie $this->entityManager->getRepository(ClientCategorie::class);
  175.                 $premiere_categorie    $repo_client_categorie->getCategorieRacinePourClient($client);
  176.                 if ( ! is_object($premiere_categorie)) {
  177.                     $pro "0";
  178.                 } elseif ( ! is_object($premiere_categorie->getCategorie())) {
  179.                     $pro "0";
  180.                 } elseif ( ! $premiere_categorie->getCategorie()->getProfessionnel()) {
  181.                     $pro "0";
  182.                 } else {
  183.                     $pro "1";
  184.                 }
  185.             }
  186.             /*
  187.             if(is_object($client)) {
  188.                 if(is_object($client->getTypeClient())) {
  189.                     if($client->getTypeClient()->getId() == "2") $pro = "1";
  190.                 }
  191.             }
  192.             */
  193.             $repo_utilisateur_zone_geographique $this->entityManager->getRepository(UtilisateurZoneGeographique::class);
  194.             $repo_zone                          $this->entityManager->getRepository(Zone::class);
  195.             $dataTva       1;
  196.             $dataAtributes = [];
  197.             foreach ($adresses as $a) {
  198.                 $pays_obj null;
  199.                 $pays_id  null;
  200.                 $paysUe "0";
  201.                 if (is_object($a->getPays())) {
  202.                     if ($a->getPays()->getId() != "370095" && $a->getPays()->getEurope()) {
  203.                         $paysUe "1";
  204.                     }
  205.                     if ($pro == && $a->getPays()->getId() != "370095") {
  206.                         $dataTva 0;
  207.                     }
  208.                     if ($pro == && $a->getPays()->getEurope() == false) {
  209.                         $dataTva 0;
  210.                     }
  211.                     $pays_obj $a->getPays();
  212.                     $pays_id  $a->getPays()->getId();
  213.                 }
  214.                 $dataTva 1;
  215.                 if (is_object($client->getCompta()) && $client->getCompta()->getTva() == 0) {
  216.                     //    echo "eeee";
  217.                     $dataTva 0;
  218.                 }
  219.                 $data_societe               "";
  220.                 $data_numero                "";
  221.                 $data_rue                   "";
  222.                 $data_complement            "";
  223.                 $data_complement2           "";
  224.                 $data_cp                    "";
  225.                 $data_ville                 "";
  226.                 $data_secteur               "";
  227.                 $data_secteur_libelle       "";
  228.                 $data_secteur_obj           "";
  229.                 $data_commercial            "";
  230.                 $data_assistante_commercial "";
  231.                 $data_societe      $a->getSociete();
  232.                 $data_numero       $a->getNumero();
  233.                 $data_rue          $a->getRue();
  234.                 $data_complement   $a->getComplement();
  235.                 $data_complement_2 $a->getComplement2();
  236.                 if (is_object($a->getCodePostal())) {
  237.                     $data_cp $a->getCodePostal()->getCodePostal();
  238.                 }
  239.                 if (is_object($a->getVille())) {
  240.                     $data_ville $a->getVille()->getTitre();
  241.                 }
  242.                 if ($data_cp != "") {
  243.                     $data_secteur_obj $repo_zone->findSecteurGeograhiqueByCodePostal($data_cp$pays_id);
  244.                 }
  245.                 if ( ! is_object($data_secteur_obj) && is_object($pays_obj) && is_object($pays_obj->getSecteurGeographique())) {
  246.                     $data_secteur_obj $pays_obj;
  247.                 }
  248.                 if (is_object($data_secteur_obj) && is_object($data_secteur_obj->getSecteurGeographique())) {
  249.                     $data_secteur               $data_secteur_obj->getSecteurGeographique()->getId();
  250.                     $data_secteur_libelle       $data_secteur_obj->getSecteurGeographique()->getLibelle();
  251.                     $data_assistante_commercial $repo_utilisateur_zone_geographique->findAssistanteCommercialByCodePostal($data_secteur_obj->getSecteurGeographique());
  252.                     $data_commercial            $repo_utilisateur_zone_geographique->findCommercialByCodePostal($data_secteur_obj->getSecteurGeographique());
  253.                 }
  254.                 //if($data_secteur != "") $data_commercial = $repo_utilisateur_zone_geographique->findCommercialByCodePostal($data_secteur);
  255.                 //if($data_secteur != "")
  256.                 //if($data_cp != "") $data_assistante_commercial = $repo_utilisateur_zone_geographique->findSecteurGeographiqueByCodePostal($data_cp);
  257.                 $adrTab          = [
  258.                     'data-pro'                   => $pro,
  259.                     'data-ue'                    => $paysUe,
  260.                     'data-tva'                   => $dataTva,
  261.                     'data-societe'               => $data_societe,
  262.                     'data-numero'                => $data_numero,
  263.                     'data-rue'                   => $data_rue,
  264.                     'data-complement'            => $data_complement,
  265.                     'data-complement2'           => $data_complement2,
  266.                     'data-cp'                    => $data_cp,
  267.                     'data-ville'                 => $data_ville,
  268.                     'data-secteur'               => $data_secteur,
  269.                     'data-secteur-libelle'       => $data_secteur_libelle,
  270.                     'data-commercial'            => $data_commercial,
  271.                     'data-assistante-commercial' => $data_assistante_commercial,
  272.                 ];
  273.                 $dataAtributes[] = $adrTab;
  274.             }
  275.             $form->add('adresseLivraison'EntityType::class, [
  276.                 'class'       => Adresse::class,
  277.                 'placeholder' => '',
  278.                 'choices'     => $adresses,
  279.                 'choice_attr' => $dataAtributes,
  280.             ]);
  281.             $form->add('adresseFacturation'EntityType::class, [
  282.                 'class'       => Adresse::class,
  283.                 'placeholder' => '',
  284.                 'choices'     => $adresses,
  285.                 'choice_attr' => $dataAtributes,
  286.             ]);
  287.             $vehicules null === $client ? [] : $client->getVehiculesClient();
  288.             $dataKm        "";
  289.             $dataCT        "";
  290.             $dataSerie     "";
  291.             $dataImmat     "";
  292.             $dataModele    "";
  293.             $dataMarque    "";
  294.             $dataLibelle   "";
  295.             $dataAtributes = [];
  296.             foreach ($vehicules as $vehicule) {
  297.                 $dataImmat $vehicule->getImmatriculation();
  298.                 $dataSerie $vehicule->getNumSerie();
  299.                 if (is_object($vehicule->getDateControleTechnique())) {
  300.                     $dataCT $vehicule->getDateControleTechnique()->format("d/m/Y");
  301.                 } else {
  302.                     $dataCT "";
  303.                 }
  304.                 $dataKm $vehicule->getKilometrage();
  305.                 if (is_object($vehicule->getMarque())) {
  306.                     $dataMarque $vehicule->getMarque()->getLibelle();
  307.                 }
  308.                 if (is_object($vehicule->getModele())) {
  309.                     $dataModele $vehicule->getModele()->getLibelle();
  310.                 } else {
  311.                     $dataModele $vehicule->getLibelle();
  312.                 }
  313.                 if ($vehicule->getLibelle() != '') {
  314.                     $dataLibelle $vehicule->getLibelle();
  315.                 }
  316.                 $adrTab          = [
  317.                     'data-km'      => $dataKm,
  318.                     'data-ct'      => $dataCT,
  319.                     'data-serie'   => $dataSerie,
  320.                     'data-immat'   => $dataImmat,
  321.                     'data-modele'  => $dataModele,
  322.                     'data-marque'  => $dataMarque,
  323.                     'data-libelle' => $dataLibelle,
  324.                 ];
  325.                 $dataAtributes[] = $adrTab;
  326.             }
  327.             $form->add('vehiculesClient'EntityType::class, [
  328.                 'class'        => VehiculeClient::class,
  329.                 'placeholder'  => '',
  330.                 'choices'      => $vehicules,
  331.                 'choice_attr'  => $dataAtributes,
  332.                 'choice_label' => function ($choiceValue$key$value) {
  333.                     return $choiceValue->getLibelle().' ('.$choiceValue->getImmatriculation().')';
  334.                 },
  335.             ]);
  336.         };
  337.         $builder->addEventListener(
  338.             FormEvents::PRE_SET_DATA,
  339.             function (FormEvent $event) use ($formModifier) {
  340.                 // this would be your entity, i.e. SportMeetup
  341.                 $data $event->getData();
  342.                 $formModifier($event->getForm(), $data->getClient());
  343.             }
  344.         );
  345.         $builder->get('client')->addEventListener(
  346.             FormEvents::POST_SUBMIT,
  347.             function (FormEvent $event) use ($formModifier) {
  348.                 // It's important here to fetch $event->getForm()->getData(), as
  349.                 // $event->getData() will get you the client data (that is, the ID)
  350.                 $client $event->getForm()->getData();
  351.                 // since we've added the listener to the child, we'll have to pass on
  352.                 // the parent to the callback functions!
  353.                 $formModifier($event->getForm()->getParent(), $client);
  354.             }
  355.         );
  356.         /*
  357.         $formModifier = function (FormInterface $form, Client $client = null) {
  358.             $vehicules = null === $client ? array() : $client->getVehiculesClient();
  359.             $dataKm = "";
  360.             $dataCT = "";
  361.             $dataSerie = "";
  362.             $dataImmat = "";
  363.             $dataModele = "";
  364.             $dataMarque = "";
  365.             $dataAtributes = array();
  366.             foreach($vehicules as $vehicule) {
  367.                 $dataImmat = $vehicule->getImmatriculation();
  368.                 $dataSerie = $vehicule->getNumSerie();
  369.                 if(is_object($vehicule->getDateControleTechnique())) {
  370.                     $dataCT = $vehicule->getDateControleTechnique()->format("d/m/Y");
  371.                 }
  372.                 else $dataCT = "";
  373.                 $dataKm =$vehicule->getKilometrage();
  374.                 if(is_object($vehicule->getMarque())) {
  375.                     $dataMarque = $vehicule->getMarque()->getLibelle();
  376.                 }
  377.                 if(is_object($vehicule->getModele())) {
  378.                     $dataModele = $vehicule->getModele()->getLibelle();
  379.                 }
  380.                 $adrTab = array('data-km' => $dataKm,'data-ct' => $dataCT,'data-serie' => $dataSerie,'data-immat' => $dataImmat,'data-modele' => $dataModele,'data-marque' => $dataMarque);
  381.                 $dataAtributes[]=$adrTab;
  382.             }
  383.             $form->add('vehiculesClient',EntityType::class, array(
  384.                     'class'       => 'DTCVehiculesBundle:VehiculeClient',
  385.                     'placeholder' => '',
  386.                     'choices'     => $vehicules,
  387.                     'choice_attr' => $dataAtributes,
  388.             ));
  389.         };
  390.         $builder->addEventListener(
  391.             FormEvents::PRE_SET_DATA,
  392.             function (FormEvent $event) use ($formModifier) {
  393.                 // this would be your entity, i.e. SportMeetup
  394.                 $data = $event->getData();
  395.                 $formModifier($event->getForm(), $data->getClient());
  396.             }
  397.         );
  398.         */
  399.         /*
  400.         $builder->addEventListener(
  401.             FormEvents::PRE_SET_DATA,
  402.             function (FormEvent $event) {
  403.                 $form = $event->getForm();
  404.                 // this would be your entity, i.e. SportMeetup
  405.                 $data = $event->getData();
  406.                 $client = $data->getClient();
  407.                 $adresses = null === $client ? array() : $client->getAdresses();
  408.                 $form->add('adresseLivraison',EntityType::class, array(
  409.                     'class'       => 'DTCAdressesBundle:Adresse',
  410.                     'placeholder' => '',
  411.                     'choices'     => $adresses,
  412.                 ));
  413.             }
  414.         );
  415.         */
  416.     }
  417.     public function configureOptions(OptionsResolver $resolver)
  418.     {
  419.         $resolver->setDefaults([
  420.                                    'data_class' => Commande::class,
  421.                                ]);
  422.     }
  423.     public function getName()
  424.     {
  425.         return 'dtc_gestioncomercialebundle_commande';
  426.     }
  427.     public function getBlockPrefix():string
  428.     {
  429.         return 'dtc_gestioncomercialebundle_commande';
  430.     }
  431. }