/**
  * @param Attendee $attendee
  */
 public function registerPayment(Attendee $attendee)
 {
     $attendee->setStatus(Attendee::WAITING_PAYMENT);
     $this->registrationService->createPayment($attendee, '');
     $this->paymentService->approvePayment($attendee->getLastPayment(), false);
     $this->confirm($attendee);
 }
 /**
  * @test
  * @covers PHPSC\Conference\Domain\Service\RegistrationCostCalculator::__construct
  * @covers PHPSC\Conference\Domain\Service\RegistrationCostCalculator::getBaseCost
  * @covers PHPSC\Conference\Domain\Service\RegistrationCostCalculator::getVariation
  * @covers PHPSC\Conference\Domain\Service\RegistrationCostCalculator::getCost
  * @covers PHPSC\Conference\Domain\Service\RegistrationCostCalculator::getStudentDiscount
  */
 public function getCostShouldApplyDiscountWhenAttendeeHasACoupon()
 {
     $this->event->expects($this->any())->method('hasAttendeeRegistration')->willReturn(true);
     $discount = $this->getMock(DiscountCoupon::class);
     $discount->expects($this->any())->method('applyDiscountTo')->willReturn(50);
     $this->attendee->expects($this->any())->method('isStudentRegistration')->willReturn(false);
     $this->attendee->expects($this->any())->method('canAttendTalksDayOnly')->willReturn(false);
     $this->attendee->expects($this->any())->method('getDiscount')->willReturn($discount);
     $this->talkManager->expects($this->any())->method('eventHasAnyApprovedTalk')->willReturn(true);
     $this->event->expects($this->any())->method('isLateRegistrationPeriod')->willReturn(false);
     $this->assertEquals(50, $this->calculator->getCost($this->attendee, new DateTime()));
 }
 /**
  * @param float $cost
  * @param Attendee $attendee
  *
  * @return number
  */
 protected function getStudentDiscount($cost, Attendee $attendee)
 {
     if ($attendee->isStudentRegistration()) {
         return $cost * $attendee->getEvent()->getRegistrationInfo()->getStudentDiscount() / 100;
     }
 }
 /**
  * @param Event $event
  * @param User $user
  * @param boolean $isStudent
  * @param string $registrationType
  * @return Attendee
  */
 public function create(Event $event, User $user, $isStudent, $registrationType)
 {
     $attendee = new Attendee();
     $attendee->setEvent($event);
     $attendee->setUser($user);
     $attendee->setStatus(Attendee::WAITING_PAYMENT);
     $attendee->setArrived(false);
     $attendee->setStudentRegistration($isStudent);
     $attendee->setRegistrationType($registrationType);
     $attendee->setCreationTime(new DateTime());
     if ($this->talkService->userHasAnyApprovedTalk($user, $event)) {
         $attendee->setStatus(Attendee::PAYMENT_NOT_NECESSARY);
         $attendee->setRegistrationType(Attendee::WORKSHOPS_AND_TALKS);
     }
     return $attendee;
 }
 /**
  * @param Attendee $attendee
  */
 public function appendPayment(Attendee $attendee, Payment $payment)
 {
     $attendee->addPayment($payment);
     $this->repository->update($attendee);
 }