New features for modules
This commit is contained in:
@@ -1,50 +1,50 @@
|
||||
<?php
|
||||
if (!class_exists('AttendanceAdminManager')) {
|
||||
|
||||
class AttendanceAdminManager extends AbstractModuleManager{
|
||||
|
||||
public function initializeUserClasses(){
|
||||
|
||||
}
|
||||
|
||||
public function initializeFieldMappings(){
|
||||
|
||||
}
|
||||
|
||||
public function initializeDatabaseErrorMappings(){
|
||||
|
||||
}
|
||||
|
||||
public function setupModuleClassDefinitions(){
|
||||
$this->addModelClass('Attendance');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class AttendanceAdminManager extends AbstractModuleManager{
|
||||
|
||||
public function initializeUserClasses(){
|
||||
|
||||
}
|
||||
|
||||
public function initializeFieldMappings(){
|
||||
|
||||
}
|
||||
|
||||
public function initializeDatabaseErrorMappings(){
|
||||
|
||||
}
|
||||
|
||||
public function setupModuleClassDefinitions(){
|
||||
$this->addModelClass('Attendance');
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//Model Classes
|
||||
|
||||
if (!class_exists('Attendance')) {
|
||||
class Attendance extends ICEHRM_Record {
|
||||
var $_table = 'Attendance';
|
||||
class Attendance extends ICEHRM_Record {
|
||||
var $_table = 'Attendance';
|
||||
|
||||
public function getAdminAccess(){
|
||||
return array("get","element","save","delete");
|
||||
}
|
||||
public function getAdminAccess(){
|
||||
return array("get","element","save","delete");
|
||||
}
|
||||
|
||||
public function getManagerAccess(){
|
||||
return array("get","element","save","delete");
|
||||
}
|
||||
public function getManagerAccess(){
|
||||
return array("get","element","save","delete");
|
||||
}
|
||||
|
||||
public function getUserAccess(){
|
||||
return array("get");
|
||||
}
|
||||
public function getUserAccess(){
|
||||
return array("get");
|
||||
}
|
||||
|
||||
public function getUserOnlyMeAccess(){
|
||||
return array("element","save","delete");
|
||||
}
|
||||
}
|
||||
public function getUserOnlyMeAccess(){
|
||||
return array("element","save","delete");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -158,6 +158,13 @@ AttendanceAdapter.method('saveFailCallback', function(callBackData) {
|
||||
this.showMessage("Error saving attendance entry", callBackData);
|
||||
});
|
||||
|
||||
AttendanceAdapter.method('isSubProfileTable', function() {
|
||||
if(this.user.user_level == "Admin"){
|
||||
return false;
|
||||
}else{
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
/*
|
||||
@@ -215,4 +222,13 @@ AttendanceStatusAdapter.method('getActionButtonsHtml', function(id,data) {
|
||||
html = html.replace(/_COLOR_/g,'green');
|
||||
}
|
||||
return html;
|
||||
});
|
||||
|
||||
|
||||
AttendanceStatusAdapter.method('isSubProfileTable', function() {
|
||||
if(this.user.user_level == "Admin"){
|
||||
return false;
|
||||
}else{
|
||||
return true;
|
||||
}
|
||||
});
|
||||
@@ -3,7 +3,7 @@
|
||||
"menu":"Employees",
|
||||
"order":"8",
|
||||
"icon":"fa-clock-o",
|
||||
"user_levels":["Admin"],
|
||||
"user_levels":["Admin","Manager"],
|
||||
|
||||
"permissions":
|
||||
{}
|
||||
|
||||
@@ -49,4 +49,24 @@ if (!class_exists('CompanyStructure')) {
|
||||
return new IceResponse(IceResponse::SUCCESS,"");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (!class_exists('Timezone')) {
|
||||
class Timezone extends ICEHRM_Record {
|
||||
var $_table = 'Timezones';
|
||||
|
||||
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");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -17,6 +17,7 @@ CompanyStructureAdapter.method('getDataMapping', function() {
|
||||
"address",
|
||||
"type",
|
||||
"country",
|
||||
"timezone",
|
||||
"parent"
|
||||
];
|
||||
});
|
||||
@@ -28,6 +29,7 @@ CompanyStructureAdapter.method('getHeaders', function() {
|
||||
{ "sTitle": "Address","bSortable":false},
|
||||
{ "sTitle": "Type"},
|
||||
{ "sTitle": "Country", "sClass": "center" },
|
||||
{ "sTitle": "Time Zone"},
|
||||
{ "sTitle": "Parent Structure"}
|
||||
];
|
||||
});
|
||||
@@ -40,6 +42,7 @@ CompanyStructureAdapter.method('getFormFields', function() {
|
||||
[ "address", {"label":"Address","type":"textarea","validation":"none"}],
|
||||
[ "type", {"label":"Type","type":"select","source":[["Company","Company"],["Head Office","Head Office"],["Regional Office","Regional Office"],["Department","Department"],["Unit","Unit"],["Sub Unit","Sub Unit"],["Other","Other"]]}],
|
||||
[ "country", {"label":"Country","type":"select","remote-source":["Country","code","name"]}],
|
||||
[ "timezone", {"label":"Time Zone","type":"select","allow-null":false,"remote-source":["Timezone","name","details"]}],
|
||||
[ "parent", {"label":"Parent Structure","type":"select","allow-null":true,"remote-source":["CompanyStructure","id","title"]}]
|
||||
];
|
||||
});
|
||||
@@ -298,7 +301,7 @@ CompanyGraphAdapter.method('fixCyclicParent', function(sourceData) {
|
||||
});
|
||||
|
||||
CompanyGraphAdapter.method('getHelpLink', function () {
|
||||
return 'http://blog.icehrm.com/?page_id=61';
|
||||
return 'http://blog.icehrm.com/docs/companystructure/';
|
||||
});
|
||||
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@ JobTitleAdapter.method('getFormFields', function() {
|
||||
});
|
||||
|
||||
JobTitleAdapter.method('getHelpLink', function () {
|
||||
return 'http://blog.icehrm.com/?page_id=80';
|
||||
return 'http://blog.icehrm.com/docs/jobdetails/';
|
||||
});
|
||||
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"label":"Company Loans",
|
||||
"menu":"Admin",
|
||||
"order":"7",
|
||||
"order":"81",
|
||||
"icon":"fa-shield",
|
||||
"user_levels":["Admin"],
|
||||
|
||||
|
||||
@@ -63,7 +63,7 @@ ClientAdapter.method('getFormFields', function() {
|
||||
});
|
||||
|
||||
ClientAdapter.method('getHelpLink', function () {
|
||||
return 'http://blog.icehrm.com/?page_id=85';
|
||||
return 'http://blog.icehrm.com/docs/projects/';
|
||||
});
|
||||
|
||||
/**
|
||||
@@ -116,7 +116,7 @@ ProjectAdapter.method('getFormFields', function() {
|
||||
});
|
||||
|
||||
ProjectAdapter.method('getHelpLink', function () {
|
||||
return 'http://blog.icehrm.com/?page_id=85';
|
||||
return 'http://blog.icehrm.com/docs/projects/';
|
||||
});
|
||||
|
||||
|
||||
@@ -172,6 +172,6 @@ EmployeeProjectAdapter.method('getFilters', function() {
|
||||
});
|
||||
|
||||
EmployeeProjectAdapter.method('getHelpLink', function () {
|
||||
return 'http://blog.icehrm.com/?page_id=85';
|
||||
return 'http://blog.icehrm.com/docs/projects/';
|
||||
});
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@ SkillAdapter.method('getFormFields', function() {
|
||||
});
|
||||
|
||||
SkillAdapter.method('getHelpLink', function () {
|
||||
return 'http://blog.icehrm.com/?page_id=83';
|
||||
return 'http://blog.icehrm.com/docs/qualifications/';
|
||||
});
|
||||
|
||||
|
||||
|
||||
@@ -162,6 +162,3 @@ ReportAdapter.method('fillForm', function(object) {
|
||||
}
|
||||
});
|
||||
|
||||
ReportAdapter.method('getHelpLink', function () {
|
||||
return 'http://blog.icehrm.com/?page_id=118';
|
||||
});
|
||||
|
||||
@@ -63,5 +63,5 @@ SettingAdapter.method('fillForm', function(object) {
|
||||
|
||||
|
||||
SettingAdapter.method('getHelpLink', function () {
|
||||
return 'http://blog.icehrm.com/?page_id=126';
|
||||
});
|
||||
return 'http://blog.icehrm.com/docs/settings/';
|
||||
});
|
||||
|
||||
@@ -46,15 +46,22 @@ class AttendanceActionManager extends SubActionManager{
|
||||
|
||||
|
||||
public function savePunch($req){
|
||||
|
||||
$useServerTime = SettingsManager::getInstance()->getSetting('Attendance: Use Department Time Zone');
|
||||
$currentEmployeeTimeZone = BaseService::getInstance()->getCurrentEmployeeTimeZone();
|
||||
|
||||
if($useServerTime == '1' && !empty($currentEmployeeTimeZone)){
|
||||
date_default_timezone_set('Asia/Colombo');
|
||||
|
||||
$date = new DateTime("now", new DateTimeZone('Asia/Colombo'));
|
||||
|
||||
$date->setTimezone(new DateTimeZone($currentEmployeeTimeZone));
|
||||
$req->time = $date->format('Y-m-d H:i:s');
|
||||
}
|
||||
|
||||
$req->date = $req->time;
|
||||
|
||||
/*
|
||||
if(strtotime($req->date) > strtotime($req->cdate)){
|
||||
return new IceResponse(IceResponse::ERROR,"You are not allowed to punch a future time");
|
||||
}
|
||||
*/
|
||||
|
||||
//check if there is an open punch
|
||||
|
||||
//check if there is an open punch
|
||||
$openPunch = $this->getPunch($req)->getData();
|
||||
|
||||
if(empty($openPunch)){
|
||||
@@ -65,13 +72,7 @@ class AttendanceActionManager extends SubActionManager{
|
||||
$arr = explode(" ",$dateTime);
|
||||
$date = $arr[0];
|
||||
|
||||
$currentDateTime = $req->cdate;
|
||||
$arr = explode(" ",$currentDateTime);
|
||||
$currentDate = $arr[0];
|
||||
|
||||
if($currentDate != $date){
|
||||
return new IceResponse(IceResponse::ERROR,"You are not allowed to punch time for a previous date");
|
||||
}
|
||||
|
||||
|
||||
$employee = $this->baseService->getElement('Employee',$this->getCurrentProfileId(),null,true);
|
||||
|
||||
@@ -98,18 +99,18 @@ class AttendanceActionManager extends SubActionManager{
|
||||
}
|
||||
if(strtotime($attendance->out_time) >= strtotime($dateTime) && strtotime($attendance->in_time) <= strtotime($dateTime)){
|
||||
//-1---0---1---0 || ---0--1---1---0
|
||||
return new IceResponse(IceResponse::ERROR,"Time entry is overlapping with an existing one 1");
|
||||
return new IceResponse(IceResponse::ERROR,"Time entry is overlapping with an existing one");
|
||||
}else if(strtotime($attendance->out_time) >= strtotime($openPunch->in_time) && strtotime($attendance->in_time) <= strtotime($openPunch->in_time)){
|
||||
//---0---1---0---1 || ---0--1---1---0
|
||||
return new IceResponse(IceResponse::ERROR,"Time entry is overlapping with an existing one 2");
|
||||
return new IceResponse(IceResponse::ERROR,"Time entry is overlapping with an existing one");
|
||||
}else if(strtotime($attendance->out_time) <= strtotime($dateTime) && strtotime($attendance->in_time) >= strtotime($openPunch->in_time)){
|
||||
//--1--0---0--1--
|
||||
return new IceResponse(IceResponse::ERROR,"Time entry is overlapping with an existing one 3 ".$attendance->id);
|
||||
return new IceResponse(IceResponse::ERROR,"Time entry is overlapping with an existing one ".$attendance->id);
|
||||
}
|
||||
}else{
|
||||
if(strtotime($attendance->out_time) >= strtotime($dateTime) && strtotime($attendance->in_time) <= strtotime($dateTime)){
|
||||
//---0---1---0
|
||||
return new IceResponse(IceResponse::ERROR,"Time entry is overlapping with an existing one 4");
|
||||
return new IceResponse(IceResponse::ERROR,"Time entry is overlapping with an existing one");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,6 +25,11 @@ $moduleName = 'attendance';
|
||||
define('MODULE_PATH',dirname(__FILE__));
|
||||
include APP_BASE_PATH.'header.php';
|
||||
include APP_BASE_PATH.'modulejslibs.inc.php';
|
||||
$useServerTime = SettingsManager::getInstance()->getSetting('Attendance: Use Department Time Zone');
|
||||
$currentEmployeeTimeZone = BaseService::getInstance()->getCurrentEmployeeTimeZone();
|
||||
if(empty($currentEmployeeTimeZone)){
|
||||
$useServerTime = 0;
|
||||
}
|
||||
?><div class="span9">
|
||||
|
||||
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
||||
@@ -48,9 +53,11 @@ include APP_BASE_PATH.'modulejslibs.inc.php';
|
||||
<script>
|
||||
var modJsList = new Array();
|
||||
modJsList['tabAttendance'] = new AttendanceAdapter('Attendance','Attendance','','in_time desc');
|
||||
modJsList['tabAttendance'].setUseServerTime(<?=$useServerTime?>);
|
||||
modJsList['tabAttendance'].setRemoteTable(true);
|
||||
modJsList['tabAttendance'].updatePunchButton(true);
|
||||
|
||||
|
||||
var modJs = modJsList['tabAttendance'];
|
||||
|
||||
</script>
|
||||
|
||||
@@ -23,6 +23,7 @@ Developer: Thilina Hasantha (thilina.hasantha[at]gmail.com / facebook.com/thilin
|
||||
function AttendanceAdapter(endPoint,tab,filter,orderBy) {
|
||||
this.initAdapter(endPoint,tab,filter,orderBy);
|
||||
this.punch = null;
|
||||
this.useServerTime = 0;
|
||||
}
|
||||
|
||||
AttendanceAdapter.inherits(AdapterBase);
|
||||
@@ -31,6 +32,10 @@ AttendanceAdapter.method('updatePunchButton', function() {
|
||||
this.getPunch('changePunchButtonSuccessCallBack');
|
||||
});
|
||||
|
||||
AttendanceAdapter.method('setUseServerTime', function(val) {
|
||||
this.useServerTime = val;
|
||||
});
|
||||
|
||||
|
||||
AttendanceAdapter.method('getDataMapping', function() {
|
||||
return [
|
||||
@@ -51,11 +56,19 @@ AttendanceAdapter.method('getHeaders', function() {
|
||||
});
|
||||
|
||||
AttendanceAdapter.method('getFormFields', function() {
|
||||
return [
|
||||
[ "id", {"label":"ID","type":"hidden"}],
|
||||
[ "time", {"label":"Time","type":"datetime"}],
|
||||
[ "note", {"label":"Note","type":"textarea","validation":"none"}]
|
||||
];
|
||||
if(this.useServerTime == 0){
|
||||
return [
|
||||
[ "id", {"label":"ID","type":"hidden"}],
|
||||
[ "time", {"label":"Time","type":"datetime"}],
|
||||
[ "note", {"label":"Note","type":"textarea","validation":"none"}]
|
||||
];
|
||||
}else{
|
||||
return [
|
||||
[ "id", {"label":"ID","type":"hidden"}],
|
||||
[ "note", {"label":"Note","type":"textarea","validation":"none"}]
|
||||
];
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"label":"Loans",
|
||||
"menu":"Loans",
|
||||
"order":"1",
|
||||
"menu":"Finance",
|
||||
"order":"3",
|
||||
"icon":"fa-shield",
|
||||
"user_levels":["Admin","Manager","Employee"],
|
||||
|
||||
|
||||
@@ -2,6 +2,6 @@
|
||||
"Personal Information":"fa-male",
|
||||
"Subordinates":"fa-user",
|
||||
"Time Management":"fa-clock-o",
|
||||
"Training":"fa-briefcase",
|
||||
"Loans":"fa-list-alt"
|
||||
"Travel Management":"fa-plane",
|
||||
"Finance":"fa-money"
|
||||
}
|
||||
Reference in New Issue
Block a user