/** * 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()); }