Skip to content
Snippets Groups Projects
Commit 280eec34 authored by Tim Steiner's avatar Tim Steiner
Browse files

UCC Monthly Vote report update.

parent c5dfada6
No related branches found
No related tags found
No related merge requests found
...@@ -27,6 +27,10 @@ class Requests_ApproverVoteModel extends Unl_Model ...@@ -27,6 +27,10 @@ class Requests_ApproverVoteModel extends Unl_Model
$objects[$objectId] = $object; $objects[$objectId] = $object;
} }
foreach ($objects as $object) {
$object->_setClean();
}
if (Unl_Util::isArray($objects)) { if (Unl_Util::isArray($objects)) {
return $objects; return $objects;
} else { } else {
...@@ -34,6 +38,47 @@ class Requests_ApproverVoteModel extends Unl_Model ...@@ -34,6 +38,47 @@ class Requests_ApproverVoteModel extends Unl_Model
} }
} }
static public function findVotesForRequests($requests, $approvalAction = null)
{
$db = Zend_Registry::get('db');
if (!Unl_Util::isArray($requests)) {
if (!$requests instanceof Requests_RequestModel) {
throw new Zend_Exception('$requests is not a valid Request model or collection.');
}
$requests = array($requests);
}
if (count($requests) == 0) {
return new Unl_Model_Collection(__CLASS__);
}
$select = new Zend_Db_Select($db);
$select->from(array('a' => 'creqApproverVotes'), array('approverVoteId', 'request'));
$select->where('a.request IN(?)', $requests->getId());
if ($approvalAction instanceof Requests_ApprovalActionModel) {
$select->where('approvalAction = ?', $approvalAction->getId());
}
$select->order('time');
$records = $db->query($select)->fetchAll();
$requestVoteIds = array();
foreach ($records as $record)
{
$requestVoteIds[] = $record['approverVoteId'];
}
self::find($requestVoteIds);
$requestVotes = array();
foreach ($requests as $request) {
$requestVotes[$request->getId()] = new Unl_Model_Collection(__CLASS__);
}
foreach ($records as $record) {
$requestVotes[$record['request']][$record['approverVoteId']] = Unl_Model_Registry::getInstance()->get(__CLASS__, $record['approverVoteId']);
}
return $requestVotes;
}
static public function findUsersVotesForRequests(Auth_UserModel $user, $requests, $approvalAction = null) static public function findUsersVotesForRequests(Auth_UserModel $user, $requests, $approvalAction = null)
{ {
$db = Zend_Registry::get('db'); $db = Zend_Registry::get('db');
......
...@@ -30,60 +30,69 @@ class Ucc_ReportsController extends App_Controller_Action ...@@ -30,60 +30,69 @@ class Ucc_ReportsController extends App_Controller_Action
return; return;
} }
$startDate = new Zend_Date(); $startDate = new Zend_Date();
$startDate->setYear($year); $startDate->setYear($year);
$startDate->setMonth($month); $startDate->setMonth($month);
$startDate->setDay(1); $startDate->setDay(1);
$startDate->setHour(0); $startDate->setHour(0);
$startDate->setMinute(0); $startDate->setMinute(0);
$startDate->setSecond(0); $startDate->setSecond(0);
$endDate = clone $startDate; $endDate = clone $startDate;
$endDate->addMonth(1); $endDate->addMonth(1);
if ($this->_getParam('type') == 'summary') {
return $this->_monthlySummaryReport($startDate, $endDate);
} else if ($this->_getParam('type') == 'extended') {
return $this->_monthlyExtendedReport($startDate, $endDate);
}
}
protected function _monthlySummaryReport($startDate, $endDate)
{
$approvalAction = Requests_ApprovalActionModel::find(31); $approvalAction = Requests_ApprovalActionModel::find(31);
$requests = Requests_ApprovalHistoryModel::findRequestsWithinTimeRangeAndApprovalAction($startDate, $endDate, $approvalAction); $requests = Requests_ApprovalHistoryModel::findRequestsWithinTimeRangeAndApprovalAction($startDate, $endDate, $approvalAction);
$histories = Requests_ApprovalHistoryModel::findByRequest($requests); $histories = Requests_ApprovalHistoryModel::findByRequest($requests);
$currentCourses = Courses_CourseModel::findLatestOfRequest($requests); $currentCourses = Courses_CourseModel::findLatestOfRequest($requests);
$originalCourses = Courses_CourseModel::findParentOfRequest($requests); $originalCourses = Courses_CourseModel::findParentOfRequest($requests);
$data = new Unl_Model_Collection('Unl_Model_Array'); $data = new Unl_Model_Collection('Unl_Model_Array');
foreach ($requests as $request) { foreach ($requests as $request) {
$currentCourse = $currentCourses[$request->getId()]; $currentCourse = $currentCourses[$request->getId()];
$originalCourse = $originalCourses[$request->getId()]; $originalCourse = $originalCourses[$request->getId()];
$history = $histories[$request->getId()]; $history = $histories[$request->getId()];
foreach ($history as $aHistory) { foreach ($history as $aHistory) {
if ($aHistory->getApprovalAction() != 31) { if ($aHistory->getApprovalAction() != 31) {
continue; continue;
} }
if ($startDate->isLater($aHistory->getTime()) || if ($startDate->isLater($aHistory->getTime()) ||
$endDate->isEarlier($aHistory->getTime())) { $endDate->isEarlier($aHistory->getTime())) {
continue; continue;
} }
$time = $aHistory->getTime(); $time = $aHistory->getTime();
} }
if (!$originalCourse) { if (!$originalCourse) {
$originalCourse = $currentCourse; $originalCourse = $currentCourse;
} }
$difference = $currentCourse->getDifferenceSummary($originalCourse, $request); $difference = $currentCourse->getDifferenceSummary($originalCourse, $request);
$data[] = new Unl_Model_Array(array( $data[] = new Unl_Model_Array(array(
'time' => $time->getTimestamp(), 'time' => $time->getTimestamp(),
'college' => $originalCourse->getCollege(), 'college' => $originalCourse->getCollege(),
'courseCode' => $originalCourse->getCourseCode(), 'courseCode' => $originalCourse->getCourseCode(),
'title' => $originalCourse->getTitle(), 'title' => $originalCourse->getTitle(),
'difference' => $difference, 'difference' => $difference,
'IS' => $originalCourse->isIntegratedStudies(), 'IS' => $originalCourse->isIntegratedStudies(),
'crosslist' => $originalCourse->getCrosslistingsText() 'crosslist' => $originalCourse->getCrosslistingsText()
)); ));
} }
$session = new Zend_Session_Namespace(__CLASS__); $session = new Zend_Session_Namespace(__CLASS__);
$sortBy = $session->sortBy; $sortBy = $session->sortBy;
if (!Unl_Util::isArray($sortBy)) { if (!Unl_Util::isArray($sortBy)) {
...@@ -100,7 +109,38 @@ class Ucc_ReportsController extends App_Controller_Action ...@@ -100,7 +109,38 @@ class Ucc_ReportsController extends App_Controller_Action
foreach ($sortBy as $sortKey) { foreach ($sortBy as $sortKey) {
$data->orderBy('get' . $sortKey); $data->orderBy('get' . $sortKey);
} }
$this->view->data = $data; $this->view->data = $data;
$this->render('monthly-summary');
}
protected function _monthlyExtendedReport($startDate, $endDate)
{
$approvalAction = Requests_ApprovalActionModel::find(31);
$requests = Requests_ApprovalHistoryModel::findRequestsWithinTimeRangeAndApprovalAction($startDate, $endDate, $approvalAction);
$histories = Requests_ApprovalHistoryModel::findByRequest($requests);
$this->view->requests = $requests;
$this->view->currentCourses = Courses_CourseModel::findLatestOfRequest($requests);
$this->view->originalCourses = Courses_CourseModel::findParentOfRequest($requests);
$requestVotes = Requests_ApproverVoteModel::findVotesForRequests($requests, $approvalAction);
$requestVoteTally = array();
foreach ($requestVotes as $requestId => $votes) {
foreach ($votes as $vote) {
if ($vote->getTime()->isLater($endDate)) {
continue;
}
if ($vote->getTime()->isEarlier($startDate)) {
continue;
}
$requestVoteTally[$requestId][$vote->getVote()]++;
}
}
$this->view->requestVoteTally = $requestVoteTally;
$this->render('monthly-extended');
} }
} }
<?php $this->headLink()->appendStylesheet($this->baseUrl() . '/css/ucc/reports/monthly-extended.css', 'all'); ?>
<?php foreach ($this->requests as $request) { ?>
<div class="request"
<h2>Request Type: <?php echo $request->getTypeDescription(); ?></h2>
<?php echo $this->partial('view/course-info.phtml',
'courses',
array('parentCourse' => $this->originalCourses[$request->getId()],
'course' => $this->currentCourses[$request->getId()],
'request' => $request)); ?>
<div class="justification">
<h3>Justification</h3>
<?php echo $request->getJustification(); ?>
</div>
<h3>Vote Tally:</h3>
<ul>
<?php foreach ($this->requestVoteTally[$request->getId()] as $voteLabel => $voteCount) { ?>
<li><?php echo $voteLabel . ': ' . $voteCount; ?></li>
<?php } ?>
</ul>
</div>
<?php } ?>
<h2>Please select a month to report on</h2> <h2>Please select a month to report on</h2>
<h3>Summary Reports</h3>
<ul> <ul>
<?php for(; $this->startDate->isEarlier($this->endDate); $this->startDate->addMonth(1)) { ?> <?php for($startDate = clone $this->startDate; $startDate->isEarlier($this->endDate); $startDate->addMonth(1)) { ?>
<li> <li>
<a href="<?php echo $this->url(array('month' => date('n', $this->startDate->getTimestamp()), <a href="<?php echo $this->url(array('type' => 'summary',
'year' => date('Y', $this->startDate->getTimestamp()))); ?>"> 'month' => date('n', $startDate->getTimestamp()),
<?php echo date('n/Y', $this->startDate->getTimestamp()); ?> 'year' => date('Y', $startDate->getTimestamp()))); ?>">
<?php echo date('n/Y', $startDate->getTimestamp()); ?>
</a>
</li>
<?php } ?>
</ul>
<h3>Extended Reports</h3>
<ul>
<?php for($startDate = clone $this->startDate; $startDate->isEarlier($this->endDate); $startDate->addMonth(1)) { ?>
<li>
<a href="<?php echo $this->url(array('type' => 'extended',
'month' => date('n', $startDate->getTimestamp()),
'year' => date('Y', $startDate->getTimestamp()))); ?>">
<?php echo date('n/Y', $startDate->getTimestamp()); ?>
</a> </a>
</li> </li>
<?php } ?> <?php } ?>
......
@CHARSET "UTF-8";
#creqMain {width: 700px;}
.request {border-bottom: 3px dotted #c00; margin-bottom: 2em; padding-bottom: 2em;}
.justification {border: 2px solid #ccc; padding: 0.5em;}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment