Пример #1
0
 public function beneficiariesAction(Request $request)
 {
     /** @var $em EntityManager */
     /** @var $repo ClientAccountRepository  */
     $em = $this->get('doctrine.orm.entity_manager');
     $repo = $em->getRepository('WealthbotClientBundle:ClientAccount');
     /** @var $client User */
     $client = $this->getUser();
     $profile = $client->getProfile();
     /** @var $account ClientAccount */
     $account = $repo->findOneBy(array('id' => $request->get('account_id'), 'client_id' => $client->getId()));
     if (!$account) {
         $this->createNotFoundException('You have not account with id: ' . $request->get('account_id') . '.');
     }
     $this->denyAccessForCurrentRetirementAccount($account);
     $beneficiaries = $account->getBeneficiaries();
     if (!$beneficiaries->count()) {
         if ($profile->getMaritalStatus() == Profile::CLIENT_MARITAL_STATUS_MARRIED) {
             $stepActionsKeys = array_flip(array_keys(ClientAccount::getStepActionChoices()));
             if ($stepActionsKeys[$account->getStepAction()] < $stepActionsKeys[ClientAccount::STEP_ACTION_BENEFICIARIES]) {
                 $beneficiary = $this->buildBeneficiaryByClient($client);
             }
         }
         if (!isset($beneficiary)) {
             $beneficiary = new Beneficiary();
         }
         $beneficiary->setAccount($account);
         $beneficiaries->add($beneficiary);
     }
     $isPreSaved = $request->isXmlHttpRequest();
     $form = $this->createForm(new BeneficiariesCollectionFormType($isPreSaved));
     $form->get('beneficiaries')->setData($beneficiaries);
     $originalBeneficiaries = array();
     foreach ($beneficiaries as $item) {
         $originalBeneficiaries[] = $item;
     }
     if ($request->isMethod('post')) {
         $form->bind($request);
         if ($form->isValid()) {
             $beneficiaries = $form['beneficiaries']->getData();
             foreach ($beneficiaries as $beneficiary) {
                 $beneficiary->setAccount($account);
                 $em->persist($beneficiary);
                 foreach ($originalBeneficiaries as $key => $toDel) {
                     if ($beneficiary->getId() === $toDel->getId()) {
                         unset($originalBeneficiaries[$key]);
                     }
                 }
             }
             foreach ($originalBeneficiaries as $beneficiary) {
                 $account->removeBeneficiarie($beneficiary);
                 $em->remove($beneficiary);
             }
             $em->flush();
             $em->clear();
             $account->setStepAction(ClientAccount::STEP_ACTION_BENEFICIARIES);
             $account->setIsPreSaved($isPreSaved);
             $em->persist($account);
             $em->flush();
             $redirectUrl = $this->getRedirectUrl($account, ClientAccount::STEP_ACTION_BENEFICIARIES);
             if ($isPreSaved) {
                 return $this->getJsonResponse(array('status' => 'success', 'redirect_url' => $redirectUrl));
             }
             return $this->redirect($redirectUrl);
         } else {
             if ($isPreSaved) {
                 return $this->getJsonResponse(array('status' => 'error'));
             }
         }
     }
     return $this->render($this->getTemplate('beneficiaries.html.twig'), array('client' => $client, 'account' => $account, 'form' => $form->createView()));
 }