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