From b52903f0bdf45e41b9aa161406777da6a4b7e7d4 Mon Sep 17 00:00:00 2001 From: Tim Steiner <tsteiner2@unl.edu> Date: Tue, 20 Apr 2010 21:56:12 +0000 Subject: [PATCH] Add the ability to view historical queue periods in addition to the current one. (In the queue mananger) --- .../scripts/queue-manager/request-table.phtml | 45 +++++++------------ .../controllers/QueueManagerController.php | 42 ++++++++++++++++- .../models/ApprovalActionQueueModel.php | 24 ++++++++++ .../models/ApprovalActionVoteModel.php | 18 ++++++++ .../views/scripts/queue-manager/view.phtml | 12 ++++- 5 files changed, 110 insertions(+), 31 deletions(-) diff --git a/application/modules/courses/views/scripts/queue-manager/request-table.phtml b/application/modules/courses/views/scripts/queue-manager/request-table.phtml index b5c119db..3f987fa1 100644 --- a/application/modules/courses/views/scripts/queue-manager/request-table.phtml +++ b/application/modules/courses/views/scripts/queue-manager/request-table.phtml @@ -1,49 +1,38 @@ <?php -$requestCourses = Courses_CourseModel::findLatestOfRequest($this->requests); -$requestCourses->orderBy('getCourseCode'); -$requestVotes = Requests_ApproverVoteModel::findVotesForRequests($this->requests, new Zend_Date(), $this->action); - -$cutoffDate = new Zend_Date(); -$cutoffDate->subDay(50); - -$requestUserVotes = array(); -$userIds = array(); -foreach ($requestVotes as $requestId => $votes) { - foreach ($votes as $voteId => $vote) { - if ($vote->getApprovalAction() != $this->action->getId()) { - continue; - } - if ($vote->getTime()->isEarlier($cutoffDate)) { - continue; - } - $userIds[$vote->getUser()] = $vote->getUser(); - $requestUserVotes[$requestId][$vote->getUser()] = $vote->getVote(); +$proposedCourses = Courses_CourseModel::findLatestOfRequest($this->requests); +$originalCourses = Courses_CourseModel::findParentOfRequest($this->requests); + +$requestCourses = array(); +foreach ($this->requests as $requset) { + $requestId = $requset->getId(); + if ($originalCourses[$requestId]) { + $course = $originalCourses[$requestId]; + } else { + $course = $proposedCourses[$requestId]; } + $requestCourses[$requestId] = $course; } -$users = Auth_UserModel::find($userIds); -$users->orderBy('getLastName'); -?> -<?php $this->headLink()->appendStylesheet($this->baseUrl() . '/css/courses/queue-manager/request-table.css', 'all'); ?> +$this->headLink()->appendStylesheet($this->baseUrl() . '/css/courses/queue-manager/request-table.css', 'all'); ?> <table class="zentable primary" id="courseRequestTable"> <tr> <th>Course Code</th> - <?php foreach ($users as $user) { ?> + <?php foreach ($this->users as $user) { ?> <th><?php echo $user->getFirstName() . ' ' . $user->getLastName(); ?></th> <?php } ?> </tr> -<?php foreach ($requestCourses as $course) { - $request = $this->requests[$course->getRequest()]; - $userVotes = $requestUserVotes[$request->getId()]; ?> +<?php foreach ($this->requests as $request) { + $course = $requestCourses[$request->getId()]; + $userVotes = $this->requestUserVotes[$request->getId()]; ?> <tr> <td><?php echo $course->getCourseCode(); ?></td> - <?php foreach ($users as $user) { + <?php foreach ($this->users as $user) { $vote = $userVotes[$user->getId()]; ?> <td><?php echo $vote; ?></td> <?php } ?> diff --git a/application/modules/requests/controllers/QueueManagerController.php b/application/modules/requests/controllers/QueueManagerController.php index 544a41c7..bfa286e6 100644 --- a/application/modules/requests/controllers/QueueManagerController.php +++ b/application/modules/requests/controllers/QueueManagerController.php @@ -22,7 +22,19 @@ class Requests_QueueManagerController extends App_Controller_Action { $in = $this->_getAllParams(); $queue = Requests_ApprovalActionModel::find($in['id']); - $allRequests = Requests_RequestModel::findWithCurrentApprovalAction($queue); + $periodId = $in['period']; + if ($periodId > 0) { + $periods = $queue->getPeriods(); + $period = $periods[$periodId]; + $periodStart = $period['start']->addSecond(1); + $periodEnd = $period['end']; + $allRequests = Requests_ApprovalHistoryModel::findRequestsWithinTimeRangeAndApprovalAction( + $periodStart, $periodEnd, $queue + ); + } else { + $allRequests = Requests_RequestModel::findWithCurrentApprovalAction($queue); + $periodEnd = new Zend_Date(); + } $moduleRequests = array(); foreach ($allRequests as $request) { $module = $request->getModule(); @@ -32,8 +44,36 @@ class Requests_QueueManagerController extends App_Controller_Action $moduleRequests[$module][$request->getId()] = $request; } + $periods = $queue->getPeriods(); + $periodArray = array(); + foreach ($periods as $periodId => $period) { + if ($period['end']) { + $periodArray[$periodId] = $period['end']->toString('YYYY-MM-dd'); + } else { + $periodArray[-1] = 'Current'; + } + } + + $requestVotes = Requests_ApproverVoteModel::findVotesForRequests($allRequests, $periodEnd, $queue); + + $requestUserVotes = array(); + $userIds = array(); + foreach ($requestVotes as $requestId => $votes) { + foreach ($votes as $voteId => $vote) { + $userIds[$vote->getUser()] = $vote->getUser(); + $requestUserVotes[$requestId][$vote->getUser()] = $vote->getVote(); + } + } + + $users = Auth_UserModel::find($userIds); + $users->orderBy('getLastName'); + $this->view->queue = $queue; + $this->view->currentPeriod = $in['period']; + $this->view->periods = $periodArray; $this->view->moduleRequests = $moduleRequests; + $this->view->requestUserVotes = $requestUserVotes; + $this->view->users = $users; } public function editPostAction() diff --git a/application/modules/requests/models/ApprovalActionQueueModel.php b/application/modules/requests/models/ApprovalActionQueueModel.php index 85be456c..e66ad75c 100644 --- a/application/modules/requests/models/ApprovalActionQueueModel.php +++ b/application/modules/requests/models/ApprovalActionQueueModel.php @@ -41,6 +41,25 @@ class Requests_ApprovalActionQueueModel extends Requests_ApprovalActionModel $date = $record['date']; $objects[$objectId]->_data['dates'][] = new Zend_Date($date); } + + + $select = new Zend_Db_Select($db); + $select->from(array('p' => 'creqApprovalActionsQueuePeriods')); + $select->order('startTime DESC'); + if (Unl_Util::isArray($id)) { + $select->where('p.approvalAction IN(?)', $id); + } else { + $select->where('p.approvalAction = ?', $id); + } + $records = $db->query($select)->fetchAll(); + + foreach ($records as $record) { + $objectId = $record['approvalAction']; + $periodId = $record['approvalActionsQueuePeriodId']; + $objects[$objectId]->_data['periods'][$periodId] = array('start' => new Zend_Date($record['startTime']), + 'end' => ($record['endTime'] ? new Zend_Date($record['endTime']) : NULL), + 'id' => $record['approvalActionsQueuePeriodId']); + } if (Unl_Util::isArray($objects)) { return $objects; @@ -353,6 +372,11 @@ class Requests_ApprovalActionQueueModel extends Requests_ApprovalActionModel $this->_data['dates'] = $dates; } + public function getPeriods() + { + return $this->_data['periods']; + } + public function setExtendedData($data) { $this->_data['canChangeVote'] = $data['canChangeVote']; diff --git a/application/modules/requests/models/ApprovalActionVoteModel.php b/application/modules/requests/models/ApprovalActionVoteModel.php index e80caca9..134358c7 100644 --- a/application/modules/requests/models/ApprovalActionVoteModel.php +++ b/application/modules/requests/models/ApprovalActionVoteModel.php @@ -44,6 +44,24 @@ class Requests_ApprovalActionVoteModel extends Requests_ApprovalActionQueueModel $objects[$objectId]->_data['dates'][] = new Zend_Date($date); } + $select = new Zend_Db_Select($db); + $select->from(array('p' => 'creqApprovalActionsQueuePeriods')); + $select->order('startTime DESC'); + if (Unl_Util::isArray($id)) { + $select->where('p.approvalAction IN(?)', $id); + } else { + $select->where('p.approvalAction = ?', $id); + } + $records = $db->query($select)->fetchAll(); + + foreach ($records as $record) { + $objectId = $record['approvalAction']; + $periodId = $record['approvalActionsQueuePeriodId']; + $objects[$objectId]->_data['periods'][$periodId] = array('start' => new Zend_Date($record['startTime']), + 'end' => ($record['endTime'] ? new Zend_Date($record['endTime']) : NULL), + 'id' => $record['approvalActionsQueuePeriodId']); + } + if (Unl_Util::isArray($objects)) { return $objects; } else { diff --git a/application/modules/requests/views/scripts/queue-manager/view.phtml b/application/modules/requests/views/scripts/queue-manager/view.phtml index fd2f2993..2413d3ba 100644 --- a/application/modules/requests/views/scripts/queue-manager/view.phtml +++ b/application/modules/requests/views/scripts/queue-manager/view.phtml @@ -1,8 +1,16 @@ <?php $this->layout()->breadcrumbs = array('Queue Manager: ' . $this->queue->getName()); ?> +<?php $this->headScript()->appendFile($this->baseUrl() . '/javascript/requests/queue-manager.js'); ?> +<script type="text/javascript"> +queueManager.queueId = <?php echo $this->queue->getId(); ?> +</script> + +Select period that ended on <?php echo $this->formSelect('period', $this->currentPeriod, NULL, $this->periods); ?> <h3>Requests:</h3> <?php foreach ($this->moduleRequests as $module => $requests) { - echo $this->partial('queue-manager/request-table.phtml', $module, array('requests' => $requests, 'action' => $this->queue)); + echo $this->partial('queue-manager/request-table.phtml', $module, array('requests' => $requests, + 'action' => $this->queue, + 'requestUserVotes' => $this->requestUserVotes, + 'users' => $this->users)); } -?> -- GitLab