<?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();
$user = $_GET['users_id'];
$project = $_GET['projects_id'];
$weekenddate = convertdate($_GET['weekenddate'], $dateFormat, 'ymd');
$weekbegindate = tesAddDate($weekenddate, -6);
$TH = array('users_id' => $user,
'projects_id' => $project,
'weekenddate' => $weekenddate,
'weekbegindate' => $weekbegindate);
$str = '';
$str .= $this->makeHeaderBlock($TH);
$str .= "\n<table id = 'report'>";
$str .= $this->makeColHeading($TH);
$str .= $this->makeDetailBlock($TH);
$str .= "\n</table>";
return $str;
}
protected function getHeaderRec($TH)
{
$DbObj = new dbObj();
$query = "select users.fullname as UserName
from users
where users_id = '{$TH['users_id']}'";
$dataset = $DbObj->getDatabyQuery($query);
return $dataset[0];
}
protected function getDetailRecs($TH)
{
$DbObj = new dbObj();
if ($TH['projects_id'] == '')
$query = "select times.workdate as workdate,
projects.name as project,
tasks.name as task,
times.nonbillablehours as nonbillablehours,
times.billablehours as billablehours,
times.nonbillablehours + times.billablehours as totalhours,
times.description as description
from times, projects, tasks
where times.projects_id = projects.projects_id
and times.tasks_id = tasks.tasks_id
and times.workdate >= '{$TH['weekbegindate']}'
and times.workdate <= '{$TH['weekenddate']}'
order by times.workdate, times.projects_id, times.tasks_id";
else
$query = "select times.workdate as workdate,
projects.name as project,
tasks.name as task,
times.nonbillablehours as nonbillablehours,
times.billablehours as billablehours,
times.nonbillablehours + times.billablehours as totalhours,
times.description as description
from times, projects, tasks
where times.projects_id = projects.projects_id
and times.tasks_id = tasks.tasks_id
and times.projects_id = '{$TH['projects_id']}'
and times.workdate >= '{$TH['weekbegindate']}'
and times.workdate <= '{$TH['weekenddate']}'
order by times.workdate, times.projects_id, times.tasks_id";
$dataset = $DbObj->getDatabyQuery($query);
return $dataset;
}
protected function makeHeaderBlock($TH)
{
$dateFormat = getUserDateFormat();
$satdate = cvtDateIso2Dsp($TH['weekenddate'], $dateFormat);
$sundate = cvtDateIso2Dsp($TH['weekbegindate'], $dateFormat);
$DbObj = new dbObj();
$headerRec = $this->getHeaderRec($TH);
$companyRec = $DbObj->getCompanyRec();
$ReportFunc = new ReportFunctions();
$CA = $ReportFunc->ProjectCompanyAddress($TH['projects_id']);
$str = '';
$str .= "<h1>{$CA['name']}</h1>";
$str .= "<h2>{$CA['address1']}";
if ($CA['address2'] <> '')
$str .= ", {$CA['address2']}";
$str .= "<br />{$CA['city']}, {$CA['state']}-{$CA['postalcode']}</h2>";
$str .= "<h1>".changeLiteral('Weekly Personal Time Report')."</h1>";
$str .= "\n<table id = 'report'>";
$str .= "<tr>";
$str .= "<td class='noborder'>".changeLiteral('Consultant').":</td><td class='noborder'><strong>{$headerRec['UserName']}</strong></td>";
$str .= "</tr>";
$str .= "<tr>";
$str .= "<td class='noborder'>".changeLiteral('Period').":</td><td class='noborder'>".changeLiteral('From')." <strong>$sundate</strong> ".changeLiteral('to')." <strong>$satdate</strong></td>";
$str .= "</tr>";
$str .= "</table>";
return $str;
}
protected function makeColHeading($EH)
{
return
"\n<tr>
<td style='text-align: left;'>".changeLiteral('Date')."</td>
<td style='text-align: center;'>".changeLiteral('Project')."</td>
<td style='text-align: center;'>".changeLiteral('Task')."</td>
<td style='text-align: center;'>".changeLiteral('Billable Hours')."</td>
<td style='text-align: center;'>".changeLiteral('Non-billable Hours')."</td>
<td style='text-align: center;'>".changeLiteral('Total Hours')."</td>
<td style='text-align: center;'>".changeLiteral('Description')."</td>
</tr>";
}
protected function makeDetailBlock($TH)
{
$Total_nonbillablehours = 0;
$Total_billablehours = 0;
$Total_totalhours = 0;
$str = '';
$dataset = $this->getDetailRecs($TH);
foreach ($dataset as $row)
{
$str .= $this->makeDetailLine($row['workdate'], $row['project'], $row['task'], $row['nonbillablehours'], $row['billablehours'], $row['totalhours'], $row['description']);
$Total_nonbillablehours += $row['nonbillablehours'];
$Total_billablehours += $row['billablehours'];
$Total_totalhours += $row['totalhours'];
}
$str .= $this->makeDetailLine('', changeLiteral('Weekly Total'), '', $Total_nonbillablehours, $Total_billablehours, $Total_totalhours, '');
return $str;
}
protected function makeDetailLine($workdate, $project, $task, $nonbillablehours, $billablehours, $totalhours, $description)
{
$dateFormat = getUserDateFormat();
if ($workdate <>'')
$workdate = cvtDateIso2Dsp($workdate, $dateFormat);
$nonbillablehours = sprintf("%01.2f", $nonbillablehours);
$billablehours = sprintf("%01.2f", $billablehours);
$totalhours = sprintf("%01.2f", $totalhours);
if ($nonbillablehours == 0) $nonbillablehours = '';
if ($billablehours == 0) $billablehours = '';
if ($totalhours == 0) $totalhours = '';
return
"<tr>
{$this->printField($workdate, 'text-align: left;', 'textField')}
{$this->printField($project, '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($totalhours, '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>