A bunch of new updates from icehrm pro

This commit is contained in:
Thilina Hasantha
2019-02-03 13:55:39 +01:00
parent a75325fb52
commit 96b0ad8496
598 changed files with 74156 additions and 29979 deletions

View File

@@ -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;
}
});

View File

@@ -1,320 +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"]}]
];
});
CompanyStructureAdapter.method('postRenderForm', function(object, $tempDomObj) {
if (object === undefined
|| object === null
|| object.id === null
|| object.id === undefined || object.id === ''
) {
$tempDomObj.find('#field_heads').hide();
}
});
/*
* 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/';
});

View File

@@ -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) {
});

View File

@@ -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);
});

File diff suppressed because it is too large Load Diff

View File

@@ -1,49 +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"]]}]
];
});

View File

@@ -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":""}]
];
});

View File

@@ -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"]}],
];
});

View File

@@ -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);

View File

@@ -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) {
});

View File

@@ -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"}]
];
});

View File

@@ -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
];
});

View File

@@ -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);
});

View File

@@ -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/';
});

View File

@@ -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":""}]
];
});

View File

@@ -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;
});

View File

@@ -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"]}]
];
});

View File

@@ -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/';
});

View File

@@ -1,195 +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() {
var fields = [
[ "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":""}]
];
for(var i=0;i<this.customFields.length;i++){
fields.push(this.customFields[i]);
}
return fields;
});
/**
* 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 this.addCustomFields([
["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": "Means of Transportation",
"type": "select",
"source": [
["Plane", "Plane"],
["Rail", "Rail"],
["Taxi", "Taxi"],
["Own Vehicle", "Own Vehicle"],
["Rented Vehicle", "Rented Vehicle"],
["Other", "Other"]
]
}],
["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", "default":"0.00", "mask":"9{0,10}.99"}],
["attachment1", {"label": "Attachment", "type": "fileupload", "validation": "none"}],
["attachment2", {"label": "Attachment", "type": "fileupload", "validation": "none"}],
["attachment3", {"label": "Attachment", "type": "fileupload", "validation": "none"}]
]);
});

View File

@@ -1,201 +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();
params['csrf'] = $('#'+this.getTableName()+'Form').data('csrf');
if(id != null && id != undefined && id != ""){
params['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) {
return str.length > 7;
};
var password = $('#adminUsersChangePwd #newpwd').val();
if(!passwordValidation(password)){
$('#adminUsersChangePwd_error').html("Password should be longer than 7 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":""}]
];
});

File diff suppressed because it is too large Load Diff

View File

@@ -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'});
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,5 +1,13 @@
function ConversationsAdapter(endPoint,tab,filter,orderBy) {
this.initAdapter(endPoint,tab,filter,orderBy);
/*
Copyright (c) 2018 [Glacies UG, Berlin, Germany] (http://glacies.de)
Developer: Thilina Hasantha (http://lk.linkedin.com/in/thilinah | https://github.com/thilinah)
*/
/* global showUploadDialog */
import AdapterBase from './AdapterBase';
class ConversationsAdapter extends AdapterBase {
constructor(endPoint, tab, filter, orderBy) {
super(endPoint, tab, filter, orderBy);
this.topLimit = 0;
this.bottomLimit = 0;
this.conversations = [];
@@ -10,339 +18,335 @@ function ConversationsAdapter(endPoint,tab,filter,orderBy) {
this.pageSize = 6;
this.currentPage = 1;
this.hasMoreData = true;
this.searchTerm = "";
this.searchTerm = '';
this.searchInput = null;
this.timer = null;
this.timeoutDelay = 0;
this.topLimitUpdated = false;
}
}
ConversationsAdapter.inherits(AdapterBase);
ConversationsAdapter.method('getDataMapping', function() {
getDataMapping() {
return [];
});
}
ConversationsAdapter.method('getHeaders', function() {
getHeaders() {
return [];
});
}
ConversationsAdapter.method('getFormFields', function() {
getFormFields() {
return [];
});
}
ConversationsAdapter.method('addConversation', function() {
var object = this.validateCreateConversation();
addConversation() {
const object = this.validateCreateConversation();
if (!object) {
return false;
return false;
}
object.type = this.type;
object.clienttime = (new Date()).getTimezoneOffset();
var reqJson = JSON.stringify(object);
var callBackData = [];
callBackData['callBackData'] = [];
callBackData['callBackSuccess'] = 'addConversationSuccessCallBack';
callBackData['callBackFail'] = 'addConversationFailCallBack';
const reqJson = JSON.stringify(object);
const callBackData = [];
callBackData.callBackData = [];
callBackData.callBackSuccess = 'addConversationSuccessCallBack';
callBackData.callBackFail = 'addConversationFailCallBack';
this.customAction('addConversation','modules=conversations',reqJson,callBackData);
});
this.customAction('addConversation', 'modules=conversations', reqJson, callBackData);
return true;
}
ConversationsAdapter.method('clearInputs', function() {
clearInputs() {
$('#contentMessage').data('simplemde').value('');
$('#attachment').html(this.gt('Attach File'));
$('#attachment_remove').hide();
$('#attachment_download').hide();
});
}
ConversationsAdapter.method('uploadPostAttachment', function() {
var rand = this.generateRandom(14);
showUploadDialog('attachment_'+rand,'Upload Attachment','Conversation',1,'attachment','html','name','all');
});
uploadPostAttachment() {
const rand = this.generateRandom(14);
showUploadDialog(`attachment_${rand}`, 'Upload Attachment', 'Conversation', 1, 'attachment', 'html', 'name', 'all');
}
ConversationsAdapter.method('setConversationType', function(type) {
setConversationType(type) {
this.type = type;
});
}
ConversationsAdapter.method('addConversationSuccessCallBack', function(callBackData) {
addConversationSuccessCallBack() {
this.clearInputs();
this.getConversations(this.topLimit, this.pageSize, true);
});
}
ConversationsAdapter.method('addConversationFailCallBack', function(callBackData) {
addConversationFailCallBack() {
});
}
ConversationsAdapter.method('deleteConversation', function(id) {
var object = {id: id};
var reqJson = JSON.stringify(object);
var callBackData = [];
callBackData['callBackData'] = [];
callBackData['callBackSuccess'] = 'deleteConversationSuccessCallBack';
callBackData['callBackFail'] = 'deleteConversationFailCallBack';
deleteConversation(id) {
const object = { id };
const reqJson = JSON.stringify(object);
const callBackData = [];
callBackData.callBackData = [];
callBackData.callBackSuccess = 'deleteConversationSuccessCallBack';
callBackData.callBackFail = 'deleteConversationFailCallBack';
this.customAction('deleteConversation','modules=conversations',reqJson,callBackData);
});
this.customAction('deleteConversation', 'modules=conversations', reqJson, callBackData);
}
deleteConversationSuccessCallBack(callBackData) {
$(`#obj_${callBackData}`).fadeOut();
}
ConversationsAdapter.method('deleteConversationSuccessCallBack', function(callBackData) {
$('#obj_'+callBackData).fadeOut();
});
deleteConversationFailCallBack() {
ConversationsAdapter.method('deleteConversationFailCallBack', function(callBackData) {
}
});
ConversationsAdapter.method('toggleConversationSize', function(id) {
$('#obj_'+id).find('.conversation-body').toggleClass('conversation-small');
if ($('#obj_'+id).find('.conversation-body').hasClass('conversation-small')) {
$('#obj_'+id).find('.conversation-expand-label').html(this.gt('Show More'));
toggleConversationSize(id) {
$(`#obj_${id}`).find('.conversation-body').toggleClass('conversation-small');
if ($(`#obj_${id}`).find('.conversation-body').hasClass('conversation-small')) {
$(`#obj_${id}`).find('.conversation-expand-label').html(this.gt('Show More'));
} else {
$('#obj_'+id).find('.conversation-expand-label').html(this.gt('Show Less'));
$(`#obj_${id}`).find('.conversation-expand-label').html(this.gt('Show Less'));
}
});
}
ConversationsAdapter.method('getConversations', function(start, limit, addToTop) {
var reqJson = JSON.stringify({
start: start,
limit: limit,
top: addToTop,
type: this.type
getConversations(start, limit, addToTop) {
const reqJson = JSON.stringify({
start,
limit,
top: addToTop,
type: this.type,
});
var callBackData = [addToTop];
callBackData['callBackData'] = callBackData;
callBackData['callBackSuccess'] = 'getConversationsSuccessCallBack';
callBackData['callBackFail'] = 'getConversationsFailCallBack';
const callBackData = [addToTop];
callBackData.callBackData = callBackData;
callBackData.callBackSuccess = 'getConversationsSuccessCallBack';
callBackData.callBackFail = 'getConversationsFailCallBack';
this.showConversationLoader();
this.customAction('getConversations','modules=conversations',reqJson,callBackData);
});
this.customAction('getConversations', 'modules=conversations', reqJson, callBackData);
}
ConversationsAdapter.method('getConversationsSuccessCallBack', function(addToTop, serverData) {
getConversationsSuccessCallBack(addToTop, serverData) {
this.hideLoader();
var data = [];
if(!addToTop && serverData.length > this.pageSize){
this.hasMoreData = true;
serverData.pop();
this.loadMoreButton.removeAttr('disabled');
this.loadMoreButton.show();
const data = [];
if (!addToTop && serverData.length > this.pageSize) {
this.hasMoreData = true;
serverData.pop();
this.loadMoreButton.removeAttr('disabled');
this.loadMoreButton.show();
} else if (!addToTop) {
this.hasMoreData = false;
this.loadMoreButton.hide();
this.hasMoreData = false;
this.loadMoreButton.hide();
}
if (!addToTop) {
this.scrollToElementBottom(this.container);
this.scrollToElementBottom(this.container);
}
for(var i=0;i<serverData.length;i++){
data.push(this.preProcessTableData(serverData[i]));
for (let i = 0; i < serverData.length; i++) {
data.push(this.preProcessTableData(serverData[i]));
}
this.sourceData = serverData;
this.topLimitUpdated = false;
for(var i=0;i<data.length;i++){
this.renderObject(data[i], addToTop);
if (data[i].timeint < this.bottomLimit || this.bottomLimit === 0) {
this.bottomLimit = data[i].timeint;
}
for (let i = 0; i < data.length; i++) {
this.renderObject(data[i], addToTop);
if (data[i].timeint < this.bottomLimit || this.bottomLimit === 0) {
this.bottomLimit = data[i].timeint;
}
if (data[i].timeint > this.topLimit || this.topLimit === 0) {
this.topLimit = data[i].timeint;
this.topLimitUpdated = true;
}
if (data[i].timeint > this.topLimit || this.topLimit === 0) {
this.topLimit = data[i].timeint;
this.topLimitUpdated = true;
}
}
this.hideConversationLoader();
});
}
ConversationsAdapter.method('getConversationsFailCallBack', function(callBackData) {
getConversationsFailCallBack() {
this.hideLoader();
this.hideConversationLoader();
if (this.timer !== null) {
clearTimeout(this.timer);
this.timer = null;
clearTimeout(this.timer);
this.timer = null;
}
});
}
ConversationsAdapter.method('getObjectHTML', function(object) {
var t = this.getCustomTemplate(this.getTemplateName());
getObjectHTML(object) {
let t = this.getCustomTemplate(this.getTemplateName());
t = t.replace(new RegExp('#_id_#', 'g'), object.id);
t = t.replace(new RegExp('#_message_#', 'g'), object.message);
t = t.replace(new RegExp('#_employeeName_#', 'g'), object.employeeName);
t = t.replace(new RegExp('#_employeeImage_#', 'g'), object.employeeImage);
t = t.replace(new RegExp('#_date_#', 'g'), object.date);
if (object.attachment !== '' && object.attachment !== null && object.attachment !== undefined) {
var at = this.getCustomTemplate('attachment.html');
at = at.replace(new RegExp('#_attachment_#', 'g'), object.attachment);
at = at.replace(new RegExp('#_icon_#', 'g'), this.getIconByFileType(object.file.type));
at = at.replace(new RegExp('#_color_#', 'g'), this.getColorByFileType(object.file.type));
at = at.replace(new RegExp('#_name_#', 'g'), object.file.name);
at = at.replace(new RegExp('#_size_#', 'g'), object.file.size_text);
t = t.replace(new RegExp('#_attachment_#', 'g'), at);
if (object.attachment !== '' && object.attachment !== null && object.attachment !== undefined) {
let at = this.getCustomTemplate('attachment.html');
at = at.replace(new RegExp('#_attachment_#', 'g'), object.attachment);
at = at.replace(new RegExp('#_icon_#', 'g'), this.getIconByFileType(object.file.type));
at = at.replace(new RegExp('#_color_#', 'g'), this.getColorByFileType(object.file.type));
at = at.replace(new RegExp('#_name_#', 'g'), object.file.name);
at = at.replace(new RegExp('#_size_#', 'g'), object.file.size_text);
t = t.replace(new RegExp('#_attachment_#', 'g'), at);
} else {
t = t.replace(new RegExp('#_attachment_#', 'g'), '');
t = t.replace(new RegExp('#_attachment_#', 'g'), '');
}
return t;
}
});
ConversationsAdapter.method('setPageSize', function(pageSize) {
setPageSize(pageSize) {
this.pageSize = pageSize;
});
}
ConversationsAdapter.method('addDomEvents', function(object) {
// eslint-disable-next-line no-unused-vars
addDomEvents(object) {
});
}
ConversationsAdapter.method('getTemplateName', function() {
getTemplateName() {
return 'conversation.html';
});
}
ConversationsAdapter.method('renderObject', function(object, addToTop) {
renderObject(object, addToTop) {
const objDom = this.getObjectDom(object.id);
var objDom = this.getObjectDom(object.id);
var html = this.getObjectHTML(object);
var domObj = $(html);
const html = this.getObjectHTML(object);
const domObj = $(html);
if (objDom !== undefined && objDom !== null) {
objDom.replace(domObj);
if (objDom !== undefined && objDom !== null) {
objDom.replace(domObj);
} else if (addToTop) {
this.container.prepend(domObj);
$('#obj_'+object.id).css('background-color', '#FFF8DC');
$('#obj_'+object.id).fadeIn('slow');
$('#obj_'+object.id).animate({backgroundColor: '#FFF'}, 'slow');
this.container.prepend(domObj);
$(`#obj_${object.id}`).css('background-color', '#FFF8DC');
$(`#obj_${object.id}`).fadeIn('slow');
$(`#obj_${object.id}`).animate({ backgroundColor: '#FFF' }, 'slow');
} else {
this.container.append(domObj);
$('#obj_'+object.id).fadeIn('slow');
this.container.append(domObj);
$(`#obj_${object.id}`).fadeIn('slow');
}
if (domObj.find('.conversation-body').prop('scrollHeight') > 290) {
domObj.find('.conversation-expand').show();
domObj.find('.conversation-expand').show();
}
if (object.actionDelete === 1) {
domObj.find('.delete-button').show();
domObj.find('.delete-button').show();
}
this.addDomEvents(domObj);
});
}
ConversationsAdapter.method('setContainer', function(container) {
setContainer(container) {
this.container = container;
});
}
ConversationsAdapter.method('setLoadMoreButton', function(loadMoreButton) {
var that = this;
setLoadMoreButton(loadMoreButton) {
const that = this;
this.loadMoreButton = loadMoreButton;
this.loadMoreButton.off().on('click',function(){
that.loadMoreButton.attr('disabled','disabled');
that.loadMore([]);
}
);
});
this.loadMoreButton.off().on('click', () => {
that.loadMoreButton.attr('disabled', 'disabled');
that.loadMore([]);
});
}
ConversationsAdapter.method('showLoadError', function(msg) {
$("#"+this.getTableName()+"_error").html(msg);
$("#"+this.getTableName()+"_error").show();
});
showLoadError(msg) {
$(`#${this.getTableName()}_error`).html(msg);
$(`#${this.getTableName()}_error`).show();
}
ConversationsAdapter.method('hideLoadError', function() {
$("#"+this.getTableName()+"_error").hide();
});
hideLoadError() {
$(`#${this.getTableName()}_error`).hide();
}
ConversationsAdapter.method('setSearchBox', function(searchInput) {
var that = this;
setSearchBox(searchInput) {
const that = this;
this.searchInput = searchInput;
this.searchInput.off();
this.searchInput.keydown(function(event){
var val = $(this).val();
if ( event.which == 13 ) {
event.preventDefault();
that.search([]);
}else if(( event.which == 8 || event.which == 46) && val.length == 1 && that.searchTerm != ''){
that.search([]);
}
this.searchInput.keydown(function (event) {
const val = $(this).val();
if (event.which === 13) {
event.preventDefault();
that.search([]);
} else if ((event.which === 8 || event.which === 46) && val.length === 1 && that.searchTerm !== '') {
that.search([]);
}
});
});
}
ConversationsAdapter.method('getObjectDom', function(id) {
obj = this.container.find("#obj_"+id);
if(obj.length){
return obj;
getObjectDom(id) {
const obj = this.container.find(`#obj_${id}`);
if (obj.length) {
return obj;
}
return null;
});
}
ConversationsAdapter.method('loadMore', function(callBackData) {
if(!this.hasMoreData){
return;
loadMore(callBackData) {
if (!this.hasMoreData) {
return;
}
this.currentPage++;
this.get(callBackData, true);
});
}
ConversationsAdapter.method('get', function(callBackData, loadMore) {
var that = this;
get(callBackData, loadMore) {
const that = this;
this.hideLoadError();
if(!loadMore){
this.currentPage = 1;
if(this.container != null){
this.container.html('');
}
this.hasMoreData = true;
this.tableData = [];
if (!loadMore) {
this.currentPage = 1;
if (this.container != null) {
this.container.html('');
}
this.hasMoreData = true;
this.tableData = [];
}
this.start = (this.currentPage === 1) ? 0 : this.bottomLimit;
this.container = $("#"+this.getTableName()).find('.objectList');
this.container = $(`#${this.getTableName()}`).find('.objectList');
that.showLoader();
this.getConversations(this.start, this.pageSize, false);
if (this.timer === null && that.getTimeout() > 0) {
this.timeoutDelay = 0;
this.timer = setTimeout(function tick() {
that.getConversations(that.topLimit, that.pageSize, true);
that.timeoutDelay += that.getTimeout();
if (that.topLimitUpdated) {
that.timeoutDelay = 0;
}
that.timer = setTimeout(tick, that.getTimeout() + that.timeoutDelay);
}, that.getTimeout() + that.timeoutDelay);
this.timeoutDelay = 0;
this.timer = setTimeout(function tick() {
that.getConversations(that.topLimit, that.pageSize, true);
that.timeoutDelay += that.getTimeout();
if (that.topLimitUpdated) {
that.timeoutDelay = 0;
}
that.timer = setTimeout(tick, that.getTimeout() + that.timeoutDelay);
}, that.getTimeout() + that.timeoutDelay);
}
}
});
ConversationsAdapter.method('getTimeout', function() {
getTimeout() {
return 0;
});
}
ConversationsAdapter.method('getTimeoutUpper', function() {
getTimeoutUpper() {
return 0;
});
}
ConversationsAdapter.method('showConversationLoader', function() {
//Do nothing
});
showConversationLoader() {
// Do nothing
}
ConversationsAdapter.method('hideConversationLoader', function() {
//Do nothing
});
hideConversationLoader() {
// Do nothing
}
ConversationsAdapter.method('search', function(callBackData) {
this.searchTerm = $("#"+this.getTableName()+"_search").val();
search(callBackData) {
this.searchTerm = $(`#${this.getTableName()}_search`).val();
this.get(callBackData);
}
}
});
export default ConversationsAdapter;

View File

@@ -1,280 +1,246 @@
/*
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)
Copyright (c) 2018 [Glacies UG, Berlin, Germany] (http://glacies.de)
Developer: Thilina Hasantha (http://lk.linkedin.com/in/thilinah | https://github.com/thilinah)
*/
/* global tinyMCE */
const ValidationRules = {
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;
}
float(str) {
const floatstr = /^[-+]?[0-9]+(\.[0-9]+)?$/;
if (str != null && str.match(floatstr)) {
return true;
}
return false;
},
number(str) {
const numstr = /^[0-9]+$/;
if (str != null && str.match(numstr)) {
return true;
}
return false;
},
numberOrEmpty(str) {
if (str === '') {
return true;
}
const numstr = /^[0-9]+$/;
if (str != null && str.match(numstr)) {
return true;
}
return false;
},
email(str) {
const emailPattern = /^\s*[\w\-+_]+(\.[\w\-+_]+)*@[\w\-+_]+\.[\w\-+_]+(\.[\w\-+_]+)*\s*$/;
return str != null && emailPattern.test(str);
},
emailOrEmpty(str) {
if (str === '') {
return true;
}
const emailPattern = /^\s*[\w\-+_]+(\.[\w\-+_]+)*@[\w\-+_]+\.[\w\-+_]+(\.[\w\-+_]+)*\s*$/;
return str != null && emailPattern.test(str);
},
username(str) {
const username = /^[a-zA-Z0-9.-]+$/;
return str != null && username.test(str);
},
input(str) {
if (str != null && str.length > 0) {
return true;
}
return false;
},
};
function FormValidation(formId,validateAll,options) {
class FormValidation {
constructor(formId, validateAll, options) {
this.tempOptions = {};
this.formId = formId;
this.formError = false;
this.formId = formId;
this.formError = false;
this.formObject = null;
this.errorMessages = "";
this.errorMessages = '';
this.popupDialog = null;
this.validateAll = validateAll;
this.errorMap = new Array();
this.errorMap = [];
this.settings = {"thirdPartyPopup":null,"LabelErrorClass":false, "ShowPopup":true};
this.settings = { thirdPartyPopup: null, LabelErrorClass: false, ShowPopup: true };
this.settings = jQuery.extend(this.settings,options);
this.settings = jQuery.extend(this.settings, options);
this.inputTypes = new Array( "text", "radio", "checkbox", "file", "password", "select-one","select-multi", "textarea","fileupload" ,"signature");
this.inputTypes = ['text', 'radio', 'checkbox', 'file', 'password', 'select-one', 'select-multi', 'textarea', 'fileupload', 'signature'];
this.validator = ValidationRules;
}
}
// eslint-disable-next-line no-unused-vars
clearError(formInput, overrideMessage) {
const id = formInput.attr('id');
$(`#${this.formId} #field_${id}`).removeClass('error');
$(`#${this.formId} #help_${id}`).html('');
}
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) {
// eslint-disable-next-line no-unused-vars
addError(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")] = "";
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");
}
const id = formInput.attr('id');
const validation = formInput.attr('validation');
const 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');
}
}
showErrors() {
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('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) {
checkValues(options) {
this.tempOptions = options;
var that = this;
const 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");
this.errorMessages = '';
this.formObject = {};
// eslint-disable-next-line consistent-return
const validate = function (inputObject) {
let inputValue = null;
const name = inputObject.attr('name');
if (that.settings.LabelErrorClass !== false) {
$(`label[for='${name}']`).removeClass(that.settings.LabelErrorClass);
}
const id = inputObject.attr('id');
const type = inputObject.attr('type');
if(inputObject.hasClass('select2-focusser') || inputObject.hasClass('select2-input')){
return true;
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 (type === 'radio' || type === 'checkbox') {
inputValue = $(`input[name='${name}']:checked`).val();
} else if (inputObject.hasClass('select2Field')) {
if ($(`#${that.formId} #${id}`).select2('data') != null && $(`#${that.formId} #${id}`).select2('data') !== undefined) {
inputValue = $(`#${that.formId} #${id}`).select2('data').id;
} else {
inputValue = '';
}
} else if (inputObject.hasClass('select2Multi')) {
if ($(`#${that.formId} #${id}`).select2('data') != null && $(`#${that.formId} #${id}`).select2('data') !== undefined) {
const inputValueObjects = $(`#${that.formId} #${id}`).select2('data');
inputValue = [];
for (let i = 0; i < inputValueObjects.length; i++) {
inputValue.push(inputValueObjects[i].id);
}
inputValue = JSON.stringify(inputValue);
} else {
inputValue = '';
}
} else if (inputObject.hasClass('signatureField')) {
if ($(`#${that.formId} #${id}`).data('signaturePad').isEmpty()) {
inputValue = '';
} else {
inputValue = $(`#${id}`).data('signaturePad').toDataURL();
}
} else if (inputObject.hasClass('simplemde')) {
inputValue = $(`#${that.formId} #${id}`).data('simplemde').value();
} else if (inputObject.hasClass('tinymce')) {
inputValue = tinyMCE.get(id).getContent({ format: 'raw' });
} else {
inputValue = inputObject.val();
}
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();
const validation = inputObject.attr('validation');
let valid = false;
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);
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[id] = inputValue;
}
if (!valid) {
that.addError(inputObject, null);
} else {
that.clearError(inputObject, null);
that.formObject[id] = inputValue;
}
}
};
var inputs = $('#'+ this.formId + " :input");
inputs.each(function() {
var that = $(this);
validate(that);
let inputs = $(`#${this.formId} :input`);
inputs.each(function () {
validate($(this));
});
inputs = $('#'+ this.formId + " .uploadInput");
inputs.each(function() {
var that = $(this);
validate(that);
inputs = $(`#${this.formId} .uploadInput`);
inputs.each(function () {
validate($(this));
});
this.showErrors();
this.tempOptions = {};
return !this.formError;
});
}
FormValidation.method('getFormParameters' , function() {
getFormParameters() {
return this.formObject;
});
}
FormValidation.method('alert', function (title,text,top) {
alert(title, text) {
alert(text);
});
}
static getValidationRules() {
return ValidationRules;
}
}
export default FormValidation;

View File

@@ -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;
});

View File

@@ -1,47 +1,49 @@
function SocialShare(){
};
/* eslint-disable no-restricted-globals */
/*
Copyright (c) 2018 [Glacies UG, Berlin, Germany] (http://glacies.de)
Developer: Thilina Hasantha (http://lk.linkedin.com/in/thilinah | https://github.com/thilinah)
*/
const SocialShare = {
facebook: (url) => {
const w = 700;
const h = 500;
const left = (screen.width / 2) - (w / 2);
const top = (screen.height / 2) - (h / 2);
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);
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);
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);
google: (url) => {
const w = 500;
const h = 500;
const left = (screen.width / 2) - (w / 2);
const top = (screen.height / 2) - (h / 2);
window.open(url, "Share on Google", "width="+w+",height="+h+",left="+left+",top="+top);
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);
linkedin: (url) => {
const w = 500;
const h = 500;
const left = (screen.width / 2) - (w / 2);
const top = (screen.height / 2) - (h / 2);
window.open(url, "Share on Linked in", "width="+w+",height="+h+",left="+left+",top="+top);
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;
},
twitter(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;
},
};
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;
};
export default SocialShare;

View File

@@ -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){}
});
});

View File

@@ -1,31 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="flag-icon-css-ar" width="640" height="480">
<path fill="#74acdf" d="M0 0h640v480H0z"/>
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icon-css-ae" width="640" height="480">
<path fill="#00732f" d="M0 0h640v160H0z"/>
<path fill="#fff" d="M0 160h640v160H0z"/>
<g id="c" transform="translate(-64) scale(.96)">
<path id="a" fill="#f6b40e" stroke="#85340a" stroke-width="1.1" d="M396.8 251.3l28.5 62s.5 1.2 1.3.9c.8-.4.3-1.5.3-1.5l-23.7-64m-.7 24.1c-.4 9.4 5.4 14.6 4.7 23-.8 8.5 3.8 13.2 5 16.5 1 3.3-1.3 5.2-.3 5.7s3-2.1 2.4-6.8c-.7-4.6-4.2-6-3.4-16.3.8-10.3-4.2-12.7-3-22"/>
<use width="100%" height="100%" transform="rotate(22.5 400 250)" xlink:href="#a"/>
<use width="100%" height="100%" transform="rotate(45 400 250)" xlink:href="#a"/>
<use width="100%" height="100%" transform="rotate(67.5 400 250)" xlink:href="#a"/>
<path id="b" fill="#85340a" d="M404.3 274.4c.5 9 5.6 13 4.6 21.3 2.2-6.5-3.1-11.6-2.8-21.2m-7.7-23.8l19.5 42.6-16.3-43.9"/>
<use width="100%" height="100%" transform="rotate(22.5 400 250)" xlink:href="#b"/>
<use width="100%" height="100%" transform="rotate(45 400 250)" xlink:href="#b"/>
<use width="100%" height="100%" transform="rotate(67.5 400 250)" xlink:href="#b"/>
</g>
<use width="100%" height="100%" transform="rotate(90 320 240)" xlink:href="#c"/>
<use width="100%" height="100%" transform="rotate(180 320 240)" xlink:href="#c"/>
<use width="100%" height="100%" transform="rotate(-90 320 240)" xlink:href="#c"/>
<circle cx="320" cy="240" r="26.7" fill="#f6b40e" stroke="#85340a" stroke-width="1.4"/>
<path id="h" fill="#843511" d="M329.1 234.3c-1.8 0-3.6.8-4.6 2.4 2 1.9 6.6 2 9.7-.2a7 7 0 0 0-5.1-2.2zm0 .4c1.7 0 3.4.8 3.6 1.6-2 2.3-5.3 2-7.4.4a4.3 4.3 0 0 1 3.8-2z"/>
<use width="100%" height="100%" transform="matrix(-1 0 0 1 640.2 0)" xlink:href="#d"/>
<use width="100%" height="100%" transform="matrix(-1 0 0 1 640.2 0)" xlink:href="#e"/>
<use width="100%" height="100%" transform="translate(18.1)" xlink:href="#f"/>
<use width="100%" height="100%" transform="matrix(-1 0 0 1 640.2 0)" xlink:href="#g"/>
<path fill="#85340a" d="M316 243.7a1.9 1.9 0 1 0 1.8 2.9 4 4 0 0 0 2.2.6h.2a3.9 3.9 0 0 0 2.3-.6 1.9 1.9 0 1 0 1.8-3c.5.3.8.7.8 1.3 0 .6-.5 1.2-1.2 1.2a1.2 1.2 0 0 1-1.2-1.2 3 3 0 0 1-2.6 1.7 3 3 0 0 1-2.5-1.7 1.2 1.2 0 0 1-1.3 1.2c-.6 0-1.2-.6-1.2-1.2s.3-1 .8-1.2zm2 5.5c-2.1 0-3 1.8-4.8 3 1-.4 1.9-1.2 3.3-2s2.7.2 3.5.2c.8 0 2-1 3.5-.2 1.4.8 2.3 1.6 3.3 2-1.9-1.2-2.7-3-4.8-3a5.5 5.5 0 0 0-2 .6 5.5 5.5 0 0 0-2-.7z"/>
<path fill="#85340a" d="M317.2 251.6c-.8 0-1.8.2-3.4.6 3.7-.8 4.5.5 6.2.5 1.6 0 2.4-1.3 6.1-.5-4-1.2-4.9-.4-6.1-.4-.8 0-1.4-.3-2.8-.2z"/>
<path fill="#85340a" d="M314 252.2h-.8c4.3.5 2.3 3 6.8 3s2.5-2.5 6.8-3c-4.5-.4-3.1 2.3-6.8 2.3-3.5 0-2.4-2.3-6-2.3zm9.7 6.7a3.7 3.7 0 0 0-7.4 0 3.8 3.8 0 0 1 7.4 0z"/>
<path id="e" fill="#85340a" d="M303.4 234.3c4.7-4.1 10.7-4.8 14-1.7a8 8 0 0 1 1.5 3.5c.4 2.3-.3 4.8-2.1 7.4l.8.4a14.6 14.6 0 0 0 1.6-9.4 13.3 13.3 0 0 0-.6-2.3c-4.5-3.7-10.7-4-15.2 2z"/>
<path id="d" fill="#85340a" d="M310.8 233c2.7 0 3.3.7 4.5 1.7 1.2 1 1.9.8 2 1 .3.2 0 .8-.3.6-.5-.2-1.3-.6-2.5-1.6s-2.5-1-3.7-1c-3.7 0-5.7 3-6.2 2.8-.3-.2 2.1-3.5 6.2-3.5z"/>
<use width="100%" height="100%" transform="translate(-18.4)" xlink:href="#h"/>
<circle id="f" cx="310.9" cy="236.3" r="1.9" fill="#85340a"/>
<path id="g" fill="#85340a" d="M305.9 237.5c3.5 2.7 7 2.5 9 1.3 2-1.3 2-1.7 1.6-1.7-.4 0-.8.4-2.4 1.3-1.7.8-4.1.8-8.2-.9z"/>
<path d="M0 320h640v160H0z"/>
<path fill="red" d="M0 0h220v480H0z"/>
</svg>

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 257 B

View File

@@ -840,4 +840,4 @@ table.dataTable{
.conversation-save-post {
padding: 1px 10px;
margin-bottom: 15px;
}
}

View File

@@ -1,184 +0,0 @@
var uploadId="";
var uploadAttr="";
var popupUpload = null;
function showUploadDialog(id,msg,group,user,postUploadId,postUploadAttr,postUploadResultAttr,fileType){
var ts = Math.round((new Date()).getTime() / 1000);
uploadId = postUploadId;
uploadAttr = postUploadAttr;
uploadResultAttr = postUploadResultAttr;
var html='<div><iframe src="'+CLIENT_BASE_URL+'fileupload_page.php?id=_id_&msg=_msg_&file_group=_file_group_&file_type=_file_type_&user=_user_" frameborder="0" scrolling="no" width="300px" height="55px"></iframe></div>';
var html = html.replace(/_id_/g,id);
var html = html.replace(/_msg_/g,msg);
var html = html.replace(/_file_group_/g,group);
var html = html.replace(/_user_/g,user);
var html = html.replace(/_file_type_/g,fileType);
modJs.renderModel('upload',"Upload File",html);
$('#uploadModel').modal('show');
}
function closeUploadDialog(success,error,data){
var arr = data.split("|");
var file = arr[0];
var fileBaseName = arr[1];
var fileId = arr[2];
if(success == 1){
//popupUpload.close();
$('#uploadModel').modal('hide');
if(uploadResultAttr == "url"){
if(uploadAttr == "val"){
$('#'+uploadId).val(file);
}else if(uploadAttr == "html"){
$('#'+uploadId).html(file);
}else{
$('#'+uploadId).attr(uploadAttr,file);
}
}else if(uploadResultAttr == "name"){
if(uploadAttr == "val"){
$('#'+uploadId).val(fileBaseName);
}else if(uploadAttr == "html"){
$('#'+uploadId).html(fileBaseName);
$('#'+uploadId).attr("val",fileBaseName);
}else{
$('#'+uploadId).attr(uploadAttr,fileBaseName);
}
$('#'+uploadId).show();
$('#'+uploadId+"_download").show();
$('#'+uploadId+"_remove").show();
}else if(uploadResultAttr == "id"){
if(uploadAttr == "val"){
$('#'+uploadId).attr(uploadAttr,fileId);
}else if(uploadAttr == "html"){
$('#'+uploadId).html(fileBaseName);
$('#'+uploadId).attr("val",fileId);
}else{
$('#'+uploadId).attr(uploadAttr,fileId);
}
$('#'+uploadId).show();
$('#'+uploadId+"_download").show();
$('#'+uploadId+"_remove").show();
}
}else{
//popupUpload.close();
$('#uploadModel').modal('hide');
}
}
function download(name, closeCallback, closeCallbackData){
var successCallback = function(data){
var link;
var fileParts;
var viewableImages = ["png","jpg","gif","bmp","jpge"];
var viewableFiles = ["pdf","xml"];
$('.modal').modal('hide');
if(data['filename'].indexOf("https:") == 0 || data['filename'].indexOf("http:") == 0){
fileParts = data['filename'].split("?");
fileParts = fileParts[0].split(".");
if(jQuery.inArray(fileParts[fileParts.length - 1], viewableFiles ) >= 0) {
var win = window.open(data['filename'], '_blank');
win.focus();
}else{
link = '<a href="'+data['filename']+'" target="_blank">Download File <i class="icon-download-alt"></i> </a>';
if(jQuery.inArray(fileParts[fileParts.length - 1], viewableImages ) >= 0) {
link += '<br/><br/><img style="max-width:545px;max-height:350px;" src="'+data['filename']+'"/>';
}
modJs.showMessage("Download File Attachment",link,closeCallback,closeCallbackData);
}
}else{
fileParts = data['filename'].split(".");
link = '<a href="'+modJs.getCustomActionUrl("download",{'file':data['filename']})+'" target="_blank">Download File <i class="icon-download-alt"></i> </a>';
if(jQuery.inArray(fileParts[fileParts.length - 1], viewableImages ) >= 0) {
link += '<br/><br/><img style="max-width:545px;max-height:350px;" src="'+modJs.getClientDataUrl()+data['filename']+'"/>';
}
modJs.showMessage("Download File Attachment",link,closeCallback,closeCallbackData);
}
};
var failCallback = function(data){
modJs.showMessage("Error Downloading File","File not found");
};
modJs.sendCustomRequest("file",{'name':name},successCallback,failCallback);
}
function randomString(length){
var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz'.split('');
if (! length) {
length = Math.floor(Math.random() * chars.length);
}
var str = '';
for (var i = 0; i < length; i++) {
str += chars[Math.floor(Math.random() * chars.length)];
}
return str;
}
function verifyInstance(key){
var object = {};
object['a'] = "verifyInstance";
object['key'] = key;
$.post(this.baseUrl, object, function(data) {
if(data.status == "SUCCESS"){
$("#verifyModel").hide();
$('body').removeClass('modal-open');
$('.modal-backdrop').remove();
alert("Success: Instance Verified");
}else{
alert("Error: "+data.message);
}
},"json");
}
function nl2br(str, is_xhtml) {
// discuss at: http://phpjs.org/functions/nl2br/
// original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// improved by: Philip Peterson
// improved by: Onno Marsman
// improved by: Atli <20><>r
// improved by: Brett Zamir (http://brett-zamir.me)
// improved by: Maximusya
// bugfixed by: Onno Marsman
// bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// input by: Brett Zamir (http://brett-zamir.me)
// example 1: nl2br('Kevin\nvan\nZonneveld');
// returns 1: 'Kevin<br />\nvan<br />\nZonneveld'
// example 2: nl2br("\nOne\nTwo\n\nThree\n", false);
// returns 2: '<br>\nOne<br>\nTwo<br>\n<br>\nThree<br>\n'
// example 3: nl2br("\nOne\nTwo\n\nThree\n", true);
// returns 3: '<br />\nOne<br />\nTwo<br />\n<br />\nThree<br />\n'
var breakTag = (is_xhtml || typeof is_xhtml === 'undefined') ? '<br ' + '/>' : '<br>'; // Adjust comment to avoid issue on phpjs.org display
return (str + '')
.replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1' + breakTag + '$2');
}
function updateLanguage(language) {
var object = {};
object['a'] = "updateLanguage";
object['language'] = language;
$.post(this.baseUrl, object, function(data) {
if(data.status == "SUCCESS"){
location.reload();
} else {
alert("Error occurred while changing language");
}
},"json");
}

View File

@@ -13,7 +13,7 @@
width: 100px;
height: 100px;
cursor: crosshair;
background-image: url("../img/bootstrap-colorpicker/saturation.png");
background-image: url("img/bootstrap-colorpicker/saturation.png");
}
.colorpicker-saturation i {
@@ -64,12 +64,12 @@
}
.colorpicker-hue {
background-image: url("../img/bootstrap-colorpicker/hue.png");
background-image: url("img/bootstrap-colorpicker/hue.png");
}
.colorpicker-alpha {
display: none;
background-image: url("../img/bootstrap-colorpicker/alpha.png");
background-image: url("img/bootstrap-colorpicker/alpha.png");
}
.colorpicker {
@@ -135,7 +135,7 @@
height: 10px;
margin-top: 5px;
clear: both;
background-image: url("../img/bootstrap-colorpicker/alpha.png");
background-image: url("img/bootstrap-colorpicker/alpha.png");
background-position: 0 100%;
}
@@ -197,11 +197,11 @@
}
.colorpicker.colorpicker-horizontal .colorpicker-hue {
background-image: url("../img/bootstrap-colorpicker/hue-horizontal.png");
background-image: url("img/bootstrap-colorpicker/hue-horizontal.png");
}
.colorpicker.colorpicker-horizontal .colorpicker-alpha {
background-image: url("../img/bootstrap-colorpicker/alpha-horizontal.png");
background-image: url("img/bootstrap-colorpicker/alpha-horizontal.png");
}
.colorpicker.colorpicker-hidden {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

View File

@@ -1,3 +0,0 @@
/* Downloadify 0.2 (c) 2009 by Douglas Neiner. Licensed under the MIT license */
/* See http://github.com/dcneiner/Downloadify for license and more info */
(function(){Downloadify=window.Downloadify={queue:{},uid:new Date().getTime(),getTextForSave:function(a){var b=Downloadify.queue[a];if(b)return b.getData();return""},getFileNameForSave:function(a){var b=Downloadify.queue[a];if(b)return b.getFilename();return""},getDataTypeForSave:function(a){var b=Downloadify.queue[a];if(b)return b.getDataType();return""},saveComplete:function(a){var b=Downloadify.queue[a];if(b)b.complete();return true},saveCancel:function(a){var b=Downloadify.queue[a];if(b)b.cancel();return true},saveError:function(a){var b=Downloadify.queue[a];if(b)b.error();return true},addToQueue:function(a){Downloadify.queue[a.queue_name]=a},getUID:function(a){if(a.id=="")a.id='downloadify_'+Downloadify.uid++;return a.id}};Downloadify.create=function(a,b){var c=(typeof(a)=="string"?document.getElementById(a):a);return new Downloadify.Container(c,b)};Downloadify.Container=function(d,e){var f=this;f.el=d;f.enabled=true;f.dataCallback=null;f.filenameCallback=null;f.data=null;f.filename=null;var g=function(){f.options=e;if(!f.options.append)f.el.innerHTML="";f.flashContainer=document.createElement('span');f.el.appendChild(f.flashContainer);f.queue_name=Downloadify.getUID(f.flashContainer);if(typeof(f.options.filename)==="function")f.filenameCallback=f.options.filename;else if(f.options.filename)f.filename=f.options.filename;if(typeof(f.options.data)==="function")f.dataCallback=f.options.data;else if(f.options.data)f.data=f.options.data;var a={queue_name:f.queue_name,width:f.options.width,height:f.options.height};var b={allowScriptAccess:'always'};var c={id:f.flashContainer.id,name:f.flashContainer.id};if(f.options.enabled===false)f.enabled=false;if(f.options.transparent===true)b.wmode="transparent";if(f.options.downloadImage)a.downloadImage=f.options.downloadImage;swfobject.embedSWF(f.options.swf,f.flashContainer.id,f.options.width,f.options.height,"10",null,a,b,c);Downloadify.addToQueue(f)};f.enable=function(){var a=document.getElementById(f.flashContainer.id);a.setEnabled(true);f.enabled=true};f.disable=function(){var a=document.getElementById(f.flashContainer.id);a.setEnabled(false);f.enabled=false};f.getData=function(){if(!f.enabled)return"";if(f.dataCallback)return f.dataCallback();else if(f.data)return f.data;else return""};f.getFilename=function(){if(f.filenameCallback)return f.filenameCallback();else if(f.filename)return f.filename;else return""};f.getDataType=function(){if(f.options.dataType)return f.options.dataType;return"string"};f.complete=function(){if(typeof(f.options.onComplete)==="function")f.options.onComplete()};f.cancel=function(){if(typeof(f.options.onCancel)==="function")f.options.onCancel()};f.error=function(){if(typeof(f.options.onError)==="function")f.options.onError()};g()};Downloadify.defaultOptions={swf:'media/downloadify.swf',downloadImage:'images/download.png',width:100,height:30,transparent:true,append:false,dataType:"string"}})();if(typeof(jQuery)!="undefined"){(function($){$.fn.downloadify=function(b){return this.each(function(){b=$.extend({},Downloadify.defaultOptions,b);var a=Downloadify.create(this,b);$(this).data('Downloadify',a)})}})(jQuery)};if(typeof(MooTools)!='undefined'){Element.implement({downloadify:function(a){a=$merge(Downloadify.defaultOptions,a);return this.store('Downloadify',Downloadify.create(this,a))}})};

File diff suppressed because one or more lines are too long

View File

@@ -105,7 +105,7 @@ html[dir="rtl"] .select2-container .select2-choice > .select2-chosen {
text-decoration: none;
border: 0;
background: url('select2.png') right top no-repeat;
background: url(' img/select2/select2.png') right top no-repeat;
cursor: pointer;
outline: 0;
}
@@ -218,7 +218,7 @@ html[dir="rtl"] .select2-container .select2-choice .select2-arrow {
display: block;
width: 100%;
height: 100%;
background: url('select2.png') no-repeat 0 1px;
background: url(' img/select2/select2.png') no-repeat 0 1px;
}
html[dir="rtl"] .select2-container .select2-choice .select2-arrow b {
@@ -256,21 +256,21 @@ html[dir="rtl"] .select2-container .select2-choice .select2-arrow b {
-webkit-box-shadow: none;
box-shadow: none;
background: #fff url('select2.png') no-repeat 100% -22px;
background: url('select2.png') no-repeat 100% -22px, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee));
background: url('select2.png') no-repeat 100% -22px, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%);
background: url('select2.png') no-repeat 100% -22px, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%);
background: url('select2.png') no-repeat 100% -22px, linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0;
background: #fff url(' img/select2/select2.png') no-repeat 100% -22px;
background: url(' img/select2/select2.png') no-repeat 100% -22px, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee));
background: url(' img/select2/select2.png') no-repeat 100% -22px, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%);
background: url(' img/select2/select2.png') no-repeat 100% -22px, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%);
background: url(' img/select2/select2.png') no-repeat 100% -22px, linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0;
}
html[dir="rtl"] .select2-search input {
padding: 4px 5px 4px 20px;
background: #fff url('select2.png') no-repeat -37px -22px;
background: url('select2.png') no-repeat -37px -22px, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee));
background: url('select2.png') no-repeat -37px -22px, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%);
background: url('select2.png') no-repeat -37px -22px, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%);
background: url('select2.png') no-repeat -37px -22px, linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0;
background: #fff url(' img/select2/select2.png') no-repeat -37px -22px;
background: url(' img/select2/select2.png') no-repeat -37px -22px, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee));
background: url(' img/select2/select2.png') no-repeat -37px -22px, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%);
background: url(' img/select2/select2.png') no-repeat -37px -22px, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%);
background: url(' img/select2/select2.png') no-repeat -37px -22px, linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0;
}
.select2-drop.select2-drop-above .select2-search input {
@@ -278,11 +278,11 @@ html[dir="rtl"] .select2-search input {
}
.select2-search input.select2-active {
background: #fff url('select2-spinner.gif') no-repeat 100%;
background: url('select2-spinner.gif') no-repeat 100%, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee));
background: url('select2-spinner.gif') no-repeat 100%, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%);
background: url('select2-spinner.gif') no-repeat 100%, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%);
background: url('select2-spinner.gif') no-repeat 100%, linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0;
background: #fff url(' img/select2/select2-spinner.gif') no-repeat 100%;
background: url(' img/select2/select2-spinner.gif') no-repeat 100%, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee));
background: url(' img/select2/select2-spinner.gif') no-repeat 100%, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%);
background: url(' img/select2/select2-spinner.gif') no-repeat 100%, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%);
background: url(' img/select2/select2-spinner.gif') no-repeat 100%, linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0;
}
.select2-container-active .select2-choice,
@@ -451,7 +451,7 @@ disabled look for disabled choices in the results dropdown
}
.select2-more-results.select2-active {
background: #f4f4f4 url('select2-spinner.gif') no-repeat 100%;
background: #f4f4f4 url(' img/select2/select2-spinner.gif') no-repeat 100%;
}
.select2-results .select2-ajax-error {
@@ -551,7 +551,7 @@ html[dir="rtl"] .select2-container-multi .select2-choices li
}
.select2-container-multi .select2-choices .select2-search-field input.select2-active {
background: #fff url('select2-spinner.gif') no-repeat 100% !important;
background: #fff url(' img/select2/select2-spinner.gif') no-repeat 100% !important;
}
.select2-default {
@@ -610,7 +610,7 @@ html[dir="rtl"] .select2-container-multi .select2-choices .select2-search-choice
font-size: 1px;
outline: none;
background: url('select2.png') right top no-repeat;
background: url(' img/select2/select2.png') right top no-repeat;
}
html[dir="rtl"] .select2-search-choice-close {
right: auto;
@@ -693,7 +693,7 @@ html[dir="rtl"] .select2-container-multi .select2-search-choice-close {
.select2-search-choice-close,
.select2-container .select2-choice abbr,
.select2-container .select2-choice .select2-arrow b {
background-image: url('select2x2.png') !important;
background-image: url('img/select2/select2x2.png') !important;
background-repeat: no-repeat !important;
background-size: 60px 40px !important;
}

View File

@@ -1,513 +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.punch = null;
this.useServerTime = 0;
this.photoTaken = 0;
this.photoAttendance = 0;
}
AttendanceAdapter.inherits(AdapterBase);
AttendanceAdapter.method('updatePunchButton', function() {
this.getPunch('changePunchButtonSuccessCallBack');
});
AttendanceAdapter.method('setUseServerTime', function(val) {
this.useServerTime = val;
});
AttendanceAdapter.method('setPhotoAttendance', function(val) {
this.photoAttendance = val;
});
AttendanceAdapter.method('getDataMapping', function() {
return [
"id",
"in_time",
"out_time",
"note"
];
});
AttendanceAdapter.method('getHeaders', function() {
return [
{ "sTitle": "ID" ,"bVisible":false},
{ "sTitle": "Time-In" },
{ "sTitle": "Time-Out"},
{ "sTitle": "Note"}
];
});
AttendanceAdapter.method('getFormFields', function() {
if(this.useServerTime == 0){
return [
[ "id", {"label":"ID","type":"hidden"}],
[ "time", {"label":"Time","type":"datetime"}],
[ "note", {"label":"Note","type":"textarea","validation":"none"}]
];
}else{
return [
[ "id", {"label":"ID","type":"hidden"}],
[ "note", {"label":"Note","type":"textarea","validation":"none"}]
];
}
});
AttendanceAdapter.method('getCustomTableParams', function() {
var that = this;
var dataTableParams = {
"aoColumnDefs": [
{
"fnRender": function(data, cell){
return that.preProcessRemoteTableData(data, cell, 1)
} ,
"aTargets": [1]
},
{
"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": that.getActionButtons,
"aTargets": [that.getDataMapping().length]
}
]
};
return dataTableParams;
});
AttendanceAdapter.method('preProcessRemoteTableData', function(data, cell, id) {
if(id == 1){
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 == 2){
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 == 3){
if(cell != undefined && cell != null){
if(cell.length > 20){
return cell.substring(0,20)+"..";
}
}
return cell;
}
});
AttendanceAdapter.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><img class="tableActionButton" src="_BASE_images/download.png" style="margin-left:15px;cursor:pointer;" rel="tooltip" title="Download Document" onclick="download(\'_attachment_\');return false;"></img><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></div>';
html = html.replace(/_id_/g,id);
html = html.replace(/_attachment_/g,data[5]);
html = html.replace(/_BASE_/g,this.baseUrl);
return html;
*/
return "";
});
AttendanceAdapter.method('getTableTopButtonHtml', function() {
if(this.punch == null || this.punch == undefined){
return '<button id="punchButton" style="float:right;" onclick="modJs.showPunchDialog();return false;" class="btn btn-small">Punch-in <span class="icon-time"></span></button>';
}else{
return '<button id="punchButton" style="float:right;" onclick="modJs.showPunchDialog();return false;" class="btn btn-small">Punch-out <span class="icon-time"></span></button>';
}
});
AttendanceAdapter.method('save', function() {
var that = this;
var validator = new FormValidation(this.getTableName()+"_submit",true,{'ShowPopup':false,"LabelErrorClass":"error"});
if(validator.checkValues()){
var msg = this.doCustomValidation(params);
if(msg == null){
var params = validator.getFormParameters();
params = this.forceInjectValuesBeforeSave(params);
params['cdate'] = this.getClientDate(new Date()).toISOString().slice(0, 19).replace('T', ' ');
var reqJson = JSON.stringify(params);
var callBackData = [];
callBackData['callBackData'] = [];
callBackData['callBackSuccess'] = 'saveSuccessCallback';
callBackData['callBackFail'] = 'getPunchFailCallBack';
this.customAction('savePunch','modules=attendance',reqJson,callBackData, true);
}else{
$("#"+this.getTableName()+'Form .label').html(msg);
$("#"+this.getTableName()+'Form .label').show();
}
}
});
AttendanceAdapter.method('saveSuccessCallback', function(callBackData) {
this.punch = callBackData;
this.getPunch('changePunchButtonSuccessCallBack');
$('#PunchModel').modal('hide');
this.get([]);
});
AttendanceAdapter.method('cancel', function() {
$('#PunchModel').modal('hide');
});
AttendanceAdapter.method('showPunchDialog', function() {
this.getPunch('showPunchDialogShowPunchSuccessCallBack');
});
AttendanceAdapter.method('getPunch', function(successCallBack) {
var that = this;
var object = {};
object['date'] = this.getClientDate(new Date()).toISOString().slice(0, 19).replace('T', ' ');
object['offset'] = this.getClientGMTOffset();
var reqJson = JSON.stringify(object);
var callBackData = [];
callBackData['callBackData'] = [];
callBackData['callBackSuccess'] = successCallBack;
callBackData['callBackFail'] = 'getPunchFailCallBack';
this.customAction('getPunch','modules=attendance',reqJson,callBackData);
});
AttendanceAdapter.method('postRenderForm', function(object, $tempDomObj) {
$("#Attendance").show();
});
AttendanceAdapter.method('showPunchDialogShowPunchSuccessCallBack', function(callBackData) {
this.punch = callBackData;
$('#PunchModel').modal('show');
if(this.punch == null){
$('#PunchModel').find("h3").html("Punch Time-in");
modJs.renderForm();
}else{
$('#PunchModel').find("h3").html("Punch Time-out");
modJs.renderForm(this.punch);
}
$('#Attendance').show();
var picker = $('#time_datetime').data('datetimepicker');
picker.setLocalDate(new Date());
});
AttendanceAdapter.method('changePunchButtonSuccessCallBack', function(callBackData) {
this.punch = callBackData;
if(this.punch == null){
$("#punchButton").html('Punch-in <span class="icon-time"></span>');
}else{
$("#punchButton").html('Punch-out <span class="icon-time"></span>');
}
});
AttendanceAdapter.method('getPunchFailCallBack', function(callBackData) {
this.showMessage("Error Occured while Time Punch", callBackData);
});
AttendanceAdapter.method('getClientDate', function (date) {
var offset = this.getClientGMTOffset();
var tzDate = date.addMinutes(offset*60);
return tzDate;
});
AttendanceAdapter.method('getClientGMTOffset', function () {
var rightNow = new Date();
var jan1 = new Date(rightNow.getFullYear(), 0, 1, 0, 0, 0, 0);
var temp = jan1.toGMTString();
var jan2 = new Date(temp.substring(0, temp.lastIndexOf(" ")-1));
var std_time_offset = (jan1 - jan2) / (1000 * 60 * 60);
return std_time_offset;
});
AttendanceAdapter.method('doCustomValidation', function(params) {
if (this.photoAttendance && !this.photoTaken) {
return "Please attach a photo before submitting";
}
return null;
});
AttendanceAdapter.method('forceInjectValuesBeforeSave', function(params) {
if (this.photoAttendance) {
var canvas = document.getElementById('attendnaceCanvas');
params.image = canvas.toDataURL();
}
return params;
});
AttendanceAdapter.method('postRenderForm', function() {
if (this.photoAttendance == '1') {
$('.photoAttendance').show();
var video = document.getElementById('attendnaceVideo');
// Get access to the camera!
if(navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
navigator.mediaDevices.getUserMedia({ video: true }).then(function(stream) {
video.src = window.URL.createObjectURL(stream);
video.play();
});
}
this.photoTaken = false;
this.configureEvents();
} else {
$('.photoAttendance').remove();
}
});
AttendanceAdapter.method('configureEvents', function() {
var that = this;
var canvas = document.getElementById('attendnaceCanvas');
var context = canvas.getContext('2d');
var video = document.getElementById('attendnaceVideo');
$('.attendnaceSnap').click(function() {
context.drawImage(video, 0, 0, 208, 156);
that.photoTaken = true;
return false;
});
});
function EmployeeAttendanceSheetAdapter(endPoint,tab,filter,orderBy) {
this.initAdapter(endPoint,tab,filter,orderBy);
}
EmployeeAttendanceSheetAdapter.inherits(AdapterBase);
this.currentTimesheetId = null;
this.currentTimesheet = null;
EmployeeAttendanceSheetAdapter.method('getDataMapping', function() {
return [
"id",
"date_start",
"date_end",
"total_time",
"status"
];
});
EmployeeAttendanceSheetAdapter.method('getHeaders', function() {
return [
{ "sTitle": "ID" ,"bVisible":false},
{ "sTitle": "Start Date"},
{ "sTitle": "End Date"},
{ "sTitle": "Total Time"},
{ "sTitle": "Status"}
];
});
EmployeeAttendanceSheetAdapter.method('getFormFields', function() {
return [
[ "id", {"label":"ID","type":"hidden"}],
[ "date_start", {"label":"TimeSheet Start Date","type":"date","validation":""}],
[ "date_end", {"label":"TimeSheet End Date","type":"date","validation":""}],
[ "details", {"label":"Reason","type":"textarea","validation":"none"}]
];
});
EmployeeAttendanceSheetAdapter.method('preProcessTableData', function(row) {
row[1] = Date.parse(row[1]).toString('MMM d, yyyy (dddd)');
row[2] = Date.parse(row[2]).toString('MMM d, yyyy (dddd)');
return row;
});
EmployeeAttendanceSheetAdapter.method('renderForm', function(object) {
var formHtml = this.templates['formTemplate'];
var html = "";
$("#"+this.getTableName()+'Form').html(formHtml);
$("#"+this.getTableName()+'Form').show();
$("#"+this.getTableName()).hide();
$('#attendnacesheet_start').html(Date.parse(object.date_start).toString('MMM d, yyyy (dddd)'));
$('#attendnacesheet_end').html(Date.parse(object.date_end).toString('MMM d, yyyy (dddd)'));
this.currentTimesheet = object;
this.getTimeEntries();
});
EmployeeAttendanceSheetAdapter.method('getTimeEntries', function() {
timesheetId = this.currentId;
var sourceMappingJson = JSON.stringify(modJsList['tabEmployeeTimeEntry'].getSourceMapping());
object = {"id":timesheetId,"sm":sourceMappingJson};
var reqJson = JSON.stringify(object);
var callBackData = [];
callBackData['callBackData'] = [];
callBackData['callBackSuccess'] = 'getTimeEntriesSuccessCallBack';
callBackData['callBackFail'] = 'getTimeEntriesFailCallBack';
this.customAction('getTimeEntries','modules=time_sheets',reqJson,callBackData);
});
EmployeeAttendanceSheetAdapter.method('getTimeEntriesSuccessCallBack', function(callBackData) {
var entries = callBackData;
var html = "";
var temp = '<tr><td><img class="tableActionButton" src="_BASE_images/delete.png" style="cursor:pointer;" rel="tooltip" title="Delete" onclick="modJsList[\'tabEmployeeTimeEntry\'].deleteRow(_id_);return false;"></img></td><td>_start_</td><td>_end_</td><td>_duration_</td><td>_project_</td><td>_details_</td>';
for(var i=0;i<entries.length;i++){
try{
var t = temp;
t = t.replace(/_start_/g,Date.parse(entries[i].date_start).toString('MMM d, yyyy [hh:mm tt]'));
t = t.replace(/_end_/g,Date.parse(entries[i].date_end).toString('MMM d, yyyy [hh:mm tt]'));
var mili = Date.parse(entries[i].date_end) - Date.parse(entries[i].date_start);
var minutes = Math.round(mili/60000);
var hourMinutes = (minutes % 60);
var hours = (minutes-hourMinutes)/60;
t = t.replace(/_duration_/g,"Hours ("+hours+") - Min ("+hourMinutes+")");
if(entries[i].project == 'null' || entries[i].project == null || entries[i].project == undefined){
t = t.replace(/_project_/g,"None");
}else{
t = t.replace(/_project_/g,entries[i].project);
}
t = t.replace(/_project_/g,entries[i].project);
t = t.replace(/_details_/g,entries[i].details);
t = t.replace(/_id_/g,entries[i].id);
t = t.replace(/_BASE_/g,this.baseUrl);
html += t;
}catch(e){}
}
$('.timesheet_entries_table_body').html(html);
if(modJs.getTableName() == 'SubEmployeeTimeSheetAll'){
$('#submit_sheet').hide();
$('#add_time_sheet_entry').hide();
}else{
if(this.currentElement.status == 'Approved'){
$('#submit_sheet').hide();
$('#add_time_sheet_entry').hide();
}else{
$('#submit_sheet').show();
$('#add_time_sheet_entry').show();
}
}
});
EmployeeAttendanceSheetAdapter.method('getTimeEntriesFailCallBack', function(callBackData) {
this.showMessage("Error", "Error occured while getting timesheet entries");
});
EmployeeAttendanceSheetAdapter.method('createPreviousAttendnacesheet', function(id) {
object = {"id":id};
var reqJson = JSON.stringify(object);
var callBackData = [];
callBackData['callBackData'] = [];
callBackData['callBackSuccess'] = 'createPreviousAttendnacesheetSuccessCallBack';
callBackData['callBackFail'] = 'createPreviousAttendnacesheetFailCallBack';
this.customAction('createPreviousAttendnaceSheet','modules=attendnace',reqJson,callBackData);
});
EmployeeAttendanceSheetAdapter.method('createPreviousAttendnacesheetSuccessCallBack', function(callBackData) {
$('.tooltip').css("display","none");
$('.tooltip').remove();
//this.showMessage("Success", "Previous Timesheet created");
this.get([]);
});
EmployeeAttendanceSheetAdapter.method('createPreviousAttendnacesheetFailCallBack', function(callBackData) {
this.showMessage("Error", callBackData);
});
EmployeeAttendanceSheetAdapter.method('getActionButtonsHtml', function(id,data) {
var html = '';
if(this.getTableName() == "EmployeeTimeSheetAll"){
html = '<div style="width:80px;"><img class="tableActionButton" src="_BASE_images/view.png" style="cursor:pointer;" rel="tooltip" title="Edit Timesheet Entries" onclick="modJs.edit(_id_);return false;"></img><img class="tableActionButton" src="_BASE_images/redo.png" style="cursor:pointer;margin-left:15px;" rel="tooltip" title="Create previous time sheet" onclick="modJs.createPreviousAttendnacesheet(_id_);return false;"></img></div>';
}else{
html = '<div style="width:80px;"><img class="tableActionButton" src="_BASE_images/view.png" style="cursor:pointer;" rel="tooltip" title="Edit Timesheet Entries" onclick="modJs.edit(_id_);return false;"></img></div>';
}
html = html.replace(/_id_/g,id);
html = html.replace(/_BASE_/g,this.baseUrl);
return html;
});
EmployeeAttendanceSheetAdapter.method('getCustomTableParams', function() {
var that = this;
var dataTableParams = {
"aoColumnDefs": [
{
"fnRender": function(data, cell){
return that.preProcessRemoteTableData(data, cell, 1)
} ,
"aTargets": [1]
},
{
"fnRender": function(data, cell){
return that.preProcessRemoteTableData(data, cell, 2)
} ,
"aTargets": [2]
},
{
"fnRender": that.getActionButtons,
"aTargets": [that.getDataMapping().length]
}
]
};
return dataTableParams;
});
EmployeeAttendanceSheetAdapter.method('preProcessRemoteTableData', function(data, cell, id) {
return Date.parse(cell).toString('MMM d, yyyy (dddd)');
});

View File

@@ -1,130 +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('getPunch', function() {
var that = this;
var object = {};
object['date'] = this.getClientDate(new Date()).toISOString().slice(0, 19).replace('T', ' ');
object['offset'] = this.getClientGMTOffset();
var reqJson = JSON.stringify(object);
var callBackData = [];
callBackData['callBackData'] = [];
callBackData['callBackSuccess'] = 'getPunchSuccessCallBack';
callBackData['callBackFail'] = 'getPunchFailCallBack';
this.customAction('getPunch','modules=attendance',reqJson,callBackData);
});
DashboardAdapter.method('getPunchSuccessCallBack', function(callBackData) {
var punch = callBackData;
if(punch == null){
$("#lastPunchTime").html("Not");
$("#punchTimeText").html("Punched In");
}else{
$("#lastPunchTime").html(Date.parse(punch.in_time).toString('h:mm tt'));
$("#punchTimeText").html("Punched In");
}
});
DashboardAdapter.method('getPunchFailCallBack', 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','modules=dashboard',reqJson,callBackData);
});
DashboardAdapter.method('getInitDataSuccessCallBack', function(data) {
$("#timeSheetHoursWorked").html(data['lastTimeSheetHours']);
$("#numberOfProjects").html(data['activeProjects']);
$("#pendingLeaveCount").html(data['pendingLeaves']);
$("#numberOfEmployees").html(data['numberOfEmployees']+" Subordinates");
$("#numberOfCandidates").html(data['numberOfCandidates']+" Candidates");
$("#numberOfJobs").html(data['numberOfJobs']+" Active");
$("#numberOfCourses").html(data['numberOfCourses']+" Active");
});
DashboardAdapter.method('getInitDataFailCallBack', function(callBackData) {
});
DashboardAdapter.method('getClientDate', function (date) {
var offset = this.getClientGMTOffset();
var tzDate = date.addMinutes(offset*60);
return tzDate;
});
DashboardAdapter.method('getClientGMTOffset', function () {
var rightNow = new Date();
var jan1 = new Date(rightNow.getFullYear(), 0, 1, 0, 0, 0, 0);
var temp = jan1.toGMTString();
var jan2 = new Date(temp.substring(0, temp.lastIndexOf(" ")-1));
var std_time_offset = (jan1 - jan2) / (1000 * 60 * 60);
return std_time_offset;
});

View File

@@ -1,64 +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)
*/
/**
* EmployeeDependentAdapter
*/
function EmployeeDependentAdapter(endPoint) {
this.initAdapter(endPoint);
}
EmployeeDependentAdapter.inherits(AdapterBase);
EmployeeDependentAdapter.method('getDataMapping', function() {
return [
"id",
"name",
"relationship",
"dob",
"id_number"
];
});
EmployeeDependentAdapter.method('getHeaders', function() {
return [
{ "sTitle": "ID" ,"bVisible":false},
{ "sTitle": "Name" },
{ "sTitle": "Relationship"},
{ "sTitle": "Date of Birth"},
{ "sTitle": "Id Number"}
];
});
EmployeeDependentAdapter.method('getFormFields', function() {
return [
[ "id", {"label":"ID","type":"hidden"}],
[ "name", {"label":"Name","type":"text","validation":""}],
[ "relationship", {"label":"Relationship","type":"select","source":[["Child","Child"],["Spouse","Spouse"],["Parent","Parent"],["Other","Other"]]}],
[ "dob", {"label":"Date of Birth","type":"date","validation":""}],
[ "id_number", {"label":"Id Number","type":"text","validation":"none"}]
];
});

View File

@@ -1,63 +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 EmergencyContactAdapter(endPoint) {
this.initAdapter(endPoint);
}
EmergencyContactAdapter.inherits(AdapterBase);
EmergencyContactAdapter.method('getDataMapping', function() {
return [
"id",
"name",
"relationship",
"home_phone",
"work_phone",
"mobile_phone"
];
});
EmergencyContactAdapter.method('getHeaders', function() {
return [
{ "sTitle": "ID" ,"bVisible":false},
{ "sTitle": "Name" },
{ "sTitle": "Relationship"},
{ "sTitle": "Home Phone"},
{ "sTitle": "Work Phone"},
{ "sTitle": "Mobile Phone"}
];
});
EmergencyContactAdapter.method('getFormFields', function() {
return [
[ "id", {"label":"ID","type":"hidden"}],
[ "name", {"label":"Name","type":"text","validation":""}],
[ "relationship", {"label":"Relationship","type":"text","validation":"none"}],
[ "home_phone", {"label":"Home Phone","type":"text","validation":"none"}],
[ "work_phone", {"label":"Work Phone","type":"text","validation":"none"}],
[ "mobile_phone", {"label":"Mobile Phone","type":"text","validation":"none"}]
];
});

