Attendance and Employee API

This commit is contained in:
gamonoid
2017-11-25 20:16:06 +01:00
parent 17f9d23e31
commit 732a2d7aa3
16 changed files with 560 additions and 82 deletions

12
app/api/.htaccess Normal file
View File

@@ -0,0 +1,12 @@
<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On
# Explicitly disable rewriting for front controllers
RewriteRule ^index.php - [L]
RewriteCond %{REQUEST_FILENAME} !-f
# Change below before deploying to production
RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>

3
app/api/index.php Normal file
View File

@@ -0,0 +1,3 @@
<?php
include __DIR__.'/../config.php';
include (APP_BASE_PATH.'rest.php');

View File

@@ -27,6 +27,21 @@ include APP_BASE_PATH.'header.php';
include APP_BASE_PATH.'modulejslibs.inc.php';
$fieldNameMap = \Classes\BaseService::getInstance()->getFieldNameMappings("Employee");
$customFields = \Classes\BaseService::getInstance()->getCustomFields("Employee");
if (\Classes\SettingsManager::getInstance()->getSetting("Api: REST Api Enabled") == "1") {
$user = \Classes\BaseService::getInstance()->getCurrentUser();
if (empty($user)) {
return;
}
$dbUser = new \Users\Common\Model\User();
$dbUser->Load("id = ?", array($user->id));
$resp = \Classes\RestApiManager::getInstance()->getAccessTokenForUser($dbUser);
if ($resp->getStatus() != \Classes\IceResponse::SUCCESS) {
\Utils\LogManager::getInstance()->error(
"Error occurred while creating REST Api access token for ".$user->username
);
}
}
?>
<script type="text/javascript" src="<?=BASE_URL.'js/d3js/d3.js?v='.$jsVersion?>"></script>
<script type="text/javascript" src="<?=BASE_URL.'js/d3js/d3.layout.js?v='.$jsVersion?>"></script>
@@ -56,6 +71,9 @@ path.link {
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
<li class="active"><a id="tabEmployee" href="#tabPageEmployee"><?=t('My Details')?></a></li>
<li><a id="tabCompanyGraph" href="#tabPageCompanyGraph"><?=t('Company')?></a></li>
<?php if (\Classes\SettingsManager::getInstance()->getSetting("Api: REST Api Enabled") == "1") { ?>
<li><a id="tabApiAccess" href="#tabPageApiAccess"><?=t('Api Access')?></a></li>
<?php } ?>
</ul>
<div class="tab-content">
@@ -70,6 +88,17 @@ path.link {
<div class="tab-pane reviewBlock" id="tabPageCompanyGraph" style="overflow-x: scroll;">
</div>
<?php if (\Classes\SettingsManager::getInstance()->getSetting("Api: REST Api Enabled") == "1") { ?>
<div class="tab-pane reviewBlock" id="tabPageApiAccess" style="overflow-x: scroll;">
<div class="row">
<div class="panel panel-default" style="width:97.5%;">
<div class="panel-heading"><h4>Api Access Token</h4></div>
<div class="panel-body">
<?=$resp->getData()?>
</div>
</div>
</div>
<?php } ?>
</div>
</div>
@@ -79,6 +108,7 @@ modJsList['tabEmployee'] = new EmployeeAdapter('Employee');
modJsList['tabEmployee'].setFieldNameMap(<?=json_encode($fieldNameMap)?>);
modJsList['tabEmployee'].setCustomFields(<?=json_encode($customFields)?>);
modJsList['tabCompanyGraph'] = new CompanyGraphAdapter('CompanyStructure');
modJsList['tabApiAccess'] = new ApiAccessAdapter('ApiAccess');
var modJs = modJsList['tabEmployee'];

View File

@@ -710,3 +710,36 @@ CompanyGraphAdapter.method('fixCyclicParent', function(sourceData) {
});
/*
* Api Access
*/
function ApiAccessAdapter(endPoint) {
this.initAdapter(endPoint);
}
ApiAccessAdapter.inherits(AdapterBase);
ApiAccessAdapter.method('getDataMapping', function() {
return [
];
});
ApiAccessAdapter.method('getHeaders', function() {
return [
];
});
ApiAccessAdapter.method('getFormFields', function() {
return [
];
});
ApiAccessAdapter.method('get', function() {
});

View File

@@ -11,7 +11,7 @@ if(\Classes\SettingsManager::getInstance()->getSetting('Api: REST Api Enabled')
if (defined('SYM_CLIENT')) {
define('REST_API_PATH', '/'.SYM_CLIENT.'/');
} else {
define('REST_API_PATH', '/Api/');
define('REST_API_PATH', '/');
}

View File

@@ -1449,17 +1449,8 @@ INSERT INTO `ExpensesCategories` (`name`) VALUES
('Utility');
INSERT INTO `PayrollColumns` (`id`,`name`,`calculation_hook`,`salary_components`,`deductions`,`add_columns`,`sub_columns`,`editable`,`enabled`,`default_value`,`calculation_columns`,`calculation_function`) VALUES
(1,'Total Hours','AttendanceUtil_getTimeWorkedHours','','','','','No','Yes','0.00',NULL,NULL),
(2,'Regular Hours','AttendanceUtil_getRegularWorkedHours','','','','','No','Yes','0.00',NULL,NULL),
(3,'Overtime Hours','AttendanceUtil_getOverTimeWorkedHours','','','','','No','Yes','0.00',NULL,NULL),
(4,'Leave Hours','LeaveUtil_getLeaveHours','','','','','No','Yes','0.00',NULL,NULL);
INSERT INTO `PayrollColumnTemplates` (`name`,`columns`) VALUES
('All Columns','[\"1\",\"2\",\"3\",\"4\"]'),
('All Time Management Columns','[\"1\",\"2\",\"3\"]');
INSERT INTO `DataImport` (`name`, `dataType`, `details`, `columns`, `updated`, `created`) VALUES

View File

@@ -78,11 +78,12 @@ if($action == 'get'){
}else if($action == 'delete'){
$ret['object'] = \Classes\BaseService::getInstance()->deleteElement($_REQUEST['t'],$_REQUEST['id']);
if($ret['object'] == null){
$ret['status'] = "SUCCESS";
/* @var \Classes\IceResponse $response */
$response = \Classes\BaseService::getInstance()->deleteElement($_REQUEST['t'],$_REQUEST['id']);
if($response->getStatus() == \Classes\IceResponse::SUCCESS){
$ret['status'] = \Classes\IceResponse::SUCCESS;
}else{
$ret['status'] = "ERROR";
$ret['status'] = \Classes\IceResponse::ERROR;
}
}else if($action == 'getFieldValues'){

View File

@@ -2,6 +2,7 @@
namespace Attendance\Admin\Api;
use Attendance\Common\Model\Attendance;
use Attendance\Rest\AttendanceRestEndPoint;
use Classes\AbstractModuleManager;
use Classes\UIManager;
@@ -26,6 +27,49 @@ class AttendanceAdminManager extends AbstractModuleManager
$this->addModelClass('AttendanceStatus');
}
public function setupRestEndPoints()
{
\Classes\Macaw::get(REST_API_PATH.'attendance/(:num)', function ($pathParams) {
$restEndPoint = new AttendanceRestEndPoint();
$restEndPoint->process('get', $pathParams);
});
\Classes\Macaw::get(REST_API_PATH.'attendance', function ($pathParams) {
$restEndPoint = new AttendanceRestEndPoint();
$restEndPoint->process('list', $pathParams);
});
\Classes\Macaw::get(REST_API_PATH.'employee/(:num)/attendance', function ($pathParams) {
$restEndPoint = new AttendanceRestEndPoint();
$restEndPoint->process('listEmployeeAttendance', $pathParams);
});
\Classes\Macaw::post(REST_API_PATH.'attendance', function ($pathParams) {
$restEndPoint = new AttendanceRestEndPoint();
$restEndPoint->process('post', $pathParams);
});
\Classes\Macaw::delete(REST_API_PATH.'attendance/(:num)', function ($pathParams) {
$restEndPoint = new AttendanceRestEndPoint();
$restEndPoint->process('delete', $pathParams);
});
\Classes\Macaw::post(REST_API_PATH.'attendance/punch-in', function ($pathParams) {
$restEndPoint = new AttendanceRestEndPoint();
$restEndPoint->process('punchIn', $pathParams);
});
\Classes\Macaw::get(REST_API_PATH.'employee/(:num)/open-punch-in/(:any)', function ($employeeId, $date) {
$restEndPoint = new AttendanceRestEndPoint();
$restEndPoint->process('getOpenPunch', [$employeeId, $date]);
});
\Classes\Macaw::post(REST_API_PATH.'attendance/punch-out', function ($pathParams) {
$restEndPoint = new AttendanceRestEndPoint();
$restEndPoint->process('punchOut', $pathParams);
});
}
public function getDashboardItemData()
{
$data = array();

View File

@@ -32,8 +32,8 @@ class AttendanceActionManager extends SubActionManager
//Find any open punch
$attendance = new Attendance();
$attendance->Load(
"employee = ? and DATE_FORMAT( in_time, '%Y-%m-%d' ) = ?
and (out_time is NULL or out_time = '0000-00-00 00:00:00')",
"employee = ? and DATE_FORMAT( in_time, '%Y-%m-%d' ) = ? and (out_time is NULL
or out_time = '0000-00-00 00:00:00')",
array($employee->id,$date)
);
@@ -135,6 +135,7 @@ class AttendanceActionManager extends SubActionManager
$this->baseService->audit(IceConstants::AUDIT_ACTION, "Punch Out \ time:".$openPunch->out_time);
} else {
$openPunch->in_time = $dateTime;
//$openPunch->out_time = '0000-00-00 00:00:00';
$openPunch->note = $req->note;
$openPunch->image_in = $req->image;
$openPunch->employee = $employee->id;

View File

@@ -72,6 +72,7 @@ class BaseService
public $customFieldManager = null;
public $migrationManager = null;
public $modelClassMap = array();
public $currentProfileId = false;
private static $me = null;
@@ -187,6 +188,14 @@ class BaseService
return $this->getFullQualifiedModelClassName($name);
}
/**
* @param boolean $currentProfileId
*/
public function setCurrentProfileId($currentProfileId)
{
$this->currentProfileId = $currentProfileId;
}
public function buildDefaultFilterQuery($filter)
{
$query = "";
@@ -755,9 +764,7 @@ class BaseService
}
return new IceResponse(IceResponse::ERROR, $this->findError($error));
}
LogManager::getInstance()->error("Element:".json_encode($ele));
LogManager::getInstance()->error("Obj:".json_encode($obj));
LogManager::getInstance()->error("Obj Keys:".json_encode($objectKeys));
$customFields = $ele->getCustomFields($obj);
LogManager::getInstance()->error("Custom:".json_encode($customFields));
foreach ($obj as $k => $v) {
@@ -792,6 +799,13 @@ class BaseService
$ele = new $nsTable();
$ele->Load('id = ?', array($id));
if (empty($ele->id) || $ele->id !== $id) {
return new IceResponse(
IceResponse::ERROR,
"Item not found"
);
}
$this->checkSecureAccess("delete", $ele);
@@ -800,7 +814,10 @@ class BaseService
if (!empty($nonDeletableTable)) {
foreach ($nonDeletableTable as $field => $value) {
if ($ele->$field == $value) {
return "This item can not be deleted";
return new IceResponse(
IceResponse::ERROR,
"This item can not be deleted"
);
}
}
}
@@ -818,7 +835,10 @@ class BaseService
if (!$ok) {
$error = $ele->ErrorMsg();
LogManager::getInstance()->info($error);
return $this->findError($error);
return new IceResponse(
IceResponse::ERROR,
$this->findError($error)
);
} else {
//Backup
if ($table == ucfirst(SIGN_IN_ELEMENT_MAPPING_FIELD_NAME)) {
@@ -845,7 +865,10 @@ class BaseService
$cf->Delete();
}
return null;
return new IceResponse(
IceResponse::SUCCESS,
null
);
}
/**
@@ -974,6 +997,9 @@ class BaseService
*/
public function getCurrentProfileId()
{
if ($this->currentProfileId) {
return $this->currentProfileId;
}
$adminEmpId = SessionUtils::getSessionObject('admin_current_profile');
$user = SessionUtils::getSessionObject('user');
if (empty($adminEmpId) && !empty($user)) {
@@ -1035,6 +1061,7 @@ class BaseService
public function cleanUpAdoDB($obj)
{
unset($obj->table);
unset($obj->_table);
unset($obj->_dbat);
unset($obj->_tableat);

View File

@@ -14,6 +14,10 @@ class CustomFieldManager
{
public function addCustomField($type, $id, $name, $value)
{
if ($name[0] === '/') {
return;
}
$customFieldValue = new CustomFieldValue();
$customFieldValue->Load(
"type = ? and name = ? and object_id = ?",

View File

@@ -49,4 +49,28 @@ class IceResponse
{
return array("status"=>$this->status,"data"=>$this->data);
}
/**
* @param mixed $status
*/
public function setStatus($status)
{
$this->status = $status;
}
/**
* @param null $data
*/
public function setData($data)
{
$this->data = $data;
}
/**
* @param null $code
*/
public function setCode($code)
{
$this->code = $code;
}
}

View File

@@ -85,8 +85,7 @@ class RestApiManager
LogManager::getInstance()->info("AT Hash Object:".json_encode($accessTokenObj));
if (!empty($accessTokenObj->id) && $accessTokenObj->hash == $hash) {
//No need to do user based validation for now
//return $this->validateAccessTokenInner($accessTokenObj->token);
return new IceResponse(IceResponse::SUCCESS, true);
return $this->validateAccessTokenInner($accessTokenObj->token);
}
return new IceResponse(IceResponse::ERROR, "Authorization bearer token not found or invalid", 401);
@@ -107,7 +106,8 @@ class RestApiManager
$data = json_decode($accessToken, true);
if ($data['userId'] == $user->id) {
return new IceResponse(IceResponse::SUCCESS, true);
unset($user->password);
return new IceResponse(IceResponse::SUCCESS, $user);
}
return new IceResponse(IceResponse::ERROR, false);

View File

@@ -1,24 +1,74 @@
<?php
/**
* Created by PhpStorm.
* User: Thilina
* Date: 8/20/17
* Time: 9:49 AM
*/
namespace Classes;
use Classes\Data\DataReader;
use Classes\Data\Query\DataQuery;
use Employees\Common\Model\Employee;
use Users\Common\Model\User;
use Utils\SessionUtils;
class RestEndPoint
{
const RESPONSE_ERR_ENTITY_NOT_FOUND = 'Entity not found';
const RESPONSE_ERR_PERMISSION_DENIED = 'Permission denied';
const RESPONSE_ERR_UNPROCESSABLE = 'Unprocessable Entity';
const RESPONSE_ERR_EMPLOYEE_NOT_FOUND = 'Employee not found';
public function process($type, $parameter = null)
const DEFAULT_LIMIT = 50;
const ELEMENT_NAME = '';
public function getModelObject($id)
{
return false;
}
public function checkBasicPermissions($user, $employeeId)
{
if (!isset($employeeId)) {
return new IceResponse(IceResponse::ERROR, self::RESPONSE_ERR_UNPROCESSABLE, 422);
}
$employee = new Employee();
$employee->Load("id = ?", array($employeeId));
if (empty($employee->id) || $employee->id !== $employeeId . '') {
return new IceResponse(IceResponse::ERROR, self::RESPONSE_ERR_EMPLOYEE_NOT_FOUND, 422);
}
if ($user->user_level !== 'Admin') {
if ($user->user_level === 'Manager') {
if (!PermissionManager::manipulationAllowed(
BaseService::getInstance()->getCurrentProfileId(),
$employee
)
) {
return new IceResponse(IceResponse::ERROR, self::RESPONSE_ERR_PERMISSION_DENIED, 403);
}
} elseif ($user->user_level === 'Employee'
&& $employeeId != BaseService::getInstance()->getCurrentProfileId()) {
return new IceResponse(IceResponse::ERROR, self::RESPONSE_ERR_PERMISSION_DENIED, 403);
} elseif ($user->user_level !== 'Employee' && $user->user_level !== 'Manager') {
return new IceResponse(IceResponse::ERROR, self::RESPONSE_ERR_PERMISSION_DENIED, 403);
}
return new IceResponse(IceResponse::ERROR, "Permission denied", 403);
}
return new IceResponse(IceResponse::SUCCESS);
}
public function process($type, $parameters = [])
{
if (!is_array($parameters)) {
$parameters = [$parameters];
}
$accessTokenValidation = $this->validateAccessToken();
if (!empty($accessTokenValidation) && $accessTokenValidation->getStatus() == IceResponse::ERROR) {
$resp = $accessTokenValidation;
} else {
$resp = $this->$type($parameter);
BaseService::getInstance()->setCurrentUser($accessTokenValidation->getData());
SessionUtils::saveSessionObject('user', $accessTokenValidation->getData());
array_unshift($parameters, $accessTokenValidation->getData());
$resp = call_user_func_array(array($this, $type), $parameters);
}
header('Content-Type: application/json');
@@ -39,33 +89,177 @@ class RestEndPoint
"code" => $resp->getCode(),
"message" => $resp->getObject()
);
$this->printResponse(array("error",[$messages]));
$this->printResponse(array("error" => [$messages]));
}
}
public function get($parameter)
protected function enrichElement($obj, $map)
{
if (!empty($map)) {
foreach ($map as $k => $v) {
if ($obj->$k !== null) {
$obj->$k = [
'type' => $v[0],
$v[1] => $obj->$k,
'display' => $obj->{$k . '_Name'}
];
} else {
unset($obj->$k);
}
unset($obj->{$k . '_Name'});
}
}
return $obj;
}
protected function cleanObject($obj)
{
$obj = BaseService::getInstance()->cleanUpAdoDB($obj);
unset($obj->keysToIgnore);
unset($obj->historyFieldsToTrack);
unset($obj->historyUpdateList);
unset($obj->oldObjOrig);
unset($obj->oldObj);
return $obj;
}
protected function removeNullFields($obj)
{
foreach ($obj as $k => $v) {
if ($obj->$k === null) {
unset($obj->$k);
}
}
return $obj;
}
public function list(User $user)
{
return new IceResponse(IceResponse::ERROR, "Method not Implemented", 404);
}
public function post($parameter)
protected function listByQuery(DataQuery $query)
{
$page = 1;
if (isset($_GET['page']) && intval($_GET['page']) > 0) {
$page = intval($_GET['page']);
}
$limit = static::DEFAULT_LIMIT;
if (isset($_GET['limit']) && intval($_GET['limit']) > 0) {
$limit = intval($_GET['limit']);
}
$query->setStartPage(($page - 1) * $limit);
$query->setLength($limit);
$data = DataReader::getData($query);
$output = array();
$columns = $query->getColumns();
foreach ($data as $item) {
if (!empty($columns)) {
$obj = new \stdClass();
foreach ($columns as $column) {
$obj->$column = $item->$column;
}
} else {
$obj = $this->cleanObject($item);
}
$output[] = $obj;
}
return new IceResponse(
IceResponse::SUCCESS,
[
'data' => $output,
'nextPage' => $page + 1,
]
);
}
protected function listData(
$object,
$limit,
$page = 1,
$fieldsToRemove = array(),
$customQuery = null,
$params = []
) {
if (!isset($limit) || $limit <= 0) {
$limit = self::DEFAULT_LIMIT;
}
if ($customQuery) {
$query = $customQuery.' order by id limit ?,?';
$params[] = ($page - 1) * $limit;
$params[] = $limit + 1;
} else {
$query = '1=1 order by id limit ?,?';
$params = array(($page - 1) * $limit, ($limit + 1));
}
$allObjects = $object->Find($query, $params);
$count = 0;
$hasMore = 0;
$newObjects = array();
foreach ($allObjects as $object) {
$object = $this->cleanObject($object);
$object = $this->removeNullFields($object);
if (!empty($fieldsToRemove)) {
foreach ($fieldsToRemove as $field) {
unset($object->$field);
}
}
$newObjects[] = $object;
$count++;
if ($count === $limit) {
$hasMore = true;
break;
}
}
return new IceResponse(
IceResponse::SUCCESS,
[
'data' => $newObjects,
'prevPage' => ($page > 1) ? $page - 1 : '',
'nextPage' => $hasMore ? $page + 1 : '',
'limit' => $limit,
]
);
}
public function get(User $user, $parameter)
{
return new IceResponse(IceResponse::ERROR, "Method not Implemented", 404);
}
public function put($parameter)
public function post(User $user)
{
return new IceResponse(IceResponse::ERROR, "Method not Implemented", 404);
}
public function delete($parameter)
public function put(User $user, $parameter)
{
return new IceResponse(IceResponse::ERROR, "Method not Implemented", 404);
}
public function clearObject($obj)
public function delete(User $user, $parameter)
{
return BaseService::getInstance()->cleanUpAdoDB($obj);
if ($user->user_level !== 'Admin') {
return new IceResponse(IceResponse::ERROR, "Permission denied", 403);
}
$response = BaseService::getInstance()->deleteElement(
static::ELEMENT_NAME,
$parameter
);
if ($response->getStatus() === IceResponse::SUCCESS) {
return new IceResponse(IceResponse::SUCCESS, ['id' => $parameter], 200);
}
return new IceResponse(IceResponse::ERROR, $response->getData(), 400);
}
public function validateAccessToken()
@@ -75,12 +269,6 @@ class RestEndPoint
return $accessTokenValidation;
}
public function cleanDBObject($obj)
{
unset($obj->keysToIgnore);
return $obj;
}
public function printResponse($response)
{
echo json_encode($response, JSON_PRETTY_PRINT);
@@ -129,4 +317,10 @@ class RestEndPoint
}
return null;
}
protected function getRequestBody()
{
$inputJSON = file_get_contents('php://input');
return json_decode($inputJSON, true);
}
}

View File

@@ -26,10 +26,35 @@ class EmployeesAdminManager extends AbstractModuleManager
public function setupRestEndPoints()
{
\Classes\Macaw::get(REST_API_PATH.'employee/(:any)', function ($pathParams) {
\Classes\Macaw::get(REST_API_PATH.'employees/me', function () {
$empRestEndPoint = new EmployeeRestEndPoint();
$empRestEndPoint->process('get', 'me');
});
\Classes\Macaw::get(REST_API_PATH.'employees/(:num)', function ($pathParams) {
$empRestEndPoint = new EmployeeRestEndPoint();
$empRestEndPoint->process('get', $pathParams);
});
\Classes\Macaw::get(REST_API_PATH.'employees', function () {
$empRestEndPoint = new EmployeeRestEndPoint();
$empRestEndPoint->process('list');
});
\Classes\Macaw::post(REST_API_PATH.'employees', function () {
$empRestEndPoint = new EmployeeRestEndPoint();
$empRestEndPoint->process('post');
});
\Classes\Macaw::put(REST_API_PATH.'employees/(:num)', function ($pathParams) {
$empRestEndPoint = new EmployeeRestEndPoint();
$empRestEndPoint->process('put', $pathParams);
});
\Classes\Macaw::delete(REST_API_PATH.'employees/(:num)', function ($pathParams) {
$empRestEndPoint = new EmployeeRestEndPoint();
$empRestEndPoint->process('delete', $pathParams);
});
}
public function initializeDatabaseErrorMappings()

View File

@@ -1,51 +1,140 @@
<?php
/**
* Created by PhpStorm.
* User: Thilina
* Date: 8/19/17
* Time: 10:42 AM
*/
namespace Employees\Rest;
use Classes\BaseService;
use Classes\Data\Query\DataQuery;
use Classes\IceResponse;
use Classes\PermissionManager;
use Classes\RestEndPoint;
use Employees\Common\Model\Employee;
use Users\Common\Model\User;
class EmployeeRestEndPoint extends RestEndPoint
{
public function get($parameter)
{
const ELEMENT_NAME = 'Employee';
if (empty($parameter)) {
return new IceResponse(IceResponse::ERROR, "Employee ID not provided");
public function getModelObject($id)
{
$obj = new Employee();
$obj->Load("id = ?", array($id));
return $obj;
}
public function list(User $user)
{
$query = new DataQuery('Employee');
$limit = self::DEFAULT_LIMIT;
if (isset($_GET['limit']) && intval($_GET['limit']) > 0) {
$limit = intval($_GET['limit']);
}
$query->setLength($limit);
if ($user->user_level !== 'Admin') {
$query->setIsSubOrdinates(true);
}
if ($parameter === 'list') {
$emp = new Employee();
$emps = $emp->Find("1=1");
$newEmps = array();
foreach ($emps as $emp) {
$emp = BaseService::getInstance()->cleanUpAdoDB($emp);
$emp = Employee::cleanEmployeeData($emp);
$newEmps[] = $emp;
}
return new IceResponse(IceResponse::SUCCESS, $newEmps);
} else {
$mapping = '{"nationality":["Nationality","id","name"],"ethnicity":["Ethnicity","id","name"],'
.'"immigration_status":["ImmigrationStatus","id","name"],'
.'"employment_status":["EmploymentStatus","id","name"],'
.'"job_title":["JobTitle","id","name"],"pay_grade":["PayGrade","id","name"],'
.'"country":["Country","code","name"],"province":["Province","id","name"],'
.'"department":["CompanyStructure","id","title"],'
.'"supervisor":["Employee","id","first_name+last_name"]}';
$emp = BaseService::getInstance()->getElement('Employee', $parameter, $mapping, true);
if (!empty($emp)) {
$emp = Employee::cleanEmployeeData($emp);
return new IceResponse(IceResponse::SUCCESS, $emp);
}
return $this->listByQuery($query);
}
public function get(User $user, $parameter)
{
if (empty($parameter)) {
return new IceResponse(IceResponse::ERROR, "Employee not found", 404);
}
if ($parameter === 'me') {
$parameter = BaseService::getInstance()->getCurrentProfileId();
}
if ($user->user_level !== 'Admin' && !PermissionManager::manipulationAllowed(
BaseService::getInstance()->getCurrentProfileId(),
$this->getModelObject($parameter)
)
) {
return new IceResponse(IceResponse::ERROR, "Permission denied", 403);
}
$mapping = [
"nationality" => ["Nationality","id","name"],
"ethnicity" => ["Ethnicity","id","name"],
"immigration_status" => ["ImmigrationStatus","id","name"],
"employment_status" => ["EmploymentStatus","id","name"],
"job_title" => ["JobTitle","id","name"],
"pay_grade" => ["PayGrade","id","name"],
"country" => ["Country","code","name"],
"province" => ["Province","id","name"],
"department" => ["CompanyStructure","id","title"],
"supervisor" => [self::ELEMENT_NAME,"id","first_name+last_name"],
];
$emp = BaseService::getInstance()->getElement(
self::ELEMENT_NAME,
$parameter,
json_encode($mapping),
true
);
$emp = $this->enrichElement($emp, $mapping);
if (!empty($emp)) {
$emp = $this->cleanObject($emp);
$emp = $this->removeNullFields($emp);
return new IceResponse(IceResponse::SUCCESS, $emp);
}
return new IceResponse(IceResponse::ERROR, "Employee not found", 404);
}
public function post(User $user)
{
if ($user->user_level !== 'Admin') {
return new IceResponse(IceResponse::ERROR, "Permission denied", 403);
}
$body = $this->getRequestBody();
$response = BaseService::getInstance()->addElement(self::ELEMENT_NAME, $body);
if ($response->getStatus() === IceResponse::SUCCESS) {
$response = $this->get($user, $response->getData()->id);
$response->setCode(201);
return $response;
}
return new IceResponse(IceResponse::ERROR, $response->getData(), 400);
}
public function put(User $user, $parameter)
{
if ($user->user_level !== 'Admin' &&
!PermissionManager::manipulationAllowed(
BaseService::getInstance()->getCurrentProfileId(),
$this->getModelObject($parameter)
)
) {
return new IceResponse(IceResponse::ERROR, "Permission denied", 403);
}
$body = $this->getRequestBody();
$body['id'] = $parameter;
$response = BaseService::getInstance()->addElement(self::ELEMENT_NAME, $body);
if ($response->getStatus() === IceResponse::SUCCESS) {
return $this->get($user, $response->getData()->id);
}
return new IceResponse(IceResponse::ERROR, 'Error modifying employee', 400);
}
public function delete(User $user, $parameter)
{
if ($user->user_level !== 'Admin') {
return new IceResponse(IceResponse::ERROR, "Permission denied", 403);
}
$response = BaseService::getInstance()->deleteElement(
self::ELEMENT_NAME,
$parameter
);
if ($response->getStatus() === IceResponse::SUCCESS) {
return new IceResponse(IceResponse::SUCCESS, ['id' => $parameter], 200);
}
return new IceResponse(IceResponse::ERROR, $response->getData(), 400);
}
}