Ejemplo n.º 1
0
 /**
  * Saves a payment
  *
  * @Route("/", name="credit_save")
  * @Method("POST")
  * @Template("TSKPaymentBundle:Default:credit.html.twig")
  */
 public function creditSaveAction(Request $request)
 {
     $session = $this->getRequest()->getSession();
     $sessionKey = $this->container->getParameter('tsk_user.session.org_key');
     $schoolKey = $this->container->getParameter('tsk_user.session.school_key');
     $schoolId = $session->get($schoolKey);
     $em = $this->getDoctrine()->getManager();
     $school = $em->getRepository('TSKSchoolBundle:School')->find($schoolId);
     // this is a little hokey ... searching for payment type when we could otherwise embed it.
     $paymentType = $em->getRepository('TSKPaymentBundle:PaymentType')->findOneBy(array('organization' => $session->get($sessionKey), 'name' => 'credit'));
     $payment = new ReceivePayment();
     if ($paymentType) {
         $payment->setPaymentType($paymentType);
     } else {
         throw new HttpException(404, "Invalid payment type");
     }
     $form = $this->createForm($this->get('tsk_payment.form.type.receivePayment'), $payment, array('is_credit' => true, 'show_date' => $this->canModifyDate()));
     $form->bind($request);
     if ($form->isValid()) {
         $authorizationNum = '';
         if ($payment->getPaymentMethod()->getPaymentType() == 'CREDIT CARD') {
             // if credit card run payment through E4
             $paymentGateway = $this->container->get('tsk_payment.gateway.service');
             $paymentGateway->setCardHoldersName((string) $payment->getContact());
             $paymentGateway->setCreditCardNumber($payment->getCreditCardNumber());
             $paymentGateway->setCreditCardExpiration($payment->getCreditCardExpirationDate());
             $paymentGateway->setCreditCardVerification($payment->getCvvNumber());
             $paymentGateway->setCreditCardType($payment->getPaymentMethod()->getName());
             try {
                 $result = $paymentGateway->purchase($payment->getPaymentAmount());
                 $session->getFlashBag()->add('error', 'There was an error saving your payment!');
                 return $this->redirect($this->generateUrl('tsk_student_default_registerstudent'));
             } catch (\Exception $e) {
             }
             $obj = json_decode($result);
             $authorizationNum = $obj->authorization_num;
         }
         $pmt = new Payment();
         $pmt->setSchool($school);
         $pmt->setPaymentAmount($payment->getPaymentAmount());
         $pmt->setPaymentMethod($payment->getPaymentMethod());
         $pmt->setPaymentType($payment->getPaymentType());
         $pmt->setDescription($payment->getMemo());
         $pmt->setRefNumber($payment->getRefNumber());
         $paymentDate = $payment->getPaymentDate() ? $payment->getPaymentDate() : new \DateTime();
         // $pmt->setCreatedDate($paymentDate);
         $pmt->setAuthorizationNum($authorizationNum);
         $em->persist($pmt);
         $payments = $this->get('request')->request->get('payments');
         foreach ($payment->getCharges() as $charge) {
             if (!empty($payments[$charge->getId()])) {
                 $cp = new ChargePayment();
                 $cp->setCharge($charge);
                 $cp->setPayment($pmt);
                 $cp->setAmount($payments[$charge->getId()]);
                 $em->persist($cp);
             }
         }
         // write to journal?
         $em->flush();
         $dispatcher = $this->get('event_dispatcher');
         $paymentEvent = new PaymentEvent($pmt);
         try {
             $dispatcher->dispatch(PaymentEvents::RECEIVE, $paymentEvent);
         } catch (\Exception $e) {
             throw $e;
         }
         $session->getFlashBag()->add('success', 'Payment saved and applied!');
         return $this->redirect($this->generateUrl('tsk_payment_default_index', array('contactID' => $payment->getContact()->getId())));
     } else {
         $session->getFlashBag()->add('error', 'There was an error saving your payment!');
     }
     return array('entity' => $payment, 'form' => $form->createView());
 }