<?php

namespace Tda\CommandeBundle\Form;

use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Doctrine\ORM\EntityRepository;

use Tda\BaseBundle\Form\DocumentType;
use Tda\CommandeBundle\Form\CommandeIsolLigneType;

class CommandeIsolType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $id_agence = $options['id_agence'];
		$id_regie = $options['id_regie'];
        $id_commande = $options['commandeId'];
        $famille = $options['famille_id'];
        $actualCommerciaux = $options['actualCommerciaux'];
        $actualTelepro = $options['actualTelepro'];
        $actualProduits = $options['actualProduits'];
        $cheminAjaxFonctions = $options['cheminAjaxFonctions'];
        $actualOrganisme = $options['actualOrganisme'];
        $actualOrganisme2 = $options['actualOrganisme2'];
        $actualOrganisme3 = $options['actualOrganisme3'];
        $actualTitreCommande = $options['actualTitreCommande'];
		$id_provenances = $options['id_provenances'];
        $builder->add('devis', TextType::class, array('label' => 'Devis*','attr' => array('class' => 'validate[required,maxSize[255]]', 'autocomplete' => 'off', 'maxlength' => '255', 'onchange' => 'checkDevis(this.value, \''.$id_commande.'\')')))
                ->add('notes', TextareaType::class)
                ->add('detailsFinancement', TextareaType::class)
                ->add('adresseTravaux', TextType::class, array('label' => 'Adresse des travaux','attr' => array('placeholder' => 'si différente de l\'adresse ci-dessus', 'autocomplete' => 'off','class' => 'validate[maxSize[255]]', 'maxlength' => '255')))
                ->add('date', DateType::class, array('label' => 'Date*','widget' => 'single_text','attr' => array('placeholder' => 'jj/mm/aaaa','class' => 'validate[required]')))
                ->add('versementFinancement1', DateType::class, array('label' => 'Date de versement (1)','widget' => 'single_text','attr' => array('placeholder' => 'jj/mm/aaaa')))
                ->add('versementFinancement2', DateType::class, array('label' => 'Date de versement (2)','widget' => 'single_text','attr' => array('placeholder' => 'jj/mm/aaaa')))
                ->add('versementFinancement3', DateType::class, array('label' => 'Date de versement (3)','widget' => 'single_text','attr' => array('placeholder' => 'jj/mm/aaaa')))
                ->add('comerA', HiddenType::class, array('label' => 'comerA'))
				->add('comerB', HiddenType::class, array('label' => 'comerB'))
				->add('comerC', HiddenType::class, array('label' => 'comerC'))
				->add('totAE', HiddenType::class, array('label' => 'totAE'))
				->add('totDE', HiddenType::class, array('label' => 'totDE'))
				->add('totTE', HiddenType::class, array('label' => 'totTE'))
				->add('datePrecaleDeb', DateType::class, array('label' => 'Du','widget' => 'single_text','attr' => array('placeholder' => 'jj/mm/aaaa')))
                ->add('datePrecaleFin', DateType::class, array('label' => 'au','widget' => 'single_text','attr' => array('placeholder' => 'jj/mm/aaaa')))
                //->add('organismeFinancement', 'entity', array(
                ->add('organismeFinancement', EntityType::class, array(
                    'class' => 'TdaAdminBundle:OrganismeFinancement',
                    'label' => 'Organisme (1)',      
                    //'empty_value' => 'Sélectionner un organisme',
                    'empty_data' => 'Sélectionner un organisme',
                    'query_builder' => function(EntityRepository $er) use ( $actualOrganisme ) {
                                        return $er->createQueryBuilder('o')
                                                ->where('o.etat = 1')
                                                ->orWhere('o.id = '.$actualOrganisme.'')
                                                ->orderBy('o.organisme');
                                    },
                ))
                //->add('organismeFinancement2', 'entity', array(
                ->add('organismeFinancement2', EntityType::class, array(
                    'class' => 'TdaAdminBundle:OrganismeFinancement',
                    'label' => 'Organisme (2)',      
                    //'empty_value' => 'Sélectionner un organisme',
                    'empty_data' => 'Sélectionner un organisme',
                    'query_builder' => function(EntityRepository $er) use ( $actualOrganisme2 ) {
                                        return $er->createQueryBuilder('o')
                                                ->where('o.etat = 1')
                                                ->orWhere('o.id = '.$actualOrganisme2.'')
                                                ->orderBy('o.organisme');
                                    },
                ))
                //->add('organismeFinancement3', 'entity', array(
                ->add('organismeFinancement3', EntityType::class, array(
                    'class' => 'TdaAdminBundle:OrganismeFinancement',
                    'label' => 'Organisme (3)',      
                    //'empty_value' => 'Sélectionner un organisme',
                    'empty_data' => 'Sélectionner un organisme',
                    'query_builder' => function(EntityRepository $er) use ( $actualOrganisme3 ) {
                                        return $er->createQueryBuilder('o')
                                                ->where('o.etat = 1')
                                                ->orWhere('o.id = '.$actualOrganisme3.'')
                                                ->orderBy('o.organisme');
                                    },
                ))
                //->add('titre', 'entity', array(
                ->add('titre', EntityType::class, array(
                    'class' => 'TdaAdminBundle:TitreCommande',
                    'label' => 'Titre de la commande',      
                    //'empty_value' => 'Sélectionner un titre',
					//'placeholder' => 'Sélectionner un titre',
                    'empty_data' => 'Sélectionner un titre',
                    'query_builder' => function(EntityRepository $er) use ( $actualTitreCommande ) {
                                        return $er->createQueryBuilder('t')
                                                ->where('t.etat = 1')
                                                ->orWhere('t.id = '.$actualTitreCommande.'')
                                                ->orderBy('t.titre');
                                    },
                    'attr' => array('class' => 'extralarge_input'),
                ))
                ->add('comptant', TextType::class, array('label' => 'Comptant*','attr' => array('class' => 'validate[maxSize[255], required]', 'autocomplete' => 'off', 'maxlength' => '255')))
                ->add('decaisse', TextType::class, array('label' => '','attr' => array('class' => '', 'autocomplete' => 'off', 'maxlength' => '')))
                ->add('bip', TextType::class, array('label' => 'BIP','attr' => array('class' => '', 'autocomplete' => 'off', 'maxlength' => '')))
                ->add('remise', TextType::class, array('label' => 'Décaissé','attr' => array('class' => '', 'autocomplete' => 'off', 'maxlength' => '', 'onchange' => 'modifRemiseIsol(\'commande_isol\')')))
				
                ///->add('remiserenov', TextType::class, array('label' => 'Prime Renov','attr' => array('class' => 'validate[maxSize[255]]', 'autocomplete' => 'off', 'maxlength' => '255')))
				->add('remiseTva', HiddenType::class, array('label' => false))
                ->add('financement', TextType::class, array('label' => 'Montant à financer (1)','attr' => array('class' => 'validate[maxSize[255]]', 'autocomplete' => 'off', 'maxlength' => '255')))
                ->add('financement2', TextType::class, array('label' => 'Montant à financer (2)','attr' => array('class' => 'validate[maxSize[255]]', 'autocomplete' => 'off', 'maxlength' => '255')))
                ->add('financement3', TextType::class, array('label' => 'Montant à financer (3)','attr' => array('class' => 'validate[maxSize[255]]', 'autocomplete' => 'off', 'maxlength' => '255')))
				/*-*/
				 ->add('provenances', EntityType::class, array(
                    'class' => 'TdaAdminBundle:Provenances',
                    'label' => 'Provenace',      
                    //'empty_value' => 'Sélectionner un titre',
                    'empty_data' => 'Sélectionner une provenance',
                    'query_builder' => function(EntityRepository $er) use ( $id_provenances ) {
                                        return $er->createQueryBuilder('p')
                                                ->where('p.etat = 1')
                                                ->orWhere('p.id = '.$id_provenances.'')
                                                ->orderBy('p.id');
                                    },
                     'attr' => array('onchange' => 'displayOperatrice(\'commande_isol\');'),
                ))
				/*-*/
                ->add('nbFinancement', ChoiceType::class, array(
                    'label' => 'Nombre de financement',      
                    'choices' => array(
                        '0' => '0',
                        '1' => '1',
                        '2' => '2',
                        '3' => '3',
                    ),
                    'attr' => array('onchange' => 'displayFinancement(\'commande_isol\');'),
                ))
				->add('annulation', ChoiceType::class, [
					'label' => 'Motif',
					'choices' => [
					'Sélectionner le motif' => null, 
					'Annule et remplace' => 'annuleremplace',
					'Rétract HD' => 'sanssuite',
                    'Sans suite' => 'sanssuite1',
					'Rétract 7J' => '7j',
					'Rétract 14J' => '14j',
					'Rétract HD 25 %' => '25%',
					'Litige' => 'litige',
					'Infinançable' => 'infinancable',
					'Chantier irréalisable' => 'ChantIr',
					]
				])
                ->add('dateAnnulation', DateType::class, array('widget' => 'single_text','attr' => array('placeholder' => 'jj/mm/aaaa','class' => '')))
				->add('telepro', EntityType::class, [
					'class' => 'TdaUserBundle:User',
                    'label' => 'Téléopératrice',
					'query_builder' => function(EntityRepository $er) use ( $actualTelepro ) {
                                        return $er->createQueryBuilder('u')
                                                ->where('u.id NOT IN (325,326,327)')
                                                ->andWhere('u.userDateSortie IS NULL')
                                                ->orWhere('u.userDateSortie = 0000-00-00')
												//->andWhere('u.id NOT IN (325,326,327)') //excepté MONTANA77 94 95
												->andWhere('((u.roles LIKE :ROLE_TELEPRO OR u.roles LIKE :ROLE_SUPER_TELEPRO OR u.roles LIKE :ROLE_MONTANA OR u.roles LIKE :ROLE_INVITE OR u.roles LIKE :ROLE_COMMERCIAL OR u.roles LIKE :ROLE_SUPER_COMER) AND u.id IN (2) AND u.enabled = 0) OR ((u.roles LIKE :ROLE_TELEPRO OR u.roles LIKE :ROLE_SUPER_TELEPRO OR u.roles LIKE :ROLE_MONTANA OR u.roles LIKE :ROLE_INVITE OR u.roles LIKE :ROLE_COMMERCIAL OR u.roles LIKE :ROLE_SUPER_COMER) AND u.enabled = 1)')
                                                ->orWhere('u.id = '.$actualTelepro.'')
												->setParameter('ROLE_TELEPRO', '%ROLE_TELEPRO%') 
												->setParameter('ROLE_SUPER_TELEPRO', '%ROLE_SUPER_TELEPRO%')
												->setParameter('ROLE_MONTANA', '%ROLE_MONTANA%')
												->setParameter('ROLE_INVITE', '%ROLE_INVITE%')
												->setParameter('ROLE_COMMERCIAL', '%ROLE_COMMERCIAL%') //OR u.roles LIKE :ROLE_COMMERCIAL OR u.roles LIKE :ROLE_SUPER_COMER 
												->setParameter('ROLE_SUPER_COMER', '%ROLE_SUPER_COMER%')
                                                ->orderBy('u.id');
                                    },
                    //'attr' => array('style' => 'display:none'),
				])
                ->add('commerciaux', EntityType::class, array(
                    'label' => 'Commerciaux*',
                    'class' => 'TdaUserBundle:User',
                    'multiple'  => true,
                    'query_builder' => function(EntityRepository $er) use ( $id_agence, $id_regie, $actualCommerciaux ) {
                                            return $er->createQueryBuilder('u')
                                                    ->innerJoin('u.agences', 'a')
													->innerJoin('u.regies', 'r')
                                                    ->where('u.enabled = 1')
                                                    ->andWhere('a.id = '.$id_agence.'')
													->andWhere('r.id = '.$id_regie.'')
													->andWhere('u.userDateSortie is NULL')
                                                    ->orWhere('u.id IN (:actualcommerciaux)')
                                                    ->andWhere('u.roles LIKE :ROLE_COMMERCIAL OR u.roles LIKE :ROLE_SUPER_COMER OR u.roles LIKE :ROLE_GERANT OR u.roles LIKE :ROLE_ADMIN and u.id = 68 OR u.roles LIKE :ROLE_TELEPRO and u.id = 134')
                                                    ->setParameter('ROLE_COMMERCIAL', '%ROLE_COMMERCIAL%') //ROLE_SUPER_COMER  ROLE_COMMERCIAL
													->setParameter('ROLE_SUPER_COMER', '%ROLE_SUPER_COMER%')
													->setParameter('ROLE_GERANT', '%ROLE_GERANT%')
													->setParameter('ROLE_ADMIN', '%ROLE_ADMIN%')
													->setParameter('ROLE_TELEPRO', '%ROLE_TELEPRO%')
                                                    ->setParameter('actualcommerciaux', $actualCommerciaux)
                                                    ->orderBy('u.userNom');
                                        },
                    'attr' => array('class' => 'validate[required]','data-placeholder' => 'Sélectionner un commercial')
                ))
                ->add('mentionCommande', EntityType::class, array(
                    'label' => '',
                    'class' => 'TdaAdminBundle:MentionCommande',
                    'multiple'  => true,
                    'query_builder' => function(EntityRepository $er) {
                                            return $er->createQueryBuilder('m')
                                                    ->where('m.etat = 1')
                                                    ->orderBy('m.titre');
                                        },
                    'attr' => array('class' => 'extralarge_input','data-placeholder' => 'Indiquer une mention')
                ))
				->add('crepis', ChoiceType::class, array(
                    'label' => 'Couleur',
					'multiple'  => false,
					'placeholder' => 'Sélectionner une couleur',
                    'choices' => [
                        '016 Ton pierre' => '016tonpierre',
                        '015 Ton pierre clair' => '015tonpierreclair',
                        '001 Blanc cassé' => '001blanccasse',
						'Blanc éclat (pure)' => 'blanceclatpure',
						'Autre' => 'autre',
                    //],'attr' => array('class' => 'validate[maxSize[255],required]'),  Jorge Manrique
                    ],'attr' => array('class' => 'validate[maxSize[255]]'),
                ))
                ->add('totalHT', HiddenType::class, array('label' => 'TOTAL HT'))
                ->add('totalTVA', HiddenType::class, array('label' => 'TOTAL TVA'))
                ->add('totalTTC', HiddenType::class, array('label' => 'TOTAL TTC'))
				->add('remisecee', TextType::class, array('label' => 'Prime CEE'))
				->add('remiserenov', TextType::class, array('label' => 'Estimation Ma Prime Renov ANAH'))
				->add('reste', TextType::class, array('label' => 'Reste a charge'))
				->add('restebis', TextType::class, array('label' => 'Total TTC-Prime CEE'))
				//lettresbis lettres enlettres
				->add('enlettres', TextType::class, array('label' => 'Total-TTC en lettre','attr' => array('class' => 'large_input')))
				->add('lettres', TextType::class, array('label' => 'RESTE A PAYER (reste) en lettre','attr' => array('class' => 'large_input')))
				->add('lettresbis', TextType::class, array('label' => 'RESTE A PAYER 2 BDC (restebis) en lettre','attr' => array('class' => 'large_input')))
				
                ->add('scanCommande', DocumentType::class , array('label' => 'Scan de la commande papier', 'attr' => array('class' => 'niceInput')))
                ->add('scanAft', DocumentType::class , array('label' => 'Scan AFT', 'attr' => array('class' => 'niceInput')))
				->add('referenceAcompte', TextType::class, array('label' => 'Reference','attr' => array('class' => 'validate[maxSize[255]]', 'autocomplete' => 'off', 'maxlength' => '255')))
				->add('dateAcompte', DateType::class, array('label' => 'Date d\'acompte','widget' => 'single_text','attr' => array('placeholder' => 'jj/mm/aaaa')))
				->add('dateEncaissement', DateType::class, array('label' => 'Date d\'encaissement','widget' => 'single_text','attr' => array('placeholder' => 'jj/mm/aaaa')))
                ->add('montantAcompteSolde', TextType::class, array('label' => 'Montant solde','attr' => array('onkeyup' => 'this.value = this.value.replace(/[^0-9.,]/g,"");', 'class' => 'validate[maxSize[14]]', 'autocomplete' => 'off', 'maxlength' => '14')))
				->add('commandedetails', CollectionType::class , array('entry_type' => CommandeIsolLigneType::class, 'entry_options'  => array('actualProduits' => $actualProduits, 'famille' => $famille, 'cheminAjaxFonctions' => $cheminAjaxFonctions), 'allow_add' => true,))
                ->add('save', SubmitType::class, array('label' => 'Enregistrer la commande', 'attr' => array('value' => '1', 'class' => 'defaut_button button_dark_blue')))
                ->add('delete', SubmitType::class, array('label' => 'Supprimer la commande', 'attr' => array('value' => '1', 'onclick' => '', 'class' => 'defaut_button button_yellow')))
                ->add('passageFacture', SubmitType::class, array('label' => 'Passer la commande en état FACTURE', 'attr' => array('value' => '1', 'onclick' => '', 'class' => 'defaut_button button_yellow')))
                ->add('annuler', SubmitType::class, array('label' => 'Annuler la commande', 'attr' => array('value' => '1', 'onclick' => '','class' => 'defaut_button button_blue')))
                ;
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Tda\CommandeBundle\Entity\Commande',
            'id_agence' => false,
			'id_regie' => false,
            'commandeId' => false,
            'actualCommerciaux' => false,
            'actualTelepro' => false,
            'actualProduits' => false,
            'cheminAjaxFonctions' => false,
            'actualOrganisme' => false,
            'actualOrganisme2' => false,
            'actualOrganisme3' => false,
            'actualTitreCommande' => false,
            'famille_id' => false,
			'id_provenances' => false,
        ));
    }
    /*
    public function getName()
    {
        return 'commande';
    }*/
}
