コード例 #1
0
 private function TryPageLoad($currentUser)
 {
     $fileId = $this->page->GetFileId();
     $referenceNumber = $this->page->GetReferenceNumber();
     Log::Debug('Trying to load reservation attachment. FileId: %s, ReferenceNumber %s', $fileId, $referenceNumber);
     $attachment = $this->reservationRepository->LoadReservationAttachment($fileId);
     if ($attachment == null) {
         Log::Error('Error loading resource attachment, attachment not found');
         return false;
     }
     $reservation = $this->reservationRepository->LoadByReferenceNumber($referenceNumber);
     if ($reservation == null) {
         Log::Error('Error loading resource attachment, reservation not found');
         return false;
     }
     if ($reservation->SeriesId() != $attachment->SeriesId()) {
         Log::Error('Error loading resource attachment, attachment not associated with reservation');
         return false;
     }
     if (!$this->permissionService->CanAccessResource(new ReservationResource($reservation->ResourceId()), $currentUser)) {
         Log::Error('Error loading resource attachment, insufficient permissions');
         return false;
     }
     return $attachment;
 }
コード例 #2
0
 /**
  * @param $invitationAction
  * @return string|null
  */
 private function HandleInvitationAction($invitationAction)
 {
     $referenceNumber = $this->page->GetInvitationReferenceNumber();
     $userId = $this->page->GetUserId();
     Log::Debug('Invitation action %s for user %s and reference number %s', $invitationAction, $userId, $referenceNumber);
     $series = $this->reservationRepository->LoadByReferenceNumber($referenceNumber);
     if ($invitationAction == InvitationAction::Accept) {
         $series->AcceptInvitation($userId);
         foreach ($series->AllResources() as $resource) {
             if (!$resource->HasMaxParticipants()) {
                 continue;
             }
             /** @var $instance Reservation */
             foreach ($series->Instances() as $instance) {
                 $numberOfParticipants = count($instance->Participants());
                 if ($numberOfParticipants > $resource->GetMaxParticipants()) {
                     return Resources::GetInstance()->GetString('MaxParticipantsError', array($resource->GetName(), $resource->GetMaxParticipants()));
                 }
             }
         }
     }
     if ($invitationAction == InvitationAction::Decline) {
         $series->DeclineInvitation($userId);
     }
     if ($invitationAction == InvitationAction::CancelInstance) {
         $series->CancelInstanceParticipation($userId);
     }
     if ($invitationAction == InvitationAction::CancelAll) {
         $series->CancelAllParticipation($userId);
     }
     $this->reservationRepository->Update($series);
     return null;
 }
コード例 #3
0
 /**
  * @param ReservationItemView $existingReservation
  * @return bool
  */
 public function Handle(ReservationItemView $existingReservation)
 {
     $reservation = $this->repository->LoadById($existingReservation->GetId());
     $reservation->ApplyChangesTo(SeriesUpdateScope::ThisInstance);
     $reservation->Delete(ServiceLocator::GetServer()->GetUserSession());
     $this->repository->Delete($reservation);
     return true;
 }
コード例 #4
0
 /**
  * @param $invitationAction
  * @return string|null
  */
 private function HandleInvitationAction($invitationAction)
 {
     $referenceNumber = $this->page->GetInvitationReferenceNumber();
     $userId = $this->page->GetUserId();
     Log::Debug('Invitation action %s for user %s and reference number %s', $invitationAction, $userId, $referenceNumber);
     $series = $this->reservationRepository->LoadByReferenceNumber($referenceNumber);
     if ($invitationAction == InvitationAction::Join || $invitationAction == InvitationAction::CancelInstance) {
         $rules = array(new ReservationStartTimeRule(new ScheduleRepository()), new ResourceMinimumNoticeCurrentInstanceRule(), new ResourceMaximumNoticeCurrentInstanceRule());
     } else {
         $rules = array(new ReservationStartTimeRule(new ScheduleRepository()), new ResourceMinimumNoticeRule(), new ResourceMaximumNoticeRule());
     }
     /** @var IReservationValidationRule $rule */
     foreach ($rules as $rule) {
         $ruleResult = $rule->Validate($series);
         if (!$ruleResult->IsValid()) {
             return $ruleResult->ErrorMessage();
             return Resources::GetInstance()->GetString('ParticipationNotAllowed');
         }
     }
     $error = null;
     if ($invitationAction == InvitationAction::Accept) {
         $series->AcceptInvitation($userId);
         $error = $this->CheckCapacityAndReturnAnyError($series);
     }
     if ($invitationAction == InvitationAction::Decline) {
         $series->DeclineInvitation($userId);
     }
     if ($invitationAction == InvitationAction::CancelInstance) {
         $series->CancelInstanceParticipation($userId);
     }
     if ($invitationAction == InvitationAction::CancelAll) {
         $series->CancelAllParticipation($userId);
     }
     if ($invitationAction == InvitationAction::Join) {
         if (!$series->GetAllowParticipation()) {
             $error = Resources::GetInstance()->GetString('ParticipationNotAllowed');
         } else {
             $series->JoinReservation($userId);
             $error = $this->CheckCapacityAndReturnAnyError($series);
         }
     }
     if ($invitationAction == InvitationAction::JoinAll) {
         if (!$series->GetAllowParticipation()) {
             $error = Resources::GetInstance()->GetString('ParticipationNotAllowed');
         } else {
             $series->JoinReservationSeries($userId);
             $error = $this->CheckCapacityAndReturnAnyError($series);
         }
     }
     $this->reservationRepository->Update($series);
     return $error;
 }
