File: /home/mostafedeg/public_html/erp/controllers/employeeAttendance.php
<?php
$do = isset($_GET['do']) ? $_GET['do'] : '';
$ajaxDoArr = array('', 'add', 'saveaccesslog');
if (!in_array($do, $ajaxDoArr)) {
//the global file operation
include("../public/impOpreation.php");
}
################################################################################
# this controller is only to save time of attendance and departure
################################################################################
//Transaction
include_once("../models/sql/Transaction.class.php");
// get the config file
include_once("../public/config.php");
//here the db files that include in the file
// GOES HERE ....................
include("../public/include_dao.php");
require_once('../models/dao/EmployeeattendanceDAO.class.php');
require_once('../models/dto/Employeeattendance.class.php');
require_once('../models/mysql/EmployeeattendanceMySqlDAO.class.php');
require_once('../models/mysql/ext/EmployeeattendanceMySqlExtDAO.class.php');
require_once('../models/dao/EmployeeDAO.class.php');
require_once('../models/dto/Employee.class.php');
require_once('../models/mysql/EmployeeMySqlDAO.class.php');
require_once('../models/mysql/ext/EmployeeMySqlExtDAO.class.php');
//Employeesubgroup
require_once('../models/dao/EmployeesubgroupDAO.class.php');
require_once('../models/dto/Employeesubgroup.class.php');
require_once('../models/mysql/EmployeesubgroupMySqlDAO.class.php');
require_once('../models/mysql/ext/EmployeesubgroupMySqlExtDAO.class.php');
//Employeegroup
require_once('../models/dao/EmployeegroupDAO.class.php');
require_once('../models/dto/Employeegroup.class.php');
require_once('../models/mysql/EmployeegroupMySqlDAO.class.php');
require_once('../models/mysql/ext/EmployeegroupMySqlExtDAO.class.php');
//Employeeclosedaygroupstatus
require_once('../models/dao/EmployeeclosedaygroupstatusDAO.class.php');
require_once('../models/dto/Employeeclosedaygroupstatu.class.php');
require_once('../models/mysql/EmployeeclosedaygroupstatusMySqlDAO.class.php');
require_once('../models/mysql/ext/EmployeeclosedaygroupstatusMySqlExtDAO.class.php');
//Employeeclosedayhistory
require_once('../models/dao/EmployeeclosedayhistoryDAO.class.php');
require_once('../models/dto/Employeeclosedayhistory.class.php');
require_once('../models/mysql/EmployeeclosedayhistoryMySqlDAO.class.php');
require_once('../models/mysql/ext/EmployeeclosedayhistoryMySqlExtDAO.class.php');
//Employeeclosedaystatus
require_once('../models/dao/EmployeeclosedaystatusDAO.class.php');
require_once('../models/dto/Employeeclosedaystatu.class.php');
require_once('../models/mysql/EmployeeclosedaystatusMySqlDAO.class.php');
require_once('../models/mysql/ext/EmployeeclosedaystatusMySqlExtDAO.class.php');
//Employeeclosedaysubgroupstatus
require_once('../models/dao/EmployeeclosedaysubgroupstatusDAO.class.php');
require_once('../models/dto/Employeeclosedaysubgroupstatu.class.php');
require_once('../models/mysql/EmployeeclosedaysubgroupstatusMySqlDAO.class.php');
require_once('../models/mysql/ext/EmployeeclosedaysubgroupstatusMySqlExtDAO.class.php');
require_once('../models/dao/YoutubeLinkDAO.class.php');
require_once('../models/dto/YoutubeLink.class.php');
require_once('../models/mysql/YoutubeLinkMySqlDAO.class.php');
require_once('../models/mysql/ext/YoutubeLinkMySqlExtDAO.class.php');
//get the do the action
//$do = $_GET['do'];
$langs = $_SESSION['erp_lang'];
include_once("../views/languages/$langs/success.php");
include_once("../views/languages/$langs/error.php");
/* ======================
Controller Name :-
*
======================== */
//here the global templates
if (!in_array($do, $ajaxDoArr)) {
$smarty->display("header.html");
}
$employeeAttendance = new Employeeattendance();
$employeeAttendanceDAO = new EmployeeattendanceMySqlDAO();
$employeeAttendanceEX = new EmployeeattendanceMySqlExtDAO();
$employee = new Employee();
$employeeDAO = new EmployeeMySqlDAO();
$employeeEX = new EmployeeMySqlExtDAO();
//Employeesubgroup
$employeeSubGroup = new Employeesubgroup();
$employeeSubGroupDAO = new EmployeesubgroupMySqlDAO();
$employeeSubGroupEX = new EmployeesubgroupMySqlExtDAO();
//Employeegroup
$employeeGroup = new Employeegroup();
$employeeGroupDAO = new EmployeegroupMySqlDAO();
$employeeGroupEX = new EmployeegroupMySqlExtDAO();
//Employeeclosedayhistory
$employeeCloseDayHistory = new Employeeclosedayhistory();
$employeeCloseDayHistoryDAO = new EmployeeclosedayhistoryMySqlDAO();
$employeeCloseDayHistoryEX = new EmployeeclosedayhistoryMySqlExtDAO();
//Employeeclosedaygroupstatus
$employeeCloseDayGroupStatus = new Employeeclosedaygroupstatu();
$employeeCloseDayGroupStatusDAO = new EmployeeclosedaygroupstatusMySqlDAO();
$employeeCloseDayGroupStatusEX = new EmployeeclosedaygroupstatusMySqlExtDAO();
//Employeeclosedaystatus
$Employeeclosedaystatus = new Employeeclosedaystatu();
$EmployeeclosedaystatusDAO = new EmployeeclosedaystatusMySqlDAO();
$EmployeeclosedaystatusEX = new EmployeeclosedaystatusMySqlExtDAO();
//Employeeclosedaysubgroupstatus
$Employeeclosedaysubgroupstatus = new Employeeclosedaysubgroupstatu();
$EmployeeclosedaysubgroupstatusDAO = new EmployeeclosedaysubgroupstatusMySqlDAO();
$EmployeeclosedaysubgroupstatusEX = new EmployeeclosedaysubgroupstatusMySqlExtDAO();
$youtubeLink = new YoutubeLink();
$youtubeLinkDAO = new YoutubeLinkMySqlDAO();
$youtubeLinkEX = new YoutubeLinkMySqlExtDAO();
//check and use the condetion that suite this action
$sysdate = date('Y-m-d H:i:s');
if (isset($_GET['testdate']) && !empty($_GET['testdate'])) {
$sysdate = $_GET['testdate'];
}
$day = date('Y-m-d', strtotime($sysdate));
$time = date("H:i:s", strtotime($sysdate));
if (empty($do) || $do == "add") {
//Transaction
$mytransactions = new Transaction();
try {
header('Access-Control-Allow-Origin: *');
header('Content-Type: application/json');
$empid = (int) filter_input(INPUT_GET, 'empid');
//with this step make sure any employee exist and not deleted will be in table
if ((int) $employeeCloseDayHistoryEX->dayAttendanceCount($day) == 0) {
$employeeCloseDayHistoryEX->beginDayAttendance($day, $sysdate, 1);
}
//set random name for the image, used time() for uniqueness
$filename = time() . '.jpg';
$filepath = '../upload/employeeAttendance/';
move_uploaded_file($_FILES['webcam']['tmp_name'], $filepath . $filename);
$img = imagecreatefromjpeg($filepath . $filename);
// (B) WRITE TEXT
$white = imagecolorallocate($img, 255, 0, 255);
$txt = $sysdate; //date('Y-m-d H:i:s'); //date('yy-m-d:h:m:s');
$font = "arial.ttf";
$xxxx = imagettftext($img, 24, 0, 5, 24, $white, $font, $txt);
// (C) OUTPUT IMAGE
// header('Content-type: image/jpeg');
// imagejpeg($img);
// imagedestroy($img);
// OR SAVE TO A FILE
// THE LAST PARAMETER IS THE QUALITY FROM 0 to 100
imagejpeg($img, $filepath . $filename, 100);
// Clear Memory
imagedestroy($img);
$employeeAttendance->empid = $empid;
$employeeAttendance->theImage = $filename;
$employeeAttendance->userid = 1; //(int) $_SESSION['userid'];
$employeeAttendance->sysdate = $sysdate; //date('Y-m-d H:i:s');
$employeeAttendance->fingerid = '';
$employeeAttendance->rfid = '';
$employeeAttendance->accessType = 0;
$employeeAttendance->syncToServer = 0;
$id = $employeeAttendanceDAO->insert($employeeAttendance);
///////endDay
$employee = $employeeDAO->load($empid);
$employeesubgroupid = $employee->employeesubgroupid;
$employeegroupid = $employee->employeegroupid;
$row = $employeeCloseDayHistoryEX->getEmployeeHistoryByQueryString(" and employeeid=$empid and day='" . $day . "' and del = 0");
if (count($row) == 0) { //employee is deleted or dont exist
} else {
//2- update dataof attendance or departure in employeeCloseDayHistory table
$employeeCloseDayHistory = $row[0];
if ($employeeCloseDayHistory->attendanceTime == "00:00:00") {
$employeeCloseDayHistory->attendanceTime = $time;
} else {
$employeeCloseDayHistory->departureTime = $time;
}
$employeeCloseDayHistory->isAbsent = 0;
$employeeCloseDayHistory->absentHasPermission = 0;
$employeeCloseDayHistory->absentDiscount = 0;
$employeeCloseDayHistory->userid = 1; // $_SESSION['userid'];
$employeeCloseDayHistory->sysdate = $sysdate; //date('Y-m-d H:i:s');
$employeeCloseDayHistory->del = 0;
$employeeCloseDayHistoryDAO->update($employeeCloseDayHistory);
}
//affect employee with late
//curlAddEmployeePersonal($empid, $day, $lateDiscount, 5);
//2-affect Employeeclose subgroup,group,day status
/* if ($employeesubgroupid > 0 && count($row) > 0) {
$empCount_subGroup = $employeeEX->getEmployeeCount(' and employeesubgroupid=' . $employeesubgroupid);
$closedEmpCount_subGroup = $employeeCloseDayHistoryEX->getClosedEmployeeCountForSubGroupInADay($day, $employeesubgroupid);
if ($empCount_subGroup == $closedEmpCount_subGroup) {
$Employeeclosedaysubgroupstatus->day = $day;
$Employeeclosedaysubgroupstatus->employeesubgroupid = $employeesubgroupid;
$Employeeclosedaysubgroupstatus->status = 1;
$Employeeclosedaysubgroupstatus->userid = 1; //$_SESSION['userid'];
$Employeeclosedaysubgroupstatus->sysdate = $sysdate;//date('Y-m-d H:i:s');
$Employeeclosedaysubgroupstatus->conditions = 0;
$EmployeeclosedaysubgroupstatusDAO->insert($Employeeclosedaysubgroupstatus);
}
//3-if group closed in that day mark it
$subGroupData = $employeeSubGroupDAO->load($employeesubgroupid);
$noOfSubGroupsInaGroup = count($employeeSubGroupEX->queryByEmployeegroupidEX($subGroupData->employeegroupid));
$noOfSubGroupsClosedInaGroupForADay = count($EmployeeclosedaysubgroupstatusEX->queryByEmployeegroupidAndDayGetDistinctSubGroupsClosed($subGroupData->employeegroupid, $day));
print_r($noOfSubGroupsInaGroup);
print_r($noOfSubGroupsClosedInaGroupForADay);
if ($noOfSubGroupsInaGroup == $noOfSubGroupsClosedInaGroupForADay) {
//mark as colsed
$employeeCloseDayGroupStatus->day = $day;
$employeeCloseDayGroupStatus->employeegroupid = $employeegroupid;
$employeeCloseDayGroupStatus->status = 1;
$employeeCloseDayGroupStatus->userid = 1; //$_SESSION['userid'];
$employeeCloseDayGroupStatus->sysdate = $sysdate;//date('Y-m-d H:i:s');
$employeeCloseDayGroupStatus->conditions = 0;
$employeeCloseDayGroupStatusDAO->insert($employeeCloseDayGroupStatus);
print_r('in there');
}
//4- affect day as closed if allgroups closed
$noOfGroups = $employeeGroupEX->queryAllEXCount();
$noOfGroupsClosedInADay = $employeeCloseDayGroupStatusEX->getNoOfGroupsClosedInADay($day);
if ($noOfGroups == $noOfGroupsClosedInADay) {
//mark as colsed
$Employeeclosedaystatus->day = $day;
$Employeeclosedaystatus->status = 1;
$Employeeclosedaystatus->userid = 1; //$_SESSION['userid'];
$Employeeclosedaystatus->sysdate = $sysdate;//date('Y-m-d H:i:s');
$Employeeclosedaystatus->conditions = 0;
$EmployeeclosedaystatusDAO->insert($Employeeclosedaystatus);
}
} */
// send data
if (count($row) == 0) { //employee is deleted or dont exist
$send_data = array("ststus" => 2, "msg" => "employee does not exist or not allowed", "image" => $hosturl_f . "/upload/employeeAttendance/" . $filename);
} else {
$send_data = array("ststus" => 1, "msg" => "sucess", "image" => $hosturl_f . "/upload/employeeAttendance/" . $filename);
}
$mytransactions->commit();
} catch (Exception $e) {
$mytransactions->rollback();
// send data
$send_data = array("ststus" => 0, "msg" => "error", "image" => '');
}
echo json_encode($send_data);
}
##another diff version of add used for access point like finger print , rfid
elseif ($do == "saveaccesslog") {
//Transaction
$mytransactions = new Transaction();
try {
header('Access-Control-Allow-Origin: *');
header('Content-Type: application/json');
$accessLogArr = json_decode($_POST['data_arr']);
$successIds = '';
foreach ($accessLogArr as $log) {
$sysdate = $log->sysdate;
if ($log->accessType == 0) { //finger
$empid = (int) $employeeEX->getEmpIdWithFingerId($log->fingerid);
} else { //rfid
$empid = (int) $employeeEX->getEmpIdWithRFID($log->rfid);
}
if ($empid > 0) {
$day = date('Y-m-d', strtotime($sysdate));
$time = date("H:i:s", strtotime($sysdate));
//with this step make sure any employee exist and not deleted will be in table
if ((int) $employeeCloseDayHistoryEX->dayAttendanceCount($day) == 0) {
$employeeCloseDayHistoryEX->beginDayAttendance($day, $sysdate, 1);
}
//set random name for the image, used time() for uniqueness
$filename = $log->theImage;
if ($filename != "") {
$filepath = '../upload/employeeAttendance/';
if (file_exists($filepath . $filename)) {
chmod($filepath . $filename, 0777);
unlink($filepath . $filename);
}
$success = file_put_contents($filepath . $filename, base64_decode($log->theImage_base64));
$img = imagecreatefrompng($filepath . $filename);
// (B) WRITE TEXT
$white = imagecolorallocate($img, 255, 0, 255);
$txt = $sysdate; //date('Y-m-d H:i:s'); //date('yy-m-d:h:m:s');
$font = "arial.ttf";
$xxxx = imagettftext($img, 24, 0, 5, 24, $white, $font, $txt);
// (C) OUTPUT IMAGE
// header('Content-type: image/jpeg');
// imagejpeg($img);
// imagedestroy($img);
// OR SAVE TO A FILE
// THE LAST PARAMETER IS THE QUALITY FROM 0 "normal" to 9 "compressed" default 9
imagepng($img, $filepath . $filename, 0);
// Clear Memory
imagedestroy($img);
}
$employeeAttendance->empid = $empid;
$employeeAttendance->theImage = $filename;
$employeeAttendance->userid = 1; //(int) $_SESSION['userid'];
$employeeAttendance->sysdate = $sysdate; //date('Y-m-d H:i:s');
$employeeAttendance->fingerid = $log->fingerid;
$employeeAttendance->rfid = $log->rfid;
$employeeAttendance->accessType = $log->accessType;
$employeeAttendance->syncToServer = 1;
$id = $employeeAttendanceDAO->insert($employeeAttendance);
$successIds .= $log->id . ",";
///////endDay
$employee = $employeeDAO->load($empid);
$employeesubgroupid = $employee->employeesubgroupid;
$employeegroupid = $employee->employeegroupid;
$row = $employeeCloseDayHistoryEX->getEmployeeHistoryByQueryString(" and employeeid=$empid and day='" . $day . "' and del = 0");
if (count($row) == 0) { //employee is deleted or dont exist
} else {
//2- update dataof attendance or departure in employeeCloseDayHistory table
$employeeCloseDayHistory = $row[0];
if ($employeeCloseDayHistory->attendanceTime == "00:00:00") {
$employeeCloseDayHistory->attendanceTime = $time;
} else {
$employeeCloseDayHistory->departureTime = $time;
}
$employeeCloseDayHistory->isAbsent = 0;
$employeeCloseDayHistory->absentHasPermission = 0;
$employeeCloseDayHistory->absentDiscount = 0;
$employeeCloseDayHistory->userid = 1; // $_SESSION['userid'];
$employeeCloseDayHistory->sysdate = $sysdate; //date('Y-m-d H:i:s');
$employeeCloseDayHistory->del = 0;
$employeeCloseDayHistoryDAO->update($employeeCloseDayHistory);
}
}
}
$sucessIds = rtrim($sucessIds, ',');
$send_data = $successIds;
$mytransactions->commit();
} catch (Exception $e) {
$mytransactions->rollback();
// send data
$send_data = -1;
}
echo $send_data;
} elseif ($do == "attendanceReport") {
$empid = (int) filter_input(INPUT_POST, 'empid');
$from = filter_input(INPUT_POST, 'from');
$to = filter_input(INPUT_POST, 'to');
if ($_SESSION['branchId'] > 0)
$queryStringAll .= ' AND branchid = ' . $_SESSION['branchId'];
// $employees = $employeeDAO->queryByConditions(0);
$employees = $employeeEX->queryAllemployeebycondation(0, $queryStringAll);
$smarty->assign('employees', $employees);
$youtubes = $youtubeLinkDAO->queryAll();
$smarty->assign("youtubes", $youtubes);
$queryString = '';
if ($_SESSION['branchId'] > 0)
$queryString .= ' AND branchid = ' . $_SESSION['branchId'];
if ($empid > 0) {
$queryString .= " and empid = $empid ";
}
if ($from != '') {
$queryString .= " and date(sysdate) >= '" . $from . "' ";
}
if ($to != '') {
$queryString .= " and date(sysdate) <= '" . $to . "' ";
}
if ($queryString == '') {
$queryString = " and date(sysdate) = '" . date('Y-m-d') . "' ";
}
$employeeAttendanceData = $employeeAttendanceEX->queryByQueryString($queryString);
$smarty->assign('employeeAttendanceData', $employeeAttendanceData);
$smarty->display("employeeAttendanceView/show.html");
}
//here the global templates
if (!in_array($do, $ajaxDoArr)) {
$smarty->display("footer.html");
}