Compare commits
44 Commits
v21.1.0.OS
...
feature/Ic
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
190984a560 | ||
|
|
91bb1d2d8a | ||
|
|
526ee66e2d | ||
|
|
0d92c820f7 | ||
|
|
15a45150cb | ||
|
|
984b0fac5c | ||
|
|
08a52d216c | ||
|
|
61abe71314 | ||
|
|
cae28f03a5 | ||
|
|
4a4d895592 | ||
|
|
c05e815c17 | ||
|
|
6e77aa99c4 | ||
|
|
fd99ea299e | ||
|
|
c3344b99fa | ||
|
|
ca58e75556 | ||
|
|
bf43ed8730 | ||
|
|
b922a48141 | ||
|
|
26e55e8644 | ||
|
|
af9b9119ef | ||
|
|
afa345f374 | ||
|
|
a3d6430102 | ||
|
|
e625f6013a | ||
|
|
577ed9938f | ||
|
|
2ade4d9a4a | ||
|
|
a55c56215a | ||
|
|
16014bb38e | ||
|
|
a75325fb52 | ||
|
|
9cee4e91df | ||
|
|
8b276d54e6 | ||
|
|
f23856d70a | ||
|
|
fde94aa7fa | ||
|
|
025a8283ab | ||
|
|
51e3569501 | ||
|
|
861e94cf9d | ||
|
|
9c56b8acd1 | ||
|
|
3edb9aaa6c | ||
|
|
72d0820dee | ||
|
|
257071da2d | ||
|
|
f803f4265d | ||
|
|
dda445659c | ||
|
|
e3a7e18d9c | ||
|
|
889baf124c | ||
|
|
8ebf28fbcb | ||
|
|
d105ee3512 |
27
.gitignore
vendored
27
.gitignore
vendored
@@ -1,10 +1,17 @@
|
|||||||
/.settings
|
.settings
|
||||||
/.buildpath
|
.buildpath
|
||||||
/.project
|
.project
|
||||||
/.idea/
|
.idea/
|
||||||
/build
|
build
|
||||||
/deployment/clients/dev/data/
|
deployment/clients/dev/data/
|
||||||
/deployment/clients/test/data/
|
deployment/clients/test/data/
|
||||||
/.vagrant
|
deployment/clients/local/data/
|
||||||
/app/config.php
|
.vagrant
|
||||||
/app/data/*
|
app/config.php
|
||||||
|
app/data/*
|
||||||
|
cache.properties
|
||||||
|
node_modules/*
|
||||||
|
web/dist/*.map
|
||||||
|
web/admin/dist/*.map
|
||||||
|
web/modules/dist/*.map
|
||||||
|
.gitkeep
|
||||||
|
|||||||
@@ -1,7 +1,11 @@
|
|||||||
services:
|
services:
|
||||||
- mysql
|
- mysql
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- ant
|
||||||
before_script:
|
before_script:
|
||||||
- echo "USE mysql;\nUPDATE user SET password=PASSWORD('dev') WHERE user='root';\nFLUSH PRIVILEGES;\n" | mysql -u root
|
- echo "USE mysql;\nUPDATE user SET authentication_string=PASSWORD('dev') WHERE user='root';\nFLUSH PRIVILEGES;\n" | mysql -u root
|
||||||
install:
|
install:
|
||||||
#- rm $TRAVIS_BUILD_DIR/tools/phpunit
|
#- rm $TRAVIS_BUILD_DIR/tools/phpunit
|
||||||
#- composer require --dev phpunit/phpunit ~6.5.5
|
#- composer require --dev phpunit/phpunit ~6.5.5
|
||||||
@@ -10,6 +14,8 @@ install:
|
|||||||
script: ant build-ci
|
script: ant build-ci
|
||||||
language: php
|
language: php
|
||||||
php:
|
php:
|
||||||
|
- '5.6'
|
||||||
- '7.0'
|
- '7.0'
|
||||||
- '7.1'
|
- '7.1'
|
||||||
|
- '7.2'
|
||||||
after_failure: "cat /tmp/icehrm.test.log"
|
after_failure: "cat /tmp/icehrm.test.log"
|
||||||
|
|||||||
9
Vagrantfile
vendored
9
Vagrantfile
vendored
@@ -15,15 +15,12 @@ Vagrant.configure(2) do |config|
|
|||||||
|
|
||||||
|
|
||||||
config.vm.provision "shell", inline: <<-SHELL
|
config.vm.provision "shell", inline: <<-SHELL
|
||||||
|
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys AA8E81B4331F7F50
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
|
chmod ugo+x /vagrant/deployment/vagrant/runonce.sh
|
||||||
|
sh /vagrant/deployment/vagrant/runonce.sh
|
||||||
SHELL
|
SHELL
|
||||||
|
|
||||||
config.vm.hostname = "icehrm.open"
|
config.vm.hostname = "icehrm.open"
|
||||||
|
|
||||||
config.hostsupdater.aliases = [
|
|
||||||
"app.dev",
|
|
||||||
"app.app.dev",
|
|
||||||
"clients.app.dev"
|
|
||||||
]
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,97 +0,0 @@
|
|||||||
<?php
|
|
||||||
/*
|
|
||||||
This file is part of iCE Hrm.
|
|
||||||
|
|
||||||
iCE Hrm is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
iCE Hrm is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with iCE Hrm. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
------------------------------------------------------------------
|
|
||||||
|
|
||||||
Original work Copyright (c) 2012 [Gamonoid Media Pvt. Ltd]
|
|
||||||
Developer: Thilina Hasantha (thilina.hasantha[at]gmail.com / facebook.com/thilinah)
|
|
||||||
*/
|
|
||||||
|
|
||||||
$moduleName = 'attendance_monitor';
|
|
||||||
define('MODULE_PATH',dirname(__FILE__));
|
|
||||||
include APP_BASE_PATH.'header.php';
|
|
||||||
include APP_BASE_PATH.'modulejslibs.inc.php';
|
|
||||||
$photoAttendance = \Classes\SettingsManager::getInstance()->getSetting('Attendance: Photo Attendance');
|
|
||||||
?><div class="span9">
|
|
||||||
|
|
||||||
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
|
||||||
<li class="active"><a id="tabAttendance" href="#tabPageAttendance"><?=t('Monitor Attendance')?></a></li>
|
|
||||||
<li class=""><a id="tabAttendanceStatus" href="#tabPageAttendanceStatus"><?=t('Current Clocked In Status')?></a></li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<div class="tab-content">
|
|
||||||
<div class="tab-pane active" id="tabPageAttendance">
|
|
||||||
<div id="Attendance" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div id="AttendanceForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="tab-pane" id="tabPageAttendanceStatus">
|
|
||||||
<div id="AttendanceStatus" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div id="AttendanceStatusForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div class="modal" id="attendancePhotoModel" tabindex="-1" role="dialog" aria-labelledby="messageModelLabel" aria-hidden="true">
|
|
||||||
<div class="modal-dialog">
|
|
||||||
<div class="modal-content">
|
|
||||||
<div class="modal-header">
|
|
||||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true"><li class="fa fa-times"/></button>
|
|
||||||
<h3 style="font-size: 17px;">Attendance Details</h3>
|
|
||||||
</div>
|
|
||||||
<div class="modal-body">
|
|
||||||
<div class="row" style="background: #f3f4f5; padding: 10px;text-align: center;">
|
|
||||||
<h4 id="attendnaceCanvasEmp"></h4>
|
|
||||||
</div>
|
|
||||||
<div class="row" style="background: #f3f4f5; padding: 10px;">
|
|
||||||
<div class="col-sm-6" style="text-align: center;">
|
|
||||||
<canvas id="attendnaceCanvasIn" height="156" width="208" style="border: 1px #222 dotted;"></canvas>
|
|
||||||
<hr/>
|
|
||||||
<span id="attendnaceCanvasPunchInTime"></span>
|
|
||||||
</div>
|
|
||||||
<div class="col-sm-6" style="text-align: center;">
|
|
||||||
<canvas id="attendnaceCanvasOut" height="156" width="208" style="border: 1px #222 dotted;"></canvas>
|
|
||||||
<hr/>
|
|
||||||
<span id="attendnaceCanvasPunchOutTime"></span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="modal-footer">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<script>
|
|
||||||
var modJsList = new Array();
|
|
||||||
modJsList['tabAttendance'] = new AttendanceAdapter('Attendance','Attendance','','in_time desc');
|
|
||||||
modJsList['tabAttendance'].setRemoteTable(true);
|
|
||||||
modJsList['tabAttendance'].setPhotoAttendance(<?=$photoAttendance == '1'?>);
|
|
||||||
modJsList['tabAttendanceStatus'] = new AttendanceStatusAdapter('AttendanceStatus','AttendanceStatus','','');
|
|
||||||
modJsList['tabAttendanceStatus'].setShowAddNew(false);
|
|
||||||
var modJs = modJsList['tabAttendance'];
|
|
||||||
|
|
||||||
</script>
|
|
||||||
<?php include APP_BASE_PATH.'footer.php';?>
|
|
||||||
@@ -1,317 +0,0 @@
|
|||||||
/*
|
|
||||||
This file is part of iCE Hrm.
|
|
||||||
|
|
||||||
iCE Hrm is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
iCE Hrm is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with iCE Hrm. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
------------------------------------------------------------------
|
|
||||||
|
|
||||||
Original work Copyright (c) 2012 [Gamonoid Media Pvt. Ltd]
|
|
||||||
Developer: Thilina Hasantha (thilina.hasantha[at]gmail.com / facebook.com/thilinah)
|
|
||||||
*/
|
|
||||||
|
|
||||||
function AttendanceAdapter(endPoint,tab,filter,orderBy) {
|
|
||||||
this.initAdapter(endPoint,tab,filter,orderBy);
|
|
||||||
this.photoAttendance = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
AttendanceAdapter.inherits(AdapterBase);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
AttendanceAdapter.method('getDataMapping', function() {
|
|
||||||
return [
|
|
||||||
"id",
|
|
||||||
"employee",
|
|
||||||
"in_time",
|
|
||||||
"out_time",
|
|
||||||
"note"
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
AttendanceAdapter.method('getHeaders', function() {
|
|
||||||
return [
|
|
||||||
{ "sTitle": "ID" ,"bVisible":false},
|
|
||||||
{ "sTitle": "Employee" },
|
|
||||||
{ "sTitle": "Time-In" },
|
|
||||||
{ "sTitle": "Time-Out"},
|
|
||||||
{ "sTitle": "Note"}
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
AttendanceAdapter.method('getFormFields', function() {
|
|
||||||
return [
|
|
||||||
[ "employee", {"label":"Employee","type":"select2","allow-null":false,"remote-source":["Employee","id","first_name+last_name"]}],
|
|
||||||
[ "id", {"label":"ID","type":"hidden"}],
|
|
||||||
[ "in_time", {"label":"Time-In","type":"datetime"}],
|
|
||||||
[ "out_time", {"label":"Time-Out","type":"datetime", "validation":"none"}],
|
|
||||||
[ "note", {"label":"Note","type":"textarea","validation":"none"}]
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
AttendanceAdapter.method('getFilters', function() {
|
|
||||||
return [
|
|
||||||
[ "employee", {"label":"Employee","type":"select2","allow-null":false,"remote-source":["Employee","id","first_name+last_name"]}]
|
|
||||||
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
AttendanceAdapter.method('setPhotoAttendance', function(val) {
|
|
||||||
this.photoAttendance = val;
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
AttendanceAdapter.method('getCustomTableParams', function() {
|
|
||||||
var that = this;
|
|
||||||
var dataTableParams = {
|
|
||||||
"aoColumnDefs": [
|
|
||||||
{
|
|
||||||
"fnRender": function(data, cell){
|
|
||||||
return that.preProcessRemoteTableData(data, cell, 2)
|
|
||||||
} ,
|
|
||||||
"aTargets": [2]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fnRender": function(data, cell){
|
|
||||||
return that.preProcessRemoteTableData(data, cell, 3)
|
|
||||||
} ,
|
|
||||||
"aTargets": [3]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fnRender": function(data, cell){
|
|
||||||
return that.preProcessRemoteTableData(data, cell, 4)
|
|
||||||
} ,
|
|
||||||
"aTargets": [4]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fnRender": that.getActionButtons,
|
|
||||||
"aTargets": [that.getDataMapping().length]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
};
|
|
||||||
return dataTableParams;
|
|
||||||
});
|
|
||||||
|
|
||||||
AttendanceAdapter.method('preProcessRemoteTableData', function(data, cell, id) {
|
|
||||||
if(id == 2){
|
|
||||||
if(cell == '0000-00-00 00:00:00' || cell == "" || cell == undefined || cell == null){
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
return Date.parse(cell).toString('yyyy MMM d <b>HH:mm</b>');
|
|
||||||
}else if(id == 3){
|
|
||||||
if(cell == '0000-00-00 00:00:00' || cell == "" || cell == undefined || cell == null){
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
return Date.parse(cell).toString('MMM d <b>HH:mm</b>');
|
|
||||||
}else if(id == 4){
|
|
||||||
if(cell != undefined && cell != null){
|
|
||||||
if(cell.length > 10){
|
|
||||||
return cell.substring(0,10)+"..";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return cell;
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
AttendanceAdapter.method('save', function() {
|
|
||||||
var validator = new FormValidation(this.getTableName()+"_submit",true,{'ShowPopup':false,"LabelErrorClass":"error"});
|
|
||||||
if(validator.checkValues()){
|
|
||||||
var params = validator.getFormParameters();
|
|
||||||
|
|
||||||
var msg = this.doCustomValidation(params);
|
|
||||||
if(msg == null){
|
|
||||||
var id = $('#'+this.getTableName()+"_submit #id").val();
|
|
||||||
if(id != null && id != undefined && id != ""){
|
|
||||||
$(params).attr('id',id);
|
|
||||||
}
|
|
||||||
|
|
||||||
var reqJson = JSON.stringify(params);
|
|
||||||
var callBackData = [];
|
|
||||||
callBackData['callBackData'] = [];
|
|
||||||
callBackData['callBackSuccess'] = 'saveSuccessCallback';
|
|
||||||
callBackData['callBackFail'] = 'saveFailCallback';
|
|
||||||
|
|
||||||
this.customAction('savePunch','admin=attendance',reqJson,callBackData);
|
|
||||||
}else{
|
|
||||||
$("#"+this.getTableName()+'Form .label').html(msg);
|
|
||||||
$("#"+this.getTableName()+'Form .label').show();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
AttendanceAdapter.method('saveSuccessCallback', function(callBackData) {
|
|
||||||
this.get(callBackData);
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
AttendanceAdapter.method('showPunchImages', function(id) {
|
|
||||||
var reqJson = JSON.stringify({id: id});
|
|
||||||
var callBackData = [];
|
|
||||||
callBackData['callBackData'] = [];
|
|
||||||
callBackData['callBackSuccess'] = 'getImagesSuccessCallback';
|
|
||||||
callBackData['callBackFail'] = 'getImagesFailCallback';
|
|
||||||
this.customAction('getImages','admin=attendance',reqJson,callBackData);
|
|
||||||
});
|
|
||||||
|
|
||||||
AttendanceAdapter.method('getImagesSuccessCallback', function(callBackData) {
|
|
||||||
$('#attendancePhotoModel').modal('show');
|
|
||||||
$('#attendnaceCanvasEmp').html(callBackData.employee_Name);
|
|
||||||
if (callBackData.in_time) {
|
|
||||||
$('#attendnaceCanvasPunchInTime').html(Date.parse(callBackData.in_time).toString('yyyy MMM d <b>HH:mm</b>'));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (callBackData.image_in) {
|
|
||||||
var myCanvas = document.getElementById('attendnaceCanvasIn');
|
|
||||||
var ctx = myCanvas.getContext('2d');
|
|
||||||
var img = new Image;
|
|
||||||
img.onload = function(){
|
|
||||||
ctx.drawImage(img,0,0); // Or at whatever offset you like
|
|
||||||
};
|
|
||||||
img.src = callBackData.image_in;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (callBackData.out_time) {
|
|
||||||
$('#attendnaceCanvasPunchOutTime').html(Date.parse(callBackData.out_time).toString('yyyy MMM d <b>HH:mm</b>'));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (callBackData.image_out) {
|
|
||||||
var myCanvas = document.getElementById('attendnaceCanvasOut');
|
|
||||||
var ctx = myCanvas.getContext('2d');
|
|
||||||
var img = new Image;
|
|
||||||
img.onload = function(){
|
|
||||||
ctx.drawImage(img,0,0); // Or at whatever offset you like
|
|
||||||
};
|
|
||||||
img.src = callBackData.image_out;
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
AttendanceAdapter.method('getImagesFailCallback', function(callBackData) {
|
|
||||||
this.showMessage("Error", callBackData);
|
|
||||||
});
|
|
||||||
|
|
||||||
AttendanceAdapter.method('getActionButtonsHtml', function(id,data) {
|
|
||||||
var editButton = '<img class="tableActionButton" src="_BASE_images/edit.png" style="cursor:pointer;" rel="tooltip" title="Edit" onclick="modJs.edit(_id_);return false;"></img>';
|
|
||||||
var deleteButton = '<img class="tableActionButton" src="_BASE_images/delete.png" style="margin-left:15px;cursor:pointer;" rel="tooltip" title="Delete" onclick="modJs.deleteRow(_id_);return false;"></img>';
|
|
||||||
var photoButton = '<img class="tableActionButton" src="_BASE_images/cam.png" style="margin-left:15px;cursor:pointer;" rel="tooltip" title="Show Photo" onclick="modJs.showPunchImages(_id_);return false;"></img>';
|
|
||||||
|
|
||||||
var html;
|
|
||||||
if (this.photoAttendance) {
|
|
||||||
html = '<div style="width:80px;">_edit__delete__photo_</div>';
|
|
||||||
} else {
|
|
||||||
html = '<div style="width:80px;">_edit__delete_</div>';
|
|
||||||
}
|
|
||||||
|
|
||||||
html = html.replace('_photo_',photoButton);
|
|
||||||
|
|
||||||
if(this.showDelete){
|
|
||||||
html = html.replace('_delete_',deleteButton);
|
|
||||||
}else{
|
|
||||||
html = html.replace('_delete_','');
|
|
||||||
}
|
|
||||||
|
|
||||||
if(this.showEdit){
|
|
||||||
html = html.replace('_edit_',editButton);
|
|
||||||
}else{
|
|
||||||
html = html.replace('_edit_','');
|
|
||||||
}
|
|
||||||
|
|
||||||
html = html.replace(/_id_/g,id);
|
|
||||||
html = html.replace(/_BASE_/g,this.baseUrl);
|
|
||||||
return html;
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
Attendance Status
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
function AttendanceStatusAdapter(endPoint,tab,filter,orderBy) {
|
|
||||||
this.initAdapter(endPoint,tab,filter,orderBy);
|
|
||||||
}
|
|
||||||
|
|
||||||
AttendanceStatusAdapter.inherits(AdapterBase);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
AttendanceStatusAdapter.method('getDataMapping', function() {
|
|
||||||
return [
|
|
||||||
"id",
|
|
||||||
"employee",
|
|
||||||
"status"
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
AttendanceStatusAdapter.method('getHeaders', function() {
|
|
||||||
return [
|
|
||||||
{ "sTitle": "ID" ,"bVisible":false},
|
|
||||||
{ "sTitle": "Employee" },
|
|
||||||
{ "sTitle": "Clocked In Status" }
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
AttendanceStatusAdapter.method('getFormFields', function() {
|
|
||||||
return [
|
|
||||||
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
AttendanceStatusAdapter.method('getFilters', function() {
|
|
||||||
return [
|
|
||||||
[ "employee", {"label":"Employee","type":"select2","allow-null":false,"remote-source":["Employee","id","first_name+last_name"]}]
|
|
||||||
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
AttendanceStatusAdapter.method('getActionButtonsHtml', function(id,data) {
|
|
||||||
|
|
||||||
|
|
||||||
html = '<div class="online-button-_COLOR_"></div>';
|
|
||||||
html = html.replace(/_BASE_/g,this.baseUrl);
|
|
||||||
if(data[2] == "Not Clocked In"){
|
|
||||||
html = html.replace(/_COLOR_/g,'gray');
|
|
||||||
}else if(data[2] == "Clocked Out"){
|
|
||||||
html = html.replace(/_COLOR_/g,'yellow');
|
|
||||||
}else if(data[2] == "Clocked In"){
|
|
||||||
html = html.replace(/_COLOR_/g,'green');
|
|
||||||
}
|
|
||||||
return html;
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
AttendanceStatusAdapter.method('isSubProfileTable', function() {
|
|
||||||
if(this.user.user_level == "Admin"){
|
|
||||||
return false;
|
|
||||||
}else{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
"label": "Monitor Attendance",
|
|
||||||
"menu": "Employees",
|
|
||||||
"order": "8",
|
|
||||||
"icon": "fa-clock-o",
|
|
||||||
"user_levels": [
|
|
||||||
"Admin",
|
|
||||||
"Manager"
|
|
||||||
],
|
|
||||||
"dashboardPosition": 5,
|
|
||||||
"permissions": [],
|
|
||||||
"model_namespace": "\\Attendance\\Common\\Model",
|
|
||||||
"manager": "\\Attendance\\Admin\\Api\\AttendanceAdminManager"
|
|
||||||
}
|
|
||||||
@@ -1,96 +0,0 @@
|
|||||||
<?php
|
|
||||||
/*
|
|
||||||
This file is part of iCE Hrm.
|
|
||||||
|
|
||||||
iCE Hrm is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
iCE Hrm is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with iCE Hrm. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
------------------------------------------------------------------
|
|
||||||
|
|
||||||
Original work Copyright (c) 2012 [Gamonoid Media Pvt. Ltd]
|
|
||||||
Developer: Thilina Hasantha (thilina.hasantha[at]gmail.com / facebook.com/thilinah)
|
|
||||||
*/
|
|
||||||
|
|
||||||
$moduleName = 'company_structure';
|
|
||||||
define('MODULE_PATH',dirname(__FILE__));
|
|
||||||
include APP_BASE_PATH.'header.php';
|
|
||||||
include APP_BASE_PATH.'modulejslibs.inc.php';
|
|
||||||
?>
|
|
||||||
<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>
|
|
||||||
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
|
|
||||||
.node circle {
|
|
||||||
cursor: pointer;
|
|
||||||
fill: #fff;
|
|
||||||
stroke: steelblue;
|
|
||||||
stroke-width: 1.5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.node text {
|
|
||||||
font-size: 11px;
|
|
||||||
}
|
|
||||||
|
|
||||||
path.link {
|
|
||||||
fill: none;
|
|
||||||
stroke: #ccc;
|
|
||||||
stroke-width: 1.5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<div class="span9">
|
|
||||||
|
|
||||||
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
|
||||||
<li class="active"><a id="tabCompanyStructure" href="#tabPageCompanyStructure"><?=t('Company Structure')?></a></li>
|
|
||||||
<li><a id="tabCompanyGraph" href="#tabPageCompanyGraph"><?=t('Company Graph')?></a></li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<div class="tab-content">
|
|
||||||
<div class="tab-pane active" id="tabPageCompanyStructure">
|
|
||||||
<div id="CompanyStructure" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div id="CompanyStructureForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="tab-pane reviewBlock" id="tabPageCompanyGraph" style="overflow-x: scroll;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<script>
|
|
||||||
var modJsList = new Array();
|
|
||||||
modJsList['tabCompanyStructure'] = new CompanyStructureAdapter('CompanyStructure');
|
|
||||||
|
|
||||||
<?php if(isset($modulePermissions['perm']['Add Company Structure']) && $modulePermissions['perm']['Add Company Structure'] == "No"){?>
|
|
||||||
modJsList['tabCompanyStructure'].setShowAddNew(false);
|
|
||||||
<?php }?>
|
|
||||||
<?php if(isset($modulePermissions['perm']['Delete Company Structure']) && $modulePermissions['perm']['Delete Company Structure'] == "No"){?>
|
|
||||||
modJsList['tabCompanyStructure'].setShowDelete(false);
|
|
||||||
<?php }?>
|
|
||||||
<?php if(isset($modulePermissions['perm']['Edit Company Structure']) && $modulePermissions['perm']['Edit Company Structure'] == "No"){?>
|
|
||||||
modJsList['tabCompanyStructure'].setShowEdit(false);
|
|
||||||
<?php }?>
|
|
||||||
|
|
||||||
|
|
||||||
modJsList['tabCompanyGraph'] = new CompanyGraphAdapter('CompanyStructure');
|
|
||||||
|
|
||||||
var modJs = modJsList['tabCompanyStructure'];
|
|
||||||
|
|
||||||
</script>
|
|
||||||
<?php include APP_BASE_PATH.'footer.php';?>
|
|
||||||
@@ -1,310 +0,0 @@
|
|||||||
/**
|
|
||||||
* Author: Thilina Hasantha
|
|
||||||
*/
|
|
||||||
|
|
||||||
function CompanyStructureAdapter(endPoint) {
|
|
||||||
this.initAdapter(endPoint);
|
|
||||||
}
|
|
||||||
|
|
||||||
CompanyStructureAdapter.inherits(AdapterBase);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
CompanyStructureAdapter.method('getDataMapping', function() {
|
|
||||||
return [
|
|
||||||
"id",
|
|
||||||
"title",
|
|
||||||
"address",
|
|
||||||
"type",
|
|
||||||
"country",
|
|
||||||
"timezone",
|
|
||||||
"parent"
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
CompanyStructureAdapter.method('getHeaders', function() {
|
|
||||||
return [
|
|
||||||
{ "sTitle": "ID","bVisible":false },
|
|
||||||
{ "sTitle": "Name" },
|
|
||||||
{ "sTitle": "Address","bSortable":false},
|
|
||||||
{ "sTitle": "Type"},
|
|
||||||
{ "sTitle": "Country", "sClass": "center" },
|
|
||||||
{ "sTitle": "Time Zone"},
|
|
||||||
{ "sTitle": "Parent Structure"}
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
CompanyStructureAdapter.method('getFormFields', function() {
|
|
||||||
return [
|
|
||||||
[ "id", {"label":"ID","type":"hidden","validation":""}],
|
|
||||||
[ "title", {"label":"Name","type":"text","validation":""}],
|
|
||||||
[ "description", {"label":"Details","type":"textarea","validation":""}],
|
|
||||||
[ "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":"select2","remote-source":["Country","code","name"]}],
|
|
||||||
[ "timezone", {"label":"Time Zone","type":"select2","allow-null":false,"remote-source":["Timezone","name","details"]}],
|
|
||||||
[ "parent", {"label":"Parent Structure","type":"select","allow-null":true,"remote-source":["CompanyStructure","id","title"]}],
|
|
||||||
[ "heads", {"label":"Heads","type":"select2multi","allow-null":true,"remote-source":["Employee","id","first_name+last_name"]}]
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Company Graph
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
function CompanyGraphAdapter(endPoint) {
|
|
||||||
this.initAdapter(endPoint);
|
|
||||||
this.nodeIdCounter = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
CompanyGraphAdapter.inherits(CompanyStructureAdapter);
|
|
||||||
|
|
||||||
|
|
||||||
CompanyGraphAdapter.method('convertToTree', function(data) {
|
|
||||||
var ice = {};
|
|
||||||
ice['id'] = -1;
|
|
||||||
ice['title'] = '';
|
|
||||||
ice['name'] = '';
|
|
||||||
ice['children'] = [];
|
|
||||||
|
|
||||||
var parent = null;
|
|
||||||
|
|
||||||
var added = {};
|
|
||||||
|
|
||||||
|
|
||||||
for(var i=0;i<data.length;i++){
|
|
||||||
|
|
||||||
data[i].name = data[i].title;
|
|
||||||
|
|
||||||
if(data[i].parent != null && data[i].parent != undefined){
|
|
||||||
parent = this.findParent(data,data[i].parent);
|
|
||||||
if(parent != null){
|
|
||||||
if(parent.children == undefined || parent.children == null){
|
|
||||||
parent.children = [];
|
|
||||||
}
|
|
||||||
parent.children.push(data[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
for(var i=0;i<data.length;i++){
|
|
||||||
if(data[i].parent == null || data[i].parent == undefined){
|
|
||||||
ice['children'].push(data[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return ice;
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
CompanyGraphAdapter.method('findParent', function(data, parent) {
|
|
||||||
for(var i=0;i<data.length;i++){
|
|
||||||
if(data[i].title == parent || data[i].title == parent){
|
|
||||||
return data[i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
CompanyGraphAdapter.method('createTable', function(elementId) {
|
|
||||||
$("#tabPageCompanyGraph").html("");
|
|
||||||
var that = this;
|
|
||||||
var sourceData = this.sourceData;
|
|
||||||
|
|
||||||
//this.fixCyclicParent(sourceData);
|
|
||||||
var treeData = this.convertToTree(sourceData);
|
|
||||||
|
|
||||||
var m = [20, 120, 20, 120],
|
|
||||||
w = 5000 - m[1] - m[3],
|
|
||||||
h = 1000 - m[0] - m[2],
|
|
||||||
root;
|
|
||||||
|
|
||||||
var tree = d3.layout.tree()
|
|
||||||
.size([h, w]);
|
|
||||||
|
|
||||||
this.diagonal = d3.svg.diagonal()
|
|
||||||
.projection(function(d) { return [d.y, d.x]; });
|
|
||||||
|
|
||||||
this.vis = d3.select("#tabPageCompanyGraph").append("svg:svg")
|
|
||||||
.attr("width", w + m[1] + m[3])
|
|
||||||
.attr("height", h + m[0] + m[2])
|
|
||||||
.append("svg:g")
|
|
||||||
.attr("transform", "translate(" + m[3] + "," + m[0] + ")");
|
|
||||||
|
|
||||||
root = treeData;
|
|
||||||
root.x0 = h / 2;
|
|
||||||
root.y0 = 0;
|
|
||||||
|
|
||||||
function toggleAll(d) {
|
|
||||||
if (d.children) {
|
|
||||||
console.log(d.name);
|
|
||||||
d.children.forEach(toggleAll);
|
|
||||||
that.toggle(d);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this.update(root, tree, root);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
CompanyGraphAdapter.method('update', function(source, tree, root) {
|
|
||||||
var that = this;
|
|
||||||
var duration = d3.event && d3.event.altKey ? 5000 : 500;
|
|
||||||
|
|
||||||
// Compute the new tree layout.
|
|
||||||
var nodes = tree.nodes(root).reverse();
|
|
||||||
|
|
||||||
// Normalize for fixed-depth.
|
|
||||||
nodes.forEach(function(d) { d.y = d.depth * 180; });
|
|
||||||
|
|
||||||
// Update the nodes<65>
|
|
||||||
var node = that.vis.selectAll("g.node")
|
|
||||||
.data(nodes, function(d) { return d.id || (d.id = ++that.nodeIdCounter); });
|
|
||||||
|
|
||||||
// Enter any new nodes at the parent's previous position.
|
|
||||||
var nodeEnter = node.enter().append("svg:g")
|
|
||||||
.attr("class", "node")
|
|
||||||
.attr("transform", function(d) { return "translate(" + source.y0 + "," + source.x0 + ")"; })
|
|
||||||
.on("click", function(d) { that.toggle(d); that.update(d, tree, root); });
|
|
||||||
|
|
||||||
nodeEnter.append("svg:circle")
|
|
||||||
.attr("r", 1e-6)
|
|
||||||
.style("fill", function(d) { return d._children ? "lightsteelblue" : "#fff"; });
|
|
||||||
|
|
||||||
nodeEnter.append("svg:text")
|
|
||||||
.attr("x", function(d) { return d.children || d._children ? -10 : 10; })
|
|
||||||
.attr("dy", ".35em")
|
|
||||||
.attr("text-anchor", function(d) { return d.children || d._children ? "end" : "start"; })
|
|
||||||
.text(function(d) { return d.name; })
|
|
||||||
.style("fill-opacity", 1e-6);
|
|
||||||
|
|
||||||
// Transition nodes to their new position.
|
|
||||||
var nodeUpdate = node.transition()
|
|
||||||
.duration(duration)
|
|
||||||
.attr("transform", function(d) { return "translate(" + d.y + "," + d.x + ")"; });
|
|
||||||
|
|
||||||
nodeUpdate.select("circle")
|
|
||||||
.attr("r", 4.5)
|
|
||||||
.style("fill", function(d) { return d._children ? "lightsteelblue" : "#fff"; });
|
|
||||||
|
|
||||||
nodeUpdate.select("text")
|
|
||||||
.style("fill-opacity", 1);
|
|
||||||
|
|
||||||
// Transition exiting nodes to the parent's new position.
|
|
||||||
var nodeExit = node.exit().transition()
|
|
||||||
.duration(duration)
|
|
||||||
.attr("transform", function(d) { return "translate(" + source.y + "," + source.x + ")"; })
|
|
||||||
.remove();
|
|
||||||
|
|
||||||
nodeExit.select("circle")
|
|
||||||
.attr("r", 1e-6);
|
|
||||||
|
|
||||||
nodeExit.select("text")
|
|
||||||
.style("fill-opacity", 1e-6);
|
|
||||||
|
|
||||||
// Update the links<6B>
|
|
||||||
var link = that.vis.selectAll("path.link")
|
|
||||||
.data(tree.links(nodes), function(d) { return d.target.id; });
|
|
||||||
|
|
||||||
// Enter any new links at the parent's previous position.
|
|
||||||
link.enter().insert("svg:path", "g")
|
|
||||||
.attr("class", "link")
|
|
||||||
.attr("d", function(d) {
|
|
||||||
var o = {x: source.x0, y: source.y0};
|
|
||||||
return that.diagonal({source: o, target: o});
|
|
||||||
})
|
|
||||||
.transition()
|
|
||||||
.duration(duration)
|
|
||||||
.attr("d", that.diagonal);
|
|
||||||
|
|
||||||
// Transition links to their new position.
|
|
||||||
link.transition()
|
|
||||||
.duration(duration)
|
|
||||||
.attr("d", that.diagonal);
|
|
||||||
|
|
||||||
// Transition exiting nodes to the parent's new position.
|
|
||||||
link.exit().transition()
|
|
||||||
.duration(duration)
|
|
||||||
.attr("d", function(d) {
|
|
||||||
var o = {x: source.x, y: source.y};
|
|
||||||
return that.diagonal({source: o, target: o});
|
|
||||||
})
|
|
||||||
.remove();
|
|
||||||
|
|
||||||
// Stash the old positions for transition.
|
|
||||||
nodes.forEach(function(d) {
|
|
||||||
d.x0 = d.x;
|
|
||||||
d.y0 = d.y;
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// Toggle children.
|
|
||||||
CompanyGraphAdapter.method('toggle', function(d) {
|
|
||||||
if (d.children) {
|
|
||||||
d._children = d.children;
|
|
||||||
d.children = null;
|
|
||||||
} else {
|
|
||||||
d.children = d._children;
|
|
||||||
d._children = null;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
CompanyGraphAdapter.method('getSourceDataById', function(id) {
|
|
||||||
|
|
||||||
for(var i=0; i< this.sourceData.length; i++){
|
|
||||||
if(this.sourceData[i].id == id){
|
|
||||||
return this.sourceData[i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
CompanyGraphAdapter.method('fixCyclicParent', function(sourceData) {
|
|
||||||
var errorMsg = "";
|
|
||||||
for(var i=0; i< sourceData.length; i++){
|
|
||||||
var obj = sourceData[i];
|
|
||||||
|
|
||||||
|
|
||||||
var curObj = obj;
|
|
||||||
var parentIdArr = {};
|
|
||||||
parentIdArr[curObj.id] = 1;
|
|
||||||
|
|
||||||
while(curObj.parent != null && curObj.parent != undefined){
|
|
||||||
var parent = this.getSourceDataById(curObj.parent);
|
|
||||||
if(parent == null){
|
|
||||||
break;
|
|
||||||
}else if(parentIdArr[parent.id] == 1){
|
|
||||||
errorMsg = obj.title +"'s parent structure set to "+parent.title+"<br/>";
|
|
||||||
obj.parent = null;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
parentIdArr[parent.id] = 1;
|
|
||||||
curObj = parent;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(errorMsg != ""){
|
|
||||||
this.showMessage("Company Structure is having a cyclic dependency","We found a cyclic dependency due to following reasons:<br/>"+errorMsg);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
CompanyGraphAdapter.method('getHelpLink', function () {
|
|
||||||
return 'http://blog.icehrm.com/docs/companystructure/';
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
{
|
|
||||||
"label":"Company Structure",
|
|
||||||
"menu":"Admin",
|
|
||||||
"order":"2",
|
|
||||||
"icon":"fa-building-o",
|
|
||||||
"user_levels":["Admin","Manager"],
|
|
||||||
"dashboardPosition":2,
|
|
||||||
|
|
||||||
"permissions":
|
|
||||||
{
|
|
||||||
"Manager":{
|
|
||||||
"Add Company Structure":"No",
|
|
||||||
"Edit Company Structure":"No",
|
|
||||||
"Delete Company Structure":"No"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"model_namespace": "\\Company\\Common\\Model",
|
|
||||||
"manager": "\\Company\\Admin\\Api\\CompanyAdminManager"
|
|
||||||
}
|
|
||||||
@@ -1,125 +0,0 @@
|
|||||||
<?php
|
|
||||||
/*
|
|
||||||
This file is part of iCE Hrm.
|
|
||||||
|
|
||||||
iCE Hrm is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
iCE Hrm is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with iCE Hrm. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
------------------------------------------------------------------
|
|
||||||
|
|
||||||
Original work Copyright (c) 2012 [Gamonoid Media Pvt. Ltd]
|
|
||||||
Developer: Thilina Hasantha (thilina.hasantha[at]gmail.com / facebook.com/thilinah)
|
|
||||||
*/
|
|
||||||
|
|
||||||
$moduleName = 'dashboard';
|
|
||||||
define('MODULE_PATH',dirname(__FILE__));
|
|
||||||
include APP_BASE_PATH.'header.php';
|
|
||||||
include APP_BASE_PATH.'modulejslibs.inc.php';
|
|
||||||
|
|
||||||
$invoices = [];
|
|
||||||
$numOfUnpaidInvoices = 0;
|
|
||||||
if (class_exists('\\Billing\\Admin\\Api\\BillingActionManager')) {
|
|
||||||
$billingActionManager = new \Billing\Admin\Api\BillingActionManager();
|
|
||||||
|
|
||||||
$invoices = $billingActionManager->getInvoices(null)->getData();
|
|
||||||
if(!empty($invoices)){
|
|
||||||
$invoices = json_decode(json_encode($invoices));
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach($invoices as $inv){
|
|
||||||
if($inv->status == "Sent"){
|
|
||||||
$numOfUnpaidInvoices++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
?><div class="span9">
|
|
||||||
<div class="row">
|
|
||||||
<?php if($numOfUnpaidInvoices == 1){?>
|
|
||||||
<div class="callout callout-warning lead" style="font-size: 14px;">
|
|
||||||
<h4>You have a pending invoice</h4>
|
|
||||||
<p style="font-weight: bold;">
|
|
||||||
You have a pending invoice. Please make you complete the payment so we can provide a better service.
|
|
||||||
<br/>
|
|
||||||
<br/>
|
|
||||||
<a href="<?=CLIENT_BASE_URL?>?g=admin&n=billing&m=admin_System#tabInvoice" class="btn btn-success btm-xs"><i class="fa fa-checkout"></i> Make a Payment</a>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<?php }else if($numOfUnpaidInvoices > 1){?>
|
|
||||||
<div class="callout callout-danger lead" style="font-size: 14px;">
|
|
||||||
<h4>You have <?=$numOfUnpaidInvoices?> pending invoices</h4>
|
|
||||||
<p style="font-weight: bold;">
|
|
||||||
You have <?=$numOfUnpaidInvoices?> pending invoice. None of your employees are currently allowed to login. Please make sure you complete payments to all the invoices to restore your service.
|
|
||||||
Please logout and login after completing the payment to get your service restored.
|
|
||||||
<br/>
|
|
||||||
<br/>
|
|
||||||
<a href="<?=CLIENT_BASE_URL?>?g=admin&n=billing&m=admin_System#tabInvoice" class="btn btn-success btm-xs"><i class="fa fa-checkout"></i> Make a Payment</a>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<?php }?>
|
|
||||||
|
|
||||||
<?php if(\Utils\SessionUtils::getSessionObject('account_locked') == "1"){?>
|
|
||||||
<div class="callout callout-danger lead" style="font-size: 14px;">
|
|
||||||
<h4>Your Trial Has Expired</h4>
|
|
||||||
<p style="font-weight: bold;">
|
|
||||||
Your Icehrm Trial has expired. Please upgrade subscription to continue. If not upgraded your account will be deleted with in few days.
|
|
||||||
<br/>
|
|
||||||
<br/>
|
|
||||||
<a href="<?=CLIENT_BASE_URL?>?g=admin&n=billing&m=admin_System" class="btn btn-success btm-xs"><i class="fa fa-checkout"></i> Upgrade Subscription</a>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<?php }?>
|
|
||||||
|
|
||||||
<?php
|
|
||||||
$moduleManagers = \Classes\BaseService::getInstance()->getModuleManagers();
|
|
||||||
$dashBoardList = array();
|
|
||||||
foreach($moduleManagers as $moduleManagerObj){
|
|
||||||
|
|
||||||
//Check if this is not an admin module
|
|
||||||
if($moduleManagerObj->getModuleType() != 'admin'){
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
$allowed = \Classes\BaseService::getInstance()->isModuleAllowedForUser($moduleManagerObj);
|
|
||||||
|
|
||||||
if(!$allowed){
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
$item = $moduleManagerObj->getDashboardItem();
|
|
||||||
if(!empty($item)) {
|
|
||||||
$index = $moduleManagerObj->getDashboardItemIndex();
|
|
||||||
$dashBoardList[$index] = $item;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ksort($dashBoardList);
|
|
||||||
|
|
||||||
foreach($dashBoardList as $k=>$v){
|
|
||||||
echo \Classes\LanguageManager::translateTnrText($v);
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<script>
|
|
||||||
var modJsList = new Array();
|
|
||||||
|
|
||||||
modJsList['tabDashboard'] = new DashboardAdapter('Dashboard','Dashboard');
|
|
||||||
|
|
||||||
var modJs = modJsList['tabDashboard'];
|
|
||||||
|
|
||||||
</script>
|
|
||||||
<?php include APP_BASE_PATH.'footer.php';?>
|
|
||||||
@@ -1,79 +0,0 @@
|
|||||||
/*
|
|
||||||
This file is part of iCE Hrm.
|
|
||||||
|
|
||||||
iCE Hrm is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
iCE Hrm is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with iCE Hrm. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
------------------------------------------------------------------
|
|
||||||
|
|
||||||
Original work Copyright (c) 2012 [Gamonoid Media Pvt. Ltd]
|
|
||||||
Developer: Thilina Hasantha (thilina.hasantha[at]gmail.com / facebook.com/thilinah)
|
|
||||||
*/
|
|
||||||
|
|
||||||
function DashboardAdapter(endPoint) {
|
|
||||||
this.initAdapter(endPoint);
|
|
||||||
}
|
|
||||||
|
|
||||||
DashboardAdapter.inherits(AdapterBase);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
DashboardAdapter.method('getDataMapping', function() {
|
|
||||||
return [];
|
|
||||||
});
|
|
||||||
|
|
||||||
DashboardAdapter.method('getHeaders', function() {
|
|
||||||
return [];
|
|
||||||
});
|
|
||||||
|
|
||||||
DashboardAdapter.method('getFormFields', function() {
|
|
||||||
return [];
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
DashboardAdapter.method('get', function(callBackData) {
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
DashboardAdapter.method('getInitData', function() {
|
|
||||||
var that = this;
|
|
||||||
var object = {};
|
|
||||||
var reqJson = JSON.stringify(object);
|
|
||||||
var callBackData = [];
|
|
||||||
callBackData['callBackData'] = [];
|
|
||||||
callBackData['callBackSuccess'] = 'getInitDataSuccessCallBack';
|
|
||||||
callBackData['callBackFail'] = 'getInitDataFailCallBack';
|
|
||||||
|
|
||||||
this.customAction('getInitData','admin=dashboard',reqJson,callBackData);
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
DashboardAdapter.method('getInitDataSuccessCallBack', function(data) {
|
|
||||||
|
|
||||||
$("#numberOfEmployees").html(data['numberOfEmployees']+" Employees");
|
|
||||||
$("#numberOfCompanyStuctures").html(data['numberOfCompanyStuctures']+" Departments");
|
|
||||||
$("#numberOfUsers").html(data['numberOfUsers']+" Users");
|
|
||||||
$("#numberOfProjects").html(data['numberOfProjects']+" Active Projects");
|
|
||||||
$("#numberOfAttendanceLastWeek").html(data['numberOfAttendanceLastWeek']+" Entries Last Week");
|
|
||||||
$("#numberOfLeaves").html(data['numberOfLeaves']+" Upcoming");
|
|
||||||
$("#numberOfTimeEntries").html(data['numberOfTimeEntries']);
|
|
||||||
$("#numberOfCandidates").html(data['numberOfCandidates']+" Candidates");
|
|
||||||
$("#numberOfJobs").html(data['numberOfJobs']+" Active");
|
|
||||||
$("#numberOfCourses").html(data['numberOfCourses']+" Courses");
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
DashboardAdapter.method('getInitDataFailCallBack', function(callBackData) {
|
|
||||||
|
|
||||||
});
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
$moduleName = 'data';
|
|
||||||
define('MODULE_PATH',dirname(__FILE__));
|
|
||||||
include APP_BASE_PATH.'header.php';
|
|
||||||
include APP_BASE_PATH.'modulejslibs.inc.php';
|
|
||||||
|
|
||||||
$moduleBuilder = new \Classes\ModuleBuilder\ModuleBuilder();
|
|
||||||
|
|
||||||
$moduleBuilder->addModuleOrGroup(new \Classes\ModuleBuilder\ModuleTab(
|
|
||||||
'DataImport','DataImport','Data Importers','DataImportAdapter','','',true
|
|
||||||
));
|
|
||||||
$moduleBuilder->addModuleOrGroup(new \Classes\ModuleBuilder\ModuleTab(
|
|
||||||
'DataImportFile','DataImportFile','Data Import Files','DataImportFileAdapter','',''
|
|
||||||
));
|
|
||||||
|
|
||||||
echo \Classes\UIManager::getInstance()->renderModule($moduleBuilder);
|
|
||||||
|
|
||||||
include APP_BASE_PATH.'footer.php';
|
|
||||||
@@ -1,177 +0,0 @@
|
|||||||
/**
|
|
||||||
* Author: Thilina Hasantha
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* DataImportAdapter
|
|
||||||
*/
|
|
||||||
|
|
||||||
function DataImportAdapter(endPoint,tab,filter,orderBy) {
|
|
||||||
this.initAdapter(endPoint,tab,filter,orderBy);
|
|
||||||
}
|
|
||||||
|
|
||||||
DataImportAdapter.inherits(AdapterBase);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
DataImportAdapter.method('getDataMapping', function() {
|
|
||||||
return [
|
|
||||||
"id",
|
|
||||||
"name",
|
|
||||||
"dataType",
|
|
||||||
"details"
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
DataImportAdapter.method('getHeaders', function() {
|
|
||||||
return [
|
|
||||||
{ "sTitle": "ID" ,"bVisible":false},
|
|
||||||
{ "sTitle": "Name" },
|
|
||||||
{ "sTitle": "Data Type" },
|
|
||||||
{ "sTitle": "Details" }
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
DataImportAdapter.method('getFormFields', function() {
|
|
||||||
return [
|
|
||||||
[ "id", {"label":"ID","type":"hidden"}],
|
|
||||||
[ "name", {"label":"Name","type":"text","validation":""}],
|
|
||||||
[ "dataType", {"label":"Data Type","type":"text","validation":""}],
|
|
||||||
[ "details", {"label":"Details","type":"textarea","validation":"none"}],
|
|
||||||
[ "columns", {"label":"Columns","type":"datagroup",
|
|
||||||
"form":[
|
|
||||||
[ "name", {"label":"Name","type":"text","validation":""}],
|
|
||||||
[ "title", {"label":"Filed Title","type":"text","validation":"none"}],
|
|
||||||
[ "type", {"label":"Type","type":"select","sort": "none","source":[["Normal","Normal"],["Reference","Reference"],["Attached","Attached"]]}],
|
|
||||||
[ "dependOn", {"label":"Depends On","type":"select","allow-null":true,"null-label":"N/A","source":[["EmergencyContact","Emergency Contacts"],["Ethnicity","Ethnicity"],["Nationality","Nationality"],["JobTitle","JobTitle"],["PayFrequency","PayFrequency"],["PayGrade","PayGrade"],["EmploymentStatus","EmploymentStatus"],["CompanyStructure","CompanyStructure"],["Employee","Employee"]]}],
|
|
||||||
[ "dependOnField", {"label":"Depends On Field","type":"text","validation":"none"}],
|
|
||||||
[ "isKeyField", {"label":"Is Key Field","type":"select","validation":"","source":[["No","No"],["Yes","Yes"]]}],
|
|
||||||
[ "idField", {"label":"Is ID Field","type":"select","validation":"","source":[["No","No"],["Yes","Yes"]]}]
|
|
||||||
],
|
|
||||||
"html":'<div id="#_id_#" class="panel panel-default"><div class="panel-heading"><b>#_name_#</b> #_delete_##_edit_#</div><div class="panel-body"><b>Header Title: </b>#_title_#<br/><span style="color:#999;font-size:11px;font-weight:bold">Type: #_type_# </span><br/></div></div>',
|
|
||||||
"validation":"none",
|
|
||||||
"custom-validate-function":function (data){
|
|
||||||
var res = {};
|
|
||||||
res['params'] = data;
|
|
||||||
res['valid'] = true;
|
|
||||||
if(data.type == 'Reference'){
|
|
||||||
if(data.dependOn == "NULL"){
|
|
||||||
res['message'] = "If the type is Reference this field should referring another table";
|
|
||||||
res['valid'] = false;
|
|
||||||
}else if(dependOnField == null || dependOnField == undefined){
|
|
||||||
res['message'] = "If the type is Reference then 'Depends On Field' can not be empty";
|
|
||||||
res['valid'] = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
}],
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* DataImportFileAdapter
|
|
||||||
*/
|
|
||||||
|
|
||||||
function DataImportFileAdapter(endPoint,tab,filter,orderBy) {
|
|
||||||
this.initAdapter(endPoint,tab,filter,orderBy);
|
|
||||||
}
|
|
||||||
|
|
||||||
DataImportFileAdapter.inherits(AdapterBase);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
DataImportFileAdapter.method('getDataMapping', function() {
|
|
||||||
return [
|
|
||||||
"id",
|
|
||||||
"name",
|
|
||||||
"data_import_definition",
|
|
||||||
"status"
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
DataImportFileAdapter.method('getHeaders', function() {
|
|
||||||
return [
|
|
||||||
{ "sTitle": "ID" ,"bVisible":false},
|
|
||||||
{ "sTitle": "Name" },
|
|
||||||
{ "sTitle": "Data Import Definition" },
|
|
||||||
{ "sTitle": "Status" }
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
DataImportFileAdapter.method('getFormFields', function() {
|
|
||||||
return [
|
|
||||||
[ "id", {"label":"ID","type":"hidden"}],
|
|
||||||
[ "name", {"label":"Name","type":"text","validation":""}],
|
|
||||||
[ "data_import_definition", {"label":"Data Import Definitions","type":"select","remote-source":["DataImport","id","name"]}],
|
|
||||||
[ "file", {"label":"File to Import","type":"fileupload","validation":"","filetypes":"csv,txt"}],
|
|
||||||
[ "details", {"label":"Last Export Result","type":"textarea","validation":"none"}]
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
DataImportFileAdapter.method('getActionButtonsHtml', function(id,data) {
|
|
||||||
var editButton = '<img class="tableActionButton" src="_BASE_images/edit.png" style="cursor:pointer;" rel="tooltip" title="Edit" onclick="modJs.edit(_id_);return false;"></img>';
|
|
||||||
var processButton = '<img class="tableActionButton" src="_BASE_images/run.png" style="margin-left:15px;cursor:pointer;" rel="tooltip" title="Process" onclick="modJs.process(_id_,\'_status_\');return false;"></img>';
|
|
||||||
var deleteButton = '<img class="tableActionButton" src="_BASE_images/delete.png" style="margin-left:15px;cursor:pointer;" rel="tooltip" title="Delete" onclick="modJs.deleteRow(_id_);return false;"></img>';
|
|
||||||
var cloneButton = '<img class="tableActionButton" src="_BASE_images/clone.png" style="margin-left:15px;cursor:pointer;" rel="tooltip" title="Copy" onclick="modJs.copyRow(_id_);return false;"></img>';
|
|
||||||
|
|
||||||
var html = '<div style="width:120px;">_edit__process__clone__delete_</div>';
|
|
||||||
|
|
||||||
|
|
||||||
if(this.showAddNew){
|
|
||||||
html = html.replace('_clone_',cloneButton);
|
|
||||||
}else{
|
|
||||||
html = html.replace('_clone_','');
|
|
||||||
}
|
|
||||||
|
|
||||||
if(this.showDelete){
|
|
||||||
html = html.replace('_delete_',deleteButton);
|
|
||||||
}else{
|
|
||||||
html = html.replace('_delete_','');
|
|
||||||
}
|
|
||||||
|
|
||||||
if(this.showEdit){
|
|
||||||
html = html.replace('_edit_',editButton);
|
|
||||||
}else{
|
|
||||||
html = html.replace('_edit_','');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (data[3] == 'Not Processed') {
|
|
||||||
html = html.replace('_process_',processButton);
|
|
||||||
} else {
|
|
||||||
html = html.replace('_process_','');
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
html = html.replace(/_id_/g,id);
|
|
||||||
html = html.replace(/_status_/g,data[6]);
|
|
||||||
html = html.replace(/_BASE_/g,this.baseUrl);
|
|
||||||
return html;
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
DataImportFileAdapter.method('process', function(id) {
|
|
||||||
var that = this;
|
|
||||||
var object = {"id":id};
|
|
||||||
var reqJson = JSON.stringify(object);
|
|
||||||
|
|
||||||
var callBackData = [];
|
|
||||||
callBackData['callBackData'] = [];
|
|
||||||
callBackData['callBackSuccess'] = 'processSuccessCallBack';
|
|
||||||
callBackData['callBackFail'] = 'processFailCallBack';
|
|
||||||
|
|
||||||
this.customAction('processDataFile','admin=data',reqJson,callBackData);
|
|
||||||
});
|
|
||||||
|
|
||||||
DataImportFileAdapter.method('processSuccessCallBack', function(callBackData) {
|
|
||||||
this.showMessage("Success", "File imported successfully.");
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
DataImportFileAdapter.method('processFailCallBack', function(callBackData) {
|
|
||||||
this.showMessage("Error", "File import unsuccessful. Result:"+callBackData);
|
|
||||||
});
|
|
||||||
@@ -1,253 +0,0 @@
|
|||||||
<div class="row">
|
|
||||||
<div class="col-xs-12 col-md-2">
|
|
||||||
<div class="row-fluid">
|
|
||||||
<div class="col-xs-12" style="text-align: center;">
|
|
||||||
<img id="profile_image__id_" src="" class="img-polaroid img-thumbnail" style="max-width: 140px;max-height: 140px;">
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-xs-12 col-md-10">
|
|
||||||
<div class="row-fluid">
|
|
||||||
<div class="col-md-12"><h2 id="name"></h2></div>
|
|
||||||
</div>
|
|
||||||
<div class="row-fluid">
|
|
||||||
<div class="col-md-12">
|
|
||||||
<p>
|
|
||||||
<i class="fa fa-phone"></i> <span id="mobile_phone"></span>
|
|
||||||
<i class="fa fa-envelope"></i> <span id="work_email"></span>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row-fluid">
|
|
||||||
<div class="col-xs-12" style="font-size:18px;border-bottom: 1px solid #DDD;margin-bottom: 10px;padding-bottom: 10px;">
|
|
||||||
<button id="employeeProfileEditInfo" class="btn btn-small btn-success" onclick="modJs.edit(_id_);" style="margin-right:10px;"><i class="fa fa-edit"></i> Edit Info</button>
|
|
||||||
<button id="employeeUploadProfileImage" onclick="showUploadDialog('profile_image__id_','Upload Profile Image','profile_image',_id_,'profile_image__id_','src','url','image');return false;" class="btn btn-small btn-primary" type="button" style="margin-right:10px;"><i class="fa fa-upload"></i> Upload Profile Image</button>
|
|
||||||
<button id="employeeDeleteProfileImage" onclick="modJs.deleteProfileImage(_id_);return false;" class="btn btn-small btn-warning" type="button" style="margin-right:10px;"><i class="fa fa-times"></i> Delete Profile Image</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row-fluid" style="border-top: 1px;">
|
|
||||||
<div class="col-xs-6 col-md-4" style="font-size:16px;">
|
|
||||||
<label class="control-label col-xs-12" style="font-size:13px;font-size:13px;">#_label_employee_id_#</label>
|
|
||||||
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="employee_id"></label>
|
|
||||||
</div>
|
|
||||||
<div class="col-xs-6 col-md-4" style="font-size:16px;">
|
|
||||||
<label class="control-label col-xs-12" style="font-size:13px;">#_label_nic_num_#</label>
|
|
||||||
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="nic_num"></label>
|
|
||||||
</div>
|
|
||||||
<div class="col-xs-6 col-md-4" style="font-size:16px;">
|
|
||||||
<label class="control-label col-xs-12" style="font-size:13px;">#_label_ssn_num_#</label>
|
|
||||||
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="ssn_num"></label>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<ul class="nav nav-tabs" id="subModTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
|
||||||
<li class="active"><a id="tabBasic" href="#tabPageBasic">Basic Information</a></li>
|
|
||||||
<li class=""><a id="tabQualifications" href="#tabPageQualifications">Qualifications</a></li>
|
|
||||||
<li class=""><a id="tabFamily" href="#tabPageFamily">Family</a></li>
|
|
||||||
<li class=""><a id="tabDocuments" href="#tabPageDocuments">Documents</a></li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<div class="tab-content">
|
|
||||||
<div class="tab-pane sub-tab active" id="tabPageBasic">
|
|
||||||
<div class="row" style="margin-left:10px;margin-top:20px;">
|
|
||||||
<div class="panel panel-default" style="width:97.5%;">
|
|
||||||
<div class="panel-heading"><h4>Personal Information</h4></div>
|
|
||||||
<div class="panel-body" id="cont_personal_information">
|
|
||||||
<div class="col-xs-6 col-md-3" style="font-size:16px;">
|
|
||||||
<label class="control-label col-xs-12" style="font-size:13px;">#_label_driving_license_#</label>
|
|
||||||
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="driving_license"></label>
|
|
||||||
</div>
|
|
||||||
<div class="col-xs-6 col-md-3" style="font-size:16px;">
|
|
||||||
<label class="control-label col-xs-12" style="font-size:13px;">#_label_other_id_#</label>
|
|
||||||
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="other_id"></label>
|
|
||||||
</div>
|
|
||||||
<div class="col-xs-6 col-md-3" style="font-size:16px;">
|
|
||||||
<label class="control-label col-xs-12" style="font-size:13px;">#_label_birthday_#</label>
|
|
||||||
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="birthday"></label>
|
|
||||||
</div>
|
|
||||||
<div class="col-xs-6 col-md-3" style="font-size:16px;">
|
|
||||||
<label class="control-label col-xs-12" style="font-size:13px;">#_label_gender_#</label>
|
|
||||||
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="gender"></label>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="col-xs-6 col-md-3" style="font-size:16px;">
|
|
||||||
<label class="control-label col-xs-12" style="font-size:13px;">#_label_nationality_#</label>
|
|
||||||
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="nationality_Name"></label>
|
|
||||||
</div>
|
|
||||||
<div class="col-xs-6 col-md-3" style="font-size:16px;">
|
|
||||||
<label class="control-label col-xs-12" style="font-size:13px;">#_label_marital_status_#</label>
|
|
||||||
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="marital_status"></label>
|
|
||||||
</div>
|
|
||||||
<div class="col-xs-6 col-md-3" style="font-size:16px;">
|
|
||||||
<label class="control-label col-xs-12" style="font-size:13px;">#_label_joined_date_#</label>
|
|
||||||
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="joined_date"></label>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row" style="margin-left:10px;margin-top:20px;">
|
|
||||||
<div class="panel panel-default" style="width:97.5%;">
|
|
||||||
<div class="panel-heading"><h4>Contact Information</h4></div>
|
|
||||||
<div class="panel-body" id="cont_contact_information">
|
|
||||||
<div class="col-xs-6 col-md-3" style="font-size:16px;">
|
|
||||||
<label class="control-label col-xs-12" style="font-size:13px;">#_label_address1_#</label>
|
|
||||||
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="address1"></label>
|
|
||||||
</div>
|
|
||||||
<div class="col-xs-6 col-md-3" style="font-size:16px;">
|
|
||||||
<label class="control-label col-xs-12" style="font-size:13px;">#_label_address2_#</label>
|
|
||||||
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="address2"></label>
|
|
||||||
</div>
|
|
||||||
<div class="col-xs-6 col-md-3" style="font-size:16px;">
|
|
||||||
<label class="control-label col-xs-12" style="font-size:13px;">#_label_city_#</label>
|
|
||||||
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="city"></label>
|
|
||||||
</div>
|
|
||||||
<div class="col-xs-6 col-md-3" style="font-size:16px;">
|
|
||||||
<label class="control-label col-xs-12" style="font-size:13px;">#_label_country_#</label>
|
|
||||||
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="country_Name"></label>
|
|
||||||
</div>
|
|
||||||
<div class="col-xs-6 col-md-3" style="font-size:16px;">
|
|
||||||
<label class="control-label col-xs-12" style="font-size:13px;">#_label_postal_code_#</label>
|
|
||||||
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="postal_code"></label>
|
|
||||||
</div>
|
|
||||||
<div class="col-xs-6 col-md-3" style="font-size:16px;">
|
|
||||||
<label class="control-label col-xs-12" style="font-size:13px;">#_label_home_phone_#</label>
|
|
||||||
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="home_phone"></label>
|
|
||||||
</div>
|
|
||||||
<div class="col-xs-6 col-md-3" style="font-size:16px;">
|
|
||||||
<label class="control-label col-xs-12" style="font-size:13px;">#_label_work_phone_#</label>
|
|
||||||
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="work_phone"></label>
|
|
||||||
</div>
|
|
||||||
<div class="col-xs-6 col-md-3" style="font-size:16px;">
|
|
||||||
<label class="control-label col-xs-12" style="font-size:13px;">#_label_private_email_#</label>
|
|
||||||
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="private_email"></label>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row" style="margin-left:10px;margin-top:20px;">
|
|
||||||
<div class="panel panel-default" style="width:97.5%;">
|
|
||||||
<div class="panel-heading"><h4>Job Details</h4></div>
|
|
||||||
<div class="panel-body" id="cont_job_details">
|
|
||||||
<div class="col-xs-6 col-md-3" style="font-size:16px;">
|
|
||||||
<label class="control-label col-xs-12" style="font-size:13px;">#_label_job_title_#</label>
|
|
||||||
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="job_title_Name"></label>
|
|
||||||
</div>
|
|
||||||
<div class="col-xs-6 col-md-3" style="font-size:16px;">
|
|
||||||
<label class="control-label col-xs-12" style="font-size:13px;">#_label_employment_status_#</label>
|
|
||||||
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="employment_status_Name"></label>
|
|
||||||
</div>
|
|
||||||
<div class="col-xs-6 col-md-3" style="font-size:16px;">
|
|
||||||
<label class="control-label col-xs-12" style="font-size:13px;">#_label_supervisor_#</label>
|
|
||||||
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="supervisor_Name"></label>
|
|
||||||
</div>
|
|
||||||
<div class="col-xs-6 col-md-3" style="font-size:16px;">
|
|
||||||
<label class="control-label col-xs-12" style="font-size:13px;">Direct Reports</label>
|
|
||||||
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="subordinates"></label>
|
|
||||||
</div>
|
|
||||||
<div class="col-xs-6 col-md-3" style="font-size:16px;">
|
|
||||||
<label class="control-label col-xs-12" style="font-size:13px;">#_label_department_#</label>
|
|
||||||
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="department_Name"></label>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<div id="customFieldsCont">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<div class="modal" id="adminUsersModel" tabindex="-1" role="dialog" aria-labelledby="messageModelLabel" aria-hidden="true">
|
|
||||||
<div class="modal-dialog">
|
|
||||||
<div class="modal-content">
|
|
||||||
<div class="modal-header">
|
|
||||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true"><li class="fa fa-times"/></button>
|
|
||||||
<h3 style="font-size: 17px;">Change User Password</h3>
|
|
||||||
</div>
|
|
||||||
<div class="modal-body">
|
|
||||||
<form id="adminUsersChangePwd">
|
|
||||||
<div class="control-group">
|
|
||||||
<div class="controls">
|
|
||||||
<span class="label label-warning" id="adminUsersChangePwd_error" style="display:none;"></span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="control-group" id="field_newpwd">
|
|
||||||
<label class="control-label" for="newpwd">New Password</label>
|
|
||||||
<div class="controls">
|
|
||||||
<input class="" type="password" id="newpwd" name="newpwd" value="" class="form-control"/>
|
|
||||||
<span class="help-inline" id="help_newpwd"></span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="control-group" id="field_conpwd">
|
|
||||||
<label class="control-label" for="conpwd">Confirm Password</label>
|
|
||||||
<div class="controls">
|
|
||||||
<input class="" type="password" id="conpwd" name="conpwd" value="" class="form-control"/>
|
|
||||||
<span class="help-inline" id="help_conpwd"></span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
<div class="modal-footer">
|
|
||||||
<button class="btn btn-primary" onclick="modJs.changePasswordConfirm();">Change Password</button>
|
|
||||||
<button class="btn" onclick="modJs.closeChangePassword();">Not Now</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div><!-- End tabPageBasic -->
|
|
||||||
<div class="tab-pane sub-tab" id="tabPageQualifications">
|
|
||||||
<div class="row" style="margin-top:20px;">
|
|
||||||
<div class="col-md-3 sub-column">
|
|
||||||
<div id="EmployeeSkillSubTab" class="" data-content="List" style="padding-left:5px;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-3 sub-column">
|
|
||||||
<div id="EmployeeEducationSubTab" class="" data-content="List" style="padding-left:5px;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-3 sub-column">
|
|
||||||
<div id="EmployeeCertificationSubTab" class="" data-content="List" style="padding-left:5px;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-3 sub-column">
|
|
||||||
<div id="EmployeeLanguageSubTab" class="" data-content="List" style="padding-left:5px;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div><!-- End tabPageQualifications -->
|
|
||||||
</div>
|
|
||||||
<div class="tab-pane sub-tab" id="tabPageFamily">
|
|
||||||
<div class="row" style="margin-top:20px;">
|
|
||||||
<div class="col-md-6 sub-column">
|
|
||||||
<div id="EmployeeEmergencyContactSubTab" class="" data-content="List" style="padding-left:5px;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-6 sub-column">
|
|
||||||
<div id="EmployeeDependentSubTab" class="" data-content="List" style="padding-left:5px;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="tab-pane sub-tab" id="tabPageDocuments">
|
|
||||||
<div class="row" style="margin-top:20px;">
|
|
||||||
<div class="col-md-12">
|
|
||||||
<div id="EmployeeDocumentSubTab" class="" data-content="List" style="padding-left:5px;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div><!-- End tabPageQualifications -->
|
|
||||||
</div>
|
|
||||||
</div><!-- End tab-content -->
|
|
||||||
@@ -1,210 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
$moduleName = 'employees';
|
|
||||||
define('MODULE_PATH',dirname(__FILE__));
|
|
||||||
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");
|
|
||||||
?><div class="span9">
|
|
||||||
|
|
||||||
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
|
||||||
<?php if($user->user_level != "Admin"){
|
|
||||||
?>
|
|
||||||
<li class="active"><a id="tabEmployee" href="#tabPageEmployee"><?=t('Employees (Direct Reports)')?></a></li>
|
|
||||||
<?php }else{ ?>
|
|
||||||
<li class="active"><a id="tabEmployee" href="#tabPageEmployee"><?=t('Employees')?></a></li>
|
|
||||||
<?php }?>
|
|
||||||
|
|
||||||
<?php if($user->user_level == "Admin"){
|
|
||||||
?>
|
|
||||||
<li><a id="tabEmployeeSkill" href="#tabPageEmployeeSkill"><?=t('Skills')?></a></li>
|
|
||||||
<li><a id="tabEmployeeEducation" href="#tabPageEmployeeEducation"><?=t('Education')?></a></li>
|
|
||||||
<li><a id="tabEmployeeCertification" href="#tabPageEmployeeCertification"><?=t('Certifications')?></a></li>
|
|
||||||
<li><a id="tabEmployeeLanguage" href="#tabPageEmployeeLanguage"><?=t('Languages')?></a></li>
|
|
||||||
<li><a id="tabEmployeeDependent" href="#tabPageEmployeeDependent"><?=t('Dependents')?></a></li>
|
|
||||||
<li><a id="tabEmergencyContact" href="#tabPageEmergencyContact"><?=t('Emergency Contacts')?></a></li>
|
|
||||||
<?php if (class_exists('\\Documents\\Admin\\Api\\DocumentsAdminManager')) {?>
|
|
||||||
<li><a id="tabEmployeeDocument" href="#tabPageEmployeeDocument"><?=t('Documents')?></a></li>
|
|
||||||
<?php } ?>
|
|
||||||
<?php }?>
|
|
||||||
<?php if($user->user_level == "Admin"){
|
|
||||||
?>
|
|
||||||
<li class="dropdown">
|
|
||||||
<a href="#" id="terminatedEmployeeMenu" class="dropdown-toggle" data-toggle="dropdown" aria-controls="terminatedEmployeeMenu-contents"><?=t('Deactivated Employees')?> <span class="caret"></span></a>
|
|
||||||
<ul class="dropdown-menu" role="menu" aria-labelledby="terminatedEmployeeMenu" id="terminatedEmployeeMenu-contents">
|
|
||||||
<li><a id="tabTerminatedEmployee" href="#tabPageTerminatedEmployee"><?=t('Temporarily Deactivated Employees')?></a></li>
|
|
||||||
<li><a id="tabArchivedEmployee" href="#tabPageArchivedEmployee"><?=t('Terminated Employee Data')?></a></li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
<?php }?>
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<div class="tab-content">
|
|
||||||
<div class="tab-pane active" id="tabPageEmployee">
|
|
||||||
<div id="Employee" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div id="EmployeeForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="tab-pane" id="tabPageEmployeeSkill">
|
|
||||||
<div id="EmployeeSkill" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div id="EmployeeSkillForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="tab-pane" id="tabPageEmployeeEducation">
|
|
||||||
<div id="EmployeeEducation" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div id="EmployeeEducationForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="tab-pane" id="tabPageEmployeeCertification">
|
|
||||||
<div id="EmployeeCertification" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div id="EmployeeCertificationForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="tab-pane" id="tabPageEmployeeLanguage">
|
|
||||||
<div id="EmployeeLanguage" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div id="EmployeeLanguageForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="tab-pane" id="tabPageEmployeeDependent">
|
|
||||||
<div id="EmployeeDependent" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div id="EmployeeDependentForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="tab-pane" id="tabPageEmergencyContact">
|
|
||||||
<div id="EmergencyContact" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div id="EmergencyContactForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="tab-pane" id="tabPageArchivedEmployee">
|
|
||||||
<div id="ArchivedEmployee" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div id="ArchivedEmployeeForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="tab-pane" id="tabPageTerminatedEmployee">
|
|
||||||
<div id="TerminatedEmployee" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div id="TerminatedEmployeeForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<?php if (class_exists('\\Documents\\Admin\\Api\\DocumentsAdminManager')) {?>
|
|
||||||
<div class="tab-pane" id="tabPageEmployeeDocument">
|
|
||||||
<div id="EmployeeDocument" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div id="EmployeeDocumentForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<?php } ?>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<script>
|
|
||||||
var modJsList = new Array();
|
|
||||||
<?php if($user->user_level != "Admin"){
|
|
||||||
?>
|
|
||||||
modJsList['tabEmployee'] = new EmployeeAdapter('Employee','Employee',{"status":"Active"});
|
|
||||||
modJsList['tabEmployee'].setShowAddNew(false);
|
|
||||||
<?php
|
|
||||||
}else{
|
|
||||||
?>
|
|
||||||
modJsList['tabEmployee'] = new EmployeeAdapter('Employee','Employee',{"status":"Active"});
|
|
||||||
<?php
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
|
|
||||||
modJsList['tabEmployee'].setRemoteTable(true);
|
|
||||||
modJsList['tabEmployee'].setFieldNameMap(<?=json_encode($fieldNameMap)?>);
|
|
||||||
modJsList['tabEmployee'].setCustomFields(<?=json_encode($customFields)?>);
|
|
||||||
|
|
||||||
modJsList['tabEmployeeSkill'] = new EmployeeSkillAdapter('EmployeeSkill');
|
|
||||||
modJsList['tabEmployeeSkill'].setRemoteTable(true);
|
|
||||||
|
|
||||||
modJsList['tabEmployeeEducation'] = new EmployeeEducationAdapter('EmployeeEducation');
|
|
||||||
modJsList['tabEmployeeEducation'].setRemoteTable(true);
|
|
||||||
|
|
||||||
modJsList['tabEmployeeCertification'] = new EmployeeCertificationAdapter('EmployeeCertification');
|
|
||||||
modJsList['tabEmployeeCertification'].setRemoteTable(true);
|
|
||||||
|
|
||||||
modJsList['tabEmployeeLanguage'] = new EmployeeLanguageAdapter('EmployeeLanguage');
|
|
||||||
modJsList['tabEmployeeLanguage'].setRemoteTable(true);
|
|
||||||
|
|
||||||
modJsList['tabEmployeeDependent'] = new EmployeeDependentAdapter('EmployeeDependent');
|
|
||||||
modJsList['tabEmployeeDependent'].setRemoteTable(true);
|
|
||||||
|
|
||||||
modJsList['tabEmergencyContact'] = new EmergencyContactAdapter('EmergencyContact');
|
|
||||||
modJsList['tabEmergencyContact'].setRemoteTable(true);
|
|
||||||
|
|
||||||
modJsList['tabEmployeeImmigration'] = new EmployeeImmigrationAdapter('EmployeeImmigration');
|
|
||||||
modJsList['tabEmployeeImmigration'].setRemoteTable(true);
|
|
||||||
|
|
||||||
modJsList['tabArchivedEmployee'] = new ArchivedEmployeeAdapter('ArchivedEmployee');
|
|
||||||
modJsList['tabArchivedEmployee'].setRemoteTable(true);
|
|
||||||
modJsList['tabArchivedEmployee'].setShowAddNew(false);
|
|
||||||
|
|
||||||
modJsList['tabTerminatedEmployee'] = new TerminatedEmployeeAdapter('Employee','TerminatedEmployee',{"status":"Terminated"});
|
|
||||||
modJsList['tabTerminatedEmployee'].setRemoteTable(true);
|
|
||||||
modJsList['tabTerminatedEmployee'].setShowAddNew(false);
|
|
||||||
|
|
||||||
<?php if (class_exists('\\Documents\\Admin\\Api\\DocumentsAdminManager')) {?>
|
|
||||||
modJsList['tabEmployeeDocument'] = new EmployeeDocumentAdapter('EmployeeDocument','EmployeeDocument');
|
|
||||||
modJsList['tabTerminatedEmployee'].setRemoteTable(true);
|
|
||||||
<?php } ?>
|
|
||||||
|
|
||||||
var modJs = modJsList['tabEmployee'];
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</script>
|
|
||||||
|
|
||||||
|
|
||||||
<div class="modal" id="createUserModel" tabindex="-1" role="dialog" aria-labelledby="messageModelLabel" aria-hidden="true">
|
|
||||||
<div class="modal-dialog">
|
|
||||||
<div class="modal-content">
|
|
||||||
<div class="modal-header">
|
|
||||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true"><li class="fa fa-times"/></button>
|
|
||||||
<h3 style="font-size: 17px;"><?=t('Employee Saved Successfully')?></h3>
|
|
||||||
</div>
|
|
||||||
<div class="modal-body">
|
|
||||||
<?=t('Employee needs a User to login to IceHrm. Do you want to create a user for this employee now?')?> <br/><br/><?=t('You can do this later through Users module if required.')?>
|
|
||||||
</div>
|
|
||||||
<div class="modal-footer">
|
|
||||||
<button class="btn btn-primary" onclick="modJs.createUser();">Yes</button>
|
|
||||||
<button class="btn" onclick="modJs.closeCreateUser();">No</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<?php include APP_BASE_PATH.'footer.php';?>
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,58 +0,0 @@
|
|||||||
<?php
|
|
||||||
/*
|
|
||||||
This file is part of Ice Framework.
|
|
||||||
|
|
||||||
------------------------------------------------------------------
|
|
||||||
|
|
||||||
Original work Copyright (c) 2012 [Gamonoid Media Pvt. Ltd]
|
|
||||||
Developer: Thilina Hasantha (thilina.hasantha[at]gmail.com / facebook.com/thilinah)
|
|
||||||
*/
|
|
||||||
|
|
||||||
$moduleName = 'fieldnames';
|
|
||||||
define('MODULE_PATH',dirname(__FILE__));
|
|
||||||
include APP_BASE_PATH.'header.php';
|
|
||||||
include APP_BASE_PATH.'modulejslibs.inc.php';
|
|
||||||
?><div class="span9">
|
|
||||||
|
|
||||||
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
|
||||||
<li class="active"><a id="tabEmployeeFieldName" href="#tabPageEmployeeFieldName"><?=t('Employee Field Names')?></a></li>
|
|
||||||
<li><a id="tabEmployeeCustomField" href="#tabPageEmployeeCustomField"><?=t('Employee Custom Fields')?></a></li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<div class="tab-content">
|
|
||||||
<div class="tab-pane active" id="tabPageEmployeeFieldName">
|
|
||||||
<div id="EmployeeFieldName" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div id="EmployeeFieldNameForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="tab-pane" id="tabPageEmployeeCustomField">
|
|
||||||
<div id="EmployeeCustomField" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div id="EmployeeCustomFieldForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<script>
|
|
||||||
var modJsList = new Array();
|
|
||||||
|
|
||||||
modJsList['tabEmployeeFieldName'] = new FieldNameAdapter('FieldNameMapping','EmployeeFieldName',{"type":"Employee"});
|
|
||||||
modJsList['tabEmployeeFieldName'].setRemoteTable(true);
|
|
||||||
modJsList['tabEmployeeFieldName'].setShowDelete(false);
|
|
||||||
modJsList['tabEmployeeFieldName'].setShowAddNew(false);
|
|
||||||
|
|
||||||
modJsList['tabEmployeeCustomField'] = new CustomFieldAdapter('CustomField','EmployeeCustomField',{"type":"Employee"},"display_order desc");
|
|
||||||
modJsList['tabEmployeeCustomField'].setRemoteTable(true);
|
|
||||||
modJsList['tabEmployeeCustomField'].setTableType("Employee");
|
|
||||||
|
|
||||||
|
|
||||||
var modJs = modJsList['tabEmployeeFieldName'];
|
|
||||||
|
|
||||||
</script>
|
|
||||||
<?php include APP_BASE_PATH.'footer.php';?>
|
|
||||||
@@ -1,145 +0,0 @@
|
|||||||
/**
|
|
||||||
* Author: Thilina Hasantha
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* FieldNameAdapter
|
|
||||||
*/
|
|
||||||
|
|
||||||
function FieldNameAdapter(endPoint,tab,filter,orderBy) {
|
|
||||||
this.initAdapter(endPoint,tab,filter,orderBy);
|
|
||||||
}
|
|
||||||
|
|
||||||
FieldNameAdapter.inherits(AdapterBase);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
FieldNameAdapter.method('getDataMapping', function() {
|
|
||||||
return [
|
|
||||||
"id",
|
|
||||||
"name",
|
|
||||||
"textOrig",
|
|
||||||
"textMapped",
|
|
||||||
"display"
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
FieldNameAdapter.method('getHeaders', function() {
|
|
||||||
return [
|
|
||||||
{ "sTitle": "ID" ,"bVisible":false},
|
|
||||||
{ "sTitle": "Name" },
|
|
||||||
{ "sTitle": "Original Text"},
|
|
||||||
{ "sTitle": "Mapped Text"},
|
|
||||||
{ "sTitle": "Display Status"}
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
FieldNameAdapter.method('getFormFields', function() {
|
|
||||||
return [
|
|
||||||
[ "id", {"label":"ID","type":"hidden"}],
|
|
||||||
[ "type", {"label":"Type","type":"placeholder","validation":""}],
|
|
||||||
[ "name", {"label":"Name","type":"placeholder","validation":""}],
|
|
||||||
[ "textOrig", {"label":"Original Text","type":"placeholder","validation":""}],
|
|
||||||
[ "textMapped", {"label":"Mapped Text","type":"text","validation":""}],
|
|
||||||
[ "display", {"label":"Display Status","type":"select","source":[["Form","Show"],["Hidden","Hidden"]]}]
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
/*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
function CustomFieldAdapter(endPoint,tab,filter,orderBy) {
|
|
||||||
this.initAdapter(endPoint,tab,filter,orderBy);
|
|
||||||
this.tableType = "";
|
|
||||||
}
|
|
||||||
|
|
||||||
CustomFieldAdapter.inherits(AdapterBase);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
CustomFieldAdapter.method('getDataMapping', function() {
|
|
||||||
return [
|
|
||||||
"id",
|
|
||||||
"name",
|
|
||||||
"display",
|
|
||||||
"display_order"
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
CustomFieldAdapter.method('getHeaders', function() {
|
|
||||||
return [
|
|
||||||
{ "sTitle": "ID" ,"bVisible":false},
|
|
||||||
{ "sTitle": "Name" },
|
|
||||||
{ "sTitle": "Display Status"},
|
|
||||||
{ "sTitle": "Priority"}
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
CustomFieldAdapter.method('getFormFields', function() {
|
|
||||||
return [
|
|
||||||
[ "id", {"label":"ID","type":"hidden"}],
|
|
||||||
//[ "type", {"label":"Type","type":"placeholder","validation":""}],
|
|
||||||
[ "name", {"label":"Name","type":"text","validation":""}],
|
|
||||||
[ "display", {"label":"Display Status","type":"select","source":[["Form","Show"],["Hidden","Hidden"]]}],
|
|
||||||
[ "field_type", {"label":"Field Type","type":"select","source":[["text","Text Field"],["textarea","Text Area"],["select","Select"],["select2","Select2"],["select2multi","Multi Select"],["fileupload","File Upload"],["date","Date"],["datetime","Date Time"],["time","Time"]]}],
|
|
||||||
[ "field_label", {"label":"Field Label","type":"text","validation":""}],
|
|
||||||
[ "field_validation", {"label":"Validation","type":"select","validation":"none","sort":"none","source":[["","Required"],["none","None"],["number","Number"],["numberOrEmpty","Number or Empty"],["float","Decimal"],["email","Email"],["emailOrEmpty","Email or Empty"]]}],
|
|
||||||
[ "field_options", {"label":"Field Options","type":"datagroup",
|
|
||||||
"form":[
|
|
||||||
[ "label", {"label":"Label","type":"text","validation":""}],
|
|
||||||
[ "value", {"label":"Value","type":"text","validation":"none"}]
|
|
||||||
],
|
|
||||||
"html":'<div id="#_id_#" class="panel panel-default"><div class="panel-body">#_delete_##_edit_#<span style="color:#999;font-size:13px;font-weight:bold">#_label_#</span>:#_value_#</div></div>',
|
|
||||||
"validation":"none"
|
|
||||||
}],
|
|
||||||
[ "display_order", {"label":"Priority","type":"text","validation":"number"}],
|
|
||||||
[ "display_section", {"label":"Display Section","type":"text","validation":""}]
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
CustomFieldAdapter.method('setTableType', function(type) {
|
|
||||||
this.tableType = type;
|
|
||||||
});
|
|
||||||
|
|
||||||
CustomFieldAdapter.method('doCustomValidation', function(params) {
|
|
||||||
var validateName= function (str) {
|
|
||||||
var name = /^[a-z][a-z0-9\._]+$/;
|
|
||||||
return str != null && name.test(str);
|
|
||||||
};
|
|
||||||
|
|
||||||
if(!validateName(params.name)){
|
|
||||||
return "Invalid name for custom field";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
return null;
|
|
||||||
});
|
|
||||||
|
|
||||||
CustomFieldAdapter.method('forceInjectValuesBeforeSave', function(params) {
|
|
||||||
|
|
||||||
|
|
||||||
//Build data field
|
|
||||||
var data = [params.name], options = [], optionsData;
|
|
||||||
data.push({});
|
|
||||||
data[1]['label'] = params.field_label;
|
|
||||||
data[1]['type'] = params.field_type;
|
|
||||||
data[1]['validation'] = params.field_validation;
|
|
||||||
if(["select","select2","select2multi"].indexOf(params.field_type) >= 0){
|
|
||||||
optionsData = JSON.parse(params.field_options);
|
|
||||||
for(index in optionsData){
|
|
||||||
options.push([optionsData[index].value, optionsData[index].label]);
|
|
||||||
}
|
|
||||||
data[1]['source'] = options;
|
|
||||||
}
|
|
||||||
if(params.field_validation == null || params.field_validation == undefined){
|
|
||||||
params.field_validation = "";
|
|
||||||
}
|
|
||||||
params.data = JSON.stringify(data);
|
|
||||||
params.type = this.tableType;
|
|
||||||
return params;
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
{
|
|
||||||
"label": "Field Names Setup",
|
|
||||||
"menu": "System",
|
|
||||||
"order": "7",
|
|
||||||
"icon": "fa-sort-alpha-asc",
|
|
||||||
"user_levels": [
|
|
||||||
"Admin"
|
|
||||||
],
|
|
||||||
"permissions": [],
|
|
||||||
"model_namespace": "\\FieldNames\\Common\\Model",
|
|
||||||
"manager": "\\FieldNames\\Admin\\Api\\FieldNamesAdminManager"
|
|
||||||
}
|
|
||||||
@@ -1,73 +0,0 @@
|
|||||||
<?php
|
|
||||||
/*
|
|
||||||
This file is part of iCE Hrm.
|
|
||||||
|
|
||||||
iCE Hrm is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
iCE Hrm is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with iCE Hrm. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
------------------------------------------------------------------
|
|
||||||
|
|
||||||
Original work Copyright (c) 2012 [Gamonoid Media Pvt. Ltd]
|
|
||||||
Developer: Thilina Hasantha (thilina.hasantha[at]gmail.com / facebook.com/thilinah)
|
|
||||||
*/
|
|
||||||
$moduleName = 'jobs';
|
|
||||||
define('MODULE_PATH',dirname(__FILE__));
|
|
||||||
include APP_BASE_PATH.'header.php';
|
|
||||||
include APP_BASE_PATH.'modulejslibs.inc.php';
|
|
||||||
?><div class="span9">
|
|
||||||
|
|
||||||
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
|
||||||
<li class="active"><a id="tabJobTitles" href="#tabPageJobTitles"><?=t('Job Titles')?></a></li>
|
|
||||||
<li><a id="tabPayGrades" href="#tabPagePayGrades"><?=t('Pay Grades')?></a></li>
|
|
||||||
<li><a id="tabEmploymentStatus" href="#tabPageEmploymentStatus"><?=t('Employment Status')?></a></li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<div class="tab-content">
|
|
||||||
<div class="tab-pane active" id="tabPageJobTitles">
|
|
||||||
<div id="JobTitle" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div id="JobTitleForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="tab-pane" id="tabPagePayGrades">
|
|
||||||
<div id="PayGrade" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div id="PayGradeForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="tab-pane" id="tabPageEmploymentStatus">
|
|
||||||
<div id="EmploymentStatus" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div id="EmploymentStatusForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<script>
|
|
||||||
var modJsList = new Array();
|
|
||||||
|
|
||||||
modJsList['tabJobTitles'] = new JobTitleAdapter('JobTitle');
|
|
||||||
modJsList['tabPayGrades'] = new PayGradeAdapter('PayGrade');
|
|
||||||
modJsList['tabEmploymentStatus'] = new EmploymentStatusAdapter('EmploymentStatus');
|
|
||||||
|
|
||||||
var modJs = modJsList['tabJobTitles'];
|
|
||||||
|
|
||||||
</script>
|
|
||||||
<?php include APP_BASE_PATH.'footer.php';?>
|
|
||||||
@@ -1,139 +0,0 @@
|
|||||||
/**
|
|
||||||
* Author: Thilina Hasantha
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* JobTitleAdapter
|
|
||||||
*/
|
|
||||||
|
|
||||||
function JobTitleAdapter(endPoint) {
|
|
||||||
this.initAdapter(endPoint);
|
|
||||||
}
|
|
||||||
|
|
||||||
JobTitleAdapter.inherits(AdapterBase);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
JobTitleAdapter.method('getDataMapping', function() {
|
|
||||||
return [
|
|
||||||
"id",
|
|
||||||
"code",
|
|
||||||
"name"
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
JobTitleAdapter.method('getHeaders', function() {
|
|
||||||
return [
|
|
||||||
{ "sTitle": "ID" ,"bVisible":false},
|
|
||||||
{ "sTitle": "Code" },
|
|
||||||
{ "sTitle": "Name" }
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
JobTitleAdapter.method('getFormFields', function() {
|
|
||||||
return [
|
|
||||||
[ "id", {"label":"ID","type":"hidden"}],
|
|
||||||
[ "code", {"label":"Job Title Code","type":"text"}],
|
|
||||||
[ "name", {"label":"Job Title","type":"text"}],
|
|
||||||
[ "description", {"label":"Description","type":"textarea"}],
|
|
||||||
[ "specification", {"label":"Specification","type":"textarea"}]
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
JobTitleAdapter.method('getHelpLink', function () {
|
|
||||||
return 'http://blog.icehrm.com/docs/jobdetails/';
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* PayGradeAdapter
|
|
||||||
*/
|
|
||||||
|
|
||||||
function PayGradeAdapter(endPoint) {
|
|
||||||
this.initAdapter(endPoint);
|
|
||||||
}
|
|
||||||
|
|
||||||
PayGradeAdapter.inherits(AdapterBase);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
PayGradeAdapter.method('getDataMapping', function() {
|
|
||||||
return [
|
|
||||||
"id",
|
|
||||||
"name",
|
|
||||||
"currency",
|
|
||||||
"min_salary",
|
|
||||||
"max_salary"
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
PayGradeAdapter.method('getHeaders', function() {
|
|
||||||
return [
|
|
||||||
{ "sTitle": "ID" ,"bVisible":false},
|
|
||||||
{ "sTitle": "Name" },
|
|
||||||
{ "sTitle": "Currency"},
|
|
||||||
{ "sTitle": "Min Salary" },
|
|
||||||
{ "sTitle": "Max Salary"}
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
PayGradeAdapter.method('getFormFields', function() {
|
|
||||||
return [
|
|
||||||
[ "id", {"label":"ID","type":"hidden"}],
|
|
||||||
[ "name", {"label":"Pay Grade Name","type":"text"}],
|
|
||||||
[ "currency", {"label":"Currency","type":"select2","remote-source":["CurrencyType","code","name"]}],
|
|
||||||
[ "min_salary", {"label":"Min Salary","type":"text","validation":"float"}],
|
|
||||||
[ "max_salary", {"label":"Max Salary","type":"text","validation":"float"}]
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
PayGradeAdapter.method('doCustomValidation', function(params) {
|
|
||||||
try{
|
|
||||||
if(parseFloat(params.min_salary)>parseFloat(params.max_salary)){
|
|
||||||
return "Min Salary should be smaller than Max Salary";
|
|
||||||
}
|
|
||||||
}catch(e){
|
|
||||||
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* EmploymentStatusAdapter
|
|
||||||
*/
|
|
||||||
|
|
||||||
function EmploymentStatusAdapter(endPoint) {
|
|
||||||
this.initAdapter(endPoint);
|
|
||||||
}
|
|
||||||
|
|
||||||
EmploymentStatusAdapter.inherits(AdapterBase);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
EmploymentStatusAdapter.method('getDataMapping', function() {
|
|
||||||
return [
|
|
||||||
"id",
|
|
||||||
"name",
|
|
||||||
"description"
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
EmploymentStatusAdapter.method('getHeaders', function() {
|
|
||||||
return [
|
|
||||||
{ "sTitle": "ID" },
|
|
||||||
{ "sTitle": "Name" },
|
|
||||||
{ "sTitle": "Description"}
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
EmploymentStatusAdapter.method('getFormFields', function() {
|
|
||||||
return [
|
|
||||||
[ "id", {"label":"ID","type":"hidden"}],
|
|
||||||
[ "name", {"label":"Employment Status","type":"text"}],
|
|
||||||
[ "description", {"label":"Description","type":"textarea","validation":""}]
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
@@ -1,64 +0,0 @@
|
|||||||
<?php
|
|
||||||
/*
|
|
||||||
This file is part of iCE Hrm.
|
|
||||||
|
|
||||||
iCE Hrm is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
iCE Hrm is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with iCE Hrm. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
------------------------------------------------------------------
|
|
||||||
|
|
||||||
Original work Copyright (c) 2012 [Gamonoid Media Pvt. Ltd]
|
|
||||||
Developer: Thilina Hasantha (thilina.hasantha[at]gmail.com / facebook.com/thilinah)
|
|
||||||
*/
|
|
||||||
|
|
||||||
$moduleName = 'CompanyLoans';
|
|
||||||
define('MODULE_PATH',dirname(__FILE__));
|
|
||||||
include APP_BASE_PATH.'header.php';
|
|
||||||
include APP_BASE_PATH.'modulejslibs.inc.php';
|
|
||||||
?><div class="span9">
|
|
||||||
|
|
||||||
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
|
||||||
<li class="active"><a id="tabCompanyLoan" href="#tabPageCompanyLoan"><?=t('Loan Types')?></a></li>
|
|
||||||
<li><a id="tabEmployeeCompanyLoan" href="#tabPageEmployeeCompanyLoan"><?=t('Employee Loans')?></a></li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<div class="tab-content">
|
|
||||||
<div class="tab-pane active" id="tabPageCompanyLoan">
|
|
||||||
<div id="CompanyLoan" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div id="CompanyLoanForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="tab-pane" id="tabPageEmployeeCompanyLoan">
|
|
||||||
<div id="EmployeeCompanyLoan" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div id="EmployeeCompanyLoanForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<script>
|
|
||||||
var modJsList = new Array();
|
|
||||||
|
|
||||||
modJsList['tabCompanyLoan'] = new CompanyLoanAdapter('CompanyLoan','CompanyLoan');
|
|
||||||
modJsList['tabEmployeeCompanyLoan'] = new EmployeeCompanyLoanAdapter('EmployeeCompanyLoan','EmployeeCompanyLoan');
|
|
||||||
|
|
||||||
var modJs = modJsList['tabCompanyLoan'];
|
|
||||||
|
|
||||||
</script>
|
|
||||||
<?php include APP_BASE_PATH.'footer.php';?>
|
|
||||||
@@ -1,102 +0,0 @@
|
|||||||
/**
|
|
||||||
* Author: Thilina Hasantha
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* CompanyLoanAdapter
|
|
||||||
*/
|
|
||||||
|
|
||||||
function CompanyLoanAdapter(endPoint) {
|
|
||||||
this.initAdapter(endPoint);
|
|
||||||
}
|
|
||||||
|
|
||||||
CompanyLoanAdapter.inherits(AdapterBase);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
CompanyLoanAdapter.method('getDataMapping', function() {
|
|
||||||
return [
|
|
||||||
"id",
|
|
||||||
"name",
|
|
||||||
"details"
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
CompanyLoanAdapter.method('getHeaders', function() {
|
|
||||||
return [
|
|
||||||
{ "sTitle": "ID" ,"bVisible":false},
|
|
||||||
{ "sTitle": "Name" },
|
|
||||||
{ "sTitle": "Details"}
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
CompanyLoanAdapter.method('getFormFields', function() {
|
|
||||||
return [
|
|
||||||
[ "id", {"label":"ID","type":"hidden"}],
|
|
||||||
[ "name", {"label":"Name","type":"text","validation":""}],
|
|
||||||
[ "details", {"label":"Details","type":"textarea","validation":"none"}]
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
/*
|
|
||||||
* EmployeeCompanyLoanAdapter
|
|
||||||
*/
|
|
||||||
|
|
||||||
function EmployeeCompanyLoanAdapter(endPoint) {
|
|
||||||
this.initAdapter(endPoint);
|
|
||||||
}
|
|
||||||
|
|
||||||
EmployeeCompanyLoanAdapter.inherits(AdapterBase);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
EmployeeCompanyLoanAdapter.method('getDataMapping', function() {
|
|
||||||
return [
|
|
||||||
"id",
|
|
||||||
"employee",
|
|
||||||
"loan",
|
|
||||||
"start_date",
|
|
||||||
"period_months",
|
|
||||||
"currency",
|
|
||||||
"amount",
|
|
||||||
"status"
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
EmployeeCompanyLoanAdapter.method('getHeaders', function() {
|
|
||||||
return [
|
|
||||||
{ "sTitle": "ID" ,"bVisible":false},
|
|
||||||
{ "sTitle": "Employee" },
|
|
||||||
{ "sTitle": "Loan Type" },
|
|
||||||
{ "sTitle": "Loan Start Date"},
|
|
||||||
{ "sTitle": "Loan Period (Months)"},
|
|
||||||
{ "sTitle": "Currency"},
|
|
||||||
{ "sTitle": "Amount"},
|
|
||||||
{ "sTitle": "Status"}
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
EmployeeCompanyLoanAdapter.method('getFormFields', function() {
|
|
||||||
return [
|
|
||||||
[ "id", {"label":"ID","type":"hidden"}],
|
|
||||||
[ "employee", {"label":"Employee","type":"select2","remote-source":["Employee","id","first_name+last_name"]}],
|
|
||||||
[ "loan", {"label":"Loan Type","type":"select","remote-source":["CompanyLoan","id","name"]}],
|
|
||||||
[ "start_date", {"label":"Loan Start Date","type":"date","validation":""}],
|
|
||||||
[ "last_installment_date", {"label":"Last Installment Date","type":"date","validation":"none"}],
|
|
||||||
[ "period_months", {"label":"Loan Period (Months)","type":"text","validation":"number"}],
|
|
||||||
[ "currency", {"label":"Currency","type":"select2","remote-source":["CurrencyType","id","name"]}],
|
|
||||||
[ "amount", {"label":"Loan Amount","type":"text","validation":"float"}],
|
|
||||||
[ "monthly_installment", {"label":"Monthly Installment","type":"text","validation":"float"}],
|
|
||||||
[ "status", {"label":"Status","type":"select","source":[["Approved","Approved"],["Paid","Paid"],["Suspended","Suspended"]]}],
|
|
||||||
[ "details", {"label":"Details","type":"textarea","validation":"none"}]
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
EmployeeCompanyLoanAdapter.method('getFilters', function() {
|
|
||||||
return [
|
|
||||||
[ "employee", {"label":"Employee","type":"select2","allow-null":true,"null-label":"All Employees","remote-source":["Employee","id","first_name+last_name"]}],
|
|
||||||
[ "loan", {"label":"Loan Type","type":"select","allow-null":true,"null-label":"All Loan Types","remote-source":["CompanyLoan","id","name"]}],
|
|
||||||
|
|
||||||
];
|
|
||||||
});
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
{
|
|
||||||
"label": "Company Loans",
|
|
||||||
"menu": "Admin",
|
|
||||||
"order": "81",
|
|
||||||
"icon": "fa-shield",
|
|
||||||
"user_levels": [
|
|
||||||
"Admin"
|
|
||||||
],
|
|
||||||
"permissions": [],
|
|
||||||
"model_namespace": "\\Loans\\Common\\Model",
|
|
||||||
"manager": "\\Loans\\Admin\\Api\\LoansAdminManager"
|
|
||||||
}
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
{
|
|
||||||
"Admin":"fa-cubes",
|
|
||||||
"Employees":"fa-users",
|
|
||||||
"Admin Reports":"fa-file-text",
|
|
||||||
"System":"fa-cogs",
|
|
||||||
"Insights":"fa-bar-chart-o",
|
|
||||||
"Payroll":"fa-money"
|
|
||||||
}
|
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
<?php
|
|
||||||
/*
|
|
||||||
This file is part of Ice Framework.
|
|
||||||
|
|
||||||
Ice Framework is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
Ice Framework is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with Ice Framework. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
------------------------------------------------------------------
|
|
||||||
|
|
||||||
Original work Copyright (c) 2012 [Gamonoid Media Pvt. Ltd]
|
|
||||||
Developer: Thilina Hasantha (thilina.hasantha[at]gmail.com / facebook.com/thilinah)
|
|
||||||
*/
|
|
||||||
|
|
||||||
$moduleName = 'metadata';
|
|
||||||
define('MODULE_PATH',dirname(__FILE__));
|
|
||||||
include APP_BASE_PATH.'header.php';
|
|
||||||
include APP_BASE_PATH.'modulejslibs.inc.php';
|
|
||||||
|
|
||||||
$moduleBuilder = new \Classes\ModuleBuilder\ModuleBuilder();
|
|
||||||
|
|
||||||
$moduleBuilder->addModuleOrGroup(new \Classes\ModuleBuilder\ModuleTab(
|
|
||||||
'Country','Country','Countries','CountryAdapter','','',true
|
|
||||||
));
|
|
||||||
$moduleBuilder->addModuleOrGroup(new \Classes\ModuleBuilder\ModuleTab(
|
|
||||||
'Province','Province','Provinces','ProvinceAdapter','',''
|
|
||||||
));
|
|
||||||
$moduleBuilder->addModuleOrGroup(new \Classes\ModuleBuilder\ModuleTab(
|
|
||||||
'CurrencyType','CurrencyType','Currency Types','CurrencyTypeAdapter','',''
|
|
||||||
));
|
|
||||||
$moduleBuilder->addModuleOrGroup(new \Classes\ModuleBuilder\ModuleTab(
|
|
||||||
'Nationality','Nationality','Nationality','NationalityAdapter','',''
|
|
||||||
));
|
|
||||||
$moduleBuilder->addModuleOrGroup(new \Classes\ModuleBuilder\ModuleTab(
|
|
||||||
'Ethnicity','Ethnicity','Ethnicity','EthnicityAdapter','',''
|
|
||||||
));
|
|
||||||
$moduleBuilder->addModuleOrGroup(new \Classes\ModuleBuilder\ModuleTab(
|
|
||||||
'ImmigrationStatus','ImmigrationStatus','Immigration Status','ImmigrationStatusAdapter','',''
|
|
||||||
));
|
|
||||||
|
|
||||||
|
|
||||||
echo \Classes\UIManager::getInstance()->renderModule($moduleBuilder);
|
|
||||||
|
|
||||||
include APP_BASE_PATH.'footer.php';
|
|
||||||
@@ -1,158 +0,0 @@
|
|||||||
/**
|
|
||||||
* Author: Thilina Hasantha
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* CountryAdapter
|
|
||||||
*/
|
|
||||||
|
|
||||||
function CountryAdapter(endPoint) {
|
|
||||||
this.initAdapter(endPoint);
|
|
||||||
}
|
|
||||||
|
|
||||||
CountryAdapter.inherits(AdapterBase);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
CountryAdapter.method('getDataMapping', function() {
|
|
||||||
return [
|
|
||||||
"id",
|
|
||||||
"code",
|
|
||||||
"name"
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
CountryAdapter.method('getHeaders', function() {
|
|
||||||
return [
|
|
||||||
{ "sTitle": "ID" ,"bVisible":false},
|
|
||||||
{ "sTitle": "Code" },
|
|
||||||
{ "sTitle": "Name"}
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
CountryAdapter.method('getFormFields', function() {
|
|
||||||
return [
|
|
||||||
[ "id", {"label":"ID","type":"hidden"}],
|
|
||||||
[ "code", {"label":"Code","type":"text","validation":""}],
|
|
||||||
[ "name", {"label":"Name","type":"text","validation":""}]
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* ProvinceAdapter
|
|
||||||
*/
|
|
||||||
|
|
||||||
function ProvinceAdapter(endPoint) {
|
|
||||||
this.initAdapter(endPoint);
|
|
||||||
}
|
|
||||||
|
|
||||||
ProvinceAdapter.inherits(AdapterBase);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
ProvinceAdapter.method('getDataMapping', function() {
|
|
||||||
return [
|
|
||||||
"id",
|
|
||||||
"code",
|
|
||||||
"name",
|
|
||||||
"country"
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
ProvinceAdapter.method('getHeaders', function() {
|
|
||||||
return [
|
|
||||||
{ "sTitle": "ID" ,"bVisible":false},
|
|
||||||
{ "sTitle": "Code" },
|
|
||||||
{ "sTitle": "Name"},
|
|
||||||
{ "sTitle": "Country"},
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
ProvinceAdapter.method('getFormFields', function() {
|
|
||||||
return [
|
|
||||||
[ "id", {"label":"ID","type":"hidden"}],
|
|
||||||
[ "code", {"label":"Code","type":"text","validation":""}],
|
|
||||||
[ "name", {"label":"Name","type":"text","validation":""}],
|
|
||||||
[ "country", {"label":"Country","type":"select2","remote-source":["Country","code","name"]}]
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
ProvinceAdapter.method('getFilters', function() {
|
|
||||||
return [
|
|
||||||
[ "country", {"label":"Country","type":"select2","remote-source":["Country","code","name"]}]
|
|
||||||
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* CurrencyTypeAdapter
|
|
||||||
*/
|
|
||||||
|
|
||||||
function CurrencyTypeAdapter(endPoint) {
|
|
||||||
this.initAdapter(endPoint);
|
|
||||||
}
|
|
||||||
|
|
||||||
CurrencyTypeAdapter.inherits(AdapterBase);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
CurrencyTypeAdapter.method('getDataMapping', function() {
|
|
||||||
return [
|
|
||||||
"id",
|
|
||||||
"code",
|
|
||||||
"name"
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
CurrencyTypeAdapter.method('getHeaders', function() {
|
|
||||||
return [
|
|
||||||
{ "sTitle": "ID" ,"bVisible":false},
|
|
||||||
{ "sTitle": "Code" },
|
|
||||||
{ "sTitle": "Name"}
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
CurrencyTypeAdapter.method('getFormFields', function() {
|
|
||||||
return [
|
|
||||||
[ "id", {"label":"ID","type":"hidden"}],
|
|
||||||
[ "code", {"label":"Code","type":"text","validation":""}],
|
|
||||||
[ "name", {"label":"Name","type":"text","validation":""}]
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
/**
|
|
||||||
* NationalityAdapter
|
|
||||||
*/
|
|
||||||
|
|
||||||
function NationalityAdapter(endPoint) {
|
|
||||||
this.initAdapter(endPoint);
|
|
||||||
}
|
|
||||||
|
|
||||||
NationalityAdapter.inherits(IdNameAdapter);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* ImmigrationStatusAdapter
|
|
||||||
*/
|
|
||||||
|
|
||||||
function ImmigrationStatusAdapter(endPoint) {
|
|
||||||
this.initAdapter(endPoint);
|
|
||||||
}
|
|
||||||
|
|
||||||
ImmigrationStatusAdapter.inherits(IdNameAdapter);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* EthnicityAdapter
|
|
||||||
*/
|
|
||||||
|
|
||||||
function EthnicityAdapter(endPoint) {
|
|
||||||
this.initAdapter(endPoint);
|
|
||||||
}
|
|
||||||
|
|
||||||
EthnicityAdapter.inherits(IdNameAdapter);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
{
|
|
||||||
"label": "Manage Metadata",
|
|
||||||
"menu": "System",
|
|
||||||
"order": "6",
|
|
||||||
"icon": "fa-sort-alpha-asc",
|
|
||||||
"user_levels": [
|
|
||||||
"Admin"
|
|
||||||
],
|
|
||||||
"permissions": [],
|
|
||||||
"model_namespace": "\\Metadata\\Common\\Model",
|
|
||||||
"manager": "\\Metadata\\Admin\\Api\\MetadataAdminManager"
|
|
||||||
}
|
|
||||||
@@ -1,207 +0,0 @@
|
|||||||
<?php
|
|
||||||
/*
|
|
||||||
This file is part of iCE Hrm.
|
|
||||||
|
|
||||||
iCE Hrm is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
iCE Hrm is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with iCE Hrm. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
------------------------------------------------------------------
|
|
||||||
|
|
||||||
Original work Copyright (c) 2012 [Gamonoid Media Pvt. Ltd]
|
|
||||||
Developer: Thilina Hasantha (thilina.hasantha[at]gmail.com / facebook.com/thilinah)
|
|
||||||
*/
|
|
||||||
|
|
||||||
$moduleName = 'Modules';
|
|
||||||
define('MODULE_PATH',dirname(__FILE__));
|
|
||||||
include APP_BASE_PATH.'header.php';
|
|
||||||
include APP_BASE_PATH.'modulejslibs.inc.php';
|
|
||||||
$groupsStr = \Classes\SettingsManager::getInstance()->getSetting("Modules : Group");
|
|
||||||
$groups = array();
|
|
||||||
if(!empty($groupsStr)){
|
|
||||||
$groups = explode(",",$groupsStr);
|
|
||||||
}
|
|
||||||
if(empty($groups)){
|
|
||||||
$groups[] = 'all';
|
|
||||||
}
|
|
||||||
?><div class="span9">
|
|
||||||
|
|
||||||
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0;margin-left:5px;border-bottom: none;">
|
|
||||||
<li class="active"><a id="tabUsage" href="#tabPageUsage"><?=t('Usage')?></a></li>
|
|
||||||
<li class=""><a id="tabModule" href="#tabPageModule"><?=t('Modules')?></a></li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<div class="tab-content">
|
|
||||||
<div class="tab-pane active" id="tabPageUsage">
|
|
||||||
<div id="Usage" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
|
||||||
<div class="callout callout-info">
|
|
||||||
<h3>How Do You Want to Use IceHrm</h3>
|
|
||||||
|
|
||||||
<p style="font-size: 1.2em;">
|
|
||||||
In order to make IceHrm user interface much simpler to use for you and your employees you
|
|
||||||
can select the purpose of using IceHrm for your company. This will disable unwanted modules
|
|
||||||
and provide you a better user experience.
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<hr/>
|
|
||||||
|
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-lg-4 col-xs-12">
|
|
||||||
<div class="callout callout-gray">
|
|
||||||
<h4 class="list-group-item-heading">
|
|
||||||
<input id="all" class="module-check" type="checkbox" value="all"/>
|
|
||||||
Use All Available Modules</h4>
|
|
||||||
<p style="font-size: 1.2em;">
|
|
||||||
Use all the Available Modules in IceHrm. This option will enable all the modules
|
|
||||||
including Employee Management, Leave Management, Time Sheets, Attendance, Training,
|
|
||||||
Expenses, Document Management, Travel, Recruitment Management and Payroll
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<div class="callout callout-white">
|
|
||||||
<h4 class="list-group-item-heading">
|
|
||||||
<input id="leave" class="module-check" type="checkbox" value="leave"/>
|
|
||||||
Leave Management System
|
|
||||||
</h4>
|
|
||||||
<p style="font-size: 1.2em;">
|
|
||||||
Use IceHrm as a Leave / Vacation Management System, Allow Employees to Apply for leave,
|
|
||||||
Approve leave requests and track leave balances
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<div class="callout callout-gray">
|
|
||||||
<h4 class="list-group-item-heading">
|
|
||||||
<input id="documents" class="module-check" type="checkbox" value="documents"/>
|
|
||||||
Document Management System
|
|
||||||
</h4>
|
|
||||||
<p style="font-size: 1.2em;">
|
|
||||||
Use IceHrm as a Document Management System, Allow Employees upload documents, Automated
|
|
||||||
notifications for expiring documents, Add company documents and share with specific
|
|
||||||
employees or departments.
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-lg-4 col-xs-12">
|
|
||||||
<div class="callout callout-white">
|
|
||||||
<h4 class="list-group-item-heading">
|
|
||||||
<input id="attendance" class="module-check" type="checkbox" value="attendance"/>
|
|
||||||
Time Tracking System
|
|
||||||
</h4>
|
|
||||||
<p style="font-size: 1.2em;"><br/>
|
|
||||||
Use IceHrm as an Attendance Management and Time Tracking System. Let employees record
|
|
||||||
attendance and fill in time sheets.
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<div class="callout callout-gray">
|
|
||||||
<h4 class="list-group-item-heading">
|
|
||||||
<input id="training" class="module-check" type="checkbox" value="training"/>
|
|
||||||
Training Management System
|
|
||||||
</h4>
|
|
||||||
<p style="font-size: 1.2em;">
|
|
||||||
Use IceHrm as a Training Management System. Create courses and training sessions. Let
|
|
||||||
employees subscribe to training sessions and allow them to submit feedback with training
|
|
||||||
certificates for auditing purposes.
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<div class="callout callout-white">
|
|
||||||
<h4 class="list-group-item-heading">
|
|
||||||
<input id="finance" class="module-check" type="checkbox" value="finance"/>
|
|
||||||
Expense and Travel Management
|
|
||||||
</h4>
|
|
||||||
<p style="font-size: 1.2em;">
|
|
||||||
Get your employees to submit expense claims and let managers approve. Also combine
|
|
||||||
approved expenses with payroll module to have those added to employees salary.
|
|
||||||
Also you can track and approve employee travel requests
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<?php if(defined('RECRUITMENT_ENABLED') && RECRUITMENT_ENABLED == true){?>
|
|
||||||
<div class="col-lg-4 col-xs-12">
|
|
||||||
<div class="callout callout-gray">
|
|
||||||
<h4 class="list-group-item-heading">
|
|
||||||
<input id="recruitment" class="module-check" type="checkbox" value="recruitment"/>
|
|
||||||
Applicant Tracking System
|
|
||||||
</h4>
|
|
||||||
<p style="font-size: 1.2em;">
|
|
||||||
Define available vacancies in your company and track applicants. Schedule interviews
|
|
||||||
and track progress of your candidates
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<div class="callout callout-white">
|
|
||||||
<h4 class="list-group-item-heading">
|
|
||||||
<input id="payroll" class="module-check" type="checkbox" value="payroll"/>
|
|
||||||
Salary and Payroll
|
|
||||||
</h4>
|
|
||||||
<p style="font-size: 1.2em;">
|
|
||||||
Process your company payroll using IceHrm and Store employee salary
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<?php }?>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<button onclick="modJs.saveUsage();" class="saveBtn btn btn-primary">
|
|
||||||
<i class="fa fa-save"></i><t>Save</t>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="tab-pane" id="tabPageModule">
|
|
||||||
<div id="Module" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div id="ModuleForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<script>
|
|
||||||
var modJsList = [];
|
|
||||||
|
|
||||||
modJsList['tabModule'] = new ModuleAdapter('Module','Module');
|
|
||||||
modJsList['tabModule'].setShowAddNew(false);
|
|
||||||
|
|
||||||
modJsList['tabUsage'] = new UsageAdapter('Usage','Usage');
|
|
||||||
var modJs = modJsList['tabUsage'];
|
|
||||||
|
|
||||||
$(document).ready(function(){
|
|
||||||
|
|
||||||
|
|
||||||
$("#all").click(function() {
|
|
||||||
if($(this).is(":checked")) {
|
|
||||||
|
|
||||||
$('.module-check').each(function(){
|
|
||||||
if($(this).val() != 'all'){
|
|
||||||
$(this).removeAttr('checked');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
$(".module-check").click(function() {
|
|
||||||
if($(this).val() != 'all') {
|
|
||||||
$("#all").removeAttr('checked');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
$('.module-check').each(function(){
|
|
||||||
if(jQuery.inArray($(this).val(), <?=json_encode($groups)?>) !== -1){
|
|
||||||
$(this).attr('checked','checked');
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
})
|
|
||||||
|
|
||||||
</script>
|
|
||||||
<?php include APP_BASE_PATH.'footer.php';?>
|
|
||||||
@@ -1,164 +0,0 @@
|
|||||||
/*
|
|
||||||
This file is part of iCE Hrm.
|
|
||||||
|
|
||||||
iCE Hrm is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
iCE Hrm is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with iCE Hrm. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
------------------------------------------------------------------
|
|
||||||
|
|
||||||
Original work Copyright (c) 2012 [Gamonoid Media Pvt. Ltd]
|
|
||||||
Developer: Thilina Hasantha (thilina.hasantha[at]gmail.com / facebook.com/thilinah)
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* ModuleAdapter
|
|
||||||
*/
|
|
||||||
|
|
||||||
function ModuleAdapter(endPoint) {
|
|
||||||
this.initAdapter(endPoint);
|
|
||||||
}
|
|
||||||
|
|
||||||
ModuleAdapter.inherits(AdapterBase);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
ModuleAdapter.method('getDataMapping', function() {
|
|
||||||
return [
|
|
||||||
"id",
|
|
||||||
"label",
|
|
||||||
"menu",
|
|
||||||
"mod_group",
|
|
||||||
"mod_order",
|
|
||||||
"status",
|
|
||||||
"version",
|
|
||||||
"update_path"
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
ModuleAdapter.method('getHeaders', function() {
|
|
||||||
return [
|
|
||||||
{ "sTitle": "ID" ,"bVisible":false},
|
|
||||||
{ "sTitle": "Name" },
|
|
||||||
{ "sTitle": "Menu" ,"bVisible":false},
|
|
||||||
{ "sTitle": "Group"},
|
|
||||||
{ "sTitle": "Order"},
|
|
||||||
{ "sTitle": "Status"},
|
|
||||||
{ "sTitle": "Version","bVisible":false},
|
|
||||||
{ "sTitle": "Path" ,"bVisible":false}
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
ModuleAdapter.method('getFormFields', function() {
|
|
||||||
return [
|
|
||||||
[ "id", {"label":"ID","type":"hidden"}],
|
|
||||||
[ "label", {"label":"Label","type":"text","validation":""}],
|
|
||||||
[ "status", {"label":"Status","type":"select","source":[["Enabled","Enabled"],["Disabled","Disabled"]]}],
|
|
||||||
[ "user_levels", {"label":"User Levels","type":"select2multi","source":[["Admin","Admin"],["Manager","Manager"],["Employee","Employee"],["Other","Other"]]}],
|
|
||||||
[ "user_roles", {"label":"User Roles","type":"select2multi","remote-source":["UserRole","id","name"]}]
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
ModuleAdapter.method('getActionButtonsHtml', function(id,data) {
|
|
||||||
|
|
||||||
|
|
||||||
var nonEditableFields = {};
|
|
||||||
nonEditableFields["admin_Company Structure"] = 1;
|
|
||||||
nonEditableFields["admin_Employees"] = 1;
|
|
||||||
nonEditableFields["admin_Job Details Setup"] = 1;
|
|
||||||
nonEditableFields["admin_Leaves"] = 1;
|
|
||||||
nonEditableFields["admin_Manage Modules"] = 1;
|
|
||||||
nonEditableFields["admin_Projects"] = 1;
|
|
||||||
nonEditableFields["admin_Qualifications"] = 1;
|
|
||||||
nonEditableFields["admin_Settings"] = 1;
|
|
||||||
nonEditableFields["admin_Users"] = 1;
|
|
||||||
nonEditableFields["admin_Upgrade"] = 1;
|
|
||||||
nonEditableFields["admin_Dashboard"] = 1;
|
|
||||||
|
|
||||||
nonEditableFields["user_Basic Information"] = 1;
|
|
||||||
nonEditableFields["user_Dashboard"] = 1;
|
|
||||||
|
|
||||||
if(nonEditableFields[data[3]+"_"+data[1]] == 1){
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
var html = '<div style="width:80px;"><img class="tableActionButton" src="_BASE_images/edit.png" style="cursor:pointer;" rel="tooltip" title="Edit" onclick="modJs.edit(_id_);return false;"/></div>';
|
|
||||||
html = html.replace(/_id_/g,id);
|
|
||||||
html = html.replace(/_BASE_/g,this.baseUrl);
|
|
||||||
return html;
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function UsageAdapter(endPoint) {
|
|
||||||
this.initAdapter(endPoint);
|
|
||||||
}
|
|
||||||
|
|
||||||
UsageAdapter.inherits(AdapterBase);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
UsageAdapter.method('getDataMapping', function() {
|
|
||||||
return [];
|
|
||||||
});
|
|
||||||
|
|
||||||
UsageAdapter.method('getHeaders', function() {
|
|
||||||
return [];
|
|
||||||
});
|
|
||||||
|
|
||||||
UsageAdapter.method('getFormFields', function() {
|
|
||||||
return [];
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
UsageAdapter.method('get', function(callBackData) {
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
UsageAdapter.method('saveUsage', function() {
|
|
||||||
var that = this;
|
|
||||||
var object = {};
|
|
||||||
var arr = [];
|
|
||||||
$('.module-check').each(function(){
|
|
||||||
if($(this).is(":checked")) {
|
|
||||||
arr.push($(this).val());
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
if(arr.length == 0){
|
|
||||||
alert("Please select one or more module groups");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
object['groups'] = arr.join(",");
|
|
||||||
|
|
||||||
var reqJson = JSON.stringify(object);
|
|
||||||
var callBackData = [];
|
|
||||||
callBackData['callBackData'] = [];
|
|
||||||
callBackData['callBackSuccess'] = 'getInitDataSuccessCallBack';
|
|
||||||
callBackData['callBackFail'] = 'getInitDataFailCallBack';
|
|
||||||
|
|
||||||
this.customAction('saveUsage','admin=modules',reqJson,callBackData);
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
UsageAdapter.method('saveUsageSuccessCallBack', function(data) {
|
|
||||||
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
UsageAdapter.method('saveUsageFailCallBack', function(callBackData) {
|
|
||||||
|
|
||||||
});
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
<?php
|
|
||||||
/*
|
|
||||||
This file is part of iCE Hrm.
|
|
||||||
|
|
||||||
iCE Hrm is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
iCE Hrm is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with iCE Hrm. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
------------------------------------------------------------------
|
|
||||||
|
|
||||||
Original work Copyright (c) 2012 [Gamonoid Media Pvt. Ltd]
|
|
||||||
Developer: Thilina Hasantha (thilina.hasantha[at]gmail.com / facebook.com/thilinah)
|
|
||||||
*/
|
|
||||||
|
|
||||||
$moduleName = 'travel';
|
|
||||||
define('MODULE_PATH',dirname(__FILE__));
|
|
||||||
include APP_BASE_PATH.'header.php';
|
|
||||||
include APP_BASE_PATH.'modulejslibs.inc.php';
|
|
||||||
|
|
||||||
$options = array();
|
|
||||||
$options['setRemoteTable'] = 'true';
|
|
||||||
|
|
||||||
$moduleBuilder = new \Classes\ModuleBuilder\ModuleBuilder();
|
|
||||||
$moduleBuilder->addModuleOrGroup(new \Classes\ModuleBuilder\ModuleTab(
|
|
||||||
'OvertimeCategory','OvertimeCategory','Overtime Categories','OvertimeCategoryAdapter','','',true,$options
|
|
||||||
));
|
|
||||||
$moduleBuilder->addModuleOrGroup(new \Classes\ModuleBuilder\ModuleTab(
|
|
||||||
'EmployeeOvertime','EmployeeOvertime','Overtime Requests','EmployeeOvertimeAdminAdapter','','',false,$options
|
|
||||||
));
|
|
||||||
echo \Classes\UIManager::getInstance()->renderModule($moduleBuilder);
|
|
||||||
|
|
||||||
|
|
||||||
$itemName = 'OvertimeRequest';
|
|
||||||
$moduleName = 'Time Management';
|
|
||||||
$itemNameLower = strtolower($itemName);
|
|
||||||
|
|
||||||
include APP_BASE_PATH.'footer.php';
|
|
||||||
@@ -1,99 +0,0 @@
|
|||||||
/**
|
|
||||||
* Author: Thilina Hasantha
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* OvertimeCategoryAdapter
|
|
||||||
*/
|
|
||||||
|
|
||||||
function OvertimeCategoryAdapter(endPoint) {
|
|
||||||
this.initAdapter(endPoint);
|
|
||||||
}
|
|
||||||
|
|
||||||
OvertimeCategoryAdapter.inherits(AdapterBase);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
OvertimeCategoryAdapter.method('getDataMapping', function() {
|
|
||||||
return [
|
|
||||||
"id",
|
|
||||||
"name"
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
OvertimeCategoryAdapter.method('getHeaders', function() {
|
|
||||||
return [
|
|
||||||
{ "sTitle": "ID" ,"bVisible":false},
|
|
||||||
{ "sTitle": "Name" }
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
OvertimeCategoryAdapter.method('getFormFields', function() {
|
|
||||||
return [
|
|
||||||
[ "id", {"label":"ID","type":"hidden"}],
|
|
||||||
[ "name", {"label":"Name","type":"text","validation":""}]
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* EmployeeOvertimeAdminAdapter
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
function EmployeeOvertimeAdminAdapter(endPoint,tab,filter,orderBy) {
|
|
||||||
this.initAdapter(endPoint,tab,filter,orderBy);
|
|
||||||
this.itemName = 'OvertimeRequest';
|
|
||||||
this.itemNameLower = 'overtimerequest';
|
|
||||||
this.modulePathName = 'overtime';
|
|
||||||
}
|
|
||||||
|
|
||||||
EmployeeOvertimeAdminAdapter.inherits(ApproveAdminAdapter);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
EmployeeOvertimeAdminAdapter.method('getDataMapping', function() {
|
|
||||||
return [
|
|
||||||
"id",
|
|
||||||
"employee",
|
|
||||||
"category",
|
|
||||||
"start_time",
|
|
||||||
"end_time",
|
|
||||||
"project",
|
|
||||||
"status"
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
EmployeeOvertimeAdminAdapter.method('getHeaders', function() {
|
|
||||||
return [
|
|
||||||
{ "sTitle": "ID" ,"bVisible":false},
|
|
||||||
{ "sTitle": "Employee" },
|
|
||||||
{ "sTitle": "Category" },
|
|
||||||
{ "sTitle": "Start Time" },
|
|
||||||
{ "sTitle": "End Time"},
|
|
||||||
{ "sTitle": "Project"},
|
|
||||||
{ "sTitle": "Status"}
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
EmployeeOvertimeAdminAdapter.method('getFormFields', function() {
|
|
||||||
return [
|
|
||||||
["id", {"label": "ID", "type": "hidden"}],
|
|
||||||
["employee", {
|
|
||||||
"label": "Employee",
|
|
||||||
"type": "select2",
|
|
||||||
"sort": "none",
|
|
||||||
"allow-null": false,
|
|
||||||
"remote-source": ["Employee", "id", "first_name+last_name", "getActiveSubordinateEmployees"]
|
|
||||||
}],
|
|
||||||
["category", {"label": "Category", "type": "select2", "allow-null":false, "remote-source": ["OvertimeCategory", "id", "name"]}],
|
|
||||||
["start_time", {"label": "Start Time", "type": "datetime", "validation": ""}],
|
|
||||||
["end_time", {"label": "End Time", "type": "datetime", "validation": ""}],
|
|
||||||
["project", {"label": "Project", "type": "select2", "allow-null":true,"null=label":"none","remote-source": ["Project", "id", "name"]}],
|
|
||||||
["notes", {"label": "Notes", "type": "textarea", "validation": "none"}]
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
"label": "Overtime Administration",
|
|
||||||
"menu": "Employees",
|
|
||||||
"order": "94",
|
|
||||||
"icon": "fa-align-center",
|
|
||||||
"user_levels": [
|
|
||||||
"Admin",
|
|
||||||
"Manager"
|
|
||||||
],
|
|
||||||
"dashboardPosition": 13,
|
|
||||||
"permissions": [],
|
|
||||||
"model_namespace": "\\Overtime\\Common\\Model",
|
|
||||||
"manager": "\\Overtime\\Admin\\Api\\OvertimeAdminManager"
|
|
||||||
}
|
|
||||||
@@ -1,151 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
$moduleName = 'payroll';
|
|
||||||
define('MODULE_PATH',dirname(__FILE__));
|
|
||||||
include APP_BASE_PATH.'header.php';
|
|
||||||
include APP_BASE_PATH.'modulejslibs.inc.php';
|
|
||||||
?><script type="text/javascript" src="<?=BASE_URL?>js/mindmup-editabletable.js?v=<?=$jsVersion?>"></script>
|
|
||||||
<style type="text/css">
|
|
||||||
.sorting_disabled{min-width: 80px;}
|
|
||||||
</style>
|
|
||||||
<div class="span9">
|
|
||||||
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
|
||||||
<li class="active"><a id="tabPayrollEmployee" href="#tabPagePayrollEmployee"><?=t('Company Payroll')?></a></li>
|
|
||||||
<li class=""><a id="tabPayroll" href="#tabPagePayroll"><?=t('Payroll Reports')?></a></li>
|
|
||||||
<li class=""><a id="tabPayrollColumn" href="#tabPagePayrollColumn"><?=t('Payroll Columns')?></a></li>
|
|
||||||
<li class=""><a id="tabDeductionGroup" href="#tabPageDeductionGroup"><?=t('Calculation Groups')?></a></li>
|
|
||||||
<li class=""><a id="tabDeduction" href="#tabPageDeduction"><?=t('Calculation Methods')?></a></li>
|
|
||||||
<li class=""><a id="tabPayslipTemplate" href="#tabPagePayslipTemplate"><?=t('Payslip Templates')?></a></li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<div class="tab-content">
|
|
||||||
<div class="tab-pane active" id="tabPagePayrollEmployee">
|
|
||||||
<div id="PayrollEmployee" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div id="PayrollEmployeeForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="tab-pane " id="tabPagePayroll">
|
|
||||||
<div id="Payroll" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div id="PayrollForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div id="PayrollData" class="reviewBlock" data-content="List" style="padding-left:5px;display:none;overflow-x: auto;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div id="PayrollDataButtons" style="text-align: right;margin-top: 10px;">
|
|
||||||
<button class="cancelBtnTable btn" style="margin-right:5px;"><i class="fa fa-times-circle-o"></i> Cancel</button>
|
|
||||||
<button class="saveBtnTable btn btn-primary" style="margin-right:5px;"><i class="fa fa-save"></i> Save</button>
|
|
||||||
<button class="downloadBtnTable btn btn-primary" style="margin-right:5px;"><i class="fa fa-check"></i> Download</button>
|
|
||||||
<button class="completeBtnTable btn btn-primary" style="margin-right:5px;"><i class="fa fa-check-square-o"></i> Finalize</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="tab-pane" id="tabPagePayrollColumn">
|
|
||||||
<div id="PayrollColumn" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div id="PayrollColumnForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!--<div class="tab-pane" id="tabPagePayrollColumnTemplate">
|
|
||||||
<div id="PayrollColumnTemplate" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div id="PayrollColumnTemplateForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>-->
|
|
||||||
|
|
||||||
<div class="tab-pane" id="tabPageDeductionGroup">
|
|
||||||
<div id="DeductionGroup" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div id="DeductionGroupForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="tab-pane" id="tabPageDeduction">
|
|
||||||
<div id="Deduction" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div id="DeductionForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="tab-pane" id="tabPagePayslipTemplate">
|
|
||||||
<div id="PayslipTemplate" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div id="PayslipTemplateForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<script>
|
|
||||||
var modJsList = new Array();
|
|
||||||
|
|
||||||
modJsList['tabPayday'] = new PaydayAdapter('PayFrequency','Payday');
|
|
||||||
modJsList['tabPayroll'] = new PayrollAdapter('Payroll','Payroll');
|
|
||||||
|
|
||||||
modJsList['tabPayrollData'] = new PayrollDataAdapter('PayrollData','PayrollData');
|
|
||||||
modJsList['tabPayrollData'].setRemoteTable(false);
|
|
||||||
modJsList['tabPayrollData'].setShowAddNew(false);
|
|
||||||
modJsList['tabPayrollData'].setModulePath('admin=payroll');
|
|
||||||
modJsList['tabPayrollData'].setRowFieldName('employee');
|
|
||||||
modJsList['tabPayrollData'].setColumnFieldName('payroll_item');
|
|
||||||
modJsList['tabPayrollData'].setTables('PayrollEmployee','PayrollColumn','PayrollData');
|
|
||||||
|
|
||||||
modJsList['tabPayrollColumn'] = new PayrollColumnAdapter('PayrollColumn','PayrollColumn','','deduction_group, colorder');
|
|
||||||
modJsList['tabPayrollColumn'].setRemoteTable(true);
|
|
||||||
//modJsList['tabPayrollColumnTemplate'] = new PayrollColumnTemplateAdapter('PayrollColumnTemplate','PayrollColumnTemplate');
|
|
||||||
|
|
||||||
modJsList['tabPayrollEmployee'] = new PayrollEmployeeAdapter('PayrollEmployee','PayrollEmployee');
|
|
||||||
modJsList['tabPayrollEmployee'].setRemoteTable(true);
|
|
||||||
|
|
||||||
modJsList['tabPayslipTemplate'] = new PayslipTemplateAdapter('PayslipTemplate','PayslipTemplate');
|
|
||||||
modJsList['tabPayslipTemplate'].setRemoteTable(true);
|
|
||||||
|
|
||||||
var modJs = modJsList['tabPayrollEmployee'];
|
|
||||||
|
|
||||||
$(".saveBtnTable").off().on('click',function(){
|
|
||||||
modJsList['tabPayrollData'].sendCellDataUpdates();
|
|
||||||
});
|
|
||||||
|
|
||||||
$(".completeBtnTable").off().on('click',function(){
|
|
||||||
modJsList['tabPayrollData'].sendAllCellDataUpdates();
|
|
||||||
$(".completeBtnTable").hide();
|
|
||||||
$(".saveBtnTable").hide();
|
|
||||||
});
|
|
||||||
|
|
||||||
$(".downloadBtnTable").off().on('click',function(){
|
|
||||||
modJsList['tabPayrollData'].downloadPayroll();
|
|
||||||
});
|
|
||||||
|
|
||||||
$(".cancelBtnTable").off().on('click',function(){
|
|
||||||
modJs = modJsList['tabPayroll'];
|
|
||||||
modJs.get([]);
|
|
||||||
});
|
|
||||||
|
|
||||||
modJsList['tabDeduction'] = new DeductionAdapter('Deduction','Deduction');
|
|
||||||
modJsList['tabDeduction'].setRemoteTable(true);
|
|
||||||
|
|
||||||
modJsList['tabDeductionGroup'] = new DeductionGroupAdapter('DeductionGroup','DeductionGroup');
|
|
||||||
modJsList['tabDeductionGroup'].setRemoteTable(true);
|
|
||||||
|
|
||||||
|
|
||||||
</script>
|
|
||||||
<?php include APP_BASE_PATH.'footer.php';?>
|
|
||||||
@@ -1,657 +0,0 @@
|
|||||||
/**
|
|
||||||
* Author: Thilina Hasantha
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* PaydayAdapter
|
|
||||||
*/
|
|
||||||
|
|
||||||
function PaydayAdapter(endPoint,tab,filter,orderBy) {
|
|
||||||
this.initAdapter(endPoint,tab,filter,orderBy);
|
|
||||||
}
|
|
||||||
|
|
||||||
PaydayAdapter.inherits(AdapterBase);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
PaydayAdapter.method('getDataMapping', function() {
|
|
||||||
return [
|
|
||||||
"id",
|
|
||||||
"name"
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
PaydayAdapter.method('getHeaders', function() {
|
|
||||||
return [
|
|
||||||
{ "sTitle": "ID" ,"bVisible":false},
|
|
||||||
{ "sTitle": "Select Pay Frequency"}
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
PaydayAdapter.method('getFormFields', function() {
|
|
||||||
return [
|
|
||||||
[ "name", {"label":"Name","type":"text","validation":""}]
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
/*
|
|
||||||
PaydayAdapter.method('showActionButtons' , function() {
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
*/
|
|
||||||
|
|
||||||
PaydayAdapter.method('getAddNewLabel', function() {
|
|
||||||
return "Run Payroll";
|
|
||||||
});
|
|
||||||
|
|
||||||
PaydayAdapter.method('createTable', function(elementId) {
|
|
||||||
$("#payday_all").off();
|
|
||||||
this.uber('createTable',elementId);
|
|
||||||
$("#payday_all").off().on('click',function(){
|
|
||||||
if($(this).is(':checked')){
|
|
||||||
$('.paydayCheck').prop('checked', true);
|
|
||||||
}else{
|
|
||||||
$('.paydayCheck').prop('checked', false);
|
|
||||||
}
|
|
||||||
})
|
|
||||||
});
|
|
||||||
|
|
||||||
PaydayAdapter.method('getActionButtonsHtml', function(id,data) {
|
|
||||||
var editButton = '<input type="checkbox" class="paydayCheck" id="payday__id_" name="payday__id_" value="checkbox_payday__id_"/>';
|
|
||||||
|
|
||||||
var html = '<div style="width:120px;">_edit_</div>';
|
|
||||||
html = html.replace('_edit_',editButton);
|
|
||||||
|
|
||||||
html = html.replace(/_id_/g,id);
|
|
||||||
html = html.replace(/_BASE_/g,this.baseUrl);
|
|
||||||
return html;
|
|
||||||
});
|
|
||||||
|
|
||||||
PaydayAdapter.method('getActionButtonHeader', function() {
|
|
||||||
return { "sTitle": '<input type="checkbox" id="payday_all" name="payday_all" value="checkbox_payday_all"/>', "sClass": "center" };
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* PayrollAdapter
|
|
||||||
*/
|
|
||||||
|
|
||||||
function PayrollAdapter(endPoint,tab,filter,orderBy) {
|
|
||||||
this.initAdapter(endPoint,tab,filter,orderBy);
|
|
||||||
}
|
|
||||||
|
|
||||||
PayrollAdapter.inherits(AdapterBase);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
PayrollAdapter.method('getDataMapping', function() {
|
|
||||||
return [
|
|
||||||
"id",
|
|
||||||
"name",
|
|
||||||
"pay_period",
|
|
||||||
"department",
|
|
||||||
"date_start",
|
|
||||||
"date_end",
|
|
||||||
"status"
|
|
||||||
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
PayrollAdapter.method('getHeaders', function() {
|
|
||||||
return [
|
|
||||||
{ "sTitle": "ID","bVisible":false },
|
|
||||||
{ "sTitle": "Name" },
|
|
||||||
{ "sTitle": "Pay Frequency"},
|
|
||||||
{ "sTitle": "Department"},
|
|
||||||
{ "sTitle": "Date Start"},
|
|
||||||
{ "sTitle": "Date End"},
|
|
||||||
{ "sTitle": "Status"}
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
PayrollAdapter.method('getFormFields', function() {
|
|
||||||
return [
|
|
||||||
[ "id", {"label":"ID","type":"hidden"}],
|
|
||||||
[ "name", {"label":"Name","type":"text"}],
|
|
||||||
[ "pay_period", {"label":"Pay Frequency","type":"select","remote-source":["PayFrequency","id","name"],"sort":"none"}],
|
|
||||||
[ "deduction_group", {"label":"Calculation Group","type":"select","remote-source":["DeductionGroup","id","name"],"sort":"none"}],
|
|
||||||
[ "payslipTemplate", {"label":"Payslip Template","type":"select","remote-source":["PayslipTemplate","id","name"]}],
|
|
||||||
[ "department", {"label":"Department","type":"select2","remote-source":["CompanyStructure","id","title"],"sort":"none"}],
|
|
||||||
[ "date_start", {"label":"Start Date","type":"date","validation":""}],
|
|
||||||
[ "date_end", {"label":"End Date","type":"date","validation":""}],
|
|
||||||
//[ "column_template", {"label":"Report Column Template","type":"select","remote-source":["PayrollColumnTemplate","id","name"]}],
|
|
||||||
[ "columns", {"label":"Payroll Columns","type":"select2multi","remote-source":["PayrollColumn","id","name"]}],
|
|
||||||
[ "status", {"label":"Status","type":"select","source":[["Draft","Draft"],["Completed","Completed"]],"sort":"none"}]
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
PayrollAdapter.method('postRenderForm', function(object, $tempDomObj) {
|
|
||||||
if(object != null && object != undefined && object.id != undefined && object.id != null){
|
|
||||||
$tempDomObj.find("#pay_period").attr('disabled','disabled');
|
|
||||||
$tempDomObj.find("#department").attr('disabled','disabled');
|
|
||||||
//$tempDomObj.find("#date_start").attr('disabled','disabled');
|
|
||||||
//$tempDomObj.find("#date_end").attr('disabled','disabled');
|
|
||||||
//$tempDomObj.find("#column_template").attr('disabled','disabled');
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
PayrollAdapter.method('process', function(id, status) {
|
|
||||||
modJs = modJsList['tabPayrollData'];
|
|
||||||
modJs.setCurrentPayroll(id);
|
|
||||||
$("#Payroll").hide();
|
|
||||||
$("#PayrollData").show();
|
|
||||||
$("#PayrollDataButtons").show();
|
|
||||||
|
|
||||||
if(status == 'Completed'){
|
|
||||||
$(".completeBtnTable").hide();
|
|
||||||
$(".saveBtnTable").hide();
|
|
||||||
}else{
|
|
||||||
$(".completeBtnTable").show();
|
|
||||||
$(".saveBtnTable").show();
|
|
||||||
}
|
|
||||||
|
|
||||||
modJs.get([]);
|
|
||||||
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
PayrollAdapter.method('getActionButtonsHtml', function(id,data) {
|
|
||||||
var editButton = '<img class="tableActionButton" src="_BASE_images/edit.png" style="cursor:pointer;" rel="tooltip" title="Edit" onclick="modJs.edit(_id_);return false;"></img>';
|
|
||||||
var processButton = '<img class="tableActionButton" src="_BASE_images/run.png" style="margin-left:15px;cursor:pointer;" rel="tooltip" title="Process" onclick="modJs.process(_id_,\'_status_\');return false;"></img>';
|
|
||||||
var deleteButton = '<img class="tableActionButton" src="_BASE_images/delete.png" style="margin-left:15px;cursor:pointer;" rel="tooltip" title="Delete" onclick="modJs.deleteRow(_id_);return false;"></img>';
|
|
||||||
var cloneButton = '<img class="tableActionButton" src="_BASE_images/clone.png" style="margin-left:15px;cursor:pointer;" rel="tooltip" title="Copy" onclick="modJs.copyRow(_id_);return false;"></img>';
|
|
||||||
|
|
||||||
var html = '<div style="width:120px;">_edit__process__clone__delete_</div>';
|
|
||||||
|
|
||||||
|
|
||||||
if(this.showAddNew){
|
|
||||||
html = html.replace('_clone_',cloneButton);
|
|
||||||
}else{
|
|
||||||
html = html.replace('_clone_','');
|
|
||||||
}
|
|
||||||
|
|
||||||
if(this.showDelete){
|
|
||||||
html = html.replace('_delete_',deleteButton);
|
|
||||||
}else{
|
|
||||||
html = html.replace('_delete_','');
|
|
||||||
}
|
|
||||||
|
|
||||||
if(this.showEdit){
|
|
||||||
html = html.replace('_edit_',editButton);
|
|
||||||
}else{
|
|
||||||
html = html.replace('_edit_','');
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
if(data[6] != "Completed"){
|
|
||||||
html = html.replace('_process_',processButton);
|
|
||||||
}else{
|
|
||||||
html = html.replace('_process_','');
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
html = html.replace('_process_',processButton);
|
|
||||||
|
|
||||||
|
|
||||||
html = html.replace(/_id_/g,id);
|
|
||||||
html = html.replace(/_status_/g,data[6]);
|
|
||||||
html = html.replace(/_BASE_/g,this.baseUrl);
|
|
||||||
return html;
|
|
||||||
});
|
|
||||||
|
|
||||||
PayrollAdapter.method('get', function(callBackData) {
|
|
||||||
$("#PayrollData").hide();
|
|
||||||
$("#PayrollForm").hide();
|
|
||||||
$("#PayrollDataButtons").hide();
|
|
||||||
$("#Payroll").show();
|
|
||||||
modJsList['tabPayrollData'].setCurrentPayroll(null);
|
|
||||||
this.uber('get',callBackData);
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* PayrollDataAdapter
|
|
||||||
*/
|
|
||||||
|
|
||||||
function PayrollDataAdapter(endPoint) {
|
|
||||||
this.initAdapter(endPoint);
|
|
||||||
this.cellDataUpdates = {};
|
|
||||||
this.payrollId = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
PayrollDataAdapter.inherits(TableEditAdapter);
|
|
||||||
|
|
||||||
PayrollDataAdapter.method('validateCellValue', function(element, evt, newValue) {
|
|
||||||
modJs.addCellDataUpdate(element.data('colId'),element.data('rowId'),newValue);
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
|
|
||||||
PayrollDataAdapter.method('setCurrentPayroll', function(val) {
|
|
||||||
this.payrollId = val;
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
PayrollDataAdapter.method('addAdditionalRequestData' , function(type, req) {
|
|
||||||
if(type == 'updateData'){
|
|
||||||
req.payrollId = this.payrollId;
|
|
||||||
}else if(type == 'updateAllData'){
|
|
||||||
req.payrollId = this.payrollId;
|
|
||||||
}else if(type == 'getAllData'){
|
|
||||||
req.payrollId = this.payrollId;
|
|
||||||
}
|
|
||||||
|
|
||||||
return req;
|
|
||||||
});
|
|
||||||
|
|
||||||
PayrollDataAdapter.method('modifyCSVHeader', function(header) {
|
|
||||||
header.unshift("");
|
|
||||||
return header;
|
|
||||||
});
|
|
||||||
|
|
||||||
PayrollDataAdapter.method('getCSVData' , function() {
|
|
||||||
var csv = "";
|
|
||||||
|
|
||||||
for(var i=0;i<this.csvData.length;i++){
|
|
||||||
csv += this.csvData[i].join(",");
|
|
||||||
if(i < this.csvData.length -1){
|
|
||||||
csv += "\r\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return csv;
|
|
||||||
});
|
|
||||||
|
|
||||||
PayrollDataAdapter.method('downloadPayroll' , function() {
|
|
||||||
var element = document.createElement('a');
|
|
||||||
element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(this.getCSVData()));
|
|
||||||
element.setAttribute('download', "payroll_"+this.payrollId+".csv");
|
|
||||||
|
|
||||||
element.style.display = 'none';
|
|
||||||
document.body.appendChild(element);
|
|
||||||
|
|
||||||
element.click();
|
|
||||||
|
|
||||||
document.body.removeChild(element);
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* PayrollColumnAdapter
|
|
||||||
*/
|
|
||||||
|
|
||||||
function PayrollColumnAdapter(endPoint,tab,filter,orderBy) {
|
|
||||||
this.initAdapter(endPoint,tab,filter,orderBy);
|
|
||||||
}
|
|
||||||
|
|
||||||
PayrollColumnAdapter.inherits(AdapterBase);
|
|
||||||
|
|
||||||
PayrollColumnAdapter.method('getDataMapping', function() {
|
|
||||||
return [
|
|
||||||
"id",
|
|
||||||
"name",
|
|
||||||
"colorder",
|
|
||||||
"calculation_hook",
|
|
||||||
"deduction_group",
|
|
||||||
"editable",
|
|
||||||
"enabled"
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
PayrollColumnAdapter.method('getHeaders', function() {
|
|
||||||
return [
|
|
||||||
{ "sTitle": "ID" ,"bVisible":false},
|
|
||||||
{ "sTitle": "Name"},
|
|
||||||
{ "sTitle": "Column Order"},
|
|
||||||
{ "sTitle": "Calculation Method"},
|
|
||||||
{ "sTitle": "Calculation Group"},
|
|
||||||
{ "sTitle": "Editable"},
|
|
||||||
{ "sTitle": "Enabled"}
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
PayrollColumnAdapter.method('getFormFields', function() {
|
|
||||||
|
|
||||||
var fucntionColumnList = [ "calculation_columns", {"label":"Calculation Columns","type":"datagroup",
|
|
||||||
"form":[
|
|
||||||
[ "name", {"label":"Name","type":"text","validation":""}],
|
|
||||||
[ "column", {"label":"Column","type":"select2","remote-source":["PayrollColumn","id","name"]}]
|
|
||||||
],
|
|
||||||
"html":'<div id="#_id_#" class="panel panel-default">#_delete_##_edit_#<div class="panel-body">#_renderFunction_#</div></div>',
|
|
||||||
"validation":"none",
|
|
||||||
"render":function(item){
|
|
||||||
var output = "Variable:"+item.name;
|
|
||||||
return output;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}];
|
|
||||||
|
|
||||||
return [
|
|
||||||
[ "id", {"label":"ID","type":"hidden"}],
|
|
||||||
[ "name", {"label":"Name","type":"text","validation":""}],
|
|
||||||
[ "calculation_hook", {"label":"Predefined Calculations","type":"select2","allow-null":true,"null-label":"None","remote-source":["CalculationHook","code","name"]}],
|
|
||||||
[ "deduction_group", {"label":"Calculation Group","type":"select2","allow-null":true,"null-label":"Common","remote-source":["DeductionGroup","id","name"]}],
|
|
||||||
[ "salary_components", {"label":"Salary Components","type":"select2multi","remote-source":["SalaryComponent","id","name"]}],
|
|
||||||
[ "deductions", {"label":"Calculation Method","type":"select2multi","remote-source":["Deduction","id","name"]}],
|
|
||||||
[ "add_columns", {"label":"Columns to Add","type":"select2multi","remote-source":["PayrollColumn","id","name"]}],
|
|
||||||
[ "sub_columns", {"label":"Columns to Subtract","type":"select2multi","remote-source":["PayrollColumn","id","name"]}],
|
|
||||||
[ "colorder", {"label":"Column Order","type":"text","validation":"number"}],
|
|
||||||
[ "editable", {"label":"Editable","type":"select","source":[["Yes","Yes"],["No","No"]]}],
|
|
||||||
[ "enabled", {"label":"Enabled","type":"select","source":[["Yes","Yes"],["No","No"]]}],
|
|
||||||
[ "default_value", {"label":"Default Value","type":"text","validation":""}],
|
|
||||||
fucntionColumnList,
|
|
||||||
[ "calculation_function", {"label":"Function","type":"text","validation":"none"}]
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
PayrollColumnAdapter.method('getFilters', function() {
|
|
||||||
return [
|
|
||||||
[ "deduction_group", {"label":"Calculation Group","type":"select2","allow-null":true,"null-label":"Any","remote-source":["DeductionGroup","id","name"]}]
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* PayrollColumnTemplateAdapter
|
|
||||||
*/
|
|
||||||
|
|
||||||
function PayrollColumnTemplateAdapter(endPoint) {
|
|
||||||
this.initAdapter(endPoint);
|
|
||||||
}
|
|
||||||
|
|
||||||
PayrollColumnTemplateAdapter.inherits(AdapterBase);
|
|
||||||
|
|
||||||
PayrollColumnTemplateAdapter.method('getDataMapping', function() {
|
|
||||||
return [
|
|
||||||
"id",
|
|
||||||
"name"
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
PayrollColumnTemplateAdapter.method('getHeaders', function() {
|
|
||||||
return [
|
|
||||||
{ "sTitle": "ID" ,"bVisible":true},
|
|
||||||
{ "sTitle": "Name"}
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
PayrollColumnTemplateAdapter.method('getFormFields', function() {
|
|
||||||
return [
|
|
||||||
[ "id", {"label":"ID","type":"hidden"}],
|
|
||||||
[ "name", {"label":"Name","type":"text","validation":""}],
|
|
||||||
[ "columns", {"label":"Payroll Columns","type":"select2multi","remote-source":["PayrollColumn","id","name"]}]
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* PayrollEmployeeAdapter
|
|
||||||
*/
|
|
||||||
|
|
||||||
function PayrollEmployeeAdapter(endPoint,tab,filter,orderBy) {
|
|
||||||
this.initAdapter(endPoint,tab,filter,orderBy);
|
|
||||||
}
|
|
||||||
|
|
||||||
PayrollEmployeeAdapter.inherits(AdapterBase);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
PayrollEmployeeAdapter.method('getDataMapping', function() {
|
|
||||||
return [
|
|
||||||
"id",
|
|
||||||
"employee",
|
|
||||||
"pay_frequency",
|
|
||||||
"deduction_group",
|
|
||||||
"currency"
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
PayrollEmployeeAdapter.method('getHeaders', function() {
|
|
||||||
return [
|
|
||||||
{ "sTitle": "ID" ,"bVisible":false},
|
|
||||||
{ "sTitle": "Employee" },
|
|
||||||
{ "sTitle": "Pay Frequency"},
|
|
||||||
{ "sTitle": "Calculation Group"},
|
|
||||||
{ "sTitle": "Currency"},
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
PayrollEmployeeAdapter.method('getFormFields', function() {
|
|
||||||
return [
|
|
||||||
[ "id", {"label":"ID","type":"hidden"}],
|
|
||||||
[ "employee", {"label":"Employee","type":"select2","remote-source":["Employee","id","first_name+last_name"]}],
|
|
||||||
[ "pay_frequency", {"label":"Pay Frequency","type":"select2","remote-source":["PayFrequency","id","name"]}],
|
|
||||||
[ "currency", {"label":"Currency","type":"select2","remote-source":["CurrencyType","id","code"]}],
|
|
||||||
[ "deduction_group", {"label":"Calculation Group","type":"select2","allow-null":true,"null-label":"None","remote-source":["DeductionGroup","id","name"]}],
|
|
||||||
[ "deduction_exemptions", {"label":"Calculation Exemptions","type":"select2multi","remote-source":["Deduction","id","name"],"validation":"none"}],
|
|
||||||
[ "deduction_allowed", {"label":"Calculations Assigned","type":"select2multi","remote-source":["Deduction","id","name"],"validation":"none"}]
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
PayrollEmployeeAdapter.method('getFilters', function() {
|
|
||||||
return [
|
|
||||||
[ "employee", {"label":"Employee","type":"select2","remote-source":["Employee","id","first_name+last_name"]}]
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* DeductionAdapter
|
|
||||||
*/
|
|
||||||
|
|
||||||
function DeductionAdapter(endPoint,tab,filter,orderBy) {
|
|
||||||
this.initAdapter(endPoint,tab,filter,orderBy);
|
|
||||||
}
|
|
||||||
|
|
||||||
DeductionAdapter.inherits(AdapterBase);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
DeductionAdapter.method('getDataMapping', function() {
|
|
||||||
return [
|
|
||||||
"id",
|
|
||||||
"name",
|
|
||||||
"deduction_group"
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
DeductionAdapter.method('getHeaders', function() {
|
|
||||||
return [
|
|
||||||
{ "sTitle": "ID" ,"bVisible":false},
|
|
||||||
{ "sTitle": "Name" },
|
|
||||||
{ "sTitle": "Calculation Group"}
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
DeductionAdapter.method('getFormFields', function() {
|
|
||||||
|
|
||||||
var rangeAmounts = [ "rangeAmounts", {"label":"Calculation Process","type":"datagroup",
|
|
||||||
"form":[
|
|
||||||
[ "lowerCondition", {"label":"Lower Limit Condition","type":"select","source":[["No Lower Limit","No Lower Limit"],["gt","Greater than"],["gte","Greater than or Equal"]]}],
|
|
||||||
[ "lowerLimit", {"label":"Lower Limit","type":"text","validation":"float"}],
|
|
||||||
[ "upperCondition", {"label":"Upper Limit Condition","type":"select","source":[["No Upper Limit","No Upper Limit"],["lt","Less than"],["lte","Less than or Equal"]]}],
|
|
||||||
[ "upperLimit", {"label":"Upper Limit","type":"text","validation":"float"}],
|
|
||||||
[ "amount", {"label":"Value","type":"text","validation":""}]
|
|
||||||
],
|
|
||||||
"html":'<div id="#_id_#" class="panel panel-default">#_delete_##_edit_#<div class="panel-body">#_renderFunction_#</div></div>',
|
|
||||||
"validation":"none",
|
|
||||||
"custom-validate-function":function (data){
|
|
||||||
var res = {};
|
|
||||||
res['valid'] = true;
|
|
||||||
if(data.lowerCondition == 'No Lower Limit'){
|
|
||||||
data.lowerLimit = 0;
|
|
||||||
}
|
|
||||||
if(data.upperCondition == 'No Upper Limit'){
|
|
||||||
data.upperLimit = 0;
|
|
||||||
}
|
|
||||||
res['params'] = data;
|
|
||||||
return res;
|
|
||||||
},
|
|
||||||
"render":function(item){
|
|
||||||
var output = "";
|
|
||||||
var getSymbol = function(text){
|
|
||||||
var map = {};
|
|
||||||
map['gt'] = '>';
|
|
||||||
map['gte'] = '>=';
|
|
||||||
map['lt'] = '<';
|
|
||||||
map['lte'] = '<=';
|
|
||||||
|
|
||||||
return map[text];
|
|
||||||
}
|
|
||||||
if(item.lowerCondition != "No Lower Limit"){
|
|
||||||
output += item.lowerLimit + " " + getSymbol(item.lowerCondition) + " ";
|
|
||||||
}
|
|
||||||
|
|
||||||
if(item.upperCondition != "No Upper Limit"){
|
|
||||||
output += " and ";
|
|
||||||
output += getSymbol(item.upperCondition) + " " + item.upperLimit + " ";
|
|
||||||
}
|
|
||||||
if(output == ""){
|
|
||||||
return "Deduction is "+item.amount + " for all ranges";
|
|
||||||
}else{
|
|
||||||
return "If salary component "+output+ " deduction is "+item.amount;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
return output;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}];
|
|
||||||
|
|
||||||
return [
|
|
||||||
[ "id", {"label":"ID","type":"hidden"}],
|
|
||||||
[ "name", {"label":"Name","type":"text","validation":""}],
|
|
||||||
[ "componentType", {"label":"Salary Component Type","type":"select2multi","allow-null":true,"remote-source":["SalaryComponentType","id","name"]}],
|
|
||||||
[ "component", {"label":"Salary Component","type":"select2multi","allow-null":true,"remote-source":["SalaryComponent","id","name"]}],
|
|
||||||
[ "payrollColumn", {"label":"Payroll Report Column","type":"select2","allow-null":true,"remote-source":["PayrollColumn","id","name"]}],
|
|
||||||
rangeAmounts,
|
|
||||||
[ "deduction_group", {"label":"Calculation Group","type":"select2","allow-null":true,"null-label":"None","remote-source":["DeductionGroup","id","name"]}]
|
|
||||||
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* DeductionGroupAdapter
|
|
||||||
*/
|
|
||||||
|
|
||||||
function DeductionGroupAdapter(endPoint,tab,filter,orderBy) {
|
|
||||||
this.initAdapter(endPoint,tab,filter,orderBy);
|
|
||||||
}
|
|
||||||
|
|
||||||
DeductionGroupAdapter.inherits(AdapterBase);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
DeductionGroupAdapter.method('getDataMapping', function() {
|
|
||||||
return [
|
|
||||||
"id",
|
|
||||||
"name",
|
|
||||||
"description"
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
DeductionGroupAdapter.method('getHeaders', function() {
|
|
||||||
return [
|
|
||||||
{ "sTitle": "ID" ,"bVisible":false},
|
|
||||||
{ "sTitle": "Name" },
|
|
||||||
{ "sTitle": "Details" }
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
DeductionGroupAdapter.method('getFormFields', function() {
|
|
||||||
return [
|
|
||||||
[ "id", {"label":"ID","type":"hidden"}],
|
|
||||||
[ "name", {"label":"Name","type":"text","validation":""}],
|
|
||||||
[ "description", {"label":"Details","type":"textarea","validation":"none"}]
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* PayslipTemplateAdapter
|
|
||||||
*/
|
|
||||||
|
|
||||||
function PayslipTemplateAdapter(endPoint,tab,filter,orderBy) {
|
|
||||||
this.initAdapter(endPoint,tab,filter,orderBy);
|
|
||||||
}
|
|
||||||
|
|
||||||
PayslipTemplateAdapter.inherits(AdapterBase);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
PayslipTemplateAdapter.method('getDataMapping', function() {
|
|
||||||
return [
|
|
||||||
"id",
|
|
||||||
"name"
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
PayslipTemplateAdapter.method('getHeaders', function() {
|
|
||||||
return [
|
|
||||||
{ "sTitle": "ID" ,"bVisible":false},
|
|
||||||
{ "sTitle": "Name" }
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
PayslipTemplateAdapter.method('getFormFields', function() {
|
|
||||||
|
|
||||||
var payslipFields = [ "data", {"label":"Payslip Fields","type":"datagroup",
|
|
||||||
"form":[
|
|
||||||
[ "type", {"label":"Type","type":"select","sort":"none","source":[["Payroll Column","Payroll Column"],["Text","Text"],["Company Name","Company Name"],["Company Logo","Company Logo"], ["Separators","Separators"]]}],
|
|
||||||
[ "payrollColumn", {"label":"Payroll Column","type":"select2","sort":"none","allow-null":true,"null-label":"None","remote-source":["PayrollColumn","id","name"]}],
|
|
||||||
|
|
||||||
[ "label", {"label":"Label","type":"text","validation":"none"}],
|
|
||||||
[ "text", {"label":"Text","type":"textarea","validation":"none"}],
|
|
||||||
[ "status", {"label":"Status","type":"select","sort":"none","source":[["Show","Show"],["Hide","Hide"]]}]
|
|
||||||
],
|
|
||||||
|
|
||||||
//"html":'<div id="#_id_#" class="panel panel-default">#_delete_##_edit_#<div class="panel-body"><table class="table table-striped"><tr><td>Type</td><td>#_type_#</td></tr><tr><td>Label</td><td>#_label_#</td></tr><tr><td>Text</td><td>#_text_#</td></tr><tr><td>Font Size</td><td>#_fontSize_#</td></tr><tr><td>Font Style</td><td>#_fontStyle_#</td></tr><tr><td>Font Color</td><td>#_fontColor_#</td></tr><tr><td>Status</td><td>#_status_#</td></tr></table> </div></div>',
|
|
||||||
"html":'<div id="#_id_#" class="panel panel-default">#_delete_##_edit_#<div class="panel-body">#_type_# #_label_# <br/> #_text_#</div></div>',
|
|
||||||
"validation":"none",
|
|
||||||
"custom-validate-function":function (data){
|
|
||||||
var res = {};
|
|
||||||
res['valid'] = true;
|
|
||||||
if(data.type == 'Payroll Column'){
|
|
||||||
if(data.payrollColumn == "NULL"){
|
|
||||||
res['valid'] = false;
|
|
||||||
res['message'] = "Please select payroll column";
|
|
||||||
}else{
|
|
||||||
data.payrollColumn == "NULL";
|
|
||||||
}
|
|
||||||
}else if(data.type == 'Text'){
|
|
||||||
if(data.text == ""){
|
|
||||||
res['valid'] = false;
|
|
||||||
res['message'] = "Text can not be empty";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
res['params'] = data;
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
}];
|
|
||||||
|
|
||||||
return [
|
|
||||||
[ "id", {"label":"ID","type":"hidden"}],
|
|
||||||
[ "name", {"label":"Name","type":"text","validation":""}],
|
|
||||||
payslipFields
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,54 +0,0 @@
|
|||||||
<?php
|
|
||||||
/*
|
|
||||||
This file is part of iCE Hrm.
|
|
||||||
|
|
||||||
iCE Hrm is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
iCE Hrm is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with iCE Hrm. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
------------------------------------------------------------------
|
|
||||||
|
|
||||||
Original work Copyright (c) 2012 [Gamonoid Media Pvt. Ltd]
|
|
||||||
Developer: Thilina Hasantha (thilina.hasantha[at]gmail.com / facebook.com/thilinah)
|
|
||||||
*/
|
|
||||||
|
|
||||||
$moduleName = 'Permissions';
|
|
||||||
define('MODULE_PATH',dirname(__FILE__));
|
|
||||||
include APP_BASE_PATH.'header.php';
|
|
||||||
include APP_BASE_PATH.'modulejslibs.inc.php';
|
|
||||||
?><div class="span9">
|
|
||||||
|
|
||||||
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
|
||||||
<li class="active"><a id="tabPermission" href="#tabPagePermission"><?=t('Permissions')?></a></li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<div class="tab-content">
|
|
||||||
<div class="tab-pane active" id="tabPagePermission">
|
|
||||||
<div id="Permission" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div id="PermissionForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<script>
|
|
||||||
var modJsList = new Array();
|
|
||||||
|
|
||||||
modJsList['tabPermission'] = new PermissionAdapter('Permission','Permission');
|
|
||||||
modJsList['tabPermission'].setShowAddNew(false);
|
|
||||||
var modJs = modJsList['tabPermission'];
|
|
||||||
|
|
||||||
</script>
|
|
||||||
<?php include APP_BASE_PATH.'footer.php';?>
|
|
||||||
@@ -1,73 +0,0 @@
|
|||||||
/**
|
|
||||||
* Author: Thilina Hasantha
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* PermissionAdapter
|
|
||||||
*/
|
|
||||||
|
|
||||||
function PermissionAdapter(endPoint) {
|
|
||||||
this.initAdapter(endPoint);
|
|
||||||
}
|
|
||||||
|
|
||||||
PermissionAdapter.inherits(AdapterBase);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
PermissionAdapter.method('getDataMapping', function() {
|
|
||||||
return [
|
|
||||||
"id",
|
|
||||||
"user_level",
|
|
||||||
"module_id",
|
|
||||||
"permission",
|
|
||||||
"value"
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
PermissionAdapter.method('getHeaders', function() {
|
|
||||||
return [
|
|
||||||
{ "sTitle": "ID" ,"bVisible":false},
|
|
||||||
{ "sTitle": "User Level" },
|
|
||||||
{ "sTitle": "Module"},
|
|
||||||
{ "sTitle": "Permission"},
|
|
||||||
{ "sTitle": "Value"}
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
PermissionAdapter.method('getFormFields', function() {
|
|
||||||
return [
|
|
||||||
[ "id", {"label":"ID","type":"hidden"}],
|
|
||||||
[ "user_level", {"label":"User Level","type":"placeholder","validation":"none"}],
|
|
||||||
[ "module_id", {"label":"Module","type":"placeholder","remote-source":["Module","id","menu+name"]}],
|
|
||||||
[ "permission", {"label":"Permission","type":"placeholder","validation":"none"}],
|
|
||||||
[ "value", {"label":"Value","type":"text","validation":"none"}]
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
PermissionAdapter.method('getFilters', function() {
|
|
||||||
return [
|
|
||||||
[ "module_id", {"label":"Module","type":"select2","allow-null":true,"null-label":"All Modules","remote-source":["Module","id","menu+name"]}]
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
PermissionAdapter.method('getActionButtonsHtml', function(id,data) {
|
|
||||||
var html = '<div style="width:80px;"><img class="tableActionButton" src="_BASE_images/edit.png" style="cursor:pointer;" rel="tooltip" title="Edit" onclick="modJs.edit(_id_);return false;"></img></div>';
|
|
||||||
html = html.replace(/_id_/g,id);
|
|
||||||
html = html.replace(/_BASE_/g,this.baseUrl);
|
|
||||||
return html;
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
PermissionAdapter.method('getMetaFieldForRendering', function(fieldName) {
|
|
||||||
if(fieldName == "value"){
|
|
||||||
return "meta";
|
|
||||||
}
|
|
||||||
return "";
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
PermissionAdapter.method('fillForm', function(object) {
|
|
||||||
this.uber('fillForm',object);
|
|
||||||
$("#helptext").html(object.description);
|
|
||||||
});
|
|
||||||
@@ -1,113 +0,0 @@
|
|||||||
<?php
|
|
||||||
/*
|
|
||||||
This file is part of iCE Hrm.
|
|
||||||
|
|
||||||
iCE Hrm is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
iCE Hrm is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with iCE Hrm. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
------------------------------------------------------------------
|
|
||||||
|
|
||||||
Original work Copyright (c) 2012 [Gamonoid Media Pvt. Ltd]
|
|
||||||
Developer: Thilina Hasantha (thilina.hasantha[at]gmail.com / facebook.com/thilinah)
|
|
||||||
*/
|
|
||||||
|
|
||||||
$moduleName = 'projects';
|
|
||||||
define('MODULE_PATH',dirname(__FILE__));
|
|
||||||
include APP_BASE_PATH.'header.php';
|
|
||||||
include APP_BASE_PATH.'modulejslibs.inc.php';
|
|
||||||
?><div class="span9">
|
|
||||||
|
|
||||||
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
|
||||||
<li class="active"><a id="tabClient" href="#tabPageClient"><?=t('Clients')?></a></li>
|
|
||||||
<li><a id="tabProject" href="#tabPageProject"><?=t('Projects')?></a></li>
|
|
||||||
<li><a id="tabEmployeeProject" href="#tabPageEmployeeProject"><?=t('Employee Projects')?></a></li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<div class="tab-content">
|
|
||||||
<div class="tab-pane active" id="tabPageClient">
|
|
||||||
<div id="Client" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div id="ClientForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="tab-pane" id="tabPageProject">
|
|
||||||
<div id="Project" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div id="ProjectForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="tab-pane" id="tabPageEmployeeProject">
|
|
||||||
<div id="EmployeeProject" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div id="EmployeeProjectForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<script>
|
|
||||||
var modJsList = new Array();
|
|
||||||
|
|
||||||
modJsList['tabClient'] = new ClientAdapter('Client','Client');
|
|
||||||
|
|
||||||
<?php if(isset($modulePermissions['perm']['Add Clients']) && $modulePermissions['perm']['Add Clients'] == "No"){?>
|
|
||||||
modJsList['tabClient'].setShowAddNew(false);
|
|
||||||
<?php }?>
|
|
||||||
|
|
||||||
<?php if(isset($modulePermissions['perm']['Delete Clients']) && $modulePermissions['perm']['Delete Clients'] == "No"){?>
|
|
||||||
modJsList['tabClient'].setShowDelete(false);
|
|
||||||
<?php }?>
|
|
||||||
|
|
||||||
<?php if(isset($modulePermissions['perm']['Edit Clients']) && $modulePermissions['perm']['Edit Clients'] == "No"){?>
|
|
||||||
modJsList['tabClient'].setShowSave(false);
|
|
||||||
<?php }?>
|
|
||||||
|
|
||||||
modJsList['tabProject'] = new ProjectAdapter('Project','Project');
|
|
||||||
|
|
||||||
<?php if(isset($modulePermissions['perm']['Add Projects']) && $modulePermissions['perm']['Add Projects'] == "No"){?>
|
|
||||||
modJsList['tabProject'].setShowAddNew(false);
|
|
||||||
<?php }?>
|
|
||||||
|
|
||||||
<?php if(isset($modulePermissions['perm']['Delete Projects']) && $modulePermissions['perm']['Delete Projects'] == "No"){?>
|
|
||||||
modJsList['tabProject'].setShowDelete(false);
|
|
||||||
<?php }?>
|
|
||||||
|
|
||||||
<?php if(isset($modulePermissions['perm']['Edit Projects']) && $modulePermissions['perm']['Edit Projects'] == "No"){?>
|
|
||||||
modJsList['tabProject'].setShowSave(false);
|
|
||||||
<?php }?>
|
|
||||||
|
|
||||||
|
|
||||||
modJsList['tabEmployeeProject'] = new EmployeeProjectAdapter('EmployeeProject','EmployeeProject');
|
|
||||||
modJsList['tabEmployeeProject'].setRemoteTable(true);
|
|
||||||
|
|
||||||
<?php if(isset($modulePermissions['perm']['Add Projects']) && $modulePermissions['perm']['Add Projects'] == "No"){?>
|
|
||||||
modJsList['tabEmployeeProject'].setShowAddNew(false);
|
|
||||||
<?php }?>
|
|
||||||
<?php if(isset($modulePermissions['perm']['Delete Projects']) && $modulePermissions['perm']['Delete Projects'] == "No"){?>
|
|
||||||
modJsList['tabEmployeeProject'].setShowDelete(false);
|
|
||||||
<?php }?>
|
|
||||||
<?php if(isset($modulePermissions['perm']['Edit Projects']) && $modulePermissions['perm']['Edit Projects'] == "No"){?>
|
|
||||||
modJsList['tabEmployeeProject'].setShowEdit(false);
|
|
||||||
<?php }?>
|
|
||||||
|
|
||||||
|
|
||||||
var modJs = modJsList['tabClient'];
|
|
||||||
|
|
||||||
</script>
|
|
||||||
<?php include APP_BASE_PATH.'footer.php';?>
|
|
||||||
@@ -1,172 +0,0 @@
|
|||||||
/**
|
|
||||||
* Author: Thilina Hasantha
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* ClientAdapter
|
|
||||||
*/
|
|
||||||
|
|
||||||
function ClientAdapter(endPoint,tab,filter,orderBy) {
|
|
||||||
this.initAdapter(endPoint,tab,filter,orderBy);
|
|
||||||
}
|
|
||||||
|
|
||||||
ClientAdapter.inherits(AdapterBase);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
ClientAdapter.method('getDataMapping', function() {
|
|
||||||
return [
|
|
||||||
"id",
|
|
||||||
"name",
|
|
||||||
"details",
|
|
||||||
"address",
|
|
||||||
"contact_number"
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
ClientAdapter.method('getHeaders', function() {
|
|
||||||
return [
|
|
||||||
{ "sTitle": "ID","bVisible":false },
|
|
||||||
{ "sTitle": "Name" },
|
|
||||||
{ "sTitle": "Details"},
|
|
||||||
{ "sTitle": "Address"},
|
|
||||||
{ "sTitle": "Contact Number"}
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
ClientAdapter.method('getFormFields', function() {
|
|
||||||
if(this.showSave){
|
|
||||||
return [
|
|
||||||
[ "id", {"label":"ID","type":"hidden"}],
|
|
||||||
[ "name", {"label":"Name","type":"text"}],
|
|
||||||
[ "details", {"label":"Details","type":"textarea","validation":"none"}],
|
|
||||||
[ "address", {"label":"Address","type":"textarea","validation":"none"}],
|
|
||||||
[ "contact_number", {"label":"Contact Number","type":"text","validation":"none"}],
|
|
||||||
[ "contact_email", {"label":"Contact Email","type":"text","validation":"none"}],
|
|
||||||
[ "company_url", {"label":"Company Url","type":"text","validation":"none"}],
|
|
||||||
[ "status", {"label":"Status","type":"select","source":[["Active","Active"],["Inactive","Inactive"]]}],
|
|
||||||
[ "first_contact_date", {"label":"First Contact Date","type":"date","validation":"none"}]
|
|
||||||
];
|
|
||||||
}else{
|
|
||||||
return [
|
|
||||||
[ "id", {"label":"ID","type":"hidden"}],
|
|
||||||
[ "name", {"label":"Name","type":"placeholder"}],
|
|
||||||
[ "details", {"label":"Details","type":"placeholder","validation":"none"}],
|
|
||||||
[ "address", {"label":"Address","type":"placeholder","validation":"none"}],
|
|
||||||
[ "contact_number", {"label":"Contact Number","type":"placeholder","validation":"none"}],
|
|
||||||
[ "contact_email", {"label":"Contact Email","type":"placeholder","validation":"none"}],
|
|
||||||
[ "company_url", {"label":"Company Url","type":"placeholder","validation":"none"}],
|
|
||||||
[ "status", {"label":"Status","type":"placeholder","source":[["Active","Active"],["Inactive","Inactive"]]}],
|
|
||||||
[ "first_contact_date", {"label":"First Contact Date","type":"placeholder","validation":"none"}]
|
|
||||||
];
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
ClientAdapter.method('getHelpLink', function () {
|
|
||||||
return 'http://blog.icehrm.com/docs/projects/';
|
|
||||||
});
|
|
||||||
|
|
||||||
/**
|
|
||||||
* ProjectAdapter
|
|
||||||
*/
|
|
||||||
|
|
||||||
function ProjectAdapter(endPoint,tab,filter,orderBy) {
|
|
||||||
this.initAdapter(endPoint,tab,filter,orderBy);
|
|
||||||
}
|
|
||||||
|
|
||||||
ProjectAdapter.inherits(AdapterBase);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
ProjectAdapter.method('getDataMapping', function() {
|
|
||||||
return [
|
|
||||||
"id",
|
|
||||||
"name",
|
|
||||||
"client"
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
ProjectAdapter.method('getHeaders', function() {
|
|
||||||
return [
|
|
||||||
{ "sTitle": "ID","bVisible":false },
|
|
||||||
{ "sTitle": "Name" },
|
|
||||||
{ "sTitle": "Client"},
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
ProjectAdapter.method('getFormFields', function() {
|
|
||||||
|
|
||||||
if(this.showSave){
|
|
||||||
return [
|
|
||||||
[ "id", {"label":"ID","type":"hidden"}],
|
|
||||||
[ "name", {"label":"Name","type":"text"}],
|
|
||||||
[ "client", {"label":"Client","type":"select2","allow-null":true,"remote-source":["Client","id","name"]}],
|
|
||||||
[ "details", {"label":"Details","type":"textarea","validation":"none"}],
|
|
||||||
[ "status", {"label":"Status","type":"select","source":[["Active","Active"],["On Hold","On Hold"],["Completed","Completed"],["Dropped","Dropped"]]}]
|
|
||||||
];
|
|
||||||
}else{
|
|
||||||
return [
|
|
||||||
[ "id", {"label":"ID","type":"hidden"}],
|
|
||||||
[ "name", {"label":"Name","type":"placeholder"}],
|
|
||||||
[ "client", {"label":"Client","type":"placeholder","allow-null":true,"remote-source":["Client","id","name"]}],
|
|
||||||
[ "details", {"label":"Details","type":"placeholder","validation":"none"}],
|
|
||||||
[ "status", {"label":"Status","type":"select","source":[["Active","Active"],["On Hold","On Hold"],["Completed","Completed"],["Dropped","Dropped"]]}]
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
ProjectAdapter.method('getHelpLink', function () {
|
|
||||||
return 'http://blog.icehrm.com/docs/projects/';
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* EmployeeProjectAdapter
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
function EmployeeProjectAdapter(endPoint) {
|
|
||||||
this.initAdapter(endPoint);
|
|
||||||
}
|
|
||||||
|
|
||||||
EmployeeProjectAdapter.inherits(AdapterBase);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
EmployeeProjectAdapter.method('getDataMapping', function() {
|
|
||||||
return [
|
|
||||||
"id",
|
|
||||||
"employee",
|
|
||||||
"project"
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
EmployeeProjectAdapter.method('getHeaders', function() {
|
|
||||||
return [
|
|
||||||
{ "sTitle": "ID" ,"bVisible":false},
|
|
||||||
{ "sTitle": "Employee" },
|
|
||||||
{ "sTitle": "Project" }
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
EmployeeProjectAdapter.method('getFormFields', function() {
|
|
||||||
return [
|
|
||||||
[ "id", {"label":"ID","type":"hidden"}],
|
|
||||||
[ "employee", {"label":"Employee","type":"select2","remote-source":["Employee","id","first_name+last_name"]}],
|
|
||||||
[ "project", {"label":"Project","type":"select2","remote-source":["Project","id","name"]}],
|
|
||||||
[ "details", {"label":"Details","type":"textarea","validation":"none"}]
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
EmployeeProjectAdapter.method('getFilters', function() {
|
|
||||||
return [
|
|
||||||
[ "employee", {"label":"Employee","type":"select2","remote-source":["Employee","id","first_name+last_name"]}]
|
|
||||||
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
EmployeeProjectAdapter.method('getHelpLink', function () {
|
|
||||||
return 'http://blog.icehrm.com/docs/projects/';
|
|
||||||
});
|
|
||||||
|
|
||||||
@@ -1,127 +0,0 @@
|
|||||||
<?php
|
|
||||||
/*
|
|
||||||
This file is part of iCE Hrm.
|
|
||||||
|
|
||||||
iCE Hrm is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
iCE Hrm is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with iCE Hrm. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
------------------------------------------------------------------
|
|
||||||
|
|
||||||
Original work Copyright (c) 2012 [Gamonoid Media Pvt. Ltd]
|
|
||||||
Developer: Thilina Hasantha (thilina.hasantha[at]gmail.com / facebook.com/thilinah)
|
|
||||||
*/
|
|
||||||
|
|
||||||
$moduleName = 'company_structure';
|
|
||||||
define('MODULE_PATH',dirname(__FILE__));
|
|
||||||
include APP_BASE_PATH.'header.php';
|
|
||||||
include APP_BASE_PATH.'modulejslibs.inc.php';
|
|
||||||
?><div class="span9">
|
|
||||||
|
|
||||||
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
|
||||||
<li class="active"><a id="tabSkill" href="#tabPageSkill"><?=t('Skills')?></a></li>
|
|
||||||
<li><a id="tabEducation" href="#tabPageEducation"><?=t('Education')?></a></li>
|
|
||||||
<li><a id="tabCertification" href="#tabPageCertification"><?=t('Certifications')?></a></li>
|
|
||||||
<li><a id="tabLanguage" href="#tabPageLanguage"><?=t('Languages')?></a></li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<div class="tab-content">
|
|
||||||
<div class="tab-pane active" id="tabPageSkill">
|
|
||||||
<div id="Skill" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div id="SkillForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="tab-pane" id="tabPageEducation">
|
|
||||||
<div id="Education" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div id="EducationForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="tab-pane" id="tabPageCertification">
|
|
||||||
<div id="Certification" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div id="CertificationForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="tab-pane" id="tabPageLanguage">
|
|
||||||
<div id="Language" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div id="LanguageForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<script>
|
|
||||||
var modJsList = new Array();
|
|
||||||
|
|
||||||
modJsList['tabSkill'] = new SkillAdapter('Skill');
|
|
||||||
<?php if(isset($modulePermissions['perm']['Add Skills']) && $modulePermissions['perm']['Add Skills'] == "No"){?>
|
|
||||||
modJsList['tabSkill'].setShowAddNew(false);
|
|
||||||
<?php }?>
|
|
||||||
<?php if(isset($modulePermissions['perm']['Delete Skills']) && $modulePermissions['perm']['Delete Skills'] == "No"){?>
|
|
||||||
modJsList['tabSkill'].setShowDelete(false);
|
|
||||||
<?php }?>
|
|
||||||
<?php if(isset($modulePermissions['perm']['Edit Skills']) && $modulePermissions['perm']['Edit Skills'] == "No"){?>
|
|
||||||
modJsList['tabSkill'].setShowEdit(false);
|
|
||||||
<?php }?>
|
|
||||||
|
|
||||||
|
|
||||||
modJsList['tabEducation'] = new EducationAdapter('Education');
|
|
||||||
<?php if(isset($modulePermissions['perm']['Add Education']) && $modulePermissions['perm']['Add Education'] == "No"){?>
|
|
||||||
modJsList['tabEducation'].setShowAddNew(false);
|
|
||||||
<?php }?>
|
|
||||||
<?php if(isset($modulePermissions['perm']['Delete Education']) && $modulePermissions['perm']['Delete Education'] == "No"){?>
|
|
||||||
modJsList['tabEducation'].setShowDelete(false);
|
|
||||||
<?php }?>
|
|
||||||
<?php if(isset($modulePermissions['perm']['Edit Education']) && $modulePermissions['perm']['Edit Education'] == "No"){?>
|
|
||||||
modJsList['tabEducation'].setShowEdit(false);
|
|
||||||
<?php }?>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
modJsList['tabCertification'] = new CertificationAdapter('Certification');
|
|
||||||
<?php if(isset($modulePermissions['perm']['Add Certifications']) && $modulePermissions['perm']['Add Certifications'] == "No"){?>
|
|
||||||
modJsList['tabCertification'].setShowAddNew(false);
|
|
||||||
<?php }?>
|
|
||||||
<?php if(isset($modulePermissions['perm']['Delete Certifications']) && $modulePermissions['perm']['Delete Certifications'] == "No"){?>
|
|
||||||
modJsList['tabCertification'].setShowDelete(false);
|
|
||||||
<?php }?>
|
|
||||||
<?php if(isset($modulePermissions['perm']['Edit Certifications']) && $modulePermissions['perm']['Edit Certifications'] == "No"){?>
|
|
||||||
modJsList['tabCertification'].setShowEdit(false);
|
|
||||||
<?php }?>
|
|
||||||
|
|
||||||
|
|
||||||
modJsList['tabLanguage'] = new LanguageAdapter('Language');
|
|
||||||
<?php if(isset($modulePermissions['perm']['Add Languages']) && $modulePermissions['perm']['Add Languages'] == "No"){?>
|
|
||||||
modJsList['tabLanguage'].setShowAddNew(false);
|
|
||||||
<?php }?>
|
|
||||||
<?php if(isset($modulePermissions['perm']['Delete Languages']) && $modulePermissions['perm']['Delete Languages'] == "No"){?>
|
|
||||||
modJsList['tabLanguage'].setShowDelete(false);
|
|
||||||
<?php }?>
|
|
||||||
<?php if(isset($modulePermissions['perm']['Edit Languages']) && $modulePermissions['perm']['Edit Languages'] == "No"){?>
|
|
||||||
modJsList['tabLanguage'].setShowEdit(false);
|
|
||||||
<?php }?>
|
|
||||||
|
|
||||||
var modJs = modJsList['tabSkill'];
|
|
||||||
|
|
||||||
</script>
|
|
||||||
<?php include APP_BASE_PATH.'footer.php';?>
|
|
||||||
@@ -1,161 +0,0 @@
|
|||||||
/**
|
|
||||||
* Author: Thilina Hasantha
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* SkillAdapter
|
|
||||||
*/
|
|
||||||
|
|
||||||
function SkillAdapter(endPoint) {
|
|
||||||
this.initAdapter(endPoint);
|
|
||||||
}
|
|
||||||
|
|
||||||
SkillAdapter.inherits(AdapterBase);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
SkillAdapter.method('getDataMapping', function() {
|
|
||||||
return [
|
|
||||||
"id",
|
|
||||||
"name",
|
|
||||||
"description"
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
SkillAdapter.method('getHeaders', function() {
|
|
||||||
return [
|
|
||||||
{ "sTitle": "ID","bVisible":false },
|
|
||||||
{ "sTitle": "Name" },
|
|
||||||
{ "sTitle": "Description"}
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
SkillAdapter.method('getFormFields', function() {
|
|
||||||
return [
|
|
||||||
[ "id", {"label":"ID","type":"hidden"}],
|
|
||||||
[ "name", {"label":"Name","type":"text"}],
|
|
||||||
[ "description", {"label":"Description","type":"textarea","validation":""}]
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
SkillAdapter.method('getHelpLink', function () {
|
|
||||||
return 'http://blog.icehrm.com/docs/qualifications/';
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* EducationAdapter
|
|
||||||
*/
|
|
||||||
|
|
||||||
function EducationAdapter(endPoint) {
|
|
||||||
this.initAdapter(endPoint);
|
|
||||||
}
|
|
||||||
|
|
||||||
EducationAdapter.inherits(AdapterBase);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
EducationAdapter.method('getDataMapping', function() {
|
|
||||||
return [
|
|
||||||
"id",
|
|
||||||
"name",
|
|
||||||
"description"
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
EducationAdapter.method('getHeaders', function() {
|
|
||||||
return [
|
|
||||||
{ "sTitle": "ID","bVisible":false },
|
|
||||||
{ "sTitle": "Name" },
|
|
||||||
{ "sTitle": "Description"}
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
EducationAdapter.method('getFormFields', function() {
|
|
||||||
return [
|
|
||||||
[ "id", {"label":"ID","type":"hidden"}],
|
|
||||||
[ "name", {"label":"Name","type":"text"}],
|
|
||||||
[ "description", {"label":"Description","type":"textarea","validation":""}]
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* CertificationAdapter
|
|
||||||
*/
|
|
||||||
|
|
||||||
function CertificationAdapter(endPoint) {
|
|
||||||
this.initAdapter(endPoint);
|
|
||||||
}
|
|
||||||
|
|
||||||
CertificationAdapter.inherits(AdapterBase);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
CertificationAdapter.method('getDataMapping', function() {
|
|
||||||
return [
|
|
||||||
"id",
|
|
||||||
"name",
|
|
||||||
"description"
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
CertificationAdapter.method('getHeaders', function() {
|
|
||||||
return [
|
|
||||||
{ "sTitle": "ID" ,"bVisible":false},
|
|
||||||
{ "sTitle": "Name" },
|
|
||||||
{ "sTitle": "Description"}
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
CertificationAdapter.method('getFormFields', function() {
|
|
||||||
return [
|
|
||||||
[ "id", {"label":"ID","type":"hidden"}],
|
|
||||||
[ "name", {"label":"Name","type":"text"}],
|
|
||||||
[ "description", {"label":"Description","type":"textarea","validation":""}]
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* LanguageAdapter
|
|
||||||
*/
|
|
||||||
|
|
||||||
function LanguageAdapter(endPoint) {
|
|
||||||
this.initAdapter(endPoint);
|
|
||||||
}
|
|
||||||
|
|
||||||
LanguageAdapter.inherits(AdapterBase);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
LanguageAdapter.method('getDataMapping', function() {
|
|
||||||
return [
|
|
||||||
"id",
|
|
||||||
"name",
|
|
||||||
"description"
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
LanguageAdapter.method('getHeaders', function() {
|
|
||||||
return [
|
|
||||||
{ "sTitle": "ID" ,"bVisible":false},
|
|
||||||
{ "sTitle": "Name" },
|
|
||||||
{ "sTitle": "Description"}
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
LanguageAdapter.method('getFormFields', function() {
|
|
||||||
return [
|
|
||||||
[ "id", {"label":"ID","type":"hidden"}],
|
|
||||||
[ "name", {"label":"Name","type":"text"}],
|
|
||||||
[ "description", {"label":"Description","type":"textarea","validation":""}]
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
{
|
|
||||||
"label": "Qualifications Setup",
|
|
||||||
"menu": "Admin",
|
|
||||||
"order": "4",
|
|
||||||
"icon": "fa-check-square-o",
|
|
||||||
"user_levels": [
|
|
||||||
"Admin",
|
|
||||||
"Manager"
|
|
||||||
],
|
|
||||||
"permissions": {
|
|
||||||
"Manager": {
|
|
||||||
"Add Skills": "Yes",
|
|
||||||
"Edit Skills": "Yes",
|
|
||||||
"Delete Skills": "No",
|
|
||||||
"Add Education": "Yes",
|
|
||||||
"Edit Education": "Yes",
|
|
||||||
"Delete Education": "No",
|
|
||||||
"Add Certifications": "Yes",
|
|
||||||
"Edit Certifications": "Yes",
|
|
||||||
"Delete Certifications": "No",
|
|
||||||
"Add Languages": "Yes",
|
|
||||||
"Edit Languages": "Yes",
|
|
||||||
"Delete Languages": "No"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"model_namespace": "\\Qualifications\\Common\\Model",
|
|
||||||
"manager": "\\Qualifications\\Admin\\Api\\QualificationsAdminManager"
|
|
||||||
}
|
|
||||||
@@ -1,48 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
$moduleName = 'Reports';
|
|
||||||
define('MODULE_PATH',dirname(__FILE__));
|
|
||||||
include APP_BASE_PATH.'header.php';
|
|
||||||
include APP_BASE_PATH.'modulejslibs.inc.php';
|
|
||||||
?><div class="span9">
|
|
||||||
|
|
||||||
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
|
||||||
<li class="active"><a id="tabReport" href="#tabPageReport"><?=t('Reports')?></a></li>
|
|
||||||
<li class=""><a id="tabExports" href="#tabPageExports"><?=t('Exports')?></a></li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<div class="tab-content">
|
|
||||||
<div class="tab-pane active" id="tabPageReport">
|
|
||||||
<div id="Report" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div id="ReportForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="tab-pane" id="tabPageExports">
|
|
||||||
<div id="Exports" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div id="ExportsForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<script>
|
|
||||||
var modJsList = new Array();
|
|
||||||
|
|
||||||
modJsList['tabReport'] = new ReportAdapter('Report','Report','{"type":"Reports"}','report_group');
|
|
||||||
modJsList['tabReport'].setShowAddNew(false);
|
|
||||||
modJsList['tabReport'].setRemoteTable(true);
|
|
||||||
|
|
||||||
modJsList['tabExports'] = new ReportAdapter('Report','Exports','{"type":"Exports"}','report_group');
|
|
||||||
modJsList['tabExports'].setShowAddNew(false);
|
|
||||||
modJsList['tabExports'].setRemoteTable(true);
|
|
||||||
|
|
||||||
var modJs = modJsList['tabReport'];
|
|
||||||
|
|
||||||
</script>
|
|
||||||
<?php include APP_BASE_PATH.'footer.php';?>
|
|
||||||
@@ -1,396 +0,0 @@
|
|||||||
/**
|
|
||||||
* Author: Thilina Hasantha
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* ReportAdapter
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
function ReportAdapter(endPoint,tab,filter,orderBy) {
|
|
||||||
this.initAdapter(endPoint,tab,filter,orderBy);
|
|
||||||
this._construct();
|
|
||||||
}
|
|
||||||
|
|
||||||
ReportAdapter.inherits(AdapterBase);
|
|
||||||
|
|
||||||
ReportAdapter.method('_construct', function() {
|
|
||||||
this._formFileds = [
|
|
||||||
[ "id", {"label":"ID","type":"hidden"}],
|
|
||||||
[ "name", {"label":"Name","type":"label","validation":""}],
|
|
||||||
[ "parameters", {"label":"Parameters","type":"fieldset","validation":"none"}]
|
|
||||||
];
|
|
||||||
this.remoteFieldsExists = false;
|
|
||||||
});
|
|
||||||
|
|
||||||
ReportAdapter.method('_initLocalFormFields', function() {
|
|
||||||
this._formFileds = [
|
|
||||||
[ "id", {"label":"ID","type":"hidden"}],
|
|
||||||
[ "name", {"label":"Name","type":"label","validation":""}],
|
|
||||||
[ "parameters", {"label":"Parameters","type":"fieldset","validation":"none"}]
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
ReportAdapter.method('setRemoteFieldExists', function(val) {
|
|
||||||
this.remoteFieldsExists = val;
|
|
||||||
});
|
|
||||||
|
|
||||||
ReportAdapter.method('getDataMapping', function() {
|
|
||||||
return [
|
|
||||||
"id",
|
|
||||||
"icon",
|
|
||||||
"name",
|
|
||||||
"details",
|
|
||||||
"parameters"
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
ReportAdapter.method('getHeaders', function() {
|
|
||||||
return [
|
|
||||||
{ "sTitle": "ID" ,"bVisible":false},
|
|
||||||
{ "sTitle": "","bSortable":false,"sWidth":"22px"},
|
|
||||||
{ "sTitle": "Name","sWidth":"30%"},
|
|
||||||
{ "sTitle": "Details"},
|
|
||||||
{ "sTitle": "Parameters","bVisible":false},
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
ReportAdapter.method('getFormFields', function() {
|
|
||||||
return this._formFileds;
|
|
||||||
});
|
|
||||||
|
|
||||||
ReportAdapter.method('processFormFieldsWithObject', function(object) {
|
|
||||||
var that = this;
|
|
||||||
this._initLocalFormFields();
|
|
||||||
var len = this._formFileds.length;
|
|
||||||
var fieldIDsToDelete = [];
|
|
||||||
var fieldsToDelete = [];
|
|
||||||
this.remoteFieldsExists = false;
|
|
||||||
for(var i=0;i<len;i++){
|
|
||||||
if(this._formFileds[i][1]['type']=="fieldset"){
|
|
||||||
var newFields = JSON.parse(object[this._formFileds[i][0]]);
|
|
||||||
fieldsToDelete.push(this._formFileds[i][0]);
|
|
||||||
newFields.forEach(function(entry) {
|
|
||||||
that._formFileds.push(entry);
|
|
||||||
if(entry[1]['remote-source'] != undefined && entry[1]['remote-source'] != null){
|
|
||||||
that.remoteFieldsExists = true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var tempArray = [];
|
|
||||||
that._formFileds.forEach(function(entry) {
|
|
||||||
if(jQuery.inArray(entry[0], fieldsToDelete) < 0){
|
|
||||||
tempArray.push(entry);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
that._formFileds = tempArray;
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
ReportAdapter.method('renderForm', function(object) {
|
|
||||||
var that = this;
|
|
||||||
this.processFormFieldsWithObject(object);
|
|
||||||
if(this.remoteFieldsExists){
|
|
||||||
var cb = function(){
|
|
||||||
that.renderFormNew(object);
|
|
||||||
};
|
|
||||||
this.initFieldMasterData(cb);
|
|
||||||
}else{
|
|
||||||
this.initFieldMasterData();
|
|
||||||
that.renderFormNew(object);
|
|
||||||
}
|
|
||||||
|
|
||||||
this.currentReport = object;
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
ReportAdapter.method('renderFormNew', function(object) {
|
|
||||||
|
|
||||||
var that = this;
|
|
||||||
var signatureIds = [];
|
|
||||||
if(object == null || object == undefined){
|
|
||||||
this.currentId = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.preRenderForm(object);
|
|
||||||
|
|
||||||
var formHtml = this.templates['formTemplate'];
|
|
||||||
var html = "";
|
|
||||||
var fields = this.getFormFields();
|
|
||||||
|
|
||||||
for(var i=0;i<fields.length;i++){
|
|
||||||
var metaField = this.getMetaFieldForRendering(fields[i][0]);
|
|
||||||
if(metaField == "" || metaField == undefined){
|
|
||||||
html += this.renderFormField(fields[i]);
|
|
||||||
}else{
|
|
||||||
var metaVal = object[metaField];
|
|
||||||
if(metaVal != '' && metaVal != null && metaVal != undefined && metaVal.trim() != ''){
|
|
||||||
html += this.renderFormField(JSON.parse(metaVal));
|
|
||||||
}else{
|
|
||||||
html += this.renderFormField(fields[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
formHtml = formHtml.replace(/_id_/g,this.getTableName()+"_submit");
|
|
||||||
formHtml = formHtml.replace(/_fields_/g,html);
|
|
||||||
|
|
||||||
|
|
||||||
var $tempDomObj;
|
|
||||||
var randomFormId = this.generateRandom(14);
|
|
||||||
if(!this.showFormOnPopup){
|
|
||||||
$tempDomObj = $("#"+this.getTableName()+'Form');
|
|
||||||
}else{
|
|
||||||
$tempDomObj = $('<div class="reviewBlock popupForm" data-content="Form"></div>');
|
|
||||||
$tempDomObj.attr('id',randomFormId);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
$tempDomObj.html(formHtml);
|
|
||||||
|
|
||||||
|
|
||||||
$tempDomObj.find('.datefield').datepicker({'viewMode':2});
|
|
||||||
$tempDomObj.find('.timefield').datetimepicker({
|
|
||||||
language: 'en',
|
|
||||||
pickDate: false
|
|
||||||
});
|
|
||||||
$tempDomObj.find('.datetimefield').datetimepicker({
|
|
||||||
language: 'en'
|
|
||||||
});
|
|
||||||
|
|
||||||
$tempDomObj.find('.colorpick').colorpicker();
|
|
||||||
|
|
||||||
//$tempDomObj.find('.select2Field').select2();
|
|
||||||
$tempDomObj.find('.select2Field').each(function() {
|
|
||||||
$(this).select2().select2('val', $(this).find("option:eq(0)").val());
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
$tempDomObj.find('.select2Multi').each(function() {
|
|
||||||
$(this).select2().on("change",function(e){
|
|
||||||
var parentRow = $(this).parents(".row");
|
|
||||||
var height = parentRow.find(".select2-choices").height();
|
|
||||||
parentRow.height(parseInt(height));
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
$tempDomObj.find('.signatureField').each(function() {
|
|
||||||
//$(this).data('signaturePad',new SignaturePad($(this)));
|
|
||||||
signatureIds.push($(this).attr('id'));
|
|
||||||
});
|
|
||||||
|
|
||||||
for(var i=0;i<fields.length;i++){
|
|
||||||
if(fields[i][1].type == "datagroup"){
|
|
||||||
$tempDomObj.find("#"+fields[i][0]).data('field',fields[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(this.showSave == false){
|
|
||||||
$tempDomObj.find('.saveBtn').remove();
|
|
||||||
}else{
|
|
||||||
$tempDomObj.find('.saveBtn').off();
|
|
||||||
$tempDomObj.find('.saveBtn').data("modJs",this);
|
|
||||||
$tempDomObj.find('.saveBtn').on( "click", function() {
|
|
||||||
if($(this ).data('modJs').saveSuccessItemCallback != null && $(this ).data('modJs').saveSuccessItemCallback!= undefined){
|
|
||||||
$(this ).data('modJs').save($(this ).data('modJs').retriveItemsAfterSave(), $(this ).data('modJs').saveSuccessItemCallback);
|
|
||||||
}else{
|
|
||||||
$(this ).data('modJs').save();
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if(this.showCancel== false){
|
|
||||||
$tempDomObj.find('.cancelBtn').remove();
|
|
||||||
}else{
|
|
||||||
$tempDomObj.find('.cancelBtn').off();
|
|
||||||
$tempDomObj.find('.cancelBtn').data("modJs",this);
|
|
||||||
$tempDomObj.find('.cancelBtn').on( "click", function() {
|
|
||||||
$(this ).data('modJs').cancel();
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!this.showFormOnPopup){
|
|
||||||
$("#"+this.getTableName()+'Form').show();
|
|
||||||
$("#"+this.getTableName()).hide();
|
|
||||||
|
|
||||||
for(var i=0;i<signatureIds.length;i++){
|
|
||||||
$("#"+signatureIds[i])
|
|
||||||
.data('signaturePad',
|
|
||||||
new SignaturePad(document.getElementById(signatureIds[i])));
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if(object != undefined && object != null){
|
|
||||||
this.fillForm(object);
|
|
||||||
}
|
|
||||||
|
|
||||||
}else{
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//var tHtml = $tempDomObj.wrap('<div>').parent().html();
|
|
||||||
//this.showMessage("Edit",tHtml,null,null,true);
|
|
||||||
this.showMessage("Edit","",null,null,true);
|
|
||||||
|
|
||||||
$("#plainMessageModel .modal-body").html("");
|
|
||||||
$("#plainMessageModel .modal-body").append($tempDomObj);
|
|
||||||
|
|
||||||
|
|
||||||
for(var i=0;i<signatureIds.length;i++){
|
|
||||||
$("#"+signatureIds[i])
|
|
||||||
.data('signaturePad',
|
|
||||||
new SignaturePad(document.getElementById(signatureIds[i])));
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if(object != undefined && object != null){
|
|
||||||
this.fillForm(object,"#"+randomFormId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
this.postRenderForm(object,$tempDomObj);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
ReportAdapter.method('getActionButtonsHtml', function(id,data) {
|
|
||||||
var html = '<div style="width:80px;"><img class="tableActionButton" src="_BASE_images/download.png" style="cursor:pointer;" rel="tooltip" title="Download" onclick="modJs.edit(_id_);return false;"></img></div>';
|
|
||||||
html = html.replace(/_id_/g,id);
|
|
||||||
html = html.replace(/_BASE_/g,this.baseUrl);
|
|
||||||
return html;
|
|
||||||
});
|
|
||||||
|
|
||||||
ReportAdapter.method('addSuccessCallBack', function(callBackData,serverData) {
|
|
||||||
var fileName = serverData[0];
|
|
||||||
var link;
|
|
||||||
|
|
||||||
if(fileName.indexOf("https:") == 0){
|
|
||||||
link = '<a href="'+fileName+'" target="_blank" style="font-size:14px;font-weight:bold;">Download Report <img src="_BASE_images/download.png"></img> </a>';
|
|
||||||
}else{
|
|
||||||
link = '<a href="'+modJs.getCustomActionUrl("download",{'file':fileName})+'" target="_blank" style="font-size:14px;font-weight:bold;">Download Report <img src="_BASE_images/download.png"></img> </a>';
|
|
||||||
}
|
|
||||||
link = link.replace(/_BASE_/g,this.baseUrl);
|
|
||||||
|
|
||||||
if(this.currentReport.output == "PDF" || this.currentReport.output == "JSON"){
|
|
||||||
|
|
||||||
this.showMessage("Download Report",link);
|
|
||||||
|
|
||||||
}else{
|
|
||||||
if(serverData[1].length == 0){
|
|
||||||
this.showMessage("Empty Report","There were no data for selected filters");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
var tableHtml = link+'<br/><br/><div class="box-body table-responsive" style="overflow-x:scroll;padding: 5px;border: solid 1px #DDD;"><table id="tempReportTable" cellpadding="0" cellspacing="0" border="0" class="table table-bordered table-striped"></table></div>';
|
|
||||||
|
|
||||||
//Delete existing temp report table
|
|
||||||
$("#tempReportTable").remove();
|
|
||||||
|
|
||||||
//this.showMessage("Report",tableHtml);
|
|
||||||
|
|
||||||
$("#"+this.table).html(tableHtml);
|
|
||||||
$("#"+this.table).show();
|
|
||||||
$("#"+this.table+"Form").hide();
|
|
||||||
|
|
||||||
//Prepare headers
|
|
||||||
var headers = [];
|
|
||||||
for(title in serverData[1]){
|
|
||||||
headers.push({ "sTitle": serverData[1][title]});
|
|
||||||
}
|
|
||||||
|
|
||||||
var data = serverData[2];
|
|
||||||
|
|
||||||
|
|
||||||
var dataTableParams = {
|
|
||||||
"oLanguage": {
|
|
||||||
"sLengthMenu": "_MENU_ records per page"
|
|
||||||
},
|
|
||||||
"aaData": data,
|
|
||||||
"aoColumns": headers,
|
|
||||||
"bSort": false,
|
|
||||||
"iDisplayLength": 15,
|
|
||||||
"iDisplayStart": 0
|
|
||||||
};
|
|
||||||
|
|
||||||
$("#tempReportTable").dataTable( dataTableParams );
|
|
||||||
|
|
||||||
$(".dataTables_paginate ul").addClass("pagination");
|
|
||||||
$(".dataTables_length").hide();
|
|
||||||
$(".dataTables_filter input").addClass("form-control");
|
|
||||||
$(".dataTables_filter input").attr("placeholder","Search");
|
|
||||||
$(".dataTables_filter label").contents().filter(function(){
|
|
||||||
return (this.nodeType == 3);
|
|
||||||
}).remove();
|
|
||||||
$('.tableActionButton').tooltip();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
ReportAdapter.method('fillForm', function(object) {
|
|
||||||
var fields = this.getFormFields();
|
|
||||||
for(var i=0;i<fields.length;i++) {
|
|
||||||
if(fields[i][1].type == 'label'){
|
|
||||||
$("#"+this.getTableName()+'Form #'+fields[i][0]).html(object[fields[i][0]]);
|
|
||||||
}else{
|
|
||||||
$("#"+this.getTableName()+'Form #'+fields[i][0]).val(object[fields[i][0]]);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function ReportGenAdapter(endPoint) {
|
|
||||||
this.initAdapter(endPoint);
|
|
||||||
}
|
|
||||||
|
|
||||||
ReportGenAdapter.inherits(AdapterBase);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
ReportGenAdapter.method('getDataMapping', function() {
|
|
||||||
return [
|
|
||||||
"id",
|
|
||||||
"name",
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
ReportGenAdapter.method('getHeaders', function() {
|
|
||||||
return [
|
|
||||||
{ "sTitle": "ID" ,"bVisible":false},
|
|
||||||
{ "sTitle": "Name" }
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
ReportGenAdapter.method('getFormFields', function() {
|
|
||||||
return [
|
|
||||||
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
ReportGenAdapter.method('getActionButtonsHtml', function(id,data) {
|
|
||||||
var html = '<div style="width:80px;"><img class="tableActionButton" src="_BASE_images/download.png" style="cursor:pointer;" rel="tooltip" title="Download" onclick="download(_name_);return false;"></img></div>';
|
|
||||||
html = html.replace(/_id_/g,id);
|
|
||||||
html = html.replace(/_name_/g,data[1]);
|
|
||||||
html = html.replace(/_BASE_/g,this.baseUrl);
|
|
||||||
return html;
|
|
||||||
});
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
"label": "Reports",
|
|
||||||
"menu": "Admin Reports",
|
|
||||||
"order": "1",
|
|
||||||
"icon": "fa-file-o",
|
|
||||||
"user_levels": [
|
|
||||||
"Admin",
|
|
||||||
"Manager"
|
|
||||||
],
|
|
||||||
"dashboardPosition": 7,
|
|
||||||
"permissions": [],
|
|
||||||
"model_namespace": "\\Reports\\Common\\Model",
|
|
||||||
"manager": "\\Reports\\Admin\\Api\\ReportsAdminManager"
|
|
||||||
}
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
$moduleName = 'salary';
|
|
||||||
define('MODULE_PATH',dirname(__FILE__));
|
|
||||||
include APP_BASE_PATH.'header.php';
|
|
||||||
include APP_BASE_PATH.'modulejslibs.inc.php';
|
|
||||||
|
|
||||||
$moduleBuilder = new \Classes\ModuleBuilder\ModuleBuilder();
|
|
||||||
|
|
||||||
$moduleBuilder->addModuleOrGroup(new \Classes\ModuleBuilder\ModuleTab(
|
|
||||||
'SalaryComponentType','SalaryComponentType','Salary Component Types','SalaryComponentTypeAdapter','','',true
|
|
||||||
));
|
|
||||||
$moduleBuilder->addModuleOrGroup(new \Classes\ModuleBuilder\ModuleTab(
|
|
||||||
'SalaryComponent','SalaryComponent','Salary Components','SalaryComponentAdapter','',''
|
|
||||||
));
|
|
||||||
$moduleBuilder->addModuleOrGroup(new \Classes\ModuleBuilder\ModuleTab(
|
|
||||||
'EmployeeSalary','EmployeeSalary','Employee Salary Components','EmployeeSalaryAdapter','','',false,array("setRemoteTable"=>"true"))
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
echo \Classes\UIManager::getInstance()->renderModule($moduleBuilder);
|
|
||||||
|
|
||||||
include APP_BASE_PATH.'footer.php';
|
|
||||||
@@ -1,134 +0,0 @@
|
|||||||
/**
|
|
||||||
* Author: Thilina Hasantha
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* SalaryComponentTypeAdapter
|
|
||||||
*/
|
|
||||||
|
|
||||||
function SalaryComponentTypeAdapter(endPoint,tab,filter,orderBy) {
|
|
||||||
this.initAdapter(endPoint,tab,filter,orderBy);
|
|
||||||
}
|
|
||||||
|
|
||||||
SalaryComponentTypeAdapter.inherits(AdapterBase);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
SalaryComponentTypeAdapter.method('getDataMapping', function() {
|
|
||||||
return [
|
|
||||||
"id",
|
|
||||||
"code",
|
|
||||||
"name"
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
SalaryComponentTypeAdapter.method('getHeaders', function() {
|
|
||||||
return [
|
|
||||||
{ "sTitle": "ID" ,"bVisible":false},
|
|
||||||
{ "sTitle": "Code" },
|
|
||||||
{ "sTitle": "Name"}
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
SalaryComponentTypeAdapter.method('getFormFields', function() {
|
|
||||||
return [
|
|
||||||
[ "id", {"label":"ID","type":"hidden"}],
|
|
||||||
[ "code", {"label":"Code","type":"text","validation":""}],
|
|
||||||
[ "name", {"label":"Name","type":"text","validation":""}]
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* SalaryComponentAdapter
|
|
||||||
*/
|
|
||||||
|
|
||||||
function SalaryComponentAdapter(endPoint,tab,filter,orderBy) {
|
|
||||||
this.initAdapter(endPoint,tab,filter,orderBy);
|
|
||||||
}
|
|
||||||
|
|
||||||
SalaryComponentAdapter.inherits(AdapterBase);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
SalaryComponentAdapter.method('getDataMapping', function() {
|
|
||||||
return [
|
|
||||||
"id",
|
|
||||||
"name",
|
|
||||||
"componentType",
|
|
||||||
"details"
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
SalaryComponentAdapter.method('getHeaders', function() {
|
|
||||||
return [
|
|
||||||
{ "sTitle": "ID" ,"bVisible":false},
|
|
||||||
{ "sTitle": "Name" },
|
|
||||||
{ "sTitle": "Salary Component Type" },
|
|
||||||
{ "sTitle": "Details"}
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
SalaryComponentAdapter.method('getFormFields', function() {
|
|
||||||
return [
|
|
||||||
[ "id", {"label":"ID","type":"hidden"}],
|
|
||||||
[ "name", {"label":"Name","type":"text","validation":""}],
|
|
||||||
[ "componentType", {"label":"Salary Component Type","type":"select2","remote-source":["SalaryComponentType","id","name"]}],
|
|
||||||
[ "details", {"label":"Details","type":"textarea","validation":"none"}]
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* EmployeeSalaryAdapter
|
|
||||||
*/
|
|
||||||
|
|
||||||
function EmployeeSalaryAdapter(endPoint,tab,filter,orderBy) {
|
|
||||||
this.initAdapter(endPoint,tab,filter,orderBy);
|
|
||||||
}
|
|
||||||
|
|
||||||
EmployeeSalaryAdapter.inherits(AdapterBase);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
EmployeeSalaryAdapter.method('getDataMapping', function() {
|
|
||||||
return [
|
|
||||||
"id",
|
|
||||||
"employee",
|
|
||||||
"component",
|
|
||||||
"amount",
|
|
||||||
"details"
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
EmployeeSalaryAdapter.method('getHeaders', function() {
|
|
||||||
return [
|
|
||||||
{ "sTitle": "ID" ,"bVisible":false},
|
|
||||||
{ "sTitle": "Employee" },
|
|
||||||
{ "sTitle": "Salary Component" },
|
|
||||||
{ "sTitle": "Amount"},
|
|
||||||
{ "sTitle": "Details"}
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
EmployeeSalaryAdapter.method('getFormFields', function() {
|
|
||||||
return [
|
|
||||||
[ "id", {"label":"ID","type":"hidden"}],
|
|
||||||
[ "employee", {"label":"Employee","type":"select2","remote-source":["Employee","id","first_name+last_name"]}],
|
|
||||||
[ "component", {"label":"Salary Component","type":"select2","remote-source":["SalaryComponent","id","name"]}],
|
|
||||||
[ "amount", {"label":"Amount","type":"text","validation":"float"}],
|
|
||||||
[ "details", {"label":"Details","type":"textarea","validation":"none"}]
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
EmployeeSalaryAdapter.method('getFilters', function() {
|
|
||||||
return [
|
|
||||||
[ "employee", {"label":"Employee","type":"select2","remote-source":["Employee","id","first_name+last_name"]}]
|
|
||||||
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
{
|
|
||||||
"label": "Salary",
|
|
||||||
"menu": "Payroll",
|
|
||||||
"order": "1",
|
|
||||||
"icon": "fa-money",
|
|
||||||
"user_levels": [
|
|
||||||
"Admin"
|
|
||||||
],
|
|
||||||
"permissions": [],
|
|
||||||
"model_namespace": "\\Salary\\Common\\Model",
|
|
||||||
"manager": "\\Salary\\Admin\\Api\\SalaryAdminManager"
|
|
||||||
}
|
|
||||||
@@ -1,69 +0,0 @@
|
|||||||
<?php
|
|
||||||
/*
|
|
||||||
This file is part of iCE Hrm.
|
|
||||||
|
|
||||||
iCE Hrm is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
iCE Hrm is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with iCE Hrm. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
------------------------------------------------------------------
|
|
||||||
|
|
||||||
Original work Copyright (c) 2012 [Gamonoid Media Pvt. Ltd]
|
|
||||||
Developer: Thilina Hasantha (thilina.hasantha[at]gmail.com / facebook.com/thilinah)
|
|
||||||
*/
|
|
||||||
|
|
||||||
$moduleName = 'settings';
|
|
||||||
define('MODULE_PATH',dirname(__FILE__));
|
|
||||||
include APP_BASE_PATH.'header.php';
|
|
||||||
include APP_BASE_PATH.'modulejslibs.inc.php';
|
|
||||||
|
|
||||||
$moduleBuilder = new \Classes\ModuleBuilder\ModuleBuilder();
|
|
||||||
|
|
||||||
$options1 = array();
|
|
||||||
$options1['setShowAddNew'] = 'false';
|
|
||||||
|
|
||||||
$moduleBuilder->addModuleOrGroup(new \Classes\ModuleBuilder\ModuleTab(
|
|
||||||
'CompanySetting','Setting','Company','SettingAdapter','{"name":["Company:"]}','name',true,$options1
|
|
||||||
));
|
|
||||||
$moduleBuilder->addModuleOrGroup(new \Classes\ModuleBuilder\ModuleTab(
|
|
||||||
'SystemSetting','Setting','System','SettingAdapter','{"name":["System:"]}','name',false,$options1
|
|
||||||
));
|
|
||||||
if (!defined('CLOUD_INSTALLATION')) {
|
|
||||||
$moduleBuilder->addModuleOrGroup(new \Classes\ModuleBuilder\ModuleTab(
|
|
||||||
'EmailSetting', 'Setting', 'Email', 'SettingAdapter', '{"name":["Email:"]}', 'name', false, $options1
|
|
||||||
));
|
|
||||||
}
|
|
||||||
$moduleBuilder->addModuleOrGroup(new \Classes\ModuleBuilder\ModuleTab(
|
|
||||||
'LeaveSetting','Setting','Leave / PTO','SettingAdapter','{"name":["Leave:"]}','name',false,$options1
|
|
||||||
));
|
|
||||||
if(!defined('LDAP_ENABLED') || LDAP_ENABLED == true){
|
|
||||||
$moduleBuilder->addModuleOrGroup(new \Classes\ModuleBuilder\ModuleTab(
|
|
||||||
'LDAPSetting','Setting','LDAP','SettingAdapter','{"name":["LDAP:"]}','name',false,$options1
|
|
||||||
));
|
|
||||||
}
|
|
||||||
$moduleBuilder->addModuleOrGroup(new \Classes\ModuleBuilder\ModuleTab(
|
|
||||||
'AttendanceSetting','Setting','Attendance','SettingAdapter','{"name":["Attendance:"]}','name',false,$options1
|
|
||||||
));
|
|
||||||
$moduleBuilder->addModuleOrGroup(new \Classes\ModuleBuilder\ModuleTab(
|
|
||||||
'OtherSetting','Setting','Other','SettingAdapter','{"name":["Projects:","Recruitment:","Notifications:","Expense:","Travel:","Api:","Overtime:"]}','name',false,$options1
|
|
||||||
));
|
|
||||||
echo \Classes\UIManager::getInstance()->renderModule($moduleBuilder);
|
|
||||||
?>
|
|
||||||
</div>
|
|
||||||
<script>
|
|
||||||
|
|
||||||
$(window).load(function() {
|
|
||||||
modJs.loadRemoteDataForSettings();
|
|
||||||
});
|
|
||||||
|
|
||||||
</script>
|
|
||||||
<?php include APP_BASE_PATH.'footer.php';?>
|
|
||||||
@@ -1,111 +0,0 @@
|
|||||||
/**
|
|
||||||
* Author: Thilina Hasantha
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* SettingAdapter
|
|
||||||
*/
|
|
||||||
|
|
||||||
function SettingAdapter(endPoint,tab,filter,orderBy) {
|
|
||||||
this.initAdapter(endPoint,tab,filter,orderBy);
|
|
||||||
}
|
|
||||||
|
|
||||||
SettingAdapter.inherits(AdapterBase);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
SettingAdapter.method('getDataMapping', function() {
|
|
||||||
return [
|
|
||||||
"id",
|
|
||||||
"name",
|
|
||||||
"value",
|
|
||||||
"description"
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
SettingAdapter.method('getHeaders', function() {
|
|
||||||
return [
|
|
||||||
{ "sTitle": "ID" ,"bVisible":false},
|
|
||||||
{ "sTitle": "Name" },
|
|
||||||
{ "sTitle": "Value"},
|
|
||||||
{ "sTitle": "Details"}
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
SettingAdapter.method('getFormFields', function() {
|
|
||||||
return [
|
|
||||||
[ "id", {"label":"ID","type":"hidden"}],
|
|
||||||
[ "value", {"label":"Value","type":"text","validation":"none"}]
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
SettingAdapter.method('getActionButtonsHtml', function(id,data) {
|
|
||||||
var html = '<div style="width:80px;"><img class="tableActionButton" src="_BASE_images/edit.png" style="cursor:pointer;" rel="tooltip" title="Edit" onclick="modJs.edit(_id_);return false;"></img></div>';
|
|
||||||
html = html.replace(/_id_/g,id);
|
|
||||||
html = html.replace(/_BASE_/g,this.baseUrl);
|
|
||||||
return html;
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
SettingAdapter.method('getMetaFieldForRendering', function(fieldName) {
|
|
||||||
if(fieldName == "value"){
|
|
||||||
return "meta";
|
|
||||||
}
|
|
||||||
return "";
|
|
||||||
});
|
|
||||||
|
|
||||||
SettingAdapter.method('edit', function(id) {
|
|
||||||
this.loadRemoteDataForSettings();
|
|
||||||
this.uber('edit',id);
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
SettingAdapter.method('fillForm', function(object) {
|
|
||||||
|
|
||||||
var metaField = this.getMetaFieldForRendering('value');
|
|
||||||
var metaVal = object[metaField];
|
|
||||||
var formFields = null;
|
|
||||||
|
|
||||||
if(metaVal != "" && metaVal != undefined){
|
|
||||||
var formFields = [
|
|
||||||
[ "id", {"label":"ID","type":"hidden"}],
|
|
||||||
JSON.parse(metaVal)
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
this.uber('fillForm',object, null, formFields);
|
|
||||||
$("#helptext").html(object.description);
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
SettingAdapter.method('loadRemoteDataForSettings', function () {
|
|
||||||
var fields = [];
|
|
||||||
var field = null;
|
|
||||||
fields.push(["country", {"label": "Country", "type": "select2multi", "remote-source": ["Country", "id", "name"]}]);
|
|
||||||
fields.push(["currency", {"label": "Currency", "type": "select2multi", "remote-source": ["CurrencyType","id","code+name"]}]);
|
|
||||||
fields.push(["nationality", {"label": "Nationality", "type": "select2multi", "remote-source": ["Nationality","id","name"]}]);
|
|
||||||
fields.push(["supportedLanguage", {"label":"Value","type":"select2","allow-null":false,"remote-source":["SupportedLanguage","name","description"]}]);
|
|
||||||
|
|
||||||
for(index in fields){
|
|
||||||
field = fields[index];
|
|
||||||
if (field[1]['remote-source'] != undefined && field[1]['remote-source'] != null) {
|
|
||||||
var key = field[1]['remote-source'][0] + "_" + field[1]['remote-source'][1] + "_" + field[1]['remote-source'][2];
|
|
||||||
this.fieldMasterDataKeys[key] = false;
|
|
||||||
this.sourceMapping[field[0]] = field[1]['remote-source'];
|
|
||||||
|
|
||||||
var callBackData = {};
|
|
||||||
callBackData['callBack'] = 'initFieldMasterDataResponse';
|
|
||||||
callBackData['callBackData'] = [key];
|
|
||||||
|
|
||||||
this.getFieldValues(field[1]['remote-source'], callBackData);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
SettingAdapter.method('getHelpLink', function () {
|
|
||||||
return 'http://blog.icehrm.com/docs/settings/';
|
|
||||||
});
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
<?php
|
|
||||||
/*
|
|
||||||
This file is part of iCE Hrm.
|
|
||||||
|
|
||||||
iCE Hrm is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
iCE Hrm is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with iCE Hrm. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
------------------------------------------------------------------
|
|
||||||
|
|
||||||
Original work Copyright (c) 2012 [Gamonoid Media Pvt. Ltd]
|
|
||||||
Developer: Thilina Hasantha (thilina.hasantha[at]gmail.com / facebook.com/thilinah)
|
|
||||||
*/
|
|
||||||
|
|
||||||
$moduleName = 'travel';
|
|
||||||
define('MODULE_PATH',dirname(__FILE__));
|
|
||||||
include APP_BASE_PATH.'header.php';
|
|
||||||
include APP_BASE_PATH.'modulejslibs.inc.php';
|
|
||||||
|
|
||||||
$options = array();
|
|
||||||
$options['setRemoteTable'] = 'true';
|
|
||||||
|
|
||||||
$moduleBuilder = new \Classes\ModuleBuilder\ModuleBuilder();
|
|
||||||
$moduleBuilder->addModuleOrGroup(new \Classes\ModuleBuilder\ModuleTab(
|
|
||||||
'EmployeeTravelRecord',
|
|
||||||
'EmployeeTravelRecord',
|
|
||||||
'Travel Requests',
|
|
||||||
'EmployeeTravelRecordAdminAdapter',
|
|
||||||
'',
|
|
||||||
'',
|
|
||||||
true,
|
|
||||||
$options
|
|
||||||
));
|
|
||||||
echo \Classes\UIManager::getInstance()->renderModule($moduleBuilder);
|
|
||||||
|
|
||||||
|
|
||||||
$itemName = 'TravelRequest';
|
|
||||||
$moduleName = 'Travel Management';
|
|
||||||
$itemNameLower = strtolower($itemName);
|
|
||||||
|
|
||||||
include APP_BASE_PATH.'footer.php';
|
|
||||||
@@ -1,182 +0,0 @@
|
|||||||
/**
|
|
||||||
* Author: Thilina Hasantha
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* ImmigrationDocumentAdapter
|
|
||||||
*/
|
|
||||||
|
|
||||||
function ImmigrationDocumentAdapter(endPoint) {
|
|
||||||
this.initAdapter(endPoint);
|
|
||||||
}
|
|
||||||
|
|
||||||
ImmigrationDocumentAdapter.inherits(AdapterBase);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
ImmigrationDocumentAdapter.method('getDataMapping', function() {
|
|
||||||
return [
|
|
||||||
"id",
|
|
||||||
"name",
|
|
||||||
"details",
|
|
||||||
"required",
|
|
||||||
"alert_on_missing",
|
|
||||||
"alert_before_expiry"
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
ImmigrationDocumentAdapter.method('getHeaders', function() {
|
|
||||||
return [
|
|
||||||
{ "sTitle": "ID" ,"bVisible":false},
|
|
||||||
{ "sTitle": "Name" },
|
|
||||||
{ "sTitle": "Details"},
|
|
||||||
{ "sTitle": "Compulsory"},
|
|
||||||
{ "sTitle": "Alert If Not Found"},
|
|
||||||
{ "sTitle": "Alert Before Expiry"}
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
ImmigrationDocumentAdapter.method('getFormFields', function() {
|
|
||||||
return [
|
|
||||||
[ "id", {"label":"ID","type":"hidden"}],
|
|
||||||
[ "name", {"label":"Name","type":"text","validation":""}],
|
|
||||||
[ "details", {"label":"Details","type":"textarea","validation":"none"}],
|
|
||||||
[ "required", {"label":"Compulsory","type":"select","source":[["No","No"],["Yes","Yes"]]}],
|
|
||||||
[ "alert_on_missing", {"label":"Alert If Not Found","type":"select","source":[["No","No"],["Yes","Yes"]]}],
|
|
||||||
[ "alert_before_expiry", {"label":"Alert Before Expiry","type":"select","source":[["No","No"],["Yes","Yes"]]}],
|
|
||||||
[ "alert_before_day_number", {"label":"Days for Expiry Alert","type":"text","validation":""}]
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* EmployeeImmigrationAdapter
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
function EmployeeImmigrationAdapter(endPoint) {
|
|
||||||
this.initAdapter(endPoint);
|
|
||||||
}
|
|
||||||
|
|
||||||
EmployeeImmigrationAdapter.inherits(AdapterBase);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
EmployeeImmigrationAdapter.method('getDataMapping', function() {
|
|
||||||
return [
|
|
||||||
"id",
|
|
||||||
"employee",
|
|
||||||
"document",
|
|
||||||
"documentname",
|
|
||||||
"valid_until",
|
|
||||||
"status"
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
EmployeeImmigrationAdapter.method('getHeaders', function() {
|
|
||||||
return [
|
|
||||||
{ "sTitle": "ID" ,"bVisible":false},
|
|
||||||
{ "sTitle": "Employee" },
|
|
||||||
{ "sTitle": "Document" },
|
|
||||||
{ "sTitle": "Document Id" },
|
|
||||||
{ "sTitle": "Valid Until"},
|
|
||||||
{ "sTitle": "Status"}
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
EmployeeImmigrationAdapter.method('getFormFields', function() {
|
|
||||||
return [
|
|
||||||
[ "id", {"label":"ID","type":"hidden"}],
|
|
||||||
[ "employee", {"label":"Employee","type":"select2","remote-source":["Employee","id","first_name+last_name"]}],
|
|
||||||
[ "document", {"label":"Document","type":"select2","remote-source":["ImmigrationDocument","id","name"]}],
|
|
||||||
[ "documentname", {"label":"Document Id","type":"text","validation":""}],
|
|
||||||
[ "valid_until", {"label":"Valid Until","type":"date","validation":"none"}],
|
|
||||||
[ "status", {"label":"Status","type":"select","source":[["Active","Active"],["Inactive","Inactive"],["Draft","Draft"]]}],
|
|
||||||
[ "details", {"label":"Details","type":"textarea","validation":"none"}],
|
|
||||||
[ "attachment1", {"label":"Attachment 1","type":"fileupload","validation":"none"}],
|
|
||||||
[ "attachment2", {"label":"Attachment 2","type":"fileupload","validation":"none"}],
|
|
||||||
[ "attachment3", {"label":"Attachment 3","type":"fileupload","validation":"none"}]
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
EmployeeImmigrationAdapter.method('getFilters', function() {
|
|
||||||
return [
|
|
||||||
[ "employee", {"label":"Employee","type":"select2","remote-source":["Employee","id","first_name+last_name"]}]
|
|
||||||
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* EmployeeTravelRecordAdminAdapter
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
function EmployeeTravelRecordAdminAdapter(endPoint,tab,filter,orderBy) {
|
|
||||||
this.initAdapter(endPoint,tab,filter,orderBy);
|
|
||||||
this.itemName = 'TravelRequest';
|
|
||||||
this.itemNameLower = 'travelrequest';
|
|
||||||
this.modulePathName = 'travel';
|
|
||||||
}
|
|
||||||
|
|
||||||
EmployeeTravelRecordAdminAdapter.inherits(ApproveAdminAdapter);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
EmployeeTravelRecordAdminAdapter.method('getDataMapping', function() {
|
|
||||||
return [
|
|
||||||
"id",
|
|
||||||
"employee",
|
|
||||||
"type",
|
|
||||||
"purpose",
|
|
||||||
"travel_from",
|
|
||||||
"travel_to",
|
|
||||||
"travel_date",
|
|
||||||
"status"
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
EmployeeTravelRecordAdminAdapter.method('getHeaders', function() {
|
|
||||||
return [
|
|
||||||
{ "sTitle": "ID" ,"bVisible":false},
|
|
||||||
{ "sTitle": "Employee" },
|
|
||||||
{ "sTitle": "Travel Type" },
|
|
||||||
{ "sTitle": "Purpose" },
|
|
||||||
{ "sTitle": "From"},
|
|
||||||
{ "sTitle": "To"},
|
|
||||||
{ "sTitle": "Travel Date"},
|
|
||||||
{ "sTitle": "Status"}
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
EmployeeTravelRecordAdminAdapter.method('getFormFields', function() {
|
|
||||||
return [
|
|
||||||
["id", {"label": "ID", "type": "hidden"}],
|
|
||||||
["employee", {
|
|
||||||
"label": "Employee",
|
|
||||||
"type": "select2",
|
|
||||||
"sort": "none",
|
|
||||||
"allow-null": false,
|
|
||||||
"remote-source": ["Employee", "id", "first_name+last_name", "getActiveSubordinateEmployees"]
|
|
||||||
}],
|
|
||||||
["type", {
|
|
||||||
"label": "Travel Type",
|
|
||||||
"type": "select",
|
|
||||||
"source": [["Local", "Local"], ["International", "International"]]
|
|
||||||
}],
|
|
||||||
["purpose", {"label": "Purpose of Travel", "type": "textarea", "validation": ""}],
|
|
||||||
["travel_from", {"label": "Travel From", "type": "text", "validation": ""}],
|
|
||||||
["travel_to", {"label": "Travel To", "type": "text", "validation": ""}],
|
|
||||||
["travel_date", {"label": "Travel Date", "type": "datetime", "validation": ""}],
|
|
||||||
["return_date", {"label": "Return Date", "type": "datetime", "validation": ""}],
|
|
||||||
["details", {"label": "Notes", "type": "textarea", "validation": "none"}],
|
|
||||||
["currency", {"label": "Currency", "type": "select2", "allow-null":false, "remote-source": ["CurrencyType", "id", "code"]}],
|
|
||||||
["funding", {"label": "Total Funding Proposed", "type": "text", "validation": "float"}],
|
|
||||||
["attachment1", {"label": "Itinerary / Cab Receipt", "type": "fileupload", "validation": "none"}],
|
|
||||||
["attachment2", {"label": "Other Attachment 1", "type": "fileupload", "validation": "none"}],
|
|
||||||
["attachment3", {"label": "Other Attachment 2", "type": "fileupload", "validation": "none"}]
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
"label": "Travel Administration",
|
|
||||||
"menu": "Employees",
|
|
||||||
"order": "6",
|
|
||||||
"icon": "fa-plane",
|
|
||||||
"user_levels": [
|
|
||||||
"Admin",
|
|
||||||
"Manager"
|
|
||||||
],
|
|
||||||
"dashboardPosition": 12,
|
|
||||||
"permissions": [],
|
|
||||||
"model_namespace": "\\Travel\\Common\\Model",
|
|
||||||
"manager": "\\Travel\\Admin\\Api\\TravelAdminManager"
|
|
||||||
}
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
Dear #_name_#,<br/><br/>
|
|
||||||
Your account in <b>IceHrm</b> has been created on <a href="#_url_#">#_url_#</a><br/><br/>
|
|
||||||
|
|
||||||
<b>Please find your account information below:</b><br/><br/>
|
|
||||||
Username: <b>#_username_#</b><br/>
|
|
||||||
Email: <b>#_email_#</b> (You can use, username or email to login)<br/>
|
|
||||||
Password: <b>#_password_#</b> (Strongly advised to change this password once logged in)<br/>
|
|
||||||
<br/>
|
|
||||||
|
|
||||||
|
|
||||||
To get started, follow this link: <b><a href="#_url_#">#_url_#</a></b><br/><br/>
|
|
||||||
|
|
||||||
<font face="Arial, sans-serif" size="1" color="#4a4a4a">
|
|
||||||
THIS IS AN AUTOMATED EMAIL - REPLIES WILL BE SENT TO #_adminEmail_#
|
|
||||||
</font>
|
|
||||||
<br/>
|
|
||||||
<br/>
|
|
||||||
@@ -1,66 +0,0 @@
|
|||||||
<?php
|
|
||||||
/*
|
|
||||||
This file is part of iCE Hrm.
|
|
||||||
|
|
||||||
iCE Hrm is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
iCE Hrm is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with iCE Hrm. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
------------------------------------------------------------------
|
|
||||||
|
|
||||||
Original work Copyright (c) 2012 [Gamonoid Media Pvt. Ltd]
|
|
||||||
Developer: Thilina Hasantha (thilina.hasantha[at]gmail.com / facebook.com/thilinah)
|
|
||||||
*/
|
|
||||||
|
|
||||||
$moduleName = 'users';
|
|
||||||
define('MODULE_PATH',dirname(__FILE__));
|
|
||||||
include APP_BASE_PATH.'header.php';
|
|
||||||
include APP_BASE_PATH.'modulejslibs.inc.php';
|
|
||||||
|
|
||||||
?><div class="span9">
|
|
||||||
|
|
||||||
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
|
||||||
<li class="active"><a id="tabUser" href="#tabPageUser"><?=t('Users')?></a></li>
|
|
||||||
<li class=""><a id="tabUserRole" href="#tabPageUserRole"><?=t('User Roles')?></a></li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<div class="tab-content">
|
|
||||||
<div class="tab-pane active" id="tabPageUser">
|
|
||||||
<div id="User" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div id="UserForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="tab-pane" id="tabPageUserRole">
|
|
||||||
<div id="UserRole" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div id="UserRoleForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<script>
|
|
||||||
var modJsList = new Array();
|
|
||||||
modJsList['tabUser'] = new UserAdapter('User');
|
|
||||||
<?php if(isset($_REQUEST['action']) && $_REQUEST['action'] == "new" && isset($_REQUEST['object'])){?>
|
|
||||||
modJsList['tabUser'].newInitObject = JSON.parse(Base64.decode('<?=$_REQUEST['object']?>'));
|
|
||||||
<?php }?>
|
|
||||||
modJsList['tabUserRole'] = new UserRoleAdapter('UserRole');
|
|
||||||
var modJs = modJsList['tabUser'];
|
|
||||||
|
|
||||||
</script>
|
|
||||||
<?php include APP_BASE_PATH.'footer.php';?>
|
|
||||||
@@ -1,205 +0,0 @@
|
|||||||
/**
|
|
||||||
* Author: Thilina Hasantha
|
|
||||||
*/
|
|
||||||
|
|
||||||
function UserAdapter(endPoint) {
|
|
||||||
this.initAdapter(endPoint);
|
|
||||||
}
|
|
||||||
|
|
||||||
UserAdapter.inherits(AdapterBase);
|
|
||||||
|
|
||||||
|
|
||||||
UserAdapter.method('getDataMapping', function() {
|
|
||||||
return [
|
|
||||||
"id",
|
|
||||||
"username",
|
|
||||||
"email",
|
|
||||||
"employee",
|
|
||||||
"user_level"
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
UserAdapter.method('getHeaders', function() {
|
|
||||||
return [
|
|
||||||
{ "sTitle": "ID" },
|
|
||||||
{ "sTitle": "User Name" },
|
|
||||||
{ "sTitle": "Authentication Email" },
|
|
||||||
{ "sTitle": "Employee"},
|
|
||||||
{ "sTitle": "User Level"}
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
UserAdapter.method('getFormFields', function() {
|
|
||||||
return [
|
|
||||||
[ "id", {"label":"ID","type":"hidden","validation":""}],
|
|
||||||
[ "username", {"label":"User Name","type":"text","validation":"username"}],
|
|
||||||
[ "email", {"label":"Email","type":"text","validation":"email"}],
|
|
||||||
[ "employee", {"label":"Employee","type":"select2","allow-null":true,"remote-source":["Employee","id","first_name+last_name"]}],
|
|
||||||
[ "user_level", {"label":"User Level","type":"select","source":[["Admin","Admin"],["Manager","Manager"],["Employee","Employee"],["Other","Other"]]}],
|
|
||||||
[ "user_roles", {"label":"User Roles","type":"select2multi","remote-source":["UserRole","id","name"]}],
|
|
||||||
[ "lang", {"label":"Language","type":"select2","allow-null":true,"remote-source":["SupportedLanguage","id","description"]}],
|
|
||||||
[ "default_module", {"label":"Default Module","type":"select2","null-label":"No Default Module","allow-null":true,"remote-source":["Module","id","menu+label"]}]
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
UserAdapter.method('postRenderForm', function(object, $tempDomObj) {
|
|
||||||
if(object == null || object == undefined){
|
|
||||||
$tempDomObj.find("#changePasswordBtn").remove();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
UserAdapter.method('changePassword', function() {
|
|
||||||
$('#adminUsersModel').modal('show');
|
|
||||||
$('#adminUsersChangePwd #newpwd').val('');
|
|
||||||
$('#adminUsersChangePwd #conpwd').val('');
|
|
||||||
});
|
|
||||||
|
|
||||||
UserAdapter.method('saveUserSuccessCallBack', function(callBackData,serverData) {
|
|
||||||
var user = callBackData[0];
|
|
||||||
if (callBackData[1]) {
|
|
||||||
this.showMessage("Create User","An email has been sent to "+user['email']+" with a temporary password to login to IceHrm.");
|
|
||||||
} else {
|
|
||||||
this.showMessage("Create User","User created successfully. But there was a problem sending welcome email.");
|
|
||||||
}
|
|
||||||
this.get([]);
|
|
||||||
});
|
|
||||||
|
|
||||||
UserAdapter.method('saveUserFailCallBack', function(callBackData,serverData) {
|
|
||||||
this.showMessage("Error",callBackData);
|
|
||||||
});
|
|
||||||
|
|
||||||
UserAdapter.method('doCustomValidation', function(params) {
|
|
||||||
var msg = null;
|
|
||||||
if((params['user_level'] != "Admin" && params['user_level'] != "Other") && params['employee'] == "NULL"){
|
|
||||||
msg = "For this user type, you have to assign an employee when adding or editing the user.<br/>";
|
|
||||||
msg += " You may create a new employee through 'Admin'->'Employees' menu";
|
|
||||||
}
|
|
||||||
return msg;
|
|
||||||
});
|
|
||||||
|
|
||||||
UserAdapter.method('save', function() {
|
|
||||||
var validator = new FormValidation(this.getTableName()+"_submit",true,{'ShowPopup':false,"LabelErrorClass":"error"});
|
|
||||||
if(validator.checkValues()){
|
|
||||||
var params = validator.getFormParameters();
|
|
||||||
|
|
||||||
var msg = this.doCustomValidation(params);
|
|
||||||
if(msg == null){
|
|
||||||
var id = $('#'+this.getTableName()+"_submit #id").val();
|
|
||||||
if(id != null && id != undefined && id != ""){
|
|
||||||
$(params).attr('id',id);
|
|
||||||
this.add(params,[]);
|
|
||||||
}else{
|
|
||||||
|
|
||||||
var reqJson = JSON.stringify(params);
|
|
||||||
|
|
||||||
var callBackData = [];
|
|
||||||
callBackData['callBackData'] = [];
|
|
||||||
callBackData['callBackSuccess'] = 'saveUserSuccessCallBack';
|
|
||||||
callBackData['callBackFail'] = 'saveUserFailCallBack';
|
|
||||||
|
|
||||||
this.customAction('saveUser','admin=users',reqJson,callBackData);
|
|
||||||
}
|
|
||||||
|
|
||||||
}else{
|
|
||||||
//$("#"+this.getTableName()+'Form .label').html(msg);
|
|
||||||
//$("#"+this.getTableName()+'Form .label').show();
|
|
||||||
this.showMessage("Error Saving User",msg);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
UserAdapter.method('changePasswordConfirm', function() {
|
|
||||||
$('#adminUsersChangePwd_error').hide();
|
|
||||||
|
|
||||||
var passwordValidation = function (str) {
|
|
||||||
var val = /^[a-zA-Z0-9]\w{6,}$/;
|
|
||||||
return str != null && val.test(str);
|
|
||||||
};
|
|
||||||
|
|
||||||
var password = $('#adminUsersChangePwd #newpwd').val();
|
|
||||||
|
|
||||||
if(!passwordValidation(password)){
|
|
||||||
$('#adminUsersChangePwd_error').html("Password may contain only letters, numbers and should be longer than 6 characters");
|
|
||||||
$('#adminUsersChangePwd_error').show();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var conPassword = $('#adminUsersChangePwd #conpwd').val();
|
|
||||||
|
|
||||||
if(conPassword != password){
|
|
||||||
$('#adminUsersChangePwd_error').html("Passwords don't match");
|
|
||||||
$('#adminUsersChangePwd_error').show();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var req = {"id":this.currentId,"pwd":conPassword};
|
|
||||||
var reqJson = JSON.stringify(req);
|
|
||||||
|
|
||||||
var callBackData = [];
|
|
||||||
callBackData['callBackData'] = [];
|
|
||||||
callBackData['callBackSuccess'] = 'changePasswordSuccessCallBack';
|
|
||||||
callBackData['callBackFail'] = 'changePasswordFailCallBack';
|
|
||||||
|
|
||||||
this.customAction('changePassword','admin=users',reqJson,callBackData);
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
UserAdapter.method('closeChangePassword', function() {
|
|
||||||
$('#adminUsersModel').modal('hide');
|
|
||||||
});
|
|
||||||
|
|
||||||
UserAdapter.method('changePasswordSuccessCallBack', function(callBackData,serverData) {
|
|
||||||
this.closeChangePassword();
|
|
||||||
this.showMessage("Password Change","Password changed successfully");
|
|
||||||
});
|
|
||||||
|
|
||||||
UserAdapter.method('changePasswordFailCallBack', function(callBackData,serverData) {
|
|
||||||
this.closeChangePassword();
|
|
||||||
this.showMessage("Error",callBackData);
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* UserRoleAdapter
|
|
||||||
*/
|
|
||||||
|
|
||||||
function UserRoleAdapter(endPoint,tab,filter,orderBy) {
|
|
||||||
this.initAdapter(endPoint,tab,filter,orderBy);
|
|
||||||
}
|
|
||||||
|
|
||||||
UserRoleAdapter.inherits(AdapterBase);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
UserRoleAdapter.method('getDataMapping', function() {
|
|
||||||
return [
|
|
||||||
"id",
|
|
||||||
"name"
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
UserRoleAdapter.method('getHeaders', function() {
|
|
||||||
return [
|
|
||||||
{ "sTitle": "ID" ,"bVisible":false},
|
|
||||||
{ "sTitle": "Name"}
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
UserRoleAdapter.method('postRenderForm', function(object, $tempDomObj) {
|
|
||||||
$tempDomObj.find("#changePasswordBtn").remove();
|
|
||||||
});
|
|
||||||
|
|
||||||
UserRoleAdapter.method('getFormFields', function() {
|
|
||||||
return [
|
|
||||||
[ "id", {"label":"ID","type":"hidden"}],
|
|
||||||
[ "name", {"label":"Name","type":"text","validation":""}]
|
|
||||||
];
|
|
||||||
});
|
|
||||||
1451
api/AdapterBase.js
1451
api/AdapterBase.js
File diff suppressed because it is too large
Load Diff
503
api/AesCrypt.js
503
api/AesCrypt.js
@@ -1,503 +0,0 @@
|
|||||||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
|
||||||
/* AES implementation in JavaScript (c) Chris Veness 2005-2014 / MIT Licence */
|
|
||||||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
|
||||||
|
|
||||||
/* jshint node:true *//* global define */
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* AES (Rijndael cipher) encryption routines,
|
|
||||||
*
|
|
||||||
* Reference implementation of FIPS-197 http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf.
|
|
||||||
*
|
|
||||||
* @namespace
|
|
||||||
*/
|
|
||||||
var Aes = {};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* AES Cipher function: encrypt 'input' state with Rijndael algorithm [§5.1];
|
|
||||||
* applies Nr rounds (10/12/14) using key schedule w for 'add round key' stage.
|
|
||||||
*
|
|
||||||
* @param {number[]} input - 16-byte (128-bit) input state array.
|
|
||||||
* @param {number[][]} w - Key schedule as 2D byte-array (Nr+1 x Nb bytes).
|
|
||||||
* @returns {number[]} Encrypted output state array.
|
|
||||||
*/
|
|
||||||
Aes.cipher = function(input, w) {
|
|
||||||
var Nb = 4; // block size (in words): no of columns in state (fixed at 4 for AES)
|
|
||||||
var Nr = w.length/Nb - 1; // no of rounds: 10/12/14 for 128/192/256-bit keys
|
|
||||||
|
|
||||||
var state = [[],[],[],[]]; // initialise 4xNb byte-array 'state' with input [§3.4]
|
|
||||||
for (var i=0; i<4*Nb; i++) state[i%4][Math.floor(i/4)] = input[i];
|
|
||||||
|
|
||||||
state = Aes.addRoundKey(state, w, 0, Nb);
|
|
||||||
|
|
||||||
for (var round=1; round<Nr; round++) {
|
|
||||||
state = Aes.subBytes(state, Nb);
|
|
||||||
state = Aes.shiftRows(state, Nb);
|
|
||||||
state = Aes.mixColumns(state, Nb);
|
|
||||||
state = Aes.addRoundKey(state, w, round, Nb);
|
|
||||||
}
|
|
||||||
|
|
||||||
state = Aes.subBytes(state, Nb);
|
|
||||||
state = Aes.shiftRows(state, Nb);
|
|
||||||
state = Aes.addRoundKey(state, w, Nr, Nb);
|
|
||||||
|
|
||||||
var output = new Array(4*Nb); // convert state to 1-d array before returning [§3.4]
|
|
||||||
for (var i=0; i<4*Nb; i++) output[i] = state[i%4][Math.floor(i/4)];
|
|
||||||
|
|
||||||
return output;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Perform key expansion to generate a key schedule from a cipher key [§5.2].
|
|
||||||
*
|
|
||||||
* @param {number[]} key - Cipher key as 16/24/32-byte array.
|
|
||||||
* @returns {number[][]} Expanded key schedule as 2D byte-array (Nr+1 x Nb bytes).
|
|
||||||
*/
|
|
||||||
Aes.keyExpansion = function(key) {
|
|
||||||
var Nb = 4; // block size (in words): no of columns in state (fixed at 4 for AES)
|
|
||||||
var Nk = key.length/4; // key length (in words): 4/6/8 for 128/192/256-bit keys
|
|
||||||
var Nr = Nk + 6; // no of rounds: 10/12/14 for 128/192/256-bit keys
|
|
||||||
|
|
||||||
var w = new Array(Nb*(Nr+1));
|
|
||||||
var temp = new Array(4);
|
|
||||||
|
|
||||||
// initialise first Nk words of expanded key with cipher key
|
|
||||||
for (var i=0; i<Nk; i++) {
|
|
||||||
var r = [key[4*i], key[4*i+1], key[4*i+2], key[4*i+3]];
|
|
||||||
w[i] = r;
|
|
||||||
}
|
|
||||||
|
|
||||||
// expand the key into the remainder of the schedule
|
|
||||||
for (var i=Nk; i<(Nb*(Nr+1)); i++) {
|
|
||||||
w[i] = new Array(4);
|
|
||||||
for (var t=0; t<4; t++) temp[t] = w[i-1][t];
|
|
||||||
// each Nk'th word has extra transformation
|
|
||||||
if (i % Nk == 0) {
|
|
||||||
temp = Aes.subWord(Aes.rotWord(temp));
|
|
||||||
for (var t=0; t<4; t++) temp[t] ^= Aes.rCon[i/Nk][t];
|
|
||||||
}
|
|
||||||
// 256-bit key has subWord applied every 4th word
|
|
||||||
else if (Nk > 6 && i%Nk == 4) {
|
|
||||||
temp = Aes.subWord(temp);
|
|
||||||
}
|
|
||||||
// xor w[i] with w[i-1] and w[i-Nk]
|
|
||||||
for (var t=0; t<4; t++) w[i][t] = w[i-Nk][t] ^ temp[t];
|
|
||||||
}
|
|
||||||
|
|
||||||
return w;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Apply SBox to state S [§5.1.1]
|
|
||||||
* @private
|
|
||||||
*/
|
|
||||||
Aes.subBytes = function(s, Nb) {
|
|
||||||
for (var r=0; r<4; r++) {
|
|
||||||
for (var c=0; c<Nb; c++) s[r][c] = Aes.sBox[s[r][c]];
|
|
||||||
}
|
|
||||||
return s;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Shift row r of state S left by r bytes [§5.1.2]
|
|
||||||
* @private
|
|
||||||
*/
|
|
||||||
Aes.shiftRows = function(s, Nb) {
|
|
||||||
var t = new Array(4);
|
|
||||||
for (var r=1; r<4; r++) {
|
|
||||||
for (var c=0; c<4; c++) t[c] = s[r][(c+r)%Nb]; // shift into temp copy
|
|
||||||
for (var c=0; c<4; c++) s[r][c] = t[c]; // and copy back
|
|
||||||
} // note that this will work for Nb=4,5,6, but not 7,8 (always 4 for AES):
|
|
||||||
return s; // see asmaes.sourceforge.net/rijndael/rijndaelImplementation.pdf
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Combine bytes of each col of state S [§5.1.3]
|
|
||||||
* @private
|
|
||||||
*/
|
|
||||||
Aes.mixColumns = function(s, Nb) {
|
|
||||||
for (var c=0; c<4; c++) {
|
|
||||||
var a = new Array(4); // 'a' is a copy of the current column from 's'
|
|
||||||
var b = new Array(4); // 'b' is a•{02} in GF(2^8)
|
|
||||||
for (var i=0; i<4; i++) {
|
|
||||||
a[i] = s[i][c];
|
|
||||||
b[i] = s[i][c]&0x80 ? s[i][c]<<1 ^ 0x011b : s[i][c]<<1;
|
|
||||||
}
|
|
||||||
// a[n] ^ b[n] is a•{03} in GF(2^8)
|
|
||||||
s[0][c] = b[0] ^ a[1] ^ b[1] ^ a[2] ^ a[3]; // {02}•a0 + {03}•a1 + a2 + a3
|
|
||||||
s[1][c] = a[0] ^ b[1] ^ a[2] ^ b[2] ^ a[3]; // a0 • {02}•a1 + {03}•a2 + a3
|
|
||||||
s[2][c] = a[0] ^ a[1] ^ b[2] ^ a[3] ^ b[3]; // a0 + a1 + {02}•a2 + {03}•a3
|
|
||||||
s[3][c] = a[0] ^ b[0] ^ a[1] ^ a[2] ^ b[3]; // {03}•a0 + a1 + a2 + {02}•a3
|
|
||||||
}
|
|
||||||
return s;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Xor Round Key into state S [§5.1.4]
|
|
||||||
* @private
|
|
||||||
*/
|
|
||||||
Aes.addRoundKey = function(state, w, rnd, Nb) {
|
|
||||||
for (var r=0; r<4; r++) {
|
|
||||||
for (var c=0; c<Nb; c++) state[r][c] ^= w[rnd*4+c][r];
|
|
||||||
}
|
|
||||||
return state;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Apply SBox to 4-byte word w
|
|
||||||
* @private
|
|
||||||
*/
|
|
||||||
Aes.subWord = function(w) {
|
|
||||||
for (var i=0; i<4; i++) w[i] = Aes.sBox[w[i]];
|
|
||||||
return w;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Rotate 4-byte word w left by one byte
|
|
||||||
* @private
|
|
||||||
*/
|
|
||||||
Aes.rotWord = function(w) {
|
|
||||||
var tmp = w[0];
|
|
||||||
for (var i=0; i<3; i++) w[i] = w[i+1];
|
|
||||||
w[3] = tmp;
|
|
||||||
return w;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// sBox is pre-computed multiplicative inverse in GF(2^8) used in subBytes and keyExpansion [§5.1.1]
|
|
||||||
Aes.sBox = [0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5,0x30,0x01,0x67,0x2b,0xfe,0xd7,0xab,0x76,
|
|
||||||
0xca,0x82,0xc9,0x7d,0xfa,0x59,0x47,0xf0,0xad,0xd4,0xa2,0xaf,0x9c,0xa4,0x72,0xc0,
|
|
||||||
0xb7,0xfd,0x93,0x26,0x36,0x3f,0xf7,0xcc,0x34,0xa5,0xe5,0xf1,0x71,0xd8,0x31,0x15,
|
|
||||||
0x04,0xc7,0x23,0xc3,0x18,0x96,0x05,0x9a,0x07,0x12,0x80,0xe2,0xeb,0x27,0xb2,0x75,
|
|
||||||
0x09,0x83,0x2c,0x1a,0x1b,0x6e,0x5a,0xa0,0x52,0x3b,0xd6,0xb3,0x29,0xe3,0x2f,0x84,
|
|
||||||
0x53,0xd1,0x00,0xed,0x20,0xfc,0xb1,0x5b,0x6a,0xcb,0xbe,0x39,0x4a,0x4c,0x58,0xcf,
|
|
||||||
0xd0,0xef,0xaa,0xfb,0x43,0x4d,0x33,0x85,0x45,0xf9,0x02,0x7f,0x50,0x3c,0x9f,0xa8,
|
|
||||||
0x51,0xa3,0x40,0x8f,0x92,0x9d,0x38,0xf5,0xbc,0xb6,0xda,0x21,0x10,0xff,0xf3,0xd2,
|
|
||||||
0xcd,0x0c,0x13,0xec,0x5f,0x97,0x44,0x17,0xc4,0xa7,0x7e,0x3d,0x64,0x5d,0x19,0x73,
|
|
||||||
0x60,0x81,0x4f,0xdc,0x22,0x2a,0x90,0x88,0x46,0xee,0xb8,0x14,0xde,0x5e,0x0b,0xdb,
|
|
||||||
0xe0,0x32,0x3a,0x0a,0x49,0x06,0x24,0x5c,0xc2,0xd3,0xac,0x62,0x91,0x95,0xe4,0x79,
|
|
||||||
0xe7,0xc8,0x37,0x6d,0x8d,0xd5,0x4e,0xa9,0x6c,0x56,0xf4,0xea,0x65,0x7a,0xae,0x08,
|
|
||||||
0xba,0x78,0x25,0x2e,0x1c,0xa6,0xb4,0xc6,0xe8,0xdd,0x74,0x1f,0x4b,0xbd,0x8b,0x8a,
|
|
||||||
0x70,0x3e,0xb5,0x66,0x48,0x03,0xf6,0x0e,0x61,0x35,0x57,0xb9,0x86,0xc1,0x1d,0x9e,
|
|
||||||
0xe1,0xf8,0x98,0x11,0x69,0xd9,0x8e,0x94,0x9b,0x1e,0x87,0xe9,0xce,0x55,0x28,0xdf,
|
|
||||||
0x8c,0xa1,0x89,0x0d,0xbf,0xe6,0x42,0x68,0x41,0x99,0x2d,0x0f,0xb0,0x54,0xbb,0x16];
|
|
||||||
|
|
||||||
|
|
||||||
// rCon is Round Constant used for the Key Expansion [1st col is 2^(r-1) in GF(2^8)] [§5.2]
|
|
||||||
Aes.rCon = [ [0x00, 0x00, 0x00, 0x00],
|
|
||||||
[0x01, 0x00, 0x00, 0x00],
|
|
||||||
[0x02, 0x00, 0x00, 0x00],
|
|
||||||
[0x04, 0x00, 0x00, 0x00],
|
|
||||||
[0x08, 0x00, 0x00, 0x00],
|
|
||||||
[0x10, 0x00, 0x00, 0x00],
|
|
||||||
[0x20, 0x00, 0x00, 0x00],
|
|
||||||
[0x40, 0x00, 0x00, 0x00],
|
|
||||||
[0x80, 0x00, 0x00, 0x00],
|
|
||||||
[0x1b, 0x00, 0x00, 0x00],
|
|
||||||
[0x36, 0x00, 0x00, 0x00] ];
|
|
||||||
|
|
||||||
|
|
||||||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
|
||||||
if (typeof module != 'undefined' && module.exports) module.exports = Aes; // CommonJs export
|
|
||||||
if (typeof define == 'function' && define.amd) define([], function() { return Aes; }); // AMD
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
|
||||||
/* AES Counter-mode implementation in JavaScript (c) Chris Veness 2005-2014 / MIT Licence */
|
|
||||||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
|
||||||
|
|
||||||
/* jshint node:true *//* global define, escape, unescape, btoa, atob */
|
|
||||||
'use strict';
|
|
||||||
if (typeof module!='undefined' && module.exports) var Aes = require('./aes'); // CommonJS (Node.js)
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Aes.Ctr: Counter-mode (CTR) wrapper for AES.
|
|
||||||
*
|
|
||||||
* This encrypts a Unicode string to produces a base64 ciphertext using 128/192/256-bit AES,
|
|
||||||
* and the converse to decrypt an encrypted ciphertext.
|
|
||||||
*
|
|
||||||
* See http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf
|
|
||||||
*
|
|
||||||
* @augments Aes
|
|
||||||
*/
|
|
||||||
Aes.Ctr = {};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Encrypt a text using AES encryption in Counter mode of operation.
|
|
||||||
*
|
|
||||||
* Unicode multi-byte character safe
|
|
||||||
*
|
|
||||||
* @param {string} plaintext - Source text to be encrypted.
|
|
||||||
* @param {string} password - The password to use to generate a key.
|
|
||||||
* @param {number} nBits - Number of bits to be used in the key; 128 / 192 / 256.
|
|
||||||
* @returns {string} Encrypted text.
|
|
||||||
*
|
|
||||||
* @example
|
|
||||||
* var encr = Aes.Ctr.encrypt('big secret', 'pāşšŵōřđ', 256); // encr: 'lwGl66VVwVObKIr6of8HVqJr'
|
|
||||||
*/
|
|
||||||
Aes.Ctr.encrypt = function(plaintext, password, nBits) {
|
|
||||||
var blockSize = 16; // block size fixed at 16 bytes / 128 bits (Nb=4) for AES
|
|
||||||
if (!(nBits==128 || nBits==192 || nBits==256)) return ''; // standard allows 128/192/256 bit keys
|
|
||||||
plaintext = String(plaintext).utf8Encode();
|
|
||||||
password = String(password).utf8Encode();
|
|
||||||
|
|
||||||
// use AES itself to encrypt password to get cipher key (using plain password as source for key
|
|
||||||
// expansion) - gives us well encrypted key (though hashed key might be preferred for prod'n use)
|
|
||||||
var nBytes = nBits/8; // no bytes in key (16/24/32)
|
|
||||||
var pwBytes = new Array(nBytes);
|
|
||||||
for (var i=0; i<nBytes; i++) { // use 1st 16/24/32 chars of password for key
|
|
||||||
pwBytes[i] = isNaN(password.charCodeAt(i)) ? 0 : password.charCodeAt(i);
|
|
||||||
}
|
|
||||||
var key = Aes.cipher(pwBytes, Aes.keyExpansion(pwBytes)); // gives us 16-byte key
|
|
||||||
key = key.concat(key.slice(0, nBytes-16)); // expand key to 16/24/32 bytes long
|
|
||||||
|
|
||||||
// initialise 1st 8 bytes of counter block with nonce (NIST SP800-38A §B.2): [0-1] = millisec,
|
|
||||||
// [2-3] = random, [4-7] = seconds, together giving full sub-millisec uniqueness up to Feb 2106
|
|
||||||
var counterBlock = new Array(blockSize);
|
|
||||||
|
|
||||||
var nonce = (new Date()).getTime(); // timestamp: milliseconds since 1-Jan-1970
|
|
||||||
var nonceMs = nonce%1000;
|
|
||||||
var nonceSec = Math.floor(nonce/1000);
|
|
||||||
var nonceRnd = Math.floor(Math.random()*0xffff);
|
|
||||||
// for debugging: nonce = nonceMs = nonceSec = nonceRnd = 0;
|
|
||||||
|
|
||||||
for (var i=0; i<2; i++) counterBlock[i] = (nonceMs >>> i*8) & 0xff;
|
|
||||||
for (var i=0; i<2; i++) counterBlock[i+2] = (nonceRnd >>> i*8) & 0xff;
|
|
||||||
for (var i=0; i<4; i++) counterBlock[i+4] = (nonceSec >>> i*8) & 0xff;
|
|
||||||
|
|
||||||
// and convert it to a string to go on the front of the ciphertext
|
|
||||||
var ctrTxt = '';
|
|
||||||
for (var i=0; i<8; i++) ctrTxt += String.fromCharCode(counterBlock[i]);
|
|
||||||
|
|
||||||
// generate key schedule - an expansion of the key into distinct Key Rounds for each round
|
|
||||||
var keySchedule = Aes.keyExpansion(key);
|
|
||||||
|
|
||||||
var blockCount = Math.ceil(plaintext.length/blockSize);
|
|
||||||
var ciphertxt = new Array(blockCount); // ciphertext as array of strings
|
|
||||||
|
|
||||||
for (var b=0; b<blockCount; b++) {
|
|
||||||
// set counter (block #) in last 8 bytes of counter block (leaving nonce in 1st 8 bytes)
|
|
||||||
// done in two stages for 32-bit ops: using two words allows us to go past 2^32 blocks (68GB)
|
|
||||||
for (var c=0; c<4; c++) counterBlock[15-c] = (b >>> c*8) & 0xff;
|
|
||||||
for (var c=0; c<4; c++) counterBlock[15-c-4] = (b/0x100000000 >>> c*8);
|
|
||||||
|
|
||||||
var cipherCntr = Aes.cipher(counterBlock, keySchedule); // -- encrypt counter block --
|
|
||||||
|
|
||||||
// block size is reduced on final block
|
|
||||||
var blockLength = b<blockCount-1 ? blockSize : (plaintext.length-1)%blockSize+1;
|
|
||||||
var cipherChar = new Array(blockLength);
|
|
||||||
|
|
||||||
for (var i=0; i<blockLength; i++) { // -- xor plaintext with ciphered counter char-by-char --
|
|
||||||
cipherChar[i] = cipherCntr[i] ^ plaintext.charCodeAt(b*blockSize+i);
|
|
||||||
cipherChar[i] = String.fromCharCode(cipherChar[i]);
|
|
||||||
}
|
|
||||||
ciphertxt[b] = cipherChar.join('');
|
|
||||||
}
|
|
||||||
|
|
||||||
// use Array.join() for better performance than repeated string appends
|
|
||||||
var ciphertext = ctrTxt + ciphertxt.join('');
|
|
||||||
ciphertext = ciphertext.base64Encode();
|
|
||||||
|
|
||||||
return ciphertext;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Decrypt a text encrypted by AES in counter mode of operation
|
|
||||||
*
|
|
||||||
* @param {string} ciphertext - Source text to be encrypted.
|
|
||||||
* @param {string} password - Password to use to generate a key.
|
|
||||||
* @param {number} nBits - Number of bits to be used in the key; 128 / 192 / 256.
|
|
||||||
* @returns {string} Decrypted text
|
|
||||||
*
|
|
||||||
* @example
|
|
||||||
* var decr = Aes.Ctr.encrypt('lwGl66VVwVObKIr6of8HVqJr', 'pāşšŵōřđ', 256); // decr: 'big secret'
|
|
||||||
*/
|
|
||||||
Aes.Ctr.decrypt = function(ciphertext, password, nBits) {
|
|
||||||
var blockSize = 16; // block size fixed at 16 bytes / 128 bits (Nb=4) for AES
|
|
||||||
if (!(nBits==128 || nBits==192 || nBits==256)) return ''; // standard allows 128/192/256 bit keys
|
|
||||||
ciphertext = String(ciphertext).base64Decode();
|
|
||||||
password = String(password).utf8Encode();
|
|
||||||
|
|
||||||
// use AES to encrypt password (mirroring encrypt routine)
|
|
||||||
var nBytes = nBits/8; // no bytes in key
|
|
||||||
var pwBytes = new Array(nBytes);
|
|
||||||
for (var i=0; i<nBytes; i++) {
|
|
||||||
pwBytes[i] = isNaN(password.charCodeAt(i)) ? 0 : password.charCodeAt(i);
|
|
||||||
}
|
|
||||||
var key = Aes.cipher(pwBytes, Aes.keyExpansion(pwBytes));
|
|
||||||
key = key.concat(key.slice(0, nBytes-16)); // expand key to 16/24/32 bytes long
|
|
||||||
|
|
||||||
// recover nonce from 1st 8 bytes of ciphertext
|
|
||||||
var counterBlock = new Array(8);
|
|
||||||
var ctrTxt = ciphertext.slice(0, 8);
|
|
||||||
for (var i=0; i<8; i++) counterBlock[i] = ctrTxt.charCodeAt(i);
|
|
||||||
|
|
||||||
// generate key schedule
|
|
||||||
var keySchedule = Aes.keyExpansion(key);
|
|
||||||
|
|
||||||
// separate ciphertext into blocks (skipping past initial 8 bytes)
|
|
||||||
var nBlocks = Math.ceil((ciphertext.length-8) / blockSize);
|
|
||||||
var ct = new Array(nBlocks);
|
|
||||||
for (var b=0; b<nBlocks; b++) ct[b] = ciphertext.slice(8+b*blockSize, 8+b*blockSize+blockSize);
|
|
||||||
ciphertext = ct; // ciphertext is now array of block-length strings
|
|
||||||
|
|
||||||
// plaintext will get generated block-by-block into array of block-length strings
|
|
||||||
var plaintxt = new Array(ciphertext.length);
|
|
||||||
|
|
||||||
for (var b=0; b<nBlocks; b++) {
|
|
||||||
// set counter (block #) in last 8 bytes of counter block (leaving nonce in 1st 8 bytes)
|
|
||||||
for (var c=0; c<4; c++) counterBlock[15-c] = ((b) >>> c*8) & 0xff;
|
|
||||||
for (var c=0; c<4; c++) counterBlock[15-c-4] = (((b+1)/0x100000000-1) >>> c*8) & 0xff;
|
|
||||||
|
|
||||||
var cipherCntr = Aes.cipher(counterBlock, keySchedule); // encrypt counter block
|
|
||||||
|
|
||||||
var plaintxtByte = new Array(ciphertext[b].length);
|
|
||||||
for (var i=0; i<ciphertext[b].length; i++) {
|
|
||||||
// -- xor plaintxt with ciphered counter byte-by-byte --
|
|
||||||
plaintxtByte[i] = cipherCntr[i] ^ ciphertext[b].charCodeAt(i);
|
|
||||||
plaintxtByte[i] = String.fromCharCode(plaintxtByte[i]);
|
|
||||||
}
|
|
||||||
plaintxt[b] = plaintxtByte.join('');
|
|
||||||
}
|
|
||||||
|
|
||||||
// join array of blocks into single plaintext string
|
|
||||||
var plaintext = plaintxt.join('');
|
|
||||||
plaintext = plaintext.utf8Decode(); // decode from UTF8 back to Unicode multi-byte chars
|
|
||||||
|
|
||||||
return plaintext;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
|
||||||
|
|
||||||
|
|
||||||
/** Extend String object with method to encode multi-byte string to utf8
|
|
||||||
* - monsur.hossa.in/2012/07/20/utf-8-in-javascript.html */
|
|
||||||
if (typeof String.prototype.utf8Encode == 'undefined') {
|
|
||||||
String.prototype.utf8Encode = function() {
|
|
||||||
return unescape( encodeURIComponent( this ) );
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Extend String object with method to decode utf8 string to multi-byte */
|
|
||||||
if (typeof String.prototype.utf8Decode == 'undefined') {
|
|
||||||
String.prototype.utf8Decode = function() {
|
|
||||||
try {
|
|
||||||
return decodeURIComponent( escape( this ) );
|
|
||||||
} catch (e) {
|
|
||||||
return this; // invalid UTF-8? return as-is
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/** Extend String object with method to encode base64
|
|
||||||
* - developer.mozilla.org/en-US/docs/Web/API/window.btoa, nodejs.org/api/buffer.html
|
|
||||||
* note: if btoa()/atob() are not available (eg IE9-), try github.com/davidchambers/Base64.js */
|
|
||||||
if (typeof String.prototype.base64Encode == 'undefined') {
|
|
||||||
String.prototype.base64Encode = function() {
|
|
||||||
if (typeof btoa != 'undefined') return btoa(this); // browser
|
|
||||||
if (typeof Buffer != 'undefined') return new Buffer(this, 'utf8').toString('base64'); // Node.js
|
|
||||||
throw new Error('No Base64 Encode');
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Extend String object with method to decode base64 */
|
|
||||||
if (typeof String.prototype.base64Decode == 'undefined') {
|
|
||||||
String.prototype.base64Decode = function() {
|
|
||||||
if (typeof atob != 'undefined') return atob(this); // browser
|
|
||||||
if (typeof Buffer != 'undefined') return new Buffer(this, 'base64').toString('utf8'); // Node.js
|
|
||||||
throw new Error('No Base64 Decode');
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
|
||||||
if (typeof module != 'undefined' && module.exports) module.exports = Aes.Ctr; // CommonJs export
|
|
||||||
if (typeof define == 'function' && define.amd) define(['Aes'], function() { return Aes.Ctr; }); // AMD
|
|
||||||
|
|
||||||
|
|
||||||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
|
||||||
/* Encrypt/decrypt files */
|
|
||||||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
|
||||||
|
|
||||||
function encryptFile(file) {
|
|
||||||
// use FileReader.readAsArrayBuffer to handle binary files
|
|
||||||
var reader = new FileReader();
|
|
||||||
reader.readAsArrayBuffer(file);
|
|
||||||
reader.onload = function(evt) {
|
|
||||||
$('body').css({'cursor':'wait'});
|
|
||||||
|
|
||||||
// Aes.Ctr.encrypt expects a string, but converting binary file directly to string could
|
|
||||||
// give invalid Unicode sequences, so convert bytestream ArrayBuffer to single-byte chars
|
|
||||||
var contentBytes = new Uint8Array(reader.result); // ≡ evt.target.result
|
|
||||||
var contentStr = '';
|
|
||||||
for (var i=0; i<contentBytes.length; i++) {
|
|
||||||
contentStr += String.fromCharCode(contentBytes[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
var password = $('#password-file').val();
|
|
||||||
|
|
||||||
var t1 = new Date();
|
|
||||||
var ciphertext = Aes.Ctr.encrypt(contentStr, password, 256);
|
|
||||||
var t2 = new Date();
|
|
||||||
|
|
||||||
// use Blob to save encrypted file
|
|
||||||
var blob = new Blob([ciphertext], { type: 'text/plain' });
|
|
||||||
var filename = file.name+'.encrypted';
|
|
||||||
saveAs(blob, filename);
|
|
||||||
|
|
||||||
$('#encrypt-file-time').html(((t2 - t1)/1000)+'s'); // display time taken
|
|
||||||
$('body').css({'cursor':'default'});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function decryptFile(file) {
|
|
||||||
// use FileReader.ReadAsText to read (base64-encoded) ciphertext file
|
|
||||||
var reader = new FileReader();
|
|
||||||
reader.readAsText(file);
|
|
||||||
reader.onload = function(evt) {
|
|
||||||
$('body').css({'cursor':'wait'});
|
|
||||||
|
|
||||||
var content = reader.result; // ≡ evt.target.result
|
|
||||||
var password = $('#password-file').val();
|
|
||||||
|
|
||||||
var t1 = new Date();
|
|
||||||
var plaintext = Aes.Ctr.decrypt(content, password, 256);
|
|
||||||
var t2 = new Date();
|
|
||||||
|
|
||||||
// convert single-byte character stream to ArrayBuffer bytestream
|
|
||||||
var contentBytes = new Uint8Array(plaintext.length);
|
|
||||||
for (var i=0; i<plaintext.length; i++) {
|
|
||||||
contentBytes[i] = plaintext.charCodeAt(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
// use Blob to save decrypted file
|
|
||||||
var blob = new Blob([contentBytes], { type: 'application/octet-stream' });
|
|
||||||
var filename = file.name.replace(/\.encrypted$/,'')+'.decrypted';
|
|
||||||
saveAs(blob, filename);
|
|
||||||
|
|
||||||
$('#decrypt-file-time').html(((t2 - t1)/1000)+'s'); // display time taken
|
|
||||||
$('body').css({'cursor':'default'});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
2532
api/Base.js
2532
api/Base.js
File diff suppressed because it is too large
Load Diff
@@ -1,280 +0,0 @@
|
|||||||
/*
|
|
||||||
This file is part of Ice Framework.
|
|
||||||
|
|
||||||
Ice Framework is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
Ice Framework is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with Ice Framework. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
------------------------------------------------------------------
|
|
||||||
|
|
||||||
Original work Copyright (c) 2012 [Gamonoid Media Pvt. Ltd]
|
|
||||||
Developer: Thilina Hasantha (thilina.hasantha[at]gmail.com / facebook.com/thilinah)
|
|
||||||
*/
|
|
||||||
|
|
||||||
ValidationRules = {
|
|
||||||
|
|
||||||
float: function (str) {
|
|
||||||
var floatstr = /^[-+]?[0-9]+(\.[0-9]+)?$/;
|
|
||||||
if (str != null && str.match(floatstr)) {
|
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
number: function (str) {
|
|
||||||
var numstr = /^[0-9]+$/;
|
|
||||||
if (str != null && str.match(numstr)) {
|
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
numberOrEmpty: function (str) {
|
|
||||||
if(str == ""){
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
var numstr = /^[0-9]+$/;
|
|
||||||
if (str != null && str.match(numstr)) {
|
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
email: function (str) {
|
|
||||||
var emailPattern = /^\s*[\w\-\+_]+(\.[\w\-\+_]+)*\@[\w\-\+_]+\.[\w\-\+_]+(\.[\w\-\+_]+)*\s*$/;
|
|
||||||
return str != null && emailPattern.test(str);
|
|
||||||
},
|
|
||||||
|
|
||||||
emailOrEmpty: function (str) {
|
|
||||||
if(str == ""){
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
var emailPattern = /^\s*[\w\-\+_]+(\.[\w\-\+_]+)*\@[\w\-\+_]+\.[\w\-\+_]+(\.[\w\-\+_]+)*\s*$/;
|
|
||||||
return str != null && emailPattern.test(str);
|
|
||||||
},
|
|
||||||
|
|
||||||
username: function (str) {
|
|
||||||
var username = /^[a-zA-Z0-9\.-]+$/;
|
|
||||||
return str != null && username.test(str);
|
|
||||||
},
|
|
||||||
|
|
||||||
input: function (str) {
|
|
||||||
if (str != null && str.length > 0) {
|
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
function FormValidation(formId,validateAll,options) {
|
|
||||||
this.tempOptions = {};
|
|
||||||
this.formId = formId;
|
|
||||||
this.formError = false;
|
|
||||||
this.formObject = null;
|
|
||||||
this.errorMessages = "";
|
|
||||||
this.popupDialog = null;
|
|
||||||
this.validateAll = validateAll;
|
|
||||||
this.errorMap = new Array();
|
|
||||||
|
|
||||||
this.settings = {"thirdPartyPopup":null,"LabelErrorClass":false, "ShowPopup":true};
|
|
||||||
|
|
||||||
this.settings = jQuery.extend(this.settings,options);
|
|
||||||
|
|
||||||
this.inputTypes = new Array( "text", "radio", "checkbox", "file", "password", "select-one","select-multi", "textarea","fileupload" ,"signature");
|
|
||||||
|
|
||||||
this.validator = ValidationRules;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
FormValidation.method('clearError' , function(formInput, overrideMessage) {
|
|
||||||
var id = formInput.attr("id");
|
|
||||||
$('#'+ this.formId +' #field_'+id).removeClass('error');
|
|
||||||
$('#'+ this.formId +' #help_'+id).html('');
|
|
||||||
});
|
|
||||||
|
|
||||||
FormValidation.method('addError' , function(formInput, overrideMessage) {
|
|
||||||
this.formError = true;
|
|
||||||
if(formInput.attr("message") != null) {
|
|
||||||
this.errorMessages += (formInput.attr("message") + "\n");
|
|
||||||
this.errorMap[formInput.attr("name")] = formInput.attr("message");
|
|
||||||
}else{
|
|
||||||
this.errorMap[formInput.attr("name")] = "";
|
|
||||||
}
|
|
||||||
|
|
||||||
var id = formInput.attr("id");
|
|
||||||
var validation = formInput.attr("validation");
|
|
||||||
var message = formInput.attr("validation");
|
|
||||||
$('#'+ this.formId +' #field_'+id).addClass('error');
|
|
||||||
if(message == undefined || message == null || message == ""){
|
|
||||||
$('#'+ this.formId +' #help_err_'+id).html(message);
|
|
||||||
}else{
|
|
||||||
if(validation == undefined || validation == null || validation == ""){
|
|
||||||
$('#'+ this.formId +' #help_err_'+id).html("Required");
|
|
||||||
}else{
|
|
||||||
if(validation == "float" || validation == "number"){
|
|
||||||
$('#'+ this.formId +' #help_err_'+id).html("Number required");
|
|
||||||
}else if(validation == "email"){
|
|
||||||
$('#'+ this.formId +' #help_err_'+id).html("Email required");
|
|
||||||
}else{
|
|
||||||
$('#'+ this.formId +' #help_err_'+id).html("Required");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
FormValidation.method('showErrors' , function() {
|
|
||||||
if(this.formError) {
|
|
||||||
if(this.settings['thirdPartyPopup'] != undefined && this.settings['thirdPartyPopup'] != null){
|
|
||||||
this.settings['thirdPartyPopup'].alert();
|
|
||||||
}else{
|
|
||||||
if(this.settings['ShowPopup'] == true){
|
|
||||||
if(this.tempOptions['popupTop'] != undefined && this.tempOptions['popupTop'] != null){
|
|
||||||
this.alert("Errors Found",this.errorMessages,this.tempOptions['popupTop']);
|
|
||||||
}else{
|
|
||||||
this.alert("Errors Found",this.errorMessages,-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
FormValidation.method('checkValues' , function(options) {
|
|
||||||
this.tempOptions = options;
|
|
||||||
var that = this;
|
|
||||||
this.formError = false;
|
|
||||||
this.errorMessages = "";
|
|
||||||
this.formObject = new Object();
|
|
||||||
var validate = function (inputObject) {
|
|
||||||
if(that.settings['LabelErrorClass'] != false){
|
|
||||||
$("label[for='" + name + "']").removeClass(that.settings['LabelErrorClass']);
|
|
||||||
}
|
|
||||||
var id = inputObject.attr("id");
|
|
||||||
var name = inputObject.attr("name");
|
|
||||||
var type = inputObject.attr("type");
|
|
||||||
|
|
||||||
if(inputObject.hasClass('select2-focusser') || inputObject.hasClass('select2-input')){
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(jQuery.inArray(type, that.inputTypes ) >= 0) {
|
|
||||||
if(inputObject.hasClass('uploadInput')){
|
|
||||||
inputValue = inputObject.attr("val");
|
|
||||||
//}else if(inputObject.hasClass('datetimeInput')){
|
|
||||||
//inputValue = inputObject.getDate()+":00";
|
|
||||||
}else{
|
|
||||||
//inputValue = (type == "radio" || type == "checkbox")?$("input[name='" + name + "']:checked").val():inputObject.val();
|
|
||||||
|
|
||||||
inputValue = null;
|
|
||||||
if(type == "radio" || type == "checkbox"){
|
|
||||||
inputValue = $("input[name='" + name + "']:checked").val();
|
|
||||||
}else if(inputObject.hasClass('select2Field')){
|
|
||||||
if($('#'+id).select2('data') != null && $('#'+id).select2('data') != undefined){
|
|
||||||
inputValue = $('#'+id).select2('data').id;
|
|
||||||
}else{
|
|
||||||
inputValue = "";
|
|
||||||
}
|
|
||||||
|
|
||||||
}else if(inputObject.hasClass('select2Multi')){
|
|
||||||
if($('#'+id).select2('data') != null && $('#'+id).select2('data') != undefined){
|
|
||||||
inputValueObjects = $('#'+id).select2('data');
|
|
||||||
inputValue = [];
|
|
||||||
for(var i=0;i<inputValueObjects.length;i++){
|
|
||||||
inputValue.push(inputValueObjects[i].id);
|
|
||||||
}
|
|
||||||
inputValue = JSON.stringify(inputValue);
|
|
||||||
}else{
|
|
||||||
inputValue = "";
|
|
||||||
}
|
|
||||||
}else if(inputObject.hasClass('signatureField')){
|
|
||||||
if($('#'+id).data('signaturePad').isEmpty()){
|
|
||||||
inputValue = '';
|
|
||||||
}else{
|
|
||||||
inputValue = $('#'+id).data('signaturePad').toDataURL();
|
|
||||||
}
|
|
||||||
}else if(inputObject.hasClass('simplemde')){
|
|
||||||
inputValue = $('#'+id).data('simplemde').value();
|
|
||||||
|
|
||||||
}else if(inputObject.hasClass('tinymce')){
|
|
||||||
inputValue = tinyMCE.get(id).getContent({format : 'raw'});
|
|
||||||
|
|
||||||
}else{
|
|
||||||
inputValue = inputObject.val();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var validation = inputObject.attr('validation');
|
|
||||||
var valid = false;
|
|
||||||
|
|
||||||
if(validation != undefined && validation != null && that.validator[validation] != undefined && that.validator[validation] != null){
|
|
||||||
valid = that.validator[validation](inputValue);
|
|
||||||
|
|
||||||
}else{
|
|
||||||
|
|
||||||
if(that.validateAll){
|
|
||||||
if(validation != undefined && validation != null && validation == "none"){
|
|
||||||
valid = true;
|
|
||||||
}else{
|
|
||||||
valid = that.validator['input'](inputValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
}else{
|
|
||||||
valid = true;
|
|
||||||
}
|
|
||||||
$(that.formObject).attr(id,inputValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!valid) {
|
|
||||||
that.addError(inputObject, null);
|
|
||||||
}else{
|
|
||||||
that.clearError(inputObject, null);
|
|
||||||
$(that.formObject).attr(id,inputValue);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
var inputs = $('#'+ this.formId + " :input");
|
|
||||||
inputs.each(function() {
|
|
||||||
var that = $(this);
|
|
||||||
validate(that);
|
|
||||||
});
|
|
||||||
|
|
||||||
inputs = $('#'+ this.formId + " .uploadInput");
|
|
||||||
inputs.each(function() {
|
|
||||||
var that = $(this);
|
|
||||||
validate(that);
|
|
||||||
});
|
|
||||||
|
|
||||||
this.showErrors();
|
|
||||||
this.tempOptions = {};
|
|
||||||
return !this.formError;
|
|
||||||
});
|
|
||||||
|
|
||||||
FormValidation.method('getFormParameters' , function() {
|
|
||||||
return this.formObject;
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
FormValidation.method('alert', function (title,text,top) {
|
|
||||||
alert(text);
|
|
||||||
});
|
|
||||||
@@ -1,138 +0,0 @@
|
|||||||
/*
|
|
||||||
This file is part of Ice Framework.
|
|
||||||
|
|
||||||
Ice Framework is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
Ice Framework is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with Ice Framework. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
------------------------------------------------------------------
|
|
||||||
|
|
||||||
Original work Copyright (c) 2012 [Gamonoid Media Pvt. Ltd]
|
|
||||||
Developer: Thilina Hasantha (thilina.hasantha[at]gmail.com / facebook.com/thilinah)
|
|
||||||
*/
|
|
||||||
|
|
||||||
function NotificationManager() {
|
|
||||||
this.baseUrl = "";
|
|
||||||
this.templates = {};
|
|
||||||
}
|
|
||||||
|
|
||||||
NotificationManager.method('setBaseUrl' , function(url) {
|
|
||||||
this.baseUrl = url;
|
|
||||||
});
|
|
||||||
|
|
||||||
NotificationManager.method('setTemplates' , function(data) {
|
|
||||||
this.templates = data;
|
|
||||||
});
|
|
||||||
|
|
||||||
NotificationManager.method('setTimeUtils' , function(timeUtils) {
|
|
||||||
this.timeUtils = timeUtils;
|
|
||||||
});
|
|
||||||
|
|
||||||
NotificationManager.method('getNotifications' , function(name, data) {
|
|
||||||
var that = this;
|
|
||||||
$.getJSON(this.baseUrl, {'a':'getNotifications'}, function(data) {
|
|
||||||
if(data.status == "SUCCESS"){
|
|
||||||
that.renderNotifications(data.data[1],data.data[0]);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
NotificationManager.method('clearPendingNotifications' , function(name, data) {
|
|
||||||
var that = this;
|
|
||||||
$.getJSON(this.baseUrl, {'a':'clearNotifications'}, function(data) {
|
|
||||||
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
NotificationManager.method('renderNotifications' , function(notifications, unreadCount) {
|
|
||||||
|
|
||||||
if(notifications.length == 0){
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var t = this.templates['notifications'];
|
|
||||||
if(unreadCount > 0){
|
|
||||||
t = t.replace('#_count_#',unreadCount);
|
|
||||||
if(unreadCount > 1){
|
|
||||||
t = t.replace('#_header_#',"You have "+unreadCount+" new notifications");
|
|
||||||
}else{
|
|
||||||
t = t.replace('#_header_#',"You have "+unreadCount+" new notification");
|
|
||||||
}
|
|
||||||
|
|
||||||
}else{
|
|
||||||
t = t.replace('#_count_#',"");
|
|
||||||
t = t.replace('#_header_#',"You have no new notifications");
|
|
||||||
}
|
|
||||||
|
|
||||||
var notificationStr = "";
|
|
||||||
|
|
||||||
for (index in notifications){
|
|
||||||
notificationStr += this.renderNotification(notifications[index]);
|
|
||||||
}
|
|
||||||
|
|
||||||
t = t.replace('#_notifications_#',notificationStr);
|
|
||||||
|
|
||||||
$obj = $(t);
|
|
||||||
|
|
||||||
if(unreadCount == 0){
|
|
||||||
$obj.find('.label-danger').remove();
|
|
||||||
}
|
|
||||||
|
|
||||||
$obj.attr("id","notifications");
|
|
||||||
var k = $("#notifications");
|
|
||||||
k.replaceWith($obj);
|
|
||||||
|
|
||||||
$(".navbar .menu").slimscroll({
|
|
||||||
height: "320px",
|
|
||||||
alwaysVisible: false,
|
|
||||||
size: "3px"
|
|
||||||
}).css("width", "100%");
|
|
||||||
|
|
||||||
this.timeUtils.convertToRelativeTime($(".notificationTime"));
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
NotificationManager.method('renderNotification' , function(notification) {
|
|
||||||
var t = this.templates['notification'];
|
|
||||||
t = t.replace('#_image_#',notification.image);
|
|
||||||
|
|
||||||
try{
|
|
||||||
var json = JSON.parse(notification.action);
|
|
||||||
t = t.replace('#_url_#',this.baseUrl.replace('service.php','?')+json['url']);
|
|
||||||
}catch(e){
|
|
||||||
t = t.replace('#_url_#',"");
|
|
||||||
}
|
|
||||||
|
|
||||||
t = t.replace('#_time_#',notification.time);
|
|
||||||
t = t.replace('#_fromName_#',notification.type);
|
|
||||||
t = t.replace('#_message_#',this.getLineBreakString(notification.message,27));
|
|
||||||
return t;
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
NotificationManager.method('getLineBreakString' , function(str, len) {
|
|
||||||
var t = "";
|
|
||||||
try{
|
|
||||||
var arr = str.split(" ");
|
|
||||||
var count = 0;
|
|
||||||
for(var i=0;i<arr.length;i++){
|
|
||||||
count += arr[i].length + 1;
|
|
||||||
if(count > len){
|
|
||||||
t += arr[i] + "<br/>";
|
|
||||||
count = 0;
|
|
||||||
}else{
|
|
||||||
t += arr[i] + " ";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}catch(e){}
|
|
||||||
return t;
|
|
||||||
});
|
|
||||||
@@ -1,47 +0,0 @@
|
|||||||
function SocialShare(){
|
|
||||||
};
|
|
||||||
|
|
||||||
SocialShare.facebook = function(url) {
|
|
||||||
var w = 700;
|
|
||||||
var h = 500;
|
|
||||||
var left = (screen.width/2)-(w/2);
|
|
||||||
var top = (screen.height/2)-(h/2);
|
|
||||||
|
|
||||||
var url = "https://www.facebook.com/sharer/sharer.php?u="+encodeURIComponent(url);
|
|
||||||
|
|
||||||
window.open(url, "Share on Facebook", "width="+w+",height="+h+",left="+left+",top="+top);
|
|
||||||
return false;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
SocialShare.google = function(url) {
|
|
||||||
var w = 500;
|
|
||||||
var h = 500;
|
|
||||||
var left = (screen.width/2)-(w/2);
|
|
||||||
var top = (screen.height/2)-(h/2);
|
|
||||||
|
|
||||||
var url = "https://plus.google.com/share?url="+encodeURIComponent(url);
|
|
||||||
|
|
||||||
window.open(url, "Share on Google", "width="+w+",height="+h+",left="+left+",top="+top);
|
|
||||||
return false;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
SocialShare.linkedin = function(url) {
|
|
||||||
var w = 500;
|
|
||||||
var h = 500;
|
|
||||||
var left = (screen.width/2)-(w/2);
|
|
||||||
var top = (screen.height/2)-(h/2);
|
|
||||||
|
|
||||||
var url = "https://www.linkedin.com/cws/share?url="+encodeURIComponent(url);
|
|
||||||
|
|
||||||
window.open(url, "Share on Linked in", "width="+w+",height="+h+",left="+left+",top="+top);
|
|
||||||
return false;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
SocialShare.twitter = function(url, msg) {
|
|
||||||
window.open('http://twitter.com/share?text='+escape(msg) + '&url=' + escape(url),'popup','width=550,height=260,scrollbars=yes,resizable=yes,toolbar=no,directories=no,location=no,menubar=no,status=no,left=200,top=200');
|
|
||||||
return false;
|
|
||||||
|
|
||||||
};
|
|
||||||
163
api/TimeUtils.js
163
api/TimeUtils.js
@@ -1,163 +0,0 @@
|
|||||||
/*
|
|
||||||
This file is part of Ice Framework.
|
|
||||||
|
|
||||||
Ice Framework is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
Ice Framework is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with Ice Framework. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
------------------------------------------------------------------
|
|
||||||
|
|
||||||
Original work Copyright (c) 2012 [Gamonoid Media Pvt. Ltd]
|
|
||||||
Developer: Thilina Hasantha (thilina.hasantha[at]gmail.com / facebook.com/thilinah)
|
|
||||||
*/
|
|
||||||
|
|
||||||
function TimeUtils() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
TimeUtils.method('setServerGMToffset' , function(serverGMToffset) {
|
|
||||||
this.serverGMToffset = serverGMToffset;
|
|
||||||
});
|
|
||||||
|
|
||||||
TimeUtils.method('getMySQLFormatDate' , function(date) {
|
|
||||||
|
|
||||||
var format = function(val){
|
|
||||||
if(val < 10){return "0"+val;}
|
|
||||||
return val;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return date.getUTCFullYear()+"-"+format(date.getUTCMonth()+1)+"-"+format(date.getUTCDate());
|
|
||||||
});
|
|
||||||
|
|
||||||
TimeUtils.method('convertToRelativeTime',function(selector) {
|
|
||||||
|
|
||||||
var that = this;
|
|
||||||
|
|
||||||
var getAmPmTime = function(curHour, curMin) {
|
|
||||||
var amPm = "am";
|
|
||||||
var amPmHour = curHour;
|
|
||||||
if (amPmHour >= 12) {
|
|
||||||
amPm = "pm";
|
|
||||||
if (amPmHour > 12) {
|
|
||||||
amPmHour = amPmHour - 12;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var prefixCurMin = "";
|
|
||||||
if (curMin < 10) {
|
|
||||||
prefixCurMin = "0";
|
|
||||||
}
|
|
||||||
|
|
||||||
var prefixCurHour = "";
|
|
||||||
if (curHour == 0) {
|
|
||||||
prefixCurHour = "0";
|
|
||||||
}
|
|
||||||
return " at " + prefixCurHour + amPmHour + ":" + prefixCurMin + curMin + amPm;
|
|
||||||
};
|
|
||||||
|
|
||||||
var getBrowserTimeZone = function() {
|
|
||||||
var current_date = new Date();
|
|
||||||
var gmt_offset = current_date.getTimezoneOffset() / 60;
|
|
||||||
return -gmt_offset;
|
|
||||||
};
|
|
||||||
|
|
||||||
var curDate = new Date();
|
|
||||||
var months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
|
|
||||||
var days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
|
|
||||||
|
|
||||||
|
|
||||||
var timezoneDiff = this.serverGMToffset - getBrowserTimeZone();
|
|
||||||
var timezoneTimeDiff = timezoneDiff*60*60*1000;
|
|
||||||
|
|
||||||
|
|
||||||
selector.each(function () {
|
|
||||||
try{
|
|
||||||
var thisValue = $(this).html();
|
|
||||||
// Split value into date and time
|
|
||||||
var thisValueArray = thisValue.split(" ");
|
|
||||||
var thisValueDate = thisValueArray[0];
|
|
||||||
var thisValueTime = thisValueArray[1];
|
|
||||||
|
|
||||||
// Split date into components
|
|
||||||
var thisValueDateArray = thisValueDate.split("-");
|
|
||||||
var curYear = thisValueDateArray[0];
|
|
||||||
var curMonth = thisValueDateArray[1]-1;
|
|
||||||
var curDay = thisValueDateArray[2];
|
|
||||||
|
|
||||||
// Split time into components
|
|
||||||
var thisValueTimeArray = thisValueTime.split(":");
|
|
||||||
var curHour = thisValueTimeArray[0];
|
|
||||||
var curMin = thisValueTimeArray[1];
|
|
||||||
var curSec = thisValueTimeArray[2];
|
|
||||||
|
|
||||||
// Create this date
|
|
||||||
var thisDate = new Date(curYear, curMonth, curDay, curHour, curMin, curSec);
|
|
||||||
var thisTime = thisDate.getTime();
|
|
||||||
var tzDate = new Date(thisTime - timezoneTimeDiff);
|
|
||||||
//var tzDay = tzDate.getDay();//getDay will return the day of the week not the month
|
|
||||||
//var tzDay = tzDate.getUTCDate(); //getUTCDate will return the day of the month
|
|
||||||
var tzDay = tzDate.toString('d'); //
|
|
||||||
var tzYear = tzDate.getFullYear();
|
|
||||||
var tzHour = tzDate.getHours();
|
|
||||||
var tzMin = tzDate.getMinutes();
|
|
||||||
|
|
||||||
// Create the full date
|
|
||||||
//var fullDate = days[tzDate.getDay()] + ", " + months[tzDate.getMonth()] + " " + tzDay + ", " + tzYear + getAmPmTime(tzHour, tzMin);
|
|
||||||
var fullDate = days[tzDate.getDay()] + ", " + months[tzDate.getMonth()] + " " + tzDay + ", " + tzYear + getAmPmTime(tzHour, tzMin);
|
|
||||||
|
|
||||||
// Get the time different
|
|
||||||
var timeDiff = (curDate.getTime() - tzDate.getTime())/1000;
|
|
||||||
var minDiff = Math.abs(timeDiff/60);
|
|
||||||
var hourDiff = Math.abs(timeDiff/(60*60));
|
|
||||||
var dayDiff = Math.abs(timeDiff/(60*60*24));
|
|
||||||
var yearDiff = Math.abs(timeDiff/(60*60*24*365));
|
|
||||||
|
|
||||||
// If more than a day old, display the month, day and time (and year, if applicable)
|
|
||||||
var fbDate = '';
|
|
||||||
if (dayDiff > 1) {
|
|
||||||
//fbDate = curDay + " " + months[tzDate.getMonth()].substring(0,3);
|
|
||||||
fbDate = tzDay + " " + months[tzDate.getMonth()].substring(0,3);
|
|
||||||
// Add the year, if applicable
|
|
||||||
if (yearDiff > 1) {
|
|
||||||
fbDate = fbDate + " "+ curYear;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add the time
|
|
||||||
fbDate = fbDate + getAmPmTime(tzHour, tzMin);
|
|
||||||
}
|
|
||||||
// Less than a day old, and more than an hour old
|
|
||||||
else if (hourDiff >= 1) {
|
|
||||||
var roundedHour = Math.round(hourDiff);
|
|
||||||
if (roundedHour == 1)
|
|
||||||
fbDate = "about an hour ago";
|
|
||||||
else
|
|
||||||
fbDate = roundedHour + " hours ago";
|
|
||||||
}
|
|
||||||
// Less than an hour, and more than a minute
|
|
||||||
else if (minDiff >= 1) {
|
|
||||||
var roundedMin = Math.round(minDiff);
|
|
||||||
if (roundedMin == 1)
|
|
||||||
fbDate = "about a minute ago";
|
|
||||||
else
|
|
||||||
fbDate = roundedMin + " minutes ago";
|
|
||||||
}
|
|
||||||
// Less than a minute
|
|
||||||
else if (minDiff < 1) {
|
|
||||||
fbDate = "less than a minute ago";
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update this element
|
|
||||||
$(this).html(fbDate);
|
|
||||||
$(this).attr('title', fullDate);
|
|
||||||
}catch(e){}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
@@ -8,7 +8,7 @@ define('TWITTER_URL', 'Ice Hrm');
|
|||||||
define('CLIENT_NAME', '_CLIENT_');
|
define('CLIENT_NAME', '_CLIENT_');
|
||||||
define('APP_BASE_PATH', '_APP_BASE_PATH_');
|
define('APP_BASE_PATH', '_APP_BASE_PATH_');
|
||||||
define('CLIENT_BASE_PATH', '_CLIENT_BASE_PATH_');
|
define('CLIENT_BASE_PATH', '_CLIENT_BASE_PATH_');
|
||||||
define('BASE_URL','_BASE_URL_');
|
define('BASE_URL','_BASE_URL_web/');
|
||||||
define('CLIENT_BASE_URL','_CLIENTBASE_URL_');
|
define('CLIENT_BASE_URL','_CLIENTBASE_URL_');
|
||||||
|
|
||||||
define('APP_DB', '_APP_DB_');
|
define('APP_DB', '_APP_DB_');
|
||||||
|
|||||||
@@ -3,6 +3,6 @@ error_reporting(E_ERROR);
|
|||||||
ini_set("error_log", "../data/icehrm_install.log");
|
ini_set("error_log", "../data/icehrm_install.log");
|
||||||
define('CURRENT_PATH',dirname(__FILE__));
|
define('CURRENT_PATH',dirname(__FILE__));
|
||||||
define('CLIENT_APP_PATH',realpath(dirname(__FILE__)."/..")."/");
|
define('CLIENT_APP_PATH',realpath(dirname(__FILE__)."/..")."/");
|
||||||
define('APP_PATH',realpath(dirname(__FILE__)."/../..")."/");
|
define('APP_PATH',realpath(dirname(__FILE__)."/../..")."/core/");
|
||||||
define('APP_NAME',"IceHrm");
|
define('APP_NAME',"IceHrm");
|
||||||
define('APP_ID',"icehrm");
|
define('APP_ID',"icehrm");
|
||||||
|
|||||||
@@ -67,14 +67,14 @@ if(!$isDataFolderExists){
|
|||||||
<!-- Le styles -->
|
<!-- Le styles -->
|
||||||
<link href="bootstrap/css/bootstrap.css" rel="stylesheet">
|
<link href="bootstrap/css/bootstrap.css" rel="stylesheet">
|
||||||
|
|
||||||
<script type="text/javascript" src="../../js/jquery.js"></script>
|
<script type="text/javascript" src="../../web/js/jquery.js"></script>
|
||||||
<script src="bootstrap/js/bootstrap.js"></script>
|
<script src="bootstrap/js/bootstrap.js"></script>
|
||||||
<link href="bootstrap/css/bootstrap-responsive.css" rel="stylesheet">
|
<link href="bootstrap/css/bootstrap-responsive.css" rel="stylesheet">
|
||||||
<link href="styles.css?v=2" rel="stylesheet">
|
<link href="styles.css?v=2" rel="stylesheet">
|
||||||
|
|
||||||
<script type="text/javascript" src="../../js/date.js"></script>
|
<script type="text/javascript" src="../../web/js/date.js"></script>
|
||||||
<script type="text/javascript" src="../../js/json2.js"></script>
|
<script type="text/javascript" src="../../web/js/json2.js"></script>
|
||||||
<script type="text/javascript" src="../../js/CrockfordInheritance.v0.1.js"></script>
|
<script type="text/javascript" src="../../web/js/CrockfordInheritance.v0.1.js"></script>
|
||||||
|
|
||||||
<!-- Le fav and touch icons -->
|
<!-- Le fav and touch icons -->
|
||||||
<link rel="shortcut icon" href="bootstrap/ico/favicon.ico">
|
<link rel="shortcut icon" href="bootstrap/ico/favicon.ico">
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
include dirname(__FILE__).'/config.php';
|
include dirname(__FILE__).'/config.php';
|
||||||
include(CLIENT_APP_PATH.'../lib/adodb512/adodb.inc.php');
|
include(CLIENT_APP_PATH.'../core/lib/adodb512/adodb.inc.php');
|
||||||
|
|
||||||
$isConfigFileExists = file_exists(CLIENT_APP_PATH."config.php");
|
$isConfigFileExists = file_exists(CLIENT_APP_PATH."config.php");
|
||||||
$configData = file_get_contents(CLIENT_APP_PATH."config.php");
|
$configData = file_get_contents(CLIENT_APP_PATH."config.php");
|
||||||
@@ -94,7 +94,7 @@ if($action == "TEST_DB"){
|
|||||||
|
|
||||||
|
|
||||||
//Run create table script
|
//Run create table script
|
||||||
$insql = file_get_contents(CLIENT_APP_PATH."../scripts/".APP_ID."db.sql");
|
$insql = file_get_contents(CLIENT_APP_PATH."../core/scripts/".APP_ID."db.sql");
|
||||||
$sql_list = preg_split('/;/',$insql);
|
$sql_list = preg_split('/;/',$insql);
|
||||||
foreach($sql_list as $sql){
|
foreach($sql_list as $sql){
|
||||||
if (preg_match('/^\s+$/', $sql) || $sql == '') { # skip empty lines
|
if (preg_match('/^\s+$/', $sql) || $sql == '') { # skip empty lines
|
||||||
@@ -104,7 +104,7 @@ if($action == "TEST_DB"){
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Run create table script
|
//Run create table script
|
||||||
$insql = file_get_contents(CLIENT_APP_PATH."../scripts/".APP_ID."_master_data.sql");
|
$insql = file_get_contents(CLIENT_APP_PATH."../core/scripts/".APP_ID."_master_data.sql");
|
||||||
$sql_list = preg_split('/;/',$insql);
|
$sql_list = preg_split('/;/',$insql);
|
||||||
foreach($sql_list as $sql){
|
foreach($sql_list as $sql){
|
||||||
if (preg_match('/^\s+$/', $sql) || $sql == '') { # skip empty lines
|
if (preg_match('/^\s+$/', $sql) || $sql == '') { # skip empty lines
|
||||||
|
|||||||
5774
bootstrap/css/bootstrap.css
vendored
5774
bootstrap/css/bootstrap.css
vendored
File diff suppressed because it is too large
Load Diff
@@ -9,6 +9,12 @@
|
|||||||
"homepage": "",
|
"homepage": "",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"simplemde": "^1.11.2",
|
"simplemde": "^1.11.2",
|
||||||
"tinymce": "^4.5.5"
|
"tinymce": "^4.5.5",
|
||||||
|
"d3-timeline": "^0.0.5",
|
||||||
|
"vis": "^4.21.0",
|
||||||
|
"handlebars": "^4.0.11",
|
||||||
|
"material-design-icons": "^3.0.1",
|
||||||
|
"inputmask": "~3.3.11",
|
||||||
|
"flag-icon-css": "~3.1.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
80
build.xml
80
build.xml
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project name="icehrm-pro" default="build">
|
<project name="icehrm" default="build">
|
||||||
<!-- By default, we assume all tools to be on the $PATH -->
|
<!-- By default, we assume all tools to be on the $PATH -->
|
||||||
<property name="toolsdir" value="${basedir}/tools/"/>
|
<property name="toolsdir" value="${basedir}/tools/"/>
|
||||||
<property name="destination" value="${basedir}/build/app"/>
|
<property name="destination" value="${basedir}/build/app"/>
|
||||||
@@ -11,7 +11,7 @@
|
|||||||
<property name="installpath" value="/var/www/apps.gamonoid.com/icehrm-open-core"/>
|
<property name="installpath" value="/var/www/apps.gamonoid.com/icehrm-open-core"/>
|
||||||
|
|
||||||
<target name="build-ci"
|
<target name="build-ci"
|
||||||
depends="prepare,lint,phpcs,copyapp,phpunit"
|
depends="prepare,lint,phpcs-ci"
|
||||||
description=""/>
|
description=""/>
|
||||||
|
|
||||||
<target name="build"
|
<target name="build"
|
||||||
@@ -19,11 +19,11 @@
|
|||||||
description=""/>
|
description=""/>
|
||||||
|
|
||||||
<target name="buildlocal"
|
<target name="buildlocal"
|
||||||
depends="prepare,lint,phpcs,copyapp,phpunit"
|
depends="prepare,lint,phpcs,copyapp"
|
||||||
description=""/>
|
description=""/>
|
||||||
|
|
||||||
<target name="releaseapp"
|
<target name="releaseapp"
|
||||||
depends="prepare,lint,copyapp,phpunit,release"
|
depends="prepare,lint,copyapp,release"
|
||||||
description=""/>
|
description=""/>
|
||||||
|
|
||||||
<target name="clean"
|
<target name="clean"
|
||||||
@@ -45,7 +45,6 @@
|
|||||||
depends="clean"
|
depends="clean"
|
||||||
description="Prepare for build">
|
description="Prepare for build">
|
||||||
<mkdir dir="${basedir}/build/api"/>
|
<mkdir dir="${basedir}/build/api"/>
|
||||||
<mkdir dir="${basedir}/build/api"/>
|
|
||||||
<mkdir dir="${basedir}/build/coverage"/>
|
<mkdir dir="${basedir}/build/coverage"/>
|
||||||
<mkdir dir="${basedir}/build/logs"/>
|
<mkdir dir="${basedir}/build/logs"/>
|
||||||
<mkdir dir="${basedir}/build/pdepend"/>
|
<mkdir dir="${basedir}/build/pdepend"/>
|
||||||
@@ -63,7 +62,7 @@
|
|||||||
<apply executable="php" failonerror="true">
|
<apply executable="php" failonerror="true">
|
||||||
<arg value="-l" />
|
<arg value="-l" />
|
||||||
|
|
||||||
<fileset dir="${basedir}/src">
|
<fileset dir="${basedir}/core/src">
|
||||||
<include name="**/*.php" />
|
<include name="**/*.php" />
|
||||||
<exclude name="composer/**"/>
|
<exclude name="composer/**"/>
|
||||||
<modified />
|
<modified />
|
||||||
@@ -80,8 +79,7 @@
|
|||||||
description="Measure project size using PHPLOC and print human readable output. Intended for usage on the command line.">
|
description="Measure project size using PHPLOC and print human readable output. Intended for usage on the command line.">
|
||||||
<exec executable="${toolsdir}phploc">
|
<exec executable="${toolsdir}phploc">
|
||||||
<arg value="--count-tests" />
|
<arg value="--count-tests" />
|
||||||
<arg path="${basedir}/src" />
|
<arg path="${basedir}/core/src" />
|
||||||
<arg path="${basedir}/tests" />
|
|
||||||
</exec>
|
</exec>
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
@@ -94,8 +92,7 @@
|
|||||||
<arg path="${basedir}/build/logs/phploc.csv" />
|
<arg path="${basedir}/build/logs/phploc.csv" />
|
||||||
<arg value="--log-xml" />
|
<arg value="--log-xml" />
|
||||||
<arg path="${basedir}/build/logs/phploc.xml" />
|
<arg path="${basedir}/build/logs/phploc.xml" />
|
||||||
<arg path="${basedir}/src" />
|
<arg path="${basedir}/core/src" />
|
||||||
<arg path="${basedir}/tests" />
|
|
||||||
</exec>
|
</exec>
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
@@ -106,14 +103,14 @@
|
|||||||
<arg value="--jdepend-xml=${basedir}/build/logs/jdepend.xml" />
|
<arg value="--jdepend-xml=${basedir}/build/logs/jdepend.xml" />
|
||||||
<arg value="--jdepend-chart=${basedir}/build/pdepend/dependencies.svg" />
|
<arg value="--jdepend-chart=${basedir}/build/pdepend/dependencies.svg" />
|
||||||
<arg value="--overview-pyramid=${basedir}/build/pdepend/overview-pyramid.svg" />
|
<arg value="--overview-pyramid=${basedir}/build/pdepend/overview-pyramid.svg" />
|
||||||
<arg path="${basedir}/src" />
|
<arg path="${basedir}/core/src" />
|
||||||
</exec>
|
</exec>
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
<target name="phpmd"
|
<target name="phpmd"
|
||||||
description="Perform project mess detection using PHPMD and print human readable output. Intended for usage on the command line before committing.">
|
description="Perform project mess detection using PHPMD and print human readable output. Intended for usage on the command line before committing.">
|
||||||
<exec executable="${toolsdir}phpmd">
|
<exec executable="${toolsdir}phpmd">
|
||||||
<arg path="${basedir}/src" />
|
<arg path="${basedir}/core/src" />
|
||||||
<arg value="text" />
|
<arg value="text" />
|
||||||
<arg path="${basedir}/build/phpmd.xml" />
|
<arg path="${basedir}/build/phpmd.xml" />
|
||||||
</exec>
|
</exec>
|
||||||
@@ -123,7 +120,7 @@
|
|||||||
depends="prepare"
|
depends="prepare"
|
||||||
description="Perform project mess detection using PHPMD and log result in XML format. Intended for usage within a continuous integration environment.">
|
description="Perform project mess detection using PHPMD and log result in XML format. Intended for usage within a continuous integration environment.">
|
||||||
<exec executable="${toolsdir}phpmd">
|
<exec executable="${toolsdir}phpmd">
|
||||||
<arg path="${basedir}/src" />
|
<arg path="${basedir}/core/src" />
|
||||||
<arg value="xml" />
|
<arg value="xml" />
|
||||||
<arg path="${basedir}/build/phpmd.xml" />
|
<arg path="${basedir}/build/phpmd.xml" />
|
||||||
<arg value="--reportfile" />
|
<arg value="--reportfile" />
|
||||||
@@ -137,29 +134,27 @@
|
|||||||
<arg value="--standard=PSR2" />
|
<arg value="--standard=PSR2" />
|
||||||
<arg value="--extensions=php" />
|
<arg value="--extensions=php" />
|
||||||
<arg value="--ignore=autoload.php" />
|
<arg value="--ignore=autoload.php" />
|
||||||
<arg path="${basedir}/src" />
|
<arg path="${basedir}/core/src" />
|
||||||
<arg path="${basedir}/test/unit" />
|
|
||||||
<arg path="${basedir}/test/integration" />
|
|
||||||
</exec>
|
</exec>
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
<target name="phpcs-ci"
|
<target name="phpcs-ci"
|
||||||
depends="prepare"
|
depends="prepare"
|
||||||
description="Find coding standard violations using PHP_CodeSniffer and log result in XML format. Intended for usage within a continuous integration environment.">
|
description="Find coding standard violations using PHP_CodeSniffer and log result in XML format. Intended for usage within a continuous integration environment.">
|
||||||
<exec executable="${toolsdir}phpcs" output="/dev/null">
|
<exec executable="${toolsdir}phpcs" failonerror="true">
|
||||||
<arg value="--report=checkstyle" />
|
<arg value="--report=checkstyle" />
|
||||||
<arg value="--report-file=${basedir}/build/logs/checkstyle.xml" />
|
<arg value="--report-file=${basedir}/build/logs/checkstyle.xml" />
|
||||||
<arg value="--standard=PSR2" />
|
<arg value="--standard=PSR2" />
|
||||||
<arg value="--extensions=php" />
|
<arg value="--extensions=php" />
|
||||||
<arg value="--ignore=autoload.php" />
|
<arg value="--ignore=autoload.php" />
|
||||||
<arg path="${basedir}/src" />
|
<arg path="${basedir}/core/src" />
|
||||||
</exec>
|
</exec>
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
<target name="phpcpd"
|
<target name="phpcpd"
|
||||||
description="Find duplicate code using PHPCPD and print human readable output. Intended for usage on the command line before committing.">
|
description="Find duplicate code using PHPCPD and print human readable output. Intended for usage on the command line before committing.">
|
||||||
<exec executable="${toolsdir}phpcpd">
|
<exec executable="${toolsdir}phpcpd">
|
||||||
<arg path="${basedir}/src" />
|
<arg path="${basedir}/core/src" />
|
||||||
</exec>
|
</exec>
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
@@ -169,7 +164,7 @@
|
|||||||
<exec executable="${toolsdir}phpcpd">
|
<exec executable="${toolsdir}phpcpd">
|
||||||
<arg value="--log-pmd" />
|
<arg value="--log-pmd" />
|
||||||
<arg path="${basedir}/build/logs/pmd-cpd.xml" />
|
<arg path="${basedir}/build/logs/pmd-cpd.xml" />
|
||||||
<arg path="${basedir}/src" />
|
<arg path="${basedir}/core/src" />
|
||||||
</exec>
|
</exec>
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
@@ -182,12 +177,41 @@
|
|||||||
</exec>
|
</exec>
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
|
<target name="phpunit-sa"
|
||||||
|
description="Run unit tests with PHPUnit">
|
||||||
|
<exec executable="${toolsdir}phpunit" failonerror="true">
|
||||||
|
<arg value="--configuration"/>
|
||||||
|
<arg path="${basedir}/phpunit.xml"/>
|
||||||
|
</exec>
|
||||||
|
</target>
|
||||||
|
|
||||||
<target name="phpdox"
|
<target name="phpdox"
|
||||||
depends=""
|
depends=""
|
||||||
description="Generate project documentation using phpDox">
|
description="Generate project documentation using phpDox">
|
||||||
<exec executable="${toolsdir}phpdox"/>
|
<exec executable="${toolsdir}phpdox"/>
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
|
<target name="copyjs"
|
||||||
|
description="Copy generated assets">
|
||||||
|
|
||||||
|
<delete includeemptydirs="true">
|
||||||
|
<fileset dir="${destination}">
|
||||||
|
<include name="web/admin/dist/**"/>
|
||||||
|
<include name="web/modules/dist/**"/>
|
||||||
|
<include name="web/dist/**"/>
|
||||||
|
</fileset>
|
||||||
|
</delete>
|
||||||
|
|
||||||
|
<copy todir="${destination}" overwrite="true">
|
||||||
|
<fileset dir="${origin}">
|
||||||
|
<include name="web/admin/dist/**"/>
|
||||||
|
<include name="web/modules/dist/**"/>
|
||||||
|
<include name="web/dist/**"/>
|
||||||
|
</fileset>
|
||||||
|
</copy>
|
||||||
|
|
||||||
|
</target>
|
||||||
|
|
||||||
<target name="copyapp"
|
<target name="copyapp"
|
||||||
description="Copy generated files to QA app">
|
description="Copy generated files to QA app">
|
||||||
|
|
||||||
@@ -200,6 +224,11 @@
|
|||||||
<copy todir="${destination}" overwrite="true">
|
<copy todir="${destination}" overwrite="true">
|
||||||
<fileset dir="${origin}">
|
<fileset dir="${origin}">
|
||||||
<include name="**/*"/>
|
<include name="**/*"/>
|
||||||
|
<exclude name="node_modules/**"/>
|
||||||
|
<exclude name="web/admin/src/**"/>
|
||||||
|
<exclude name="web/modules/src/**"/>
|
||||||
|
<exclude name="web/api/**"/>
|
||||||
|
<exclude name="web/api-common/**"/>
|
||||||
</fileset>
|
</fileset>
|
||||||
</copy>
|
</copy>
|
||||||
|
|
||||||
@@ -215,6 +244,14 @@
|
|||||||
<include name="build/**"/>
|
<include name="build/**"/>
|
||||||
<include name="build.xml"/>
|
<include name="build.xml"/>
|
||||||
<include name="lib/composer/composer.phar"/>
|
<include name="lib/composer/composer.phar"/>
|
||||||
|
<include name="keys.tags.pub"/>
|
||||||
|
<include name="keys.dev.pub"/>
|
||||||
|
<include name="cache.properties"/>
|
||||||
|
<include name="phpdox.xml"/>
|
||||||
|
<include name="phpunit.xml"/>
|
||||||
|
<include name="web/admin/dist/*.map"/>
|
||||||
|
<include name="web/modules/dist/*.map"/>
|
||||||
|
<include name="web/dist/*.map"/>
|
||||||
</fileset>
|
</fileset>
|
||||||
</delete>
|
</delete>
|
||||||
|
|
||||||
@@ -273,8 +310,5 @@
|
|||||||
<gzip destfile="${basedir}/build/release/${env.appname}_${env.Version}.tar.gz" src="${basedir}/build/release/${env.appname}_${env.Version}.tar"/>
|
<gzip destfile="${basedir}/build/release/${env.appname}_${env.Version}.tar.gz" src="${basedir}/build/release/${env.appname}_${env.Version}.tar"/>
|
||||||
|
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +0,0 @@
|
|||||||
<?php
|
|
||||||
\Classes\UIManager::getInstance()->setCurrentUser($user);
|
|
||||||
\Classes\UIManager::getInstance()->setProfiles($profileCurrent, $profileSwitched);
|
|
||||||
\Classes\UIManager::getInstance()->setHomeLink($homeLink);
|
|
||||||
|
|
||||||
$moduleManagers = \Classes\BaseService::getInstance()->getModuleManagers();
|
|
||||||
foreach($moduleManagers as $moduleManagerObj){
|
|
||||||
$allowed = \Classes\BaseService::getInstance()->isModuleAllowedForUser($moduleManagerObj);
|
|
||||||
|
|
||||||
if($allowed){
|
|
||||||
$moduleManagerObj->initQuickAccessMenu();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
104
core/admin/attendance/index.php
Normal file
104
core/admin/attendance/index.php
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
Copyright (c) 2018 [Glacies UG, Berlin, Germany] (http://glacies.de)
|
||||||
|
Developer: Thilina Hasantha (http://lk.linkedin.com/in/thilinah | https://github.com/thilinah)
|
||||||
|
*/
|
||||||
|
|
||||||
|
$moduleName = 'attendance';
|
||||||
|
$moduleGroup = 'admin';
|
||||||
|
define('MODULE_PATH',dirname(__FILE__));
|
||||||
|
include APP_BASE_PATH.'header.php';
|
||||||
|
include APP_BASE_PATH.'modulejslibs.inc.php';
|
||||||
|
$photoAttendance = \Classes\SettingsManager::getInstance()->getSetting('Attendance: Photo Attendance');
|
||||||
|
$mapAttendance = \Classes\SettingsManager::getInstance()->getSetting('Attendance: Request Attendance Location on Mobile');
|
||||||
|
?><div class="span9">
|
||||||
|
|
||||||
|
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
||||||
|
<li class="active"><a id="tabAttendance" href="#tabPageAttendance"><?=t('Monitor Attendance')?></a></li>
|
||||||
|
<li class=""><a id="tabAttendanceStatus" href="#tabPageAttendanceStatus"><?=t('Current Clocked In Status')?></a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<div class="tab-content">
|
||||||
|
<div class="tab-pane active" id="tabPageAttendance">
|
||||||
|
<div id="Attendance" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div id="AttendanceForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="tab-pane" id="tabPageAttendanceStatus">
|
||||||
|
<div id="AttendanceStatus" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div id="AttendanceStatusForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="modal" id="attendancePhotoModel" tabindex="-1" role="dialog" aria-labelledby="messageModelLabel" aria-hidden="true">
|
||||||
|
<div class="modal-dialog">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<button type="button" class="close" data-dismiss="modal" aria-hidden="true"><li class="fa fa-times"/></button>
|
||||||
|
<h3 style="font-size: 17px;">Attendance Details</h3>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<div class="row" style="background: #f3f4f5; padding: 10px;text-align: center;">
|
||||||
|
<h4 id="attendnaceCanvasEmp"></h4>
|
||||||
|
</div>
|
||||||
|
<div class="row" style="background: #f3f4f5; padding: 10px;">
|
||||||
|
<div id="attendnaceCanvasPunchInTimeWraper" class="col-sm-6" style="text-align: center;">
|
||||||
|
<b>In: </b><span id="attendnaceCanvasPunchInTime"></span>
|
||||||
|
</div>
|
||||||
|
<div id="attendnaceCanvasPunchOutTimeWrapper" class="col-sm-6" style="text-align: center;">
|
||||||
|
<b>Out: </b><span id="attendnaceCanvasPunchOutTime"></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="attendancePhoto" class="row" style="background: #f3f4f5; padding: 10px;display:none;">
|
||||||
|
<div class="col-sm-6" style="text-align: center;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-6" style="text-align: center;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="attendanceMap" class="row" style="background: #f3f4f5; padding: 10px;display:none;">
|
||||||
|
<div id="attendnaceMapCanvasInWrapper" class="col-sm-6" style="text-align: center;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div id="attendnaceMapCanvasOutWrapper" class="col-sm-6" style="text-align: center;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-6" style="text-align: center;">
|
||||||
|
<span>Location: <span id="punchInLocation"></span></span>
|
||||||
|
<br/>
|
||||||
|
IP Address: <span id="punchInIp"></span>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-6" style="text-align: center;">
|
||||||
|
<span>Location: <span id="punchOutLocation"></span></span>
|
||||||
|
<br/>
|
||||||
|
IP Address: <span id="punchOutIp"></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
var modJsList = new Array();
|
||||||
|
modJsList['tabAttendance'] = new AttendanceAdapter('Attendance','Attendance','','in_time desc');
|
||||||
|
modJsList['tabAttendance'].setRemoteTable(true);
|
||||||
|
modJsList['tabAttendance'].setPhotoAttendance(<?=$photoAttendance == '1' || $mapAttendance == '1'?>);
|
||||||
|
modJsList['tabAttendanceStatus'] = new AttendanceStatusAdapter('AttendanceStatus','AttendanceStatus','','');
|
||||||
|
modJsList['tabAttendanceStatus'].setShowAddNew(false);
|
||||||
|
var modJs = modJsList['tabAttendance'];
|
||||||
|
|
||||||
|
</script>
|
||||||
|
<?php include APP_BASE_PATH.'footer.php';?>
|
||||||
14
core/admin/attendance/meta.json
Normal file
14
core/admin/attendance/meta.json
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"label": "Monitor Attendance",
|
||||||
|
"menu": "Employees",
|
||||||
|
"order": "8",
|
||||||
|
"icon": "fa-clock",
|
||||||
|
"user_levels": [
|
||||||
|
"Admin",
|
||||||
|
"Manager"
|
||||||
|
],
|
||||||
|
"dashboardPosition": 5,
|
||||||
|
"permissions": [],
|
||||||
|
"model_namespace": "\\Attendance\\Common\\Model",
|
||||||
|
"manager": "\\Attendance\\Admin\\Api\\AttendanceAdminManager"
|
||||||
|
}
|
||||||
80
core/admin/company_structure/index.php
Normal file
80
core/admin/company_structure/index.php
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
Copyright (c) 2018 [Glacies UG, Berlin, Germany] (http://glacies.de)
|
||||||
|
Developer: Thilina Hasantha (http://lk.linkedin.com/in/thilinah | https://github.com/thilinah)
|
||||||
|
*/
|
||||||
|
|
||||||
|
$moduleName = 'company_structure';
|
||||||
|
$moduleGroup = 'admin';
|
||||||
|
define('MODULE_PATH',dirname(__FILE__));
|
||||||
|
include APP_BASE_PATH.'header.php';
|
||||||
|
include APP_BASE_PATH.'modulejslibs.inc.php';
|
||||||
|
?>
|
||||||
|
<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>
|
||||||
|
|
||||||
|
<style type="text/css">
|
||||||
|
|
||||||
|
|
||||||
|
.node circle {
|
||||||
|
cursor: pointer;
|
||||||
|
fill: #fff;
|
||||||
|
stroke: steelblue;
|
||||||
|
stroke-width: 1.5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.node text {
|
||||||
|
font-size: 11px;
|
||||||
|
}
|
||||||
|
|
||||||
|
path.link {
|
||||||
|
fill: none;
|
||||||
|
stroke: #ccc;
|
||||||
|
stroke-width: 1.5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<div class="span9">
|
||||||
|
|
||||||
|
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
||||||
|
<li class="active"><a id="tabCompanyStructure" href="#tabPageCompanyStructure"><?=t('Company Structure')?></a></li>
|
||||||
|
<li><a id="tabCompanyGraph" href="#tabPageCompanyGraph"><?=t('Company Graph')?></a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<div class="tab-content">
|
||||||
|
<div class="tab-pane active" id="tabPageCompanyStructure">
|
||||||
|
<div id="CompanyStructure" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div id="CompanyStructureForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="tab-pane reviewBlock" id="tabPageCompanyGraph" style="overflow-x: scroll;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
var modJsList = new Array();
|
||||||
|
modJsList['tabCompanyStructure'] = new CompanyStructureAdapter('CompanyStructure');
|
||||||
|
|
||||||
|
<?php if(isset($modulePermissions['perm']['Add Company Structure']) && $modulePermissions['perm']['Add Company Structure'] == "No"){?>
|
||||||
|
modJsList['tabCompanyStructure'].setShowAddNew(false);
|
||||||
|
<?php }?>
|
||||||
|
<?php if(isset($modulePermissions['perm']['Delete Company Structure']) && $modulePermissions['perm']['Delete Company Structure'] == "No"){?>
|
||||||
|
modJsList['tabCompanyStructure'].setShowDelete(false);
|
||||||
|
<?php }?>
|
||||||
|
<?php if(isset($modulePermissions['perm']['Edit Company Structure']) && $modulePermissions['perm']['Edit Company Structure'] == "No"){?>
|
||||||
|
modJsList['tabCompanyStructure'].setShowEdit(false);
|
||||||
|
<?php }?>
|
||||||
|
|
||||||
|
|
||||||
|
modJsList['tabCompanyGraph'] = new CompanyGraphAdapter('CompanyStructure');
|
||||||
|
|
||||||
|
var modJs = modJsList['tabCompanyStructure'];
|
||||||
|
|
||||||
|
</script>
|
||||||
|
<?php include APP_BASE_PATH.'footer.php';?>
|
||||||
19
core/admin/company_structure/meta.json
Normal file
19
core/admin/company_structure/meta.json
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
"label":"Company Structure",
|
||||||
|
"menu":"Admin",
|
||||||
|
"order":"2",
|
||||||
|
"icon":"fa-building",
|
||||||
|
"user_levels":["Admin","Manager"],
|
||||||
|
"dashboardPosition":2,
|
||||||
|
|
||||||
|
"permissions":
|
||||||
|
{
|
||||||
|
"Manager":{
|
||||||
|
"Add Company Structure":"No",
|
||||||
|
"Edit Company Structure":"No",
|
||||||
|
"Delete Company Structure":"No"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"model_namespace": "\\Company\\Common\\Model",
|
||||||
|
"manager": "\\Company\\Admin\\Api\\CompanyAdminManager"
|
||||||
|
}
|
||||||
56
core/admin/dashboard/index.php
Normal file
56
core/admin/dashboard/index.php
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
Copyright (c) 2018 [Glacies UG, Berlin, Germany] (http://glacies.de)
|
||||||
|
Developer: Thilina Hasantha (http://lk.linkedin.com/in/thilinah | https://github.com/thilinah)
|
||||||
|
*/
|
||||||
|
|
||||||
|
$moduleName = 'dashboard';
|
||||||
|
$moduleGroup = 'admin';
|
||||||
|
define('MODULE_PATH',dirname(__FILE__));
|
||||||
|
include APP_BASE_PATH.'header.php';
|
||||||
|
include APP_BASE_PATH.'modulejslibs.inc.php';
|
||||||
|
?><div class="span9">
|
||||||
|
<div class="row">
|
||||||
|
|
||||||
|
<?php
|
||||||
|
$moduleManagers = \Classes\BaseService::getInstance()->getModuleManagers();
|
||||||
|
$dashBoardList = array();
|
||||||
|
foreach($moduleManagers as $moduleManagerObj){
|
||||||
|
|
||||||
|
//Check if this is not an admin module
|
||||||
|
if($moduleManagerObj->getModuleType() != 'admin'){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$allowed = \Classes\BaseService::getInstance()->isModuleAllowedForUser($moduleManagerObj);
|
||||||
|
|
||||||
|
if(!$allowed){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$item = $moduleManagerObj->getDashboardItem();
|
||||||
|
if(!empty($item)) {
|
||||||
|
$index = $moduleManagerObj->getDashboardItemIndex();
|
||||||
|
$dashBoardList[$index] = $item;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ksort($dashBoardList);
|
||||||
|
|
||||||
|
foreach($dashBoardList as $k=>$v){
|
||||||
|
echo \Classes\LanguageManager::translateTnrText($v);
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
var modJsList = new Array();
|
||||||
|
|
||||||
|
modJsList['tabDashboard'] = new DashboardAdapter('Dashboard','Dashboard');
|
||||||
|
|
||||||
|
var modJs = modJsList['tabDashboard'];
|
||||||
|
|
||||||
|
</script>
|
||||||
|
<?php include APP_BASE_PATH.'footer.php';?>
|
||||||
20
core/admin/data/index.php
Normal file
20
core/admin/data/index.php
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
$moduleName = 'data';
|
||||||
|
$moduleGroup = 'admin';
|
||||||
|
define('MODULE_PATH',dirname(__FILE__));
|
||||||
|
include APP_BASE_PATH.'header.php';
|
||||||
|
include APP_BASE_PATH.'modulejslibs.inc.php';
|
||||||
|
|
||||||
|
$moduleBuilder = new \Classes\ModuleBuilder\ModuleBuilder();
|
||||||
|
|
||||||
|
$moduleBuilder->addModuleOrGroup(new \Classes\ModuleBuilder\ModuleTab(
|
||||||
|
'DataImport','DataImport','Data Importers','DataImportAdapter','','',true
|
||||||
|
));
|
||||||
|
$moduleBuilder->addModuleOrGroup(new \Classes\ModuleBuilder\ModuleTab(
|
||||||
|
'DataImportFile','DataImportFile','Data Import Files','DataImportFileAdapter','',''
|
||||||
|
));
|
||||||
|
|
||||||
|
echo \Classes\UIManager::getInstance()->renderModule($moduleBuilder);
|
||||||
|
|
||||||
|
include APP_BASE_PATH.'footer.php';
|
||||||
254
core/admin/employees/customTemplates/myDetails.html
Normal file
254
core/admin/employees/customTemplates/myDetails.html
Normal file
@@ -0,0 +1,254 @@
|
|||||||
|
<div class="row">
|
||||||
|
<div class="col-xs-12 col-md-2">
|
||||||
|
<div class="row-fluid">
|
||||||
|
<div class="col-xs-12" style="text-align: center;">
|
||||||
|
<img id="profile_image__id_" src="" class="img-polaroid img-thumbnail" style="max-width: 140px;max-height: 140px;">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-12 col-md-10">
|
||||||
|
<div class="row-fluid">
|
||||||
|
<div class="col-md-12"><h2 id="name"></h2></div>
|
||||||
|
</div>
|
||||||
|
<div class="row-fluid">
|
||||||
|
<div class="col-md-12">
|
||||||
|
<p>
|
||||||
|
<i class="fa fa-phone"></i> <span id="mobile_phone"></span>
|
||||||
|
<i class="fa fa-envelope"></i> <span id="work_email"></span>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row-fluid">
|
||||||
|
<div class="col-xs-12" style="font-size:18px;border-bottom: 1px solid #DDD;margin-bottom: 10px;padding-bottom: 10px;">
|
||||||
|
<button id="employeeProfileEditInfo" class="btn btn-small btn-success" onclick="modJs.edit(_id_);" style="margin-right:10px;"><i class="fa fa-edit"></i> <t>Edit Info</t></button>
|
||||||
|
<button id="employeeUploadProfileImage" onclick="showUploadDialog('profile_image__id_','Upload Profile Image','profile_image',_id_,'profile_image__id_','src','url','image');return false;" class="btn btn-small btn-primary" type="button" style="margin-right:10px;"><i class="fa fa-upload"></i> <t>Upload Profile Image</t></button>
|
||||||
|
<button id="employeeDeleteProfileImage" onclick="modJs.deleteProfileImage(_id_);return false;" class="btn btn-small btn-warning" type="button" style="margin-right:10px;"><i class="fa fa-times"></i> <t>Delete Profile Image</t></button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row-fluid" style="border-top: 1px;">
|
||||||
|
<div class="col-xs-6 col-md-4" style="font-size:16px;">
|
||||||
|
<label class="control-label col-xs-12" style="font-size:13px;font-size:13px;">#_label_employee_id_#</label>
|
||||||
|
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="employee_id"></label>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-6 col-md-4" style="font-size:16px;">
|
||||||
|
<label class="control-label col-xs-12" style="font-size:13px;">#_label_nic_num_#</label>
|
||||||
|
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="nic_num"></label>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-6 col-md-4" style="font-size:16px;">
|
||||||
|
<label class="control-label col-xs-12" style="font-size:13px;">#_label_ssn_num_#</label>
|
||||||
|
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="ssn_num"></label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<ul class="nav nav-tabs" id="subModTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
||||||
|
<li class="active"><a id="tabBasic" href="#tabPageBasic"><t>Basic Information</t></a></li>
|
||||||
|
<li class=""><a id="tabQualifications" href="#tabPageQualifications"><t>Qualifications</t></a></li>
|
||||||
|
<li class=""><a id="tabFamily" href="#tabPageFamily"><t>Family</t></a></li>
|
||||||
|
<li class=""><a id="tabDocuments" href="#tabPageDocuments"><t>Documents</t></a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<div class="tab-content">
|
||||||
|
<div class="tab-pane sub-tab active" id="tabPageBasic">
|
||||||
|
<div class="row" style="margin-left:10px;margin-top:20px;">
|
||||||
|
<div class="panel panel-default" style="width:97.5%;">
|
||||||
|
<div class="panel-heading"><h4><t>Personal Information</t></h4></div>
|
||||||
|
<div class="panel-body" id="cont_personal_information">
|
||||||
|
<div class="col-xs-6 col-md-3" style="font-size:16px;">
|
||||||
|
<label class="control-label col-xs-12" style="font-size:13px;">#_label_driving_license_#</label>
|
||||||
|
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="driving_license"></label>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-6 col-md-3" style="font-size:16px;">
|
||||||
|
<label class="control-label col-xs-12" style="font-size:13px;">#_label_other_id_#</label>
|
||||||
|
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="other_id"></label>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-6 col-md-3" style="font-size:16px;">
|
||||||
|
<label class="control-label col-xs-12" style="font-size:13px;">#_label_birthday_#</label>
|
||||||
|
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="birthday"></label>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-6 col-md-3" style="font-size:16px;">
|
||||||
|
<label class="control-label col-xs-12" style="font-size:13px;">#_label_gender_#</label>
|
||||||
|
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="gender"></label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-xs-6 col-md-3" style="font-size:16px;">
|
||||||
|
<label class="control-label col-xs-12" style="font-size:13px;">#_label_nationality_#</label>
|
||||||
|
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="nationality_Name"></label>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-6 col-md-3" style="font-size:16px;">
|
||||||
|
<label class="control-label col-xs-12" style="font-size:13px;">#_label_marital_status_#</label>
|
||||||
|
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="marital_status"></label>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-6 col-md-3" style="font-size:16px;">
|
||||||
|
<label class="control-label col-xs-12" style="font-size:13px;">#_label_joined_date_#</label>
|
||||||
|
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="joined_date"></label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row" style="margin-left:10px;margin-top:20px;">
|
||||||
|
<div class="panel panel-default" style="width:97.5%;">
|
||||||
|
<div class="panel-heading"><h4><t>Contact Information</t></h4></div>
|
||||||
|
<div class="panel-body" id="cont_contact_information">
|
||||||
|
<div class="col-xs-6 col-md-3" style="font-size:16px;">
|
||||||
|
<label class="control-label col-xs-12" style="font-size:13px;">#_label_address1_#</label>
|
||||||
|
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="address1"></label>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-6 col-md-3" style="font-size:16px;">
|
||||||
|
<label class="control-label col-xs-12" style="font-size:13px;">#_label_address2_#</label>
|
||||||
|
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="address2"></label>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-6 col-md-3" style="font-size:16px;">
|
||||||
|
<label class="control-label col-xs-12" style="font-size:13px;">#_label_city_#</label>
|
||||||
|
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="city"></label>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-6 col-md-3" style="font-size:16px;">
|
||||||
|
<label class="control-label col-xs-12" style="font-size:13px;">#_label_country_#</label>
|
||||||
|
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="country_Name"></label>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-6 col-md-3" style="font-size:16px;">
|
||||||
|
<label class="control-label col-xs-12" style="font-size:13px;">#_label_postal_code_#</label>
|
||||||
|
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="postal_code"></label>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-6 col-md-3" style="font-size:16px;">
|
||||||
|
<label class="control-label col-xs-12" style="font-size:13px;">#_label_home_phone_#</label>
|
||||||
|
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="home_phone"></label>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-6 col-md-3" style="font-size:16px;">
|
||||||
|
<label class="control-label col-xs-12" style="font-size:13px;">#_label_work_phone_#</label>
|
||||||
|
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="work_phone"></label>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-6 col-md-3" style="font-size:16px;">
|
||||||
|
<label class="control-label col-xs-12" style="font-size:13px;">#_label_private_email_#</label>
|
||||||
|
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="private_email"></label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row" style="margin-left:10px;margin-top:20px;">
|
||||||
|
<div class="panel panel-default" style="width:97.5%;">
|
||||||
|
<div class="panel-heading"><h4><t>Job Details</t></h4></div>
|
||||||
|
<div class="panel-body" id="cont_job_details">
|
||||||
|
<div class="col-xs-6 col-md-3" style="font-size:16px;">
|
||||||
|
<label class="control-label col-xs-12" style="font-size:13px;">#_label_job_title_#</label>
|
||||||
|
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="job_title_Name"></label>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-6 col-md-3" style="font-size:16px;">
|
||||||
|
<label class="control-label col-xs-12" style="font-size:13px;">#_label_employment_status_#</label>
|
||||||
|
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="employment_status_Name"></label>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-6 col-md-3" style="font-size:16px;">
|
||||||
|
<label class="control-label col-xs-12" style="font-size:13px;">#_label_supervisor_#</label>
|
||||||
|
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="supervisor_Name"></label>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-6 col-md-3" style="font-size:16px;">
|
||||||
|
<label class="control-label col-xs-12" style="font-size:13px;">Direct Reports</label>
|
||||||
|
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="subordinates"></label>
|
||||||
|
</div>
|
||||||
|
<div class="col-xs-6 col-md-3" style="font-size:16px;">
|
||||||
|
<label class="control-label col-xs-12" style="font-size:13px;">#_label_department_#</label>
|
||||||
|
<label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;" id="department_Name"></label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row" style="margin-left:10px;margin-top:20px;">
|
||||||
|
<div id="customFieldsCont">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="modal" id="adminUsersModel" tabindex="-1" role="dialog" aria-labelledby="messageModelLabel" aria-hidden="true">
|
||||||
|
<div class="modal-dialog">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<button type="button" class="close" data-dismiss="modal" aria-hidden="true"><li class="fa fa-times"/></button>
|
||||||
|
<h3 style="font-size: 17px;"><t>Change Password</t></h3>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<form id="adminUsersChangePwd">
|
||||||
|
<div class="control-group">
|
||||||
|
<div class="controls">
|
||||||
|
<span class="label label-warning" id="adminUsersChangePwd_error" style="display:none;"></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="control-group" id="field_newpwd">
|
||||||
|
<label class="control-label" for="newpwd"><t>New Password</t></label>
|
||||||
|
<div class="controls">
|
||||||
|
<input class="" type="password" id="newpwd" name="newpwd" value="" class="form-control"/>
|
||||||
|
<span class="help-inline" id="help_newpwd"></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="control-group" id="field_conpwd">
|
||||||
|
<label class="control-label" for="conpwd"><t>Confirm Password</t></label>
|
||||||
|
<div class="controls">
|
||||||
|
<input class="" type="password" id="conpwd" name="conpwd" value="" class="form-control"/>
|
||||||
|
<span class="help-inline" id="help_conpwd"></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button class="btn btn-primary" onclick="modJs.changePasswordConfirm();"><t>Change Password</t></button>
|
||||||
|
<button class="btn" onclick="modJs.closeChangePassword();"><t>Not Now</t></button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div><!-- End tabPageBasic -->
|
||||||
|
<div class="tab-pane sub-tab" id="tabPageQualifications">
|
||||||
|
<div class="row" style="margin-top:20px;">
|
||||||
|
<div class="col-md-3 sub-column">
|
||||||
|
<div id="EmployeeSkillSubTab" class="" data-content="List" style="padding-left:5px;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3 sub-column">
|
||||||
|
<div id="EmployeeEducationSubTab" class="" data-content="List" style="padding-left:5px;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3 sub-column">
|
||||||
|
<div id="EmployeeCertificationSubTab" class="" data-content="List" style="padding-left:5px;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-3 sub-column">
|
||||||
|
<div id="EmployeeLanguageSubTab" class="" data-content="List" style="padding-left:5px;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div><!-- End tabPageQualifications -->
|
||||||
|
</div>
|
||||||
|
<div class="tab-pane sub-tab" id="tabPageFamily">
|
||||||
|
<div class="row" style="margin-top:20px;">
|
||||||
|
<div class="col-md-6 sub-column">
|
||||||
|
<div id="EmployeeEmergencyContactSubTab" class="" data-content="List" style="padding-left:5px;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6 sub-column">
|
||||||
|
<div id="EmployeeDependentSubTab" class="" data-content="List" style="padding-left:5px;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="tab-pane sub-tab" id="tabPageDocuments">
|
||||||
|
<div class="row" style="margin-top:20px;">
|
||||||
|
<div class="col-md-12">
|
||||||
|
<div id="EmployeeDocumentSubTab" class="" data-content="List" style="padding-left:5px;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div><!-- End tabPageQualifications -->
|
||||||
|
</div>
|
||||||
|
</div><!-- End tab-content -->
|
||||||
205
core/admin/employees/index.php
Normal file
205
core/admin/employees/index.php
Normal file
@@ -0,0 +1,205 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
$moduleName = 'employees';
|
||||||
|
$moduleGroup = 'admin';
|
||||||
|
define('MODULE_PATH',dirname(__FILE__));
|
||||||
|
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");
|
||||||
|
?><div class="span9">
|
||||||
|
|
||||||
|
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
||||||
|
<?php if($user->user_level != "Admin"){
|
||||||
|
?>
|
||||||
|
<li class="active"><a id="tabEmployee" href="#tabPageEmployee"><?=t('Employees (Direct Reports)')?></a></li>
|
||||||
|
<?php }else{ ?>
|
||||||
|
<li class="active"><a id="tabEmployee" href="#tabPageEmployee"><?=t('Employees')?></a></li>
|
||||||
|
<?php }?>
|
||||||
|
|
||||||
|
<?php if ($user->user_level == "Admin") { ?>
|
||||||
|
<li><a id="tabEmployeeSkill" href="#tabPageEmployeeSkill"><?=t('Skills')?></a></li>
|
||||||
|
<li><a id="tabEmployeeEducation" href="#tabPageEmployeeEducation"><?=t('Education')?></a></li>
|
||||||
|
<li><a id="tabEmployeeCertification" href="#tabPageEmployeeCertification"><?=t('Certifications')?></a></li>
|
||||||
|
<li><a id="tabEmployeeLanguage" href="#tabPageEmployeeLanguage"><?=t('Languages')?></a></li>
|
||||||
|
<li><a id="tabEmployeeDependent" href="#tabPageEmployeeDependent"><?=t('Dependents')?></a></li>
|
||||||
|
<li><a id="tabEmergencyContact" href="#tabPageEmergencyContact"><?=t('Emergency Contacts')?></a></li>
|
||||||
|
<?php if (class_exists('\\Documents\\Admin\\Api\\DocumentsAdminManager')) {?>
|
||||||
|
<li><a id="tabEmployeeDocument" href="#tabPageEmployeeDocument"><?=t('Documents')?></a></li>
|
||||||
|
<?php } ?>
|
||||||
|
<?php }?>
|
||||||
|
<?php if ($user->user_level == "Admin"){ ?>
|
||||||
|
<li class="dropdown">
|
||||||
|
<a href="#" id="terminatedEmployeeMenu" class="dropdown-toggle" data-toggle="dropdown" aria-controls="terminatedEmployeeMenu-contents"><?=t('Deactivated Employees')?> <span class="caret"></span></a>
|
||||||
|
<ul class="dropdown-menu" role="menu" aria-labelledby="terminatedEmployeeMenu" id="terminatedEmployeeMenu-contents">
|
||||||
|
<li><a id="tabTerminatedEmployee" href="#tabPageTerminatedEmployee"><?=t('Temporarily Deactivated Employees')?></a></li>
|
||||||
|
<li><a id="tabArchivedEmployee" href="#tabPageArchivedEmployee"><?=t('Terminated Employee Data')?></a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<?php } ?>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<div class="tab-content">
|
||||||
|
<div class="tab-pane active" id="tabPageEmployee">
|
||||||
|
<div id="Employee" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div id="EmployeeForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="tab-pane" id="tabPageEmployeeSkill">
|
||||||
|
<div id="EmployeeSkill" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div id="EmployeeSkillForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="tab-pane" id="tabPageEmployeeEducation">
|
||||||
|
<div id="EmployeeEducation" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div id="EmployeeEducationForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="tab-pane" id="tabPageEmployeeCertification">
|
||||||
|
<div id="EmployeeCertification" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div id="EmployeeCertificationForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="tab-pane" id="tabPageEmployeeLanguage">
|
||||||
|
<div id="EmployeeLanguage" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div id="EmployeeLanguageForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="tab-pane" id="tabPageEmployeeDependent">
|
||||||
|
<div id="EmployeeDependent" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div id="EmployeeDependentForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="tab-pane" id="tabPageEmergencyContact">
|
||||||
|
<div id="EmergencyContact" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div id="EmergencyContactForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="tab-pane" id="tabPageArchivedEmployee">
|
||||||
|
<div id="ArchivedEmployee" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div id="ArchivedEmployeeForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="tab-pane" id="tabPageTerminatedEmployee">
|
||||||
|
<div id="TerminatedEmployee" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div id="TerminatedEmployeeForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php if (class_exists('\\Documents\\Admin\\Api\\DocumentsAdminManager')) {?>
|
||||||
|
<div class="tab-pane" id="tabPageEmployeeDocument">
|
||||||
|
<div id="EmployeeDocument" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div id="EmployeeDocumentForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php } ?>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
var modJsList = new Array();
|
||||||
|
<?php if($user->user_level != "Admin"){ ?>
|
||||||
|
modJsList['tabEmployee'] = new EmployeeAdapter('Employee','Employee',{"status":"Active"});
|
||||||
|
modJsList['tabEmployee'].setShowAddNew(false);
|
||||||
|
modJsList['tabEmployee'].setShowDelete(false);
|
||||||
|
<?php }else{ ?>
|
||||||
|
modJsList['tabEmployee'] = new EmployeeAdapter('Employee','Employee',{"status":"Active"});
|
||||||
|
<?php } ?>
|
||||||
|
|
||||||
|
modJsList['tabEmployee'].setRemoteTable(true);
|
||||||
|
modJsList['tabEmployee'].setFieldNameMap(<?=json_encode($fieldNameMap)?>);
|
||||||
|
modJsList['tabEmployee'].setCustomFields(<?=json_encode($customFields)?>);
|
||||||
|
|
||||||
|
modJsList['tabEmployeeSkill'] = new EmployeeSkillAdapter('EmployeeSkill');
|
||||||
|
modJsList['tabEmployeeSkill'].setRemoteTable(true);
|
||||||
|
|
||||||
|
modJsList['tabEmployeeEducation'] = new EmployeeEducationAdapter('EmployeeEducation');
|
||||||
|
modJsList['tabEmployeeEducation'].setRemoteTable(true);
|
||||||
|
|
||||||
|
modJsList['tabEmployeeCertification'] = new EmployeeCertificationAdapter('EmployeeCertification');
|
||||||
|
modJsList['tabEmployeeCertification'].setRemoteTable(true);
|
||||||
|
|
||||||
|
modJsList['tabEmployeeLanguage'] = new EmployeeLanguageAdapter('EmployeeLanguage');
|
||||||
|
modJsList['tabEmployeeLanguage'].setRemoteTable(true);
|
||||||
|
|
||||||
|
modJsList['tabEmployeeDependent'] = new EmployeeDependentAdapter('EmployeeDependent');
|
||||||
|
modJsList['tabEmployeeDependent'].setRemoteTable(true);
|
||||||
|
|
||||||
|
modJsList['tabEmergencyContact'] = new EmergencyContactAdapter('EmergencyContact');
|
||||||
|
modJsList['tabEmergencyContact'].setRemoteTable(true);
|
||||||
|
|
||||||
|
modJsList['tabEmployeeImmigration'] = new EmployeeImmigrationAdapter('EmployeeImmigration');
|
||||||
|
modJsList['tabEmployeeImmigration'].setRemoteTable(true);
|
||||||
|
|
||||||
|
modJsList['tabArchivedEmployee'] = new ArchivedEmployeeAdapter('ArchivedEmployee');
|
||||||
|
modJsList['tabArchivedEmployee'].setRemoteTable(true);
|
||||||
|
modJsList['tabArchivedEmployee'].setShowAddNew(false);
|
||||||
|
|
||||||
|
modJsList['tabTerminatedEmployee'] = new TerminatedEmployeeAdapter('Employee','TerminatedEmployee',{"status":"Terminated"});
|
||||||
|
modJsList['tabTerminatedEmployee'].setRemoteTable(true);
|
||||||
|
modJsList['tabTerminatedEmployee'].setShowAddNew(false);
|
||||||
|
|
||||||
|
<?php if (class_exists('\\Documents\\Admin\\Api\\DocumentsAdminManager')) {?>
|
||||||
|
modJsList['tabEmployeeDocument'] = new EmployeeDocumentAdapter('EmployeeDocument','EmployeeDocument');
|
||||||
|
modJsList['tabTerminatedEmployee'].setRemoteTable(true);
|
||||||
|
<?php } ?>
|
||||||
|
|
||||||
|
var modJs = modJsList['tabEmployee'];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="modal" id="createUserModel" tabindex="-1" role="dialog" aria-labelledby="messageModelLabel" aria-hidden="true">
|
||||||
|
<div class="modal-dialog">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<button type="button" class="close" data-dismiss="modal" aria-hidden="true"><li class="fa fa-times"/></button>
|
||||||
|
<h3 style="font-size: 17px;"><?=t('Employee Saved Successfully')?></h3>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<?=t('Employee needs a User to login to IceHrm. Do you want to create a user for this employee now?')?> <br/><br/><?=t('You can do this later through Users module if required.')?>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button class="btn btn-primary" onclick="modJs.createUser();">Yes</button>
|
||||||
|
<button class="btn" onclick="modJs.closeCreateUser();">No</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<?php include APP_BASE_PATH.'footer.php';?>
|
||||||
55
core/admin/fieldnames/index.php
Normal file
55
core/admin/fieldnames/index.php
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
Copyright (c) 2018 [Glacies UG, Berlin, Germany] (http://glacies.de)
|
||||||
|
Developer: Thilina Hasantha (http://lk.linkedin.com/in/thilinah | https://github.com/thilinah)
|
||||||
|
*/
|
||||||
|
|
||||||
|
$moduleName = 'fieldnames';
|
||||||
|
$moduleGroup = 'admin';
|
||||||
|
define('MODULE_PATH',dirname(__FILE__));
|
||||||
|
include APP_BASE_PATH.'header.php';
|
||||||
|
include APP_BASE_PATH.'modulejslibs.inc.php';
|
||||||
|
?><div class="span9">
|
||||||
|
|
||||||
|
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
||||||
|
<li class="active"><a id="tabEmployeeFieldName" href="#tabPageEmployeeFieldName"><?=t('Employee Field Names')?></a></li>
|
||||||
|
<li><a id="tabEmployeeCustomField" href="#tabPageEmployeeCustomField"><?=t('Employee Custom Fields')?></a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<div class="tab-content">
|
||||||
|
<div class="tab-pane active" id="tabPageEmployeeFieldName">
|
||||||
|
<div id="EmployeeFieldName" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div id="EmployeeFieldNameForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="tab-pane" id="tabPageEmployeeCustomField">
|
||||||
|
<div id="EmployeeCustomField" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div id="EmployeeCustomFieldForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
var modJsList = new Array();
|
||||||
|
|
||||||
|
modJsList['tabEmployeeFieldName'] = new FieldNameAdapter('FieldNameMapping','EmployeeFieldName',{"type":"Employee"});
|
||||||
|
modJsList['tabEmployeeFieldName'].setRemoteTable(true);
|
||||||
|
modJsList['tabEmployeeFieldName'].setShowDelete(false);
|
||||||
|
modJsList['tabEmployeeFieldName'].setShowAddNew(false);
|
||||||
|
|
||||||
|
modJsList['tabEmployeeCustomField'] = new CustomFieldAdapter('CustomField','EmployeeCustomField',{"type":"Employee"},"display_order desc");
|
||||||
|
modJsList['tabEmployeeCustomField'].setRemoteTable(true);
|
||||||
|
modJsList['tabEmployeeCustomField'].setTableType("Employee");
|
||||||
|
|
||||||
|
|
||||||
|
var modJs = modJsList['tabEmployeeFieldName'];
|
||||||
|
|
||||||
|
</script>
|
||||||
|
<?php include APP_BASE_PATH.'footer.php';?>
|
||||||
12
core/admin/fieldnames/meta.json
Normal file
12
core/admin/fieldnames/meta.json
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"label": "Employee Custom Fields",
|
||||||
|
"menu": "Admin",
|
||||||
|
"order": "83",
|
||||||
|
"icon": "fa-ruler-horizontal",
|
||||||
|
"user_levels": [
|
||||||
|
"Admin"
|
||||||
|
],
|
||||||
|
"permissions": [],
|
||||||
|
"model_namespace": "\\FieldNames\\Common\\Model",
|
||||||
|
"manager": "\\FieldNames\\Admin\\Api\\FieldNamesAdminManager"
|
||||||
|
}
|
||||||
57
core/admin/jobs/index.php
Normal file
57
core/admin/jobs/index.php
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
Copyright (c) 2018 [Glacies UG, Berlin, Germany] (http://glacies.de)
|
||||||
|
Developer: Thilina Hasantha (http://lk.linkedin.com/in/thilinah | https://github.com/thilinah)
|
||||||
|
*/
|
||||||
|
$moduleName = 'jobs';
|
||||||
|
$moduleGroup = 'admin';
|
||||||
|
define('MODULE_PATH',dirname(__FILE__));
|
||||||
|
include APP_BASE_PATH.'header.php';
|
||||||
|
include APP_BASE_PATH.'modulejslibs.inc.php';
|
||||||
|
?><div class="span9">
|
||||||
|
|
||||||
|
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
||||||
|
<li class="active"><a id="tabJobTitles" href="#tabPageJobTitles"><?=t('Job Titles')?></a></li>
|
||||||
|
<li><a id="tabPayGrades" href="#tabPagePayGrades"><?=t('Pay Grades')?></a></li>
|
||||||
|
<li><a id="tabEmploymentStatus" href="#tabPageEmploymentStatus"><?=t('Employment Status')?></a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<div class="tab-content">
|
||||||
|
<div class="tab-pane active" id="tabPageJobTitles">
|
||||||
|
<div id="JobTitle" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div id="JobTitleForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="tab-pane" id="tabPagePayGrades">
|
||||||
|
<div id="PayGrade" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div id="PayGradeForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="tab-pane" id="tabPageEmploymentStatus">
|
||||||
|
<div id="EmploymentStatus" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div id="EmploymentStatusForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
var modJsList = new Array();
|
||||||
|
|
||||||
|
modJsList['tabJobTitles'] = new JobTitleAdapter('JobTitle');
|
||||||
|
modJsList['tabPayGrades'] = new PayGradeAdapter('PayGrade');
|
||||||
|
modJsList['tabEmploymentStatus'] = new EmploymentStatusAdapter('EmploymentStatus');
|
||||||
|
|
||||||
|
var modJs = modJsList['tabJobTitles'];
|
||||||
|
|
||||||
|
</script>
|
||||||
|
<?php include APP_BASE_PATH.'footer.php';?>
|
||||||
48
core/admin/loans/index.php
Normal file
48
core/admin/loans/index.php
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
Copyright (c) 2018 [Glacies UG, Berlin, Germany] (http://glacies.de)
|
||||||
|
Developer: Thilina Hasantha (http://lk.linkedin.com/in/thilinah | https://github.com/thilinah)
|
||||||
|
*/
|
||||||
|
|
||||||
|
$moduleName = 'loans';
|
||||||
|
$moduleGroup = 'admin';
|
||||||
|
define('MODULE_PATH',dirname(__FILE__));
|
||||||
|
include APP_BASE_PATH.'header.php';
|
||||||
|
include APP_BASE_PATH.'modulejslibs.inc.php';
|
||||||
|
?><div class="span9">
|
||||||
|
|
||||||
|
<ul class="nav nav-tabs" id="modTab" style="margin-bottom:0px;margin-left:5px;border-bottom: none;">
|
||||||
|
<li class="active"><a id="tabCompanyLoan" href="#tabPageCompanyLoan"><?=t('Loan Types')?></a></li>
|
||||||
|
<li><a id="tabEmployeeCompanyLoan" href="#tabPageEmployeeCompanyLoan"><?=t('Employee Loans')?></a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<div class="tab-content">
|
||||||
|
<div class="tab-pane active" id="tabPageCompanyLoan">
|
||||||
|
<div id="CompanyLoan" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div id="CompanyLoanForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="tab-pane" id="tabPageEmployeeCompanyLoan">
|
||||||
|
<div id="EmployeeCompanyLoan" class="reviewBlock" data-content="List" style="padding-left:5px;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div id="EmployeeCompanyLoanForm" class="reviewBlock" data-content="Form" style="padding-left:5px;display:none;">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
var modJsList = new Array();
|
||||||
|
|
||||||
|
modJsList['tabCompanyLoan'] = new CompanyLoanAdapter('CompanyLoan','CompanyLoan');
|
||||||
|
modJsList['tabEmployeeCompanyLoan'] = new EmployeeCompanyLoanAdapter('EmployeeCompanyLoan','EmployeeCompanyLoan');
|
||||||
|
|
||||||
|
var modJs = modJsList['tabCompanyLoan'];
|
||||||
|
|
||||||
|
</script>
|
||||||
|
<?php include APP_BASE_PATH.'footer.php';?>
|
||||||
12
core/admin/loans/meta.json
Normal file
12
core/admin/loans/meta.json
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"label": "Company Loans",
|
||||||
|
"menu": "Admin",
|
||||||
|
"order": "89",
|
||||||
|
"icon": "fa-money-check",
|
||||||
|
"user_levels": [
|
||||||
|
"Admin"
|
||||||
|
],
|
||||||
|
"permissions": [],
|
||||||
|
"model_namespace": "\\Loans\\Common\\Model",
|
||||||
|
"manager": "\\Loans\\Admin\\Api\\LoansAdminManager"
|
||||||
|
}
|
||||||
8
core/admin/meta.json
Normal file
8
core/admin/meta.json
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"Admin":"fa-cubes",
|
||||||
|
"Employees":"fa-grip-horizontal",
|
||||||
|
"Admin Reports":"fa-book-reader",
|
||||||
|
"System":"fa-cogs",
|
||||||
|
"Insights":"fa-chart-line",
|
||||||
|
"Payroll":"fa-file-archive"
|
||||||
|
}
|
||||||
32
core/admin/metadata/index.php
Normal file
32
core/admin/metadata/index.php
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
<?php
|
||||||
|
$moduleName = 'metadata';
|
||||||
|
$moduleGroup = 'admin';
|
||||||
|
define('MODULE_PATH',dirname(__FILE__));
|
||||||
|
include APP_BASE_PATH.'header.php';
|
||||||
|
include APP_BASE_PATH.'modulejslibs.inc.php';
|
||||||
|
|
||||||
|
$moduleBuilder = new \Classes\ModuleBuilder\ModuleBuilder();
|
||||||
|
|
||||||
|
$moduleBuilder->addModuleOrGroup(new \Classes\ModuleBuilder\ModuleTab(
|
||||||
|
'Country','Country','Countries','CountryAdapter','','',true
|
||||||
|
));
|
||||||
|
$moduleBuilder->addModuleOrGroup(new \Classes\ModuleBuilder\ModuleTab(
|
||||||
|
'Province','Province','Provinces','ProvinceAdapter','',''
|
||||||
|
));
|
||||||
|
$moduleBuilder->addModuleOrGroup(new \Classes\ModuleBuilder\ModuleTab(
|
||||||
|
'CurrencyType','CurrencyType','Currency Types','CurrencyTypeAdapter','',''
|
||||||
|
));
|
||||||
|
$moduleBuilder->addModuleOrGroup(new \Classes\ModuleBuilder\ModuleTab(
|
||||||
|
'Nationality','Nationality','Nationality','NationalityAdapter','',''
|
||||||
|
));
|
||||||
|
$moduleBuilder->addModuleOrGroup(new \Classes\ModuleBuilder\ModuleTab(
|
||||||
|
'Ethnicity','Ethnicity','Ethnicity','EthnicityAdapter','',''
|
||||||
|
));
|
||||||
|
$moduleBuilder->addModuleOrGroup(new \Classes\ModuleBuilder\ModuleTab(
|
||||||
|
'ImmigrationStatus','ImmigrationStatus','Immigration Status','ImmigrationStatusAdapter','',''
|
||||||
|
));
|
||||||
|
|
||||||
|
|
||||||
|
echo \Classes\UIManager::getInstance()->renderModule($moduleBuilder);
|
||||||
|
|
||||||
|
include APP_BASE_PATH.'footer.php';
|
||||||
12
core/admin/metadata/meta.json
Normal file
12
core/admin/metadata/meta.json
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"label": "Manage Metadata",
|
||||||
|
"menu": "System",
|
||||||
|
"order": "6",
|
||||||
|
"icon": "fa-microchip",
|
||||||
|
"user_levels": [
|
||||||
|
"Admin"
|
||||||
|
],
|
||||||
|
"permissions": [],
|
||||||
|
"model_namespace": "\\Metadata\\Common\\Model",
|
||||||
|
"manager": "\\Metadata\\Admin\\Api\\MetadataAdminManager"
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user