コード例 #5
0
 private function assertUpdatesSeriesParticipation($invitationAction, $seriesMethod)
 {
     $this->fakeConfig->SetSectionKey(ConfigSection::RESERVATION, ConfigKeys::RESERVATION_START_TIME_CONSTRAINT, ReservationStartTimeConstraint::NONE);
     $currentUserId = 1029;
     $referenceNumber = 'abc123';
     $series = $this->getMock('ExistingReservationSeries');
     $series->expects($this->any())->method('GetAllowParticipation')->will($this->returnValue(true));
     $series->expects($this->any())->method('AllResources')->will($this->returnValue(array()));
     $this->page->expects($this->once())->method('GetResponseType')->will($this->returnValue('json'));
     $this->page->expects($this->once())->method('GetInvitationAction')->will($this->returnValue($invitationAction));
     $this->page->expects($this->once())->method('GetInvitationReferenceNumber')->will($this->returnValue($referenceNumber));
     $this->page->expects($this->once())->method('GetUserId')->will($this->returnValue($currentUserId));
     $this->reservationRepo->expects($this->once())->method('LoadByReferenceNumber')->with($this->equalTo($referenceNumber))->will($this->returnValue($series));
     $series->expects($this->once())->method($seriesMethod)->with($this->equalTo($currentUserId));
     $this->reservationRepo->expects($this->once())->method('Update')->with($this->equalTo($series));
     $this->page->expects($this->once())->method('DisplayResult')->with($this->equalTo(null));
     $this->presenter->PageLoad();
 }
コード例 #6
0
 public function testShowsErrorFileDoesNotBelongToReservation()
 {
     $fileId = 110;
     $resourceId = 1909;
     $referenceNumber = 'rn';
     $seriesId = 1;
     $fileSeriesId = 2;
     $builder = new ExistingReservationSeriesBuilder();
     $builder->WithId($seriesId);
     $builder->WithPrimaryResource(new FakeBookableResource($resourceId));
     $reservationSeries = $builder->Build();
     $reservationAttachment = new FakeReservationAttachment($fileId);
     $reservationAttachment->SetSeriesId($fileSeriesId);
     $this->page->expects($this->once())->method('GetFileId')->will($this->returnValue($fileId));
     $this->page->expects($this->once())->method('GetReferenceNumber')->will($this->returnValue($referenceNumber));
     $this->reservationRepository->expects($this->once())->method('LoadReservationAttachment')->with($this->equalTo($fileId))->will($this->returnValue($reservationAttachment));
     $this->reservationRepository->expects($this->once())->method('LoadByReferenceNumber')->with($this->equalTo($referenceNumber))->will($this->returnValue($reservationSeries));
     $this->page->expects($this->once())->method('ShowError');
     $this->presenter->PageLoad($this->fakeUser);
 }
コード例 #7
0
 public function Persist($existingReservationSeries)
 {
     $this->_repository->Delete($existingReservationSeries);
 }
コード例 #8
0
 public function LoadByReferenceNumber($referenceNumber)
 {
     return $this->_repository->LoadByReferenceNumber($referenceNumber);
 }
