Esempio n. 1
0
 /**
  * @param \Doctrine\Common\Persistence\ObjectManager $manager
  */
 public function load(ObjectManager $manager)
 {
     /** @var User $userDefault */
     $userDefault = $manager->merge($this->getReference('user-default'));
     $payment = new Payment();
     $payment->setUser($userDefault);
     $payment->setAmount(0);
     $payment->setStatus(Payment::STATUS_PAID);
     $manager->persist($payment);
     $this->addReference('payment', $payment);
     $payment = new Payment();
     $payment->setUser($userDefault);
     $payment->setAmount(0);
     $payment->setStatus(Payment::STATUS_PENDING);
     $manager->persist($payment);
     $this->addReference('pending', $payment);
     /** @var User $userDefault2 */
     $userDefault2 = $manager->merge($this->getReference('user-default2'));
     $payment = new Payment();
     $payment->setUser($userDefault2);
     $payment->setAmount(0);
     $payment->setStatus(Payment::STATUS_PAID);
     $manager->persist($payment);
     $this->addReference('payment2', $payment);
     $payment = new Payment();
     $payment->setUser($userDefault2);
     $payment->setAmount(0);
     $payment->setStatus(Payment::STATUS_PENDING);
     $manager->persist($payment);
     $this->addReference('pending2', $payment);
     $manager->flush();
 }
Esempio n. 2
0
 /**
  * @param Event     $event             Event
  * @param User      $user              User
  * @param Payment   $payment           Payment
  * @param FormView  $promoCodeFormView Promo code form view
  * @param PromoCode $promoCode         Promo code
  * @param FormView  $ticketFormView    Ticket form view
  * @param int       $discountAmount    Discount amount
  *
  * @return array
  *
  * @Template()
  * @Secure(roles="ROLE_USER")
  */
 public function payAction($event, $user, $payment, $promoCodeFormView, $promoCode, $ticketFormView, $discountAmount)
 {
     $config = $this->container->getParameter('stfalcon_payment.config');
     $description = 'Оплата участия в конференции ' . $event->getName() . '. Плательщик ' . $user->getFullname() . ' (#' . $user->getId() . ')';
     /** @var InterkassaService $interkassa */
     $interkassa = $this->container->get('stfalcon_event.interkassa.service');
     $params['ik_co_id'] = $config['interkassa']['shop_id'];
     $params['ik_am'] = $payment->getAmount();
     $params['ik_pm_no'] = $payment->getId();
     $params['ik_desc'] = $description;
     $params['ik_loc'] = 'ru';
     $data = array('ik_co_id' => $config['interkassa']['shop_id'], 'ik_desc' => $description, 'ik_sign' => $interkassa->getSignHash($params));
     return array('data' => $data, 'event' => $event, 'payment' => $payment, 'promoCodeForm' => $promoCodeFormView, 'promoCode' => $promoCode, 'ticketForm' => $ticketFormView, 'discountAmount' => $discountAmount);
 }
Esempio n. 3
0
 /**
  * @param Payment $payment
  * @param float   $newPrice
  */
 private function checkTicketsPricesInPayment($payment, $newPrice)
 {
     // @todo це що за хрєнь? де коментарі з яких все має бути зрозуміло?
     $em = $this->getDoctrine()->getManager();
     // Вытягиваем скидку из конфига
     $paymentsConfig = $this->container->getParameter('stfalcon_payment.config');
     $discount = (double) $paymentsConfig['discount'];
     /** @var Ticket $ticket */
     foreach ($payment->getTickets() as $ticket) {
         // получаем оплаченые платежи пользователя
         $paidPayments = $em->getRepository('StfalconPaymentBundle:Payment')->findPaidPaymentsForUser($ticket->getUser());
         // если цена билета без скидки не ровна новой цене на ивент
         // или неверно указан флаг наличия скидки
         if ($ticket->getAmountWithoutDiscount() != $newPrice || $ticket->getHasDiscount() != (count($paidPayments) > 0 || $ticket->hasPromoCode())) {
             // если не правильно установлен флаг наличия скидки, тогда устанавливаем его заново
             if ($ticket->getHasDiscount() != (count($paidPayments) > 0 || $ticket->hasPromoCode())) {
                 $ticket->setHasDiscount(count($paidPayments) > 0 || $ticket->hasPromoCode());
             }
             $ticket->setAmountWithoutDiscount($newPrice);
             if ($ticket->getHasDiscount()) {
                 if ($promoCode = $ticket->getPromoCode()) {
                     $cost = $newPrice - $newPrice * ($promoCode->getDiscountAmount() / 100);
                 } else {
                     $cost = $newPrice - $newPrice * $discount;
                 }
                 $ticket->setAmount($cost);
             } else {
                 $ticket->setAmount($newPrice);
             }
             $em->merge($ticket);
         }
     }
     $payment->recalculateAmount();
     $em->merge($payment);
     $em->flush();
 }
