<?php
namespace App\Form\GestionComerciale;
use App\DataTransformer\Adresses\IdToAdresseTransformer;
use App\DataTransformer\Fournisseurs\IdToFournisseurTransformer;
use App\DataTransformer\GestionComerciale\IdToCommandeTransformer;
use App\Entity\Adresses\Adresse;
use App\Entity\Fournisseurs\Fournisseur;
use App\Entity\GestionComerciale\Commande;
use App\Entity\GestionComerciale\CommandeFournisseur;
use App\Entity\GestionComerciale\StatutCommandeFournisseur;
use App\Repository\GestionComerciale\StatutCommandeFournisseurRepository;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\ChoiceList\ChoiceList;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class CommandeFournisseurType extends AbstractType
{
private $transformerFournisseur;
public function __construct(EntityManagerInterface $entityManager, IdToFournisseurTransformer $transformerFournisseur)
{
$this->transformerFournisseur = $transformerFournisseur;
}
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
//->add('fraisPortSupplementaire')
/*->add('fournisseur', EntityType::class, array('class' => 'DTC\FournisseursBundle\Entity\Fournisseur',
//'choice_name' => ChoiceList::fieldName($this, 'libelle'),
))
*
*/
->add('accuseReception')
->add('commentaire')
->add(
'fournisseur',
TextType::class,
[
'attr' => [
'class' => 'select2-hidden-accessible',
],
]
)
->add('dateApproximativeReception', DateType::class, [
'widget' => 'single_text',
'required' => false,
]
)
->add('dateAccuseReception', DateType::class, [
'widget' => 'single_text',
'required' => false,
]
)
->add('date', DateType::class, [
'widget' => 'single_text',
'required' => false,
]
)
->add('totalPoids', HiddenType::class)
->add('tauxChange')
//->add('commande')
->add('statutCommande', EntityType::class, [
'class' => StatutCommandeFournisseur::class,
//'choice_name' => ChoiceList::fieldName($this, 'libelle'),
'query_builder' => function (StatutCommandeFournisseurRepository $er) {
return $er->createQueryBuilder('x')
->orderBy('x.libelle', 'ASC');
},
])
->add('fraisPortSupplementaire', TextType::class, ['attr' => ['class' => 'numeric']])
->add('fournisseurLibelle')
->add('fournisseurNumeroFacture')
->add('arrondiTva', TextType::class, ['attr' => ['class' => 'numeric']])
->add('totalTtc', HiddenType::class)
->add('modeReglement')
//->add('adresseLivraison')
->add('fraisFixe', TextType::class, ['attr' => ['class' => 'numeric']])
->add('fraisApproche', TextType::class, ['attr' => ['class' => 'numeric']])
->add('commande', EntityType::class, [
'multiple' => false, // Wether or not multiple values are allowed (default to false)
'class' => Commande::class,
'required' => false,
'attr' => [
'class' => 'select2-hidden-accessible',
],
])
->add('adresseLivraison', TextType::class, [
'attr' => [
'class' => 'select2-hidden-accessible',
],
]);
//$builder->add('adresseLivraison');
// $builder->get('fournisseur')->addModelTransformer(new IdToFournisseurTransformer($this->entityManager));
// $builder->get('commande')->addModelTransformer(new IdToCommandeTransformer($this->entityManager));
// $builder->get('adresseLivraison')->addModelTransformer(new IdToAdresseTransformer($this->entityManager));
$builder->get('fournisseur')->addModelTransformer($this->transformerFournisseur);
$formModifier = function (FormInterface $form, $articlesCommande = []) {
$commandes = [];
/*
$articles = array();
$articlesTemp = array();
if (count($articlesCommande)>0){
foreach($articlesCommande as $articleCommande)
$articles[] = $articleCommande->getArticle();
// $articlesTemp[] = $articleCommande->getArticle()->getId();
}
$repo_article = $this->entityManager->getRepository('DTCArticlesBundle:Article');
$repo_commande = $this->entityManager->getRepository('DTCGestionComercialeBundle:Commande');
$commandesId = $repo_article->getCommandes($articles);
// print_r($articlesTemp);
foreach($commandesId as $commandeId){
$commande = $repo_commande->find($commandeId['id']);
if (is_object($commande))
$commandes[] = $commande;
//$choices[$commande['id']] = $commande['reference'];
}
*/
/*
$form->add('commande', EntityType::class, array(
'class' => 'DTC\GestionComercialeBundle\Entity\Commande',
//'property' => 'reference',
'choice_label' => function($commande){
$retour = $commande->getReference();
if(is_object($commande->getClient()))
{
$retour .= ' / '.$commande->getClient()->getNom().' '.$commande->getClient()->getPrenom();
}
return $retour;
},
'required' => false,
'placeholder' => 'Choisir une commande',
'empty_data' => null,
'choices' => $commandes,
));
*/
};
$formModifierAdresses = function (FormInterface $form, Commande $commande = null) {
$adresses = [];
if (is_object($commande)) {
if (is_object($commande->getAdresseLivraison())) {
$adresses[] = $commande->getAdresseLivraison();
}//dump($commande->getAdresseLivraison());
foreach ($commande->getClient()->getAdresses() as $adresse) {
if ( ! is_object($commande->getAdresseLivraison())) {
$adresses[] = $adresse;
} elseif (is_object($commande->getAdresseLivraison()) && $commande->getAdresseLivraison()->getId() != $adresse->getId()) {
$adresses[] = $adresse;
}
}
}
//dump($adresses);
$form->add('adresseLivraison', EntityType::class, [
'class' => Adresse::class,
//'property' => 'rue',
'required' => false,
'placeholder' => 'Choisir une adresse',
'empty_data' => null,
'choices' => $adresses,
]);
};
/*
$builder->addEventListener(
FormEvents::PRE_SET_DATA,
function (FormEvent $event) use ($formModifier, $formModifierAdresses) {
// this would be your entity, i.e. SportMeetup
$data = $event->getData();
//dump($data);
//dump($event->getForm());
//$formModifier($event->getForm(), $data->getArticleCommande());
if ($data->getArticleCommande() !== null)
$formModifier($event->getForm(), $data->getArticleCommande());
else {
$event->getForm()->add('commande', EntityType::class, array(
'class' => 'DTC\GestionComercialeBundle\Entity\Commande',
//'property' => 'reference',
'choice_label' => function($commande){return 'test';},
'required' => false,
'placeholder' => 'Choisir une commande....',
'empty_data' => null,
'choices' => array(),
));
}
//$formModifierAdresses($event->getForm(), $data->getCommande());
if ($data->getCommande() !== null)
$formModifierAdresses($event->getForm(), $data->getCommande());
else {
$event->getForm()->add('adresseLivraison',EntityType::class, array(
'class' => 'DTCAdressesBundle:Adresse',
//'property' => 'rue',
'required' => false,
'placeholder' => 'Choisir une adresse',
'empty_data' => null,
'choices' => array(),
));
}
}
);
*/
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => CommandeFournisseur::class,
]);
}
public function getName()
{
return 'dtc_gestioncomercialebundle_commande_fournisseur';
}
public function getBlockPrefix():string
{
return 'dtc_gestioncomercialebundle_commande_fournisseur';
}
}