Category Archives: Projects

Miscellaneous Billing: eliminating errors & simplifying the interface

Background

Miscellaneous Billing is used by many departments on Plymouth State’s campus to initiate charges to individuals. The charges can range from Health Services to Residence Hall Damages and are logged in an Oracle table to be accessed and processed by the Bursar.

The Problems

  1. The original system was built in Microsoft Access – having a separate application for each department. This was a maintenance nightmare.
  2. It was extremely easy to charge the wrong individual.
  3. Making adjustments/reversing charges was very complex and error prone.

Problems Solved!

  1. The original plan was to replace the Residential Life Misc Billing application with a web interface; however, when I approached ITS with the idea they asked me to write it to replace all departmental Misc Billing apps. My task was to create the User Interface (UI) that would be used across campus. Any changes that need to be made can be made in one place for all departments. Problem Solved!

  2. The Access version consisted of a form within a form. The outer form contained an alphabetical list of people and always defaulted to the first person on the list. The problem was that users often forgot to select the person they wanted and ended up billing the default person. If the mistake was noticed soon enough, the charge could be removed and re-entered for the correct person. If not, the wrong person could end up with a bill.

    I created the new interface so that the user can enter a student’s name or ID number and return the correct person (see Figure 1 below). Once the user has entered the person’s name the page returns a list of possible people with that name or ID. The user then clicks the correct person to continue the billing process (see Figure 2 below). Problem Solved!

    The search screen of the Misc Billing app
    Figure 1: The search screen of the Misc Billing app

    Figure 2: The results of the search - in this case the correct name was returned
    Figure 2: The results of the search - in this case the correct name was returned
  3. The old application only allowed the user to view one bill at a time which meant that the user had to click through each record to find the one they wanted to reverse. Also, the user had to check to see if the charge had been processed by the Bursar to determine how they needed to proceed. Problem Solved!

RD Menu: reducing report time from hours to minutes

Background

The RD Menu generates housing reports for Residential Life staff. These reports provide a range of options from generating a complete roster of students in alpha order to finding housing information for individual students.

The Problem

The original menu was created in Microsoft Access approximately five years ago; however, many of the reports took more than 20 minutes to run and some took nearly all day. The housing coordinator found this delay especially frustrating because she depended on those reports to accurately assign student housing.

Problem Solved!

Although originally tasked with optimizing the SQL in Access to reduce report times, the minutes saved were not satisfactory enough. I suggested, as a test, to re-create a report as a web application to discover if we could reduce the time it took to generate reports more. Reports which took 15-20 minutes in Access became virtually instantaneous in the web interface. Problem Solved!

Hartman Union Building: re-design

Background

The Hartman Union Building (HUB) website was primarily designed to provide information about student organizations, upcoming events, and facility availability. The site was designed using bright colors that varied from section to section and fancy fonts.  This gave the site a fun, energetic feel.

Problem

Over the last couple of years Plymouth State University’s Web Administrator has been unifying the design of departmental websites as well as converting them to a content management system.   When it came time to convert the HUB website, the web administrator wanted the HUB website to have a unified design, while the HUB staff wanted to maintain the unique, “fun” feel of the site.  The web administrator allowed me some leeway in the re-design but required that I use the same colors and basic layout as other department sites.

Problem Solved!

What I came up with was a slightly “grunge” header with softened lines. I call them fuzzy lines.

Picture 1: The fuzzy edged, relaxed HUB design
Picture 1: The fuzzy edged, relaxed HUB design
Picture 2: The hard-edged design of other department websites
Picture 2: The hard-edged design of other department websites

Timeclock: using FPDF to generate timesheets

Background

Read background information on the design of the timeclock system!

Single vs. Multiple timesheets

Since each student’s timesheet is formatted the same way, whether it is generated as a single timesheet or as part of multiple timesheets, I developed a class to create the timesheets.

Figure 1: A sample timesheet
Figure 1: A sample timesheet

In the class is a function called outputPDF which accepts one argument: an array of the timesheet values. Inside the function we begin creating the page.

function outputFPdf($app_data)
{
	$app_data;
	ob_start();
	$output = null;
	$output .= $this->fpdf->SetFont('Arial','B',15);
	$output .= $this->fpdf->Cell(80);
	$output .= $this->fpdf->Cell(30,10,'Complete Payroll Report',0,0,'C');
	$output .= $this->fpdf->Ln(8);
			$output .= $this->fpdf->SetFont('Arial','',10);
	$output .= $this->fpdf->Cell('',10,"Name: ".$app_data['name'],0,0,'C');
	$output .= $this->fpdf->Ln(6);
        <---- edited for brevity ---->
	ob_clean();
	return $output;
}