View File

@@ -1,730 +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 EmployeeAdapter(endPoint) {
this.initAdapter(endPoint);
this.fieldNameMap = {};
this.hiddenFields = {};
this.tableFields = {};
this.formOnlyFields = {};
}
EmployeeAdapter.inherits(AdapterBase);
this.currentUserId = null;
EmployeeAdapter.method('setFieldNameMap', function(fields) {
var field;
for(var i=0;i<fields.length;i++){
field = fields[i];
this.fieldNameMap[field.name] = field;
if(field.display == "Hidden"){
this.hiddenFields[field.name] = field;
}else{
if(field.display == "Table and Form"){
this.tableFields[field.name] = field;
}else{
this.formOnlyFields[field.name] = field;
}
}
}
});
EmployeeAdapter.method('getDataMapping', function() {
return [
"id",
"employee_id",
"first_name",
"last_name",
"mobile_phone",
"department",
"gender",
"supervisor"
];
});
EmployeeAdapter.method('getHeaders', function() {
return [
{ "sTitle": "ID" },
{ "sTitle": "Employee Number" },
{ "sTitle": "First Name" },
{ "sTitle": "Last Name"},
{ "sTitle": "Mobile"},
{ "sTitle": "Department"},
{ "sTitle": "Gender"},
{ "sTitle": "Supervisor"}
];
});
EmployeeAdapter.method('getFormFields', function() {
var fields, newFields = [];
var employee_id, ssn_num, employment_status, job_title, pay_grade, joined_date, department, work_email, country;
if(this.checkPermission("Edit Employee Number") == "Yes"){
employee_id = [ "employee_id", {"label":"Employee Number","type":"text","validation":""}];
}else{
employee_id = [ "employee_id", {"label":"Employee Number","type":"placeholder","validation":""}];
}
if(this.checkPermission("Edit EPF/CPF Number") == "Yes"){
ssn_num = [ "ssn_num", {"label":"EPF/CPF/SS No","type":"text","validation":"none"}];
}else{
ssn_num = [ "ssn_num", {"label":"EPF/CPF/SS No","type":"placeholder","validation":"none"}];
}
if(this.checkPermission("Edit Employment Status") == "Yes"){
employment_status = [ "employment_status", {"label":"Employment Status","type":"select2","remote-source":["EmploymentStatus","id","name"]}];
}else{
employment_status = [ "employment_status", {"label":"Employment Status","type":"placeholder","remote-source":["EmploymentStatus","id","name"]}];
}
if(this.checkPermission("Edit Job Title") == "Yes"){
job_title = [ "job_title", {"label":"Job Title","type":"select2","remote-source":["JobTitle","id","name"]}];
}else{
job_title = [ "job_title", {"label":"Job Title","type":"placeholder","remote-source":["JobTitle","id","name"]}];
}
if(this.checkPermission("Edit Pay Grade") == "Yes"){
pay_grade = [ "pay_grade", {"label":"Pay Grade","type":"select2","allow-null":true,"remote-source":["PayGrade","id","name"]}];
}else{
pay_grade = [ "pay_grade", {"label":"Pay Grade","type":"placeholder","allow-null":true,"remote-source":["PayGrade","id","name"]}];
}
if(this.checkPermission("Edit Joined Date") == "Yes"){
joined_date = [ "joined_date", {"label":"Joined Date","type":"date","validation":""}];
}else{
joined_date = [ "joined_date", {"label":"Joined Date","type":"placeholder","validation":""}];
}
if(this.checkPermission("Edit Department") == "Yes"){
department = [ "department", {"label":"Department","type":"select2","remote-source":["CompanyStructure","id","title"]}];
}else{
department = [ "department", {"label":"Department","type":"placeholder","remote-source":["CompanyStructure","id","title"]}];
}
if(this.checkPermission("Edit Work Email") == "Yes"){
work_email = [ "work_email", {"label":"Work Email","type":"text","validation":"email"}];
}else{
work_email = [ "work_email", {"label":"Work Email","type":"placeholder","validation":"emailOrEmpty"}];
}
if(this.checkPermission("Edit Country") == "Yes"){
country = [ "country", {"label":"Country","type":"select2","remote-source":["Country","code","name"]}];
}else{
country = [ "country", {"label":"Country","type":"placeholder","remote-source":["Country","code","name"]}];
}
fields = [
[ "id", {"label":"ID","type":"hidden","validation":""}],
employee_id,
[ "first_name", {"label":"First Name","type":"text","validation":""}],
[ "middle_name", {"label":"Middle Name","type":"text","validation":"none"}],
[ "last_name", {"label":"Last Name","type":"text","validation":""}],
[ "nationality", {"label":"Nationality","type":"select2","remote-source":["Nationality","id","name"]}],
[ "birthday", {"label":"Date of Birth","type":"date","validation":""}],
[ "gender", {"label":"Gender","type":"select","source":[["Male","Male"],["Female","Female"]]}],
[ "marital_status", {"label":"Marital Status","type":"select","source":[["Married","Married"],["Single","Single"],["Divorced","Divorced"],["Widowed","Widowed"],["Other","Other"]]}],
ssn_num,
[ "nic_num", {"label":"NIC","type":"text","validation":"none"}],
[ "other_id", {"label":"Other ID","type":"text","validation":"none"}],
[ "driving_license", {"label":"Driving License No","type":"text","validation":"none"}],
employment_status,
job_title,
pay_grade,
[ "work_station_id", {"label":"Work Station Id","type":"text","validation":"none"}],
[ "address1", {"label":"Address Line 1","type":"text","validation":"none"}],
[ "address2", {"label":"Address Line 2","type":"text","validation":"none"}],
[ "city", {"label":"City","type":"text","validation":"none"}],
country,
[ "province", {"label":"Province","type":"select2","allow-null":true,"remote-source":["Province","id","name"]}],
[ "postal_code", {"label":"Postal/Zip Code","type":"text","validation":"none"}],
[ "home_phone", {"label":"Home Phone","type":"text","validation":"none"}],
[ "mobile_phone", {"label":"Mobile Phone","type":"text","validation":"none"}],
[ "work_phone", {"label":"Work Phone","type":"text","validation":"none"}],
work_email,
[ "private_email", {"label":"Private Email","type":"text","validation":"emailOrEmpty"}],
joined_date,
department
];
for(var i=0;i<this.customFields.length;i++){
fields.push(this.customFields[i]);
}
for(var i=0;i<fields.length;i++){
tempField = fields[i];
if(this.hiddenFields[tempField[0]] == undefined || this.hiddenFields[tempField[0]] == null ){
if(this.fieldNameMap[tempField[0]] != undefined && this.fieldNameMap[tempField[0]] != null){
title = this.fieldNameMap[tempField[0]].textMapped;
tempField[1]['label'] = title;
}
newFields.push(tempField);
}
}
return newFields;
});
EmployeeAdapter.method('getSourceMapping' , function() {
var k = this.sourceMapping ;
k['supervisor'] = ["Employee","id","first_name+last_name"];
return k;
});
EmployeeAdapter.method('get', function() {
var that = this;
var sourceMappingJson = JSON.stringify(this.getSourceMapping());
var req = {"map":sourceMappingJson};
var reqJson = JSON.stringify(req);
var callBackData = [];
callBackData['callBackData'] = [];
callBackData['callBackSuccess'] = 'modEmployeeGetSuccessCallBack';
callBackData['callBackFail'] = 'modEmployeeGetFailCallBack';
this.customAction('get','modules=employees',reqJson,callBackData);
});
EmployeeAdapter.method('deleteProfileImage', function(empId) {
var that = this;
var req = {"id":empId};
var reqJson = JSON.stringify(req);
var callBackData = [];
callBackData['callBackData'] = [];
callBackData['callBackSuccess'] = 'modEmployeeDeleteProfileImageCallBack';
callBackData['callBackFail'] = 'modEmployeeDeleteProfileImageCallBack';
this.customAction('deleteProfileImage','modules=employees',reqJson,callBackData);
});
EmployeeAdapter.method('modEmployeeDeleteProfileImageCallBack', function(data) {
top.location.href = top.location.href;
});
EmployeeAdapter.method('modEmployeeGetSuccessCallBack' , function(data) {
var fields = this.getFormFields();
var currentEmpId = data[1];
var userEmpId = data[2];
data = data[0];
var html = this.getCustomTemplate('myDetails.html');
for(var i=0;i<fields.length;i++) {
if(this.fieldNameMap[fields[i][0]] != undefined && this.fieldNameMap[fields[i][0]] != null){
var title = this.fieldNameMap[fields[i][0]].textMapped;
html = html.replace("#_label_"+fields[i][0]+"_#",this.gt(title));
}
}
html = html.replace(/#_.+_#/gi,"");
html = html.replace(/_id_/g,data.id);
$("#"+this.getTableName()).html(html);
for(var i=0;i<fields.length;i++) {
$("#"+this.getTableName()+" #" + fields[i][0]).html(data[fields[i][0]]);
$("#"+this.getTableName()+" #" + fields[i][0]+"_Name").html(data[fields[i][0]+"_Name"]);
}
$("#"+this.getTableName()+" #supervisor_Name").html(data["supervisor_Name"]);
var subordinates = "";
for(var i=0;i<data.subordinates.length;i++){
if(data.subordinates[i].first_name != undefined && data.subordinates[i].first_name != null){
subordinates += data.subordinates[i].first_name+" ";
}
+data.subordinates[i].middle_name
if(data.subordinates[i].middle_name != undefined && data.subordinates[i].middle_name != null && data.subordinates[i].middle_name != ""){
subordinates += data.subordinates[i].middle_name+" ";
}
if(data.subordinates[i].last_name != undefined && data.subordinates[i].last_name != null && data.subordinates[i].last_name != ""){
subordinates += data.subordinates[i].last_name;
}
subordinates += "<br/>";
}
//Add custom fields
if(data.customFields != undefined && data.customFields != null && Object.keys(data.customFields).length > 0) {
var ct = '<div class="col-xs-6 col-md-3" style="font-size:16px;"><label class="control-label col-xs-12" style="font-size:13px;">#_label_#</label><label class="control-label col-xs-12 iceLabel" style="font-size:13px;font-weight: bold;">#_value_#</label></div>';
var sectionTemplate = '<div class="panel panel-default" style="width:97.5%;"><div class="panel-heading"><h4>#_section.name_#</h4></div> <div class="panel-body" id="cont_#_section_#"> </div></div>';
var customFieldHtml;
for (index in data.customFields) {
if(!data.customFields[index][1]){
data.customFields[index][1] = this.gt('Other Details');
}
sectionId = data.customFields[index][1].toLocaleLowerCase();
sectionId = sectionId.replace(' ','_');
if($("#cont_"+sectionId).length <= 0){
//Add section
sectionHtml = sectionTemplate;
sectionHtml = sectionHtml.replace('#_section_#', sectionId);
sectionHtml = sectionHtml.replace('#_section.name_#', data.customFields[index][1]);
$("#customFieldsCont").append($(sectionHtml));
}
customFieldHtml = ct;
customFieldHtml = customFieldHtml.replace('#_label_#', index);
if (data.customFields[index][2] === 'fileupload') {
customFieldHtml = customFieldHtml.replace(
'#_value_#',
'<button onclick="download(\''+data.customFields[index][0]+'\');return false;" class="btn btn-mini btn-inverse" type="button">View: '+index+'</button>'
);
} else {
customFieldHtml = customFieldHtml.replace('#_value_#', data.customFields[index][0]);
}
$("#cont_"+sectionId).append($(customFieldHtml));
}
}else{
$("#customFieldsCont").remove();
}
$("#"+this.getTableName()+" #subordinates").html(subordinates);
$("#"+this.getTableName()+" #name").html(data.first_name + " " + data.last_name);
this.currentUserId = data.id;
$("#"+this.getTableName()+" #profile_image_"+data.id).attr('src',data.image);
if(this.checkPermission("Upload/Delete Profile Image") == "No"){
$("#employeeUploadProfileImage").remove();
$("#employeeDeleteProfileImage").remove();
}
if(this.checkPermission("Edit Employee Details") == "No"){
$("#employeeProfileEditInfo").remove();
}
if(currentEmpId != userEmpId){
$("#employeeUpdatePassword").remove();
}
this.cancel();
});
EmployeeAdapter.method('modEmployeeGetFailCallBack' , function(data) {
});
EmployeeAdapter.method('editEmployee' , function() {
this.edit(this.currentUserId);
});
EmployeeAdapter.method('changePassword', function() {
$('#adminUsersModel').modal('show');
$('#adminUsersChangePwd #newpwd').val('');
$('#adminUsersChangePwd #conpwd').val('');
});
EmployeeAdapter.method('changePasswordConfirm', function() {
$('#adminUsersChangePwd_error').hide();
var passwordValidation = function (str) {
return str.length > 7;
};
var password = $('#adminUsersChangePwd #newpwd').val();
if(!passwordValidation(password)){
$('#adminUsersChangePwd_error').html("Password should be longer than 7 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 = {"pwd":conPassword};
var reqJson = JSON.stringify(req);
var callBackData = [];
callBackData['callBackData'] = [];
callBackData['callBackSuccess'] = 'changePasswordSuccessCallBack';
callBackData['callBackFail'] = 'changePasswordFailCallBack';
this.customAction('changePassword','modules=employees',reqJson,callBackData);
});
EmployeeAdapter.method('closeChangePassword', function() {
$('#adminUsersModel').modal('hide');
});
EmployeeAdapter.method('changePasswordSuccessCallBack', function(callBackData,serverData) {
this.closeChangePassword();
this.showMessage("Password Change","Password changed successfully");
});
EmployeeAdapter.method('changePasswordFailCallBack', function(callBackData,serverData) {
this.closeChangePassword();
this.showMessage("Error",callBackData);
});
/*
* Company Graph
*/
function CompanyStructureAdapter(endPoint) {
this.initAdapter(endPoint);
}
CompanyStructureAdapter.inherits(AdapterBase);
CompanyStructureAdapter.method('getDataMapping', function() {
return [
"id",
"title",
"address",
"type",
"country",
"parent"
];
});
CompanyStructureAdapter.method('getHeaders', function() {
return [
{ "sTitle": "ID","bVisible":false },
{ "sTitle": "Name" },
{ "sTitle": "Address"},
{ "sTitle": "Type"},
{ "sTitle": "Country", "sClass": "center" },
{ "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":"select","remote-source":["Country","code","name"]}],
[ "parent", {"label":"Parent Structure","type":"select","allow-null":true,"remote-source":["CompanyStructure","id","title"]}]
];
});
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;
});
/*
* Api Access
*/
function ApiAccessAdapter(endPoint) {
this.initAdapter(endPoint);
}
ApiAccessAdapter.inherits(AdapterBase);
ApiAccessAdapter.method('getDataMapping', function() {
return [
];
});
ApiAccessAdapter.method('getHeaders', function() {
return [
];
});
ApiAccessAdapter.method('getFormFields', function() {
return [
];
});
ApiAccessAdapter.method('get', function() {
});

