Refactor project structure
This commit is contained in:
57
core/src/TimeSheets/Common/Model/EmployeeTimeEntry.php
Normal file
57
core/src/TimeSheets/Common/Model/EmployeeTimeEntry.php
Normal file
@@ -0,0 +1,57 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: Thilina
|
||||
* Date: 8/20/17
|
||||
* Time: 9:18 PM
|
||||
*/
|
||||
|
||||
namespace TimeSheets\Common\Model;
|
||||
|
||||
use Attendance\Common\Model\Attendance;
|
||||
use Classes\IceResponse;
|
||||
use Classes\SettingsManager;
|
||||
use Model\BaseModel;
|
||||
|
||||
class EmployeeTimeEntry extends BaseModel
|
||||
{
|
||||
public $table = 'EmployeeTimeEntry';
|
||||
|
||||
public function getAdminAccess()
|
||||
{
|
||||
return array("get","element","save","delete");
|
||||
}
|
||||
|
||||
public function getManagerAccess()
|
||||
{
|
||||
return array("get","element","save","delete");
|
||||
}
|
||||
|
||||
public function getUserAccess()
|
||||
{
|
||||
return array("get");
|
||||
}
|
||||
|
||||
public function getUserOnlyMeAccess()
|
||||
{
|
||||
return array("element","save","delete");
|
||||
}
|
||||
|
||||
public function validateSave($obj)
|
||||
{
|
||||
if (SettingsManager::getInstance()->getSetting("Attendance: Time-sheet Cross Check") == "1") {
|
||||
$attendance = new Attendance();
|
||||
$list = $attendance->Find(
|
||||
"employee = ? and in_time <= ? and out_time >= ?",
|
||||
array($obj->employee,$obj->date_start,$obj->date_end)
|
||||
);
|
||||
if (empty($list) || count($list) == 0) {
|
||||
return new IceResponse(
|
||||
IceResponse::ERROR,
|
||||
"The time entry can not be added since you have not marked attendance for selected period"
|
||||
);
|
||||
}
|
||||
}
|
||||
return new IceResponse(IceResponse::SUCCESS, "");
|
||||
}
|
||||
}
|
||||
91
core/src/TimeSheets/Common/Model/EmployeeTimeSheet.php
Normal file
91
core/src/TimeSheets/Common/Model/EmployeeTimeSheet.php
Normal file
@@ -0,0 +1,91 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: Thilina
|
||||
* Date: 8/20/17
|
||||
* Time: 9:17 PM
|
||||
*/
|
||||
|
||||
namespace TimeSheets\Common\Model;
|
||||
|
||||
use Model\BaseModel;
|
||||
use Utils\CalendarTools;
|
||||
|
||||
class EmployeeTimeSheet extends BaseModel
|
||||
{
|
||||
public $table = 'EmployeeTimeSheets';
|
||||
|
||||
public function getAdminAccess()
|
||||
{
|
||||
return array("get","element","save","delete");
|
||||
}
|
||||
|
||||
public function getManagerAccess()
|
||||
{
|
||||
return array("get","element","save","delete");
|
||||
}
|
||||
|
||||
public function getUserAccess()
|
||||
{
|
||||
return array("get","element");
|
||||
}
|
||||
|
||||
public function getUserOnlyMeAccess()
|
||||
{
|
||||
return array("element","save","delete");
|
||||
}
|
||||
|
||||
public function getTotalTimeMinutes()
|
||||
{
|
||||
|
||||
$start = $this->date_start . " 00:00:00";
|
||||
$end = $this->date_end . " 23:59:59";
|
||||
|
||||
$timeEntry = new EmployeeTimeEntry();
|
||||
$list = $timeEntry->Find(
|
||||
"employee = ? and ((date_start >= ? and date_start <= ?) or (date_end >= ? and date_end <= ?))",
|
||||
array($this->employee, $start, $end, $start, $end)
|
||||
);
|
||||
|
||||
$seconds = 0;
|
||||
|
||||
foreach ($list as $entry) {
|
||||
$secondsTemp = (strtotime($entry->date_end) - strtotime($entry->date_start));
|
||||
if ($secondsTemp < 0) {
|
||||
$secondsTemp = 0;
|
||||
}
|
||||
|
||||
$seconds += $secondsTemp;
|
||||
}
|
||||
|
||||
$totMinutes = round($seconds / 60);
|
||||
|
||||
return $totMinutes;
|
||||
}
|
||||
|
||||
public function getTotalTime()
|
||||
{
|
||||
$totMinutes = $this->getTotalTimeMinutes();
|
||||
$minutes = $totMinutes % 60;
|
||||
$hours = ($totMinutes - $minutes) / 60;
|
||||
|
||||
return CalendarTools::addLeadingZero($hours)
|
||||
. ":" . CalendarTools::addLeadingZero($minutes);
|
||||
}
|
||||
|
||||
public function postProcessGetData($entry)
|
||||
{
|
||||
$entry->total_time = $this->getTotalTime();
|
||||
return $entry;
|
||||
}
|
||||
|
||||
public function postProcessGetElement($entry)
|
||||
{
|
||||
$entry->days = [];
|
||||
$days = CalendarTools::getDaysBetweenDates($entry->date_start, $entry->date_end);
|
||||
foreach ($days as $dayObj) {
|
||||
$entry->days[] = [$dayObj->format('Y-m-d'), $dayObj->format("(D) d M")];
|
||||
}
|
||||
return $entry;
|
||||
}
|
||||
}
|
||||
16
core/src/TimeSheets/Common/Model/QTDays.php
Normal file
16
core/src/TimeSheets/Common/Model/QTDays.php
Normal file
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: Thilina
|
||||
* Date: 8/20/17
|
||||
* Time: 9:19 PM
|
||||
*/
|
||||
|
||||
namespace TimeSheets\Common\Model;
|
||||
|
||||
use Model\BaseModel;
|
||||
|
||||
class QTDays extends BaseModel
|
||||
{
|
||||
|
||||
}
|
||||
447
core/src/TimeSheets/User/Api/TimeSheetsActionManager.php
Normal file
447
core/src/TimeSheets/User/Api/TimeSheetsActionManager.php
Normal file
@@ -0,0 +1,447 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: Thilina
|
||||
* Date: 8/20/17
|
||||
* Time: 9:24 PM
|
||||
*/
|
||||
|
||||
namespace TimeSheets\User\Api;
|
||||
|
||||
use Classes\BaseService;
|
||||
use Classes\IceConstants;
|
||||
use Classes\IceResponse;
|
||||
use Classes\SettingsManager;
|
||||
use Classes\SubActionManager;
|
||||
use Employees\Common\Model\Employee;
|
||||
use Leaves\Common\Model\HoliDay;
|
||||
use Metadata\Common\Model\Country;
|
||||
use Payroll\Common\Model\PayrollCalculations;
|
||||
use Projects\Common\Model\Project;
|
||||
use TimeSheets\Common\Model\EmployeeTimeEntry;
|
||||
use TimeSheets\Common\Model\EmployeeTimeSheet;
|
||||
use Utils\CalendarTools;
|
||||
use Utils\LogManager;
|
||||
|
||||
class TimeSheetsActionManager extends SubActionManager
|
||||
{
|
||||
public function getTimeEntries($req)
|
||||
{
|
||||
$employee = $this->baseService->getElement('Employee', $this->getCurrentProfileId(), null, true);
|
||||
$timeSheetEntry = new EmployeeTimeEntry();
|
||||
$list = $timeSheetEntry->Find("timesheet = ? order by date_start", array($req->id));
|
||||
$mappingStr = $req->sm;
|
||||
$map = json_decode($mappingStr);
|
||||
if (!$list) {
|
||||
LogManager::getInstance()->info($timeSheetEntry->ErrorMsg());
|
||||
}
|
||||
|
||||
if (!empty($mappingStr)) {
|
||||
$list = $this->baseService->populateMapping($list, $map);
|
||||
}
|
||||
return new IceResponse(IceResponse::SUCCESS, $list);
|
||||
}
|
||||
|
||||
public function changeTimeSheetStatus($req)
|
||||
{
|
||||
$employee = $this->baseService->getElement('Employee', $this->getCurrentProfileId(), null, true);
|
||||
|
||||
$subordinate = new Employee();
|
||||
$subordinates = $subordinate->Find("supervisor = ?", array($employee->id));
|
||||
|
||||
$subordinatesIds = array();
|
||||
foreach ($subordinates as $sub) {
|
||||
$subordinatesIds[] = $sub->id;
|
||||
}
|
||||
|
||||
$timeSheet = new EmployeeTimeSheet();
|
||||
$timeSheet->Load("id = ?", array($req->id));
|
||||
if ($timeSheet->id != $req->id) {
|
||||
return new IceResponse(IceResponse::ERROR, "Timesheet not found");
|
||||
}
|
||||
|
||||
if ($req->status == 'Submitted' && $employee->id == $timeSheet->employee) {
|
||||
} elseif (!in_array($timeSheet->employee, $subordinatesIds) && $this->user->user_level != 'Admin') {
|
||||
return new IceResponse(IceResponse::ERROR, "This Timesheet does not belong to any of your subordinates");
|
||||
}
|
||||
|
||||
$oldStatus = $timeSheet->status;
|
||||
$timeSheet->status = $req->status;
|
||||
|
||||
//Auto approve admin timesheets
|
||||
if ($req->status == 'Submitted' && BaseService::getInstance()->getCurrentUser()->user_level == "Admin") {
|
||||
$timeSheet->status = 'Approved';
|
||||
}
|
||||
|
||||
if ($oldStatus == $req->status) {
|
||||
return new IceResponse(IceResponse::SUCCESS, "");
|
||||
}
|
||||
|
||||
$ok = $timeSheet->Save();
|
||||
if (!$ok) {
|
||||
LogManager::getInstance()->info($timeSheet->ErrorMsg());
|
||||
}
|
||||
|
||||
$timeSheetEmployee = $this->baseService->getElement('Employee', $timeSheet->employee, null, true);
|
||||
|
||||
$this->baseService->audit(
|
||||
IceConstants::AUDIT_ACTION,
|
||||
"Timesheet [".$timeSheetEmployee->first_name." ".$timeSheetEmployee->last_name
|
||||
." - ".date("M d, Y (l)", strtotime($timeSheet->date_start))." to "
|
||||
.date("M d, Y (l)", strtotime($timeSheet->date_end))."] status changed from:"
|
||||
.$oldStatus." to:".$req->status
|
||||
);
|
||||
|
||||
if ($timeSheet->status == "Submitted" && $employee->id == $timeSheet->employee) {
|
||||
$notificationMsg = $employee->first_name." ".$employee->last_name
|
||||
." submitted timesheet from ".date("M d, Y (l)", strtotime($timeSheet->date_start))
|
||||
." to ".date("M d, Y (l)", strtotime($timeSheet->date_end));
|
||||
$this->baseService->notificationManager->addNotification(
|
||||
$employee->supervisor,
|
||||
$notificationMsg,
|
||||
'{"type":"url","url":"g=modules&n=time_sheets&m=module_Time_Management#tabSubEmployeeTimeSheetAll"}',
|
||||
IceConstants::NOTIFICATION_TIMESHEET
|
||||
);
|
||||
} elseif ($timeSheet->status == "Approved" || $timeSheet->status == "Rejected") {
|
||||
$notificationMsg = $employee->first_name." ".$employee->last_name." ".$timeSheet->status
|
||||
." timesheet from ".date("M d, Y (l)", strtotime($timeSheet->date_start))." to "
|
||||
.date("M d, Y (l)", strtotime($timeSheet->date_end));
|
||||
$this->baseService->notificationManager->addNotification(
|
||||
$timeSheet->employee,
|
||||
$notificationMsg,
|
||||
'{"type":"url","url":"g=modules&n=time_sheets&m=module_Time_Management#tabEmployeeTimeSheetApproved"}',
|
||||
IceConstants::NOTIFICATION_TIMESHEET
|
||||
);
|
||||
}
|
||||
|
||||
return new IceResponse(IceResponse::SUCCESS, "");
|
||||
}
|
||||
|
||||
public function createPreviousTimesheet($req)
|
||||
{
|
||||
$employee = $this->baseService->getElement('Employee', $this->getCurrentProfileId(), null, true);
|
||||
|
||||
$timeSheet = new EmployeeTimeSheet();
|
||||
$timeSheet->Load("id = ?", array($req->id));
|
||||
if ($timeSheet->id != $req->id) {
|
||||
return new IceResponse(IceResponse::ERROR, "Timesheet not found");
|
||||
}
|
||||
|
||||
if ($timeSheet->employee != $employee->id) {
|
||||
return new IceResponse(IceResponse::ERROR, "You don't have permissions to add this Timesheet");
|
||||
}
|
||||
|
||||
$end = date("Y-m-d", strtotime("last Saturday", strtotime($timeSheet->date_start)));
|
||||
$start = date("Y-m-d", strtotime("last Sunday", strtotime($end)));
|
||||
|
||||
$tempTimeSheet = new EmployeeTimeSheet();
|
||||
$tempTimeSheet->Load("employee = ? and date_start = ?", array($employee->id, $start));
|
||||
if ($employee->id == $tempTimeSheet->employee) {
|
||||
return new IceResponse(IceResponse::ERROR, "Timesheet already exists");
|
||||
}
|
||||
|
||||
$newTimeSheet = new EmployeeTimeSheet();
|
||||
$newTimeSheet->employee = $employee->id;
|
||||
$newTimeSheet->date_start = $start;
|
||||
$newTimeSheet->date_end = $end;
|
||||
$newTimeSheet->status = "Pending";
|
||||
$ok = $newTimeSheet->Save();
|
||||
if (!$ok) {
|
||||
LogManager::getInstance()->info("Error creating time sheet : ".$newTimeSheet->ErrorMsg());
|
||||
return new IceResponse(IceResponse::ERROR, "Error creating Timesheet");
|
||||
}
|
||||
|
||||
return new IceResponse(IceResponse::SUCCESS, "");
|
||||
}
|
||||
|
||||
public function getSubEmployeeTimeSheets($req)
|
||||
{
|
||||
|
||||
$employee = $this->baseService->getElement('Employee', $this->getCurrentProfileId(), null, true);
|
||||
|
||||
$subordinate = new Employee();
|
||||
$subordinates = $subordinate->Find("supervisor = ?", array($employee->id));
|
||||
|
||||
$subordinatesIds = "";
|
||||
foreach ($subordinates as $sub) {
|
||||
if ($subordinatesIds != "") {
|
||||
$subordinatesIds.=",";
|
||||
}
|
||||
$subordinatesIds.=$sub->id;
|
||||
}
|
||||
$subordinatesIds.="";
|
||||
|
||||
$mappingStr = $req->sm;
|
||||
$map = json_decode($mappingStr);
|
||||
$timeSheet = new EmployeeTimeSheet();
|
||||
$list = $timeSheet->Find("employee in (".$subordinatesIds.")", array());
|
||||
if (!$list) {
|
||||
LogManager::getInstance()->info($timeSheet->ErrorMsg());
|
||||
}
|
||||
if (!empty($mappingStr)) {
|
||||
$list = $this->baseService->populateMapping($list, $map);
|
||||
}
|
||||
|
||||
return new IceResponse(IceResponse::SUCCESS, $list);
|
||||
}
|
||||
|
||||
public function getEmployeeTimeEntries($req)
|
||||
{
|
||||
|
||||
$req->start = strtotime($req->start);
|
||||
$req->end = strtotime($req->end);
|
||||
|
||||
$employee = $this->baseService->getElement('Employee', $req->e, null, true);
|
||||
|
||||
$currEmployee = $employee->id;
|
||||
$timeEntry = new EmployeeTimeEntry();
|
||||
$startDate = date("Y-m-d H:i:s", $req->start);
|
||||
$endDate = date("Y-m-d H:i:s", $req->end);
|
||||
|
||||
$list = $timeEntry->Find(
|
||||
"employee = ? and ((date_start >= ? and date_start <= ? ) or (date_end >= ? and date_end <= ?))",
|
||||
array($currEmployee, $startDate,$endDate,$startDate,$endDate)
|
||||
);
|
||||
|
||||
if (!$list) {
|
||||
LogManager::getInstance()->info($timeEntry->ErrorMsg());
|
||||
}
|
||||
|
||||
$map = json_decode('{"employee":["Employee","id","first_name+last_name"]}');
|
||||
$list = $this->baseService->populateMapping($list, $map);
|
||||
|
||||
$data = array();
|
||||
foreach ($list as $leave) {
|
||||
$data[] = $this->workScheduleToEvent($leave);
|
||||
}
|
||||
|
||||
$holiday = new HoliDay();
|
||||
$holidays = $holiday->Find("1=1", array());
|
||||
|
||||
foreach ($holidays as $holiday) {
|
||||
$data[] = $this->holidayToEvent($holiday);
|
||||
}
|
||||
|
||||
echo json_encode($data);
|
||||
exit();
|
||||
}
|
||||
|
||||
public function workScheduleToEvent($schedule)
|
||||
{
|
||||
$event = array();
|
||||
$event['id'] = $schedule->id;
|
||||
|
||||
$event['start'] = $schedule->date_start."+00:00";
|
||||
$event['end'] = $schedule->date_end."+00:00";
|
||||
|
||||
$diff = CalendarTools::getTimeDiffInHours($schedule->date_start, $schedule->date_end);
|
||||
|
||||
if (!empty($schedule->project)) {
|
||||
$project = new Project();
|
||||
$project->Load("id = ?", array($schedule->project));
|
||||
$event['title'] = $diff . " h - ".$project->name;
|
||||
} else {
|
||||
$event['title'] = $diff . ' h';
|
||||
}
|
||||
|
||||
$eventBackgroundColor = "#FFF";
|
||||
|
||||
$event['color'] = $eventBackgroundColor;
|
||||
$event['backgroundColor'] = $eventBackgroundColor;
|
||||
$event['textColor'] = "#0a69b7";
|
||||
|
||||
$schedule = BaseService::getInstance()->cleanUpAdoDB($schedule);
|
||||
unset($schedule->keysToIgnore);
|
||||
$event['event'] = json_encode($schedule);
|
||||
|
||||
return $event;
|
||||
}
|
||||
|
||||
public function holidayToEvent($holiday)
|
||||
{
|
||||
$event = array();
|
||||
$event['id'] = "hd_".$holiday->id;
|
||||
if ($holiday->status == "Full Day") {
|
||||
$event['title'] = $holiday->name;
|
||||
} else {
|
||||
$event['title'] = $holiday->name." (".$holiday->status.")";
|
||||
}
|
||||
|
||||
if (!empty($holiday->country)) {
|
||||
$country = new Country();
|
||||
$country->Load("id = ?", array($holiday->country));
|
||||
$event['title'] .=" / ".$country->name." only";
|
||||
}
|
||||
|
||||
$event['start'] = $holiday->dateh;
|
||||
$event['end'] = $holiday->dateh;
|
||||
|
||||
$eventBackgroundColor = "#3c8dbc";
|
||||
|
||||
$event['color'] = $eventBackgroundColor;
|
||||
$event['backgroundColor'] = $eventBackgroundColor;
|
||||
$event['textColor'] = "#FFF";
|
||||
|
||||
return $event;
|
||||
}
|
||||
|
||||
public function getAllData($req)
|
||||
{
|
||||
|
||||
$timeSheet = new EmployeeTimeSheet();
|
||||
$timeSheet->Load("id = ?", array($req->currentId));
|
||||
|
||||
$cal = new PayrollCalculations();
|
||||
|
||||
$rowTable = BaseService::getInstance()->getFullQualifiedModelClassName($req->rowTable);
|
||||
$columnTable = BaseService::getInstance()->getFullQualifiedModelClassName($req->columnTable);
|
||||
$valueTable = $req->valueTable;
|
||||
$save = $req->save;
|
||||
|
||||
$project = new $rowTable();
|
||||
|
||||
if (SettingsManager::getInstance()->getSetting("Projects: Make All Projects Available to Employees") == "1") {
|
||||
$projectList = $project->Find("1 = 1");
|
||||
} else {
|
||||
$projectList = $project->Find(
|
||||
"id in (select project from EmployeeProjects where employee = ?)",
|
||||
array(BaseService::getInstance()->getCurrentProfileId())
|
||||
);
|
||||
}
|
||||
|
||||
$projects = array();
|
||||
foreach ($projectList as $project) {
|
||||
$p = new \stdClass();
|
||||
$p->id = $project->id;
|
||||
$p->name = $project->name;
|
||||
$projects[] = $p;
|
||||
}
|
||||
|
||||
//Add total
|
||||
$p = new \stdClass();
|
||||
$p->id = -1;
|
||||
$p->name = "Total";
|
||||
$projects[] = $p;
|
||||
|
||||
$column = new $columnTable();
|
||||
$columns = [];
|
||||
$days = CalendarTools::getDaysBetweenDates($timeSheet->date_start, $timeSheet->date_end);
|
||||
foreach ($days as $dayObj) {
|
||||
$day = new \stdClass();
|
||||
$day->id = $dayObj->format('Y-m-d');
|
||||
$day->name = $dayObj->format("(D) d M");
|
||||
if ($timeSheet->status == 'Approved') {
|
||||
$day->editable = 'No';
|
||||
} else {
|
||||
$day->editable = 'Yes';
|
||||
}
|
||||
$day->default_value = '0.00';
|
||||
$columns[] = $day;
|
||||
}
|
||||
|
||||
$timeEntry = new EmployeeTimeEntry();
|
||||
$timeEntries = $timeEntry->Find("timesheet = ?", array($timeSheet->id));
|
||||
|
||||
$dateTotals = array();
|
||||
|
||||
//Build value map
|
||||
$valueMap = array();
|
||||
foreach ($timeEntries as $val) {
|
||||
$date = explode(" ", $val->date_start)[0];
|
||||
if (!isset($valueMap[$val->project])) {
|
||||
$valueMap[$val->project] = array();
|
||||
}
|
||||
if (!isset($valueMap[$val->project][$date])) {
|
||||
$val->date = $date;
|
||||
$val->amount = floatval(CalendarTools::getTimeDiffInHours($val->date_start, $val->date_end));
|
||||
$valueMap[$val->project][$date] = $val;
|
||||
|
||||
if (!isset($dateTotals[$date])) {
|
||||
$dval = new \stdClass();
|
||||
$dval->project = -1;
|
||||
$dval->date = $date;
|
||||
$dval->amount = 0;
|
||||
$dateTotals[$date] = $dval;
|
||||
}
|
||||
|
||||
$dateTotals[$date]->amount = $dateTotals[$date]->amount + floatval($val->amount);
|
||||
}
|
||||
}
|
||||
|
||||
$values = array();
|
||||
foreach ($valueMap as $key => $val) {
|
||||
$values = array_merge($values, array_values($val));
|
||||
}
|
||||
|
||||
if ($save == "1") {
|
||||
foreach ($values as $value) {
|
||||
if (empty($value->id)) {
|
||||
$value->Save();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$values = array_merge($values, array_values($dateTotals));
|
||||
|
||||
return new IceResponse(IceResponse::SUCCESS, array($projects,$columns,$values));
|
||||
}
|
||||
|
||||
public function updateAllData($req)
|
||||
{
|
||||
|
||||
$resp = $this->updateData($req);
|
||||
|
||||
if ($resp->getStatus() == IceResponse::SUCCESS) {
|
||||
$timesheet = new EmployeeTimeSheet();
|
||||
$timesheet->Load("id = ?", array($req->currentId));
|
||||
|
||||
$req->id = $timesheet->id;
|
||||
$req->status = 'Submitted';
|
||||
$this->changeTimeSheetStatus($req);
|
||||
}
|
||||
return $resp;
|
||||
}
|
||||
|
||||
public function updateData($req)
|
||||
{
|
||||
$timesheet = new EmployeeTimeSheet();
|
||||
$timesheet->Load("id = ?", array($req->currentId));
|
||||
|
||||
if (empty($timesheet->id)) {
|
||||
return new IceResponse(IceResponse::ERROR, true);
|
||||
}
|
||||
|
||||
if ($timesheet->status == 'Submitted') {
|
||||
return new IceResponse(IceResponse::ERROR, true);
|
||||
}
|
||||
foreach ($req as $key => $val) {
|
||||
if (!is_array($val) || $val[1].'' == '-1') {
|
||||
continue;
|
||||
}
|
||||
$data = new EmployeeTimeEntry();
|
||||
$data->Load(
|
||||
"project = ? and timesheet = ? and date(date_start) = ?",
|
||||
array($val[1],$req->currentId, $val[0])
|
||||
);
|
||||
if (empty($data->id)) {
|
||||
$data->project = $val[1];
|
||||
$data->employee = $timesheet->employee;
|
||||
$data->details = '';
|
||||
$data->created = date('Y-m-d H:i:s');
|
||||
$data->status = 'Active';
|
||||
$data->timesheet = $req->currentId;
|
||||
}
|
||||
$time = floatval($val[2]) * 60 * 60;
|
||||
$data->date_start = $val[0].' 00:00:00';
|
||||
$data->time_start = '00:00:00';
|
||||
$data->date_end = date('Y-m-d H:i:s', strtotime($data->date_start) + $time);
|
||||
$data->time_end = date('H:i:s', strtotime($data->date_end));
|
||||
|
||||
$ok = $data->Save();
|
||||
if (!$ok) {
|
||||
LogManager::getInstance()->error("Error saving payroll data:".$data->ErrorMsg());
|
||||
}
|
||||
}
|
||||
return new IceResponse(IceResponse::SUCCESS, true);
|
||||
}
|
||||
}
|
||||
52
core/src/TimeSheets/User/Api/TimeSheetsInitialize.php
Normal file
52
core/src/TimeSheets/User/Api/TimeSheetsInitialize.php
Normal file
@@ -0,0 +1,52 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: Thilina
|
||||
* Date: 8/20/17
|
||||
* Time: 9:21 PM
|
||||
*/
|
||||
|
||||
namespace TimeSheets\User\Api;
|
||||
|
||||
use Classes\AbstractInitialize;
|
||||
use TimeSheets\Common\Model\EmployeeTimeSheet;
|
||||
use Utils\LogManager;
|
||||
|
||||
class TimeSheetsInitialize extends AbstractInitialize
|
||||
{
|
||||
|
||||
public function init()
|
||||
{
|
||||
//Add Employee time sheets if it is not already created for current week
|
||||
$empId = $this->getCurrentProfileId();
|
||||
if (date('w', strtotime("now")) == 0) {
|
||||
$start = date("Y-m-d", strtotime("now"));
|
||||
} else {
|
||||
$start = date("Y-m-d", strtotime("last Sunday"));
|
||||
}
|
||||
|
||||
if (date('w', strtotime("now")) == 6) {
|
||||
$end = date("Y-m-d", strtotime("now"));
|
||||
} else {
|
||||
$end = date("Y-m-d", strtotime("next Saturday"));
|
||||
}
|
||||
|
||||
$timeSheet = new EmployeeTimeSheet();
|
||||
$timeSheet->Load("employee = ? and date_start = ? and date_end = ?", array($empId,$start,$end));
|
||||
if ($timeSheet->date_start == $start && $timeSheet->employee == $empId) {
|
||||
} else {
|
||||
if (!empty($empId)) {
|
||||
$timeSheet->employee = $empId;
|
||||
$timeSheet->date_start = $start;
|
||||
$timeSheet->date_end = $end;
|
||||
$timeSheet->status = "Pending";
|
||||
$ok = $timeSheet->Save();
|
||||
if (!$ok) {
|
||||
LogManager::getInstance()->info("Error creating time sheet : ".$timeSheet->ErrorMsg());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//Generate missing timesheets
|
||||
}
|
||||
}
|
||||
92
core/src/TimeSheets/User/Api/TimeSheetsModulesManager.php
Normal file
92
core/src/TimeSheets/User/Api/TimeSheetsModulesManager.php
Normal file
@@ -0,0 +1,92 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: Thilina
|
||||
* Date: 8/20/17
|
||||
* Time: 9:20 PM
|
||||
*/
|
||||
|
||||
namespace TimeSheets\User\Api;
|
||||
|
||||
use Classes\AbstractModuleManager;
|
||||
use Classes\BaseService;
|
||||
use Classes\IceResponse;
|
||||
use TimeSheets\Common\Model\EmployeeTimeEntry;
|
||||
use TimeSheets\Common\Model\EmployeeTimeSheet;
|
||||
|
||||
class TimeSheetsModulesManager extends AbstractModuleManager
|
||||
{
|
||||
|
||||
public function initializeUserClasses()
|
||||
{
|
||||
$this->addUserClass("EmployeeTimeSheet");
|
||||
$this->addUserClass("EmployeeTimeEntry");
|
||||
}
|
||||
|
||||
public function initializeFieldMappings()
|
||||
{
|
||||
}
|
||||
|
||||
public function initializeDatabaseErrorMappings()
|
||||
{
|
||||
}
|
||||
|
||||
public function setupModuleClassDefinitions()
|
||||
{
|
||||
|
||||
$this->addModelClass('EmployeeTimeSheet');
|
||||
$this->addModelClass('EmployeeTimeEntry');
|
||||
$this->addModelClass('QTDays');
|
||||
}
|
||||
|
||||
public function getInitializer()
|
||||
{
|
||||
return new TimeSheetsInitialize();
|
||||
}
|
||||
|
||||
public function getDashboardItemData()
|
||||
{
|
||||
$data = array();
|
||||
$data['timeSheetHoursWorked'] = $this->getLastTimeSheetHours()->getData();
|
||||
return $data;
|
||||
}
|
||||
|
||||
private function getLastTimeSheetHours()
|
||||
{
|
||||
$timeSheet = new EmployeeTimeSheet();
|
||||
$timeSheet->Load(
|
||||
"employee = ? order by date_end desc limit 1",
|
||||
array(BaseService::getInstance()->getCurrentProfileId())
|
||||
);
|
||||
|
||||
if (empty($timeSheet->employee)) {
|
||||
return new IceResponse(IceResponse::SUCCESS, "0:00");
|
||||
}
|
||||
|
||||
$timeSheetEntry = new EmployeeTimeEntry();
|
||||
$list = $timeSheetEntry->Find("timesheet = ?", array($timeSheet->id));
|
||||
|
||||
$seconds = 0;
|
||||
foreach ($list as $entry) {
|
||||
$seconds += (strtotime($entry->date_end) - strtotime($entry->date_start));
|
||||
}
|
||||
|
||||
$minutes = (int)($seconds/60);
|
||||
$rem = $minutes % 60;
|
||||
$hours = ($minutes - $rem)/60;
|
||||
if ($rem < 10) {
|
||||
$rem = "0".$rem;
|
||||
}
|
||||
return new IceResponse(IceResponse::SUCCESS, $hours.":".$rem);
|
||||
}
|
||||
|
||||
public function initCalculationHooks()
|
||||
{
|
||||
$this->addCalculationHook(
|
||||
'TimeSheetsPayrollUtils_getApprovedTimeInTimeSheets',
|
||||
'Total Hours from Approved Time Sheets',
|
||||
TimeSheetsPayrollUtils::class,
|
||||
'getApprovedTimeInTimeSheets'
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user