Esempio n. 4
0
 /**
  * @Route("/admin/event/{slug}/users/add", name="adminusersadd")
  * @Secure(roles="ROLE_ADMIN")
  * @Template()
  */
 public function addUsersAction(Event $event)
 {
     // @todo удалить этот метод. одноразовый харкод
     $em = $this->getDoctrine()->getManager();
     if (isset($_POST['users'])) {
         $users = explode("\r\n", $_POST['users']);
         foreach ($users as $data) {
             // данные с формы
             $dt = explode(' ', $data);
             unset($data);
             $data['name'] = $dt[0] . ' ' . $dt[1];
             $data['email'] = $dt[2];
             $data['discount'] = isset($dt[3]);
             $user = $this->get('fos_user.user_manager')->findUserBy(array('email' => $data['email']));
             // создаем нового пользователя
             if (!$user) {
                 $user = $this->get('fos_user.user_manager')->createUser();
                 $user->setEmail($data['email']);
                 $user->setFullname($data['name']);
                 // генерация временного пароля
                 $password = substr(str_shuffle(md5(time())), 5, 8);
                 $user->setPlainPassword($password);
                 $user->setEnabled(true);
                 $this->get('fos_user.user_manager')->updateUser($user);
                 // отправляем сообщение о регистрации
                 $text = "Приветствуем " . $user->getFullname() . "!\n\nВы были автоматически зарегистрированы на сайте Frameworks Days.\n\nВаш временный пароль: " . $password . "\nЕго можно сменить на странице " . $this->generateUrl('fos_user_change_password', array(), true) . "\n\n\n---\nС уважением,\nКоманда Frameworks Days";
                 $message = \Swift_Message::newInstance()->setSubject("Регистрация на сайте Frameworks Days")->setFrom('*****@*****.**', 'Frameworks Days')->setTo($user->getEmail())->setBody($text);
                 // @todo каждый вызов отнимает память
                 $this->get('mailer')->send($message);
                 echo "#{$user->getId()} {$user->getFullname()} — создаем нового пользователя<br>";
             } else {
                 echo "<b>#{$user->getId()} {$user->getFullname()} — уже зарегистрирован</b><br>";
             }
             // обновляем информацию о компании
             $user->setCountry('Украина');
             if (isset($_POST['city'])) {
                 $user->setCity($_POST['city']);
             }
             $user->setCompany($_POST['company']);
             $em->persist($user);
             // проверяем или у него нет билетов на этот ивент
             /** @var Ticket $ticket */
             $ticket = $em->getRepository('StfalconEventBundle:Ticket')->findOneBy(array('event' => $event->getId(), 'user' => $user->getId()));
             if (!$ticket) {
                 $ticket = new Ticket();
                 $ticket->setEvent($event);
                 $ticket->setUser($user);
                 $em->persist($ticket);
             }
             if ($ticket->isPaid()) {
                 echo "<b>он уже оплатил участие в конференции!</b><br>";
             } else {
                 // цена участия (с учетом скидки)
                 $amount = $data['discount'] ? $_POST['amount'] * 0.8 : $_POST['amount'];
                 $ticket->setAmount($amount);
                 $ticket->setHasDiscount($data['discount']);
                 $ticket->setAmountWithoutDiscount($_POST['amount']);
                 $oldPayment = $ticket->getPayment();
                 if ($oldPayment) {
                     $oldPayment->removeTicket($ticket);
                     $em->persist($oldPayment);
                 }
                 echo "создаем новый платеж<br>";
                 $payment = new Payment();
                 $payment->setUser($user);
                 $payment->addTicket($ticket);
                 // обновляем шлюз и статус платежа
                 $payment->setGate('admin');
                 $payment->setStatus('paid');
                 $em->persist($payment);
                 $em->persist($ticket);
                 // сохраняем все изменения
                 $em->flush();
                 echo "отмечаем как оплачено<br>";
             }
         }
         echo 'complete';
         exit;
     }
     return array();
 }