View File

@@ -1,91 +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 EmployeeCompanyLoanAdapter(endPoint) {
this.initAdapter(endPoint);
}
EmployeeCompanyLoanAdapter.inherits(AdapterBase);
EmployeeCompanyLoanAdapter.method('getDataMapping', function() {
return [
"id",
"loan",
"start_date",
"period_months",
"currency",
"amount",
"status"
];
});
EmployeeCompanyLoanAdapter.method('getHeaders', function() {
return [
{ "sTitle": "ID" ,"bVisible":false},
{ "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"}],
[ "loan", {"label":"Loan Type","type":"placeholder","remote-source":["CompanyLoan","id","name"]}],
[ "start_date", {"label":"Loan Start Date","type":"placeholder","validation":""}],
[ "last_installment_date", {"label":"Last Installment Date","type":"placeholder","validation":"none"}],
[ "period_months", {"label":"Loan Period (Months)","type":"placeholder","validation":"number"}],
[ "currency", {"label":"Currency","type":"placeholder","remote-source":["CurrencyType","id","name"]}],
[ "amount", {"label":"Loan Amount","type":"placeholder","validation":"float"}],
[ "monthly_installment", {"label":"Monthly Installment","type":"placeholder","validation":"float"}],
[ "status", {"label":"Status","type":"placeholder","source":[["Approved","Approved"],["Paid","Paid"],["Suspended","Suspended"]]}],
[ "details", {"label":"Details","type":"placeholder","validation":"none"}]
];
});
EmployeeCompanyLoanAdapter.method('getActionButtonsHtml', function(id,data) {
var editButton = '<img class="tableActionButton" src="_BASE_images/view.png" style="cursor:pointer;" rel="tooltip" title="View" 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 html = '<div style="width:80px;">_edit__delete_</div>';
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;
});

View File

@@ -1,120 +0,0 @@
/*
This file is part of iCE Hrm.
Original work Copyright (c) 2012 [Gamonoid Media Pvt. Ltd]
Developer: Thilina Hasantha (thilina.hasantha[at]gmail.com / facebook.com/thilinah)
*/
function EmployeeOvertimeAdapter(endPoint) {
this.initAdapter(endPoint);
this.itemName = 'Overtime';
this.itemNameLower = 'employeeovertime';
this.modulePathName = 'overtime';
}
EmployeeOvertimeAdapter.inherits(ApproveModuleAdapter);
EmployeeOvertimeAdapter.method('getDataMapping', function() {
return [
"id",
"category",
"start_time",
"end_time",
"project",
"status"
];
});
EmployeeOvertimeAdapter.method('getHeaders', function() {
return [
{ "sTitle": "ID" ,"bVisible":false},
{ "sTitle": "Category" },
{ "sTitle": "Start Time" },
{ "sTitle": "End Time"},
{ "sTitle": "Project"},
{ "sTitle": "Status"}
];
});
EmployeeOvertimeAdapter.method('getFormFields', function() {
return [
["id", {"label": "ID", "type": "hidden"}],
["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"}]
];
});
/*
EmployeeOvertimeApproverAdapter
*/
function EmployeeOvertimeApproverAdapter(endPoint) {
this.initAdapter(endPoint);
this.itemName = 'Overtime';
this.itemNameLower = 'employeeovertime';
this.modulePathName = 'overtime';
}
EmployeeOvertimeApproverAdapter.inherits(EmployeeOvertimeAdminAdapter);
EmployeeOvertimeApproverAdapter.method('getActionButtonsHtml', function(id,data) {
var statusChangeButton = '<img class="tableActionButton" src="_BASE_images/run.png" style="cursor:pointer;" rel="tooltip" title="Change Status" onclick="modJs.openStatus(_id_, \'_cstatus_\');return false;"></img>';
var viewLogsButton = '<img class="tableActionButton" src="_BASE_images/log.png" style="margin-left:15px;cursor:pointer;" rel="tooltip" title="View Logs" onclick="modJs.getLogs(_id_);return false;"></img>';
var html = '<div style="width:80px;">_status__logs_</div>';
html = html.replace('_logs_',viewLogsButton);
if(data[this.getStatusFieldPosition()] == 'Processing'){
html = html.replace('_status_',statusChangeButton);
}else{
html = html.replace('_status_','');
}
html = html.replace(/_id_/g,id);
html = html.replace(/_BASE_/g,this.baseUrl);
html = html.replace(/_cstatus_/g,data[this.getStatusFieldPosition()]);
return html;
});
EmployeeOvertimeApproverAdapter.method('getStatusOptionsData', function(currentStatus) {
var data = {};
if(currentStatus != 'Processing'){
}else{
data["Approved"] = "Approved";
data["Rejected"] = "Rejected";
}
return data;
});
EmployeeOvertimeApproverAdapter.method('getStatusOptions', function(currentStatus) {
return this.generateOptions(this.getStatusOptionsData(currentStatus));
});
/*
EmployeeOvertimeAdapter
*/
function SubordinateEmployeeOvertimeAdapter(endPoint,tab,filter,orderBy) {
this.initAdapter(endPoint,tab,filter,orderBy);
this.itemName = 'Overtime';
this.itemNameLower = 'employeeovertime';
this.modulePathName = 'overtime';
}
SubordinateEmployeeOvertimeAdapter.inherits(EmployeeOvertimeAdminAdapter);

View File