コード例 #9
0
 /**
  * @param $invitationAction
  * @return string|null
  */
 private function HandleInvitationAction($invitationAction)
 {
     $referenceNumber = $this->page->GetInvitationReferenceNumber();
     $userId = $this->page->GetUserId();
     $userRepository = new UserRepository();
     $user = $userRepository->LoadById($userId);
     $userCredit = $user->GetAttributeValue(8);
     Log::Debug('Invitation action %s for user %s and reference number %s', $invitationAction, $userId, $referenceNumber);
     $series = $this->reservationRepository->LoadByReferenceNumber($referenceNumber);
     foreach ($this->rules as $rule) {
         $ruleResult = $rule->Validate($series);
         if (!$ruleResult->IsValid()) {
             return Resources::GetInstance()->GetString('ParticipationNotAllowed');
         }
     }
     $error = null;
     $reservationCredit = $series->GetAttributeValue(6);
     if ($invitationAction == InvitationAction::Accept) {
         $error = $this->CheckCapacityAndReturnAnyError($series);
         if (!$error && $userCredit >= $reservationCredit) {
             $userCredit -= $reservationCredit;
             $user->ChangeCustomAttribute(8, $userCredit);
             $userRepository->Update($user);
             $series->AcceptInvitation($userId);
         } else {
             $error = "Yeterli kredininiz bulunmamaktadır. Kredi almak için ödeme gerçekleştirebilirsiniz.";
         }
     }
     if ($invitationAction == InvitationAction::Decline) {
         $series->DeclineInvitation($userId);
     }
     if ($invitationAction == InvitationAction::CancelInstance) {
         $cancelCredit = $user->GetAttributeValue(12);
         //iptal hakkı
         if ($cancelCredit > 0) {
             $cancelCredit -= 1;
             $reservationCredit = $series->GetAttributeValue(6);
             $userCredit += $reservationCredit;
             $user->ChangeCustomAttribute(8, $userCredit);
             $user->ChangeCustomAttribute(12, $cancelCredit);
             /*   first training date optional logic
             				$firstTrainingDate= $user->GetAttributeValue(19);
             				$reservationDate= $series->CurrentInstance()->StartDate();
             				// One more logic should be added to cancel.
             
             				if(strcmp($firstTrainingDate,$reservationDate)==0 ) {
             
             					$user->ChangeCustomAttribute(19,null);
             				}
             */
             $userRepository->Update($user);
             $series->CancelInstanceParticipation($userId);
         } else {
             $error = "You dont have cancel right";
         }
     }
     if ($invitationAction == InvitationAction::CancelAll) {
         $series->CancelInstanceParticipation($userId);
         $series->CancelAllParticipation($userId);
     }
     if ($invitationAction == InvitationAction::Join) {
         if (!$series->GetAllowParticipation()) {
             $error = Resources::GetInstance()->GetString('ParticipationNotAllowed');
         } else {
             $error = $this->CheckCapacityAndReturnAnyError($series);
             $reservationCredit = $series->GetAttributeValue(6);
             if (!$error && $userCredit >= $reservationCredit) {
                 $userCredit -= $reservationCredit;
                 $user->ChangeCustomAttribute(8, $userCredit);
                 $firstTrainingDate = $user->GetAttributeValue(19);
                 $reservationDate = $series->CurrentInstance()->StartDate()->ToTimezone($user->Timezone());
                 // One more logic should be added to cancel.
                 if ($firstTrainingDate == null || $firstTrainingDate == 0) {
                     $firstTrainingDate = $reservationDate;
                     $user->ChangeCustomAttribute(19, $firstTrainingDate);
                 }
                 $userRepository->Update($user);
                 $series->JoinReservationSeries($userId);
             } else {
                 $series->JoinInviteeList($userId);
                 $error = "Eğitime katılmak için ödeme yapmanız gerekmektedir. Ödeme yaptıktan sonra eğitiminizi onaylayıp katılabilirsiniz.  ";
             }
         }
     }
     if ($invitationAction == InvitationAction::JoinAll) {
         if (!$series->GetAllowParticipation()) {
             $error = Resources::GetInstance()->GetString('ParticipationNotAllowed');
         } else {
             $reservationAmount = count($series->Instances());
             $reservationCredit = $reservationAmount * $series->GetAttributeValue(6);
             /**  Bugfix added by Deniz. prevention against participation to reservation in occurence of an error * */
             $error = $this->CheckCapacityAndReturnAnyError($series);
             if (!$error && $userCredit >= $reservationCredit) {
                 $userCredit -= $reservationCredit;
                 $user->ChangeCustomAttribute(8, $userCredit);
                 $firstTrainingDate = $user->GetAttributeValue(19);
                 $reservationDate = $series->CurrentInstance()->StartDate()->ToTimezone($user->Timezone());
                 // One more logic should be added to cancel.
                 if ($firstTrainingDate == null || $firstTrainingDate == 0) {
                     $user->ChangeCustomAttribute(19, $reservationDate);
                 }
                 $userRepository->Update($user);
                 //$series->CurrentInstance()->With
                 $series->JoinReservationSeries($userId);
             } else {
                 $series->JoinInviteeListSeries($userId);
                 $error = "Eğitime katılmak için ödeme yapmanız gerekmektedir. Ödeme yaptıktan sonra eğitiminizi onaylayıp katılabilirsiniz.";
             }
         }
     }
     $this->reservationRepository->Update($series);
     return $error;
 }
コード例 #10
0
 public function Persist($reservation)
 {
     $this->_repository->Add($reservation);
 }