UA Improves Annual Leave Accrual for Non-Exempt Employees

As part of the University’s commitment to improving human resources systems through its HReimagined initiative, regular, benefits eligible non-exempt employees are now able to accrue more leave earlier in their service with UA and reach the maximum accrual sooner as well.

“The enhancement to accrued annual leave for our non-exempt employees was wholeheartedly endorsed by President Stuart Bell and Vice President for Finance and Operations Matt Fajack and I am grateful to them for their leadership and support,” said Susan Norton, senior associate vice president for human resources and chief human resources officer.

The enhanced annual leave accrual will take place immediately. Detailed annual leave comparison charts are available for review below:

Annual Leave Accrual for Non-Exempt Employees (based on a 38.75 hour workweek)

* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0 * @link https://wiki.jasig.org/display/CASC/phpCAS */ /** * An Exception for problems communicating with a proxied service. * * @class CAS_ProxiedService_Exception * @category Authentication * @package PhpCAS * @author Adam Franco* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0 * @link https://wiki.jasig.org/display/CASC/phpCAS */ class CAS_ProxiedService_Exception extends Exception implements CAS_Exception { } ?>

Annual Leave Accrual for Non-Exempt Employees (based on a 40.00 hour workweek)

* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0 * @link https://wiki.jasig.org/display/CASC/phpCAS */ /** * This class implements common methods for ProxiedService implementations included * with phpCAS. * * @class CAS_ProxiedService_Http_Abstract * @category Authentication * @package PhpCAS * @author Adam Franco* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0 * @link https://wiki.jasig.org/display/CASC/phpCAS */ abstract class CAS_ProxiedService_Http_Abstract extends CAS_ProxiedService_Abstract implements CAS_ProxiedService_Http { /** * The HTTP request mechanism talking to the target service. * * @var CAS_Request_RequestInterface $requestHandler */ protected $requestHandler; /** * The storage mechanism for cookies set by the target service. * * @var CAS_CookieJar $_cookieJar */ private $_cookieJar; /** * Constructor. * * @param CAS_Request_RequestInterface $requestHandler request handler object * @param CAS_CookieJar $cookieJar cookieJar object * * @return void */ public function __construct(CAS_Request_RequestInterface $requestHandler, CAS_CookieJar $cookieJar ) { $this->requestHandler = $requestHandler; $this->_cookieJar = $cookieJar; } /** * The target service url. * @var string $_url; */ private $_url; /** * Answer a service identifier (URL) for whom we should fetch a proxy ticket. * * @return string * @throws Exception If no service url is available. */ public function getServiceUrl() { if (empty($this->_url)) { throw new CAS_ProxiedService_Exception( 'No URL set via ' . get_class($this) . '->setUrl($url).' ); } return $this->_url; } /********************************************************* * Configure the Request *********************************************************/ /** * Set the URL of the Request * * @param string $url url to set * * @return void * @throws CAS_OutOfSequenceException If called after the Request has been sent. */ public function setUrl($url) { if ($this->hasBeenSent()) { throw new CAS_OutOfSequenceException( 'Cannot set the URL, request already sent.' ); } if (!is_string($url)) { throw new CAS_InvalidArgumentException('$url must be a string.'); } $this->_url = $url; } /********************************************************* * 2. Send the Request *********************************************************/ /** * Perform the request. * * @return void * @throws CAS_OutOfSequenceException If called multiple times. * @throws CAS_ProxyTicketException If there is a proxy-ticket failure. * The code of the Exception will be one of: * PHPCAS_SERVICE_PT_NO_SERVER_RESPONSE * PHPCAS_SERVICE_PT_BAD_SERVER_RESPONSE * PHPCAS_SERVICE_PT_FAILURE * @throws CAS_ProxiedService_Exception If there is a failure sending the * request to the target service. */ public function send() { if ($this->hasBeenSent()) { throw new CAS_OutOfSequenceException( 'Cannot send, request already sent.' ); } phpCAS::traceBegin(); // Get our proxy ticket and append it to our URL. $this->initializeProxyTicket(); $url = $this->getServiceUrl(); if (strstr($url, '?') === false) { $url = $url . '?ticket=' . $this->getProxyTicket(); } else { $url = $url . '&ticket=' . $this->getProxyTicket(); } try { $this->makeRequest($url); } catch (Exception $e) { phpCAS::traceEnd(); throw $e; } } /** * Indicator of the number of requests (including redirects performed. * * @var int $_numRequests; */ private $_numRequests = 0; /** * The response headers. * * @var array $_responseHeaders; */ private $_responseHeaders = array(); /** * The response status code. * * @var int $_responseStatusCode; */ private $_responseStatusCode = ''; /** * The response headers. * * @var string $_responseBody; */ private $_responseBody = ''; /** * Build and perform a request, following redirects * * @param string $url url for the request * * @return void * @throws CAS_ProxyTicketException If there is a proxy-ticket failure. * The code of the Exception will be one of: * PHPCAS_SERVICE_PT_NO_SERVER_RESPONSE * PHPCAS_SERVICE_PT_BAD_SERVER_RESPONSE * PHPCAS_SERVICE_PT_FAILURE * @throws CAS_ProxiedService_Exception If there is a failure sending the * request to the target service. */ protected function makeRequest($url) { // Verify that we are not in a redirect loop $this->_numRequests++; if ($this->_numRequests > 4) { $message = 'Exceeded the maximum number of redirects (3) in proxied service request.'; phpCAS::trace($message); throw new CAS_ProxiedService_Exception($message); } // Create a new request. $request = clone $this->requestHandler; $request->setUrl($url); // Add any cookies to the request. $request->addCookies($this->_cookieJar->getCookies($url)); // Add any other parts of the request needed by concrete classes $this->populateRequest($request); // Perform the request. phpCAS::trace('Performing proxied service request to \'' . $url . '\''); if (!$request->send()) { $message = 'Could not perform proxied service request to URL`' . $url . '\'. ' . $request->getErrorMessage(); phpCAS::trace($message); throw new CAS_ProxiedService_Exception($message); } // Store any cookies from the response; $this->_cookieJar->storeCookies($url, $request->getResponseHeaders()); // Follow any redirects if ($redirectUrl = $this->getRedirectUrl($request->getResponseHeaders()) ) { phpCAS::trace('Found redirect:' . $redirectUrl); $this->makeRequest($redirectUrl); } else { $this->_responseHeaders = $request->getResponseHeaders(); $this->_responseBody = $request->getResponseBody(); $this->_responseStatusCode = $request->getResponseStatusCode(); } } /** * Add any other parts of the request needed by concrete classes * * @param CAS_Request_RequestInterface $request request interface object * * @return void */ abstract protected function populateRequest( CAS_Request_RequestInterface $request ); /** * Answer a redirect URL if a redirect header is found, otherwise null. * * @param array $responseHeaders response header to extract a redirect from * * @return string|null */ protected function getRedirectUrl(array $responseHeaders) { // Check for the redirect after authentication foreach ($responseHeaders as $header) { if ( preg_match('/^(Location:|URI:)\s*([^\s]+.*)$/', $header, $matches) ) { return trim(array_pop($matches)); } } return null; } /********************************************************* * 3. Access the response *********************************************************/ /** * Answer true if our request has been sent yet. * * @return bool */ protected function hasBeenSent() { return ($this->_numRequests > 0); } /** * Answer the headers of the response. * * @return array An array of header strings. * @throws CAS_OutOfSequenceException If called before the Request has been sent. */ public function getResponseHeaders() { if (!$this->hasBeenSent()) { throw new CAS_OutOfSequenceException( 'Cannot access response, request not sent yet.' ); } return $this->_responseHeaders; } /** * Answer HTTP status code of the response * * @return int * @throws CAS_OutOfSequenceException If called before the Request has been sent. */ public function getResponseStatusCode() { if (!$this->hasBeenSent()) { throw new CAS_OutOfSequenceException( 'Cannot access response, request not sent yet.' ); } return $this->_responseStatusCode; } /** * Answer the body of response. * * @return string * @throws CAS_OutOfSequenceException If called before the Request has been sent. */ public function getResponseBody() { if (!$this->hasBeenSent()) { throw new CAS_OutOfSequenceException( 'Cannot access response, request not sent yet.' ); } return $this->_responseBody; } /** * Answer the cookies from the response. This may include cookies set during * redirect responses. * * @return array An array containing cookies. E.g. array('name' => 'val'); */ public function getCookies() { return $this->_cookieJar->getCookies($this->getServiceUrl()); } } ?>

The new accrual schedule can also be found on p. 24 of the Employee Handbook. Regular, benefits eligible non-exempt employees with two or more years of service will see the change of accruals on their paychecks issued Jan. 27, 2023.