예제 #1
0
 protected function _generateEventColumnData(array $filters)
 {
     // filters assume to be sanitized
     $appointment = new Appointment();
     $appointment->providerId = $filters['providerId'];
     $appointment->roomId = $filters['roomId'];
     $appointment->start = $filters['dateFilter'] . ' ' . self::FILTER_TIME_START;
     $appointment->end = $filters['dateFilter'] . ' ' . self::FILTER_TIME_END;
     $startTime = strtotime($appointment->start);
     $endTime = strtotime($appointment->end);
     // we need to get the length of time to create number of rows in the grid
     $timeLen = ($endTime - $startTime) / 60 / self::FILTER_MINUTES_INTERVAL;
     // NOTE: height is 22px for xp, default 20px
     // prepopulate return data
     $columnData = array();
     //$maps = array();
     $start = $startTime;
     $end = $endTime;
     $ctr = 0;
     while ($start <= $end) {
         $map = array();
         $map['start'] = $start;
         $start = strtotime('+' . self::FILTER_MINUTES_INTERVAL . ' minutes', $start);
         $map['end'] = $start;
         //$maps[$ctr] = $map;
         $row = array();
         // assign row id as rowNumber and columnIndex
         $columnData[$ctr] = array('id' => $ctr + 1, 'data' => array(''), 'map' => $map);
         $ctr++;
     }
     $columnDataCtr = count($columnData);
     $data = array('apps' => array(), 'events' => array());
     $mapIndex = 0;
     $apps = array();
     foreach ($appointment->getIter() as $app) {
         $start = strtotime($app->start);
         for ($i = $mapIndex; $i < $columnDataCtr; $i++) {
             $map = $columnData[$mapIndex]['map'];
             $mapIndex = $i;
             if ($start >= $map['start'] && $start <= $map['end']) {
                 if (!isset($data['apps'][$i])) {
                     $data['apps'][$i] = array();
                 }
                 $data['apps'][$i][] = $app;
                 break;
             }
         }
     }
     $mapIndex = 0;
     $events = array();
     trigger_error('looping schedule event started');
     $scheduleEvent = new ScheduleEvent();
     $db = Zend_Registry::get('dbAdapter');
     $sqlSelect = $db->select()->from('scheduleEvents')->where('providerId = ?', $appointment->providerId)->where('roomId = ?', $appointment->roomId)->where('start >= ?', $appointment->start)->where('end <= ?', $appointment->end)->where('start <= end')->order('start ASC');
     $stmt = $db->query($sqlSelect);
     $stmt->setFetchMode(Zend_Db::FETCH_ASSOC);
     while ($row = $stmt->fetch()) {
         $event = new ScheduleEvent();
         $event->populateWithArray($row);
         $start = strtotime($event->start);
         for ($i = $mapIndex; $i < $columnDataCtr; $i++) {
             $map = $columnData[$i]['map'];
             $mapIndex = $i;
             if ($start >= $map['start'] && $start <= $map['end']) {
                 if (!isset($data['events'][$i])) {
                     $data['events'][$i] = array();
                 }
                 $data['events'][$i] = $event;
                 break;
             }
         }
     }
     trigger_error('looping schedule event ended');
     $colMultiplier = 1;
     $zIndex = 0;
     foreach ($data['apps'] as $index => $apps) {
         $ctr = count($apps);
         $columnData[$index]['userdata']['ctr'] = $ctr;
         if ($ctr > $colMultiplier) {
             $colMultiplier = $ctr;
         }
         for ($i = 0; $i < $ctr; $i++) {
             $app = $apps[$i];
             $this->_populateAppointmentRow($app, $columnData, $index, $i, $ctr);
         }
     }
     $header = "{$filters['dateFilter']}<br>";
     $title = $filters['dateFilter'];
     // temporarily set the header as providerId
     $providerId = (int) $filters['providerId'];
     $roomId = (int) $filters['roomId'];
     if ($providerId > 0) {
         $provider = new Provider();
         $provider->setPersonId($providerId);
         $provider->populate();
         $name = $provider->optionName;
         // we simply replace the comma with its html equivalent (&#44;) because this may cause not to render the header
         $header .= str_replace(',', '&#44;', $name);
         $title .= ' -> ' . $name;
     }
     if ($roomId > 0) {
         $room = new Room();
         $room->id = $roomId;
         $room->populate();
         if ($providerId > 0) {
             $header .= '<br>';
         }
         $header .= $room->name;
         $title .= ' -> ' . $room->name;
     }
     $buildings = array();
     foreach ($data['events'] as $index => $event) {
         $this->_populateScheduleEventRow($event, $columnData, $index);
         $buildingId = (int) $event->buildingId;
         $building = new Building();
         $building->buildingId = $buildingId;
         $building->populate();
         $buildings[$buildingId] = $building->displayName;
     }
     $eventBuilding = implode(', ', $buildings);
     $header .= '<br>(' . $eventBuilding . ')';
     $title .= ' -> (' . $eventBuilding . ')';
     $header = '<label title="' . $title . '">' . $header . '</label>';
     for ($i = 0; $i < $columnDataCtr; $i++) {
         unset($columnData[$i]['map']);
     }
     $columnData[0]['userdata']['colMultiplier'] = $colMultiplier;
     $columnData[0]['userdata']['providerId'] = $appointment->providerId;
     $columnData[0]['userdata']['roomId'] = $appointment->roomId;
     $columnData[0]['userdata']['date'] = $filters['dateFilter'];
     return array('header' => $header, 'events' => array('rows' => $columnData));
 }
 public function processRemoveScheduleAction()
 {
     $weekday = (int) $this->_getParam('weekday') - 1;
     $scheduleDate = date('Y-m-d', strtotime($this->_getParam('scheduleDate')));
     $providerId = (int) $this->_getParam('providerId');
     $roomId = (int) $this->_getParam('roomId');
     $scheduleEventId = (int) $this->_getParam('id');
     $weekDates = ScheduleEvent::computeWeekDates($scheduleDate);
     $date = $weekDates['start'];
     if ($weekday > 0) {
         $date = date('Y-m-d', strtotime("+{$weekday} days", strtotime($date)));
     }
     if ($scheduleEventId > 0) {
         $scheduleEvent = new ScheduleEvent();
         $scheduleEvent->scheduleEventId = $scheduleEventId;
         $scheduleEvent->setPersistMode(WebVista_Model_ORM::DELETE);
         $scheduleEvent->persist();
     }
     $start = $date . ' 00:00:00';
     $end = $date . ' 23:59:59';
     $filters = array();
     $filters['providerId'] = $providerId;
     $filters['roomId'] = $roomId;
     $filters['start'] = $start;
     $filters['end'] = $end;
     $scheduleEventIterator = new ScheduleEventIterator(null, false);
     $scheduleEventIterator->setFilters($filters);
     $data = array();
     foreach ($scheduleEventIterator as $row) {
         $data[] = $this->_getEvent($row->scheduleEventId);
     }
     $json = Zend_Controller_Action_HelperBroker::getStaticHelper('json');
     $json->suppressExit = true;
     $json->direct($data);
 }
예제 #3
0
 public function processDeleteEventsAction()
 {
     $ids = $this->_getParam('id');
     $arrIds = explode(',', $ids);
     $scheduleEvent = new ScheduleEvent();
     foreach ($arrIds as $id) {
         $scheduleEvent->scheduleEventId = $id;
         $scheduleEvent->setPersistMode(WebVista_Model_ORM::DELETE);
         $scheduleEvent->persist();
     }
     $data = true;
     $json = Zend_Controller_Action_HelperBroker::getStaticHelper('json');
     $json->suppressExit = true;
     $json->direct($data);
 }
 public function processRemoveScheduleAction()
 {
     $weekday = (int) $this->_getParam('weekday') - 1;
     $scheduleDate = date('Y-m-d', strtotime($this->_getParam('scheduleDate')));
     $providerId = (int) $this->_getParam('providerId');
     $roomId = (int) $this->_getParam('roomId');
     $scheduleEventId = (int) $this->_getParam('id');
     $weekDates = ScheduleEvent::computeWeekDates($scheduleDate);
     $date = $weekDates['start'];
     if ($weekday > 0) {
         $date = date('Y-m-d', strtotime("+{$weekday} days", strtotime($date)));
     }
     if ($scheduleEventId > 0) {
         $scheduleEvent = new ScheduleEvent();
         $scheduleEvent->scheduleEventId = $scheduleEventId;
         $scheduleEvent->setPersistMode(WebVista_Model_ORM::DELETE);
         $scheduleEvent->persist();
     }
     $start = $date . ' 00:00:00';
     $end = $date . ' 23:59:59';
     $stmt = $this->_stmtScheduleEvents($providerId, $roomId, $start, $end);
     $data = array();
     while ($row = $stmt->fetch()) {
         $data[] = $this->_getEvent($row['scheduleEventId']);
     }
     $json = Zend_Controller_Action_HelperBroker::getStaticHelper('json');
     $json->suppressExit = true;
     $json->direct($data);
 }