示例#1
0
 /**
  * Renueva el alquiler.
  *
  * @param Rental $rental
  *
  * @return Rental
  */
 public function renewRental(Rental $rental)
 {
     if ($rental->getReturnAt()) {
         throw new FinishedRentalException();
     }
     if ($rental->getUser()->getIsPenalized()) {
         throw new PenalizedUserException();
     }
     if ($rental->getUser()->getFaculty()->getIsEnabled() === false) {
         throw new PenalizedFacultyException();
     }
     if (!$rental->getIsRenewable()) {
         throw new NotRenewableRentalException();
     }
     if ($rental->getIsExpired()) {
         throw new ExpiredRentalException();
     }
     if ($rental->getDaysLeft() > $this->days_before_renovation) {
         throw new TooEarlyRenovationException();
     }
     $left = $rental->getDaysLeft() + $this->days_length_rental;
     $rental->setEndAt(new \DateTime($left . ' days midnight'));
     $this->manager->persist($rental);
     $this->manager->flush();
     $event = new RentalEvent($rental);
     $this->dispatcher->dispatch(RentalEvents::LOCKER_RENEWED, $event);
     return $rental;
 }
示例#2
0
 private function canRent(Rental $rental, User $user)
 {
     if ($rental->getUser() != $user) {
         return false;
     }
     if ($rental->getReturnAt()) {
         return false;
     }
     if ($user->getIsPenalized()) {
         return false;
     }
     if ($user->getFaculty()->getIsEnabled() === false) {
         return false;
     }
     if (!$rental->getIsRenewable()) {
         return false;
     }
     if ($rental->getIsExpired()) {
         return false;
     }
     if ($rental->getDaysLeft() > $this->days_before_renovation) {
         return false;
     }
     return true;
 }
示例#3
0
 /**
  * Return a Rental.
  *
  * @param Rental $rental
  */
 public function returnRental(Rental $rental)
 {
     if ($rental->getReturnAt()) {
         throw new FinishedRentalException();
     }
     if ($rental->getDaysLate() > 0) {
         $this->penaltyService->penalizeRental($rental);
     }
     $now = new \DateTime('now');
     $rental->setReturnAt($now);
     $locker = $rental->getLocker();
     $locker->setOwner(null);
     $locker->setStatus(Locker::AVAILABLE);
     $this->manager->persist($rental);
     $this->manager->persist($locker);
     $this->manager->flush();
     $event = new RentalEvent($rental);
     $this->dispatcher->dispatch(RentalEvents::LOCKER_RETURNED, $event);
 }
 public function it_cannot_return_a_returned_rental(Rental $rental)
 {
     $rental->getReturnAt()->shouldBeCalled()->willReturn(new \DateTime());
     $this->shouldThrow(FinishedRentalException::class)->duringReturnRental($rental);
 }