src/Form/GestionComerciale/FactureFournisseurType.php line 141

Open in your IDE?
  1. <?php
  2. namespace App\Form\GestionComerciale;
  3. use App\DataTransformer\Fournisseurs\IdToFournisseurTransformer;
  4. use App\Entity\Fournisseurs\Fournisseur;
  5. use App\Entity\GestionComerciale\Commande;
  6. use App\Entity\GestionComerciale\CommandeFournisseur;
  7. use App\Entity\GestionComerciale\StatutCommandeFournisseur;
  8. use App\Repository\GestionComerciale\StatutCommandeFournisseurRepository;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  11. use Symfony\Component\Form\AbstractType;
  12. use Symfony\Component\Form\ChoiceList\ChoiceList;
  13. use Symfony\Component\Form\Extension\Core\Type\DateType;
  14. use Symfony\Component\Form\Extension\Core\Type\HiddenType;
  15. use Symfony\Component\Form\Extension\Core\Type\TextType;
  16. use Symfony\Component\Form\FormBuilderInterface;
  17. use Symfony\Component\Form\FormEvent;
  18. use Symfony\Component\Form\FormEvents;
  19. use Symfony\Component\Form\FormInterface;
  20. use Symfony\Component\OptionsResolver\OptionsResolver;
  21. class FactureFournisseurType extends AbstractType
  22. {
  23.     /**
  24.      * @param FormBuilderInterface $builder
  25.      * @param array $options
  26.      */
  27.     public function buildForm(FormBuilderInterface $builder, array $options)
  28.     {
  29.         $builder
  30.             //->add('fraisPortSupplementaire')
  31.             /*->add('fournisseur', EntityType::class, array('class' => 'DTC\FournisseursBundle\Entity\Fournisseur',
  32.                                                     //'choice_name'   => ChoiceList::fieldName($this, 'libelle'),
  33.             ))
  34.              *
  35.              */
  36.             ->add('accuseReception')
  37.             ->add('commentaire')
  38.             ->add('fournisseur'EntityType::class, [
  39.                 'multiple' => false// Wether or not multiple values are allowed (default to false)
  40.                 'class'    => Fournisseur::class,
  41.                 'attr'  => [
  42.                     'class' => 'select2-hidden-accessible',
  43.                 ],
  44.             ])
  45.             ->add('dateApproximativeReception'DateType::class, [
  46.                                                   'widget'   => 'single_text',
  47.                                                   'required' => false,
  48.                                               ]
  49.             )
  50.             ->add('dateAccuseReception'DateType::class, [
  51.                                            'widget'   => 'single_text',
  52.                                            'required' => false,
  53.                                        ]
  54.             )
  55.             ->add('date'DateType::class, [
  56.                             'widget'   => 'single_text',
  57.                             'required' => false,
  58.                         ]
  59.             )
  60.             ->add('totalPoids'HiddenType::class)
  61.             ->add('tauxChange')
  62.             //->add('commande')
  63.             ->add('statutCommande'EntityType::class, [
  64.                 'class'         => StatutCommandeFournisseur::class,
  65.                 //'choice_name'   => ChoiceList::fieldName($this, 'libelle'),
  66.                 'query_builder' => function (StatutCommandeFournisseurRepository $er) {
  67.                     return $er->createQueryBuilder('x')
  68.                               ->orderBy('x.libelle''ASC');
  69.                 },
  70.             ])
  71.             ->add('fraisPortSupplementaire'TextType::class, ['attr' => ['class' => 'numeric']])
  72.             ->add('fournisseurLibelle')
  73.             ->add('fournisseurNumeroFacture')
  74.             ->add('arrondiTva'TextType::class, ['attr' => ['class' => 'numeric']])
  75.             ->add('totalTtc'HiddenType::class)
  76.             ->add('modeReglement')
  77.             //->add('adresseLivraison')
  78.             ->add('fraisFixe'TextType::class, ['attr' => ['class' => 'numeric']])
  79.             ->add('tauxEscompte'HiddenType::class)
  80.             ->add('escompte'TextType::class, ['attr' => ['class' => 'numeric']])
  81.             ->add('fraisApproche'TextType::class, ['attr' => ['class' => 'numeric']]);
  82.         //$builder->add('adresseLivraison');
  83. //        $builder->get('fournisseur')->addModelTransformer(new IdToFournisseurTransformer($this->entityManager));
  84.         //$builder->get('commande')->addModelTransformer(new IdToCommandeTransformer($this->entityManager));
  85.         //$builder->get('adresseLivraison')->addModelTransformer(new IdToAdresseLivraisonTransformer($this->entityManager));
  86.         $formModifier = function (FormInterface $form$articlesCommande = []) {
  87.             /*
  88.             $articles = array();
  89.             $commandes = array();
  90.             $articlesTemp = array();
  91.             if (count($articlesCommande)>0){
  92.                 foreach($articlesCommande as $articleCommande)
  93.                     $articles[] = $articleCommande->getArticle();
  94.                    // $articlesTemp[] = $articleCommande->getArticle()->getId();
  95.             }
  96.             $repo_article = $this->entityManager->getRepository('DTCArticlesBundle:Article');
  97.             $repo_commande = $this->entityManager->getRepository('DTCGestionComercialeBundle:Commande');
  98.             $commandesId = $repo_article->getCommandes($articles);
  99.             
  100.            // print_r($articlesTemp);
  101.             foreach($commandesId as $commandeId){
  102.                 $commande = $repo_commande->find($commandeId['id']);
  103.                 if (is_object($commande))
  104.                     $commandes[] = $commande;
  105.                 //$choices[$commande['id']] = $commande['reference'];
  106.             }
  107.             $form->add('commande', EntityType::class, array(
  108.                 'class' => 'DTC\GestionComercialeBundle\Entity\Commande',
  109.                 //'property' => 'reference',
  110.                 'choice_label' => function($commande){
  111.                     $retour = $commande->getReference();
  112.                     if(is_object($commande->getClient())) $retour .= ' / '.$commande->getClient()->getNom().' '.$commande->getClient()->getPrenom();
  113.                     return $retour;
  114.                     //return $commande->getReference().' / '.$commande->getClient()->getNom().' '.$commande->getClient()->getPrenom();
  115.                 },
  116.                 'required'    => false,
  117.                 'placeholder' => 'Choisir une commande',
  118.                 'empty_data'  => null,
  119.                 'choices' => $commandes,
  120.                         //'choices' => array(),
  121.             ));
  122.             */
  123.         };
  124.         $formModifierAdresses = function (FormInterface $formCommande $commande null) {
  125.             /*
  126.             $adresses = array();
  127.             if (is_object($commande)){
  128.                 if(is_object($commande->getAdresseLivraison()))
  129.                     $adresses[] = $commande->getAdresseLivraison();//dump($commande->getAdresseLivraison());
  130.                 foreach($commande->getClient()->getAdresses() as $adresse){
  131.                     if(!is_object($commande->getAdresseLivraison()))
  132.                         $adresses[] = $adresse;
  133.                     else if(is_object($commande->getAdresseLivraison()) && $commande->getAdresseLivraison()->getId() != $adresse->getId())
  134.                         $adresses[] = $adresse;
  135.                 }
  136.             }
  137.             //dump($adresses);
  138.             $form->add('adresseLivraison',EntityType::class, array(
  139.                     'class'       => 'DTCAdressesBundle:Adresse',
  140.                     //'property' => 'rue',
  141.                     'required'    => false,
  142.                     'placeholder' => 'Choisir une adresse',
  143.                     'empty_data'  => null,
  144.                     'choices' => $adresses,
  145.                 ));
  146.             */
  147.         };
  148.         $builder->addEventListener(
  149.             FormEvents::PRE_SET_DATA,
  150.             function (FormEvent $event) use ($formModifier$formModifierAdresses) {
  151.                 // this would be your entity, i.e. SportMeetup
  152.                 $data $event->getData();
  153.                 //dump($data);
  154.                 //dump($event->getForm());
  155.                 //$formModifier($event->getForm(), $data->getArticleCommande());
  156.                 /*
  157.                 if ($data->getArticleCommande() !== null)
  158.                     $formModifier($event->getForm(), $data->getArticleCommande());
  159.                 else {
  160.                     $event->getForm()->add('commande', EntityType::class, array(
  161.                         'class' => 'DTC\GestionComercialeBundle\Entity\Commande',
  162.                         //'property' => 'reference',
  163.                         'choice_label' => function($commande){return 'test';},
  164.                         'required'    => false,
  165.                         'placeholder' => 'Choisir une commande....',
  166.                         'empty_data'  => null,
  167.                         'choices' => array(),
  168.                     ));
  169.                 }
  170.                 //$formModifierAdresses($event->getForm(), $data->getCommande());
  171.                 if ($data->getCommande() !== null)
  172.                     $formModifierAdresses($event->getForm(), $data->getCommande());
  173.                 else {
  174.                     $event->getForm()->add('adresseLivraison',EntityType::class, array(
  175.                         'class'       => 'DTCAdressesBundle:Adresse',
  176.                         //'property' => 'rue',
  177.                         'required'    => false,
  178.                         'placeholder' => 'Choisir une adresse',
  179.                         'empty_data'  => null,
  180.                         'choices' => array(),
  181.                     ));
  182.                 }
  183.                 */
  184.             }
  185.         );
  186.     }
  187.     public function configureOptions(OptionsResolver $resolver)
  188.     {
  189.         $resolver->setDefaults([
  190.                                    'data_class' => CommandeFournisseur::class,
  191.                                ]);
  192.     }
  193.     public function getName()
  194.     {
  195.         return 'dtc_gestioncomercialebundle_commande_fournisseur';
  196.     }
  197.     public function getBlockPrefix():string
  198.     {
  199.         return 'dtc_gestioncomercialebundle_commande_fournisseur';
  200.     }
  201. }