Now that we’ve got the timesheet ready we’ll create a function that determines the timesheet type.

There are a few things we want to accomplish with this function.

  • Include and instantiate the fpdf library
  • Call the FPDF page numbering function and create the first page
  • Set the page title
  • Check to see if the type is single and if so, generate the timesheet
  • If the type isn’t single check to see if it is multiple and if so, generate the timesheets

So all together it looks like this:

function createPdf($app_data, $type, $begin, $end, $section=null)
{
    // include and instantiate the fpdf library
	include 'includes/fpdf.php';
	$this->fpdf = new fpdfHelper();

    // Call the FPDF page numbering function and create the first page:
	$this->fpdf->AliasNbPages();
	$this->fpdf->AddPage();

    // Set the page title:
	$this->fpdf->setTitle('Complete Payroll Report');

    // check to see if the type is single and if so, generate the timesheet
	if($type == 'single')
	{
		//set the begin period and end period dates
		$app_data['begin_period'] = $begin;
		$app_data['end_period'] = $end;
		//create the timesheet
		$data = $this->outputPdf($app_data);
		//get the current date so we can put it in the file name of the timesheet
		$date = date("m_d_Y");
		//create the file name with the employee's name and the date
		$name = $app_data['name']."_".$date.".pdf";
		//send it to the browser
		echo $this->fpdf->fpdfOutput($name, $destination = 'd');
	}
    // if the type isn't single check to see if it is multiple and if so, generate the timesheets
	elseif($type == 'multiple')
	{
		//get the current date to use in the file name
		$date = date("m_d_Y");
		//do stuff to get all apps in pdf
		$data = null; //create variable to hold the timesheets as we generate them
		//loop through the data and create a timesheet for each employee
		foreach ($app_data as $app)
		{
			//set up begin and end date variables for the pay period
			$app['begin_period'] = $begin;
			$app['end_period'] = $end;
			//generate timesheet for the current employee and store it in the data variable
			$data .= $this->outputPdf($app);
			//create a new page
			$data .= $this->fpdf->AddPage();
		}
		//create the file name and include the name of the department (section) in it
		$name = "payroll_report_".$section."_".$date.".pdf";
		//send it to the browser
		echo $this->fpdf->fpdfOutput($name, $destination = 'd');
	}

Timeclock: simplifying timesheets

Background

One of the cool things about the timeclock is the ability to generate pdf timesheets on demand. The Hartman Union Building (HUB) administrative assistant is tasked with producing timesheets for approximately 100 student employees every two weeks.

Problem

The old time clock system generated arbitrary numbers for each student employee. At the end of each two week pay period the administrative assistant had to manually enter each employee’s time clock number, generate and print a timesheet report. As you can imagine, this was a tedious and time consuming task.

Problem Solved!

Before I began creating the timeclock I talked to the administrative assistant to identify what she liked and disliked about the current system. The problem outlined above was her greatest dislike. I created the new timeclock system to revolve around the unique student ID number issued to students upon their acceptance to the university. This allows the administrative assitant to select an employee by their name and generate a timesheet for that individual. Even better, I went one step further to reduce her workload: now she can generate a single pdf file with all employees’ timesheets ready to print. This takes only a few minutes instead of the entire afternoon!

Read more about how I generate the timesheets!

Spring Housing Intention Form: eliminating a confusion of papers & emails

Background

Each November the Residence Directors/Managers send out forms to each student in their building to determine the students’ housing plans for the Spring Semester.  These forms include a variety of options for students to choose:

  • No Change
  • Graduating: will not need room next semester
  • Student Teaching: will not need room next semester
  • Internship: no housing needed
  • Studying Abroad: no housing needed
  • Change room or hall for spring semester

In addition to these options, students can indicate whether they plan to live in the hall during Winterim or not. The students’ responses help the Residence Directors to plan for filling open spots in their hall during the winter break.

Problem

The Residence Directors found themselves sorting through hundreds of pieces of paper and emails trying to determine which students responded and which ones had not. To compound the problem, many of the responses required Residence Directors to follow up. Directors contacted students either by email or in person. Most of the time, keeping track of emails, papers, and other communication turned into a mess.

Problem Solved!

I created an online form where each student can log in using their student credentials and select their housing intentions for the spring semester. Residence Directors can then log into an administrative area where they can view all the responses for the students living in their building, email the student for follow-up contact, and add specific notes. Additionally, directors can see which students in their building have not responded. All of this information can be downloaded into Excel as well. No more sorting through hundreds of pieces of paper, or wondering who has responded and who hasn’t. Problem solved!