@@ -1,51 +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 EmployeeProjectAdapter(endPoint) {
this.initAdapter(endPoint);
}
EmployeeProjectAdapter.inherits(AdapterBase);
EmployeeProjectAdapter.method('getDataMapping', function() {
return [
"id",
"project"
];
});
EmployeeProjectAdapter.method('getHeaders', function() {
return [
{ "sTitle": "ID" ,"bVisible":false},
{ "sTitle": "Project" }
];
});
EmployeeProjectAdapter.method('getFormFields', function() {
return [
[ "id", {"label":"ID","type":"hidden"}],
[ "project", {"label":"Project","type":"select2","remote-source":["Project","id","name"]}],
[ "details", {"label":"Details","type":"textarea","validation":"none"}]
];
});

View File

@@ -1,200 +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 EmployeeSkillAdapter(endPoint) {
this.initAdapter(endPoint);
}
EmployeeSkillAdapter.inherits(AdapterBase);
EmployeeSkillAdapter.method('getDataMapping', function() {
return [
"id",
"skill_id",
"details"
];
});
EmployeeSkillAdapter.method('getHeaders', function() {
return [
{ "sTitle": "ID" ,"bVisible":false},
{ "sTitle": "Skill" },
{ "sTitle": "Details"}
];
});
EmployeeSkillAdapter.method('getFormFields', function() {
return [
[ "id", {"label":"ID","type":"hidden"}],
[ "skill_id", {"label":"Skill","type":"select2","allow-null":true,"remote-source":["Skill","id","name"]}],
[ "details", {"label":"Details","type":"textarea","validation":""}]
];
});
/**
* EmployeeEducationAdapter
*/
function EmployeeEducationAdapter(endPoint) {
this.initAdapter(endPoint);
}
EmployeeEducationAdapter.inherits(AdapterBase);
EmployeeEducationAdapter.method('getDataMapping', function() {
return [
"id",
"education_id",
"institute",
"date_start",
"date_end"
];
});
EmployeeEducationAdapter.method('getHeaders', function() {
return [
{ "sTitle": "ID", "bVisible":false},
{ "sTitle": "Qualification" },
{ "sTitle": "Institute"},
{ "sTitle": "Start Date"},
{ "sTitle": "Completed On"},
];
});
EmployeeEducationAdapter.method('getFormFields', function() {
return [
[ "id", {"label":"ID","type":"hidden"}],
[ "education_id", {"label":"Qualification","type":"select2","allow-null":false,"remote-source":["Education","id","name"]}],
[ "institute", {"label":"Institute","type":"text","validation":""}],
[ "date_start", {"label":"Start Date","type":"date","validation":"none"}],
[ "date_end", {"label":"Completed On","type":"date","validation":"none"}]
];
});
/**
* EmployeeCertificationAdapter
*/
function EmployeeCertificationAdapter(endPoint) {
this.initAdapter(endPoint);
}
EmployeeCertificationAdapter.inherits(AdapterBase);
EmployeeCertificationAdapter.method('getDataMapping', function() {
return [
"id",
"certification_id",
"institute",
"date_start",
"date_start"
];
});
EmployeeCertificationAdapter.method('getHeaders', function() {
return [
{ "sTitle": "ID","bVisible":false},
{ "sTitle": "Certification" },
{ "sTitle": "Institute"},
{ "sTitle": "Granted On"},
{ "sTitle": "Valid Thru"},
];
});
EmployeeCertificationAdapter.method('getFormFields', function() {
return [
[ "id", {"label":"ID","type":"hidden"}],
[ "certification_id", {"label":"Certification","type":"select2","allow-null":false,"remote-source":["Certification","id","name"]}],
[ "institute", {"label":"Institute","type":"text","validation":""}],
[ "date_start", {"label":"Granted On","type":"date","validation":"none"}],
[ "date_end", {"label":"Valid Thru","type":"date","validation":"none"}]
];
});
/**
* EmployeeLanguageAdapter
*/
function EmployeeLanguageAdapter(endPoint) {
this.initAdapter(endPoint);
}
EmployeeLanguageAdapter.inherits(AdapterBase);
EmployeeLanguageAdapter.method('getDataMapping', function() {
return [
"id",
"language_id",
"reading",
"speaking",
"writing",
"understanding"
];
});
EmployeeLanguageAdapter.method('getHeaders', function() {
return [
{ "sTitle": "ID", "bVisible":false },
{ "sTitle": "Language" },
{ "sTitle": "Reading"},
{ "sTitle": "Speaking"},
{ "sTitle": "Writing"},
{ "sTitle": "Understanding"}
];
});
EmployeeLanguageAdapter.method('getFormFields', function() {
var compArray = [["Elementary Proficiency","Elementary Proficiency"],
["Limited Working Proficiency","Limited Working Proficiency"],
["Professional Working Proficiency","Professional Working Proficiency"],
["Full Professional Proficiency","Full Professional Proficiency"],
["Native or Bilingual Proficiency","Native or Bilingual Proficiency"]];
return [
[ "id", {"label":"ID","type":"hidden"}],
[ "language_id", {"label":"Language","type":"select2","allow-null":false,"remote-source":["Language","id","description"]}],
[ "reading", {"label":"Reading","type":"select","source":compArray}],
[ "speaking", {"label":"Speaking","type":"select","source":compArray}],
[ "writing", {"label":"Writing","type":"select","source":compArray}],
[ "understanding", {"label":"Understanding","type":"select","source":compArray}]
];
});

View File

@@ -1,34 +0,0 @@
/**
* Author: Thilina Hasantha
*/
/**
* UserReportAdapter
*/
function UserReportAdapter(endPoint,tab,filter,orderBy) {
this.initAdapter(endPoint,tab,filter,orderBy);
this._construct();
}
UserReportAdapter.inherits(ReportAdapter);
UserReportAdapter.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;
});

View File

@@ -1,56 +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 EmployeeSalaryAdapter(endPoint) {
this.initAdapter(endPoint);
}
EmployeeSalaryAdapter.inherits(AdapterBase);
EmployeeSalaryAdapter.method('getDataMapping', function() {
return [
"id",
"component",
"amount",
"details"
];
});
EmployeeSalaryAdapter.method('getHeaders', function() {
return [
{ "sTitle": "ID" ,"bVisible":false},
{ "sTitle": "Salary Component" },
{ "sTitle": "Amount"},
{ "sTitle": "Details"}
];
});
EmployeeSalaryAdapter.method('getFormFields', function() {
return [
[ "id", {"label":"ID","type":"hidden"}],
[ "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"}]
];
});

View File

@@ -0,0 +1,7 @@
import {
StaffDirectoryAdapter,
StaffDirectoryObjectAdapter,
} from './lib';
window.StaffDirectoryAdapter = StaffDirectoryAdapter;
window.StaffDirectoryObjectAdapter = StaffDirectoryObjectAdapter;

View File

@@ -0,0 +1,173 @@
/*
Copyright (c) 2018 [Glacies UG, Berlin, Germany] (http://glacies.de)
Developer: Thilina Hasantha (http://lk.linkedin.com/in/thilinah | https://github.com/thilinah)
*/
import AdapterBase from '../../../api/AdapterBase';
import ObjectAdapter from '../../../api/ObjectAdapter';
class StaffDirectoryAdapter extends AdapterBase {
getDataMapping() {
return [
'id',
'image',
'first_name',
'last_name',
'job_title',
'department',
'work_phone',
'work_email',
'joined_date',
];
}
getHeaders() {
return [
{ sTitle: 'ID', bVisible: false },
{ sTitle: '' },
{ sTitle: 'First Name' },
{ sTitle: 'Last Name' },
{ sTitle: 'Job Title' },
{ sTitle: 'Department' },
{ sTitle: 'Work Phone' },
{ sTitle: 'Work Email' },
{ sTitle: 'Joined Date' },
];
}
getFormFields() {
return [
['id', { label: 'ID', type: 'hidden', validation: '' }],
['first_name', { label: 'First Name', type: 'text', validation: '' }],
['last_name', { label: 'Last Name', type: 'text', validation: '' }],
['job_title', { label: 'Job Title', type: 'select2', 'remote-source': ['JobTitle', 'id', 'name'] }],
['department', { label: 'Department', type: 'select2', 'remote-source': ['CompanyStructure', 'id', 'title'] }],
['work_phone', { label: 'Work Phone', type: 'text', validation: 'none' }],
['work_email', { label: 'Work Email', type: 'placeholder', validation: 'emailOrEmpty' }],
['joined_date', { label: 'Joined Date', type: 'date', validation: '' }],
];
}
showActionButtons() {
return false;
}
getCustomTableParams() {
const that = this;
const dataTableParams = {
aoColumnDefs: [
{
fnRender(data, cell) {
try {
return that.preProcessRemoteTableData(data, cell, 1);
} catch (e) { return cell; }
},
aTargets: [1],
},
{
fnRender(data, cell) {
try {
return that.preProcessRemoteTableData(data, cell, 8);
} catch (e) { return cell; }
},
aTargets: [8],
},
],
};
return dataTableParams;
}
// eslint-disable-next-line consistent-return
preProcessRemoteTableData(data, cell, id) {
if (id === 8) {
if (cell === '0000-00-00 00:00:00' || cell === '' || cell === undefined || cell === null) {
return '';
}
return Date.parse(cell).toString('yyyy MMM d');
} if (id === 1) {
const tmp = '<img src="_img_" class="img-circle" style="width:45px;height: 45px;" alt="User Image">';
return tmp.replace('_img_', cell);
}
}
}
/*
StaffDirectoryObjectAdapter
*/
class StaffDirectoryObjectAdapter extends ObjectAdapter {
getDataMapping() {
return [
'id',
'image',
'first_name',
'last_name',
'job_title',
'department',
'work_phone',
'work_email',
'joined_date',
];
}
getHeaders() {
return [
{ sTitle: 'ID', bVisible: false },
{ sTitle: '' },
{ sTitle: 'First Name' },
{ sTitle: 'Last Name' },
{ sTitle: 'Job Title' },
{ sTitle: 'Department' },
{ sTitle: 'Work Phone' },
{ sTitle: 'Work Email' },
{ sTitle: 'Joined Date' },
];
}
getFormFields() {
return [
['id', { label: 'ID', type: 'hidden', validation: '' }],
['first_name', { label: 'First Name', type: 'text', validation: '' }],
['last_name', { label: 'Last Name', type: 'text', validation: '' }],
['job_title', { label: 'Job Title', type: 'select2', 'remote-source': ['JobTitle', 'id', 'name'] }],
['department', { label: 'Department', type: 'select2', 'remote-source': ['CompanyStructure', 'id', 'title'] }],
['work_phone', { label: 'Work Phone', type: 'text', validation: 'none' }],
['work_email', { label: 'Work Email', type: 'placeholder', validation: 'emailOrEmpty' }],
['joined_date', { label: 'Joined Date', type: 'date', validation: '' }],
];
}
// eslint-disable-next-line no-unused-vars
addDomEvents(object) {
}
getTemplateName() {
return 'element.html';
}
preProcessTableData(_row) {
const row = _row;
row.color = this.getColorByRandomString(row.first_name);
return row;
}
getFilters() {
return [
['job_title', {
label: 'Job Title', type: 'select2', 'allow-null': true, 'null-label': 'All Job Titles', 'remote-source': ['JobTitle', 'id', 'name'],
}],
['department', {
label: 'Department', type: 'select2', 'allow-null': true, 'null-label': 'All Departments', 'remote-source': ['CompanyStructure', 'id', 'title'],
}],
];
}
}
module.exports = {
StaffDirectoryAdapter,
StaffDirectoryObjectAdapter,
};

View File

