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