Background
Read background information on the design of the timeclock system!
Single vs. Multiple timesheets
Since each student’s timesheet is formated 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.

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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
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 let’s create a function that determines the timesheet type.
1 2 |
function createPdf($app_data, $type, $begin, $end, $section=null) { |
There are a few things we want to accomplish with this function.
- include and instantiate the fpdf library
12include 'includes/fpdf.php';$this->fpdf = new fpdfHelper(); - Call the FPDF page numbering function and create the first page:
12$this->fpdf->AliasNbPages();$this->fpdf->AddPage(); - Set the page title:
1$this->fpdf->setTitle('Complete Payroll Report'); - check to see if the type is single and if so, generate the timesheet:
1234567891011121314if($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 browserecho $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:
1234567891011121314151617181920212223elseif($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 employeeforeach ($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 browserecho $this->fpdf->fpdfOutput($name, $destination = 'd');}}
So all together it looks like this:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
function createPdf($app_data, $type, $begin, $end, $section=null) { include 'includes/fpdf.php'; $this->fpdf = new fpdfHelper(); $this->fpdf->AliasNbPages(); $this->fpdf->AddPage(); $this->fpdf->setTitle('Complete Payroll Report'); 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'); } 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'); } } |