public function buildForm(FormBuilderInterface $builder, array $options)
 {
     $builder->add('title_first', 'text', array('constraints' => array(new NotBlank())))->add('title_middle', 'text', array('constraints' => array(new NotBlank())))->add('title_last', 'text', array('constraints' => array(new NotBlank())))->add('transfer_from', 'choice', array('choices' => TransferInformation::getTransferFromChoices(), 'expanded' => true, 'multiple' => false, 'required' => false))->add('account_number', 'text', array('required' => true))->add('firm_address', 'text', array('required' => true))->add('phone_number', 'text', array('required' => true))->add('is_include_policy', 'choice', array('choices' => array(true => 'Yes', false => 'No'), 'expanded' => true, 'label' => ' ', 'constraints' => array(new NotBlank())))->add('transfer_shares_cash', 'choice', array('choices' => array(1 => 'Transfer my shares in-kind OR', 0 => 'sell my shares, and then transfer cash'), 'expanded' => true, 'multiple' => false, 'required' => false))->add('insurance_policy_type', 'choice', array('choices' => TransferInformation::getInsurancePolicyTypeChoices(), 'expanded' => true, 'multiple' => false, 'required' => false))->add('penalty_amount', 'number', array('required' => false))->add('redeem_certificates_deposit', 'radio', array('required' => false))->add('statementDocument', new PdfDocumentFormType());
     $factory = $builder->getFormFactory();
     $adm = $this->adm;
     $updateFields = function (FormInterface $form, TransferInformation $data) use($factory, $adm) {
         $account = $data->getClientAccount();
         if ($account) {
             if (!$adm->isUsedDocusign($account->getId())) {
                 $form->add($factory->createNamed('delivering_account_title', 'text', null, array('required' => false)))->add($factory->createNamed('ameritrade_account_title', 'text', null, array('required' => false)));
             }
             $form->add($factory->createNamed('financial_institution', 'text', null, array('required' => true, 'read_only' => true, 'data' => $account->getFinancialInstitution())));
             if ($account->isJointType()) {
                 $form->add($factory->createNamed('joint_title_first', 'text', null, array('constraints' => array(new NotBlank()))))->add($factory->createNamed('joint_title_middle', 'text', null, array('constraints' => array(new NotBlank()))))->add($factory->createNamed('joint_title_last', 'text', null, array('constraints' => array(new NotBlank()))));
             }
         }
         if ($data->getTransferCustodian()) {
             $answers = $data->getQuestionnaireAnswers();
             if ($answers->isEmpty()) {
                 $questions = array($data->getTransferCustodian()->getTransferCustodianQuestion());
                 $answers = new ArrayCollection();
                 foreach ($questions as $question) {
                     if (null !== $question) {
                         $answer = new TransferCustodianQuestionAnswer();
                         $answer->setQuestion($question);
                         $answer->setTransferInformation($data);
                         $answers->add($answer);
                     }
                 }
             }
             if ($answers->count()) {
                 $form->add($factory->createNamed('questionnaireAnswers', 'collection', $answers, array('type' => new TransferInformationQuestionAnswerFormType(), 'label' => ' ')));
             }
         }
     };
     $builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) use($updateFields) {
         /** @var TransferInformation $data */
         $data = $event->getData();
         $form = $event->getForm();
         if (null === $data) {
             return;
         }
         $updateFields($form, $data);
     });
     if (!$this->isPreSaved) {
         $builder->addEventListener(FormEvents::BIND, array($this, 'validate'));
     }
 }