Refactoring
This commit is contained in:
23
src/Reports/Admin/Api/CSVReportBuilder.php
Normal file
23
src/Reports/Admin/Api/CSVReportBuilder.php
Normal file
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: Thilina
|
||||
* Date: 8/19/17
|
||||
* Time: 6:40 PM
|
||||
*/
|
||||
|
||||
namespace Reports\Admin\Api;
|
||||
|
||||
class CSVReportBuilder extends ReportBuilder
|
||||
{
|
||||
public function getData($report, $request)
|
||||
{
|
||||
$query = $this->getMainQuery();
|
||||
$where = $this->getWhereQuery($request);
|
||||
if ($query == null || $where == null) {
|
||||
return null;
|
||||
}
|
||||
$query.=" ".$where[0];
|
||||
return $this->execute($report, $query, $where[1]);
|
||||
}
|
||||
}
|
||||
17
src/Reports/Admin/Api/CSVReportBuilderInterface.php
Normal file
17
src/Reports/Admin/Api/CSVReportBuilderInterface.php
Normal file
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: Thilina
|
||||
* Date: 8/19/17
|
||||
* Time: 6:52 PM
|
||||
*/
|
||||
|
||||
namespace Reports\Admin\Api;
|
||||
|
||||
interface CSVReportBuilderInterface
|
||||
{
|
||||
public function getData($report, $request);
|
||||
public function createReportFile($report, $data);
|
||||
public function getMainQuery();
|
||||
public function getWhereQuery($request);
|
||||
}
|
||||
14
src/Reports/Admin/Api/ClassBasedReportBuilder.php
Normal file
14
src/Reports/Admin/Api/ClassBasedReportBuilder.php
Normal file
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: Thilina
|
||||
* Date: 8/19/17
|
||||
* Time: 6:43 PM
|
||||
*/
|
||||
|
||||
namespace Reports\Admin\Api;
|
||||
|
||||
class ClassBasedReportBuilder extends ReportBuilder
|
||||
{
|
||||
|
||||
}
|
||||
85
src/Reports/Admin/Api/PDFReportBuilder.php
Normal file
85
src/Reports/Admin/Api/PDFReportBuilder.php
Normal file
@@ -0,0 +1,85 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: Thilina
|
||||
* Date: 8/19/17
|
||||
* Time: 6:44 PM
|
||||
*/
|
||||
|
||||
namespace Reports\Admin\Api;
|
||||
|
||||
use Classes\SettingsManager;
|
||||
use Classes\UIManager;
|
||||
use Utils\LogManager;
|
||||
|
||||
class PDFReportBuilder extends ReportBuilder
|
||||
{
|
||||
|
||||
var $twig;
|
||||
|
||||
protected function getDefaultData()
|
||||
{
|
||||
$defaultData = array();
|
||||
$defaultData['BASE_URL'] = BASE_URL;
|
||||
$defaultData['LOGO'] = UIManager::getInstance()->getCompanyLogoUrl();
|
||||
$defaultData['LOGO'] = str_replace("https:", "http:", $defaultData['LOGO']);
|
||||
$defaultData['companyName'] = SettingsManager::getInstance()->getSetting("Company: Name");
|
||||
LogManager::getInstance()->debug("Logo Url:".$defaultData['LOGO']);
|
||||
return $defaultData;
|
||||
}
|
||||
|
||||
protected function initTemplateEngine($report)
|
||||
{
|
||||
if ($report->_table = "UserReports") {
|
||||
$path = APP_BASE_PATH."modules/reports/customTemplates/";
|
||||
} else {
|
||||
$path = APP_BASE_PATH."admin/reports/customTemplates/";
|
||||
}
|
||||
$loader = new \Twig_Loader_Filesystem($path);
|
||||
$twigOptions = array();
|
||||
//false
|
||||
if (defined('CACHE_THEME') && CACHE_THEME) {
|
||||
$twigOptions = array(
|
||||
);
|
||||
} else {
|
||||
$twigOptions = array(
|
||||
"cache"=>false
|
||||
);
|
||||
}
|
||||
$this->twig = new \Twig_Environment($loader, $twigOptions);
|
||||
}
|
||||
|
||||
public function createReportFile($report, $data)
|
||||
{
|
||||
$fileFirstPart = "Report_".str_replace(" ", "_", $report->name)."-".date("Y-m-d_H-i-s");
|
||||
$fileName = $fileFirstPart.".html";
|
||||
|
||||
$fileFullName = CLIENT_BASE_PATH.'data/'.$fileName;
|
||||
|
||||
$this->initTemplateEngine($report);
|
||||
|
||||
$template = $this->twig->loadTemplate($this->getTemplate());
|
||||
$result = $template->render($data);
|
||||
|
||||
$fp = fopen($fileFullName, 'w');
|
||||
fwrite($fp, $result);
|
||||
fclose($fp);
|
||||
|
||||
try {
|
||||
$fileFullNamePdf = CLIENT_BASE_PATH.'data/'.$fileFirstPart.".pdf";
|
||||
//Try generating the pdf
|
||||
LogManager::getInstance()->debug("wkhtmltopdf 1:".print_r(WK_HTML_PATH." ".$fileFullName." ".$fileFullNamePdf, true));
|
||||
exec(WK_HTML_PATH." ".$fileFullName." ".$fileFullNamePdf, $output, $ret);
|
||||
|
||||
LogManager::getInstance()->debug("wkhtmltopdf 2:".print_r($output, true));
|
||||
LogManager::getInstance()->debug("wkhtmltopdf 3:".print_r($ret, true));
|
||||
|
||||
if (file_exists($fileFullNamePdf)) {
|
||||
$fileName = $fileFirstPart.".pdf";
|
||||
$fileFullName = $fileFullNamePdf;
|
||||
}
|
||||
} catch (\Exception $exp) {
|
||||
}
|
||||
return array($fileFirstPart, $fileName, $fileFullName);
|
||||
}
|
||||
}
|
||||
16
src/Reports/Admin/Api/PDFReportBuilderInterface.php
Normal file
16
src/Reports/Admin/Api/PDFReportBuilderInterface.php
Normal file
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: Thilina
|
||||
* Date: 8/19/17
|
||||
* Time: 6:53 PM
|
||||
*/
|
||||
|
||||
namespace Reports\Admin\Api;
|
||||
|
||||
interface PDFReportBuilderInterface
|
||||
{
|
||||
public function getData($report, $request);
|
||||
public function createReportFile($report, $data);
|
||||
public function getTemplate();
|
||||
}
|
||||
133
src/Reports/Admin/Api/ReportBuilder.php
Normal file
133
src/Reports/Admin/Api/ReportBuilder.php
Normal file
@@ -0,0 +1,133 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: Thilina
|
||||
* Date: 8/19/17
|
||||
* Time: 6:36 PM
|
||||
*/
|
||||
|
||||
namespace Reports\Admin\Api;
|
||||
|
||||
use Classes\BaseService;
|
||||
use Classes\S3FileSystem;
|
||||
use Classes\SettingsManager;
|
||||
use Model\File;
|
||||
use Model\ReportFile;
|
||||
use Utils\LogManager;
|
||||
|
||||
abstract class ReportBuilder
|
||||
{
|
||||
|
||||
protected function execute($report, $query, $parameters)
|
||||
{
|
||||
$report->DB()->SetFetchMode(ADODB_FETCH_ASSOC);
|
||||
LogManager::getInstance()->debug("Query: ".$query);
|
||||
LogManager::getInstance()->debug("Parameters: ".json_encode($parameters));
|
||||
$rs = $report->DB()->Execute($query, $parameters);
|
||||
if (!$rs) {
|
||||
LogManager::getInstance()->info($report->DB()->ErrorMsg());
|
||||
return array("ERROR","Error generating report");
|
||||
}
|
||||
|
||||
$reportNamesFilled = false;
|
||||
$columnNames = array();
|
||||
$reportData = array();
|
||||
foreach ($rs as $rowId => $row) {
|
||||
$reportData[] = array();
|
||||
if (!$reportNamesFilled) {
|
||||
$countIt = 0;
|
||||
foreach ($row as $name => $value) {
|
||||
$countIt++;
|
||||
$columnNames[$countIt] = $name;
|
||||
$reportData[count($reportData)-1][] = $value;
|
||||
}
|
||||
$reportNamesFilled = true;
|
||||
} else {
|
||||
foreach ($row as $name => $value) {
|
||||
$reportData[count($reportData)-1][] = $this->transformData($name, $value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
array_unshift($reportData, $columnNames);
|
||||
|
||||
return $reportData;
|
||||
}
|
||||
|
||||
public function transformData($name, $value)
|
||||
{
|
||||
return $value;
|
||||
}
|
||||
|
||||
public function createReportFile($report, $data)
|
||||
{
|
||||
$fileFirstPart = "Report_".str_replace(" ", "_", $report->name)."-".date("Y-m-d_H-i-s");
|
||||
$fileName = $fileFirstPart.".csv";
|
||||
|
||||
$fileFullName = CLIENT_BASE_PATH.'data/'.$fileName;
|
||||
$fp = fopen($fileFullName, 'w');
|
||||
|
||||
foreach ($data as $fields) {
|
||||
fputcsv($fp, $fields);
|
||||
}
|
||||
|
||||
fclose($fp);
|
||||
return array($fileFirstPart, $fileName, $fileFullName);
|
||||
}
|
||||
|
||||
public function saveFile($fileFirstPart, $file, $fileFullName)
|
||||
{
|
||||
$uploadedToS3 = false;
|
||||
|
||||
$uploadFilesToS3 = SettingsManager::getInstance()->getSetting("Files: Upload Files to S3");
|
||||
$uploadFilesToS3Key = SettingsManager::getInstance()->getSetting("Files: Amazon S3 Key for File Upload");
|
||||
$uploadFilesToS3Secret = SettingsManager::getInstance()->getSetting("Files: Amazone S3 Secret for File Upload");
|
||||
$s3Bucket = SettingsManager::getInstance()->getSetting("Files: S3 Bucket");
|
||||
$s3WebUrl = SettingsManager::getInstance()->getSetting("Files: S3 Web Url");
|
||||
|
||||
if ($uploadFilesToS3.'' == '1' && !empty($uploadFilesToS3Key)
|
||||
&& !empty($uploadFilesToS3Secret) && !empty($s3Bucket) && !empty($s3WebUrl)) {
|
||||
$uploadname = CLIENT_NAME."/".$file;
|
||||
$s3FileSys = new S3FileSystem($uploadFilesToS3Key, $uploadFilesToS3Secret);
|
||||
$res = $s3FileSys->putObject($s3Bucket, $uploadname, $fileFullName, 'authenticated-read');
|
||||
|
||||
if (empty($res)) {
|
||||
return array("ERROR",$file);
|
||||
}
|
||||
|
||||
unlink($fileFullName);
|
||||
$file_url = $s3WebUrl.$uploadname;
|
||||
$file_url = $s3FileSys->generateExpiringURL($file_url);
|
||||
$uploadedToS3 = true;
|
||||
}
|
||||
|
||||
$fileObj = new File();
|
||||
$fileObj->name = $fileFirstPart;
|
||||
$fileObj->filename = $file;
|
||||
$fileObj->file_group = "Report";
|
||||
$ok = $fileObj->Save();
|
||||
|
||||
if (!$ok) {
|
||||
LogManager::getInstance()->info($fileObj->ErrorMsg());
|
||||
return array("ERROR","Error generating report");
|
||||
}
|
||||
|
||||
$reportFile = new ReportFile();
|
||||
$reportFile->name = $fileObj->filename;
|
||||
$reportFile->attachment = $fileObj->name;
|
||||
$reportFile->created = date("Y-m-d H:i:s");
|
||||
$reportFile->employee = BaseService::getInstance()->getCurrentProfileId();
|
||||
$ok = $reportFile->Save();
|
||||
|
||||
if (!$ok) {
|
||||
LogManager::getInstance()->info($reportFile->ErrorMsg());
|
||||
return array("ERROR","Error generating report");
|
||||
}
|
||||
|
||||
if ($uploadedToS3) {
|
||||
return array("SUCCESS",$file_url);
|
||||
} else {
|
||||
return array("SUCCESS",$file);
|
||||
}
|
||||
}
|
||||
}
|
||||
15
src/Reports/Admin/Api/ReportBuilderInterface.php
Normal file
15
src/Reports/Admin/Api/ReportBuilderInterface.php
Normal file
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: Thilina
|
||||
* Date: 8/19/17
|
||||
* Time: 6:52 PM
|
||||
*/
|
||||
|
||||
namespace Reports\Admin\Api;
|
||||
|
||||
interface ReportBuilderInterface
|
||||
{
|
||||
public function getData($report, $request);
|
||||
public function createReportFile($report, $data);
|
||||
}
|
||||
33
src/Reports/Admin/Api/ReportsAdminManager.php
Normal file
33
src/Reports/Admin/Api/ReportsAdminManager.php
Normal file
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: Thilina
|
||||
* Date: 8/19/17
|
||||
* Time: 6:25 PM
|
||||
*/
|
||||
|
||||
namespace Reports\Admin\Api;
|
||||
|
||||
use Classes\AbstractModuleManager;
|
||||
|
||||
class ReportsAdminManager extends AbstractModuleManager
|
||||
{
|
||||
|
||||
public function initializeUserClasses()
|
||||
{
|
||||
}
|
||||
|
||||
public function initializeFieldMappings()
|
||||
{
|
||||
}
|
||||
|
||||
public function initializeDatabaseErrorMappings()
|
||||
{
|
||||
}
|
||||
|
||||
public function setupModuleClassDefinitions()
|
||||
{
|
||||
|
||||
//This is a fixed module, store model classes in Models.inc.php
|
||||
}
|
||||
}
|
||||
92
src/Reports/Admin/Reports/ActiveEmployeeReport.php
Normal file
92
src/Reports/Admin/Reports/ActiveEmployeeReport.php
Normal file
@@ -0,0 +1,92 @@
|
||||
<?php
|
||||
namespace Reports\Admin\Reports;
|
||||
|
||||
use Company\Common\Model\CompanyStructure;
|
||||
use Reports\Admin\Api\CSVReportBuilder;
|
||||
use Reports\Admin\Api\CSVReportBuilderInterface;
|
||||
use Utils\LogManager;
|
||||
|
||||
class ActiveEmployeeReport extends CSVReportBuilder implements CSVReportBuilderInterface
|
||||
{
|
||||
|
||||
public function getMainQuery()
|
||||
{
|
||||
$query = "Select id, employee_id as 'Employee ID',
|
||||
concat(`first_name`,' ',`middle_name`,' ', `last_name`) as 'Name',
|
||||
(SELECT name from Nationality where id = nationality) as 'Nationality',
|
||||
birthday as 'Birthday',
|
||||
gender as 'Gender',
|
||||
marital_status as 'Marital Status',
|
||||
ssn_num as 'SSN Number',
|
||||
nic_num as 'NIC Number',
|
||||
other_id as 'Other IDs',
|
||||
driving_license as 'Driving License Number',
|
||||
(SELECT name from EmploymentStatus where id = employment_status) as 'Employment Status',
|
||||
(SELECT name from JobTitles where id = job_title) as 'Job Title',
|
||||
(SELECT name from PayGrades where id = pay_grade) as 'Pay Grade',
|
||||
work_station_id as 'Work Station ID',
|
||||
address1 as 'Address 1',
|
||||
address2 as 'Address 2',
|
||||
city as 'City',
|
||||
(SELECT name from Country where code = country) as 'Country',
|
||||
(SELECT name from Province where id = province) as 'Province',
|
||||
postal_code as 'Postal Code',
|
||||
home_phone as 'Home Phone',
|
||||
mobile_phone as 'Mobile Phone',
|
||||
work_phone as 'Work Phone',
|
||||
work_email as 'Work Email',
|
||||
private_email as 'Private Email',
|
||||
joined_date as 'Joined Date',
|
||||
confirmation_date as 'Confirmation Date',
|
||||
(SELECT title from CompanyStructures where id = department) as 'Department',
|
||||
(SELECT concat(`first_name`,' ',`middle_name`,' ', `last_name`,' [Employee ID:',`employee_id`,']') from Employees e1 where e1.id = e.supervisor) as 'Supervisor', notes as 'Notes'
|
||||
FROM Employees e";
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
||||
public function getWhereQuery($request)
|
||||
{
|
||||
$query = "";
|
||||
$params = array();
|
||||
|
||||
if (empty($request['department']) || $request['department'] == "NULL") {
|
||||
$params = array();
|
||||
$query = "where ((termination_date = '0001-01-01 00:00:00' or termination_date = '0000-00-00 00:00:00') and joined_date < NOW()) or (termination_date > NOW() and joined_date < NOW())";
|
||||
} else {
|
||||
$depts = $this->getChildCompanyStuctures($request['department']);
|
||||
$query = "where department in (".implode(",", $depts).") and (((termination_date = '0001-01-01 00:00:00' or termination_date = '0000-00-00 00:00:00') and joined_date < NOW()) or (termination_date > NOW() and joined_date < NOW()))";
|
||||
}
|
||||
|
||||
|
||||
return array($query, $params);
|
||||
}
|
||||
|
||||
public function getChildCompanyStuctures($companyStructId)
|
||||
{
|
||||
$childIds = array();
|
||||
$childIds[] = $companyStructId;
|
||||
$nodeIdsAtLastLevel = $childIds;
|
||||
$count = 0;
|
||||
do {
|
||||
$count++;
|
||||
$companyStructTemp = new CompanyStructure();
|
||||
if (empty($nodeIdsAtLastLevel) || empty($childIds)) {
|
||||
break;
|
||||
}
|
||||
$idQuery = "parent in (".implode(",", $nodeIdsAtLastLevel).") and id not in(".implode(",", $childIds).")";
|
||||
LogManager::getInstance()->debug($idQuery);
|
||||
$list = $companyStructTemp->Find($idQuery, array());
|
||||
if (!$list) {
|
||||
LogManager::getInstance()->debug($companyStructTemp->ErrorMsg());
|
||||
}
|
||||
$nodeIdsAtLastLevel = array();
|
||||
foreach ($list as $item) {
|
||||
$childIds[] = $item->id;
|
||||
$nodeIdsAtLastLevel[] = $item->id;
|
||||
}
|
||||
} while (count($list) > 0 && $count < 10);
|
||||
|
||||
return $childIds;
|
||||
}
|
||||
}
|
||||
55
src/Reports/Admin/Reports/EmployeeAttendanceReport.php
Normal file
55
src/Reports/Admin/Reports/EmployeeAttendanceReport.php
Normal file
@@ -0,0 +1,55 @@
|
||||
<?php
|
||||
namespace Reports\Admin\Reports;
|
||||
|
||||
use Reports\Admin\Api\CSVReportBuilder;
|
||||
use Reports\Admin\Api\CSVReportBuilderInterface;
|
||||
use Utils\LogManager;
|
||||
|
||||
class EmployeeAttendanceReport extends CSVReportBuilder implements CSVReportBuilderInterface
|
||||
{
|
||||
|
||||
public function getMainQuery()
|
||||
{
|
||||
$query = "SELECT
|
||||
(SELECT `employee_id` from Employees where id = at.employee) as 'Employee',
|
||||
(SELECT concat(`first_name`,' ',`middle_name`,' ', `last_name`) from Employees where id = at.employee) as 'Employee',
|
||||
in_time as 'Time In',
|
||||
out_time as 'Time Out',
|
||||
note as 'Note'
|
||||
FROM Attendance at";
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
||||
public function getWhereQuery($request)
|
||||
{
|
||||
|
||||
$employeeList = array();
|
||||
if (!empty($request['employee'])) {
|
||||
$employeeList = json_decode($request['employee'], true);
|
||||
}
|
||||
|
||||
if (in_array("NULL", $employeeList)) {
|
||||
$employeeList = array();
|
||||
}
|
||||
|
||||
if (!empty($employeeList)) {
|
||||
$query = "where employee in (".implode(",", $employeeList).") and in_time >= ? and out_time <= ? order by in_time desc;";
|
||||
$params = array(
|
||||
$request['date_start']." 00:00:00",
|
||||
$request['date_end']." 23:59:59",
|
||||
);
|
||||
} else {
|
||||
$query = "where in_time >= ? and out_time <= ? order by in_time desc;";
|
||||
$params = array(
|
||||
$request['date_start']." 00:00:00",
|
||||
$request['date_end']." 23:59:59",
|
||||
);
|
||||
}
|
||||
|
||||
LogManager::getInstance()->info("Query:".$query);
|
||||
LogManager::getInstance()->info("Params:".json_encode($params));
|
||||
|
||||
return array($query, $params);
|
||||
}
|
||||
}
|
||||
54
src/Reports/Admin/Reports/EmployeeLeaveEntitlementReport.php
Normal file
54
src/Reports/Admin/Reports/EmployeeLeaveEntitlementReport.php
Normal file
@@ -0,0 +1,54 @@
|
||||
<?php
|
||||
namespace Reports\Admin\Reports;
|
||||
|
||||
use Employees\Common\Model\Employee;
|
||||
use Leaves\User\Api\LeavesActionManager;
|
||||
use Reports\Admin\Api\ClassBasedReportBuilder;
|
||||
use Reports\Admin\Api\ReportBuilderInterface;
|
||||
|
||||
class EmployeeLeaveEntitlementReport extends ClassBasedReportBuilder
|
||||
implements ReportBuilderInterface
|
||||
{
|
||||
public function getData($report, $req)
|
||||
{
|
||||
|
||||
$leaveActionManager = new LeavesActionManager();
|
||||
|
||||
$department = $req['department'];
|
||||
$employeeId = $req['employee'];
|
||||
|
||||
if (($employeeId == "NULL" || empty($employeeId)) && ($department == "NULL" || empty($department))) {
|
||||
$emp = new Employee();
|
||||
$employees = $emp->Find("status = 'Active'", array());
|
||||
} elseif ($employeeId != "NULL" && !empty($employeeId)) {
|
||||
$emp = new Employee();
|
||||
$employees = $emp->Find("id = ?", array($employeeId));
|
||||
} else {
|
||||
$emp = new Employee();
|
||||
$employees = $emp->Find("department = ? and status = 'Active'", array($department));
|
||||
}
|
||||
|
||||
$reportData = array();
|
||||
$reportData[] = array("Employee ID","Employee","Leave Type","Pending","Approved","Rejected","Canceled","Available","To be Accrued","Carried Forward from Previous Years");
|
||||
|
||||
foreach ($employees as $employee) {
|
||||
$leaveEntitlements = $leaveActionManager->getEntitlementByEmployee($employee)->getObject();
|
||||
foreach ($leaveEntitlements as $leaveEntitlement) {
|
||||
$reportData[] = array(
|
||||
$employee->employee_id,
|
||||
$employee->first_name." ".$employee->last_name,
|
||||
$leaveEntitlement['name'],
|
||||
$leaveEntitlement['pendingLeaves'],
|
||||
$leaveEntitlement['approvedLeaves'],
|
||||
$leaveEntitlement['rejectedLeaves'],
|
||||
$leaveEntitlement['cancelRequestedLeaves'],
|
||||
$leaveEntitlement['availableLeaves'],
|
||||
$leaveEntitlement['tobeAccrued'],
|
||||
$leaveEntitlement['carriedForward']
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
return $reportData;
|
||||
}
|
||||
}
|
||||
92
src/Reports/Admin/Reports/EmployeeLeavesReport.php
Normal file
92
src/Reports/Admin/Reports/EmployeeLeavesReport.php
Normal file
@@ -0,0 +1,92 @@
|
||||
<?php
|
||||
namespace Reports\Admin\Reports;
|
||||
|
||||
use Employees\Common\Model\Employee;
|
||||
use Reports\Admin\Api\CSVReportBuilder;
|
||||
use Reports\Admin\Api\CSVReportBuilderInterface;
|
||||
use Utils\LogManager;
|
||||
|
||||
class EmployeeLeavesReport extends CSVReportBuilder implements CSVReportBuilderInterface
|
||||
{
|
||||
|
||||
public function getMainQuery()
|
||||
{
|
||||
$query = "SELECT
|
||||
(SELECT concat(`first_name`,' ',`middle_name`,' ', `last_name`) from Employees where id = employee) as 'Employee',
|
||||
(SELECT name from LeaveTypes where id = leave_type) as 'Leave Type',
|
||||
(SELECT name from LeavePeriods where id = leave_period) as 'Leave Period',
|
||||
date_start as 'Start Date',
|
||||
date_end as 'End Date',
|
||||
details as 'Reason',
|
||||
status as 'Leave Status',
|
||||
(select count(*) from EmployeeLeaveDays d where d.employee_leave = lv.id and leave_type = 'Full Day') as 'Full Day Count',
|
||||
(select count(*) from EmployeeLeaveDays d where d.employee_leave = lv.id and leave_type = 'Half Day - Morning') as 'Half Day (Morning) Count',
|
||||
(select count(*) from EmployeeLeaveDays d where d.employee_leave = lv.id and leave_type = 'Half Day - Afternoon') as 'Half Day (Afternoon) Count'
|
||||
from EmployeeLeaves lv";
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
||||
public function getWhereQuery($request)
|
||||
{
|
||||
|
||||
$employeeList = array();
|
||||
if (!empty($request['employee'])) {
|
||||
$employeeList = json_decode($request['employee'], true);
|
||||
}
|
||||
|
||||
if (in_array("NULL", $employeeList)) {
|
||||
$employeeList = array();
|
||||
}
|
||||
|
||||
if ($request['department'] != "NULL" && empty($employeeList)) {
|
||||
$empTmp = new Employee();
|
||||
$empTemps = $empTmp->Find("department = ? and status = Active", array($request['department']));
|
||||
foreach ($empTemps as $empTmp) {
|
||||
$employeeList[] = $empTmp->id;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (!empty($employeeList) && ($request['status'] != "NULL" && !empty($request['status']))) {
|
||||
$query = "where employee in (".implode(",", $employeeList).") and ((date_start >= ? and date_start <= ?) or (date_end >= ? and date_end <= ?)) and status = ?;";
|
||||
$params = array(
|
||||
$request['date_start'],
|
||||
$request['date_end'],
|
||||
$request['date_start'],
|
||||
$request['date_end'],
|
||||
$request['status']
|
||||
);
|
||||
} elseif (!empty($employeeList)) {
|
||||
$query = "where employee in (".implode(",", $employeeList).") and ((date_start >= ? and date_start <= ?) or (date_end >= ? and date_end <= ?));";
|
||||
$params = array(
|
||||
$request['date_start'],
|
||||
$request['date_end'],
|
||||
$request['date_start'],
|
||||
$request['date_end']
|
||||
);
|
||||
} elseif (($request['status'] != "NULL" && !empty($request['status']))) {
|
||||
$query = "where status = ? and ((date_start >= ? and date_start <= ?) or (date_end >= ? and date_end <= ?));";
|
||||
$params = array(
|
||||
$request['status'],
|
||||
$request['date_start'],
|
||||
$request['date_end'],
|
||||
$request['date_start'],
|
||||
$request['date_end']
|
||||
);
|
||||
} else {
|
||||
$query = "where ((date_start >= ? and date_start <= ?) or (date_end >= ? and date_end <= ?));";
|
||||
$params = array(
|
||||
$request['date_start'],
|
||||
$request['date_end'],
|
||||
$request['date_start'],
|
||||
$request['date_end']
|
||||
);
|
||||
}
|
||||
|
||||
LogManager::getInstance()->info("Query:".$query);
|
||||
LogManager::getInstance()->info("Params:".json_encode($params));
|
||||
|
||||
return array($query, $params);
|
||||
}
|
||||
}
|
||||
74
src/Reports/Admin/Reports/EmployeeTimeSheetData.php
Normal file
74
src/Reports/Admin/Reports/EmployeeTimeSheetData.php
Normal file
@@ -0,0 +1,74 @@
|
||||
<?php
|
||||
namespace Reports\Admin\Reports;
|
||||
|
||||
use Employees\Common\Model\Employee;
|
||||
use Reports\Admin\Api\ClassBasedReportBuilder;
|
||||
use Reports\Admin\Api\ReportBuilderInterface;
|
||||
use TimeSheets\Common\Model\EmployeeTimeSheet;
|
||||
use Utils\LogManager;
|
||||
|
||||
class EmployeeTimeSheetData extends ClassBasedReportBuilder implements ReportBuilderInterface
|
||||
{
|
||||
public function getData($report, $request)
|
||||
{
|
||||
|
||||
$employeeCache = array();
|
||||
|
||||
$employeeList = array();
|
||||
if (!empty($request['employee'])) {
|
||||
$employeeList = json_decode($request['employee'], true);
|
||||
}
|
||||
|
||||
if (in_array("NULL", $employeeList)) {
|
||||
$employeeList = array();
|
||||
}
|
||||
|
||||
$employee_query = "";
|
||||
if (!empty($employeeList)) {
|
||||
$employee_query = "employee in (".implode(",", $employeeList).") and ";
|
||||
}
|
||||
|
||||
$timeSheet = new EmployeeTimeSheet();
|
||||
if ($request['status'] != "NULL") {
|
||||
$timeSheets = $timeSheet->Find(
|
||||
$employee_query."status = ? and date_start >= ? and date_end <= ?",
|
||||
array($request['status'],$request['date_start'],$request['date_end'])
|
||||
);
|
||||
} else {
|
||||
$timeSheets = $timeSheet->Find(
|
||||
$employee_query."date_start >= ? and date_end <= ?",
|
||||
array($request['date_start'],$request['date_end'])
|
||||
);
|
||||
}
|
||||
|
||||
if (!$timeSheets) {
|
||||
LogManager::getInstance()->info($timeSheet->ErrorMsg());
|
||||
}
|
||||
|
||||
$reportData = array();
|
||||
$reportData[] = array("Employee ID","Employee","Name","Start","End","Total Time","Status");
|
||||
|
||||
foreach ($timeSheets as $ts) {
|
||||
$employee = $employeeCache[$ts->employee];
|
||||
if (empty($employee)) {
|
||||
$employee = new Employee();
|
||||
$employee->Load("id = ?", array($ts->employee));
|
||||
if (empty($employee->id)) {
|
||||
continue;
|
||||
}
|
||||
$employeeCache[$employee->id] = $employee;
|
||||
}
|
||||
$reportData[] = array(
|
||||
$employee->employee_id,
|
||||
$employee->first_name." ".$employee->last_name,
|
||||
date("F j, Y", strtotime($ts->date_start))." - ".date("F j, Y", strtotime($ts->date_end)),
|
||||
$ts->date_start,
|
||||
$ts->date_end,
|
||||
$ts->getTotalTime(),
|
||||
$ts->status
|
||||
);
|
||||
}
|
||||
|
||||
return $reportData;
|
||||
}
|
||||
}
|
||||
109
src/Reports/Admin/Reports/EmployeeTimeTrackReport.php
Normal file
109
src/Reports/Admin/Reports/EmployeeTimeTrackReport.php
Normal file
@@ -0,0 +1,109 @@
|
||||
<?php
|
||||
namespace Reports\Admin\Reports;
|
||||
use Attendance\Common\Model\Attendance;
|
||||
use Employees\Common\Model\Employee;
|
||||
use Reports\Admin\Api\ClassBasedReportBuilder;
|
||||
use Reports\Admin\Api\ReportBuilderInterface;
|
||||
use TimeSheets\Common\Model\EmployeeTimeEntry;
|
||||
use Utils\LogManager;
|
||||
|
||||
class EmployeeTimeTrackReport extends ClassBasedReportBuilder implements ReportBuilderInterface
|
||||
{
|
||||
public function getData($report, $req)
|
||||
{
|
||||
|
||||
LogManager::getInstance()->info(json_encode($report));
|
||||
LogManager::getInstance()->info(json_encode($req));
|
||||
|
||||
$employeeTimeEntry = new EmployeeTimeEntry();
|
||||
|
||||
$timeEntryList = $employeeTimeEntry->Find("employee = ? and date(date_start) >= ? and date(date_end) <= ?", array($req['employee'], $req['date_start'], $req['date_end']));
|
||||
|
||||
|
||||
$seconds = 0;
|
||||
$graphTimeArray = array();
|
||||
foreach ($timeEntryList as $entry) {
|
||||
$seconds = (strtotime($entry->date_end) - strtotime($entry->date_start));
|
||||
$key = date("Y-m-d", strtotime($entry->date_end));
|
||||
if (isset($graphTimeArray[$key])) {
|
||||
$graphTimeArray[$key] += $seconds;
|
||||
} else {
|
||||
$graphTimeArray[$key] = $seconds;
|
||||
}
|
||||
}
|
||||
|
||||
//$minutes = (int)($seconds/60);
|
||||
//Find Attendance Entries
|
||||
|
||||
$attendance = new Attendance();
|
||||
$atteandanceList = $attendance->Find("employee = ? and date(in_time) >= ? and date(out_time) <= ? and in_time < out_time", array($req['employee'], $req['date_start'], $req['date_end']));
|
||||
|
||||
$seconds = 0;
|
||||
$graphAttendanceArray = array();
|
||||
$firstTimeInArray = array();
|
||||
$lastTimeOutArray = array();
|
||||
foreach ($atteandanceList as $entry) {
|
||||
$seconds = (strtotime($entry->out_time) - strtotime($entry->in_time));
|
||||
$key = date("Y-m-d", strtotime($entry->in_time));
|
||||
if (isset($graphAttendanceArray[$key])) {
|
||||
$graphAttendanceArray[$key] += $seconds;
|
||||
$lastTimeOutArray[$key] = $entry->out_time;
|
||||
} else {
|
||||
$graphAttendanceArray[$key] = $seconds;
|
||||
$firstTimeInArray[$key] = $entry->in_time;
|
||||
$lastTimeOutArray[$key] = $entry->out_time;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////////////////////
|
||||
|
||||
$employeeObject = new Employee();
|
||||
$employeeObject->Load("id = ?", array($req['employee']));
|
||||
|
||||
|
||||
$reportData = array();
|
||||
//$reportData[] = array($employeeObject->first_name." ".$employeeObject->last_name,"","","","");
|
||||
$reportData[] = array("Date","First Punch-In Time","Last Punch-Out Time","Time in Office","Time in Timesheets");
|
||||
|
||||
|
||||
//Iterate date range
|
||||
|
||||
$interval = \DateInterval::createFromDateString('1 day');
|
||||
$period = new \DatePeriod(new \DateTime($req['date_start']), $interval, new \DateTime($req['date_end']));
|
||||
|
||||
foreach ($period as $dt) {
|
||||
$dataRow = array();
|
||||
$key = $dt->format("Y-m-d");
|
||||
|
||||
$dataRow[] = $key;
|
||||
|
||||
if (isset($firstTimeInArray[$key])) {
|
||||
$dataRow[] = $firstTimeInArray[$key];
|
||||
} else {
|
||||
$dataRow[] = "Not Found";
|
||||
}
|
||||
|
||||
if (isset($lastTimeOutArray[$key])) {
|
||||
$dataRow[] = $lastTimeOutArray[$key];
|
||||
} else {
|
||||
$dataRow[] = "Not Found";
|
||||
}
|
||||
|
||||
if (isset($graphAttendanceArray[$key])) {
|
||||
$dataRow[] = round(($graphAttendanceArray[$key]/3600), 2);
|
||||
} else {
|
||||
$dataRow[] = 0;
|
||||
}
|
||||
|
||||
if (isset($graphTimeArray[$key])) {
|
||||
$dataRow[] = round(($graphTimeArray[$key]/3600), 2);
|
||||
} else {
|
||||
$dataRow[] = 0;
|
||||
}
|
||||
|
||||
$reportData[] = $dataRow;
|
||||
}
|
||||
return $reportData;
|
||||
}
|
||||
}
|
||||
103
src/Reports/Admin/Reports/EmployeeTimesheetReport.php
Normal file
103
src/Reports/Admin/Reports/EmployeeTimesheetReport.php
Normal file
@@ -0,0 +1,103 @@
|
||||
<?php
|
||||
namespace Reports\Admin\Reports;
|
||||
|
||||
use Projects\Common\Model\Project;
|
||||
use Reports\Admin\Api\CSVReportBuilder;
|
||||
use Reports\Admin\Api\CSVReportBuilderInterface;
|
||||
use Utils\LogManager;
|
||||
|
||||
class EmployeeTimesheetReport extends CSVReportBuilder implements CSVReportBuilderInterface
|
||||
{
|
||||
|
||||
public function getMainQuery()
|
||||
{
|
||||
$query = "SELECT
|
||||
(SELECT concat(`first_name`,' ',`middle_name`,' ', `last_name`) from Employees where id = te.employee) as 'Employee',
|
||||
(SELECT name from Projects where id = te.project) as 'Project',
|
||||
details as 'Details',
|
||||
date_start as 'Start Time',
|
||||
date_end as 'End Time',
|
||||
SEC_TO_TIME(TIMESTAMPDIFF(SECOND,te.date_start,te.date_end)) as 'Duration'
|
||||
FROM EmployeeTimeEntry te";
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
||||
public function getWhereQuery($request)
|
||||
{
|
||||
|
||||
$employeeList = array();
|
||||
if (!empty($request['employee'])) {
|
||||
$employeeList = json_decode($request['employee'], true);
|
||||
}
|
||||
|
||||
$request['date_start'] = $request['date_start']." 00:00:00";
|
||||
$request['date_end'] = $request['date_end']." 23:59:59";
|
||||
|
||||
if (in_array("NULL", $employeeList)) {
|
||||
$employeeList = array();
|
||||
}
|
||||
|
||||
if (($request['client'] != "NULL" && !empty($request['client']))) {
|
||||
$project = new Project();
|
||||
$projects = $project->Find("client = ?", array($request['client']));
|
||||
$projectIds = array();
|
||||
foreach ($projects as $project) {
|
||||
$projectIds[] = $project->id;
|
||||
}
|
||||
|
||||
if (!empty($employeeList) && ($request['project'] != "NULL" && !empty($request['project']))) {
|
||||
$query = "where employee in (" . implode(",", $employeeList) . ") and date_start >= ? and date_end <= ? and project in (".implode(",", $projectIds).");";
|
||||
$params = array(
|
||||
$request['date_start'],
|
||||
$request['date_end']
|
||||
);
|
||||
} elseif (!empty($employeeList)) {
|
||||
$query = "where employee in (" . implode(",", $employeeList) . ") and date_start >= ? and date_end <= ? and project in (".implode(",", $projectIds).");";
|
||||
$params = array(
|
||||
$request['date_start'],
|
||||
$request['date_end']
|
||||
);
|
||||
} else {
|
||||
$query = "where date_start >= ? and date_end <= ? and project in (".implode(",", $projectIds).");";
|
||||
$params = array(
|
||||
$request['date_start'],
|
||||
$request['date_end']
|
||||
);
|
||||
}
|
||||
} else {
|
||||
if (!empty($employeeList) && ($request['project'] != "NULL" && !empty($request['project']))) {
|
||||
$query = "where employee in (" . implode(",", $employeeList) . ") and date_start >= ? and date_end <= ? and project = ?;";
|
||||
$params = array(
|
||||
$request['date_start'],
|
||||
$request['date_end'],
|
||||
$request['project']
|
||||
);
|
||||
} elseif (!empty($employeeList)) {
|
||||
$query = "where employee in (" . implode(",", $employeeList) . ") and date_start >= ? and date_end <= ?;";
|
||||
$params = array(
|
||||
$request['date_start'],
|
||||
$request['date_end']
|
||||
);
|
||||
} elseif (($request['project'] != "NULL" && !empty($request['project']))) {
|
||||
$query = "where project = ? and date_start >= ? and date_end <= ?;";
|
||||
$params = array(
|
||||
$request['project'],
|
||||
$request['date_start'],
|
||||
$request['date_end']
|
||||
);
|
||||
} else {
|
||||
$query = "where date_start >= ? and date_end <= ?;";
|
||||
$params = array(
|
||||
$request['date_start'],
|
||||
$request['date_end']
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
LogManager::getInstance()->info("Query:".$query);
|
||||
LogManager::getInstance()->info("Params:".json_encode($params));
|
||||
|
||||
return array($query, $params);
|
||||
}
|
||||
}
|
||||
71
src/Reports/Admin/Reports/ExpenseReport.php
Normal file
71
src/Reports/Admin/Reports/ExpenseReport.php
Normal file
@@ -0,0 +1,71 @@
|
||||
<?php
|
||||
namespace Reports\Admin\Reports;
|
||||
|
||||
use Reports\Admin\Api\CSVReportBuilder;
|
||||
use Reports\Admin\Api\CSVReportBuilderInterface;
|
||||
|
||||
class ExpenseReport extends CSVReportBuilder implements CSVReportBuilderInterface
|
||||
{
|
||||
|
||||
public function getMainQuery()
|
||||
{
|
||||
$query = "SELECT
|
||||
(SELECT concat(`first_name`,' ',`middle_name`,' ', `last_name`) from Employees where id = employee) as 'Employee',
|
||||
expense_date as 'Date',
|
||||
(SELECT name from ExpensesPaymentMethods where id = payment_method) as 'Payment Method',
|
||||
transaction_no as 'Transaction Ref',
|
||||
payee as 'Payee',
|
||||
(SELECT name from ExpensesCategories where id = category) as 'Category',
|
||||
notes as 'Notes',
|
||||
concat(`amount`,' ',`currency`) as 'Amount',
|
||||
status as 'Status',
|
||||
created as 'Created',
|
||||
updated as 'Updated'
|
||||
from EmployeeExpenses";
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
||||
public function getWhereQuery($request)
|
||||
{
|
||||
|
||||
$employeeList = array();
|
||||
if (!empty($request['employee'])) {
|
||||
$employeeList = json_decode($request['employee'], true);
|
||||
}
|
||||
|
||||
if (in_array("NULL", $employeeList)) {
|
||||
$employeeList = array();
|
||||
}
|
||||
|
||||
if (!empty($employeeList) && ($request['status'] != "NULL" && !empty($request['status']))) {
|
||||
$query = "where employee in (".implode(",", $employeeList).") and date(expense_date) >= ? and date(expense_date) <= ? and status = ?;";
|
||||
$params = array(
|
||||
$request['date_start'],
|
||||
$request['date_end'],
|
||||
$request['status']
|
||||
);
|
||||
} elseif (!empty($employeeList)) {
|
||||
$query = "where employee in (".implode(",", $employeeList).") and date(expense_date) >= ? and date(expense_date) <= ?;";
|
||||
$params = array(
|
||||
$request['date_start'],
|
||||
$request['date_end']
|
||||
);
|
||||
} elseif (($request['status'] != "NULL" && !empty($request['status']))) {
|
||||
$query = "where status = ? and date(expense_date) >= ? and date(expense_date) <= ?;";
|
||||
$params = array(
|
||||
$request['status'],
|
||||
$request['date_start'],
|
||||
$request['date_end']
|
||||
);
|
||||
} else {
|
||||
$query = "where date(expense_date) >= ? and date(expense_date) <= ?;";
|
||||
$params = array(
|
||||
$request['date_start'],
|
||||
$request['date_end']
|
||||
);
|
||||
}
|
||||
|
||||
return array($query, $params);
|
||||
}
|
||||
}
|
||||
35
src/Reports/Admin/Reports/NewHiresEmployeeReport.php
Normal file
35
src/Reports/Admin/Reports/NewHiresEmployeeReport.php
Normal file
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
namespace Reports\Admin\Reports;
|
||||
|
||||
class NewHiresEmployeeReport extends ActiveEmployeeReport
|
||||
{
|
||||
|
||||
|
||||
public function getWhereQuery($request)
|
||||
{
|
||||
$query = "where ";
|
||||
$params = array();
|
||||
if (!empty($request['department']) && $request['department'] != "NULL") {
|
||||
$depts = $this->getChildCompanyStuctures($request['department']);
|
||||
$query.="department in(".implode(",", $depts).") and ";
|
||||
}
|
||||
|
||||
if (empty($request['date_start']) || $request['date_start'] == "NULL") {
|
||||
$request['date_start'] = date("Y-m-d 00:00:00");
|
||||
}
|
||||
|
||||
if (empty($request['date_end']) || $request['date_end'] == "NULL") {
|
||||
$request['date_end'] = date("Y-m-d 23:59:59");
|
||||
}
|
||||
|
||||
$query.="joined_date >= ? ";
|
||||
$params[] = $request['date_start']." 00:00:00";
|
||||
|
||||
|
||||
|
||||
$query.="and joined_date <= ? ";
|
||||
$params[] = $request['date_end']." 23:59:59";
|
||||
|
||||
return array($query, $params);
|
||||
}
|
||||
}
|
||||
100
src/Reports/Admin/Reports/OvertimeReport.php
Normal file
100
src/Reports/Admin/Reports/OvertimeReport.php
Normal file
@@ -0,0 +1,100 @@
|
||||
<?php
|
||||
namespace Reports\Admin\Reports;
|
||||
|
||||
use Attendance\Common\Model\Attendance;
|
||||
use Classes\SettingsManager;
|
||||
use Employees\Common\Model\Employee;
|
||||
use Reports\Admin\Api\ClassBasedReportBuilder;
|
||||
use Reports\Admin\Api\ReportBuilderInterface;
|
||||
|
||||
class OvertimeReport extends ClassBasedReportBuilder implements ReportBuilderInterface
|
||||
{
|
||||
public function getData($report, $request)
|
||||
{
|
||||
|
||||
$employeeList = array();
|
||||
if (!empty($request['employee'])) {
|
||||
$employeeList = json_decode($request['employee'], true);
|
||||
}
|
||||
|
||||
if (in_array("NULL", $employeeList)) {
|
||||
$employeeList = array();
|
||||
}
|
||||
|
||||
$sevenDateBefore = date('Y-m-d', strtotime('-7 days', strtotime($request['date_start'])));
|
||||
|
||||
if (!empty($employeeList)) {
|
||||
$query = "employee in (".implode(",", $employeeList).") and in_time >= ? and out_time <= ? order by in_time;";
|
||||
$params = array(
|
||||
$sevenDateBefore." 00:00:00",
|
||||
$request['date_end']." 23:59:59",
|
||||
);
|
||||
} else {
|
||||
$query = "in_time >= ? and out_time <= ? order by in_time;";
|
||||
$params = array(
|
||||
$sevenDateBefore." 00:00:00",
|
||||
$request['date_end']." 23:59:59",
|
||||
);
|
||||
}
|
||||
|
||||
$at = new Attendance();
|
||||
$attendance = $at->Find($query, $params);
|
||||
|
||||
//Group records by employee
|
||||
$employeeAttendance = array();
|
||||
foreach ($attendance as $entry) {
|
||||
if (!isset($employeeAttendance[$entry->employee])) {
|
||||
$employeeAttendance[$entry->employee] = array();
|
||||
}
|
||||
|
||||
$employeeAttendance[$entry->employee][] = $entry;
|
||||
}
|
||||
|
||||
$atCalClassName = '\\Attendance\Common\Calculations\\';
|
||||
$atCalClassName .= SettingsManager::getInstance()->getSetting('Attendance: Overtime Calculation Class');
|
||||
|
||||
$atCal = new $atCalClassName();
|
||||
|
||||
$reportData = array();
|
||||
if (!$this->isAggregated()) {
|
||||
$reportData[] = array("Date", "Employee ID", "Employee", "Time in Office", "Regular Time", "Overtime", "Double Time");
|
||||
} else {
|
||||
$reportData[] = array("Employee ID", "Employee", "Time in Office", "Regular Time", "Overtime", "Double Time");
|
||||
}
|
||||
|
||||
foreach ($employeeAttendance as $employeeId => $atData) {
|
||||
$employee = new Employee();
|
||||
$employee->Load("id = ?", array($employeeId));
|
||||
$atSum = $atCal->getData($atData, $request['date_start'], $this->isAggregated());
|
||||
if (!$this->isAggregated()) {
|
||||
foreach ($atSum as $date => $counts) {
|
||||
$reportData[] = array(
|
||||
$date,
|
||||
$employee->employee_id,
|
||||
$employee->first_name." ".$employee->last_name,
|
||||
$counts['t'],
|
||||
$counts['r'],
|
||||
$counts['o'],
|
||||
$counts['d']
|
||||
);
|
||||
}
|
||||
} else {
|
||||
$reportData[] = array(
|
||||
$employee->employee_id,
|
||||
$employee->first_name." ".$employee->last_name,
|
||||
$atSum['t'],
|
||||
$atSum['r'],
|
||||
$atSum['o'],
|
||||
$atSum['d']
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
return $reportData;
|
||||
}
|
||||
|
||||
protected function isAggregated()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
70
src/Reports/Admin/Reports/OvertimeRequestReport.php
Normal file
70
src/Reports/Admin/Reports/OvertimeRequestReport.php
Normal file
@@ -0,0 +1,70 @@
|
||||
<?php
|
||||
namespace Reports\Admin\Reports;
|
||||
|
||||
use Reports\Admin\Api\CSVReportBuilder;
|
||||
use Reports\Admin\Api\CSVReportBuilderInterface;
|
||||
use Utils\LogManager;
|
||||
|
||||
class OvertimeRequestReport extends CSVReportBuilder implements CSVReportBuilderInterface
|
||||
{
|
||||
|
||||
public function getMainQuery()
|
||||
{
|
||||
$query = "SELECT
|
||||
(SELECT `employee_id` from Employees where id = at.employee) as 'Employee',
|
||||
(SELECT concat(`first_name`,' ',`middle_name`,' ', `last_name`) from Employees where id = at.employee) as 'Employee',
|
||||
(SELECT `name` from OvertimeCategories where id = at.category) as 'Category',
|
||||
(SELECT `name` from Projects where id = at.project) as 'Project',
|
||||
start_time as 'Start Time',
|
||||
end_time as 'End Time',
|
||||
notes as 'Notes',
|
||||
status as 'Status'
|
||||
FROM EmployeeOvertime at";
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
||||
public function getWhereQuery($request)
|
||||
{
|
||||
|
||||
$employeeList = array();
|
||||
if (!empty($request['employee'])) {
|
||||
$employeeList = json_decode($request['employee'], true);
|
||||
}
|
||||
|
||||
if (in_array("NULL", $employeeList)) {
|
||||
$employeeList = array();
|
||||
}
|
||||
|
||||
if (!empty($employeeList)) {
|
||||
$query = "where employee in (".implode(",", $employeeList).") and start_time >= ? and end_time <= ?";
|
||||
$params = array(
|
||||
$request['date_start']." 00:00:00",
|
||||
$request['date_end']." 23:59:59",
|
||||
);
|
||||
} else {
|
||||
$query = "where start_time >= ? and end_time <= ?";
|
||||
$params = array(
|
||||
$request['date_start']." 00:00:00",
|
||||
$request['date_end']." 23:59:59",
|
||||
);
|
||||
}
|
||||
|
||||
if (!empty($request['category']) && $request['category'] != "NULL") {
|
||||
$query.= " and category = ?";
|
||||
$params[] = $request['category'];
|
||||
}
|
||||
|
||||
if (!empty($request['project']) && $request['project'] != "NULL") {
|
||||
$query.= " and project = ?";
|
||||
$params[] = $request['project'];
|
||||
}
|
||||
|
||||
$query.=" order by start_time desc;";
|
||||
|
||||
LogManager::getInstance()->info("Query:".$query);
|
||||
LogManager::getInstance()->info("Params:".json_encode($params));
|
||||
|
||||
return array($query, $params);
|
||||
}
|
||||
}
|
||||
10
src/Reports/Admin/Reports/OvertimeSummaryReport.php
Normal file
10
src/Reports/Admin/Reports/OvertimeSummaryReport.php
Normal file
@@ -0,0 +1,10 @@
|
||||
<?php
|
||||
namespace Reports\Admin\Reports;
|
||||
|
||||
class OvertimeSummaryReport extends OvertimeReport
|
||||
{
|
||||
protected function isAggregated()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
35
src/Reports/Admin/Reports/TerminatedEmployeeReport.php
Normal file
35
src/Reports/Admin/Reports/TerminatedEmployeeReport.php
Normal file
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
namespace Reports\Admin\Reports;
|
||||
|
||||
class TerminatedEmployeeReport extends ActiveEmployeeReport
|
||||
{
|
||||
|
||||
|
||||
public function getWhereQuery($request)
|
||||
{
|
||||
$query = "where ";
|
||||
$params = array();
|
||||
if (!empty($request['department']) && $request['department'] != "NULL") {
|
||||
$depts = $this->getChildCompanyStuctures($request['department']);
|
||||
$query.="department in(".implode(",", $depts).") and ";
|
||||
}
|
||||
|
||||
if (empty($request['date_start']) || $request['date_start'] == "NULL") {
|
||||
$request['date_start'] = date("Y-m-d 00:00:00");
|
||||
}
|
||||
|
||||
if (empty($request['date_end']) || $request['date_end'] == "NULL") {
|
||||
$request['date_end'] = date("Y-m-d 23:59:59");
|
||||
}
|
||||
|
||||
$query.="termination_date >= ? ";
|
||||
$params[] = $request['date_start']." 00:00:00";
|
||||
|
||||
|
||||
|
||||
$query.="and termination_date <= ? ";
|
||||
$params[] = $request['date_end']." 23:59:59";
|
||||
|
||||
return array($query, $params);
|
||||
}
|
||||
}
|
||||
72
src/Reports/Admin/Reports/TravelRequestReport.php
Normal file
72
src/Reports/Admin/Reports/TravelRequestReport.php
Normal file
@@ -0,0 +1,72 @@
|
||||
<?php
|
||||
namespace Reports\Admin\Reports;
|
||||
|
||||
use Reports\Admin\Api\CSVReportBuilder;
|
||||
use Reports\Admin\Api\CSVReportBuilderInterface;
|
||||
|
||||
class TravelRequestReport extends CSVReportBuilder implements CSVReportBuilderInterface
|
||||
{
|
||||
|
||||
public function getMainQuery()
|
||||
{
|
||||
$query = "SELECT
|
||||
(SELECT concat(`first_name`,' ',`middle_name`,' ', `last_name`) from Employees where id = employee) as 'Employee',
|
||||
type as 'Type',
|
||||
purpose as 'Purpose',
|
||||
travel_from as 'Travel From',
|
||||
travel_to as 'Travel To',
|
||||
travel_date as 'Travel Date',
|
||||
return_date as 'Return Date',
|
||||
details as 'Other Details',
|
||||
concat(`funding`,' ',`currency`) as 'Funding',
|
||||
status as 'Status',
|
||||
created as 'Created',
|
||||
updated as 'Updated'
|
||||
from EmployeeTravelRecords";
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
||||
public function getWhereQuery($request)
|
||||
{
|
||||
|
||||
$employeeList = array();
|
||||
if (!empty($request['employee'])) {
|
||||
$employeeList = json_decode($request['employee'], true);
|
||||
}
|
||||
|
||||
if (in_array("NULL", $employeeList)) {
|
||||
$employeeList = array();
|
||||
}
|
||||
|
||||
if (!empty($employeeList) && ($request['status'] != "NULL" && !empty($request['status']))) {
|
||||
$query = "where employee in (".implode(",", $employeeList).") and date(travel_date) >= ? and date(return_date) <= ? and status = ?;";
|
||||
$params = array(
|
||||
$request['date_start'],
|
||||
$request['date_end'],
|
||||
$request['status']
|
||||
);
|
||||
} elseif (!empty($employeeList)) {
|
||||
$query = "where employee in (".implode(",", $employeeList).") and date(travel_date) >= ? and date(return_date) <= ?;";
|
||||
$params = array(
|
||||
$request['date_start'],
|
||||
$request['date_end']
|
||||
);
|
||||
} elseif (($request['status'] != "NULL" && !empty($request['status']))) {
|
||||
$query = "where status = ? and date(travel_date) >= ? and date(return_date) <= ?;";
|
||||
$params = array(
|
||||
$request['status'],
|
||||
$request['date_start'],
|
||||
$request['date_end']
|
||||
);
|
||||
} else {
|
||||
$query = "where date(travel_date) >= ? and date(return_date) <= ?;";
|
||||
$params = array(
|
||||
$request['date_start'],
|
||||
$request['date_end']
|
||||
);
|
||||
}
|
||||
|
||||
return array($query, $params);
|
||||
}
|
||||
}
|
||||
33
src/Reports/User/Api/ReportsModulesManager.php
Normal file
33
src/Reports/User/Api/ReportsModulesManager.php
Normal file
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: Thilina
|
||||
* Date: 8/19/17
|
||||
* Time: 10:26 PM
|
||||
*/
|
||||
|
||||
namespace Reports\User\Api;
|
||||
|
||||
use Classes\AbstractModuleManager;
|
||||
|
||||
class ReportsModulesManager extends AbstractModuleManager
|
||||
{
|
||||
|
||||
public function initializeUserClasses()
|
||||
{
|
||||
}
|
||||
|
||||
public function initializeFieldMappings()
|
||||
{
|
||||
}
|
||||
|
||||
public function initializeDatabaseErrorMappings()
|
||||
{
|
||||
}
|
||||
|
||||
public function setupModuleClassDefinitions()
|
||||
{
|
||||
|
||||
//This is a fixed module, store model classes in Models.inc.php
|
||||
}
|
||||
}
|
||||
182
src/Reports/User/Reports/ClientProjectTimeReport.php
Normal file
182
src/Reports/User/Reports/ClientProjectTimeReport.php
Normal file
@@ -0,0 +1,182 @@
|
||||
<?php
|
||||
namespace Reports\User\Reports;
|
||||
|
||||
use Classes\BaseService;
|
||||
use Classes\SettingsManager;
|
||||
use Leaves\Common\Model\HoliDay;
|
||||
use Leaves\Common\Model\WorkDay;
|
||||
use Metadata\Common\Model\Country;
|
||||
use Reports\Admin\Api\PDFReportBuilder;
|
||||
use Reports\Admin\Api\PDFReportBuilderInterface;
|
||||
use Employees\Common\Model\Employee;
|
||||
use Projects\Common\Model\Client;
|
||||
use Projects\Common\Model\Project;
|
||||
use TimeSheets\Common\Model\EmployeeTimeEntry;
|
||||
use Utils\CalendarTools;
|
||||
|
||||
class ClientProjectTimeReport extends PDFReportBuilder implements PDFReportBuilderInterface
|
||||
{
|
||||
public function getData($report, $request)
|
||||
{
|
||||
$data = $this->getDefaultData();
|
||||
|
||||
$data['company'] = SettingsManager::getInstance()->getSetting('Company: Name');
|
||||
|
||||
$client = new Client();
|
||||
$client->Load("id = ?", array($request['client']));
|
||||
$data['client'] = $client->name;
|
||||
|
||||
$data['period'] = $request['date_start']." to ".$request['date_end'];
|
||||
|
||||
$project = new Project();
|
||||
$projects = $project->Find("client = ?", array($request['client']));
|
||||
|
||||
$projectsStr = "";
|
||||
$projectIds = '';
|
||||
$projectsMap = array();
|
||||
foreach ($projects as $pro) {
|
||||
$projectIds[] = $pro->id;
|
||||
$projectsMap[$pro->id] = $pro->name;
|
||||
}
|
||||
|
||||
$employeeId = BaseService::getInstance()->getCurrentProfileId();
|
||||
$employee = new Employee();
|
||||
$employee->Load("id = ?", array($employeeId));
|
||||
|
||||
$data['employee'] = $employee->first_name." ".$employee->last_name;
|
||||
|
||||
$employeeTimeEntry = new EmployeeTimeEntry();
|
||||
$timeEntryList = $employeeTimeEntry->Find(
|
||||
"employee = ? and date(date_start) >= ? and date(date_end) <= ? and project in (".implode(",", $projectIds).") order by date_start",
|
||||
array($employeeId, $request['date_start'], $request['date_end'])
|
||||
);
|
||||
|
||||
$totalHours = 0;
|
||||
$nonWorkingDayHours = 0;
|
||||
|
||||
$projectTimes = array();
|
||||
|
||||
$timeEntryListNew = array();
|
||||
|
||||
$country = new Country();
|
||||
$country->Load("code = ?", $employee->country);
|
||||
|
||||
$countryCode = null;
|
||||
if (!empty($country->id)) {
|
||||
$countryCode = $country->id;
|
||||
}
|
||||
|
||||
$projectsWorked = array();
|
||||
|
||||
foreach ($timeEntryList as $timeEntry) {
|
||||
if (!in_array($timeEntry->project, $projectsWorked)) {
|
||||
$projectsWorked[] = $timeEntry->project;
|
||||
}
|
||||
|
||||
$entry = new \stdClass();
|
||||
$entry->date = date("d.m.Y", strtotime($timeEntry->date_start));
|
||||
$entry->startTime = $timeEntry->time_start;
|
||||
$entry->endTime = $timeEntry->time_end;
|
||||
$entry->details = $timeEntry->details;
|
||||
$entry->project = $projectsMap[$timeEntry->project];
|
||||
$entry->duration = CalendarTools::getTimeDiffInHours(
|
||||
$timeEntry->date_start,
|
||||
$timeEntry->date_end
|
||||
);
|
||||
$timeEntryListNew[] = $entry;
|
||||
|
||||
$totalHours += $entry->duration;
|
||||
|
||||
$isWorkingDay = $this->isWorkingDay($timeEntry->date_start, $countryCode);
|
||||
|
||||
if (!$isWorkingDay) {
|
||||
$nonWorkingDayHours += $entry->duration;
|
||||
}
|
||||
|
||||
if (!isset($projectTimes[$projectsMap[$timeEntry->project]])) {
|
||||
$projectTimes[$projectsMap[$timeEntry->project]] = 0;
|
||||
}
|
||||
|
||||
$projectTimes[$projectsMap[$timeEntry->project]] += $entry->duration;
|
||||
}
|
||||
|
||||
foreach ($projects as $pro) {
|
||||
if (in_array($pro->id, $projectsWorked)) {
|
||||
if ($projectsStr != "") {
|
||||
$projectsStr .= " ,";
|
||||
}
|
||||
$projectsStr .= $pro->name;
|
||||
}
|
||||
}
|
||||
|
||||
$data['projects'] = $projectsStr;
|
||||
|
||||
$data['entries'] = $timeEntryListNew;
|
||||
$data['projectTimes'] = $projectTimes;
|
||||
$data['totalHours'] = $totalHours;
|
||||
$data['totalHoursWorking'] = $totalHours - $nonWorkingDayHours;
|
||||
$data['totalHoursNonWorking'] = $nonWorkingDayHours;
|
||||
return $data;
|
||||
}
|
||||
|
||||
private function isHoliday($date, $countryId)
|
||||
{
|
||||
|
||||
$hd = new HoliDay();
|
||||
$allHolidays = $hd->Find(
|
||||
"dateh = ? and country IS NULL",
|
||||
array(date('Y-m-d', strtotime($date)))
|
||||
);
|
||||
|
||||
if (count($allHolidays) > 0) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!empty($countryId)) {
|
||||
$countryHolidays = $hd->Find(
|
||||
"dateh = ? and country = ?",
|
||||
array(date('Y-m-d', strtotime($date)), $countryId)
|
||||
);
|
||||
|
||||
if (count($countryHolidays) > 0) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private function isWorkingDay($date, $countryId)
|
||||
{
|
||||
$day = date("l", strtotime($date));
|
||||
|
||||
$isHoliday = $this->isHoliday($date, $countryId);
|
||||
|
||||
if ($isHoliday) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$wdCountry = new WorkDay();
|
||||
$wdCountry->Load("name = ? and country = ?", array($day, $countryId));
|
||||
if (!empty($wdCountry->id)) {
|
||||
if ($wdCountry->status == 'Full Day' || $wdCountry->status == 'Half Day') {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
$wdAll = new WorkDay();
|
||||
$wdAll->Load("name = ? and country IS NULL", array($day));
|
||||
if ($wdAll->status == 'Full Day' || $wdAll->status == 'Half Day') {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function getTemplate()
|
||||
{
|
||||
return "client_project_time_report.html";
|
||||
}
|
||||
}
|
||||
40
src/Reports/User/Reports/EmployeeAttendanceReport.php
Normal file
40
src/Reports/User/Reports/EmployeeAttendanceReport.php
Normal file
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
namespace Reports\User\Reports;
|
||||
|
||||
use Classes\BaseService;
|
||||
use Reports\Admin\Api\CSVReportBuilder;
|
||||
use Reports\Admin\Api\CSVReportBuilderInterface;
|
||||
use Utils\LogManager;
|
||||
|
||||
class EmployeeAttendanceReport extends CSVReportBuilder implements CSVReportBuilderInterface
|
||||
{
|
||||
|
||||
public function getMainQuery()
|
||||
{
|
||||
$query = "SELECT
|
||||
(SELECT `employee_id` from Employees where id = at.employee) as 'Employee',
|
||||
(SELECT concat(`first_name`,' ',`middle_name`,' ', `last_name`) from Employees where id = at.employee) as 'Employee',
|
||||
in_time as 'Time In',
|
||||
out_time as 'Time Out',
|
||||
note as 'Note'
|
||||
FROM Attendance at";
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
||||
public function getWhereQuery($request)
|
||||
{
|
||||
|
||||
$query = "where employee = ? and in_time >= ? and out_time <= ? order by in_time desc;";
|
||||
$params = array(
|
||||
BaseService::getInstance()->getCurrentProfileId(),
|
||||
$request['date_start']." 00:00:00",
|
||||
$request['date_end']." 23:59:59",
|
||||
);
|
||||
|
||||
LogManager::getInstance()->info("Query:".$query);
|
||||
LogManager::getInstance()->info("Params:".json_encode($params));
|
||||
|
||||
return array($query, $params);
|
||||
}
|
||||
}
|
||||
59
src/Reports/User/Reports/EmployeeLeavesReport.php
Normal file
59
src/Reports/User/Reports/EmployeeLeavesReport.php
Normal file
@@ -0,0 +1,59 @@
|
||||
<?php
|
||||
namespace Reports\User\Reports;
|
||||
|
||||
use Classes\BaseService;
|
||||
use Reports\Admin\Api\CSVReportBuilder;
|
||||
use Reports\Admin\Api\CSVReportBuilderInterface;
|
||||
use Utils\LogManager;
|
||||
|
||||
class EmployeeLeavesReport extends CSVReportBuilder implements CSVReportBuilderInterface
|
||||
{
|
||||
|
||||
public function getMainQuery()
|
||||
{
|
||||
$query = "SELECT
|
||||
(SELECT concat(`first_name`,' ',`middle_name`,' ', `last_name`) from Employees where id = employee) as 'Employee',
|
||||
(SELECT name from LeaveTypes where id = leave_type) as 'Leave Type',
|
||||
(SELECT name from LeavePeriods where id = leave_period) as 'Leave Period',
|
||||
date_start as 'Start Date',
|
||||
date_end as 'End Date',
|
||||
details as 'Reason',
|
||||
status as 'Leave Status',
|
||||
(select count(*) from EmployeeLeaveDays d where d.employee_leave = lv.id and leave_type = 'Full Day') as 'Full Day Count',
|
||||
(select count(*) from EmployeeLeaveDays d where d.employee_leave = lv.id and leave_type = 'Half Day - Morning') as 'Half Day (Morning) Count',
|
||||
(select count(*) from EmployeeLeaveDays d where d.employee_leave = lv.id and leave_type = 'Half Day - Afternoon') as 'Half Day (Afternoon) Count'
|
||||
from EmployeeLeaves lv";
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
||||
public function getWhereQuery($request)
|
||||
{
|
||||
|
||||
if (($request['status'] != "NULL" && !empty($request['status']))) {
|
||||
$query = "where employee = ? and status = ? and ((date_start >= ? and date_start <= ?) or (date_end >= ? and date_end <= ?));";
|
||||
$params = array(
|
||||
BaseService::getInstance()->getCurrentProfileId(),
|
||||
$request['status'],
|
||||
$request['date_start'],
|
||||
$request['date_end'],
|
||||
$request['date_start'],
|
||||
$request['date_end']
|
||||
);
|
||||
} else {
|
||||
$query = "where employee = ? and ((date_start >= ? and date_start <= ?) or (date_end >= ? and date_end <= ?));";
|
||||
$params = array(
|
||||
BaseService::getInstance()->getCurrentProfileId(),
|
||||
$request['date_start'],
|
||||
$request['date_end'],
|
||||
$request['date_start'],
|
||||
$request['date_end']
|
||||
);
|
||||
}
|
||||
|
||||
LogManager::getInstance()->info("Query:".$query);
|
||||
LogManager::getInstance()->info("Params:".json_encode($params));
|
||||
|
||||
return array($query, $params);
|
||||
}
|
||||
}
|
||||
76
src/Reports/User/Reports/EmployeeTimeSheetData.php
Normal file
76
src/Reports/User/Reports/EmployeeTimeSheetData.php
Normal file
@@ -0,0 +1,76 @@
|
||||
<?php
|
||||
namespace Reports\User\Reports;
|
||||
|
||||
use Employees\Common\Model\Employee;
|
||||
use Reports\Admin\Api\ClassBasedReportBuilder;
|
||||
use Reports\Admin\Api\ReportBuilderInterface;
|
||||
use TimeSheets\Common\Model\EmployeeTimeSheet;
|
||||
use Utils\LogManager;
|
||||
|
||||
class EmployeeTimeSheetData extends ClassBasedReportBuilder implements ReportBuilderInterface
|
||||
{
|
||||
public function getData($report, $request)
|
||||
{
|
||||
|
||||
$employeeCache = array();
|
||||
|
||||
$employeeList = array();
|
||||
if (!empty($request['employee'])) {
|
||||
$employeeList = json_decode($request['employee'], true);
|
||||
}
|
||||
|
||||
if (in_array("NULL", $employeeList)) {
|
||||
$employeeList = array();
|
||||
}
|
||||
|
||||
$employee_query = "";
|
||||
if (!empty($employeeList)) {
|
||||
$employee_query = "employee in (".implode(",", $employeeList).") and ";
|
||||
}
|
||||
|
||||
$timeSheet = new EmployeeTimeSheet();
|
||||
if ($request['status'] != "NULL") {
|
||||
$timeSheets = $timeSheet->Find(
|
||||
$employee_query."status = ? and date_start >= ? and date_end <= ?",
|
||||
array($request['status'],$request['date_start'],$request['date_end'])
|
||||
);
|
||||
} else {
|
||||
$timeSheets = $timeSheet->Find(
|
||||
$employee_query."date_start >= ? and date_end <= ?",
|
||||
array($request['date_start'],$request['date_end'])
|
||||
);
|
||||
}
|
||||
|
||||
if (!$timeSheets) {
|
||||
LogManager::getInstance()->info($timeSheet->ErrorMsg());
|
||||
}
|
||||
|
||||
$reportData = array();
|
||||
$reportData[] = array("Employee ID","Employee","Name","Start","End","Total Time","Status");
|
||||
|
||||
foreach ($timeSheets as $ts) {
|
||||
$employee = $employeeCache[$ts->employee];
|
||||
if (empty($employee)) {
|
||||
$employee = new Employee();
|
||||
$employee->Load("id = ?", array($ts->employee));
|
||||
if (empty($employee->id)) {
|
||||
continue;
|
||||
}
|
||||
$employeeCache[$employee->id] = $employee;
|
||||
}
|
||||
$reportData[] = array(
|
||||
$employee->employee_id,
|
||||
$employee->first_name." ".$employee->last_name,
|
||||
date("F j, Y", strtotime($ts->date_start))
|
||||
." - "
|
||||
.date("F j, Y", strtotime($ts->date_end)),
|
||||
$ts->date_start,
|
||||
$ts->date_end,
|
||||
$ts->getTotalTime(),
|
||||
$ts->status
|
||||
);
|
||||
}
|
||||
|
||||
return $reportData;
|
||||
}
|
||||
}
|
||||
114
src/Reports/User/Reports/EmployeeTimeTrackReport.php
Normal file
114
src/Reports/User/Reports/EmployeeTimeTrackReport.php
Normal file
@@ -0,0 +1,114 @@
|
||||
<?php
|
||||
namespace Reports\User\Reports;
|
||||
|
||||
use Attendance\Common\Model\Attendance;
|
||||
use Classes\BaseService;
|
||||
use Employees\Common\Model\Employee;
|
||||
use Reports\Admin\Api\ClassBasedReportBuilder;
|
||||
use Reports\Admin\Api\ReportBuilderInterface;
|
||||
use TimeSheets\Common\Model\EmployeeTimeEntry;
|
||||
|
||||
class EmployeeTimeTrackReport extends ClassBasedReportBuilder implements ReportBuilderInterface
|
||||
{
|
||||
public function getData($report, $req)
|
||||
{
|
||||
|
||||
$req['employee'] = BaseService::getInstance()->getCurrentProfileId();
|
||||
|
||||
$employeeTimeEntry = new EmployeeTimeEntry();
|
||||
|
||||
$timeEntryList = $employeeTimeEntry->Find(
|
||||
"employee = ? and date(date_start) >= ? and date(date_end) <= ?",
|
||||
array($req['employee'], $req['date_start'], $req['date_end'])
|
||||
);
|
||||
|
||||
|
||||
$seconds = 0;
|
||||
$graphTimeArray = array();
|
||||
foreach ($timeEntryList as $entry) {
|
||||
$seconds = (strtotime($entry->date_end) - strtotime($entry->date_start));
|
||||
$key = date("Y-m-d", strtotime($entry->date_end));
|
||||
if (isset($graphTimeArray[$key])) {
|
||||
$graphTimeArray[$key] += $seconds;
|
||||
} else {
|
||||
$graphTimeArray[$key] = $seconds;
|
||||
}
|
||||
}
|
||||
|
||||
//$minutes = (int)($seconds/60);
|
||||
|
||||
|
||||
//Find Attendance Entries
|
||||
|
||||
$attendance = new Attendance();
|
||||
$atteandanceList = $attendance->Find("employee = ? and date(in_time) >= ? and date(out_time) <= ? and in_time < out_time", array($req['employee'], $req['date_start'], $req['date_end']));
|
||||
|
||||
$seconds = 0;
|
||||
$graphAttendanceArray = array();
|
||||
$firstTimeInArray = array();
|
||||
$lastTimeOutArray = array();
|
||||
foreach ($atteandanceList as $entry) {
|
||||
$seconds = (strtotime($entry->out_time) - strtotime($entry->in_time));
|
||||
$key = date("Y-m-d", strtotime($entry->in_time));
|
||||
if (isset($graphAttendanceArray[$key])) {
|
||||
$graphAttendanceArray[$key] += $seconds;
|
||||
$lastTimeOutArray[$key] = $entry->out_time;
|
||||
} else {
|
||||
$graphAttendanceArray[$key] = $seconds;
|
||||
$firstTimeInArray[$key] = $entry->in_time;
|
||||
$lastTimeOutArray[$key] = $entry->out_time;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////////////////////
|
||||
|
||||
$employeeObject = new Employee();
|
||||
$employeeObject->Load("id = ?", array($req['employee']));
|
||||
|
||||
|
||||
$reportData = array();
|
||||
//$reportData[] = array($employeeObject->first_name." ".$employeeObject->last_name,"","","","");
|
||||
$reportData[] = array("Date","First Punch-In Time","Last Punch-Out Time","Time in Office","Time in Timesheets");
|
||||
|
||||
|
||||
//Iterate date range
|
||||
|
||||
$interval = \DateInterval::createFromDateString('1 day');
|
||||
$period = new \DatePeriod(new \DateTime($req['date_start']), $interval, new \DateTime($req['date_end']));
|
||||
|
||||
foreach ($period as $dt) {
|
||||
$dataRow = array();
|
||||
$key = $dt->format("Y-m-d");
|
||||
|
||||
$dataRow[] = $key;
|
||||
|
||||
if (isset($firstTimeInArray[$key])) {
|
||||
$dataRow[] = $firstTimeInArray[$key];
|
||||
} else {
|
||||
$dataRow[] = "Not Found";
|
||||
}
|
||||
|
||||
if (isset($lastTimeOutArray[$key])) {
|
||||
$dataRow[] = $lastTimeOutArray[$key];
|
||||
} else {
|
||||
$dataRow[] = "Not Found";
|
||||
}
|
||||
|
||||
if (isset($graphAttendanceArray[$key])) {
|
||||
$dataRow[] = round(($graphAttendanceArray[$key]/3600), 2);
|
||||
} else {
|
||||
$dataRow[] = 0;
|
||||
}
|
||||
|
||||
if (isset($graphTimeArray[$key])) {
|
||||
$dataRow[] = round(($graphTimeArray[$key]/3600), 2);
|
||||
} else {
|
||||
$dataRow[] = 0;
|
||||
}
|
||||
|
||||
$reportData[] = $dataRow;
|
||||
}
|
||||
return $reportData;
|
||||
}
|
||||
}
|
||||
78
src/Reports/User/Reports/EmployeeTimesheetReport.php
Normal file
78
src/Reports/User/Reports/EmployeeTimesheetReport.php
Normal file
@@ -0,0 +1,78 @@
|
||||
<?php
|
||||
namespace Reports\User\Reports;
|
||||
|
||||
use Classes\BaseService;
|
||||
use Projects\Common\Model\Project;
|
||||
use Reports\Admin\Api\CSVReportBuilder;
|
||||
use Reports\Admin\Api\CSVReportBuilderInterface;
|
||||
use Utils\LogManager;
|
||||
|
||||
class EmployeeTimesheetReport extends CSVReportBuilder implements CSVReportBuilderInterface
|
||||
{
|
||||
|
||||
public function getMainQuery()
|
||||
{
|
||||
$query = "SELECT
|
||||
(SELECT concat(`first_name`,' ',`middle_name`,' ', `last_name`) from Employees where id = te.employee) as 'Employee',
|
||||
(SELECT name from Projects where id = te.project) as 'Project',
|
||||
details as 'Details',
|
||||
date_start as 'Start Time',
|
||||
date_end as 'End Time',
|
||||
SEC_TO_TIME(TIMESTAMPDIFF(SECOND,te.date_start,te.date_end)) as 'Duration'
|
||||
FROM EmployeeTimeEntry te";
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
||||
public function getWhereQuery($request)
|
||||
{
|
||||
|
||||
if (($request['client'] != "NULL" && !empty($request['client']))) {
|
||||
if (($request['project'] != "NULL" && !empty($request['project']))) {
|
||||
$query = "where employee = ? and project = ? and date_start >= ? and date_end <= ?;";
|
||||
$params = array(
|
||||
BaseService::getInstance()->getCurrentProfileId(),
|
||||
$request['project'],
|
||||
$request['date_start'],
|
||||
$request['date_end']
|
||||
);
|
||||
} else {
|
||||
$project = new Project();
|
||||
$projects = $project->Find("client = ?", array($request['client']));
|
||||
$projectIds = array();
|
||||
foreach ($projects as $project) {
|
||||
$projectIds[] = $project->id;
|
||||
}
|
||||
|
||||
$query = "where project in (".implode(",", $projectIds).") and employee = ? and date_start >= ? and date_end <= ?;";
|
||||
$params = array(
|
||||
BaseService::getInstance()->getCurrentProfileId(),
|
||||
$request['date_start'],
|
||||
$request['date_end']
|
||||
);
|
||||
}
|
||||
} else {
|
||||
if (($request['project'] != "NULL" && !empty($request['project']))) {
|
||||
$query = "where employee = ? and project = ? and date_start >= ? and date_end <= ?;";
|
||||
$params = array(
|
||||
BaseService::getInstance()->getCurrentProfileId(),
|
||||
$request['project'],
|
||||
$request['date_start'],
|
||||
$request['date_end']
|
||||
);
|
||||
} else {
|
||||
$query = "where employee = ? and date_start >= ? and date_end <= ?;";
|
||||
$params = array(
|
||||
BaseService::getInstance()->getCurrentProfileId(),
|
||||
$request['date_start'],
|
||||
$request['date_end']
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
LogManager::getInstance()->info("Query:".$query);
|
||||
LogManager::getInstance()->info("Params:".json_encode($params));
|
||||
|
||||
return array($query, $params);
|
||||
}
|
||||
}
|
||||
52
src/Reports/User/Reports/ExpenseReport.php
Normal file
52
src/Reports/User/Reports/ExpenseReport.php
Normal file
@@ -0,0 +1,52 @@
|
||||
<?php
|
||||
namespace Reports\User\Reports;
|
||||
|
||||
use Classes\BaseService;
|
||||
use Reports\Admin\Api\CSVReportBuilder;
|
||||
use Reports\Admin\Api\CSVReportBuilderInterface;
|
||||
|
||||
class ExpenseReport extends CSVReportBuilder implements CSVReportBuilderInterface
|
||||
{
|
||||
|
||||
public function getMainQuery()
|
||||
{
|
||||
$query = "SELECT
|
||||
(SELECT concat(`first_name`,' ',`middle_name`,' ', `last_name`) from Employees where id = employee) as 'Employee',
|
||||
expense_date as 'Date',
|
||||
(SELECT name from ExpensesPaymentMethods where id = payment_method) as 'Payment Method',
|
||||
transaction_no as 'Transaction Ref',
|
||||
payee as 'Payee',
|
||||
(SELECT name from ExpensesCategories where id = category) as 'Category',
|
||||
notes as 'Notes',
|
||||
concat(`amount`,' ',`currency`) as 'Amount',
|
||||
status as 'Status',
|
||||
created as 'Created',
|
||||
updated as 'Updated'
|
||||
from EmployeeExpenses";
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
||||
public function getWhereQuery($request)
|
||||
{
|
||||
|
||||
if (($request['status'] != "NULL" && !empty($request['status']))) {
|
||||
$query = "where employee = ? and status = ? and date(expense_date) >= ? and date(expense_date) <= ?;";
|
||||
$params = array(
|
||||
BaseService::getInstance()->getCurrentProfileId(),
|
||||
$request['status'],
|
||||
$request['date_start'],
|
||||
$request['date_end']
|
||||
);
|
||||
} else {
|
||||
$query = "where employee = ? and date(expense_date) >= ? and date(expense_date) <= ?;";
|
||||
$params = array(
|
||||
BaseService::getInstance()->getCurrentProfileId(),
|
||||
$request['date_start'],
|
||||
$request['date_end']
|
||||
);
|
||||
}
|
||||
|
||||
return array($query, $params);
|
||||
}
|
||||
}
|
||||
86
src/Reports/User/Reports/OvertimeReport.php
Normal file
86
src/Reports/User/Reports/OvertimeReport.php
Normal file
@@ -0,0 +1,86 @@
|
||||
<?php
|
||||
namespace Reports\User\Reports;
|
||||
|
||||
use Attendance\Common\Model\Attendance;
|
||||
use Classes\BaseService;
|
||||
use Classes\SettingsManager;
|
||||
use Employees\Common\Model\Employee;
|
||||
use Reports\Admin\Api\ClassBasedReportBuilder;
|
||||
use Reports\Admin\Api\ReportBuilderInterface;
|
||||
|
||||
class OvertimeReport extends ClassBasedReportBuilder implements ReportBuilderInterface
|
||||
{
|
||||
public function getData($report, $request)
|
||||
{
|
||||
|
||||
$employeeList = array();
|
||||
$employeeList[] = BaseService::getInstance()->getCurrentProfileId();
|
||||
|
||||
$sevenDateBefore = date('Y-m-d', strtotime('-7 days', strtotime($request['date_start'])));
|
||||
|
||||
$query = "employee in (".implode(",", $employeeList).") and in_time >= ? and out_time <= ? order by in_time;";
|
||||
$params = array(
|
||||
$sevenDateBefore." 00:00:00",
|
||||
$request['date_end']." 23:59:59",
|
||||
);
|
||||
|
||||
$at = new Attendance();
|
||||
$attendance = $at->Find($query, $params);
|
||||
|
||||
//Group records by employee
|
||||
$employeeAttendance = array();
|
||||
foreach ($attendance as $entry) {
|
||||
if (!isset($employeeAttendance[$entry->employee])) {
|
||||
$employeeAttendance[$entry->employee] = array();
|
||||
}
|
||||
|
||||
$employeeAttendance[$entry->employee][] = $entry;
|
||||
}
|
||||
|
||||
$atCalClassName = SettingsManager::getInstance()->getSetting('Attendance: Overtime Calculation Class');
|
||||
$atCalClassName = '\\Attendance\\Common\\Calculations\\'.$atCalClassName;
|
||||
$atCal = new $atCalClassName();
|
||||
|
||||
$reportData = array();
|
||||
if (!$this->isAggregated()) {
|
||||
$reportData[] = array("Date", "Employee ID", "Employee", "Time in Office", "Regular Time", "Overtime", "Double Time");
|
||||
} else {
|
||||
$reportData[] = array("Employee ID", "Employee", "Time in Office", "Regular Time", "Overtime", "Double Time");
|
||||
}
|
||||
|
||||
foreach ($employeeAttendance as $employeeId => $atData) {
|
||||
$employee = new Employee();
|
||||
$employee->Load("id = ?", array($employeeId));
|
||||
$atSum = $atCal->getData($atData, $request['date_start'], $this->isAggregated());
|
||||
if (!$this->isAggregated()) {
|
||||
foreach ($atSum as $date => $counts) {
|
||||
$reportData[] = array(
|
||||
$date,
|
||||
$employee->employee_id,
|
||||
$employee->first_name." ".$employee->last_name,
|
||||
$counts['t'],
|
||||
$counts['r'],
|
||||
$counts['o'],
|
||||
$counts['d']
|
||||
);
|
||||
}
|
||||
} else {
|
||||
$reportData[] = array(
|
||||
$employee->employee_id,
|
||||
$employee->first_name." ".$employee->last_name,
|
||||
$atSum['t'],
|
||||
$atSum['r'],
|
||||
$atSum['o'],
|
||||
$atSum['d']
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
return $reportData;
|
||||
}
|
||||
|
||||
protected function isAggregated()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
10
src/Reports/User/Reports/OvertimeSummaryReport.php
Normal file
10
src/Reports/User/Reports/OvertimeSummaryReport.php
Normal file
@@ -0,0 +1,10 @@
|
||||
<?php
|
||||
namespace Reports\User\Reports;
|
||||
|
||||
class OvertimeSummaryReport extends OvertimeReport
|
||||
{
|
||||
protected function isAggregated()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
74
src/Reports/User/Reports/PayslipReport.php
Normal file
74
src/Reports/User/Reports/PayslipReport.php
Normal file
@@ -0,0 +1,74 @@
|
||||
<?php
|
||||
namespace Reports\User\Reports;
|
||||
|
||||
use Classes\BaseService;
|
||||
use Payroll\Common\Model\Payroll;
|
||||
use Payroll\Common\Model\PayrollColumn;
|
||||
use Payroll\Common\Model\PayrollData;
|
||||
use Payroll\Common\Model\PayslipTemplate;
|
||||
use Reports\Admin\Api\PDFReportBuilder;
|
||||
use Reports\Admin\Api\PDFReportBuilderInterface;
|
||||
|
||||
class PayslipReport extends PDFReportBuilder implements PDFReportBuilderInterface
|
||||
{
|
||||
public function getData($report, $request)
|
||||
{
|
||||
$data = $this->getDefaultData();
|
||||
|
||||
$data['fields'] = array();
|
||||
|
||||
$payroll = new Payroll();
|
||||
$payroll->Load("id = ?", array($request['payroll']));
|
||||
|
||||
if (empty($payroll->payslipTemplate)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$payslipTemplate = new PayslipTemplate();
|
||||
$payslipTemplate->Load("id = ?", array($payroll->payslipTemplate));
|
||||
|
||||
if (empty($payslipTemplate->id)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$fields = json_decode($payslipTemplate->data, true);
|
||||
|
||||
foreach ($fields as $field) {
|
||||
if ($field['type'] == 'Payroll Column') {
|
||||
$col = new PayrollColumn();
|
||||
$col->Load("id = ?", $field['payrollColumn']);
|
||||
if (empty($col->id)) {
|
||||
continue;
|
||||
}
|
||||
$payrollData = new PayrollData();
|
||||
$payrollData->Load(
|
||||
"payroll = ? and payroll_item = ? and employee = ?",
|
||||
array(
|
||||
$request['payroll'],
|
||||
$col->id, BaseService::getInstance()->getCurrentProfileId()
|
||||
)
|
||||
);
|
||||
|
||||
if (empty($payrollData->id)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$field['value'] = $payrollData->amount;
|
||||
|
||||
if (empty($field['label'])) {
|
||||
$field['label'] = $col->name;
|
||||
}
|
||||
}
|
||||
|
||||
if ($field['status'] == 'Show') {
|
||||
$data['fields'][] = $field;
|
||||
}
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
|
||||
public function getTemplate()
|
||||
{
|
||||
return "payslip.html";
|
||||
}
|
||||
}
|
||||
53
src/Reports/User/Reports/TravelRequestReport.php
Normal file
53
src/Reports/User/Reports/TravelRequestReport.php
Normal file
@@ -0,0 +1,53 @@
|
||||
<?php
|
||||
namespace Reports\User\Reports;
|
||||
|
||||
use Classes\BaseService;
|
||||
use Reports\Admin\Api\CSVReportBuilder;
|
||||
use Reports\Admin\Api\CSVReportBuilderInterface;
|
||||
|
||||
class TravelRequestReport extends CSVReportBuilder implements CSVReportBuilderInterface
|
||||
{
|
||||
|
||||
public function getMainQuery()
|
||||
{
|
||||
$query = "SELECT
|
||||
(SELECT concat(`first_name`,' ',`middle_name`,' ', `last_name`) from Employees where id = employee) as 'Employee',
|
||||
type as 'Type',
|
||||
purpose as 'Purpose',
|
||||
travel_from as 'Travel From',
|
||||
travel_to as 'Travel To',
|
||||
travel_date as 'Travel Date',
|
||||
return_date as 'Return Date',
|
||||
details as 'Other Details',
|
||||
concat(`funding`,' ',`currency`) as 'Funding',
|
||||
status as 'Status',
|
||||
created as 'Created',
|
||||
updated as 'Updated'
|
||||
from EmployeeTravelRecords";
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
||||
public function getWhereQuery($request)
|
||||
{
|
||||
|
||||
if (($request['status'] != "NULL" && !empty($request['status']))) {
|
||||
$query = "where employee = ? and status = ? and date(travel_date) >= ? and date(return_date) <= ?;";
|
||||
$params = array(
|
||||
BaseService::getInstance()->getCurrentProfileId(),
|
||||
$request['status'],
|
||||
$request['date_start'],
|
||||
$request['date_end']
|
||||
);
|
||||
} else {
|
||||
$query = "where employee = ? and date(travel_date) >= ? and date(return_date) <= ?;";
|
||||
$params = array(
|
||||
BaseService::getInstance()->getCurrentProfileId(),
|
||||
$request['date_start'],
|
||||
$request['date_end']
|
||||
);
|
||||
}
|
||||
|
||||
return array($query, $params);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user