@@ -1,966 +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 EmployeeTimeSheetAdapter(endPoint,tab,filter,orderBy) {
this.initAdapter(endPoint,tab,filter,orderBy);
}
EmployeeTimeSheetAdapter.inherits(AdapterBase);
this.currentTimesheetId = null;
this.currentTimesheet = null;
this.needStartEndTime = false;
EmployeeTimeSheetAdapter.method('getDataMapping', function() {
return [
"id",
"date_start",
"date_end",
"total_time",
"status"
];
});
EmployeeTimeSheetAdapter.method('getHeaders', function() {
return [
{ "sTitle": "ID" ,"bVisible":false},
{ "sTitle": "Start Date"},
{ "sTitle": "End Date"},
{ "sTitle": "Total Time"},
{ "sTitle": "Status"}
];
});
EmployeeTimeSheetAdapter.method('getFormFields', function() {
return [
[ "id", {"label":"ID","type":"hidden"}],
[ "date_start", {"label":"TimeSheet Start Date","type":"date","validation":""}],
[ "date_end", {"label":"TimeSheet End Date","type":"date","validation":""}],
[ "details", {"label":"Reason","type":"textarea","validation":"none"}]
];
});
EmployeeTimeSheetAdapter.method('preProcessTableData', function(row) {
row[1] = Date.parse(row[1]).toString('MMM d, yyyy (dddd)');
row[2] = Date.parse(row[2]).toString('MMM d, yyyy (dddd)');
return row;
});
EmployeeTimeSheetAdapter.method('setNeedStartEndTime', function(status) {
this.needStartEndTime = status;
});
EmployeeTimeSheetAdapter.method('renderForm', function(object) {
var formHtml = this.templates['formTemplate'];
$('#EmployeeTimesheetBlock').remove();
$("#"+this.getTableName()+'Form').html(formHtml);
$("#"+this.getTableName()+'Form').show();
$("#"+this.getTableName()).hide();
$('.timesheet_start').html(Date.parse(object.date_start).toString('MMM d, yyyy (dddd)'));
$('.timesheet_end').html(Date.parse(object.date_end).toString('MMM d, yyyy (dddd)'));
this.currentTimesheet = object;
this.getTimeEntries();
var st = Date.parse(object.date_start);
$('#EmployeeTimesheetBlock').fullCalendar({
header: {
//left: 'prev,next today',
left: false,
//center: 'title',
center: false,
//right: 'month,agendaWeek,agendaDay'
right: false
},
year: st.toString('yyyy'),
month: st.toString('M'),
date: st.toString('d'),
defaultView: 'basicWeek',
height:200,
editable: false,
events: modJs.getScheduleJsonUrl(this.currentTimesheet.employee),
loading: function(bool) {
if (bool) $('#loadingBlock').show();
else $('#loadingBlock').hide();
},
dayClick: function(date, jsEvent, view, resourceObj) {
modJs.renderFormByDate(date.format());
},
eventClick: function(calEvent, jsEvent, view) {
modJs.renderFormTimeEntryCalender(calEvent.id);
},
eventRender: function(event, element) {
element.find(".fc-time").remove();
}
});
$('#EmployeeTimesheetBlock').fullCalendar('gotoDate', st);
$('.fc-toolbar').hide();
});
EmployeeTimeSheetAdapter.method('quickEdit', function(id, status, sdate, edate) {
$('#Qtsheet').data('lastActiveTab', modJs.tab);
modJs = modJsList['tabQtsheet'];
modJs.setCurrentTimeSheetId(id);
$('.timesheet_start').html(sdate);
$('.timesheet_end').html(edate);
$("#timesheetTabs").find('.active').find('.reviewBlock.reviewBlockTable').hide();
$("#QtsheetHeader").show();
$("#Qtsheet").show();
$("#QtsheetDataButtons").show();
if(status == 'Submitted' || status == 'Approved'){
$(".completeBtnTable").hide();
$(".saveBtnTable").hide();
}else{
$(".completeBtnTable").show();
$(".saveBtnTable").show();
}
modJs.get([]);
});
EmployeeTimeSheetAdapter.method('getScheduleJsonUrl', function(employeeId) {
var url = this.moduleRelativeURL+"?a=ca&sa=getEmployeeTimeEntries&t="+this.table+"&mod=modules%3Dtime_sheets&e="+employeeId;
return url;
});
EmployeeTimeSheetAdapter.method('renderFormByDate', function (date) {
var start, end;
var origDate = date;
if(date.indexOf('T') < 0){
var s1 = moment();
date = date + " " + s1.format("HH:mm:ss");
}
start = date.replace('T',' ');
var m1 = moment(start);
m1.add(1,'h');
end = m1.format('YYYY-MM-DD HH:mm:ss');
var obj = {};
obj.date = origDate;
obj.date_start = start;
obj.date_end = end;
this.renderFormTimeEntryCalender(obj);
});
EmployeeTimeSheetAdapter.method('renderFormTimeEntryCalender', function(object) {
if (this.needStartEndTime+'' == '0') {
return;
}
this.openTimeEntryDialog(object);
if(object.id != undefined && object.id != null){
var cid = object.id;
$('.deleteBtnWorkSchedule').show();
$('.deleteBtnWorkSchedule').off().on('click',function(){
modJs.deleteRow(cid);
return false;
});
}else{
$('.deleteBtnWorkSchedule').remove();
}
});
EmployeeTimeSheetAdapter.method('openTimeEntryDialog', function(object) {
this.currentTimesheetId = this.currentId;
var obj = modJsList['tabEmployeeTimeEntry'];
$('#TimeEntryModel').modal({
backdrop: 'static',
keyboard: false
});
obj.currentTimesheet = this.currentTimesheet;
obj.renderForm(object);
obj.timesheetId = this.currentId;
});
EmployeeTimeSheetAdapter.method('closeTimeEntryDialog', function() {
$('#TimeEntryModel').modal('hide');
});
EmployeeTimeSheetAdapter.method('getTimeEntries', function() {
timesheetId = this.currentId;
var sourceMappingJson = JSON.stringify(modJsList['tabEmployeeTimeEntry'].getSourceMapping());
object = {"id":timesheetId,"sm":sourceMappingJson};
var reqJson = JSON.stringify(object);
var callBackData = [];
callBackData['callBackData'] = [];
callBackData['callBackSuccess'] = 'getTimeEntriesSuccessCallBack';
callBackData['callBackFail'] = 'getTimeEntriesFailCallBack';
this.customAction('getTimeEntries','modules=time_sheets',reqJson,callBackData);
});
EmployeeTimeSheetAdapter.method('getTimeEntriesSuccessCallBack', function(callBackData) {
var entries = callBackData;
var html = "";
var temp = '<tr><td><img class="tableActionButton" src="_BASE_images/delete.png" style="cursor:pointer;" rel="tooltip" title="Delete" onclick="modJsList[\'tabEmployeeTimeEntry\'].deleteRow(_id_);return false;"></img></td><td>_start_</td><td>_end_</td><td>_duration_</td><td>_project_</td><td>_details_</td>';
for(var i=0;i<entries.length;i++){
try{
var t = temp;
t = t.replace(/_start_/g,Date.parse(entries[i].date_start).toString('MMM d, yyyy [hh:mm tt]'));
t = t.replace(/_end_/g,Date.parse(entries[i].date_end).toString('MMM d, yyyy [hh:mm tt]'));
var mili = Date.parse(entries[i].date_end) - Date.parse(entries[i].date_start);
var minutes = Math.round(mili/60000);
var hourMinutes = (minutes % 60);
var hours = (minutes-hourMinutes)/60;
t = t.replace(/_duration_/g,"Hours ("+hours+") - Min ("+hourMinutes+")");
if(entries[i].project == 'null' || entries[i].project == null || entries[i].project == undefined){
t = t.replace(/_project_/g,"None");
}else{
t = t.replace(/_project_/g,entries[i].project);
}
t = t.replace(/_project_/g,entries[i].project);
t = t.replace(/_details_/g,entries[i].details);
t = t.replace(/_id_/g,entries[i].id);
t = t.replace(/_BASE_/g,this.baseUrl);
html += t;
}catch(e){}
}
$('.timesheet_entries_table_body').html(html);
if(modJs.getTableName() == 'SubEmployeeTimeSheetAll' || this.needStartEndTime+'' == '0'){
$('.submit_sheet').hide();
$('.add_time_sheet_entry').hide();
}else{
if(this.currentElement.status == 'Approved'){
$('.submit_sheet').hide();
$('.add_time_sheet_entry').hide();
}else{
$('.submit_sheet').show();
$('.add_time_sheet_entry').show();
}
}
$('#EmployeeTimesheetBlock').fullCalendar( 'refetchEvents' );
});
EmployeeTimeSheetAdapter.method('getTimeEntriesFailCallBack', function(callBackData) {
this.showMessage("Error", "Error occured while getting timesheet entries");
});
EmployeeTimeSheetAdapter.method('createPreviousTimesheet', function(id) {
object = {"id":id};
var reqJson = JSON.stringify(object);
var callBackData = [];
callBackData['callBackData'] = [];
callBackData['callBackSuccess'] = 'createPreviousTimesheetSuccessCallBack';
callBackData['callBackFail'] = 'createPreviousTimesheetFailCallBack';
this.customAction('createPreviousTimesheet','modules=time_sheets',reqJson,callBackData);
});
EmployeeTimeSheetAdapter.method('createPreviousTimesheetSuccessCallBack', function(callBackData) {
$('.tooltip').css("display","none");
$('.tooltip').remove();
//this.showMessage("Success", "Previous Timesheet created");
this.get([]);
});
EmployeeTimeSheetAdapter.method('createPreviousTimesheetFailCallBack', function(callBackData) {
this.showMessage("Error", callBackData);
});
EmployeeTimeSheetAdapter.method('changeTimeSheetStatusWithId', function(id, status) {
if(status == "" || status ==null || status == undefined){
this.showMessage("Status Error","Please select a status");
return;
}
object = {"id":id,"status":status};
var reqJson = JSON.stringify(object);
var callBackData = [];
callBackData['callBackData'] = [];
callBackData['callBackSuccess'] = 'changeTimeSheetStatusSuccessCallBack';
callBackData['callBackFail'] = 'changeTimeSheetStatusFailCallBack';
this.customAction('changeTimeSheetStatus','modules=time_sheets',reqJson,callBackData);
});
EmployeeTimeSheetAdapter.method('changeTimeSheetStatusSuccessCallBack', function(callBackData) {
this.showMessage("Successful", "Timesheet status changed successfully");
this.get([]);
});
EmployeeTimeSheetAdapter.method('changeTimeSheetStatusFailCallBack', function(callBackData) {
this.showMessage("Error", "Error occured while changing Timesheet status");
});
EmployeeTimeSheetAdapter.method('getActionButtonsHtml', function(id,data) {
var html = '';
if(this.needStartEndTime+'' == '0'){
html = '<div style="width:100px;">' +
'<img class="tableActionButton" src="_BASE_images/view.png" style="cursor:pointer;" rel="tooltip" title="Edit Timesheet Entries" onclick="modJs.edit(_id_);return false;"></img>' +
'<img class="tableActionButton" src="_BASE_images/edit.png" style="cursor:pointer;margin-left:15px;" rel="tooltip" title="Edit Timesheet Entries" onclick="modJs.quickEdit(_id_,\'_status_\',\'_sdate_\',\'_edate_\');return false;"></img>' +
'_redoBtn_'+
'</div>';
}else{
html = '<div style="width:80px;">' +
'<img class="tableActionButton" src="_BASE_images/edit.png" style="cursor:pointer;" rel="tooltip" title="Edit Timesheet Entries" onclick="modJs.edit(_id_);return false;"></img>' +
'_redoBtn_'+
'</div>';
}
if(this.getTableName() == "EmployeeTimeSheetAll"){
var redoBtn = '<img class="tableActionButton" src="_BASE_images/redo.png" style="cursor:pointer;margin-left:15px;" rel="tooltip" title="Create previous time sheet" onclick="modJs.createPreviousTimesheet(_id_);return false;"></img>';
html = html.replace(/_redoBtn_/g,redoBtn);
} else {
html = html.replace(/_redoBtn_/g,'');
}
html = html.replace(/_id_/g,id);
html = html.replace(/_sdate_/g,data[1]);
html = html.replace(/_edate_/g,data[2]);
html = html.replace(/_status_/g,data[4]);
html = html.replace(/_BASE_/g,this.baseUrl);
return html;
});
EmployeeTimeSheetAdapter.method('getCustomTableParams', function() {
var that = this;
var dataTableParams = {
"aoColumnDefs": [
{
"fnRender": function(data, cell){
return that.preProcessRemoteTableData(data, cell, 1)
} ,
"aTargets": [1]
},
{
"fnRender": function(data, cell){
return that.preProcessRemoteTableData(data, cell, 2)
} ,
"aTargets": [2]
},
{
"fnRender": that.getActionButtons,
"aTargets": [that.getDataMapping().length]
}
]
};
return dataTableParams;
});
EmployeeTimeSheetAdapter.method('preProcessRemoteTableData', function(data, cell, id) {
return Date.parse(cell).toString('MMM d, yyyy (dddd)');
});
/*
* Subordinate TimeSheets
*/
function SubEmployeeTimeSheetAdapter(endPoint,tab,filter,orderBy) {
this.initAdapter(endPoint,tab,filter,orderBy);
}
this.timeSheetStatusChangeId = null;
SubEmployeeTimeSheetAdapter.inherits(EmployeeTimeSheetAdapter);
SubEmployeeTimeSheetAdapter.method('getDataMapping', function() {
return [
"id",
"employee",
"date_start",
"date_end",
"status"
];
});
SubEmployeeTimeSheetAdapter.method('getHeaders', function() {
return [
{ "sTitle": "ID" ,"bVisible":false},
{ "sTitle": "Employee","bSearchable":true},
{ "sTitle": "Start Date","bSearchable":true},
{ "sTitle": "End Date","bSearchable":true},
{ "sTitle": "Status"}
];
});
SubEmployeeTimeSheetAdapter.method('getFormFields', function() {
return [
[ "id", {"label":"ID","type":"hidden"}],
[ "employee", {"label":"Employee","type":"select","allow-null":false,"remote-source":["Employee","id","first_name+last_name"]}],
[ "date_start", {"label":"TimeSheet Start Date","type":"date","validation":""}],
[ "date_end", {"label":"TimeSheet Start Date","type":"date","validation":""}],
[ "details", {"label":"Reason","type":"textarea","validation":"none"}]
];
});
SubEmployeeTimeSheetAdapter.method('isSubProfileTable', function() {
return true;
});
SubEmployeeTimeSheetAdapter.method('getCustomSuccessCallBack', function(serverData) {
var data = [];
var mapping = this.getDataMapping();
for(var i=0;i<serverData.length;i++){
var row = [];
for(var j=0;j<mapping.length;j++){
row[j] = serverData[i][mapping[j]];
}
data.push(this.preProcessTableData(row));
}
this.tableData = data;
this.createTable(this.getTableName());
$("#"+this.getTableName()+'Form').hide();
$("#"+this.getTableName()).show();
});
SubEmployeeTimeSheetAdapter.method('preProcessTableData', function(row) {
row[2] = Date.parse(row[2]).toString('MMM d, yyyy (dddd)');
row[3] = Date.parse(row[3]).toString('MMM d, yyyy (dddd)');
return row;
});
SubEmployeeTimeSheetAdapter.method('openTimeSheetStatus', function(timeSheetId,status) {
this.currentTimesheetId = timeSheetId;
$('#TimeSheetStatusModel').modal('show');
$('#timesheet_status').val(status);
this.timeSheetStatusChangeId = timeSheetId;
});
SubEmployeeTimeSheetAdapter.method('closeTimeSheetStatus', function() {
$('#TimeSheetStatusModel').modal('hide');
});
SubEmployeeTimeSheetAdapter.method('changeTimeSheetStatus', function() {
var timeSheetStatus = $('#timesheet_status').val();
this.changeTimeSheetStatusWithId(this.timeSheetStatusChangeId,timeSheetStatus);
this.closeTimeSheetStatus();
this.timeSheetStatusChangeId = null;
});
SubEmployeeTimeSheetAdapter.method('getActionButtonsHtml', function(id,data) {
var html;
if(this.needStartEndTime+'' == '0'){
html = '<div style="width:100px;">' +
'<img class="tableActionButton" src="_BASE_images/view.png" style="cursor:pointer;" rel="tooltip" title="Edit Timesheet Entries" onclick="modJs.edit(_id_);return false;"></img>' +
'<img class="tableActionButton" src="_BASE_images/edit.png" style="cursor:pointer;margin-left:15px;" rel="tooltip" title="Edit Timesheet Entries" onclick="modJs.quickEdit(_id_,\'_status_\',\'_sdate_\',\'_edate_\');return false;"></img>' +
'<img class="tableActionButton" src="_BASE_images/run.png" style="cursor:pointer;margin-left:15px;" rel="tooltip" title="Change TimeSheet Status" onclick="modJs.openTimeSheetStatus(_id_,\'_status_\');return false;"></img>' +
'</div>';
}else{
html = '<div style="width:80px;">' +
'<img class="tableActionButton" src="_BASE_images/edit.png" style="cursor:pointer;" rel="tooltip" title="Edit Timesheet Entries" onclick="modJs.edit(_id_);return false;"></img>' +
'<img class="tableActionButton" src="_BASE_images/run.png" style="cursor:pointer;margin-left:15px;" rel="tooltip" title="Change TimeSheet Status" onclick="modJs.openTimeSheetStatus(_id_,\'_status_\');return false;"></img>' +
'</div>';
}
html = html.replace(/_id_/g,id);
html = html.replace(/_BASE_/g,this.baseUrl);
html = html.replace(/_sdate_/g,data[1]);
html = html.replace(/_edate_/g,data[2]);
html = html.replace(/_status_/g,data[4]);
return html;
});
SubEmployeeTimeSheetAdapter.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": that.getActionButtons,
"aTargets": [that.getDataMapping().length]
}
]
};
return dataTableParams;
});
SubEmployeeTimeSheetAdapter.method('getFilters', function() {
return [
[ "employee", {"label":"Employee","type":"select2","allow-null":true,"null-label":"All Employees","remote-source":["Employee","id","first_name+last_name"]}],
[ "status", {"label":"Status","type":"select","allow-null":true,"null-label":"All","source":[["Submitted","Submitted"],["Pending","Pending"],["Approved","Approved"], ["Rejected","Rejected"]]}],
];
});
/**
* EmployeeTimeEntryAdapter
*/
function EmployeeTimeEntryAdapter(endPoint,tab,filter,orderBy) {
this.initAdapter(endPoint,tab,filter,orderBy);
}
EmployeeTimeEntryAdapter.inherits(AdapterBase);
this.timesheetId = null;
this.currentTimesheet = null;
this.allProjectsAllowed = 1;
this.employeeProjects = [];
EmployeeTimeEntryAdapter.method('getDataMapping', function() {
return [
"id",
"project",
"date_start",
"time_start",
"date_end",
"time_end",
"details"
];
});
EmployeeTimeEntryAdapter.method('getHeaders', function() {
return [
{ "sTitle": "ID" ,"bVisible":false},
{ "sTitle": "Project"},
{ "sTitle": "Start Date"},
{ "sTitle": "Start Time"},
{ "sTitle": "End Date"},
{ "sTitle": "End Time"},
{ "sTitle": "Details"}
];
});
EmployeeTimeEntryAdapter.method('getFormFields', function() {
return [
[ "id", {"label":"ID","type":"hidden"}],
[ "project", {"label":"Project","type":"select2","allow-null":false,"remote-source":["Project","id","name","getEmployeeProjects"]}],
[ "date_select", {"label":"Date","type":"select","source":[]}],
[ "date_start", {"label":"Start Time","type":"time","validation":""}],
[ "date_end", {"label":"End Time","type":"time","validation":""}],
[ "details", {"label":"Details","type":"textarea","validation":""}]
];
});
EmployeeTimeEntryAdapter.method('getDates', function(startDate, stopDate) {
var dateArray = new Array();
var currentDate = startDate;
while (currentDate <= stopDate) {
dateArray.push( new Date (currentDate) );
currentDate = currentDate.add({ days: 1 });
}
return dateArray;
});
EmployeeTimeEntryAdapter.method('renderForm', function(object) {
var formHtml = this.getCustomTemplate('time_entry_form.html');
formHtml = formHtml.replace(/modJs/g,"modJsList['tabEmployeeTimeEntry']");
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]);
}
}
}
//append dates
//var dateStart = new Date(this.currentTimesheet.date_start);
//var dateStop = new Date(this.currentTimesheet.date_end);
//var datesArray = this.getDates(dateStart, dateStop);
var optionList = "";
for(var i=0; i<this.currentTimesheet.days.length; i++){
var k = this.currentTimesheet.days[i];
//optionList += '<option value="'+timeUtils.getMySQLFormatDate(k)+'">'+k.toUTCString().slice(0, -13)+'</option>';
optionList += '<option value="'+k[0]+'">'+k[1]+'</option>';
}
formHtml = formHtml.replace(/_id_/g,this.getTableName()+"_submit");
formHtml = formHtml.replace(/_fields_/g,html);
$("#"+this.getTableName()+'Form').html(formHtml);
$("#"+this.getTableName()+'Form').show();
$("#"+this.getTableName()).hide();
$("#"+this.getTableName()+'Form .datefield').datepicker({'viewMode':2});
$("#"+this.getTableName()+'Form .datetimefield').datetimepicker({
language: 'en'
});
$("#"+this.getTableName()+'Form .timefield').datetimepicker({
language: 'en',
pickDate: false
});
$("#"+this.getTableName()+'Form .select2Field').select2();
$("#date_select").html(optionList);
if(object != undefined && object != null){
this.fillForm(object);
}
});
EmployeeTimeEntryAdapter.method('fillForm', function(object, formId, fields) {
if(formId == null || formId == undefined || formId == ""){
formId = "#"+this.getTableName()+'Form';
}
if(object.id != null && object.id != undefined){
$(formId + ' #id').val(object.id);
}
if(object.project != null && object.project != undefined){
$(formId + ' #project').select2('val',object.project);
}
if(object.date != null && object.date != undefined){
$(formId + ' #date_select').val(object.date);
}
});
EmployeeTimeEntryAdapter.method('cancel', function() {
$('#TimeEntryModel').modal('hide');
});
EmployeeTimeEntryAdapter.method('setAllProjectsAllowed', function(allProjectsAllowed) {
this.allProjectsAllowed = allProjectsAllowed;
});
EmployeeTimeEntryAdapter.method('setEmployeeProjects', function(employeeProjects) {
this.employeeProjects = employeeProjects;
});
EmployeeTimeEntryAdapter.method('save', function() {
var validator = new FormValidation(this.getTableName()+"_submit",true,{'ShowPopup':false,"LabelErrorClass":"error"});
if(validator.checkValues()){
var params = validator.getFormParameters();
$(params).attr('timesheet',this.timesheetId);
params.time_start = params.date_start;
params.time_end = params.date_end;
params.date_start = params.date_select+" "+params.date_start;
params.date_end = params.date_select+" "+params.date_end;
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,[]);
this.cancel();
}else{
$("#"+this.getTableName()+'Form .label').html(msg);
$("#"+this.getTableName()+'Form .label').show();
}
}
});
EmployeeTimeEntryAdapter.method('doCustomValidation', function(params) {
var st = Date.parse(params.date_start);
var et = Date.parse(params.date_end);
if(st.compareTo(et) != -1){
return "Start time should be less than End time";
}
/*
var sd = Date.parse(this.currentTimesheet.date_start);
var ed = Date.parse(this.currentTimesheet.date_end).addDays(1);
if(sd.compareTo(et) != -1 || sd.compareTo(st) > 0 || st.compareTo(ed) != -1 || et.compareTo(ed) != -1){
return "Start time and end time shoud be with in " + sd.toString('MMM d, yyyy (dddd)') + " and " + ed.toString('MMM d, yyyy (dddd)');
}
*/
return null;
});
EmployeeTimeEntryAdapter.method('addSuccessCallBack', function(callBackData,serverData) {
this.get(callBackData);
modJs.getTimeEntries();
});
EmployeeTimeEntryAdapter.method('deleteRow', function(id) {
this.deleteObj(id,[]);
});
EmployeeTimeEntryAdapter.method('deleteSuccessCallBack', function(callBackData,serverData) {
modJs.getTimeEntries();
});
/**
* QtsheetAdapter
*/
function QtsheetAdapter(endPoint) {
this.initAdapter(endPoint);
this.cellDataUpdates = {};
this.currentId = null;
}
QtsheetAdapter.inherits(TableEditAdapter);
QtsheetAdapter.method('validateCellValue', function(element, evt, newValue) {
if ( !ValidationRules.float(newValue)) {
return false;
}
var val = parseFloat(newValue);
if(val < 0 || val > 24){
return false;
}
//Update total
//Find current column number
//Adding 2 because nth child is based on 1 and we are adding a virtual column for row names
var coldNum = this.columnIDMap[element.data('colId')] + 2;
var columnTotal = 0;
var columnTotalWithoutCurrent = 0;
$("#"+this.getTableName()+' tr td:nth-child('+coldNum+')').each(function(){
var rowId = $(this).data('rowId');
var tval = '';
if(element.data('rowId') == rowId){
tval = newValue;
}else{
tval = $(this).html();
}
if(rowId != -1){
if(ValidationRules.float(tval)){
columnTotal += parseFloat(tval);
if(element.data('rowId') != rowId){
columnTotalWithoutCurrent += parseFloat(tval);
}
}
}else{
if(columnTotal > 24){
$(this).html(columnTotalWithoutCurrent);
}else{
$(this).html(columnTotal);
}
}
});
if(columnTotal > 24){
return false;
}
modJs.addCellDataUpdate(element.data('colId'),element.data('rowId'),newValue);
return true;
});
QtsheetAdapter.method('setCurrentTimeSheetId', function(val) {
this.currentId = val;
this.cellDataUpdates = {};
});
QtsheetAdapter.method('addAdditionalRequestData' , function(type, req) {
if(type == 'updateData'){
req.currentId = this.currentId;
}else if(type == 'updateAllData'){
req.currentId = this.currentId;
}else if(type == 'getAllData'){
req.currentId = this.currentId;
}
return req;
});
QtsheetAdapter.method('modifyCSVHeader', function(header) {
header.unshift("");
return header;
});
QtsheetAdapter.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;
});
QtsheetAdapter.method('downloadTimesheet' , function() {
var element = document.createElement('a');
element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(this.getCSVData()));
element.setAttribute('download', "payroll_"+this.currentId+".csv");
element.style.display = 'none';
document.body.appendChild(element);
element.click();
document.body.removeChild(element);
});
QtsheetAdapter.method('createTable', function(elementId) {
var data = this.getTableData();
var headers = this.getHeaders();
if(this.showActionButtons()){
headers.push({ "sTitle": "", "sClass": "center" });
}
if(this.showActionButtons()){
for(var i=0;i<data.length;i++){
data[i].push(this.getActionButtonsHtml(data[i][0],data[i]));
}
}
var html = "";
html = this.getTableTopButtonHtml()+'<div class="box-body table-responsive"><table cellpadding="0" cellspacing="0" border="0" class="table table-bordered table-striped" id="grid"></table></div>';
//Find current page
var activePage = $('#'+elementId +" .dataTables_paginate .active a").html();
var start = 0;
if(activePage != undefined && activePage != null){
start = parseInt(activePage, 10)*100 - 100;
}
$('#'+elementId).html(html);
var dataTableParams = {
"oLanguage": {
"sLengthMenu": "_MENU_ records per page"
},
"aaData": data,
"aoColumns": headers,
"bSort": false,
"iDisplayLength": 100,
"iDisplayStart": start
};
var customTableParams = this.getCustomTableParams();
$.extend(dataTableParams, customTableParams);
$('#'+elementId+' #grid').dataTable( dataTableParams );
$('#'+elementId+' #grid tr:last').find('td').removeClass('editcell');
$(".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();
$('#'+elementId+' #grid').editableTableWidget();
$('#'+elementId+' #grid .editcell').on('validate', function(evt, newValue) {
return modJs.validateCellValue($(this), evt, newValue);
});
});

View File

@@ -1,241 +0,0 @@
/*
This file is part of iCE Hrm.
Original work Copyright (c) 2012 [Gamonoid Media Pvt. Ltd]
Developer: Thilina Hasantha (thilina.hasantha[at]gmail.com / facebook.com/thilinah)
*/
function EmployeeImmigrationAdapter(endPoint) {
this.initAdapter(endPoint);
}
EmployeeImmigrationAdapter.inherits(AdapterBase);
EmployeeImmigrationAdapter.method('getDataMapping', function() {
return [
"id",
"document",
"documentname",
"valid_until",
"status"
];
});
EmployeeImmigrationAdapter.method('getHeaders', function() {
return [
{ "sTitle": "ID" ,"bVisible":false},
{ "sTitle": "Document" },
{ "sTitle": "Document Id" },
{ "sTitle": "Valid Until"},
{ "sTitle": "Status"}
];
});
EmployeeImmigrationAdapter.method('getFormFields', function() {
return [
[ "id", {"label":"ID","type":"hidden"}],
[ "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"}]
];
});
function EmployeeTravelRecordAdapter(endPoint,tab,filter,orderBy) {
this.initAdapter(endPoint,tab,filter,orderBy);
this.itemName = 'Travel';
this.itemNameLower = 'employeetravelrecord';
this.modulePathName = 'travel';
}
EmployeeTravelRecordAdapter.inherits(ApproveModuleAdapter);
EmployeeTravelRecordAdapter.method('getDataMapping', function() {
return [
"id",
"type",
"purpose",
"travel_from",
"travel_to",
"travel_date",
"return_date",
"status"
];
});
EmployeeTravelRecordAdapter.method('getHeaders', function() {
return [
{ "sTitle": "ID" ,"bVisible":false},
{ "sTitle": "Travel Type" },
{ "sTitle": "Purpose" },
{ "sTitle": "From"},
{ "sTitle": "To"},
{ "sTitle": "Travel Date"},
{ "sTitle": "Return Date"},
{ "sTitle": "Status"}
];
});
EmployeeTravelRecordAdapter.method('getFormFields', function() {
return this.addCustomFields([
["id", {"label": "ID", "type": "hidden"}],
["type", {
"label": "Means of Transportation",
"type": "select",
"source": [
["Plane", "Plane"],
["Rail", "Rail"],
["Taxi", "Taxi"],
["Own Vehicle", "Own Vehicle"],
["Rented Vehicle", "Rented Vehicle"],
["Other", "Other"]
]
}],
["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", "default":"0.00", "mask":"9{0,10}.99"}],
["attachment1", {"label": "Attachment", "type": "fileupload", "validation": "none"}],
["attachment2", {"label": "Attachment", "type": "fileupload", "validation": "none"}],
["attachment3", {"label": "Attachment", "type": "fileupload", "validation": "none"}]
]);
});
/*
EmployeeTravelRecordAdapter.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 requestCancellationButton = '<img class="tableActionButton" src="_BASE_images/delete.png" style="margin-left:15px;cursor:pointer;" rel="tooltip" title="Cancel Travel Request" onclick="modJs.cancelTravel(_id_);return false;"></img>';
var html = '<div style="width:80px;">_edit__delete_</div>';
if(this.showDelete){
if(data[7] == "Approved"){
html = html.replace('_delete_',requestCancellationButton);
}else{
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;
});
EmployeeTravelRecordAdapter.method('cancelTravel', function(id) {
var that = this;
var object = {};
object['id'] = id;
var reqJson = JSON.stringify(object);
var callBackData = [];
callBackData['callBackData'] = [];
callBackData['callBackSuccess'] = 'cancelSuccessCallBack';
callBackData['callBackFail'] = 'cancelFailCallBack';
this.customAction('cancelTravel','modules=travel',reqJson,callBackData);
});
EmployeeTravelRecordAdapter.method('cancelSuccessCallBack', function(callBackData) {
this.showMessage("Successful", "Travel request cancellation request sent");
this.get([]);
});
EmployeeTravelRecordAdapter.method('cancelFailCallBack', function(callBackData) {
this.showMessage("Error Occurred while cancelling Travel request", callBackData);
});
*/
/*
EmployeeTravelRecordApproverAdapter
*/
function EmployeeTravelRecordApproverAdapter(endPoint,tab,filter,orderBy) {
this.initAdapter(endPoint,tab,filter,orderBy);
this.itemName = 'Travel';
this.itemNameLower = 'employeetravelrecord';
this.modulePathName = 'travel';
}
EmployeeTravelRecordApproverAdapter.inherits(EmployeeTravelRecordAdminAdapter);
EmployeeTravelRecordApproverAdapter.method('getActionButtonsHtml', function(id,data) {
var statusChangeButton = '<img class="tableActionButton" src="_BASE_images/run.png" style="cursor:pointer;" rel="tooltip" title="Change Status" onclick="modJs.openStatus(_id_, \'_cstatus_\');return false;"></img>';
var viewLogsButton = '<img class="tableActionButton" src="_BASE_images/log.png" style="margin-left:15px;cursor:pointer;" rel="tooltip" title="View Logs" onclick="modJs.getLogs(_id_);return false;"></img>';
var html = '<div style="width:80px;">_status__logs_</div>';
html = html.replace('_logs_',viewLogsButton);
if(data[this.getStatusFieldPosition()] == 'Processing'){
html = html.replace('_status_',statusChangeButton);
}else{
html = html.replace('_status_','');
}
html = html.replace(/_id_/g,id);
html = html.replace(/_BASE_/g,this.baseUrl);
html = html.replace(/_cstatus_/g,data[this.getStatusFieldPosition()]);
return html;
});
EmployeeTravelRecordApproverAdapter.method('getStatusOptionsData', function(currentStatus) {
var data = {};
if(currentStatus != 'Processing'){
}else{
data["Approved"] = "Approved";
data["Rejected"] = "Rejected";
}
return data;
});
EmployeeTravelRecordApproverAdapter.method('getStatusOptions', function(currentStatus) {
return this.generateOptions(this.getStatusOptionsData(currentStatus));
});
/*
SubordinateExpenseModuleAdapter
*/
function SubordinateEmployeeTravelRecordAdapter(endPoint,tab,filter,orderBy) {
this.initAdapter(endPoint,tab,filter,orderBy);
this.itemName = 'Travel';
this.itemNameLower = 'employeetravelrecord';
this.modulePathName = 'travel';
}
SubordinateEmployeeTravelRecordAdapter.inherits(EmployeeTravelRecordAdminAdapter);

