Buenas,
Tengo un formulario de una entidad Certificado
. Lo que hago es ver si es un Certificado
nuevo o que no está facturado y muestro el formulario normal con sus requeridos y demás. Pero si el Certificado
no es nuevo y está facturado, sólo permito la edición de algunos campos.
Tengo un problema y es que solo el checkbox llamado part
me sale deshabilitado. Los demás me salen para habilitar o deshabilitar y no sé por qué: ni automático
, ni turbo
, ni 4x4
y están hechos igual. ¿Alguna ayuda?
Os pego el fichero CertificadoType
. Uso symfony 2.6.0-BETA1 (que no sé porque se me instalan las betas, ¿qué opción hay en composer para que se me instalen versiones finales?) ¡Gracias por adelantado!
Respuestas
class CertificadoType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) { $certificado = $event->getData(); $form = $event->getForm(); // Comprobamos si es un certificado nuevo o que no esté facturado if ((!$certificado || null === $certificado->getCodigo()) || $certificado->getFactura() === null) { $form->add('codigo', 'text', array('required' => false)) ->add('cobertura', 'entity', array( 'empty_value' => 'Seleccione una cobertura', 'required' => true, 'class' => 'Lider\ExtranetBundle\Entity\Cobertura') ) ->add('tarifa', 'entity', array( 'empty_value' => 'Seleccione una tarifa', 'required' => true, 'class' => 'Lider\ExtranetBundle\Entity\Tarifa') ) ->add('empresa', 'entity', array( 'empty_value' => 'Seleccione una empresa', 'required' => true, 'class' => 'Lider\ExtranetBundle\Entity\Empresa') ) ->add('tipoalta', 'choice', array( 'choices' => array('nueva' => 'Alta nueva', 'cambio' => 'Cambio Titular'), 'label' => 'Tipo de Alta', 'empty_value' => 'Seleccione tipo de alta', 'required' => true, )) ->add('certificadoasociado', 'genemu_jqueryautocompleter_entity', array( 'attr' => array( 'placeholder' => 'Escriba el certificado', ), 'route_name' => 'admin_ajax_certificadoasociado', 'label' => 'Certificado Asociado', 'class' => 'ExtranetBundle:Certificado', 'query_builder' => function(EntityRepository $er) { return $er ->createQueryBuilder('c'); }, )) ->add('vendedor', 'genemu_jqueryautocompleter_entity', array( 'attr' => array( 'placeholder' => 'Escriba el vendedor', ), 'route_name' => 'admin_ajax_pventa', 'class' => 'ExtranetBundle:Pventa', 'query_builder' => function(EntityRepository $er) { return $er ->createQueryBuilder('pv'); }, )) ->add('recargo') ->add('periodoContratado', 'choice', array( 'choices' => array('6' => '6', '12' => '12', '24' => '24'), 'label' => 'Periodo contratado', 'empty_value' => 'Seleccione', 'required' => true, )) ->add('fechaCompra', 'genemu_jquerydate', array( 'widget' => 'single_text', 'format' => 'dd-MM-yyyy', )) ->add('vendedor', 'genemu_jqueryautocompleter_entity', array( 'attr' => array( 'placeholder' => 'Escriba el vendedor', ), 'route_name' => 'admin_ajax_pventa', 'class' => 'ExtranetBundle:Pventa', 'query_builder' => function(EntityRepository $er) { return $er ->createQueryBuilder('pv'); }, )) ->add('cliente', new CompradorType()) ->add('modelo', 'genemu_jqueryautocompleter_entity', array( 'attr' => array( 'placeholder' => 'Escriba un modelo', ), 'route_name' => 'admin_ajax_modelo', 'class' => 'ExtranetBundle:Modelo', 'query_builder' => function(EntityRepository $er) { return $er ->createQueryBuilder('mod'); }, )) ->add('automatico', 'checkbox', array('required' => false)) ->add('turbo', 'checkbox', array('required' => false)) ->add('todoterreno', 'checkbox', array('required' => false, 'label' => '4x4')) ->add('clasevehiculo', 'entity', array( 'empty_value' => 'Seleccione una cilindrada', 'required' => true, 'class' => 'Lider\ExtranetBundle\Entity\ClaseVehiculo', 'label' => 'Cilindrada' ) ) ->add('combustible', 'entity', array( 'empty_value' => 'Seleccione un combustible', 'required' => true, 'class' => 'Lider\ExtranetBundle\Entity\Combustible') ) ->add('observaciones', 'textarea', array('required' => false)) ->add('matricula') ->add('bastidor', 'text', array('required' => false)) ->add('fechaMatriculacion', 'genemu_jquerydate', array( 'widget' => 'single_text', 'format' => 'dd-MM-yyyy', )) ->add('km') ->add('precioCompra', 'money') ->add('fechaEntregaGarantia', 'genemu_jquerydate', array( 'widget' => 'single_text', 'format' => 'dd-MM-yyyy', 'label' => 'Fecha de Venta' ) ) ->add('fechaEfectoGarantia', 'genemu_jquerydate', array( 'widget' => 'single_text', 'format' => 'dd-MM-yyyy', 'label' => 'Fecha Comienzo Garantía' ) ) ->add('fechaAnulacion', 'genemu_jquerydate', array( 'required' => false, 'widget' => 'single_text', 'format' => 'dd-MM-yyyy', ) ) ->add('comercial', 'entity', array('empty_value' => 'Seleccione un comercial', 'required' => true, 'class' => 'Lider\ExtranetBundle\Entity\Colaborador')) ->add('asistencia', 'checkbox', array('required' => false)) ->add('formapago', 'entity', array('empty_value' => 'Seleccione la forma de pago', 'required' => true, 'class' => 'Lider\ExtranetBundle\Entity\FormaPago', 'label' => 'Forma de pago')) ->add('fechaPago', 'genemu_jquerydate', array( 'required' => false, 'widget' => 'single_text', 'format' => 'dd-MM-yyyy', ) ) ->add('estadoGarantia', 'checkbox', array('required' => false)) ->add('fechaEnvioCartaAnulacion', 'genemu_jquerydate', array( 'required' => false, 'widget' => 'single_text', 'format' => 'dd-MM-yyyy', 'label' => 'Fecha Envío Carta Anulación' ) ) ->add('part', 'checkbox', array('required' => false)) ->add('files', 'collection', array( 'type' => new FileCertificadoType(), 'allow_add' => true, 'allow_delete' => true, 'by_reference' => false, 'label' => 'Adjuntos' )); } else if ($certificado->getFactura() !== null) { $form->add('codigo', 'text', array('required' => false, 'disabled' => true)) ->add('cobertura', 'entity', array( 'empty_value' => 'Seleccione una cobertura', 'required' => true, 'class' => 'Lider\ExtranetBundle\Entity\Cobertura', 'disabled' => true )) ->add('tarifa', 'entity', array( 'empty_value' => 'Seleccione una tarifa', 'required' => true, 'class' => 'Lider\ExtranetBundle\Entity\Tarifa', 'disabled' => true )) ->add('empresa', 'entity', array( 'empty_value' => 'Seleccione una empresa', 'required' => true, 'class' => 'Lider\ExtranetBundle\Entity\Empresa', 'disabled' => true ) ) ->add('tipoalta', 'choice', array( 'choices' => array('nueva' => 'Alta nueva', 'cambio' => 'Cambio Titular'), 'label' => 'Tipo de Alta', 'empty_value' => 'Seleccione tipo de alta', 'required' => true, 'disabled' => true )) ->add('certificadoasociado', 'genemu_jqueryautocompleter_entity', array( 'attr' => array( 'placeholder' => 'Escriba el certificado asociado', ), 'route_name' => 'admin_ajax_certificadoasociado', 'label' => 'Certificado Asociado', 'required' => false, 'class' => 'ExtranetBundle:Certificado', 'query_builder' => function(EntityRepository $er) { return $er ->createQueryBuilder('c'); }, 'disabled' => true )) ->add('recargo', null, array('disabled' => true)) ->add('periodoContratado', 'choice', array( 'choices' => array('6' => '6', '12' => '12', '24' => '24'), 'label' => 'Periodo contratado', 'empty_value' => 'Seleccione', 'required' => true, 'disabled' => true )) ->add('fechaCompra', 'genemu_jquerydate', array( 'widget' => 'single_text', 'format' => 'dd-MM-yyyy', 'disabled' => true )) ->add('vendedor', 'genemu_jqueryautocompleter_entity', array( 'attr' => array( 'placeholder' => 'Escriba el vendedor', ), 'route_name' => 'admin_ajax_pventa', 'class' => 'ExtranetBundle:Pventa', 'query_builder' => function(EntityRepository $er) { return $er ->createQueryBuilder('pv'); }, 'disabled' => true )) ->add('cliente', new CompradorType(), array('disabled' => true)) ->add('modelo', 'genemu_jqueryautocompleter_entity', array( 'attr' => array( 'placeholder' => 'Escriba un modelo', ), 'route_name' => 'admin_ajax_modelo', 'class' => 'ExtranetBundle:Modelo', 'query_builder' => function(EntityRepository $er) { return $er ->createQueryBuilder('mod'); }, 'disabled' => true )) ->add('automatico', 'checkbox', array('required' => false, 'disabled' => true)) ->add('turbo', 'checkbox', array('required' => false, 'disabled' => true)) ->add('todoterreno', 'checkbox', array('required' => false, 'label' => '4x4', 'disabled' => true)) ->add('clasevehiculo', 'entity', array( 'empty_value' => 'Seleccione una cilindrada', 'required' => true, 'class' => 'Lider\ExtranetBundle\Entity\ClaseVehiculo', 'label' => 'Cilindrada', 'disabled' => true ) ) ->add('combustible', 'entity', array( 'empty_value' => 'Seleccione un combustible', 'required' => true, 'class' => 'Lider\ExtranetBundle\Entity\Combustible', 'disabled' => true) ) ->add('observaciones', 'textarea', array('required' => false)) ->add('matricula', null, array('required' => false, 'disabled' => false)) ->add('bastidor', 'text', array('required' => false, 'disabled' => true)) ->add('fechaMatriculacion', 'genemu_jquerydate', array( 'widget' => 'single_text', 'format' => 'dd-MM-yyyy', 'disabled' => true )) ->add('km', null, array('disabled' => true)) ->add('precioCompra', 'money', array('disabled' => true)) ->add('fechaEntregaGarantia', 'genemu_jquerydate', array( 'widget' => 'single_text', 'format' => 'dd-MM-yyyy', 'label' => 'Fecha de Venta', 'disabled' => true ) ) ->add('fechaEfectoGarantia', 'genemu_jquerydate', array( 'widget' => 'single_text', 'format' => 'dd-MM-yyyy', 'label' => 'Fecha Comienzo Garantía', 'disabled' => true ) ) ->add('fechaAnulacion', 'genemu_jquerydate', array( 'required' => false, 'widget' => 'single_text', 'format' => 'dd-MM-yyyy' ) ) ->add('comercial', 'entity', array('empty_value' => 'Seleccione un comercial', 'required' => true, 'class' => 'Lider\ExtranetBundle\Entity\Colaborador', 'disabled' => true)) ->add('asistencia', 'checkbox', array('required' => false, 'disabled' => true)) ->add('formapago', 'entity', array('empty_value' => 'Seleccione la forma de pago', 'required' => true, 'class' => 'Lider\ExtranetBundle\Entity\FormaPago', 'disabled' => true, 'label' => 'Forma de pago')) ->add('fechaPago', 'genemu_jquerydate', array( 'required' => false, 'widget' => 'single_text', 'format' => 'dd-MM-yyyy', 'disabled' => true ) ) ->add('estadoGarantia', 'checkbox', array('required' => false)) ->add('fechaEnvioCartaAnulacion', 'genemu_jquerydate', array( 'required' => false, 'widget' => 'single_text', 'format' => 'dd-MM-yyyy', 'label' => 'Fecha Envío Carta Anulación' ) ) ->add('part', 'checkbox', array('required' => false, 'disabled' => true)) ->add('files', 'collection', array( 'type' => new FileCertificadoType(), 'allow_add' => true, 'allow_delete' => true, 'by_reference' => false, 'label' => 'Adjuntos' )) ; } }); }
@CampoySoft
Respecto a la pregunta de por qué se te instalan las versiones beta de las dependencias de Composer, seguramente tiene que ver con la opción minimum-stability
. Por defecto las versiones recientes de Composer sólo instalan dependencias estables, así que es posible que la opción minimum-stability
en tu archivo composer.json
tenga un valor igual a beta
.
Respecto al problema con el formulario, me temo que yo no voy a poder ayudarte porque los formularios complejos de Symfony no son lo mío. En cualquier caso, sí que me gustaría aconsejarte algo: en casos como el que comentas, puede venir bien dividir el formulario grande en dos formularios más pequeños.
Podrías definir por ejemplo un formulario simple llamado CertificadoPagadoType
o PedidoType
o cualquier otro nombre apropiado y después crear el formulario completo llamado CertificadoType
. Además, como el formulario simple y el completo comparten muchos campos, puedes hacer que uno herede de otro y así aprovechas todos sus campos.
@javiereguiluz