Location: PHPKode > projects > TEMS -Time and Expense Management System > tems/accounts/PrintTimeReport.php
<?php

/*********************************************************************************
 * TES is a Time and Expense Management program developed by
 * Initechs, LLC. Copyright (C) 2009 - 2010 Initechs LLC.
 *
 * This program is free software; you can redistribute it and/or modify it under
 * the terms of the GNU General Public License version 3 as published by the
 * Free Software Foundation with the addition of the following permission added
 * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
 * IN WHICH THE COPYRIGHT IS OWNED BY INITECHS, INITECHS DISCLAIMS THE WARRANTY
 * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
 * details.
 *
 * You should have received a copy of the GNU General Public License along with
 * this program; if not, see http://www.gnu.org/licenses or write to the Free
 * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 * 02110-1301 USA.
 *
 * You can contact Initechs headquarters at 1841 Piedmont Road, Suite 301,
 * Marietta, GA, USA. or at email address hide@address.com
 *
 * The interactive user interfaces in modified source and object code versions
 * of this program must display Appropriate Legal Notices, as required under
 * Section 5 of the GNU General Public License version 3.
 *
 * In accordance with Section 7(b) of the GNU General Public License version 3,
 * these Appropriate Legal Notices must retain the display od the "Initechs" logo.
 * If the display of the logo is not reasonably feasible for technical reasons,
 * the Appropriate Legal Notices must display the words "Powered by Initechs".

 ********************************************************************************/


$basedir = dirname(__FILE__) . '/..';

require_once("$basedir/initialize.php");
require_once("$basedir/baseclass/DBCommonFunctions.php");
require_once("$basedir/baseclass/PageSection.php");

class dbObj extends DBCommonFunctions {}

class Report extends PageSection
{
	public function printReport()
	{
		$dateFormat = getUserDateFormat();

		$account = $_GET['accounts_id'];
		$weekenddate = convertdate($_GET['weekenddate'], $dateFormat, 'ymd');

		$weekbegindate = tesAddDate($weekenddate, -6);

		$AH = array('accounts_id' => $account,
					'weekenddate' => $weekenddate,
					'weekbegindate' => $weekbegindate);
		
		$DbObj = new dbObj();
		$companyRec = $DbObj->getCompanyRec();

		$str = '';
		
		$str .= "<h1>{$companyRec['name']}</h1>";
		$str .= "<h2>{$companyRec['address1']}";
		if ($companyRec['address2'] <> '')
			$str .= ", {$companyRec['address2']}";
		$str .= "<br />{$companyRec['city']}, {$companyRec['state']}-{$companyRec['postalcode']}</h2>";
		
		$str .= $this->makeHeaderBlock($AH);
		$str .= $this->makeDetailBlock($AH);

		return $str;
	}



	protected function makeHeaderBlock($AH)
	{
		$dateFormat = getUserDateFormat();
		
		$satdate = cvtDateIso2Dsp($AH['weekenddate'], $dateFormat);
		$sundate = cvtDateIso2Dsp($AH['weekbegindate'], $dateFormat);

		$headerRec = $this->getHeaderRec($AH);

		$str = '';
		$str .= "\n<h1>".changeLiteral('Weekly Customer Time Report')."</h1>";
		$str .= "\n<table id = 'report'>";
		$str .= "\n<tr><td class='noborder'>".changeLiteral('Customer').":</td><td class='noborder'><strong>{$headerRec['account']}</strong></td></tr>";
		$str .= "\n<tr><td class='noborder'>".changeLiteral('Period').":</td><td class='noborder'>".changeLiteral('From')." <strong>$sundate</strong> ".changeLiteral('to')." <strong>$satdate</strong></td></tr>";
		$str .= "\n</table>";

		return $str;
	}


	protected function getHeaderRec($AH)
	{
		$DbObj = new dbObj();
		$query = "select accounts.name as account
					from accounts
					where accounts_id = '{$AH['accounts_id']}'";

		$dataset = $DbObj->getDatabyQuery($query);
		return $dataset[0];
	}