View File

@@ -5112,4 +5112,4 @@ fieldset[disabled] .btn-vk.active {
}
.control-sidebar-light .control-sidebar-menu > li > a .menu-info > p {
color: #5e5e5e;
}
}

View File

@@ -1,250 +0,0 @@
/* Set the defaults for DataTables initialisation */
$.extend( true, $.fn.dataTable.defaults, {
"sDom":
"<'row'<'col-xs-6'l><'col-xs-6'f>r>"+
"t"+
"<'row'<'col-xs-6'i><'col-xs-6'p>>",
"oLanguage": {
"sLengthMenu": "_MENU_ records per page"
}
} );
/* Default class modification */
$.extend( $.fn.dataTableExt.oStdClasses, {
"sWrapper": "dataTables_wrapper form-inline",
"sFilterInput": "form-control input-sm",
"sLengthSelect": "form-control input-sm"
} );
// In 1.10 we use the pagination renderers to draw the Bootstrap paging,
// rather than custom plug-in
if ( $.fn.dataTable.Api ) {
$.fn.dataTable.defaults.renderer = 'bootstrap';
$.fn.dataTable.ext.renderer.pageButton.bootstrap = function ( settings, host, idx, buttons, page, pages ) {
var api = new $.fn.dataTable.Api( settings );
var classes = settings.oClasses;
var lang = settings.oLanguage.oPaginate;
var btnDisplay, btnClass;
var attach = function( container, buttons ) {
var i, ien, node, button;
var clickHandler = function ( e ) {
e.preventDefault();
if ( e.data.action !== 'ellipsis' ) {
api.page( e.data.action ).draw( false );
}
};
for ( i=0, ien=buttons.length ; i<ien ; i++ ) {
button = buttons[i];
if ( $.isArray( button ) ) {
attach( container, button );
}
else {
btnDisplay = '';
btnClass = '';
switch ( button ) {
case 'ellipsis':
btnDisplay = '&hellip;';
btnClass = 'disabled';
break;
case 'first':
btnDisplay = lang.sFirst;
btnClass = button + (page > 0 ?
'' : ' disabled');
break;
case 'previous':
btnDisplay = lang.sPrevious;
btnClass = button + (page > 0 ?
'' : ' disabled');
break;
case 'next':
btnDisplay = lang.sNext;
btnClass = button + (page < pages-1 ?
'' : ' disabled');
break;
case 'last':
btnDisplay = lang.sLast;
btnClass = button + (page < pages-1 ?
'' : ' disabled');
break;
default:
btnDisplay = button + 1;
btnClass = page === button ?
'active' : '';
break;
}
if ( btnDisplay ) {
node = $('<li>', {
'class': classes.sPageButton+' '+btnClass,
'aria-controls': settings.sTableId,
'tabindex': settings.iTabIndex,
'id': idx === 0 && typeof button === 'string' ?
settings.sTableId +'_'+ button :
null
} )
.append( $('<a>', {
'href': '#'
} )
.html( btnDisplay )
)
.appendTo( container );
settings.oApi._fnBindAction(
node, {action: button}, clickHandler
);
}
}
}
};
attach(
$(host).empty().html('<ul class="pagination"/>').children('ul'),
buttons
);
}
}
else {
// Integration for 1.9-
$.fn.dataTable.defaults.sPaginationType = 'bootstrap';
/* API method to get paging information */
$.fn.dataTableExt.oApi.fnPagingInfo = function ( oSettings )
{
return {
"iStart": oSettings._iDisplayStart,
"iEnd": oSettings.fnDisplayEnd(),
"iLength": oSettings._iDisplayLength,
"iTotal": oSettings.fnRecordsTotal(),
"iFilteredTotal": oSettings.fnRecordsDisplay(),
"iPage": oSettings._iDisplayLength === -1 ?
0 : Math.ceil( oSettings._iDisplayStart / oSettings._iDisplayLength ),
"iTotalPages": oSettings._iDisplayLength === -1 ?
0 : Math.ceil( oSettings.fnRecordsDisplay() / oSettings._iDisplayLength )
};
};
/* Bootstrap style pagination control */
$.extend( $.fn.dataTableExt.oPagination, {
"bootstrap": {
"fnInit": function( oSettings, nPaging, fnDraw ) {
var oLang = oSettings.oLanguage.oPaginate;
var fnClickHandler = function ( e ) {
e.preventDefault();
if ( oSettings.oApi._fnPageChange(oSettings, e.data.action) ) {
fnDraw( oSettings );
}
};
$(nPaging).append(
'<ul class="pagination">'+
'<li class="prev disabled"><a href="#">&larr; '+oLang.sPrevious+'</a></li>'+
'<li class="next disabled"><a href="#">'+oLang.sNext+' &rarr; </a></li>'+
'</ul>'
);
var els = $('a', nPaging);
$(els[0]).bind( 'click.DT', { action: "previous" }, fnClickHandler );
$(els[1]).bind( 'click.DT', { action: "next" }, fnClickHandler );
},
"fnUpdate": function ( oSettings, fnDraw ) {
var iListLength = 5;
var oPaging = oSettings.oInstance.fnPagingInfo();
var an = oSettings.aanFeatures.p;
var i, ien, j, sClass, iStart, iEnd, iHalf=Math.floor(iListLength/2);
if ( oPaging.iTotalPages < iListLength) {
iStart = 1;
iEnd = oPaging.iTotalPages;
}
else if ( oPaging.iPage <= iHalf ) {
iStart = 1;
iEnd = iListLength;
} else if ( oPaging.iPage >= (oPaging.iTotalPages-iHalf) ) {
iStart = oPaging.iTotalPages - iListLength + 1;
iEnd = oPaging.iTotalPages;
} else {
iStart = oPaging.iPage - iHalf + 1;
iEnd = iStart + iListLength - 1;
}
for ( i=0, ien=an.length ; i<ien ; i++ ) {
// Remove the middle elements
$('li:gt(0)', an[i]).filter(':not(:last)').remove();
// Add the new list items and their event handlers
for ( j=iStart ; j<=iEnd ; j++ ) {
sClass = (j==oPaging.iPage+1) ? 'class="active"' : '';
$('<li '+sClass+'><a href="#">'+j+'</a></li>')
.insertBefore( $('li:last', an[i])[0] )
.bind('click', function (e) {
e.preventDefault();
oSettings._iDisplayStart = (parseInt($('a', this).text(),10)-1) * oPaging.iLength;
fnDraw( oSettings );
} );
}
// Add / remove disabled classes from the static elements
if ( oPaging.iPage === 0 ) {
$('li:first', an[i]).addClass('disabled');
} else {
$('li:first', an[i]).removeClass('disabled');
}
if ( oPaging.iPage === oPaging.iTotalPages-1 || oPaging.iTotalPages === 0 ) {
$('li:last', an[i]).addClass('disabled');
} else {
$('li:last', an[i]).removeClass('disabled');
}
}
}
}
} );
}
/*
* TableTools Bootstrap compatibility
* Required TableTools 2.1+
*/
if ( $.fn.DataTable.TableTools ) {
// Set the classes that TableTools uses to something suitable for Bootstrap
$.extend( true, $.fn.DataTable.TableTools.classes, {
"container": "DTTT btn-group",
"buttons": {
"normal": "btn btn-default",
"disabled": "disabled"
},
"collection": {
"container": "DTTT_dropdown dropdown-menu",
"buttons": {
"normal": "",
"disabled": "disabled"
}
},
"print": {
"info": "DTTT_print_info modal"
},
"select": {
"row": "active"
}
} );
// Have the collection use a bootstrap compatible dropdown
$.extend( true, $.fn.DataTable.TableTools.DEFAULTS.oTags, {
"collection": {
"container": "ul",
"button": "li",
"liner": "a"
}
} );
}

File diff suppressed because it is too large Load Diff