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