Пример #1
0
 public function getState()
 {
     PHPWS_Core::initModClass('hms', 'RoomChangeParticipantStateFactory.php');
     $this->state = RoomChangeParticipantStateFactory::getCurrentStateForParticipant($this);
     return $this->state;
 }
 public function show()
 {
     $tpl = array();
     // Student info
     $tpl['NAME'] = $this->student->getProfileLink();
     $tpl['BANNER_ID'] = $this->student->getBannerId();
     // Participant ID
     // $tpl['PARTICIPANT_ID'] = $this->participant->getId();
     $tpl['CELL_PHONE'] = $this->participant->getCellPhone();
     // Hall Preferences
     $pref1 = $this->participant->getHallPref1();
     $pref2 = $this->participant->getHallPref2();
     if (!is_null($pref1)) {
         $hall1 = new HMS_Residence_Hall($pref1);
         $hallName = $hall1->getHallName();
         // Check if there's also a second hall preference
         if (!is_null($pref2)) {
             $hall2 = new HMS_Residence_Hall($pref2);
             $hallName .= ', ' . $hall2->getHallName();
         }
         $tpl['HALL_PREF'] = $hallName;
     }
     // From bed
     $fromBed = new HMS_Bed($this->participant->getFromBed());
     $tpl['FROM_ROOM'] = $fromBed->where_am_i();
     // To bed
     $toBedId = $this->participant->getToBed();
     if (isset($toBedId)) {
         // If there's already a bed set, show the selected bed
         $toBed = new HMS_Bed($toBedId);
         $tpl['TO_ROOM'] = $toBed->where_am_i();
     }
     /**
      * Check to see if the state is already approved or completed
      */
     $requestState = $this->request->getState();
     if ($requestState instanceof RoomChangeStatePending || $requestState instanceof RoomChangeStateHold) {
         /**
          * Check that the participant is checked into their current assignment
          */
         $checkin = CheckinFactory::getCheckinByBed($this->student, $fromBed);
         if ($checkin == null || $checkin != null && $checkin->getCheckoutDate() != null) {
             NQ::simple('hms', hms\NotificationView::ERROR, "{$this->student->getName()} is not checked-in at his/her current assignment. This must be fixed before this room change can be given final approval.");
         }
     }
     /**
      * **
      * Show approval buttons based on participant's current state
      */
     $particpantState = $this->participant->getState();
     $form = new PHPWS_Form('participant_form');
     if ($particpantState instanceof ParticipantStateNew) {
         // Particpant is in new state, waiting on this student'a approval
         // If the student is logged in, or the user is an admin, show the approve button
         if (UserStatus::getUsername() == $this->student->getUsername() || Current_User::allow('hms', 'admin_approve_room_change')) {
             $approveCmd = CommandFactory::getCommand('RoomChangeStudentApprove');
             $approveCmd->setParticipantId($this->participant->getId());
             $approveCmd->setRequestId($this->request->getId());
             $approveCmd->initForm($form);
             $form->mergeTemplate($tpl);
             $tpl = $form->getTemplate();
             $tpl['APPROVE_BTN'] = '';
             // dummy tag for approve button
         }
     } else {
         if ($particpantState instanceof ParticipantStateStudentApproved) {
             // Participant is in StudentApproved state
             // Get current list of RDs for this participant
             $rds = $this->participant->getCurrentRdList();
             // If current user is an RD for the "from bed" or an admin
             if (in_array(UserStatus::getUsername(), $rds) || Current_User::allow('hms', 'admin_approve_room_change')) {
                 if (!isset($toBedId) && count($this->participants) == 1) {
                     /*
                      * If there's only one particpant and the toBed is not already set,
                      * and the currnent user if the participants current RD, then show the bed selector
                      *
                      * Limit to 1 participant since room selection is for room "switch" requests only, not swaps.
                      * For swaps, the destination bed is already known and is not editable.
                      */
                     // Show the "select a bed" dialog, values are loaded via AJAX
                     $form->addDropBox('bed_select', array('-1' => 'Loading...'));
                     $form->addHidden('gender', $this->student->getGender());
                 }
                 $approveCmd = CommandFactory::getCommand('RoomChangeCurrRdApprove');
                 $approveCmd->setParticipantId($this->participant->getId());
                 $approveCmd->setRequestId($this->request->getId());
                 $approveCmd->initForm($form);
                 $form->mergeTemplate($tpl);
                 $tpl = $form->getTemplate();
                 $tpl['APPROVE_BTN'] = '';
                 // dummy tag for approve button
             }
         } else {
             if ($particpantState instanceof ParticipantStateCurrRdApproved) {
                 // Current RD has approved, Future RD needs to approve
                 // If current user if future RD or admin, show the approve button
                 // Get list of future RDs for "to bed"
                 $rds = $this->participant->getFutureRdList();
                 // Only future RDs and admins can approve
                 if (in_array(UserStatus::getUsername(), $rds) || Current_User::allow('hms', 'admin_approve_room_change')) {
                     $approveCmd = CommandFactory::getCommand('RoomChangeFutureRdApprove');
                     $approveCmd->setParticipantId($this->participant->getId());
                     $approveCmd->setRequestId($this->request->getId());
                     $approveCmd->initForm($form);
                     $form->mergeTemplate($tpl);
                     $tpl = $form->getTemplate();
                     $tpl['APPROVE_BTN'] = '';
                 }
             }
         }
     }
     // Show the edit link for to room if request type is a "switch", user has permissions, and status allows it
     // TODO
     /*** Participant History ***/
     $states = RoomChangeParticipantStateFactory::getStateHistory($this->participant);
     if (!is_null($states)) {
         $stateRows = array();
         foreach ($states as $historyState) {
             $stateRows[] = array('STATE_NAME' => $historyState->getFriendlyName(), 'EFFECTIVE_DATE' => date('M j, Y g:ia', $historyState->getEffectiveDate()), 'COMMITTED_BY' => $historyState->getCommittedBy());
         }
     }
     $tpl['history_rows'] = $stateRows;
     return PHPWS_Template::process($tpl, 'hms', 'admin/roomChangeParticipantView.tpl');
 }