	protected function makeDetailBlock($AH)
	{
		$GTotal_billablehours = 0;
		$GTotal_nonbillablehours = 0;
		$GTotal_actualhours = 0;
		
		$PTotal_billablehours = 0;
		$PTotal_nonbillablehours = 0;
		$PTotal_actualhours = 0;
		
		$Total_billablehours = 0;
		$Total_nonbillablehours = 0;
		$Total_actualhours = 0;
		

		$str = '';
		$dataset = $this->getDetailRecs($AH);
		$prvProject = $dataset[0]['project'];
		$prvUser = $dataset[0]['user'];

		$str .= "\n<table id = 'report'>";
		$str .= "<tr><td class='noborder'>".changeLiteral('Project').":</td> <td colspan=5 class='noborder'><strong>{$dataset[0]['project']}</strong></td></tr>";
		$str .= "<tr><td class='noborder'>".changeLiteral('Consultant').":</td> <td colspan=5 class='noborder'><strong>{$dataset[0]['user']}</strong></td></tr>";

		$str .= $this->makeColHeading();

		foreach ($dataset as $row)
		{
			if ($prvProject <> $row['project'])
			{
				$str .= $this->makeDetailLine('', changeLiteral('Total Hours'), $Total_billablehours, $Total_nonbillablehours, $Total_actualhours, '');
				$str .= $this->makeDetailLine('', changeLiteral('Total Project Hours'), $PTotal_billablehours, $PTotal_nonbillablehours, $PTotal_actualhours, '');
				$str .= "<tr><td class='noborder'>".changeLiteral('Project').":</td> <td colspan = 4 class='noborder'><strong>{$row['project']}</strong></td></tr>";
				$str .= "<tr><td class='noborder'>".changeLiteral('Consultant').":</td> <td colspan = 4 class='noborder'><strong>{$row['user']}</strong></td></tr>";
				$str .= $this->makeColHeading();

				$prvProject = $row['project'];
				$prvUser = $row['user'];
				
				$Total_billablehours = 0;
				$Total_nonbillablehours = 0;
				$Total_actualhours = 0;
				
				$PTotal_billablehours = 0;
				$PTotal_nonbillablehours = 0;
				$PTotal_actualhours = 0;
			}

			if ($prvUser <> $row['user'])
			{
				$str .= $this->makeDetailLine('', changeLiteral('Total Hours'), $Total_billablehours, $Total_nonbillablehours, $Total_actualhours, '');
				$str .= "<tr><td class='noborder'>".changeLiteral('Consultant').":</td> <td class='noborder'><strong>{$row['user']}</strong></td></tr>";
				$str .= $this->makeColHeading();
				$prvUser = $row['user'];
				$Total_billablehours = 0;
				$Total_nonbillablehours = 0;
				$Total_actualhours = 0;
				
			}

			$str .= $this->makeDetailLine($row['workdate'], $row['task'], $row['billablehours'], $row['nonbillablehours'], $row['actualhours'], $row['description']);

			$Total_billablehours += $row['billablehours'];
			$Total_nonbillablehours += $row['nonbillablehours'];
			$Total_actualhours += $row['actualhours'];

			$PTotal_billablehours += $row['billablehours'];
			$PTotal_nonbillablehours += $row['nonbillablehours'];
			$PTotal_actualhours += $row['actualhours'];

			$GTotal_billablehours += $row['billablehours'];
			$GTotal_nonbillablehours += $row['nonbillablehours'];
			$GTotal_actualhours += $row['actualhours'];
			

		}
		$str .= $this->makeDetailLine('', changeLiteral('Total Hours'), $Total_billablehours, $Total_nonbillablehours, $Total_actualhours, '');
		$str .= $this->makeDetailLine('', changeLiteral('Total Project Hours'), $PTotal_billablehours, $PTotal_nonbillablehours, $PTotal_actualhours, '');
		$str .= $this->makeDetailLine('', changeLiteral('Grand Total Hours'), $GTotal_billablehours, $GTotal_nonbillablehours, $GTotal_actualhours, '');
		$str .= "\n</table>";

		return $str;
	}


	protected function getDetailRecs($AH)
	{
		$DbObj = new dbObj();
		$query = "select times.workdate as workdate,
						 times.nonbillablehours as nonbillablehours, 
						 times.billablehours as billablehours,
						 times.nonbillablehours + times.billablehours as actualhours, 
						 times.description as description,
						 tasks.name as task,
						 users.fullname as user,
						 projects.name as project
					from times, tasks, users, projects, accounts
					where times.users_id = users.users_id
						and times.tasks_id = tasks.tasks_id
						and times.projects_id = projects.projects_id
						and projects.billtoaccount_id = accounts.accounts_id
						and times.workdate >= '{$AH['weekbegindate']}'
						and times.workdate <= '{$AH['weekenddate']}'
						and accounts.accounts_id = '{$AH['accounts_id']}'
					order by projects.projects_id, times.users_id, times.workdate, times.tasks_id";

		$dataset = $DbObj->getDatabyQuery($query);
		return $dataset;
	}



	protected function makeColHeading()
	{
		return
			"<tr>
				<td style='text-align: left;'>".changeLiteral('Date')."</td>
				<td style='text-align: center;'>".changeLiteral('Task')."</td>
				<td style='text-align: right;'>".changeLiteral('Billable Hours')."</td>
				<td style='text-align: right;'>".changeLiteral('Non-billable Hours')."</td>
				<td style='text-align: right;'>".changeLiteral('Actual Hours')."</td>
				<td style='text-align: center;'>".changeLiteral('Description')."</td>
			</tr>";
	}



	protected function makeDetailLine($workdate, $task, $billablehours, $nonbillablehours, $actualhours, $description)
	{
		$dateFormat = getUserDateFormat();

		if ($workdate <>'')
			$workdate = cvtDateIso2Dsp($workdate, $dateFormat);

		$billablehours = sprintf("%01.2f", $billablehours);
		$nonbillablehours = sprintf("%01.2f", $nonbillablehours);
		$actualhours = sprintf("%01.2f", $actualhours);
		
		if ($billablehours == 0) $billablehours = '';
		if ($nonbillablehours == 0) $nonbillablehours = '';
		if ($actualhours == 0) $actualhours = '';

		return
			"<tr>
			{$this->printField($workdate, 'text-align: left;', 'textField')}
			{$this->printField($task, 'text-align: left;', 'textField')}
			{$this->printField($billablehours, 'text-align: right;', 'textField')}
			{$this->printField($nonbillablehours, 'text-align: right;', 'textField')}
			{$this->printField($actualhours, 'text-align: right;', 'textField')}
			{$this->printField($description, 'text-align: left;', 'textField')}
			</tr>";
	}



}


?>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<link rel="stylesheet" type="text/css" media="all"
	href="../css/tesglobal.css">
<title>Time and Expense Management System</title>

</head>

<body>
<?php
$report = new Report();
echo $report->printReport();
?>

<input type='button' value='Print' onclick='window.print()'>
<input type='button' value='Go Back' onclick='window.history.go(-1)'>

</body>

</html>
Return current item: TEMS -Time and Expense Management System